<?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>14750</bug_id>
          
          <creation_ts>2007-07-24 10:27:35 -0700</creation_ts>
          <short_desc>[gtk] Implement plugin support in GTK backend</short_desc>
          <delta_ts>2008-05-06 04:28:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bastien Nocera">bugzilla</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alp</cc>
    
    <cc>andersca</cc>
    
    <cc>bugzilla</cc>
    
    <cc>christian</cc>
    
    <cc>chuanhsing</cc>
    
    <cc>gb.devel</cc>
    
    <cc>hausmann</cc>
    
    <cc>hendry</cc>
    
    <cc>jasper</cc>
    
    <cc>jcverdie</cc>
    
    <cc>ken</cc>
    
    <cc>marc.ordinasillopis</cc>
    
    <cc>mh+webkit</cc>
    
    <cc>mike.emmel</cc>
    
    <cc>mrowe</cc>
    
    <cc>patrys</cc>
    
    <cc>sandshrew</cc>
    
    <cc>sriram.neelakandan</cc>
    
    <cc>sven</cc>
    
    <cc>tofu.linden</cc>
    
    <cc>voyageursp</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3809</commentid>
    <comment_count>0</comment_count>
    <who name="Bastien Nocera">bugzilla</who>
    <bug_when>2007-07-24 10:27:35 -0700</bug_when>
    <thetext>The GTK+ backend currently doesn&apos;t implement any plug-ins support. It should do so probably supporting the old NPAPI with XEmbed and GTK2 support, as well as using the more native API used by other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59934</commentid>
    <comment_count>1</comment_count>
    <who name="Kai Hendry">hendry</who>
    <bug_when>2007-10-31 08:02:43 -0700</bug_when>
    <thetext>Jean-Charles VERDIE from Pleyo (they are doing some mobile Webkit port) mentioned that he might be working on plugin support. I wonder if there is any overlap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59935</commentid>
    <comment_count>2</comment_count>
    <who name="Jean-Charles Verdié">jcverdie</who>
    <bug_when>2007-10-31 08:15:46 -0700</bug_when>
    <thetext>To be clearer: We are trying to understand what has been done on the windows port, split the common part and the specific part, then to understand how it works and give this code back to webkit to make it possible to implement using different backend while we won&apos;t do more than re-implementing Windows (for testing purposes) and our own &quot;owBal&quot; implementation (ours at sand-labs.org)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59951</commentid>
    <comment_count>3</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-10-31 14:07:25 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; To be clearer: We are trying to understand what has been done on the windows
&gt; port, split the common part and the specific part, then to understand how it
&gt; works and give this code back to webkit to make it possible to implement using
&gt; different backend while we won&apos;t do more than re-implementing Windows (for
&gt; testing purposes) and our own &quot;owBal&quot; implementation (ours at sand-labs.org)

Is this plug-in code viewable somewhere?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60084</commentid>
    <comment_count>4</comment_count>
      <attachid>16998</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-11-02 14:41:22 -0700</bug_when>
    <thetext>Created attachment 16998
Start at plug-ins patch

Here is my patch which mostly implements everything needed for plug-ins to work. It&apos;s got some debug printfs() lying around, and the code isn&apos;t perfectly matching the style guide yet. If flash is found, it will crash the browser on pages that use it. Flash requires use of X toolkit bits still, and without these, it simply just crashes whatever loads it. Implementing this requires a custom widget to integrate the necessary bits with GTK+. Unfortunately, the GtkSocket I&apos;m trying to use isn&apos;t getting sized properly or rendered on screen. It seems to get parented, mapped, and the plug-in seems to get embedded. But, the size never gets allocated to anything &gt; 1x1, with a position of -1,-1. I need to get this widget to embed and render properly before I can really do anything else, unfortunately. Feel free to try the patch though. It would be great if someone could figure out why it&apos;s not working right. I still don&apos;t understand exactly how the WebKitPage parenting and stuff is supposed to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60328</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-11-05 13:22:58 -0800</bug_when>
    <thetext>Alp helped Rodney work out the issue with the widget sizing/positioning, and I think he&apos;s back underway on his plugin patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61115</commentid>
    <comment_count>6</comment_count>
      <attachid>17239</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-11-13 13:40:15 -0800</bug_when>
    <thetext>Created attachment 17239
Update plug-ins patch

Here is an updated version of the plug-ins patch. This version only supports Xt windowed plug-ins. Next version of the patch will support both. Adobe Flash 9 works with this version. You can watch the videos on http://homestarrunner.com/ . Youtube and similar flash video player sites will load the flash, but only stream the first N bytes of the actual video to the player. This is because the PluginStreamGtk code is not fully complete. Hopefully I should have it fixed in the next version also. I&apos;m also having trouble getting the Xt plug-ins to scroll correctly. It doesn&apos;t seem to update the position properly. But all in all it&apos;s nice to see flash working. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61217</commentid>
    <comment_count>7</comment_count>
      <attachid>17273</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-11-14 10:55:35 -0800</bug_when>
    <thetext>Created attachment 17273
Updated patch for the Shared type removal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61246</commentid>
    <comment_count>8</comment_count>
    <who name="Nigel Tao">nigel.tao.gnome</who>
    <bug_when>2007-11-14 15:24:34 -0800</bug_when>
    <thetext>Just with the patch, please replace tabs by spaces.  http://webkit.org/coding/coding-style.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61305</commentid>
    <comment_count>9</comment_count>
      <attachid>17297</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-11-15 09:45:41 -0800</bug_when>
    <thetext>Created attachment 17297
Updated patch to handle XEmbed and Xt plug-ins both

Ok. Here is an updated version of the patch. It handles both XEmbed and Xt plug-ins the same way gecko does, by checking the value of NPPVneedsXEmbed with the plug-in&apos;s GetValue implementation. I&apos;d like to start splitting up the patch logically now and getting some pieces in. Perhaps the PluginDatabaseGtk impl and the ability to build with XP_UNIX enabled (but only when building for X11). Are there standard locations for plug-ins on win32 and osx that we should be checking? I&apos;d like to get that support in PluginDatabaseGtk also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>62514</commentid>
    <comment_count>10</comment_count>
    <who name="Kai Hendry">hendry</who>
    <bug_when>2007-11-27 15:25:10 -0800</bug_when>
    <thetext>Built and tested dobey&apos;s &quot;Updated patch to handle XEmbed and Xt plug-ins both&quot; patch with a r27911 WebKit checkout.

Macromedia Flash playback on YouTube worked. =)

Be good to start merging this patch in. I hope to help dobey to improve the NPAPI implementation with some scriptability tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63945</commentid>
    <comment_count>11</comment_count>
      <attachid>17851</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-11 10:44:03 -0800</bug_when>
    <thetext>Created attachment 17851
Updated to build against trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64050</commentid>
    <comment_count>12</comment_count>
      <attachid>17869</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-12 14:01:35 -0800</bug_when>
    <thetext>Created attachment 17869
Updated patch for KURL class changes and without other patches included

This is an updated version of the patch for the changes to the KURL class. This version of the patch also does not include changes from other patches, as previous versions did. You will need the patches in the bugs I&apos;m adding as dependencies as well for a full experience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64051</commentid>
    <comment_count>13</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-12 14:03:36 -0800</bug_when>
    <thetext>I can&apos;t change the DependsOn field it seems, so you will need the patches from bugs #16389 #15669 and #16071 as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64107</commentid>
    <comment_count>14</comment_count>
      <attachid>17880</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-13 13:56:33 -0800</bug_when>
    <thetext>Created attachment 17880
Updated Giant Patch With Everything

There are still some conflicts between patches, so here is another huge patch with all the changes needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64522</commentid>
    <comment_count>15</comment_count>
      <attachid>17963</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-17 07:58:30 -0800</bug_when>
    <thetext>Created attachment 17963
Updated giant patch for trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64632</commentid>
    <comment_count>16</comment_count>
      <attachid>17973</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-18 09:16:21 -0800</bug_when>
    <thetext>Created attachment 17973
Updated patch for trunk today</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64635</commentid>
    <comment_count>17</comment_count>
      <attachid>17974</attachid>
    <who name="Kai Hendry">hendry</who>
    <bug_when>2007-12-18 09:26:32 -0800</bug_when>
    <thetext>Created attachment 17974
NPAPI scriptability test

http://wiki.webvm.net/ is the site where the Aplix Corporation is co-ordinating their NPAPI plugin efforts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64877</commentid>
    <comment_count>18</comment_count>
      <attachid>18017</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-20 15:07:15 -0800</bug_when>
    <thetext>Created attachment 18017
Update patch against r28911</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65199</commentid>
    <comment_count>19</comment_count>
      <attachid>18094</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-24 13:02:20 -0800</bug_when>
    <thetext>Created attachment 18094
Updated plug-ins patch

This is just a quick update to fix some warnings about variable initialization ordering in plugins/gtk/ and use of char* instead of const char* for string constants in PluginDebug.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65203</commentid>
    <comment_count>20</comment_count>
      <attachid>18096</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-24 14:46:24 -0800</bug_when>
    <thetext>Created attachment 18096
Updated patch to fix scrolling too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65251</commentid>
    <comment_count>21</comment_count>
      <attachid>18108</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2007-12-25 09:16:35 -0800</bug_when>
    <thetext>Created attachment 18108
Update to fix a Gtk-CRITICAL when destroying the widget</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66042</commentid>
    <comment_count>22</comment_count>
      <attachid>18239</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-02 09:13:48 -0800</bug_when>
    <thetext>Created attachment 18239
Updated patch to build with autotools also, against r29084</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66047</commentid>
    <comment_count>23</comment_count>
      <attachid>18239</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-01-02 09:45:26 -0800</bug_when>
    <thetext>Comment on attachment 18239
Updated patch to build with autotools also, against r29084

Sorry that this has been relatively untouched for so long.

There are a few relatively serious issues here:  PluginViewGtk has a large amount of duplicated code with PluginViewWin, some of which could trivially be factored out (handlePost, parseRFC822HeaderFields and friends).  It also contains many chunks of commented-out code, unused variables (kWebPluginViewWindowClassName, kWebPluginViewProperty) and plugin quirks which are probably not needed on non-Windows platforms.  I&apos;m not sure that PluginMessageThrottlerGtk would be needed on non-Windows platforms as I believe the Windows equivalent exists due to peculiarities with paint events and the Windows message queue, but I suspect Anders would know more about that.  I suspect the references to XID might need to be conditional on X11 being available, both in PluginViewGtk.cpp and PluginViewGtk.h.  PluginViewGtk seems to contain a bunch of references to &quot;wndProc&quot; still which is a Windows concept that seems out of place in this Gtk code.

PluginStreamGtk seems to have a large amount of duplicate code with PluginStreamWin, only the Gtk version looks to be broken in the case of NP_ASFILE/NP_ASFILEONLY streams.  It should be possible to share the majority of this code with Windows, and eventually share with the Mac when that code is refactored.

With a bit more polish we should be able to get this landed soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66569</commentid>
    <comment_count>24</comment_count>
      <attachid>18331</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-08 11:55:38 -0800</bug_when>
    <thetext>Created attachment 18331
Updated patch against r29305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66698</commentid>
    <comment_count>25</comment_count>
      <attachid>18356</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-09 16:14:52 -0800</bug_when>
    <thetext>Created attachment 18356
Updated patch against r29338

This patch also resolves several of the issues mentioned in Mark&apos;s quick review. Curl also seems to be crashing quite a bit for me now as well. I&apos;m not sure why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66705</commentid>
    <comment_count>26</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-01-09 18:08:06 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Created an attachment (id=18356) [edit]
&gt; Updated patch against r29338
&gt; 
&gt; This patch also resolves several of the issues mentioned in Mark&apos;s quick
&gt; review. Curl also seems to be crashing quite a bit for me now as well. I&apos;m not
&gt; sure why.
&gt; 

If your using files instead of http the version in the head probably will crash.
Its got quite a few nasty bugs that are not obvious.
I&apos;ve got another version that uses the latest curl with file handles handed to the OS for select works much better than polling.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66707</commentid>
    <comment_count>27</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-09 18:45:51 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; If your using files instead of http the version in the head probably will
&gt; crash.
&gt; Its got quite a few nasty bugs that are not obvious.
&gt; I&apos;ve got another version that uses the latest curl with file handles handed to
&gt; the OS for select works much better than polling.

No, it&apos;s crashing when trying to stream data for flash. Most notably it occurs with http://burststudio.com/kitten.html after clicking &quot;start game&quot; or when trying to seek past the buffered data in a flash video player, such as on youtube.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66709</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Emmel">mike.emmel</who>
    <bug_when>2008-01-09 19:15:25 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; If your using files instead of http the version in the head probably will
&gt; &gt; crash.
&gt; &gt; Its got quite a few nasty bugs that are not obvious.
&gt; &gt; I&apos;ve got another version that uses the latest curl with file handles handed to
&gt; &gt; the OS for select works much better than polling.
&gt; 
&gt; No, it&apos;s crashing when trying to stream data for flash. Most notably it occurs
&gt; with http://burststudio.com/kitten.html after clicking &quot;start game&quot; or when
&gt; trying to seek past the buffered data in a flash video player, such as on
&gt; youtube.
&gt; 

Yeah I could see streaming being a problem also.
Anything but a reasonably a http connection that closes fast enough will probably crash.

I&apos;m meeting with Alp Toker in a few weeks and I&apos;ll get a patch out soon after. Right now I&apos;ve got to get a demo going.

The new version is doing stuff like this.
    curl_multi_setopt(d-&gt;m_curlMultiHandle, CURLMOPT_SOCKETFUNCTION, socketCallback);
    curl_multi_setopt(d-&gt;m_curlMultiHandle, CURLMOPT_SOCKETDATA,this);
    curl_multi_setopt(d-&gt;m_curlMultiHandle, CURLMOPT_TIMERFUNCTION,timerCallback);
    curl_multi_setopt(d-&gt;m_curlMultiHandle, CURLMOPT_TIMERDATA,this);

Which is a lot better and has not crashed yet for me.
Curl still has a few bogus timer callbacks but this can be fixed a bit later.
The big issue left is msg&apos;s to the multi handle should be possible from a callback. But I&apos;ll need to send a patch in for curl itself to fix this.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67365</commentid>
    <comment_count>29</comment_count>
      <attachid>18473</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-16 09:43:55 -0800</bug_when>
    <thetext>Created attachment 18473
Updated patch against r29531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67978</commentid>
    <comment_count>30</comment_count>
      <attachid>18606</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-22 15:48:00 -0800</bug_when>
    <thetext>Created attachment 18606
Updated patch against r29725</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68023</commentid>
    <comment_count>31</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-23 04:03:04 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Created an attachment (id=18606) [edit]
&gt; Updated patch against r29725
&gt; 

Could you add a comment about gtk2xtbin.c and any other imported sources in the ChangeLog entry?

We should try to keep track of all &quot;bundled&quot; source code from other projects so we can keep up to date with their bugfixes, and maybe even send back our fixes to the code.

If the intention is not to bundle the code but to adopt it, then it needs to be modified to follow WebKit coding style. Bundled code should keep upstream coding style -- i think in this case it&apos;s better to treat the code as bundled to avoid needless changes. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68052</commentid>
    <comment_count>32</comment_count>
      <attachid>18623</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-23 12:42:57 -0800</bug_when>
    <thetext>Created attachment 18623
Updated patch against r29742</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68219</commentid>
    <comment_count>33</comment_count>
      <attachid>18691</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-25 09:24:02 -0800</bug_when>
    <thetext>Created attachment 18691
Updated patch against r29792

This is an updated patch to deal with the new PluginQuirkSet class introduced in recent builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68223</commentid>
    <comment_count>34</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-01-25 09:55:23 -0800</bug_when>
    <thetext>
&gt; Could you add a comment about gtk2xtbin.c and any other imported sources in the
&gt; ChangeLog entry?

That&apos;s the plan, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69065</commentid>
    <comment_count>35</comment_count>
      <attachid>18849</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-01 10:10:47 -0800</bug_when>
    <thetext>Created attachment 18849
Updated patch against r29914</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69320</commentid>
    <comment_count>36</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-03 23:39:03 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Created an attachment (id=18849) [edit]
&gt; Updated patch against r29914
&gt; 

Is this patch intended for review? It won&apos;t be looked at unless it&apos;s set r? and has ChangeLog entries.

I noticed a few tabs where they shouldn&apos;t be. I&apos;m still interested in finding out what the origin of the bundled code is. Having some kind of trail is important.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69356</commentid>
    <comment_count>37</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-04 09:02:14 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; Is this patch intended for review? It won&apos;t be looked at unless it&apos;s set r? and
&gt; has ChangeLog entries.

Not entirely yet. Due to the need to refactor the code, this patch will have to be updated when the refactoring of the win32 plug-in code to be shared, to use the shared implementation for most things.

&gt; I noticed a few tabs where they shouldn&apos;t be. I&apos;m still interested in finding
&gt; out what the origin of the bundled code is. Having some kind of trail is
&gt; important.

The &quot;original author&quot; is in the code&apos;s license block, and as I said before, in comment 34, the origin of the code will also be noted in the ChangeLog when it gets written (after all the refactoring work).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69390</commentid>
    <comment_count>38</comment_count>
      <attachid>18918</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-04 14:05:14 -0800</bug_when>
    <thetext>Created attachment 18918
Updated patch against r29975</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69481</commentid>
    <comment_count>39</comment_count>
      <attachid>18936</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-02-05 10:51:02 -0800</bug_when>
    <thetext>Created attachment 18936
Updated patch against r30005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71860</commentid>
    <comment_count>40</comment_count>
      <attachid>19342</attachid>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-02-25 03:51:44 -0800</bug_when>
    <thetext>Created attachment 19342
64-bit fixes

This is a patch to fix 64-bit issues brought by the NPAPI/gtk giant patch. I have only tested with Flash 9.0.115 and webkit safari-3.1-branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74685</commentid>
    <comment_count>41</comment_count>
      <attachid>19936</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-03-21 13:58:48 -0700</bug_when>
    <thetext>Created attachment 19936
Updated patch against r31217

Here&apos;s an updated patch against r31217 which works with the refactored plugin api code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74967</commentid>
    <comment_count>42</comment_count>
    <who name="Jasper Bryant-Greene">jasper</who>
    <bug_when>2008-03-24 05:47:19 -0700</bug_when>
    <thetext>I think the MPL licensing needs to be deleted in that patch so that the GPL applies instead?

If it&apos;s now ready for review then please add a ChangeLog entry and mark it r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74983</commentid>
    <comment_count>43</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-03-24 09:54:29 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; I think the MPL licensing needs to be deleted in that patch so that the GPL
&gt; applies instead?

The GPL is definitely not acceptable (Perhaps you meant LGPL?).  I think it may be preferable to leave the original license header on the code to indicate its origin and the license under which we have adopted it.  I&apos;m not an expert on these sorts of things though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74996</commentid>
    <comment_count>44</comment_count>
      <attachid>20011</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-03-24 11:59:04 -0700</bug_when>
    <thetext>Created attachment 20011
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75000</commentid>
    <comment_count>45</comment_count>
    <who name="Jasper Bryant-Greene">jasper</who>
    <bug_when>2008-03-24 13:12:20 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; The GPL is definitely not acceptable (Perhaps you meant LGPL?).  I think it may
&gt; be preferable to leave the original license header on the code to indicate its
&gt; origin and the license under which we have adopted it.  I&apos;m not an expert on
&gt; these sorts of things though.

Sorry, I did mean LGPL. The reason I say that the MPL should be deleted is that the MPL specifically says this:

* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the &quot;GPL&quot;), or
* the GNU Lesser General Public License Version 2.1 or later (the &quot;LGPL&quot;),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75075</commentid>
    <comment_count>46</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2008-03-24 23:10:59 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Sorry, I did mean LGPL. The reason I say that the MPL should be deleted is that
&gt; the MPL specifically says this:
(...)

But why would you want that ? It would be better for everyont if you kept the original license, so that modifications made here could be taken back under the original tri-license terms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75076</commentid>
    <comment_count>47</comment_count>
    <who name="Jasper Bryant-Greene">jasper</who>
    <bug_when>2008-03-24 23:14:45 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; Sorry, I did mean LGPL. The reason I say that the MPL should be deleted is that
&gt; &gt; the MPL specifically says this:
&gt; (...)
&gt; 
&gt; But why would you want that ? It would be better for everyont if you kept the
&gt; original license, so that modifications made here could be taken back under the
&gt; original tri-license terms.

The reason I think it would be necessary is that code contributed to WebKit needs to be licensed under either LGPL or new BSD. If the license gives the user the option to take it under the GPL or MPL, I would think that is incompatible.

However there may have been some confusion here. Is this code merely being bundled, and not actually being contributed to form part of WebKit? If that&apos;s the case then of course there&apos;s no problem with keeping the original license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75078</commentid>
    <comment_count>48</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2008-03-24 23:52:02 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; The reason I think it would be necessary is that code contributed to WebKit
&gt; needs to be licensed under either LGPL or new BSD. If the license gives the
&gt; user the option to take it under the GPL or MPL, I would think that is
&gt; incompatible.

There is no incompatibility with having more licensing terms for a snippet of code than for the rest of the tree, as far as licenses are compatible. And obviously, a code snippet that is licensed under the terms of MPL, GPL *and* LGPL can be linked to LGPL or BSD licensed code.

(BTW, code contributed to WebKit is usually licensed under LGPL, 3-clause BSD *or* 2-clause BSD, which is actually quite annoying, because each file has a different license. Why not have *all* dual-licensed under 3-clause BSD and LGPL ?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75354</commentid>
    <comment_count>49</comment_count>
      <attachid>20098</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-03-26 13:48:04 -0700</bug_when>
    <thetext>Created attachment 20098
Updated patch against r31326

Here is an updated patch which removes a couple extra lines of debugging outut, and fixes a crash when calling refresh() with an already populated PluginDatabase, exposed by http://www.java.com/en/download/installed.jsp .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77865</commentid>
    <comment_count>50</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-16 15:13:18 -0700</bug_when>
    <thetext>I&apos;m trying to add this patch to the Mandriva webkit package. I had to rediff it a bit for current SVN webkit, but finally got it to compile clean. However, it doesn&apos;t seem to actually work...I&apos;m attaching my rediffed version of the patch. (It also has the ChangeLog bits taken out as it has to apply against the snapshot tarballs for us, not against the tree). a) hope some of the rediffing is useful and b) does anyone know what might be wrong? When I try to use, say, YouTube - in Epiphany or Midori - with the patched webkitgtk, I just get the same &apos;no Flash or JavaScript disabled&apos; error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77867</commentid>
    <comment_count>51</comment_count>
      <attachid>20604</attachid>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-16 15:15:30 -0700</bug_when>
    <thetext>Created attachment 20604
alternative updated version of patch (against 31893, despite the filename)

this is an amateur attempt at a rediff of the 31326 patch against 31893. as noted in my comment, it doesn&apos;t seem to work for me, for some reason. all ChangeLog changes have been taken out, so it applies against the snapshot tarball. if any of my changes are useful they can happily be used under any licensing terms at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77900</commentid>
    <comment_count>52</comment_count>
      <attachid>20617</attachid>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-04-17 01:22:17 -0700</bug_when>
    <thetext>Created attachment 20617
patch for Plugin updated to r31990

Older Plugin patch has been updated to r31990
- Modified original patch to use Directory instead of Path
- Implemented getFileModificationTime for WebCore/platform/gtk/FileSystemGtk.cpp

The getFileModificationTime is necessary for plugins to load as per the new changes in the trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77901</commentid>
    <comment_count>53</comment_count>
      <attachid>20617</attachid>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-04-17 01:27:03 -0700</bug_when>
    <thetext>Comment on attachment 20617
patch for Plugin updated to r31990

NOTE: the earlier patch 
https://bugs.webkit.org/attachment.cgi?id=20098
has been adopted for r31990</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77904</commentid>
    <comment_count>54</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-17 03:50:34 -0700</bug_when>
    <thetext>Sriram, your updated patch still refers to PluginDataGtk.cpp in GNUmakefile.am , even though you removed that file from the patch, so it doesn&apos;t build. That line should be taken out of GNUmakefile.am , I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77905</commentid>
    <comment_count>55</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-17 03:59:16 -0700</bug_when>
    <thetext>Same thing with PluginPackageGtk.cpp .

Is this patch just broken? Or is it meant to be a serial patch together with 31326, in which case it&apos;s still wrong as it still contains some of the same things as 31326?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77913</commentid>
    <comment_count>56</comment_count>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-04-17 05:51:57 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; Same thing with PluginPackageGtk.cpp .
&gt; 
&gt; Is this patch just broken? Or is it meant to be a serial patch together with
&gt; 31326, in which case it&apos;s still wrong as it still contains some of the same
&gt; things as 31326?
&gt; 
Thanks Adam.
I found the problem .. i did svn-create-patch .. and some files were not added to snv. 
I will fix that and upload a new patch 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77915</commentid>
    <comment_count>57</comment_count>
      <attachid>20621</attachid>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-04-17 06:00:19 -0700</bug_when>
    <thetext>Created attachment 20621
Updated patch against r31990 - fixed missing files

Fixed my previous patch, that had a few missing files.
This one should compile fine</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78002</commentid>
    <comment_count>58</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-17 14:46:43 -0700</bug_when>
    <thetext>This version works (great!), but breaks the Qt build. The 31326 patch had the same problem. I&apos;m attaching a slightly modified version of sri&apos;s patch which fixes that issue.

Tested with this patch, Midori and Epiphany-webkit can both do Youtube fine. I had to remove my Java plugin though (I use the IcedTea one), as I was getting this error:

[adamw@lenovo SPECS]$ epiphany 
Init plugins called 
Module Load Failed :/usr/lib/mozilla/plugins/libjavaplugin.so, Error:libxpcom.so: cannot open shared object file: No such file or directory

which caused the browser to crash (same in Midori). Not sure if this is a problem with the patch, the plugin, or just down to packaging on our (Mandriva&apos;s) side. With the Java plugin removed, Flash seems to work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78003</commentid>
    <comment_count>59</comment_count>
      <attachid>20639</attachid>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-17 14:48:41 -0700</bug_when>
    <thetext>Created attachment 20639
fixes sri&apos;s latest patch: this one doesn&apos;t break the Qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78004</commentid>
    <comment_count>60</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-17 14:50:35 -0700</bug_when>
    <thetext>yeah, with either Sun or IcedTea Java plugin, Epiphany with this patch crashes on startup for me, and Midori crashes as soon as I go to any site which would require a plugin to be loaded. Anyone else seeing this?

With Sun Java I don&apos;t get the libxpcom.so error, but the browser still crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78110</commentid>
    <comment_count>61</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2008-04-18 08:54:44 -0700</bug_when>
    <thetext>is -lnspr4 really needed in GNUmakefile.am ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78369</commentid>
    <comment_count>62</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-04-20 23:15:23 -0700</bug_when>
    <thetext>I landed the xtbin bundled sources in r32287. I hope this makes the plugin patch smaller and easier to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78372</commentid>
    <comment_count>63</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-04-20 23:28:05 -0700</bug_when>
    <thetext>The changes to .pro files should be dropped from this patch as well as the already-landed xtbin files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78505</commentid>
    <comment_count>64</comment_count>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-04-21 22:29:15 -0700</bug_when>
    <thetext>XtBin changes landed - 
http://trac.webkit.org/projects/webkit/changeset/32287
FileSystemGtk landed -
http://trac.webkit.org/projects/webkit/changeset/32288</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78598</commentid>
    <comment_count>65</comment_count>
    <who name="Shen Chuan-Hsing">chuanhsing</who>
    <bug_when>2008-04-22 17:41:37 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; Created an attachment (id=20639) [edit]
&gt; fixes sri&apos;s latest patch: this one doesn&apos;t break the Qt build
&gt; 
PluginView::init()
{
    ....
    if (m_isWindowed) {
#if defined(GDK_WINDOWING_X11)
        NPSetWindowCallbackStruct ws;
        ....
        m_npWindow.ws_info = &amp;ws;
#endif
    }
    ....
    if (!(m_plugin-&gt;quirks().contains(PluginQuirkDeferFirstSetWindowCall)))
        setNPWindowRect(frameGeometry());
}

void PluginView::setNPWindowRect(const IntRect&amp; rect)
{
    // ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)-&gt;display becomes null and crash.
}
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78638</commentid>
    <comment_count>66</comment_count>
      <attachid>20769</attachid>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-23 03:28:37 -0700</bug_when>
    <thetext>Created attachment 20769
Adds NPAPI plugin support for Gtk and Qt-x11.

This patch adds NPAPI plugin support for both Gtk (XEmbed, Xt and some support for window-less plugins at the moment) and Qt-x11 (only XEmbed plugins at the moment). It&apos;s based on Rodney Dawes&apos; previous work.

It also moves some code from win to platform-independent as it&apos;s used in all plugin support code.

I have tested this patch with both the diamondx plugin (works on both platforms) and Adobe Flash Player, which works but has problems with scrolling on Gtk.  Some other plugins don&apos;t load because they depend on XPCOM. If anyone knows of an Xt plugin I could test with, please send it my way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78643</commentid>
    <comment_count>67</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-23 05:35:27 -0700</bug_when>
    <thetext>for the record, marcoil&apos;s patch is against rev 32430. I will test it shortly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78646</commentid>
    <comment_count>68</comment_count>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-04-23 06:08:27 -0700</bug_when>
    <thetext>Hi, you can try Acrobat Reader 5 or Flash 7 plugins which use Xt IIRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78648</commentid>
    <comment_count>69</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-04-23 06:41:33 -0700</bug_when>
    <thetext>First of all, great job!!

I have a few small comments:

+#elif PLATFORM(QT) &amp;&amp; PLATFORM(UNIX)
+#define ENABLE_NETSCAPE_PLUGIN_API 1

In order to not break the Qt/Mac and the Qt/Embedded build I suggest to make this even stricter by perhaps simply using

#elif PLATFORM(QT) &amp;&amp; defined(Q_WS_X11)


In PluginPackageQt.cpp, PluginPackage::load() if loading the module fails I think the QLibrary should be deleted and m_module be set back to a null pointer. Also it seems that unloadModule() in FileSystemQt.cpp does not delete the QLibrary itself, it just calls unload(), which it seems the caller in PluginPackage::freeLibraryTimerFired() expects the function to free any allocated resources.

In PluginViewQt.cpp in the PluginView destructor:
+    if (m_window)
+        delete m_window;

I think the if() is safe to remove :)

Other than that I looks good to me on the Qt side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78649</commentid>
    <comment_count>70</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-04-23 06:48:47 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; Created an attachment (id=20769) [edit]
&gt; Adds NPAPI plugin support for Gtk and Qt-x11.
&gt; 
&gt; This patch adds NPAPI plugin support for both Gtk (XEmbed, Xt and some support
&gt; for window-less plugins at the moment) and Qt-x11 (only XEmbed plugins at the
&gt; moment). It&apos;s based on Rodney Dawes&apos; previous work.
&gt; 
&gt; It also moves some code from win to platform-independent as it&apos;s used in all
&gt; plugin support code.
&gt; 
&gt; I have tested this patch with both the diamondx plugin (works on both
&gt; platforms) and Adobe Flash Player, which works but has problems with scrolling
&gt; on Gtk.  Some other plugins don&apos;t load because they depend on XPCOM. If anyone
&gt; knows of an Xt plugin I could test with, please send it my way.
&gt; 


Looks OK on the GTK+ side.

What&apos;s -lnspr4 there for? We can&apos;t start introducing a dependency on packages and libraries from another browser.

Once the Qt issues are addressed I can look into landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78660</commentid>
    <comment_count>71</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-23 08:44:56 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; First of all, great job!!
&gt; 
Thanks!

&gt; +#elif PLATFORM(QT) &amp;&amp; PLATFORM(UNIX)
&gt; +#define ENABLE_NETSCAPE_PLUGIN_API 1
&gt; 
&gt; In order to not break the Qt/Mac and the Qt/Embedded build I suggest to make
&gt; this even stricter by perhaps simply using
&gt; 
&gt; #elif PLATFORM(QT) &amp;&amp; defined(Q_WS_X11)
&gt; 
That&apos;s what I did in the first place, but it doesn&apos;t work because at that time no Qt header has been included yet, so Q_WS_X11 is not defined. Should I define ENABLE_NETSCAPE_PLUGIN_API in WebCore.pro instead?

I&apos;ll make a new patch for the other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78674</commentid>
    <comment_count>72</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-23 09:55:42 -0700</bug_when>
    <thetext>I can confirm that the new patch from marcoil builds clean against the latest nightly (32416). It also basically works, and having a Java plugin installed no longer causes the browser to crash.

However, it seems basically flaky. Java plugin still doesn&apos;t actually work (though this may be known). Sometimes playing video at Youtube works, but quite often, Midori just crashes. I can also get a reproducible crash simply by running Acid3 ( http://acid3.acidtests.org/ )with the patch applied: it crashes around 76/100. Without the patch, the test completes fine.

Have not yet tested with Ephy, I need to rebuild it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78712</commentid>
    <comment_count>73</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-23 15:58:42 -0700</bug_when>
    <thetext>Epiphany results are basically identical to Midori. Also flaky with Flash, nothing with Java, crashes running Acid3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78723</commentid>
    <comment_count>74</comment_count>
    <who name="Shen Chuan-Hsing">chuanhsing</who>
    <bug_when>2008-04-23 18:55:15 -0700</bug_when>
    <thetext>WebCore/plugins/gtk/PluginViewGtk.cpp

	NPSetWindowCallbackStruct ws;

	ws.type = 0;

	if (m_needsXEmbed) {
	    ws.display = GDK_WINDOW_XDISPLAY(m_window-&gt;window);
	    ws.visual = GDK_VISUAL_XVISUAL(gdk_drawable_get_visual(GDK_DRAWABLE(m_window-&gt;window)));
	    ws.depth = gdk_drawable_get_visual(GDK_DRAWABLE(m_window-&gt;window))-&gt;depth;
	    ws.colormap = GDK_COLORMAP_XCOLORMAP(gdk_drawable_get_colormap(GDK_DRAWABLE(m_window-&gt;window)));
	} else {
	    ws.display = GTK_XTBIN(m_window)-&gt;xtdisplay;
	    ws.visual = GTK_XTBIN(m_window)-&gt;xtclient.xtvisual;
	    ws.depth = GTK_XTBIN(m_window)-&gt;xtclient.xtdepth;
	    ws.colormap = GTK_XTBIN(m_window)-&gt;xtclient.xtcolormap;

	    XFlush (ws.display);
	}

	m_npWindow.ws_info = &amp;ws;

should be:

	NPSetWindowCallbackStruct *ws = new NPSetWindowCallbackStruct();

	ws-&gt;type = 0;

	if (m_needsXEmbed) {
	    ws-&gt;display = GDK_WINDOW_XDISPLAY(m_window-&gt;window);
	    ws-&gt;visual = GDK_VISUAL_XVISUAL(gdk_drawable_get_visual(GDK_DRAWABLE(m_window-&gt;window)));
	    ws-&gt;depth = gdk_drawable_get_visual(GDK_DRAWABLE(m_window-&gt;window))-&gt;depth;
	    ws-&gt;colormap = GDK_COLORMAP_XCOLORMAP(gdk_drawable_get_colormap(GDK_DRAWABLE(m_window-&gt;window)));
	} else {
	    ws-&gt;display = GTK_XTBIN(m_window)-&gt;xtdisplay;
	    ws-&gt;visual = GTK_XTBIN(m_window)-&gt;xtclient.xtvisual;
	    ws-&gt;depth = GTK_XTBIN(m_window)-&gt;xtclient.xtdepth;
	    ws-&gt;colormap = GTK_XTBIN(m_window)-&gt;xtclient.xtcolormap;

	    XFlush (ws-&gt;display);
	}

	m_npWindow.ws_info = ws;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78736</commentid>
    <comment_count>75</comment_count>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-04-23 22:57:54 -0700</bug_when>
    <thetext>&gt; 
&gt;         NPSetWindowCallbackStruct ws;
&gt; 
&gt; should be:
&gt; 
&gt;         NPSetWindowCallbackStruct *ws = new NPSetWindowCallbackStruct();


I agree we cannot alloc on stack and store in a class member.. 
but the new struct is a leak per plugin

so we need this also :

PluginView::stop()
{

...
..

    if (m_isWindowed &amp;&amp; m_npWindow.ws_info) 
           delete m_npWindow.ws_info
}

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78779</commentid>
    <comment_count>76</comment_count>
      <attachid>20794</attachid>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-24 09:01:42 -0700</bug_when>
    <thetext>Created attachment 20794
Adds NPAPI plugin support for Gtk and Qt-x11, r32489

This new patch addresses comments made here:
- ENABLE_NETSCAPE_PLUGIN_API on Qt is defined in WebCore.pro, as it was difficult to do it in Platform.h.
- QtLibraries are deleted if correctly unloaded.
- I removed the dependency on libnspr4, I don&apos;t know where that came from.

Right now (on my setup), testing with GtkLauncher and QtLauncher:

- Acid3 gets to 94/100 on both platforms without crashing, although it gets &quot;linktest failed&quot; on Qt, don&apos;t know if this is due to the patch.
- Flash semi-works in a very flacky way. It has problems with scrolling on Gtk and YouTube videos stutter on Qt (other videos sites work, though). XEmbed implementations are different and I&apos;ve sent a patch for Qt that solves this a little.
- Java doesn&apos;t load and I&apos;m currently investigating why.
- Some other plugins don&apos;t load because they depend on XPCOM, i.e., totem video plugins. Others don&apos;t work on Qt because of Gtk dependencies, like Gnash.
- Adobe Reader doesn&apos;t load because it needs display info before any PluginView has been created, which will be difficult to solve right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78780</commentid>
    <comment_count>77</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-24 09:04:31 -0700</bug_when>
    <thetext>will incorporate the patch into our build and do my own tests later. Thanks. I thought current Webkit was supposed to hit 100/100 on acid3?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78782</commentid>
    <comment_count>78</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-24 09:56:57 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; will incorporate the patch into our build and do my own tests later. Thanks. I
&gt; thought current Webkit was supposed to hit 100/100 on acid3?
&gt; 

Now that I&apos;ve tested it, I only get 94/100 and the same &quot;linktest failed&quot; with QtLauncher without the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78791</commentid>
    <comment_count>79</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-24 11:09:13 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; - Java doesn&apos;t load and I&apos;m currently investigating why.

The Java plugin does not work because it depends on OJI, an older interface and not on NPAPI, and this will not be fixed until JRE&apos;s next version. It will possibly need extensions to NPAPI, so it should take a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78792</commentid>
    <comment_count>80</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2008-04-24 11:44:41 -0700</bug_when>
    <thetext>&gt; Now that I&apos;ve tested it, I only get 94/100 and the same &quot;linktest failed&quot; with
&gt; QtLauncher without the patch.

You probably forgot to enable svg support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78898</commentid>
    <comment_count>81</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-25 05:15:59 -0700</bug_when>
    <thetext>Results with the new marcoil patch:

acid3 doesn&apos;t cause a crash any more. test completes with a score of 98/100 (I&apos;ll track down that missing 2 elsewhere, likely nothing to do with the patch).

as he noted, scrolling is troublesome. Basically, if you go to Youtube and start playing a video, it&apos;ll be fine. If you then scroll the page, the video will freeze on the frame that was being displayed when you scrolled. Audio keeps playing. Thereafter, the video only updates each time you scroll the page: each time you scroll the page the video will update to the &apos;current&apos; frame, then freeze again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78899</commentid>
    <comment_count>82</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-04-25 05:17:59 -0700</bug_when>
    <thetext>Forgot to mention: with the patch, if you just run a browser, go to a &apos;normal&apos; site and then quit, all is fine. If you run a browser, go to Youtube (probably any other site that causes Flash plugin to be loaded, not tested though) and then quit the browser, it segfaults. Midori just segfaults, Epiphany brings up the GNOME crash window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78900</commentid>
    <comment_count>83</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-25 05:25:06 -0700</bug_when>
    <thetext>(In reply to comment #82)
&gt; Forgot to mention: with the patch, if you just run a browser, go to a &apos;normal&apos;
&gt; site and then quit, all is fine. If you run a browser, go to Youtube (probably
&gt; any other site that causes Flash plugin to be loaded, not tested though) and
&gt; then quit the browser, it segfaults. Midori just segfaults, Epiphany brings up
&gt; the GNOME crash window.
&gt; 

I&apos;ve tried it on other sites and it only happens to me on YouTube, curiously.

The scrolling bug appeared recently, as I remember it not happening with the original patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78922</commentid>
    <comment_count>84</comment_count>
    <who name="Sylvain Petreolle">spetreolle</who>
    <bug_when>2008-04-25 11:01:36 -0700</bug_when>
    <thetext>(In reply to comment #83)
&gt; 
&gt; I&apos;ve tried it on other sites and it only happens to me on YouTube, curiously.
&gt; 
&gt; The scrolling bug appeared recently, as I remember it not happening with the
&gt; original patch.
&gt; 
Works beautifully here, nice work.

The crash is reproducible on prizee.com,
and you can trigger it too when closing the site&apos;s tab.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78926</commentid>
    <comment_count>85</comment_count>
    <who name="Andrew Badr">andrewbadr.etc</who>
    <bug_when>2008-04-25 11:38:41 -0700</bug_when>
    <thetext>I&apos;m running WebKit headless (under Xvfb) and experiencing a segfault when I try to load a page with Flash using the latest version of this patch (against r32489). Pages without Flash work fine, but a Youtube video for example will crash right away. 

I&apos;m using the python bindings (pywebkitgtk). Here&apos;s the program that segfaults:
import webkit, gtk
v = webkit.WebView()
v.open(&quot;http://www.youtube.com/watch?v=Yz7FFlFy8eM&quot;)
gtk.main()

Using another URL, such as http://www.google.com/, works fine (as youtube did before I installed flash), though there is this warning:  GtkWarning: gdk_window_invalidate_rect: assertion `window != NULL&apos; failed
(this warning was also present before I patched &amp; installed flash)

My uninformed guess is that something is trying to draw to the null window. That code could well be in the Flash plugin. Even if it&apos;s in WebKit, I don&apos;t expect that this use case is a high priority, but I thought to let you all know anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79209</commentid>
    <comment_count>86</comment_count>
      <attachid>20887</attachid>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-04-29 04:42:23 -0700</bug_when>
    <thetext>Created attachment 20887
64-bit fixes

Re-add 64-bit fixes that got lost in recent patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79210</commentid>
    <comment_count>87</comment_count>
      <attachid>20888</attachid>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-04-29 04:45:18 -0700</bug_when>
    <thetext>Created attachment 20888
Specialize NPN_GetValue()

NPN_GetValue() should be valid for NULL instance and NPNVToolkit or NPNVSupportsXEmbedBool variables. This is the case for Gnash, nspluginwrapper and probably Acrobat Reader (not tested but the comment in npapi.cpp might indicate that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79211</commentid>
    <comment_count>88</comment_count>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-04-29 04:47:03 -0700</bug_when>
    <thetext>Sorry, individual patches only without respecting proper rules because I am building from the WebKit/Clutter git branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79280</commentid>
    <comment_count>89</comment_count>
      <attachid>20901</attachid>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-04-30 04:28:36 -0700</bug_when>
    <thetext>Created attachment 20901
Adds NPAPI plugin support for Gtk and Qt-x11, r32726

This new, updated and improved patch gets youtube videos working without crashes on my setup, on both GtkLauncher and QtLauncher.

(In reply to comment #86)
&gt; Re-add 64-bit fixes that got lost in recent patches.
&gt; 

I have incorporated this fix, but not the one separating NPN_GetValue as I&apos;d like to tackle this issue separately. Thanks for the tip!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79369</commentid>
    <comment_count>90</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-05-01 11:14:04 -0700</bug_when>
    <thetext>With the updated marcoil patch, Youtube scrolling and segfault on exit bugs are both solved. Haven&apos;t tested Gwenole&apos;s other suggested change yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79372</commentid>
    <comment_count>91</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-05-01 11:21:48 -0700</bug_when>
    <thetext>Landed in r32766.

I had to make a few hundred lines of coding style fixes. Please check the commit to make sure everything is in order.

This is going to need some stabilisation work now, still crashes from time to time.

We&apos;ll probably want it turned off by default in the GTK+ port with a configurable runtime option to enable it, or we&apos;re going to be innundated with bug reports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79421</commentid>
    <comment_count>92</comment_count>
      <attachid>20621</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-02 04:04:27 -0700</bug_when>
    <thetext>Comment on attachment 20621
Updated patch against r31990 - fixed missing files

Obsoleting this patch to take the bug out of the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79661</commentid>
    <comment_count>93</comment_count>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-05-05 00:38:08 -0700</bug_when>
    <thetext>Hi, I have not generated a patch yet, but I got by this one while working on the Clutter version. In WebCore/plugins/gtk/PluginDatabaseGtk.cpp (PluginDatabase::isPreferredPluginDirectory), please use NULL not 0 as the varargs terminator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79671</commentid>
    <comment_count>94</comment_count>
    <who name="Adam Williamson">adamw</who>
    <bug_when>2008-05-05 07:18:25 -0700</bug_when>
    <thetext>Gwenole, now the support is merged, I think it&apos;s better to open new bug reports for issues in the merged code rather than keep adding to this - they&apos;ll likely get addressed faster that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79733</commentid>
    <comment_count>95</comment_count>
    <who name="Gwenole Beauchesne">gb.devel</who>
    <bug_when>2008-05-06 04:23:00 -0700</bug_when>
    <thetext>This bug should not have been closed in the first place as per comment #89, the NPN_GetValue() regression is not fixed yet. Anyhow, I will open a new bug for this one too. The g_build_filename() thing is in bug #18906.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>79734</commentid>
    <comment_count>96</comment_count>
    <who name="marcoil">marc.ordinasillopis</who>
    <bug_when>2008-05-06 04:28:36 -0700</bug_when>
    <thetext>(In reply to comment #95)
&gt; This bug should not have been closed in the first place as per comment #89, the
&gt; NPN_GetValue() regression is not fixed yet. Anyhow, I will open a new bug for
&gt; this one too. The g_build_filename() thing is in bug #18906.
&gt; 

I opened a new bug for comment #89, bug #18892</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16998</attachid>
            <date>2007-11-02 14:41:22 -0700</date>
            <delta_ts>2007-11-13 13:40:15 -0800</delta_ts>
            <desc>Start at plug-ins patch</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>126421</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2aXNpb24gMjczNzYpCisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
CiAjaWZkZWYgWFBfVU5JWAogICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogICAgICNpbmNsdWRl
IDxYMTEvWHV0aWwuaD4KKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgogCiAjaWZkZWYg
WFBfV0lOCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkocmV2aXNpb24gMjcz
NzYpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsOCBAQCBleHRlcm4gIkMiIHsKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNp
bmNsdWRlICJucGFwaS5oIgogCisjdW5kZWYgTm9uZQorCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gp
ICYmIGRlZmluZWQoX19MUDY0X18pCiAjZXJyb3IgNjQtYml0IE5ldHNjYXBlIHBsdWctaW5zIGFy
ZSBub3Qgc3VwcG9ydGVkIG9uIE1hYyBPUyBYCiAjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAy
NzM3NikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMCBAQAogI2luY2x1ZGUgIndlYmtpdGd0
a3ByaXZhdGUuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5W
aWV3R3RrLmgiCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKQEAgLTg1LDkgKzg5LDIyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2ls
bFN1Ym0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExv
YWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1l
TG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2Rpbmco
bV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShk
YXRhLCBsZW5ndGgpOworICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5y
ZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7
CisgICAgICAgIEZyYW1lTG9hZGVyKiBmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKwlmbC0+
c2V0RW5jb2RpbmcodGV4dEVuY29kaW5nLCBmYWxzZSk7CisJaWYgKGRhdGEpCisJICAgIGZsLT5h
ZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1Z2luVmlldykgewor
ICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKwkgICAgbV9wbHVnaW5W
aWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKwkgICAgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7CisJfQorCW1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2
ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKQpAQCAtMTcwLDggKzE4NywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24p
KFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdp
bihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdl
dCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5T
aXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdH
dGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5j
cmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwg
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAg
aWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiAwOwogfQpAQCAtMjEzLDggKzIzNSw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZy
YW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3RE
YXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm47CisgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
d0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJM
JiBiYXNlVVJMLApAQCAtMzQ2LDcgKzM3NiwxNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpy
ZXZlcnRUb1Byb3Zpc2lvCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpjbGVhclVuYXJjaGl2aW5n
U3RhdGUoRG9jdW1lbnRMb2FkZXIqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OndpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1l
bnRMb2FkZXIgKmwpIHsgc2V0VGl0bGUobC0+dGl0bGUoKSwgbC0+VVJMKCkpOyB9Ci12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5n
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpIHsKKyAgaWYgKCFtX3BsdWdpblZpZXcpCisgICAgY29t
bWl0dGVkTG9hZChsb2FkZXIsIDAsIDApOworICBlbHNlIHsKKyAgICBtX3BsdWdpblZpZXctPmRp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICBtX3BsdWdpblZpZXcgPSAwOworICAgIG1faGFzU2VudFJl
c3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgfQorfQorCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpmaW5hbFNldHVwRm9yUmVwbGFjZShEb2N1bWVudExvYWRlciopIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0RGVmZXJzTG9hZGluZyhib29sKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KIGJvb2wgRnJhbWVMb2FkZXJDbGllbnQ6OmlzQXJjaGl2ZUxvYWRQ
ZW5kaW5nKFJlc291cmNlTG9hZGVyKikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTQwOSw3ICs0NDksMTUgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2F2
ZURvY3VtZW50VmlldwogYm9vbCBGcmFtZUxvYWRlckNsaWVudDo6Y2FuQ2FjaGVQYWdlKCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KIEZyYW1lKiBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBv
bGljeShjb25zdCBSZXNvdXJjZUVycm9yJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNv
bnN0IFJlc291cmNlRXJyb3ImKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikgeworICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgbV9wbHVn
aW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICBtX3BsdWdpblZpZXcgPSAwOworICAgIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgfQorfQorCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFsSGlzdG9yeUZv
clN0YW5kYXJkTG9hZChjb25zdCBLVVJMJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yUmVsb2FkKGNvbnN0IEtVUkwm
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI3Mzc2KQorKysgV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisK
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRGcmFtZSBXZWJLaXRGcmFtZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC0xODEsNiArMTgzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBX
ZWJLaXRGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBt
X3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fZmlyc3REYXRhOworCisJLy8gUGx1Z2luIHZpZXcg
dG8gcmVkaXJlY3QgZGF0YSB0bworCVdlYkNvcmU6OlBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmll
dzsKKwlib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI3Mzc2KQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSw2ICs0NDEsOCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfcGFnZV9pbml0KFdlYktpdFBhZ2UqCiAgICAgc2V0dGluZ3MtPnNl
dEZpeGVkRm9udEZhbWlseSgiQ291cmllciIpOwogICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkoIkFyaWFsIik7CiAKKyAgICBzZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQoVFJV
RSk7CisKICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhwYWdlLCBHVEtfQ0FOX0ZPQ1VTKTsKICAg
ICBwYWdlRGF0YS0+bWFpbkZyYW1lID0gV0VCS0lUX0ZSQU1FKHdlYmtpdF9mcmFtZV9uZXcocGFn
ZSkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9Gb250LmgJKHJldmlzaW9uIDI3Mzc2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDxRdEd1
aS9xZm9udG1ldHJpY3MuaD4KICNlbmRpZgogCisjdW5kZWYgQ29tcGxleAorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UG9pbnQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI3Mzc2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEs
MTIgKzYxLDYgQEAgYm9vbCBBWE9iamVjdENhY2hlOjpnQWNjZXNzaWJpbGl0eUVuYWJsZQogCiBi
b29sIFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyhEZXByZWNhdGVkU3RyaW5nIGNvbnN0JikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVn
aW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3Rv
cmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9v
bCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29s
b3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0Nv
bG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAKSW5kZXg6IFdlYkNvcmUvY29uZmln
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jb25maWcuaAkocmV2aXNpb24gMjczNzYpCisrKyBX
ZWJDb3JlL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMCBAQAogI2luY2x1
ZGUgPHd0Zi9EaXNhbGxvd0NUeXBlLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyNk
ZWZpbmUgV1RGX1VTRV9OUE9CSkVDVCAxCisjZW5kaWYKKwogI2lmICFDT01QSUxFUihNU1ZDKSAv
LyBjYW4ndCBnZXQgdGhpcyB0byBjb21waWxlIG9uIFZpc3VhbCBDKysgeWV0CiAjZGVmaW5lIEFW
T0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVt
ZW50LmgJKHJldmlzaW9uIDI3Mzc2KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKIAogI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCiAKKyN1bmRlZiBOb25lCisjdW5kZWYgQWJvdmUKKyN1bmRlZiBCZWxvdworCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxDb2xsZWN0aW9uOwpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpbkRhdGFiYXNlR3RrX0gKKyNkZWZpbmUg
UGx1Z2luRGF0YWJhc2VHdGtfSAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNs
YXNzIEludFNpemU7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3Rr
OworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblBhY2thZ2VHdGs+LCBQbHVnaW5QYWNrYWdlR3RrSGFzaD4gUGx1Z2luU2V0OworICAK
KyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZUd0ayB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGx1Z2luRGF0YWJhc2VHdGsqIGluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICAgICAgUGx1Z2lu
Vmlld0d0ayogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNp
emUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKworICAgICAgICBib29sIHJl
ZnJlc2goKTsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiBwbHVnaW5zKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkgY29uc3Q7CisgICAgICAgIHZvaWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmlu
ZyYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAgICAgICBQ
bHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsKKworICAgICAgICBQbHVnaW5QYWNr
YWdlR3RrKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSk7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvckV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbik7CisKKyAgICAgICAgc3RhdGljIFZlY3Rv
cjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IG1fcGx1Z2luUGF0aHM7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1F
VHlwZXM7CisgICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3
R3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ5NSBAQAorLyogLSotIE1vZGU6IEM7IHRh
Yi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICov
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5W
aWV3R3RrLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrY29udGFpbmVyLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0a2V2ZW50Ym94Lmg+CisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPGd0
ay9ndGtzdG9jay5oPgorI2luY2x1ZGUgPGd0ay9ndGt3aWRnZXQuaD4KKworI2luY2x1ZGUgPGdk
ay9nZGtkaXNwbGF5Lmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxYMTEvSW50
cmluc2ljLmg+CisKKy8vIEZvbnQuaCBjcmFjaworI3VuZGVmIEF1dG8KKyN1bmRlZiBTaW1wbGUK
KyN1bmRlZiBDb21wbGV4CisKKy8vIFJlbmRlclN0eWxlLmggY3JhY2sKKyN1bmRlZiBOb25lCisj
dW5kZWYgQ2lyY2xlCisjdW5kZWYgUmVjdGFuZ2xlCisKKy8vIENhY2hlZFJlc291cmNlLmggY3Jh
Y2sKKyN1bmRlZiBTdGF0dXMKKyN1bmRlZiBOb3RDYWNoZWQKKyN1bmRlZiBVbmtub3duCisjdW5k
ZWYgTmV3CisjdW5kZWYgUGVuZGluZworI3VuZGVmIENhY2hlZAorCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgor
I2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRl
ICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgImtqc193
aW5kb3cuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1HdGsuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIm5wYXBpLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIK
KyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKwordXNpbmcgS0pTOjpF
eGVjU3RhdGU7Cit1c2luZyBLSlM6OkludGVycHJldGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1
c2luZyBLSlM6OkpTT2JqZWN0OwordXNpbmcgS0pTOjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3Ry
aW5nOworCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NsYXNz
IFBsdWdpblJlcXVlc3RHdGsgeworcHVibGljOgorICAgIFBsdWdpblJlcXVlc3RHdGsoY29uc3Qg
RnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCB2b2lkKiBub3RpZnlEYXRhKQorICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxv
YWRSZXF1ZXN0KQorICAgICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICAgICAs
IG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKSB7IH0KK3B1YmxpYzoKKyAgICBj
b25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZUxvYWRSZXF1ZXN0OyB9CisgICAgdm9pZCogbm90aWZ5RGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fbm90aWZ5RGF0YTsgfQorICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsgfQorcHJpdmF0ZToKKyAgICBGcmFtZUxvYWRSZXF1
ZXN0IG1fZnJhbWVMb2FkUmVxdWVzdDsKKyAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgYm9v
bCBtX3NlbmROb3RpZmljYXRpb247CisgICAgLy8gRklYTUU6IHVzZXIgZ2VzdHVyZQorfTsKKwor
c3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAwMTsK
KworY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlckd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2lu
TWVzc2FnZVRocm90dGxlckd0ayhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3KQorICAgICAgICA6
IG1fYmFjaygwKSwgbV9mcm9udCgwKQorICAgICAgICAsIG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3
KQorICAgICAgICAsIG1fbWVzc2FnZVRocm90dGxlVGltZXIodGhpcywgJlBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJHdGs6Om1lc3NhZ2VUaHJvdHRsZVRpbWVyRmlyZWQpCisgICAgeworICAgICAgICAv
LyBJbml0aWFsaXplIHRoZSBmcmVlIGxpc3Qgd2l0aCBvdXIgaW5saW5lIG1lc3NhZ2VzCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1JbmxpbmVNZXNzYWdlcyAtIDE7IGkrKykK
KyAgICAgICAgICAgIG1faW5saW5lTWVzc2FnZXNbaV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2Vz
W2kgKyAxXTsKKyAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFd
Lm5leHQgPSAwOworICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9ICZtX2lubGluZU1lc3Nh
Z2VzWzBdOworICAgIH0KKworICAgIH5QbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrKCkKKyAgICB7
CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG5leHQ7CisgICAgCisgICAgICAgIGZvciAoUGx1Z2lu
TWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7IG1lc3NhZ2U7IG1lc3NhZ2UgPSBuZXh0KSB7Cisg
ICAgICAgICAgICBuZXh0ID0gbWVzc2FnZS0+bmV4dDsKKyAgICAgICAgICAgIGZyZWVNZXNzYWdl
KG1lc3NhZ2UpOworICAgICAgICB9ICAgICAgICAKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBl
bmRNZXNzYWdlKFhJRCBoV25kLCBndWludCBtc2csIGd1aW50IHdQYXJhbSwgZ2xvbmcgbFBhcmFt
KSAKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3Nh
Z2UoKTsKKworICAgICAgICBtZXNzYWdlLT5oV25kID0gaFduZDsKKyAgICAgICAgbWVzc2FnZS0+
bXNnID0gbXNnOworICAgICAgICBtZXNzYWdlLT53UGFyYW0gPSB3UGFyYW07CisgICAgICAgIG1l
c3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICAgICAgbWVzc2FnZS0+bmV4dCA9IDA7CisKKyAg
ICAgICAgaWYgKG1fYmFjaykKKyAgICAgICAgICAgIG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7Cisg
ICAgICAgIG1fYmFjayA9IG1lc3NhZ2U7CisgICAgICAgIGlmICghbV9mcm9udCkKKyAgICAgICAg
ICAgIG1fZnJvbnQgPSBtZXNzYWdlOworCisgICAgICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFy
dE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RydWN0IFBsdWdpbk1lc3NhZ2UgeworICAgICAgICBYSUQgaFduZDsKKyAgICAgICAg
Z3VpbnQgbXNnOworICAgICAgICBndWludCB3UGFyYW07CisgICAgICAgIGdsb25nIGxQYXJhbTsK
KworICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICB9OworICAgIAorICAg
IHZvaWQgbWVzc2FnZVRocm90dGxlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyR3RrPiopCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9u
dDsKKyAgICAgICAgbV9mcm9udCA9IG1fZnJvbnQtPm5leHQ7CisgICAgICAgIGlmIChtZXNzYWdl
ID09IG1fYmFjaykKKyAgICAgICAgICAgIG1fYmFjayA9IDA7CisKKwkvLyAgICAgICAgOjpDYWxs
V2luZG93UHJvYyhtX3BsdWdpblZpZXctPnBsdWdpblduZFByb2MoKSwgbWVzc2FnZS0+aFduZCwg
bWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53UGFyYW0sIG1lc3NhZ2UtPmxQYXJhbSk7CisKKyAgICAg
ICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisKKyAgICAgICAgaWYgKG1fZnJvbnQpCisgICAgICAg
ICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVU
aW1lSW50ZXJ2YWwpOworICAgIH0KKworICAgIFBsdWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2Fn
ZSgpCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlICptZXNzYWdlOworCisgICAgICAgIGlm
IChtX2ZyZWVJbmxpbmVNZXNzYWdlcykgeworICAgICAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlu
bGluZU1lc3NhZ2VzOworICAgICAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdl
LT5uZXh0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2lu
TWVzc2FnZTsKKworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9CisKKyAgICBib29sIGlz
SW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKSAKKyAgICB7CisgICAgICAgIHJl
dHVybiBtZXNzYWdlID49ICZtX2lubGluZU1lc3NhZ2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5s
aW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXTsKKyAgICB9CisKKyAgICB2b2lkIGZy
ZWVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpIAorICAgIHsKKyAgICAgICAgaWYgKGlz
SW5saW5lTWVzc2FnZShtZXNzYWdlKSkgeworICAgICAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1f
ZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBt
ZXNzYWdlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSBtZXNzYWdlOworICAg
IH0KKworICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICBQbHVnaW5NZXNzYWdl
KiBtX2JhY2s7CisgICAgUGx1Z2luTWVzc2FnZSogbV9mcm9udDsKKworICAgIHN0YXRpYyBjb25z
dCBpbnQgTnVtSW5saW5lTWVzc2FnZXMgPSA0OworICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxpbmVN
ZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlc107CisgICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5s
aW5lTWVzc2FnZXM7CisKKyAgICBUaW1lcjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrPiBtX21l
c3NhZ2VUaHJvdHRsZVRpbWVyOworfTsKKworc3RhdGljIFN0cmluZyBzY3JpcHRTdHJpbmdJZkph
dmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICghdXJsLnVybCgpLnN0YXJ0
c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisK
KyAgICAvLyBUaGlzIHJldHVybnMgYW4gdW5lc2NhcGVkIHN0cmluZworICAgIHJldHVybiBLVVJM
OjpkZWNvZGVfc3RyaW5nKHVybC51cmwoKS5taWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayog
UGx1Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK2NvbnN0IHdjaGFyX3Qq
IGtXZWJQbHVnaW5WaWV3V2luZG93Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0
IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0
eSI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4w
IChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2
MTAxMCBGaXJlZm94LzIuMCI7CisKK3N0YXRpYyBib29sIHJlZ2lzdGVyUGx1Z2luVmlldygpCit7
CisgICAgc3RhdGljIGJvb2wgaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcyA9IGZhbHNlOworICAg
IGlmIChoYXZlUmVnaXN0ZXJlZFdpbmRvd0NsYXNzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjp1cGRhdGVXaW5kb3co
KSBjb25zdAoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdp
bmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xp
cFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNU
b1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXpl
KCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3Qu
bW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1f
d2luZG93ICYmIChtX3dpbmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9
IG9sZENsaXBSZWN0KSkgeworICAgICAgICBSZWdpb24gcmduOworCisgICAgICAgIC8vIFRvIHBy
ZXZlbnQgZmxhc2hlcyB3aGlsZSBzY3JvbGxpbmcsIHdlIGRpc2FibGUgZHJhd2luZyBkdXJpbmcg
dGhlIHdpbmRvdworICAgICAgICAvLyB1cGRhdGUgcHJvY2VzcyBieSBjbGlwcGluZyB0aGUgd2lu
ZG93IHRvIHRoZSB6ZXJvIHJlY3QuCisKKyAgICAgICAgLy8gRklYTUU6IFNldHRpbmcgdGhlIHdp
bmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIAorICAg
ICAgICAvLyByZXBhaW50IHByb2JsZW1zIHdpdGggYXQgbGVhc3QgdGhlIFdNUCBhbmQgSmF2YSBw
bHVnaW5zLgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTIxMTE4Nz4gQ29tZSB1cCB3aXRo
IGEgYmV0dGVyIHdheSBvZiBoYW5kbGluZyBwbHVnLWluIHNjcm9sbGluZworICAgICAgICAvLyBp
cyB0aGUgYnVnIHRoYXQgdHJhY2tzIHRoZSB3b3JrIG9mIGZpeGluZyB0aGlzLgorICAgICAgICAv
L3JnbiA9IDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKTsKKyAgICAgICAgLy86OlNldFdpbmRv
d1JnbihtX3dpbmRvdywgcmduLCBmYWxzZSk7CisKKwkvKgorICAgICAgICBpZiAobV93aW5kb3dS
ZWN0ICE9IG9sZFdpbmRvd1JlY3QpCisgICAgICAgICAgICA6Ok1vdmVXaW5kb3cobV93aW5kb3cs
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgp
LCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIHRydWUpOworCSovCisKKyAgICAgICAgLy8gUmUtZW5h
YmxlIGRyYXdpbmcuIChUaGlzIHNlcnZlcyB0aGUgZG91YmxlIHB1cnBvc2Ugb2YgdXBkYXRpbmcg
dGhlIGNsaXAgcmVjdCBpZiBpdCBoYXMgY2hhbmdlZC4pCisJLy9yZ24gPSA6OkNyZWF0ZVJlY3RS
Z24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0LnJpZ2h0KCksIG1f
Y2xpcFJlY3QuYm90dG9tKCkpOworICAgICAgICAvLzo6U2V0V2luZG93UmduKG1fd2luZG93LCBy
Z24sIHRydWUpOworICAgICAgICAvLzo6VXBkYXRlV2luZG93KG1fd2luZG93KTsKKyAgICB9Cit9
CisKK0ludFJlY3QgUGx1Z2luVmlld0d0azo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAoreworICAg
IC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAgSW50UmVjdCBjbGlwUmVj
dChtX3dpbmRvd1JlY3QpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0
aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4KKyAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCk7CisgICAgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBS
ZWN0Rm9yTGF5ZXIobGF5ZXIsIHRydWUpKTsKKworICAgIHJldHVybiBjbGlwUmVjdDsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJhbWVHZW9tZXRyeSgpKQorICAgICAgICBXaWRn
ZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisKKyAgICBpZiAoZ3RrV2lkZ2V0KCkgJiYgZ3Rr
V2lkZ2V0KCktPnBhcmVudCkgeworCQlpZiAoZ3RrV2lkZ2V0KCktPnBhcmVudC0+YWxsb2NhdGlv
bi53aWR0aCA+IDEgJiYKKwkJCWd0a1dpZGdldCgpLT5wYXJlbnQtPmFsbG9jYXRpb24uaGVpZ2h0
ID4gMSkgeworCQkJZ19wcmludCAoIlJlcXVlc3Rpb25nIHNpemVcbiIpOworCQkJZ3RrX3dpZGdl
dF9zZXRfc2l6ZV9yZXF1ZXN0KGd0a1dpZGdldCgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOworCQkJaW5pdCgpOworCQl9CisgICAgfQorCisgICAgdXBkYXRlV2luZG93KCk7CisgICAg
c2V0TlBXaW5kb3dSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6Omdlb21ldHJ5
Q2hhbmdlZCgpIGNvbnN0Cit7CisgICAgdXBkYXRlV2luZG93KCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6c2V0Rm9jdXMoKQoreworICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisg
IC8vU2V0Rm9jdXMod2luZG93KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3R3RrOjpzaG93KCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisKKyAg
ICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TaG93V2luZG93KHdpbmRvdywg
U1dfU0hPV05BKTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmhpZGUoKQoreworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICAvL2lmIChYSUQg
d2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TaG93V2luZG93KHdpbmRvdywgU1dfSElERSk7CisK
KyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludE1pc3Np
bmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG51bGxQbHVnaW5JbWFnZTsKKyAgICBpZiAoIW51bGxQ
bHVnaW5JbWFnZSkKKyAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJudWxsUGx1Z2luIik7CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZUdl
b21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRo
KCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50IHhPZmZzZXQgPSAoZnJh
bWVHZW9tZXRyeSgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOworICAgIGludCB5
T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS5oZWlnaHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkg
LyAyOworCisgICAgaW1hZ2VSZWN0Lm1vdmUoeE9mZnNldCwgeU9mZnNldCk7CisKKyAgICBpZiAo
IXJlY3QuaW50ZXJzZWN0cyhpbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250
ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+Y2xpcCh3aW5kb3dDbGlwUmVjdCgpKTsKKyAgICBj
b250ZXh0LT5kcmF3SW1hZ2UobnVsbFBsdWdpbkltYWdlLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7
CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIC8vIERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIg
aW1hZ2UKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzV2luZG93ZWQgfHwgY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOUEV2ZW50IG5wRXZl
bnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLworCisgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisKKyAgICBBU1NFUlQocGFyZW50
KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsK
KyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2
ZW50KTsKKyAgICB9CisKKyAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKwor
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQp
Cit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQg
YW5kIHBhc3MgaXQgb24gKi8KKyAgICAvKgorICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtl
eUNvZGUoKTsgICAgCisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsK
KyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047CisgICAgICAgIG5wRXZlbnQubFBh
cmFtID0gMDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5dXBFdmVudCkgewor
ICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7CisgICAgICAgIG5wRXZlbnQubFBhcmFt
ID0gMHg4MDAwOworICAgIH0KKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQo
bV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKK30KKworLy9leHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOworCit2b2lkIFBsdWdp
blZpZXdHdGs6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBF
dmVudCBucEV2ZW50OworCisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyBvbiAq
LworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNv
bnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7
CisKKyAgICAvKgorICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkp
OworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQor
ICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOworICAgIGlmIChldmVudC0+c2hp
ZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7CisKKyAgICBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW1vdmVFdmVudCB8fAorICAgICAgICBldmVudC0+dHlwZSgp
ID09IG1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdmVy
RXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAgICAg
aWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0
b24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAg
ICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgICAgICAg
ICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICAg
ICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0g
bW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJV
VFRPTkRPV047CisKKyAgICAgICAgICAgICAgICAvLyBGb2N1cyB0aGUgcGx1Z2luCisgICAgICAg
ICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVt
ZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAg
ICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX1JCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkgeworICAgICAg
ICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAg
ICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9OVVA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX01CVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVy
bjsKKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5w
RXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworICAgIC8vIEN1
cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1
bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKKyAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2Fu
dCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50
IHRoYXQuCisgICAgLy9pZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsgICAgIAorfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1f
cGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50
LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50
KCkpCisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVu
dCo+KGV2ZW50KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyZW50KFNjcm9sbFZp
ZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVj
dC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93
LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAg
bV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBnX3ByaW50ICgiQm9vSG9vOiAl
ZHglZCBAICVkLCVkXG4iLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIHAueCgpLCBwLnko
KSk7CisgICAgZ3RrX3dpZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KGd0a1dpZGdldCgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGdfcHJpbnQgKCJTT0NLRVQ6ICVkeCVkIEAgJWQs
JWRcbiIsIGd0a1dpZGdldCgpLT5hbGxvY2F0aW9uLndpZHRoLAorCSAgICAgZ3RrV2lkZ2V0KCkt
PmFsbG9jYXRpb24uaGVpZ2h0LAorCSAgICAgZ3RrV2lkZ2V0KCktPmFsbG9jYXRpb24ueCwgZ3Rr
V2lkZ2V0KCktPmFsbG9jYXRpb24ueSk7CisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0
YW5jZSwgJm1fbnBXaW5kb3cpOworCisgICAgICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgfQorfQorCiti
b29sIFBsdWdpblZpZXdHdGs6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtX3BsdWdpbik7CisgICAgQVNTRVJUKG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKTsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAg
UGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgeworICAgICAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbnBFcnIg
PSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLmRh
dGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9w
YXJhbVZhbHVlcywgTlVMTCk7CisgICAgfQorICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KDApOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzU3RhcnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1f
dXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkpIHsKKyAgICAgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7CisgICAgICAgIGxvYWQoZnJhbWVMb2Fk
UmVxdWVzdCwgZmFsc2UsIDApOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPiBzdHJlYW1z
ID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRl
cmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdp
blN0cmVhbUd0az4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3RyZWFt
KCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7
CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxM
b2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBDbGVhciB0aGUgd2luZG93CisgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAwOworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93KQorICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFu
Y2UsICZtX25wV2luZG93KTsKKworICAgIC8vIERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIE5QRXJy
b3IgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAw
KTsKKworICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3KQoreworICAg
IHNfY3VycmVudFBsdWdpblZpZXcgPSBwbHVnaW5WaWV3OworfQorCitQbHVnaW5WaWV3R3RrKiBQ
bHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygpCit7CisgICAgcmV0dXJuIHNfY3VycmVu
dFBsdWdpblZpZXc7Cit9CisKK3N0YXRpYyBjaGFyKiBjcmVhdGVVVEY4U3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyKQoreworICAgIENTdHJpbmcgY3N0ciA9IHN0ci51dGY4KCk7CisgICAgY2hhciog
cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3RyLmxlbmd0aCgp
ICsgMSkpOworCisgICAgc3RybmNweShyZXN1bHQsIGNzdHIuZGF0YSgpLCBjc3RyLmxlbmd0aCgp
ICsgMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBmcmVlU3RyaW5n
QXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5n
QXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspCisgICAgICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKKworICAgIGZhc3RGcmVl
KHN0cmluZ0FycmF5KTsKK30KKworc3RhdGljIGJvb2wgZ2V0U3RyaW5nKEtKU1Byb3h5KiBwcm94
eSwgSlNWYWx1ZSogcmVzdWx0LCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXByb3h5IHx8
ICFyZXN1bHQgfHwgcmVzdWx0LT5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSlNMb2NrIGxvY2s7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm94eS0+aW50ZXJw
cmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgIFVTdHJpbmcgdXN0cmluZyA9IHJlc3VsdC0+dG9T
dHJpbmcoZXhlYyk7CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAKKyAgICBzdHJp
bmcgPSB1c3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAgS1VSTCBy
ZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgp
LnVybCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVS
TChyZXF1ZXN0VVJMKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBt
X3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQocmVxdWVzdC0+ZnJhbWVMb2FkUmVx
dWVzdCgpLCAwLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJv
YmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBm
aW5pc2hlZCBsb2FkaW5nCisgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkp
IHsKKyAgICAgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwor
ICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3RhbmNl
LCByZXF1ZXN0VVJMLnVybCgpLnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0
YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJn
ZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRo
YXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJl
ZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVx
dWVzdCgpLmZyYW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZp
bmQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZy
YW1lKTsKKyAgICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVn
aW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBh
cmVudCBmcmFtZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJh
bWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1
dGVTY3JpcHQoanNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChy
ZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRG
cmFtZS0+c2NyaXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7Cisg
ICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1H
dGsodGhpcywgcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5y
ZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5u
b3RpZnlEYXRhKCkpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0
cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdH
dGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fcmVxdWVzdFRpbWVyKTsKKyAg
ICBBU1NFUlQobV9yZXF1ZXN0cy5zaXplKCkgPiAwKTsKKworICAgIFBsdWdpblJlcXVlc3RHdGsq
IHJlcXVlc3QgPSBtX3JlcXVlc3RzWzBdOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAg
IAorICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJl
cXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2Ug
dGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCisgICAgaWYgKG1fcmVxdWVzdHMuc2l6ZSgp
ID4gMCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVy
Zm9ybVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2NoZWR1bGVS
ZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0cy5hcHBl
bmQocmVxdWVzdCk7CisgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitO
UEVycm9yIFBsdWdpblZpZXdHdGs6OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorewor
ICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2Qo
KSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRo
b2QoKSA9PSAiUE9TVCIpOworCisgICAgS1VSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gZnJhbWVM
b2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKKworICAgIC8vIGRvbid0IGxldCBhIHBsdWdpbiBzdGFy
dCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgYSBkb2N1bWVudCB0aGF0IGlz
IGJlaW5nIAorICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhlIGxvYWRzIGFyZSBpbiB0aGUgc2Ft
ZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgorICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1l
bnRMb2FkZXIoKSAmJgorICAgICAgICAodGFyZ2V0LmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUt
PnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpKQorICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmlu
Z0lmSmF2YVNjcmlwdFVSTCh1cmwpOworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAg
ICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9wYXJlbnRGcmFtZS0+c2V0dGluZ3MoKTsKKyAg
ICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkg
eworICAgICAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1IgaWYgSlMgaXMgZGlz
YWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQuaXNOdWxsKCkgJiYg
bV9tb2RlID09IE5QX0ZVTEwpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGEgSmF2YVNj
cmlwdCByZXF1ZXN0IGZyb20gYSBzdGFuZGFsb25lIHBsdWctaW4gdGhhdCBpcyBzZWxmLXRhcmdl
dHRlZAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbiBjYXVzZSB0aGUgdXNlciB0byBi
ZSByZWRpcmVjdGVkIHRvIGEgYmxhbmsgcGFnZSAoMzQyNDAzOSkuCisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghanNT
dHJpbmcuaXNOdWxsKCkgfHwgIXRhcmdldC5pc051bGwoKSkgeworICAgICAgICBpZiAoIWpzU3Ry
aW5nLmlzTnVsbCgpICYmICF0YXJnZXQuaXNOdWxsKCkgJiYgbV9wYXJlbnRGcmFtZS0+dHJlZSgp
LT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRGcmFtZSkgeworICAgICAgICAgICAgLy8gRm9yIHNl
Y3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUg
ZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9JTlZBTElEX1BBUkFNOworICAgICAgICB9CisKKyAgICAgICAgUGx1Z2luUmVxdWVzdEd0ayog
cmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0R3RrKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3Rp
ZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBzY2hlZHVsZVJlcXVlc3QocmVxdWVzdCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0gPSBuZXcgUGx1
Z2luU3RyZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCksIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBtX3N0
cmVhbXMuYWRkKHN0cmVhbSk7CisKKyAgICAgICAgc3RyZWFtLT5zdGFydCgpOworICAgIH0KKwor
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIEtVUkwgbWFrZVVSTChjb25z
dCBLVVJMJiBiYXNlVVJMLCBjb25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKK3sKKyAgICBE
ZXByZWNhdGVkU3RyaW5nIHVybFN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEo
cmVsYXRpdmVVUkxTdHJpbmcpOworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMKKyAg
ICB1cmxTdHJpbmcucmVwbGFjZSgnXG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xy
JywgIiIpOworCisgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFy
Z2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRo
b2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJM
KG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJl
cXVlc3QsIHRydWUsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6Omdl
dFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICBGcmFtZUxv
YWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZy
YW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQo
ZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3Rh
cnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1
cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4m
IGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2Jh
dC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRl
c1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisg
ICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBp
ZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYg
Ynl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAg
IGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNl
IGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERp
cmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0
dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRl
c1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4g
SXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkg
KyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5s
aW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMg
ZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZl
cnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3
aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZM
Rjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4g
SXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAv
LyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4K
KyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5
dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBp
ZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNw
YW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFk
cykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAg
ICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGRO
YW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIg
PSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYg
KGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicp
CisgICAgICAgICAgICBjID0gdG91cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNh
cGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisg
ICAgICAgICAgICBjID0gdG9sb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAg
ICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhl
YWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZl
ciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRh
dGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRU
UEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwg
d2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1s
aW5lcworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAg
ICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVv
bCAtIGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFj
dGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAg
IGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMg
PT0gJ1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29u
J3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0g
bGluZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFu
ayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAg
ICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAg
ICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVk
IGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29u
dGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcg
Y3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgbmV3VmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGxp
bmVMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBj
dXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFy
KiBjb2xvbjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYm
IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEobGluZSwgY29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlOworCisgICAgICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7
IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNv
bG9uICE9ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSAiIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShjb2xvbiwgZW9sIC0gY29s
b24pOworCisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdl
dChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdG1wICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitO
UEVycm9yIFBsdWdpblZpZXdHdGs6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQor
eworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lO
VkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisK
KyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVy
OworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IERlcHJl
Y2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFt
ZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoOCk7CisKKyAgICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICB2b2lk
KiBhdHRyczsKKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0
YSgpLCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdV
TEFSKSkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJ
WE1FIC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisJLyoKKyAgICAgICAgdm9pZCog
ZmlsZUhhbmRsZSA9IENyZWF0ZUZpbGVXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIEZJTEVfUkVBRF9EQVRBLCBGSUxFX1NIQVJFX1JFQUQsIDAsIE9QRU5fRVhJU1RJ
TkcsIDAsIDApOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9I
QU5ETEVfVkFMVUUpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisK
KyAgICAgICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNpemVMb3cpOworCisgICAgICAgIERX
T1JEIGJ5dGVzUmVhZDsKKyAgICAgICAgaW50IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVIYW5kbGUs
IGJ1ZmZlci5kYXRhKCksIGF0dHJzLm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7CisKKyAg
ICAgICAgQ2xvc2VIYW5kbGUoZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJldHZhbCA9PSAw
IHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfRklMRV9OT1RfRk9VTkQ7CisJKi8KKwlyZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1j
cHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBv
c3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIu
c2l6ZSgpOworICAgIAorICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0
c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAg
ICAgICAgIHBvc3REYXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
bnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAg
ICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBi
bGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5
dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMg
PSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisg
ICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1M
ZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQg
V2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBo
ZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0
byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExl
bmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisK
KyAgICAgICAgICAgICAgICBwb3N0RGF0YSArPSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBw
b3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRo
b2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVS
TChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmllbGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShQYXNzUmVmUHRyPEZvcm1E
YXRhPihuZXcgRm9ybURhdGEocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSkpOworICAgIGZyYW1l
TG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFt
ZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJv
ciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4s
IGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2lu
Vmlld0d0azo6cG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICAvLyBBcyBkb2N1
bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVS
TCB3aGVuIHVzaW5nIGEgZmlsZS4KKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwg
bGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBmaWxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
R3RrOjpuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3Ry
ZWFtKiogc3RyZWFtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0
ZWQKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworaW50MzIgUGx1Z2luVmll
d0d0azo6d3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAt
MTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBz
dHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBQbHVnaW5TdHJlYW1HdGsqIGJyb3dzZXJT
dHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5TdHJlYW1HdGsqPihzdHJlYW0tPm5kYXRhKTsKKwor
ICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oc3RyZWFt
KSAhPSBtX2luc3RhbmNlKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9F
UlJPUjsKKworICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29u
KTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZp
ZXdHdGs6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtXYW50
c01vemlsbGFVc2VyQWdlbnQpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisg
ICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFy
ZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4g
bV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25z
dCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJv
bUxhdGluMShtZXNzYWdlKTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+
cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVu
dEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgewor
I2lmIDAKKyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisJICBEaXNwbGF5KiBkaXNw
bGF5ID0gR0RLX0RJU1BMQVlfWERJU1BMQVkoZ2RrX2Rpc3BsYXlfZ2V0X2RlZmF1bHQoKSk7CisK
KwkgICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChkaXNw
bGF5KTsKKworCSAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCX0KKyNlbmRpZgorCisgICAgICAg
IGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisJICAgICooKHVuc2lnbmVk
IGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKwkgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVl
KSA9IDA7CisjZW5kaWYKKwkgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCX0KKworICAgICAg
ICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBQTEFURk9STShHVEspCisJICAg
ICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKwkgICAgKigodW5zaWdu
ZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisJICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKKwl9CisKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAg
ICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dT
Y3JpcHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0
ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxh
Lm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2lu
ZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRv
d1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsK
KyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAg
ICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVj
dCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1
Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1l
bnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhw
ZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAo
cGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBs
dWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1
ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgMAorICAgICAg
ICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgdm9pZCogdyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworICAgICAgICAgICAgKigoWElEICopdykgPSBH
REtfV0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cp
OworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRp
ZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnNldFZhbHVlKE5QUFZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Cisg
ICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6CisgICAgICAgICAgICBtX2lzV2luZG93
ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
Y2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgorICAgICAgICAgICAgbV9pc1RyYW5zcGFy
ZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OmludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAg
ICBBU1NFUlQodGltZXIgPT0gJm1faW52YWxpZGF0ZVRpbWVyKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXplKCk7IGkrKykKKyAgICAgICAgV2lkZ2V0
OjppbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMu
Y2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWN0KE5QUmVj
dCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRv
cCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOwor
CisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICAvKiBGSVhNRSAtIEludmFsaWRhdGUg
dGhlIHJlY3RhbmdsZQorICAgICAgICBSRUNUIGludmFsaWRSZWN0KHIpOworICAgICAgICBJbnZh
bGlkYXRlUmVjdChtX3dpbmRvdywgJmludmFsaWRSZWN0LCBGQUxTRSk7CisJKi8KKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAobV9xdWlya3MgJiBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOworICAgICAgICAgICAg
aWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1faW52
YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1f
aXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogRklYTUUgLSBJbnZhbGlkYXRl
IHRoZSByZWdpb24KKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIp
ID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICAqLworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICAvKiBGSVhNRSAtIEZvcmNlIGEgcmVkcmF3
CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cobV93aW5kb3cp
OworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVXaW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsK
KyAgICAqLworfQorCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogUGx1Z2luVmlld0d0azo6Ymlu
ZGluZ0luc3RhbmNlKCkKK3sKKyAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKKworICAgIGlmICgh
bV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3QsICZvYmplY3QpOworICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUiB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FIC0gZXJy
b3I6IGluY29tcGxldGUgdHlwZSDigJhLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZeKAmSB1c2VkIGlu
IG5lc3RlZCBuYW1lIHNwZWNpZmllcgorICAgIC8vIGVycm9yOiBpbmNvbXBsZXRlIHR5cGUg4oCY
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2XigJkgdXNlZCBpbiBuZXN0ZWQgbmFtZSBzcGVjaWZpZXIK
KyAgICAvL1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRG
cmFtZS0+Y3JlYXRlUm9vdE9iamVjdCh0aGlzLCBtX3BhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgp
LT5pbnRlcnByZXRlcigpKTsKKyAgICAvL0tKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5j
ZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0
YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVs
ZWFzZSgpKTsKKworICAgIC8vX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICAvL3Jl
dHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUGx1Z2luVmlld0d0azo6flBs
dWdpblZpZXdHdGsoKQoreworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3Jl
cXVlc3RzKTsKKworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3Vu
dCk7CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisK
KyAgICAvKiBGSVhNRSAtIGRlc3Ryb3kgdGhlIHdpbmRvdworICAgIGlmIChtX3dpbmRvdykKKyAg
ICAgICAgRGVzdHJveVdpbmRvdyhtX3dpbmRvdyk7CisgICAgKi8KKworICAgIG1fcGFyZW50RnJh
bWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOworCisgICAgaWYgKG1fcGx1
Z2luICYmICEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQorICAgICAg
ICBtX3BsdWdpbi0+dW5sb2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlzY29ubmVj
dFN0cmVhbShQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1z
LmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShzdHJlYW0pOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQoreworICAgIC8vIFRoZSBmbGFzaCBwbHVnaW4gb25seSByZXF1ZXN0cyB3aW5kb3dsZXNz
IHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgaWYgKG1pbWVU
eXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgbV9xdWly
a3MgfD0gUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQ7CisgICAgICAgIG1fcXVpcmtz
IHw9IFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlOworICAgICAgICBtX3F1aXJrcyB8PSBQ
bHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzOworICAgIH0KKworICAgIC8v
IFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cg
Y2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRv
dyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobV9wbHVn
aW4tPm5hbWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbV9wbHVnaW4tPm5hbWUoKS5jb250
YWlucygiV2luZG93cyBNZWRpYSIpKSB7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJr
RGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRv
ZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhh
dCBwYXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWlu
LgorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1Bh
cmFtOworICAgIH0KKworICAgIC8vIFRoZSBEaXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRo
ZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNv
CisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVj
dCBzaXplCisgICAgaWYgKG1pbWVUeXBlID09ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWly
a3MgfD0gUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmlu
ZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3Nl
cyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2Jq
ZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93
IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBp
bnN0YW5jZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4K
KyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAg
ICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW47CisKKyAgICAvLyBQcmV2
ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2
ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0g
ImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdp
blF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJU
KHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25l
ZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7
CisKKyAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxv
YyhzaXplb2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoKG1fcXVp
cmtzICYgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25v
cmluZ0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRG
OFN0cmluZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50
XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291
bnQrKzsKKyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCit2b2lk
IHNvY2tldF9wbHVnX2FkZGVkIChHdGtTb2NrZXQqIHNvY2tldCwgZ3BvaW50ZXIpCit7CisgIEd0
a1dpZGdldCogd2lkZ2V0ID0gR1RLX1dJREdFVChzb2NrZXQpOworICBpZiAoR1RLX1dJREdFVF9N
QVBQRUQod2lkZ2V0KSkKKyAgICBnX3ByaW50ICgiWWVhaCwgd2UncmUgbWFwcGVkLlxuIik7Cisg
IGVsc2UKKyAgICBnX3ByaW50ICgiTmFoLCB3ZSdyZSBmdWNrZWQuXG4iKTsKKworICBnX3ByaW50
ICgiQWRkZWQgYSBwbHVnIHRvIG91ciBzb2NrZXQhXG4iKTsKKyAgZ19wcmludCAoIlNPQ0tFVDog
JWR4JWQgQCAlZCwlZFxuIiwgd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoLAorCSAgIHdpZGdldC0+
YWxsb2NhdGlvbi5oZWlnaHQsCisJICAgd2lkZ2V0LT5hbGxvY2F0aW9uLngsIHdpZGdldC0+YWxs
b2NhdGlvbi55KTsKK30KKworUGx1Z2luVmlld0d0azo6UGx1Z2luVmlld0d0ayhGcmFtZSogcGFy
ZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKKyAgICA6IG1fcGFyZW50RnJhbWUocGFy
ZW50RnJhbWUpCisgICAgLCBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQoZWxlbWVu
dCkKKyAgICAsIG1faXNTdGFydGVkKGZhbHNlKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9i
YXNlVVJMKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChtX3BhcmVudEZyYW1l
LT5kb2N1bWVudCgpLT5iYXNlVVJMKCkpKQorICAgICwgbV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5KQorICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJlBsdWdpblZpZXdH
dGs6OnJlcXVlc3RUaW1lckZpcmVkKQorICAgICwgbV9pbnZhbGlkYXRlVGltZXIodGhpcywgJlBs
dWdpblZpZXdHdGs6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wYXJhbU5hbWVzKDAp
CisgICAgLCBtX3BhcmFtVmFsdWVzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9xdWly
a3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorICAgICwgbV9pc1RyYW5zcGFyZW50KGZh
bHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2hhdmVJbml0aWFsaXplZChm
YWxzZSkKKyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25k
UHJvYyhmYWxzZSkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKKyAgICAsIG1f
bWFudWFsU3RyZWFtKDApCit7CisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBHdGtXaWRnZXQqIHNvY2tldCA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChHX09CSkVDVChzb2NrZXQpLCAicGx1Zy1hZGRlZCIsCisJCSAgICAgR19DQUxM
QkFDSyhzb2NrZXRfcGx1Z19hZGRlZCksIE5VTEwpOworICAgIHNldEd0a1dpZGdldChzb2NrZXQp
OworCisgICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2Ut
Pm5kYXRhID0gdGhpczsKKworICAgIG1fbWltZVR5cGUgPSBtaW1lVHlwZS51dGY4KCk7CisgICAg
ZGV0ZXJtaW5lUXVpcmtzKG1pbWVUeXBlKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMpOworCisgICAgbV9tb2RlID0gbV9sb2FkTWFudWFsbHkgPyBOUF9GVUxM
IDogTlBfRU1CRUQ7CisKKyAgICByZXNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47
CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BsdWdpbikgewor
ICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsK
KyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nh
bk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0YXJ0
KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCog
d3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlw
ZSA9IDE7CisgICAgd3MtPmRpc3BsYXkgPSBHREtfRElTUExBWV9YRElTUExBWShnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpKTsKKworICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3Zpc3VhbF9n
ZXRfc3lzdGVtKCk7CisKKyAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKHZpc3Vh
bCk7CisgICAgd3MtPmRlcHRoID0gdmlzdWFsLT5kZXB0aDsKKworICAgIHdzLT5jb2xvcm1hcCA9
IGdka194MTFfY29sb3JtYXBfZ2V0X3hjb2xvcm1hcChnZGtfY29sb3JtYXBfbmV3KHZpc3VhbCwg
ZmFsc2UpKTsKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKKyAgICAKKyAgICBndGtfd2lk
Z2V0X3Nob3coZ3RrV2lkZ2V0KCkpOworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAg
bV93aW5kb3cgPSBHREtfV0lORE9XX1hXSU5ET1coZ3RrV2lkZ2V0KCktPndpbmRvdyk7CisgICAg
ICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAodm9pZCopbV93aW5kb3c7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cu
d2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRGVm
ZXJGaXJzdFNldFdpbmRvd0NhbGwpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9t
ZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3Rr
LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdlR3RrOjp+UGx1Z2luUGFja2Fn
ZUd0aygpCit7CisgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKK30KKworUGx1Z2luUGFja2FnZUd0
azo6UGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFz
dE1vZGlmaWVkKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwg
bV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAg
ICAsIG1fbG9hZENvdW50KDApCit7CisgICAgaW50IHBvcyA9IG1fcGF0aC5kZXByZWNhdGVkU3Ry
aW5nKCkuZmluZFJldignLycpOworCisgICAgbV9maWxlTmFtZSA9IG1fcGF0aC5yaWdodChtX3Bh
dGgubGVuZ3RoKCkgLSBwb3MgLSAxKTsKKworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmZl
dGNoSW5mbygpCit7CisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7CisgICAg
Z2NoYXIqKiBtaW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7CisgICAg
ICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisK
KyAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWltZURhdGFbMl0p
OworICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0YVsxXSwgIiwi
LCAtMSk7CisKKyAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgIGZvciAoaW50
IGogPSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisJZXh0VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZy
b21VVEY4KGV4dGVuc2lvbnNbal0pKTsKKworICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZCht
aW1lRGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZCht
aW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOworCisgICAgICBnX3N0cmZyZWV2KGV4dGVuc2lvbnMp
OworICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWlt
ZURlc2NzKTsKKworICAgIHVubG9hZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBs
dWdpblBhY2thZ2VHdGs6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAg
IG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9k
dWxlID0gZ19tb2R1bGVfb3BlbigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5E
X0xPQ0FMKTsKKyAgICBpZiAoIW1fbW9kdWxlKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFs
aXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUs
ICJOUF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6ZSk7CisgICAgZ19tb2R1bGVf
c3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIiwgKHZvaWQqKikmbV9OUF9H
ZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1No
dXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworCisgICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFtX05QX0dldE1JTUVEZXNjcmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAg
ICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9w
bHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1
bmNzKTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNz
KTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBv
c3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5Q
Tl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3Ry
ZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5Q
Tl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7
CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3Nl
ckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9h
ZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxu
b3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3Rp
ZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5Q
Tl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdp
b247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJv
d3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1
bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBz
RW5hYmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9
IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdp
ZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNz
LmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklz
U3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRG
OEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5f
Q3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0
YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVh
c2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAg
bV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNl
dHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVw
cm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJv
cGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBf
TlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5f
U2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVy
YXRlOworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1
Z2luRnVuY3MpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290
byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0
OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRk
b3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3du
KCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1
bGVfY2xvc2UgKG1fbW9kdWxlKTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1
Z2luUGFja2FnZUd0ayogUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2th
Z2VHdGsqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQp
OworCisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFj
a2FnZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdl
OworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAg
dW5zaWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCks
CisgICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBs
Ojpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNp
emVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdl
R3RrOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdl
R3RrJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9u
OworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisK
Ky8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0x
IHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0
aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisKK3VzaW5nIHN0ZDo6
bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBI
YXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3RyZWFtTWFwJiBzdHJl
YW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7CisgICAgcmV0dXJu
IHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6UGx1Z2luU3RyZWFtR3RrKFBs
dWdpblZpZXdHdGsqIHBsdWdpblZpZXcsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5
RGF0YSkKKyAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkKKyAgICAsIG1f
ZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAsIG1fbm90
aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmlj
YXRpb24pCisgICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fc3RyZWFtU3RhdGUo
U3RyZWFtQmVmb3JlU3RhcnRlZCkKKyAgICAsIG1fZGVsYXlEZWxpdmVyeVRpbWVyKHRoaXMsICZQ
bHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAgICwgbV9kZWxpdmVy
eURhdGEoMCkKKyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoTlVMTCkKKyAgICAsIG1fcGx1Z2luRnVu
Y3MocGx1Z2luVmlldy0+cGx1Z2luKCktPnBsdWdpbkZ1bmNzKCkpCisgICAgLCBtX2luc3RhbmNl
KHBsdWdpblZpZXctPmluc3RhbmNlKCkpCit7CisgICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7CisK
KyAgICBtX3N0cmVhbS51cmwgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICBtX3N0
cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0uZW5kID0gMDsKKyAgICBtX3N0cmVhbS5ub3Rp
ZnlEYXRhID0gMDsKKyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAwOworCisgICAgc3RyZWFt
cygpLmFkZCgmbV9zdHJlYW0sIG1faW5zdGFuY2UpOworfQorCitQbHVnaW5TdHJlYW1HdGs6On5Q
bHVnaW5TdHJlYW1HdGsoKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0
YXJ0ZWQpOworCisgICAgZGVsZXRlIG1fZGVsaXZlcnlEYXRhOworCisgICAgZnJlZSgoY2hhciop
bV9zdHJlYW0udXJsKTsKKworICAgIHN0cmVhbXMoKS5yZW1vdmUoJm1fc3RyZWFtKTsKK30KKwor
dm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1fbG9hZE1hbnVh
bGx5KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0b3AoKQoreworICAgIG1fc3RyZWFt
U3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisKKyAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCkt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7
CisKKyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkK
KyAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJh
bWUtPmxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOworCisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFydFN0cmVh
bSgpCit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7
CisKKyAgICBjb25zdCBLVVJMJiByZXNwb25zZVVSTCA9IG1fcmVzb3VyY2VSZXNwb25zZS51cmwo
KTsKKworICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gpIGV4cGVjdCB0aGF0IGphdmFzY3JpcHQg
VVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0aGlzIGlzIHRoZQorICAgIC8vIGZvcm1h
dCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgorICAgIGlmIChyZXNwb25zZVVSTC51cmwo
KS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKKyAgICAgICAgbV9zdHJlYW0udXJs
ID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVjb2RlX3N0cmluZyhyZXNwb25zZVVSTC51cmwoKSku
dXRmOCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3Bv
bnNlVVJMLnVybCgpLnV0ZjgoKSk7CisgICAgCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1f
cmVzb3VyY2VSZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKyAgICAKKyAgICBsb25nIGxvbmcg
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVu
dExlbmd0aCgpOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAg
ICAgICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0
b3IoIjogIik7CisKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5o
dHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3Qu
bGVuZ3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNo
YXJhY3RlcnMoKSwgc2VwYXJhdG9yLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1faGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRm
OCgpOworCisgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5
IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAor
ICAgICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3Ro
LCBub3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS80NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcg
Y29udGVudEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29u
dGVudC1FbmNvZGluZyIpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAm
JiBjb250ZW50RW5jb2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29u
dGVudExlbmd0aCA9IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRl
cnMuZGF0YSgpOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9
IHRoaXM7CisgICAgbV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExM
KTsKKyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSBtX3Jlc291cmNlUmVzcG9uc2UubGFzdE1v
ZGlmaWVkRGF0ZSgpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisK
KyAgICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAg
bV9yZWFzb24gPSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlm
IGRlc3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxl
cgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBOUEVy
cm9yIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVU
eXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2Rl
KTsKKyAgICAKKyAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwg
dG8gbmV3c3RyZWFtIHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25l
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1T
dGFydGVkOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKG5wRXJyKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBO
UF9OT1JNQUwpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBTb21ldGhpbmcgd2VudCB3
cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQorICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtR3RrOjpvd25lckZv
clN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0
cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmREZXN0cm95U3RyZWFt
KE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0
KHRoaXMpOworCisgICAgZGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwor
dm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQorewor
ICAgIG1fcmVhc29uID0gcmVhc29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7
CisgICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisg
ICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5y
ZXNpemUoMCk7CisgICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0
YS0+c2l6ZSgpID4gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3Ry
ZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgZGVzdHJveVN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVz
dHJveVN0cmVhbSgpCit7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25l
KTsKKyAgICBBU1NFUlQgKCFtX2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgp
ID09IDApOworCisgICAgLyoKKyAgICBpZiAobV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxMKQorICAg
ICAgICA6OkNsb3NlSGFuZGxlKG1fdGVtcEZpbGVIYW5kbGUpOworICAgICovCisKKyAgICBpZiAo
bV9zdHJlYW0ubmRhdGEgIT0gMCkgeworICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9O
RSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5Q
X0FTRklMRU9OTFkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7CisK
KyAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0s
IG1fcGF0aC5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgTlBFcnJvciBucEVycjsKKyAg
ICAgICAgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZt
X3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9
CisKKyAgICBpZiAobV9zZW5kTm90aWZpY2F0aW9uKQorICAgICAgICBtX3BsdWdpbkZ1bmNzLT51
cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkudXJsKCkudXRmOCgp
LCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1T
dG9wcGVkOworCisgICAgLy8gZGlzY29ubmVjdFN0cmVhbSBjYW4gY2F1c2UgdXMgdG8gYmUgZGVs
ZXRlZC4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworICAgIGlm
ICghbV9sb2FkTWFudWFsbHkpCisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlzY29ubmVjdFN0cmVh
bSh0aGlzKTsKKworICAgIG1fcGx1Z2luVmlldyA9IDA7CisKKyAgICAvKgorICAgIGlmICghbV9w
YXRoLmlzTnVsbCgpKQorICAgICAgICA6OkRlbGV0ZUZpbGVBKG1fcGF0aC5kYXRhKCkpOworICAg
ICovCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChU
aW1lcjxQbHVnaW5TdHJlYW1HdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1f
ZGVsYXlEZWxpdmVyeVRpbWVyKTsKKworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpkZWxpdmVyRGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRh
KTsKKyAgICAKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxv
YWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisK
KyAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzIgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRh
LT5zaXplKCk7CisgICAgaW50MzIgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICB3aGls
ZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzIgZGVs
aXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3Ry
ZWFtKTsKKworICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBt
X2RlbGF5RGVsaXZlcnlUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZl
cnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAg
aW50MzIgZGF0YUxlbmd0aCA9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBkYXRh
ID0gbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAgICAg
ICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhCisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbV9w
bHVnaW5GdW5jcy0+d3JpdGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0YUxl
bmd0aCwgKHZvaWQqKWRhdGEpOworICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7
CisgICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VS
Uik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAg
ICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICB0b3RhbEJ5dGVzRGVs
aXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodG90
YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQg
PCB0b3RhbEJ5dGVzKSB7CisgICAgICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5
dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKKyAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVy
eURhdGEsIG1fZGVsaXZlcnlEYXRhICsgdG90YWxCeXRlc0RlbGl2ZXJlZCwgcmVtYWluaW5nQnl0
ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShyZW1haW5pbmdCeXRlcyk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDAp
OworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAgICAg
ICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9CisgICAgfSAKK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RVUkws
IGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKK30KKworfQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBQbHVnaW5WaWV3R3RrX0gKKyNkZWZpbmUgUGx1Z2luVmlld0d0a19I
CisKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIK
KworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNs
dWRlICJucGFwaS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtKUyB7CisgICAgbmFtZXNw
YWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgfQorfQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAg
ICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFzcyBLZXlib2FyZEV2ZW50OworICAg
IGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyR3RrOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7CisgICAgY2xhc3Mg
UGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW1HdGs7CisgICAgY2xhc3Mg
UmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIAorICAgIGVu
dW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdl
bnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwg
PSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlID0gMSA8PCAy
LCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSA9IDEgPDwg
MywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyA9IDEg
PDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luID0gMSA8PCA1LAorICAg
ICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkg
PSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMgeworICAgICAgICBQbHVn
aW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2Fk
UGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKKyAgICB9Owor
CisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUm
LCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworICAgICAg
ICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayog
cGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0KCk7IH0KKyAgICAgICAgTlBQIGlu
c3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorCisgICAgICAgIHZvaWQgc2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdH
dGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAgS0pTOjpCaW5kaW5nczo6SW5zdGFu
Y2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0dXMoKSBj
b25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAgIC8vIE5QTiBmdW5jdGlvbnMKKyAg
ICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGdldFVSTChjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTE5v
dGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29u
c3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5Q
RXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMy
IGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7CisgICAgICAgIE5QRXJyb3IgbmV3
U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0
cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwg
dm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBz
dHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgp
OworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICAgICAgTlBF
cnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAg
ICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7CisgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsKKworICAg
ICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3RrKik7CisKKyAgICAgICAg
Ly8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRy
eShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQo
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
ICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBh
cmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgZ2xvbmcgd25kUHJvYyhYSUQgaFduZCwgZ3Vp
bnQgbWVzc2FnZSwgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0pOworCisgICAgICAgIC8vIFVz
ZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAg
IHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAgICAgICB2b2lkIGluaXQoKTsK
KyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayopOworICAgICAgICBO
UEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVm
LCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9v
bCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4gbV9wbHVn
aW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgRnJhbWUqIG1fcGFyZW50
RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAgIEtVUkwgbV91cmw7Cisg
ICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7Cisg
ICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBl
cmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJl
cXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luVmlld0d0az4g
bV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1faW52YWxpZGF0
ZVRpbWVyOworCisgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrPiBtX21l
c3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5kb3coKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
ICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKworICAg
ICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50OworICAgICAgICBjaGFy
KiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKKworICAgICAg
ICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAg
ICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7Cisg
ICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtR3RrPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPFBsdWdpblJlcXVlc3RH
dGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIGludCBtX3F1aXJrczsKKyAgICAgICAgYm9vbCBt
X2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OworICAgICAgICBib29s
IG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworCisgICAgICAg
IFhJRCBtX3dpbmRvdzsgLy8gZm9yIHdpbmRvd2VkIHBsdWctaW5zCisgICAgICAgIG11dGFibGUg
SW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEgd2luZG93
ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIg
d2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAgICAgICAg
Ym9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51
YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gbV9tYW51YWxTdHJlYW07CisK
KyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3VycmVudFBsdWdpblZpZXc7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVn
aW5QYWNrYWdlR3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+
CisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0aWFsaXplRnVuY1B0cgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9E
ZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmlu
Zz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0ayA6
IHB1YmxpYyBTaGFyZWQ8UGx1Z2luUGFja2FnZUd0az4geworICAgIHB1YmxpYzoKKyAgICAgICAg
flBsdWdpblBhY2thZ2VHdGsoKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2VHdGsqIGNy
ZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2Ny
aXB0aW9uOyB9CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rl
c2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9CisgICAg
ICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7
IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3Q7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VHdGsm
IGEsIGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpOworCisgICAgICAgIGJvb2wgbG9hZCgpOwor
ICAgICAgICB2b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRTaHV0ZG93
bigpOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkgY29uc3Qg
eyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5Q
YWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQp
OworICAgICAgICBib29sIGZldGNoSW5mbygpOworCisgICAgICAgIGJvb2wgbV9pc0xvYWRlZDsK
KyAgICAgICAgaW50IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmluZyBtX2Rlc2NyaXB0aW9u
OworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcgbV9maWxlTmFtZTsKKyAg
ICAgICAgU3RyaW5nIG1fbmFtZTsKKworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXAgbV9t
aW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9taW1lVG9F
eHRlbnNpb25zOworCisgICAgICAgIEdNb2R1bGUqIG1fbW9kdWxlOworICAgICAgICB0aW1lX3Qg
bV9sYXN0TW9kaWZpZWQ7CisKKwlOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIG1fTlBfR2V0
TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRk
b3duOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0
c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBh
Y2thZ2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtl
eSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFz
aCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVp
bnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1
Z2luUGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBS
ZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3Rr
PiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgp
KTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklY
TUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1w
b3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRy
YWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9y
YWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hh
c2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7Cisg
ICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNr
YWdlR3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6
UGx1Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPElu
dFR5cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbUd0a19ICisjZGVmaW5lIFBsdWdpblN0cmVh
bUd0a19ICisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIm5w
ZnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFy
ZWQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJl
c3BvbnNlLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQbHVnaW5W
aWV3R3RrOworCisgICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0
ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsKKworICAgIGNsYXNzIFBsdWdpblN0
cmVhbUd0ayA6IHB1YmxpYyBTaGFyZWQ8UGx1Z2luU3RyZWFtR3RrPiB7CisgICAgcHVibGljOgor
ICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayosIEZyYW1lKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsK
KyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOworICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFy
dCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7
CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9s
b2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KKworICAgICAgICB2b2lkIHNlbmRKYXZhU2Ny
aXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0
cmluZyk7CisgICAgICAgIHZvaWQgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisK
KyAgICAgICAgc3RhdGljIE5QUCBvd25lckZvclN0cmVhbShOUFN0cmVhbSopOworICAgIHByaXZh
dGU6CisgICAgICAgIHZvaWQgZGVsaXZlckRhdGEoKTsKKyAgICAgICAgdm9pZCBkZXN0cm95U3Ry
ZWFtKE5QUmVhc29uKTsKKyAgICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKCk7CisKKyAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OworICAgICAgICBSZXNvdXJjZVJlc3Bv
bnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKKworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAg
ICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICB2b2lkKiBtX25vdGlmeURh
dGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBQbHVnaW5TdHJl
YW1TdGF0ZSBtX3N0cmVhbVN0YXRlOworICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OworCisg
ICAgICAgIFRpbWVyPFBsdWdpblN0cmVhbUd0az4gbV9kZWxheURlbGl2ZXJ5VGltZXI7CisgICAg
ICAgIHZvaWQgZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luU3RyZWFtR3RrPiop
OworCisgICAgICAgIFZlY3RvcjxjaGFyPiogbV9kZWxpdmVyeURhdGE7CisKKyAgICAgICAgdm9p
ZCogbV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBtX3Bs
dWdpbkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2IG1fdHJh
bnNmZXJNb2RlOworICAgICAgICBpbnQzMiBtX29mZnNldDsKKyAgICAgICAgQ1N0cmluZyBtX2hl
YWRlcnM7CisgICAgICAgIENTdHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNvbiBtX3JlYXNv
bjsKKyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRl
ICJucGFwaS5oIiAvLyAjaW5jbHVkZXMgPHdpbmRvd3MuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBp
bnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNp
ZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlz
LCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1p
bi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJl
Zm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6OnN0YXJ0LgorLy8gVGhpcyBzcGVjaWZpY2Fs
bHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3
LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KK3N0YXRpYyBQ
bHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQoreworICAg
IGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICByZXR1cm4gUGx1Z2lu
Vmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwordm9pZCogTlBOX01lbUFsbG9jKHVp
bnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgTlBOX01l
bUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUocHRyKTsKK30KKwordWludDMyIE5QTl9NZW1G
bHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2VzKQoreworICAgIHJl
ZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQo
TlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCkKK3sKKyAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlm
eURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdl
dFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX0dl
dFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwodXJs
LCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNo
YXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQs
IGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fUG9zdFVSTChO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1Ziwg
ZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5
cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBy
ZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRh
cmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJl
YW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOwor
fQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0
cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsKK30KKworY29uc3Qg
Y2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlld0d0ayog
dmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgLy8gRklYTUU6
IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFnZW50IHdpdGggYSBudWxsIGluc3RhbmNlIGlu
IHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24hCisgICAgIC8vIFdlJ2QgbmVlZCBhIHdheSB0
byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2aW5nIGEgZnJhbWUgYXJvdW5kLgorICAgICBp
ZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsKKyAKKyAgICByZXR1cm4gdmlldy0+dXNlckFn
ZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1l
c3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVj
dCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVn
aW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKK3sKKyAgICBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdpb24p
OworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7CisgICAgcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30KKworTlBFcnJvciBO
UE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZh
bHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZhbHVlKE5QUCBpbnN0
YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgcmV0dXJuIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7
Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAg
IHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGluc3RhbmNlKQorewor
ICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK05QTl9QdXNoUG9w
dXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCit7Cit9CisKK3Zv
aWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQoreworfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
R3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkRhdGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lu
cygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAK
KyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFz
ZUd0azsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6
OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAg
IH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjph
ZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0
aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFz
ZUd0azo6cmVmcmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQg
b2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAg
aWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jbGVhcigpOworCisgICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdp
bnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5z
LmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQ
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1Vu
bG9hZC5yZW1vdmUoKml0KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAg
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOwor
CisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9h
ZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1
Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1
Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAg
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFw
bHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBs
dWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8g
UmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAv
LyBHZXQgTUlNRSB0eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsr
bWFwX2l0KSB7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+
Zmlyc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7
Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdp
bnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisg
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBs
dWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBj
YXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVz
OworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01Q
UGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisg
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5k
KCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
blBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBn
X2Rpcl9vcGVuKChpdC0+dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwpOworCWlmIChkaXIpIHsKKwkg
IGNvbnN0IGNoYXIqIG5hbWU7CisJICB3aGlsZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGly
KSkpIHsKKwkgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgobmFtZSwgIi4iIEdfTU9EVUxFX1NVRkZJ
WCkpIHsKKwkgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChpdC0+dXRm
OCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworCSAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdp
blBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQYWNrYWdlKGZpbGVuYW1lLCB0aW1l
KE5VTEwpKTsKKwkgICAgICBpZiAocGx1Z2luUGFja2FnZSkgeworCQlwbHVnaW5zLmFkZChwbHVn
aW5QYWNrYWdlKTsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwl9CisgICAgfQorCisgICAgcmV0
dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9u
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2
ZXJzaW9uOworCisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBv
czsKKyAgICAKKyAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7
CisgICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcu
bGVuZ3RoKCk7ICsrZW5kUG9zKQorICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9z
XSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcu
c3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAg
dmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBl
bmRQb3MgKyAxOworICAgIH0KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJl
dHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNv
bnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ld
ID4gdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBp
ZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVy
IHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJu
IGZhbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRh
YmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRo
czsKKworICAgIGdjaGFyKiBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9k
aXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRocy5hcHBlbmQoaG9t
ZVBhdGgpOworICAgIGdfZnJlZShob21lUGF0aCk7CisKKyAgICBjb25zdCBnY2hhciogbW96UGF0
aCA9IGdfZ2V0ZW52KCJNT1pfUExVR0lOX1BBVEgiKTsKKyAgICBpZiAobW96UGF0aCkgeworICAg
ICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQobW96UGF0aCwgIjoiLCAtMSk7CisK
KyAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKwlwYXRocy5hcHBl
bmQocGx1Z2luUGF0aHNbaV0pOworCisgICAgICBnX2ZyZWUocGx1Z2luUGF0aHMpOworICAgIH0K
KyAgICAvL3BhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5zIik7Cisg
ICAgLy9wYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOworCisgICAgcmV0
dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjppc01JTUVUeXBlUmVnaXN0
ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAoreworICAgIGdfcHJpbnQoImlzTUlN
RVR5cGVSZWdpc3RlcmVkKCVzKVxuIiwgKG1pbWVUeXBlLnV0ZjgoKSkuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gIW1pbWVUeXBlLmlzTnVsbCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlu
cyhtaW1lVHlwZSk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpw
bHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFN0cmluZyBr
ZXkgPSBtaW1lVHlwZS5sb3dlcigpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAo
KCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpCisgICAgICAgICAgICBy
ZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpblBh
Y2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24pCit7CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNSU1FVG9FeHRl
bnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNp
b25zKCkuZW5kKCk7CisKKyAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1l
X2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgIGlmIChleHRlbnNpb25zW2ldID09IGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3Rr
OjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sg
ICAKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSAwOworCisgICAgaWYgKCFtaW1lVHlw
ZS5pc051bGwoKSkKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUp
OworICAgIAorICAgIGlmICghcGx1Z2luKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gdXJsLnBh
dGgoKTsKKyAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5nKHBhdGgucmV2
ZXJzZUZpbmQoJy4nKSArIDEpOworCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvckV4dGVuc2lv
bihleHRlbnNpb24pOworCisgICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUg
Zm91bmQsIHF1ZXJ5IHhkZ21pbWUgZm9yIHRoZSBtaW1lIHR5cGUgCisgICAgICAgIC8vIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luOwor
fQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6Y3JlYXRlUGx1Z2luVmlldyhG
cmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gZmluZFBs
dWdpbih1cmwsIG1pbWVUeXBlKTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0
cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICgh
cGx1Z2luICYmIHJlZnJlc2goKSkKKyAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1p
bWVUeXBlKTsKKyAgICAgICAgCisgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3R3RrKHBhcmVudEZy
YW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMs
IG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpbkRlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1
Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUExVR0lOX0RFQlVHX0hfXworI2RlZmluZSBQTFVHSU5fREVCVUdfSF9fCisKKyNpbmNsdWRl
ICJucGFwaS5oIgorCitzdGF0aWMgY2hhciogZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVy
cm9ycyBvY2N1cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5v
IHNwZWNpZmljIGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAq
LworICAgICJJbnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVS
Ul9JTlZBTElEX0lOU1RBTkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQu
IiwgLyogTlBFUlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBw
bHVnLWluIGZhaWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAg
ICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJS
T1IgKi8KKyAgICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJ
RF9QTFVHSU5fRVJST1IgKi8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZh
bGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9u
cyBvZiBwbHVnLWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lO
Q09NUEFUSUJMRV9WRVJTSU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBp
bnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBp
bnZhbGlkLiIsIC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlu
cyBubyBkYXRhLiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4
cGVjdGVkLiIsIC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBl
cnJvciBjb2RlIgorfTsKKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJy
KSBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSBfUlBURjIoX0NSVF9XQVJOLCAiJXM6ICVzXG4i
LCBfX0ZVTkNUSU9OX18sIGVycm9yU3RyaW5nc1tlcnJdKQorI2RlZmluZSBMT0dfUExVR0lOX05F
VF9FUlJPUigpIF9SUFRGMShfQ1JUX1dBUk4sICIlczogU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJv
YmxlbXMgd2l0aCBuZXR3b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHBy
b2JsZW1zLlxuIiwgX19GVU5DVElPTl9fKQorI2Vsc2UKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRf
RVJST1IoKSAoKHZvaWQpMCkKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSAoKHZvaWQpMCkKKyNl
bmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgX05QRlVOQ1RJT05TX0hfCisjZGVm
aW5lIF9OUEZVTkNUSU9OU19IXworCisjaW5jbHVkZSAibnBydW50aW1lLmgiCisjaW5jbHVkZSAi
bnBhcGkuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChYUF9XSU4pCisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFt
ZSkgX3R5cGUgKF9fc3RkY2FsbCAqIF9uYW1lKQorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ0FM
TEJBQ0soX3R5cGUsIF9uYW1lKSBfdHlwZSAoKiBfbmFtZSkKKyNlbmRpZgorCit0eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fR2V0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
TlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Jl
cXVlc3RSZWFkUHJvY1B0cikoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlz
dCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0p
OwordHlwZWRlZiBpbnQzMiAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJl
YW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOwordHlwZWRlZiBOUEVycm9yICgq
TlBOX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0s
IE5QUmVhc29uIHJlYXNvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fU3RhdHVzUHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3R5cGVkZWYgY29uc3QgY2hhciooKk5Q
Tl9Vc2VyQWdlbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9N
ZW1BbGxvY1Byb2NQdHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVl
UHJvY1B0cikodm9pZCogcHRyKTsKK3R5cGVkZWYgdWludDMyICgqTlBOX01lbUZsdXNoUHJvY1B0
cikodWludDMyIHNpemUpOwordHlwZWRlZiB2b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRy
KShOUEJvb2wgcmVsb2FkUGFnZXMpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFZhbHVlUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVl
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9J
bnZhbGlkYXRlUmVjdFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKK3R5cGVk
ZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJl
Z2lvbiByZWdpb24pOwordHlwZWRlZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQ
IGluc3RhbmNlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93KTsKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9Qb3N0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkws
IGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSk7Cit0eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKK3R5
cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlw
ZWRlZiB2b2lkICgqTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QQm9vbCBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVk
U3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UpOworCit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFz
ZVZhcmlhbnRWYWx1ZVByb2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOworCit0eXBlZGVmIE5Q
SWRlbnRpZmllciAoKk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRG
OCAqbmFtZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRy
KSAoY29uc3QgTlBVVEY4ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIg
KmlkZW50aWZpZXJzKTsKK3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZp
ZXJQcm9jUHRyKSAoaW50MzJfdCBpbnRpZCk7Cit0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJv
bUlkZW50aWZpZXJQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBi
b29sICgqTlBOX0lkZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRp
Zmllcik7Cit0eXBlZGVmIE5QVVRGOCAqKCpOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikg
KE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKKwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fQ3Jl
YXRlT2JqZWN0UHJvY1B0cikgKE5QUCwgTlBDbGFzcyAqYUNsYXNzKTsKK3R5cGVkZWYgTlBPYmpl
Y3QqICgqTlBOX1JldGFpbk9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYg
dm9pZCAoKk5QTl9SZWxlYXNlT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRl
ZiBib29sICgqTlBOX0ludm9rZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElk
ZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdD
b3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1
bHRQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdz
LCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgq
TlBOX0V2YWx1YXRlUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpz
Y3JpcHQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9HZXRQcm9wZXJ0
eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5
TmFtZSwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlO
YW1lLCBjb25zdCBOUFZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9w
ZXJ0eVByb2NQdHIpIChOUFAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSGFzTWV0aG9kUHJvY1B0cikgKE5QUCBucHAsIE5Q
T2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwordHlwZWRlZiBib29sICgq
TlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblBy
b2NQdHIpIChOUE9iamVjdCAqb2JqLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwordHlwZWRlZiBi
b29sICgqTlBOX0VudW1lcmF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5Q
SWRlbnRpZmllciAqKmlkZW50aWZpZXIsIHVpbnQzMl90ICpjb3VudCk7CisKK3R5cGVkZWYgTlBF
cnJvciAoKk5QUF9OZXdQcm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5j
ZSwgdWludDE2IG1vZGUsIGludDE2IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBO
UFNhdmVkRGF0YSogc2F2ZWQpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpO
UFBfU2V0V2luZG93UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKK3R5
cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlN
RVR5cGUgdHlwZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0
eXBlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lk
ICgqTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVh
bSwgY29uc3QgY2hhciogZm5hbWUpOwordHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpO
UFBfV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qg
b2Zmc2V0LCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9Q
cmludFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7Cit0eXBl
ZGVmIGludDE2ICgqTlBQX0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBl
dmVudCk7Cit0eXBlZGVmIHZvaWQgKCpOUFBfVVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNl
LCBjb25zdCBjaGFyKiBVUkwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Cit0
eXBlZGVmIE5QRXJyb3IgKCpOUFBfR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZh
cmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQ
X1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCAqdmFsdWUpOwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Q
cm9jUHRyKSh2b2lkKTsKKwordHlwZWRlZiB2b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRy
KSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogICBKUklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMg
cmlnaHQgbm93CisKK3R5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgeworICAgIHVpbnQx
NiBzaXplOworICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIAorICAgIE5QTl9HZXRVUkxQcm9jUHRy
IGdldHVybDsKKyAgICBOUE5fUG9zdFVSTFByb2NQdHIgcG9zdHVybDsKKyAgICBOUE5fUmVxdWVz
dFJlYWRQcm9jUHRyIHJlcXVlc3RyZWFkOworICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0
cmVhbTsKKyAgICBOUE5fV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QTl9EZXN0cm95U3RyZWFt
UHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKKyAg
ICBOUE5fVXNlckFnZW50UHJvY1B0ciB1YWdlbnQ7CisgICAgTlBOX01lbUFsbG9jUHJvY1B0ciBt
ZW1hbGxvYzsKKyAgICBOUE5fTWVtRnJlZVByb2NQdHIgbWVtZnJlZTsKKyAgICBOUE5fTWVtRmx1
c2hQcm9jUHRyIG1lbWZsdXNoOworICAgIE5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxvYWRw
bHVnaW5zOworICAgIE5QTl9HZXRKYXZhRW52UHJvY1B0ciBnZXRKYXZhRW52OworICAgIE5QTl9H
ZXRKYXZhUGVlclByb2NQdHIgZ2V0SmF2YVBlZXI7CisgICAgTlBOX0dldFVSTE5vdGlmeVByb2NQ
dHIgZ2V0dXJsbm90aWZ5OworICAgIE5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90
aWZ5OworICAgIE5QTl9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBOX1NldFZhbHVl
UHJvY1B0ciBzZXR2YWx1ZTsKKyAgICBOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRh
dGVyZWN0OworICAgIE5QTl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0ciBpbnZhbGlkYXRlcmVnaW9u
OworICAgIE5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIgZm9yY2VyZWRyYXc7CisgICAgCisgICAgTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJQcm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXI7CisgICAgTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKKyAgICBO
UE5fR2V0SW50SWRlbnRpZmllclByb2NQdHIgZ2V0aW50aWRlbnRpZmllcjsKKyAgICBOUE5fSWRl
bnRpZmllcklzU3RyaW5nUHJvY1B0ciBpZGVudGlmaWVyaXNzdHJpbmc7CisgICAgTlBOX1VURjhG
cm9tSWRlbnRpZmllclByb2NQdHIgdXRmOGZyb21pZGVudGlmaWVyOworICAgIE5QTl9JbnRGcm9t
SWRlbnRpZmllclByb2NQdHIgaW50ZnJvbWlkZW50aWZpZXI7CisgICAgTlBOX0NyZWF0ZU9iamVj
dFByb2NQdHIgY3JlYXRlb2JqZWN0OworICAgIE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFp
bm9iamVjdDsKKyAgICBOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIgcmVsZWFzZW9iamVjdDsKKyAg
ICBOUE5fSW52b2tlUHJvY1B0ciBpbnZva2U7CisgICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRy
IGludm9rZURlZmF1bHQ7CisgICAgTlBOX0V2YWx1YXRlUHJvY1B0ciBldmFsdWF0ZTsKKyAgICBO
UE5fR2V0UHJvcGVydHlQcm9jUHRyIGdldHByb3BlcnR5OworICAgIE5QTl9TZXRQcm9wZXJ0eVBy
b2NQdHIgc2V0cHJvcGVydHk7CisgICAgTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0ciByZW1vdmVw
cm9wZXJ0eTsKKyAgICBOUE5fSGFzUHJvcGVydHlQcm9jUHRyIGhhc3Byb3BlcnR5OworICAgIE5Q
Tl9IYXNNZXRob2RQcm9jUHRyIGhhc21ldGhvZDsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1
ZVByb2NQdHIgcmVsZWFzZXZhcmlhbnR2YWx1ZTsKKyAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0
ciBzZXRleGNlcHRpb247CisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1
c2hwb3B1cHNlbmFibGVkc3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQ
dHIgcG9wcG9wdXBzZW5hYmxlZHN0YXRlOworICAgIE5QTl9FbnVtZXJhdGVQcm9jUHRyIGVudW1l
cmF0ZTsKK30gTlBOZXRzY2FwZUZ1bmNzOworCit0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5j
cyB7CisgICAgdWludDE2IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgTlBQX05ld1By
b2NQdHIgbmV3cDsKKyAgICBOUFBfRGVzdHJveVByb2NQdHIgZGVzdHJveTsKKyAgICBOUFBfU2V0
V2luZG93UHJvY1B0ciBzZXR3aW5kb3c7CisgICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3Ry
ZWFtOworICAgIE5QUF9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5Q
UF9TdHJlYW1Bc0ZpbGVQcm9jUHRyIGFzZmlsZTsKKyAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIg
d3JpdGVyZWFkeTsKKyAgICBOUFBfV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QUF9QcmludFBy
b2NQdHIgcHJpbnQ7CisgICAgTlBQX0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKKyAgICBOUFBf
VVJMTm90aWZ5UHJvY1B0ciB1cmxub3RpZnk7CisgICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsK
KyAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QUF9TZXRWYWx1ZVByb2NQ
dHIgc2V0dmFsdWU7Cit9IE5QUGx1Z2luRnVuY3M7CisKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJB
Q0soTlBFcnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1
Z2luRnVuY3MqKTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dl
dE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIpKHZvaWQpOworCisjaWYgZGVmaW5lZChYUF9NQUNPU1gp
Cit0eXBlZGVmIHZvaWQgICAgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1
bmNQdHIpKHZvaWQpOwordHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVG
dW5jcyosIE5QUGx1Z2luRnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7CisjZW5kaWYKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVn
aW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4
KHVuc2lnbmVkIGkpIAoreyAKKyAgICBQbHVnaW5EYXRhYmFzZUd0ayAqZGIgPSBQbHVnaW5EYXRh
YmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcg
UGx1Z2luSW5mbzsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwYWNrYWdlID0gZGItPnBsdWdpbnMo
KVtpXTsKKworICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgaW5mby0+Zmls
ZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2Ny
aXB0aW9uKCk7CisKKyAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2Ny
aXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgp
OworICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1p
bWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWlt
ZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICBpbmZvLT5taW1l
cy5hcHBlbmQobWltZSk7CisgICAgICAgIAorICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0
OworICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgbWltZS0+cGx1Z2lu
ID0gaW5mbzsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+
bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOwor
CisgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGluZm87Cit9CisKK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9y
ZTo6cGx1Z2luQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZUd0azo6
aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOworfQorCitib29sIFBsdWdJbklu
Zm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBl
KSAKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+
aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5z
KGJvb2wgcmVsb2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxs
ZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKKworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAg
ICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDI3Mzc2KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAt
NjAsNiArNjAsNyBAQCBndGstcG9ydDohY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9CiAj
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5BQkxFX1hCTD0x
CiBxdC1wb3J0OiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0uKTogREVGSU5FUyArPSBF
TkFCTEVfU1ZHPTEKIGd0ay1wb3J0OkRFRklORVMgKz0gRU5BQkxFX1NWRz0xCitndGstcG9ydDpE
RUZJTkVTICs9IFhQX1VOSVgKIAogREVGSU5FUyArPSBXVEZfQ0hBTkdFUz0xCiAKQEAgLTc4Miwx
MyArNzgzLDI3IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogCiBn
dGstcG9ydCB7CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmggXAorICAgIHBsdWdpbnMvZ3Rr
L1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgg
XAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvbnBm
dW5jdGlvbnMuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL0dseXBoUGFnZVRyZWVO
b2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3Jt
L0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9G
b250RGF0YS5jcHAgXAotICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwIAorICAgIHBs
YXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZv
U3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAor
ICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9Q
bHVnaW5TdHJlYW1HdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBc
CisgICAgcGx1Z2lucy9ndGsvbnBhcGkuY3BwCiB9CiAKIHF0LXBvcnQgewpAQCAtODkwLDYgKzkw
NSw3IEBAIHF0LXBvcnQgewogfQogCiBndGstcG9ydCB7CisgICAgSU5DTFVERVBBVEggKz0gLi4v
V2ViQ29yZS9wbHVnaW5zL2d0awogICAgIEhFQURFUlMgKz0gXAogICAgICAgICAuLi9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvQXBp
L3dlYmtpdGd0a2RlZmluZXMuaCBcCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlz
aW9uIDI3Mzc2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRl
IDx0aW1lLmg+CiAKKyN1bmRlZiBTdGF0dXMKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDYWNoZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMjczNzYpCisrKyBXZWJD
b3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBA
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI3VuZGVm
IFVua25vd24KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2NMb2FkZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17239</attachid>
            <date>2007-11-13 13:40:15 -0800</date>
            <delta_ts>2007-11-14 10:55:35 -0800</delta_ts>
            <desc>Update plug-ins patch</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>175359</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2aXNpb24gMjc3NTApCisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
CiAjaWZkZWYgWFBfVU5JWAogICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogICAgICNpbmNsdWRl
IDxYMTEvWHV0aWwuaD4KKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgogCiAjaWZkZWYg
WFBfV0lOCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkocmV2aXNpb24gMjc3
NTApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsOCBAQCBleHRlcm4gIkMiIHsKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNp
bmNsdWRlICJucGFwaS5oIgogCisjdW5kZWYgTm9uZQorCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gp
ICYmIGRlZmluZWQoX19MUDY0X18pCiAjZXJyb3IgNjQtYml0IE5ldHNjYXBlIHBsdWctaW5zIGFy
ZSBub3Qgc3VwcG9ydGVkIG9uIE1hYyBPUyBYCiAjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAy
Nzc1MCkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8K
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRG9uIEdpYnNvbiA8ZGdpYnNvbjc3QGdtYWlsLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CkBAIC01
NiwxMiArNTcsMTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNs
dWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGll
bnQoV2ViS2l0RnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKwksIG1fcGx1Z2lu
VmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpA
QCAtMTY3LDkgKzE3MywzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxT
dWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxv
YWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1f
cmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0
YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVz
cG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgewor
ICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKwkJLy8gU2V0dGluZyB0aGUgZW5jb2Rp
bmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBp
cyBub3JtYWxseSBkb25lCisJCS8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2Vp
dmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBh
Ym91dDpibGFuaykuCisJCVN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGlu
ZygpOworCQlib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisJCWlmICghdXNl
ckNob3NlbikKKwkJCWVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05h
bWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1l
TG9hZGVyKCk7CisJCWZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nl
bik7CisJCWlmIChkYXRhKQorCQkJZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsK
KyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbikgeworCQkJbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2Uo
bG9hZGVyLT5yZXNwb25zZSgpKTsKKwkJCW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVl
OworCQl9CisJCW1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRp
ZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjUxLDggKzI3OCwxMyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9m
cmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdl
dCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5E
YXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9m
cmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMs
IG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygp
ID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMjk0
LDggKzMyNiw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVn
aW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9w
bHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9
CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29u
c3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtMzE3LDYgKzM0
OCw5IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRh
dGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVU
eXBlKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdp
bjsKKwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5
cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAK
QEAgLTQ0NSwxNCArNDc5LDE0IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVk
TUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZy
YW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIg
aXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8v
IHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2Fz
ZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3Ry
aW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBi
b29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlz
TnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRl
eHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0
RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcp
CisgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsK
KyAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAgbV9wbHVnaW5W
aWV3ID0gMDsKKyAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIApAQCAtNTA4LDcgKzU0MiwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzYXZl
RG9jdW1lbnRWaWV3CiBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQogRnJhbWUqIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9s
aWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKSB7CisgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICBtX3BsdWdp
blZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICB9Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9y
U3RhbmRhcmRMb2FkKGNvbnN0IEtVUkwmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JSZWxvYWQoY29uc3QgS1VSTCYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMjc3NTApCisrKyBXZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZyYW1lIFdlYktpdEZyYW1lOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTE4MCw3ICsxODIsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2ViS2l0RnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2Vy
QWdlbnQ7CisKKwkvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisJV2ViQ29yZTo6
UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworCWJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkocmV2aXNp
b24gMjc3NTApCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE2LDYgKzQxNiw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX2luaXQoV2Vi
S2l0UGFnZSoKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7CiAg
ICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIAorICAgIHNldHRp
bmdzLT5zZXRQbHVnaW5zRW5hYmxlZChUUlVFKTsKKwogICAgIEdUS19XSURHRVRfU0VUX0ZMQUdT
KHBhZ2UsIEdUS19DQU5fRk9DVVMpOwogICAgIHBhZ2VEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRf
RlJBTUUod2Via2l0X2ZyYW1lX25ldyhwYWdlKSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkocmV2aXNpb24g
Mjc3NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsOCBAQAogI2luY2x1ZGUgPFF0R3VpL3Fmb250bWV0cmljcy5oPgogI2VuZGlmCiAKKyN1
bmRlZiBDb21wbGV4CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2
aXNpb24gMjc3NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMiArNTgsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKERl
cHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQogCi1QbHVnaW5JbmZvKiBQ
bHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVk
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9y
ZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1i
b29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBX
ZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotCiBD
b2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZv
aWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZpc2lvbiAyNzc1MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4Nyw1ICsyODcsMTkgQEAgdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJv
bwogCiB2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsKKyAgICBpZiAoIXBh
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihwYXJlbnQoKSk7CisgICAgSW50UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9D
b250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKTsKKworICAgIC8vIERv
bid0IGFsbG93IHRoZSBhbGxvY2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRTaXpl
IHN6ID0gZnJhbWVHZW9tZXRyeSgpLnNpemUoKTsKKyAgICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCks
IHN6LndpZHRoKCksIHN6LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiB9CkluZGV4OiBXZWJDb3JlL2NvbmZpZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI3NzUwKQorKysgV2Vi
Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTAgQEAKICNpbmNsdWRl
IDx3dGYvRGlzYWxsb3dDVHlwZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjZGVm
aW5lIFdURl9VU0VfTlBPQkpFQ1QgMQorI2VuZGlmCisKICNpZiAhQ09NUElMRVIoTVNWQykgLy8g
Y2FuJ3QgZ2V0IHRoaXMgdG8gY29tcGlsZSBvbiBWaXN1YWwgQysrIHlldAogI2RlZmluZSBBVk9J
RF9TVEFUSUNfQ09OU1RSVUNUT1JTIDEKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVu
dC5oCShyZXZpc2lvbiAyNzc1MCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDEwIEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogCisjdW5kZWYgTm9uZQorI3VuZGVmIEFib3ZlCisjdW5kZWYgQmVsb3cKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MQ29sbGVjdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBs
dWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFz
cyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsK
KyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQ
bHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2FnZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisg
ICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZp
ZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZy
ZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0
OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcm
KTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1
Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
OworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pOworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8
U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBt
X3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5
cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0
ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0ODMgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICov
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5W
aWV3R3RrLmgiCisKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKworI2luY2x1ZGUgPGdkay9nZGtk
aXNwbGF5Lmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNp
bmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgx
MS9TaGVsbC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3Ry
aW5nRGVmcy5oPgorCisvLyBGb250LmggY3JhY2sKKyN1bmRlZiBBdXRvCisjdW5kZWYgU2ltcGxl
CisjdW5kZWYgQ29tcGxleAorCisvLyBSZW5kZXJTdHlsZS5oIGNyYWNrCisjdW5kZWYgTm9uZQor
I3VuZGVmIENpcmNsZQorI3VuZGVmIFJlY3RhbmdsZQorCisvLyBDYWNoZWRSZXNvdXJjZS5oIGNy
YWNrCisjdW5kZWYgU3RhdHVzCisjdW5kZWYgTm90Q2FjaGVkCisjdW5kZWYgVW5rbm93bgorI3Vu
ZGVmIE5ldworI3VuZGVmIFBlbmRpbmcKKyN1bmRlZiBDYWNoZWQKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJranNf
d2luZG93LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNr
YWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJucGFwaS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlIDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKK3VzaW5nIEtKUzo6
RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwor
dXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0
cmluZzsKKwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFz
cyBQbHVnaW5SZXF1ZXN0R3RrIHsKK3B1YmxpYzoKKyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0
IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgdm9pZCogbm90aWZ5RGF0YSkKKyAgICAgICAgOiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVM
b2FkUmVxdWVzdCkKKyAgICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAg
LCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAg
Y29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgIHZvaWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJl
dHVybiBtX25vdGlmeURhdGE7IH0KKyAgICBib29sIHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247IH0KK3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVx
dWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7CisgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJv
b2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgIC8vIEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisK
K3N0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsID0gMC4wMDE7
CisKK2NsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsgeworcHVibGljOgorICAgIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJHdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKKyAgICAgICAg
OiBtX2JhY2soMCksIG1fZnJvbnQoMCkKKyAgICAgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmll
dykKKyAgICAgICAgLCBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdl
VGhyb3R0bGVyR3RrOjptZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKQorICAgIHsKKyAgICAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdpdGggb3VyIGlubGluZSBtZXNzYWdlcworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKysp
CisgICAgICAgICAgICBtX2lubGluZU1lc3NhZ2VzW2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdl
c1tpICsgMV07CisgICAgICAgIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAx
XS5uZXh0ID0gMDsKKyAgICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNz
YWdlc1swXTsKKyAgICB9CisKKyAgICB+UGx1Z2luTWVzc2FnZVRocm90dGxlckd0aygpCisgICAg
eworICAgICAgICBQbHVnaW5NZXNzYWdlKiBuZXh0OworICAgIAorICAgICAgICBmb3IgKFBsdWdp
bk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgewor
ICAgICAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgICAgICBmcmVlTWVzc2Fn
ZShtZXNzYWdlKTsKKyAgICAgICAgfSAgICAgICAgCisgICAgfQorICAgIAorICAgIHZvaWQgYXBw
ZW5kTWVzc2FnZShYSUQgaFduZCwgZ3VpbnQgbXNnLCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJh
bSkgCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNz
YWdlKCk7CisKKyAgICAgICAgbWVzc2FnZS0+aFduZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2Ut
Pm1zZyA9IG1zZzsKKyAgICAgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOworICAgICAgICBt
ZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07CisgICAgICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisg
ICAgICAgIGlmIChtX2JhY2spCisgICAgICAgICAgICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOwor
ICAgICAgICBtX2JhY2sgPSBtZXNzYWdlOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAg
ICAgICBtX2Zyb250ID0gbWVzc2FnZTsKKworICAgICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxl
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3Rh
cnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsKKyAgICAgICAgWElEIGhXbmQ7CisgICAgICAg
IGd1aW50IG1zZzsKKyAgICAgICAgZ3VpbnQgd1BhcmFtOworICAgICAgICBnbG9uZyBsUGFyYW07
CisKKyAgICAgICAgc3RydWN0IFBsdWdpbk1lc3NhZ2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAg
ICB2b2lkIG1lc3NhZ2VUaHJvdHRsZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90
dGxlckd0az4qKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJv
bnQ7CisgICAgICAgIG1fZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgICAgICBpZiAobWVzc2Fn
ZSA9PSBtX2JhY2spCisgICAgICAgICAgICBtX2JhY2sgPSAwOworCisJLy8gICAgICAgIDo6Q2Fs
bFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQs
IG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFtLCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAg
ICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworCisgICAgICAgIGlmIChtX2Zyb250KQorICAgICAg
ICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxl
VGltZUludGVydmFsKTsKKyAgICB9CisKKyAgICBQbHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3Nh
Z2UoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSAqbWVzc2FnZTsKKworICAgICAgICBp
ZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJ
bmxpbmVNZXNzYWdlczsKKyAgICAgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2Fn
ZS0+bmV4dDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdp
bk1lc3NhZ2U7CisKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBp
c0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgeworICAgICAgICBy
ZXR1cm4gbWVzc2FnZSA+PSAmbV9pbmxpbmVNZXNzYWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lu
bGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV07CisgICAgfQorCisgICAgdm9pZCBm
cmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNzYWdlKSAKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBt
X2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0g
bWVzc2FnZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAg
ICB9CisKKyAgICBQbHVnaW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2Fn
ZSogbV9iYWNrOworICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29u
c3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsKKyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5l
TWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXNdOworICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlu
bGluZU1lc3NhZ2VzOworCisgICAgVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9t
ZXNzYWdlVGhyb3R0bGVUaW1lcjsKK307CisKK3N0YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZK
YXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIXVybC51cmwoKS5zdGFy
dHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VS
TDo6ZGVjb2RlX3N0cmluZyh1cmwudXJsKCkubWlkKDExKSk7Cit9CisKK1BsdWdpblZpZXdHdGsq
IFBsdWdpblZpZXdHdGs6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCitjb25zdCB3Y2hhcl90
KiBrV2ViUGx1Z2luVmlld1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Citjb25z
dCB3Y2hhcl90KiBrV2ViUGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVy
dHkiOworCitzdGF0aWMgY29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUu
MCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAw
NjEwMTAgRmlyZWZveC8yLjAiOworCitzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQor
eworICAgIHN0YXRpYyBib29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAg
ICBpZiAoaGF2ZVJlZ2lzdGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93
KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRX
aW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2Ns
aXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRz
VG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6
ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0
Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlmICht
X3dpbmRvdyAmJiAobV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAh
PSBvbGRDbGlwUmVjdCkpIHsKKyAgICAgICAgUmVnaW9uIHJnbjsKKworICAgICAgICAvLyBUbyBw
cmV2ZW50IGZsYXNoZXMgd2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVyaW5n
IHRoZSB3aW5kb3cKKyAgICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhlIHdp
bmRvdyB0byB0aGUgemVybyByZWN0LgorCisgICAgICAgIC8vIEZJWE1FOiBTZXR0aW5nIHRoZSB3
aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyAKKyAg
ICAgICAgLy8gcmVwYWludCBwcm9ibGVtcyB3aXRoIGF0IGxlYXN0IHRoZSBXTVAgYW5kIEphdmEg
cGx1Z2lucy4KKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUyMTExODc+IENvbWUgdXAgd2l0
aCBhIGJldHRlciB3YXkgb2YgaGFuZGxpbmcgcGx1Zy1pbiBzY3JvbGxpbmcKKyAgICAgICAgLy8g
aXMgdGhlIGJ1ZyB0aGF0IHRyYWNrcyB0aGUgd29yayBvZiBmaXhpbmcgdGhpcy4KKyAgICAgICAg
Ly9yZ24gPSA6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CisgICAgICAgIC8vOjpTZXRXaW5k
b3dSZ24obV93aW5kb3csIHJnbiwgZmFsc2UpOworCisJLyoKKyAgICAgICAgaWYgKG1fd2luZG93
UmVjdCAhPSBvbGRXaW5kb3dSZWN0KQorICAgICAgICAgICAgOjpNb3ZlV2luZG93KG1fd2luZG93
LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgo
KSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLCB0cnVlKTsKKwkqLworCisgICAgICAgIC8vIFJlLWVu
YWJsZSBkcmF3aW5nLiAoVGhpcyBzZXJ2ZXMgdGhlIGRvdWJsZSBwdXJwb3NlIG9mIHVwZGF0aW5n
IHRoZSBjbGlwIHJlY3QgaWYgaXQgaGFzIGNoYW5nZWQuKQorCS8vcmduID0gOjpDcmVhdGVSZWN0
UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBt
X2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgLy86OlNldFdpbmRvd1JnbihtX3dpbmRvdywg
cmduLCB0cnVlKTsKKyAgICAgICAgLy86OlVwZGF0ZVdpbmRvdyhtX3dpbmRvdyk7CisKKwkJR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisJCWlm
IChtX3dpZGdldCkgeworCQkJZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxs
b2NhdGlvbik7CisJCQlndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihtX3dpZGdldCks
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworCQkJZ3RrX3h0YmluX3Jlc2l6
ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7
CisJCX0KKyAgICB9Cit9CisKK0ludFJlY3QgUGx1Z2luVmlld0d0azo6d2luZG93Q2xpcFJlY3Qo
KSBjb25zdAoreworICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAg
SW50UmVjdCBjbGlwUmVjdChtX3dpbmRvd1JlY3QpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGVs
ZW1lbnQgYW5kIGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQg
ZnJhbWUgdmlldy4KKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gbV9lbGVt
ZW50LT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZp
ZXctPndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIobGF5ZXIsIHRydWUpKTsKKworICAgIHJldHVybiBj
bGlwUmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJpbnRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJhbWVHZW9tZXRyeSgp
KQorICAgICAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisKKyAgICBpZiAobV93
aWRnZXQgJiYgbV93aWRnZXQtPnBhcmVudCkKKwkJaW5pdCgpOworCisJZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCByZWN0LngoKSwgcmVjdC55KCkpOworCWd0a194
dGJpbl9yZXNpemUobV93aWRnZXQsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAg
ICB1cGRhdGVXaW5kb3coKTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlld0d0azo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKwlXaWRnZXQ6Omdlb21l
dHJ5Q2hhbmdlZCgpOworICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OnNldEZvY3VzKCkKK3sKKyAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAvL1Nl
dEZvY3VzKHdpbmRvdyk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgLy9p
ZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX1NI
T1dOQSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpo
aWRlKCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgLy9pZiAoWElEIHdpbmRv
dyA9IG1fd2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX0hJREUpOworCisgICAg
V2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1
Z2luSWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgc3RhdGljIEltYWdlKiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2lu
SW1hZ2UpCisgICAgICAgIG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgibnVsbFBsdWdpbiIpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRy
eSgpLngoKSwgZnJhbWVHZW9tZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBu
dWxsUGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2Vv
bWV0cnkoKS53aWR0aCgpIC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNl
dCA9IChmcmFtZUdlb21ldHJ5KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsK
KworICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0
LmludGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+
c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4
dC0+ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFt
X2lzU3RhcnRlZCkgeworICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdl
CisgICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50Owor
ICAgIC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5k
b3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5p
c0ZyYW1lVmlldygpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQp
IHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAg
ICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7
CisgICAgfQorCisgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBp
ZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQorewor
ICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBw
YXNzIGl0IG9uICovCisgICAgLyoKKyAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2Rl
KCk7ICAgIAorCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9
IDA7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGtleXVwRXZlbnQpIHsKKyAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4
ODAwMDsKKyAgICB9CisgICAgKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5z
dGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9
CisKKy8vZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQg
bnBFdmVudDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAg
ICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50
c1RvV2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisg
ICAgLyoKKyAgICBucEV2ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAg
ICBucEV2ZW50LndQYXJhbSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAg
ICAgbnBFdmVudC53UGFyYW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5
KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50
LT50eXBlKCkgPT0gbW91c2Vtb3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBt
b3VzZW91dEV2ZW50IHx8IAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50
KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChl
dmVudC0+YnV0dG9uRG93bigpKQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAg
IG5wRXZlbnQud1BhcmFtIHw9IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAg
ICBucEV2ZW50LndQYXJhbSB8PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAg
ICBucEV2ZW50LndQYXJhbSB8PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNl
ZG93bkV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAg
ICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05E
T1dOOworCisgICAgICAgICAgICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAg
ICAgIG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9SQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dp
dGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9NQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47Cisg
ICAgKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
IGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50
bHksIFdpZGdldDo6c2V0Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlv
biBpbiBFdmVudEhhbmRsZXIuY3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhh
dCB3ZSBzZXQgaWdub3JlTmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0
LgorICAgIC8vaWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdp
biB8fCBtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNN
b3VzZUV2ZW50KCkpCisgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQor
ICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihl
dmVudCkpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBw
YXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKwlpZiAoIXBhcmVudCgpKQorCQly
ZXR1cm47CisKKyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50
KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54
ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93Lndp
ZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC50b3AgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0Lndp
ZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwor
CisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAg
S0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworCisg
ICAgICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEFTU0VSVChtX3dpbmRvdyk7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXdHdGs6OnN0YXJ0
KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEFTU0VSVChtX3BsdWdpbik7CisgICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5u
ZXdwKTsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVu
dFBsdWdpblZpZXcodGhpcyk7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2Rl
LCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7CisgICAg
fQorICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisgICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
X2lzU3RhcnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2Fk
TWFudWFsbHkpIHsKKyAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0Owor
ICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2Qo
IkdFVCIpOworICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVS
TChtX3VybCk7CisgICAgICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0b3AoKQor
eworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8
UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hT
ZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQo
KTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3Ig
aXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+
c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisK
KyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZh
bHNlOworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAg
ICAvLyBEZXN0cm95IHRoZSBwbHVnaW4KKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5w
ZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXco
UGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0g
cGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBs
dWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0
aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3Ry
aW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHko
cmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJh
eSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0
YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsK
KyAgICBVU3RyaW5nIHVzdHJpbmcgPSByZXN1bHQtPnRvU3RyaW5nKGV4ZWMpOworICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgCisgICAgc3RyaW5nID0gdXN0cmluZzsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwZXJmb3JtUmVxdWVzdChQbHVnaW5S
ZXF1ZXN0R3RrKiByZXF1ZXN0KQoreworICAgIEtVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZy
YW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICBTdHJpbmcganNT
dHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwocmVxdWVzdFVSTCk7CisKKyAgICBp
ZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkt
PnVybFNlbGVjdGVkKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKSwgMCwgZmFsc2UsIHRydWUp
OworCisgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91
bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZworICAgICAg
ICBpZiAocmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICBLSlM6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgICAgIG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC51cmwoKS51dGY4
KCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0
cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2Ny
aXB0IHBsdWdpbgorICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQu
CisgICAgQVNTRVJUKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKS5pc0Vt
cHR5KCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJl
cXVlc3QoKS5mcmFtZU5hbWUoKSkgPT0gbV9wYXJlbnRGcmFtZSk7CisgICAgCisgICAgLy8gRXhl
Y3V0aW5nIGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVk
LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZnJhbWUuCisgICAgUmVmUHRy
PEZyYW1lPiBwYXJlbnRGcmFtZSA9ICBtX3BhcmVudEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJl
Y2F0ZWRTdHJpbmcoKSwgdHJ1ZSk7CisKKyAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVz
dCgpLmZyYW1lTmFtZSgpLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7
CisKKyAgICAgICAgaWYgKCFnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCksIHJl
c3VsdCwgcmVzdWx0U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU3Ry
aW5nIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOworICAgICAgICBSZWZQdHI8UGx1Z2luU3Ry
ZWFtR3RrPiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIHBhcmVudEZyYW1lLmdl
dCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAg
bV9zdHJlYW1zLmFkZChzdHJlYW0pOworICAgICAgICBzdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3Ry
ZWFtKHJlcXVlc3RVUkwsIGNzdHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpy
ZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGltZXIpCit7CisgICAgQVNT
RVJUKHRpbWVyID09ICZtX3JlcXVlc3RUaW1lcik7CisgICAgQVNTRVJUKG1fcmVxdWVzdHMuc2l6
ZSgpID4gMCk7CisKKyAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbV9yZXF1ZXN0c1sw
XTsKKyAgICBtX3JlcXVlc3RzLnJlbW92ZSgwKTsKKyAgICAKKyAgICAvLyBTY2hlZHVsZSBhIG5l
dyByZXF1ZXN0IGJlZm9yZSBjYWxsaW5nIHBlcmZvcm1SZXF1ZXN0IHNpbmNlIHRoZSBjYWxsIHRv
CisgICAgLy8gcGVyZm9ybVJlcXVlc3QgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBk
ZWxldGVkLgorICAgIGlmIChtX3JlcXVlc3RzLnNpemUoKSA+IDApCisgICAgICAgIG1fcmVxdWVz
dFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3Rr
KiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpOworICAgIG1fcmVx
dWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjps
b2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5v
dGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAg
IEtVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAg
ICAKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURf
VVJMOworCisgICAgU3RyaW5nIHRhcmdldCA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7
CisKKyAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5v
IGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNwbGF5
ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4K
KyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgIT0gbV9w
YXJlbnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYKKyAgICAgICAg
KHRhcmdldC5pc051bGwoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAh
PSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisK
KyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwodXJsKTsK
KyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fcGFyZW50RnJhbWUtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICghc2V0dGluZ3MgfHwg
IXNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIFJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96
aWxsYSBkb2VzLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAg
ICAgIH0gZWxzZSBpZiAodGFyZ2V0LmlzTnVsbCgpICYmIG1fbW9kZSA9PSBOUF9GVUxMKSB7Cisg
ICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBhIEphdmFTY3JpcHQgcmVxdWVzdCBmcm9tIGEgc3Rh
bmRhbG9uZSBwbHVnLWluIHRoYXQgaXMgc2VsZi10YXJnZXR0ZWQKKyAgICAgICAgICAgIC8vIGJl
Y2F1c2UgdGhpcyBjYW4gY2F1c2UgdGhlIHVzZXIgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGJsYW5r
IHBhZ2UgKDM0MjQwMzkpLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpIHx8ICF0YXJn
ZXQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSAmJiAhdGFyZ2V0
LmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFy
ZW50RnJhbWUpIHsKKyAgICAgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFs
bG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhl
IHBsdWctaW4uCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAg
ICAgfQorCisgICAgICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBuZXcgUGx1Z2luUmVx
dWVzdEd0ayhmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsK
KyAgICAgICAgc2NoZWR1bGVSZXF1ZXN0KHJlcXVlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAg
IFBsdWdpblN0cmVhbUd0ayogc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3Bh
cmVudEZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZW5kTm90aWZp
Y2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisg
ICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3Qg
Y2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJp
bmcgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKwor
ICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xu
JywgIiIpOworICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBL
VVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0
VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3Rp
ZnlEYXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAg
IGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJs
KSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRh
KTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1
ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9i
YXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNl
LCAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYm
IGJ1ZmZlclswXSA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVy
Rmlyc3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3Qg
Y2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZl
ci5zaXplKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsr
KSB7CisgICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAg
ICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAg
ICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBw
b3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUu
CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7
CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykK
KyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5c
biIgKDM4ODAzODcpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAg
ICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3
NTgxMTMpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9M
KGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5n
IHRvIHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENS
TEYgcGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8g
aW5zdGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgor
ICAgIC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5l
ZWRzCisgICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxG
LCBMRiBvcgorICAgIC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVP
TEYgaXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRo
ZSBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAg
ICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsK
KyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisg
ICAgICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAg
ICAgICAgICAgIC8vIG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBT
dHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVz
dWx0OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykg
eworICAgICAgICBVQ2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYm
IG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBw
ZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5h
bWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIo
bmFtZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAg
ICAgIGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIg
PSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0g
ZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFk
ZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciog
ZW9sOworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRz
OworCisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwg
b3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9
IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBi
eXRlczsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisg
ICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRv
ciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAg
ICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAg
Ynl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENS
TEYuCisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGlu
ZUxlbmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVu
ZCBvZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxp
bmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlv
biBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQg
Y29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlv
dXMgaGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZp
ZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAg
ICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQg
bmV3IGhlYWRlcgorICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBm
b3IgKGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKysp
IHsKKyAgICAgICAgICAgICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY29sb24gPT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVh
ZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJG
QzgyMkhlYWRlckZpZWxkTmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNv
bG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAg
ICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRT
dHJpbmc6OmZyb21MYXRpbjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAg
IFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJp
bmcgdG1wID0gb2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAg
ICAgICAgICAgICAgICAgICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gdG1wOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxk
cy5zZXQobGFzdEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVu
LCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVu
IHx8ICFidWYpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJh
bWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFk
ZXJGaWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkg
eworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4x
KGJ1ZiwgbGVuKTsKKworICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8i
KSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAg
ICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICAgICAgdm9pZCogYXR0cnM7CisgICAgICAgIGlmICgh
Z19maWxlX3Rlc3QgKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19GSUxF
X1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0
YSBpbnRvIGJ1ZmZlcgorCS8qCisgICAgICAgIHZvaWQqIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxl
VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBGSUxFX1JFQURfREFU
QSwgRklMRV9TSEFSRV9SRUFELCAwLCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChmaWxlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgICAgIGJ1ZmZlci5yZXNpemUo
YXR0cnMubkZpbGVTaXplTG93KTsKKworICAgICAgICBEV09SRCBieXRlc1JlYWQ7CisgICAgICAg
IGludCByZXR2YWwgPSBSZWFkRmlsZShmaWxlSGFuZGxlLCBidWZmZXIuZGF0YSgpLCBhdHRycy5u
RmlsZVNpemVMb3csICZieXRlc1JlYWQsIDApOworCisgICAgICAgIENsb3NlSGFuZGxlKGZpbGVI
YW5kbGUpOworCisgICAgICAgIGlmIChyZXR2YWwgPT0gMCB8fCBieXRlc1JlYWQgIT0gYXR0cnMu
bkZpbGVTaXplTG93KQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CSovCisJcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworICAgIH0gZWxzZSB7CisgICAgICAg
IGJ1ZmZlci5yZXNpemUobGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1Ziwg
bGVuKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7
CisgICAgaW50IHBvc3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAo
YWxsb3dIZWFkZXJzKSB7CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikp
IHsKKyAgICAgICAgICAgIHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0t
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25B
ZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0g
LTEpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUg
aW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVh
ZGVyCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVs
ZHMoYnVmZmVyLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0
aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0
aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0
aGV5IHBvc3QsCisgICAgICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3Qg
bGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAg
Ly8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGgu
CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0
KCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3Ro
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRM
ZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJG
aWVsZHMucmVtb3ZlKCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERh
dGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVu
Z3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVy
bCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRl
ckZpZWxkcyhoZWFkZXJGaWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUEJvZHkoUGFzc1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3RE
YXRhLCBwb3N0RGF0YUxlbmd0aCkpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFt
ZSh0YXJnZXQpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlm
aWNhdGlvbiwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVS
TE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwg
Y29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBy
ZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEs
IHRydWUsIHRydWUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1
ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFk
ZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisg
ICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxz
ZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5
cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7Cit9CisKK2ludDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBz
dHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2lu
Vmlld0d0azo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24p
Cit7CisgICAgUGx1Z2luU3RyZWFtR3RrKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1
Z2luU3RyZWFtR3RrKj4oc3RyZWFtLT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVn
aW5TdHJlYW1HdGs6Om93bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAg
ICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3Ry
ZWFtLT5jYW5jZWxBbmREZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOworfQorCitjb25zdCBjaGFyKiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQorewor
ICAgIGlmIChtX3F1aXJrcyAmIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KQorICAg
ICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5pc051
bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNl
ckFnZW50KG1fdXJsKS51dGY4KCk7CisgICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAg
ICBTdHJpbmcgcyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobWVzc2FnZSk7CisKKyAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+
Y2hyb21lKCktPnNldFN0YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZSwgcyk7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlld0d0azo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKwkgICAgY2FzZSBOUE5WeHRBcHBDb250
ZXh0OiB7CisJCQkqKHZvaWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4
dCAoR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRkaXNwbGF5KTsKKworCQkJZ19wcmlu
dCgiUmVxdWVzdGVkIGFwcCBjb250ZXh0XG4iKTsKKwkJCXJldHVybiBOUEVSUl9OT19FUlJPUjsK
KwkJfQorCisgICAgICAgIGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisJ
CQkqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMjsKKyNlbHNlCisJCQkqKCh1bnNpZ25lZCBs
b25nICopdmFsdWUpID0gMDsKKyNlbmRpZgorCQkJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCQl9
CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYgUExBVEZPUk0o
R1RLKQorCQkJKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7CisjZWxzZQorCQkJKigo
dW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisJCQlyZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisJCX0KKworICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAg
ICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndp
bmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBl
eHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1v
emlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlm
ICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qo
d2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZh
bHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisjaWYgMAor
ICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5Q
T2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVt
ZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVk
VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAg
ICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1f
ZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBp
cyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3
Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAg
IGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmpl
Y3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoq
KXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAg
Y2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZvaWQqIHcgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyAgICAgICAgICAgICooKFhJRCAqKXcpID0gR0RL
X1dJTkRPV19YV0lORE9XKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93KTsK
KworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9
Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICAgICAgY2Fz
ZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVl
OworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICBjYXNlIE5QUFZw
bHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1
ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0
ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0
aW1lciA9PSAmbV9pbnZhbGlkYXRlVGltZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAgICBXaWRnZXQ6OmludmFsaWRh
dGVSZWN0KG1faW52YWxpZFJlY3RzW2ldKTsKKyAgICBtX2ludmFsaWRSZWN0cy5jbGVhcigpOwor
fQorCisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQor
eworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5y
aWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisKKyAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CisgICAgICAgIC8qIEZJWE1FIC0gSW52YWxpZGF0ZSB0aGUgcmVjdGFu
Z2xlCisJCSAgIFJFQ1QgaW52YWxpZFJlY3Qocik7CisJCSAgIEludmFsaWRhdGVSZWN0KG1fd2lu
ZG93LCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKKwkJKi8KKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAobV9xdWlya3MgJiBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkgeworICAgICAgICAg
ICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOworICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRh
dGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0
YXJ0T25lU2hvdCgwLjAwMSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgV2lkZ2V0Ojpp
bnZhbGlkYXRlUmVjdChyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxp
ZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLyogRklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWdpb24KKyAg
ICBSRUNUIHI7CisKKyAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAg
ICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2lkZ2V0Ojpp
bnZhbGlkYXRlUmVjdChyKTsKKyAgICAqLworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmZvcmNl
UmVkcmF3KCkKK3sKKyAgICAvKiBGSVhNRSAtIEZvcmNlIGEgcmVkcmF3CisgICAgaWYgKG1faXNX
aW5kb3dlZCkKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cobV93aW5kb3cpOworICAgIGVsc2UKKyAg
ICAgICAgOjpVcGRhdGVXaW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICAqLworfQorCitL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogUGx1Z2luVmlld0d0azo6YmluZGluZ0luc3RhbmNlKCkK
K3sKKyAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKKworICAgIGlmICghbV9wbHVnaW4gfHwgIW1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmpl
Y3QpOworICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUiB8fCAhb2JqZWN0
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FIC0gZXJyb3I6IGluY29tcGxldGUg
dHlwZSDigJhLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZeKAmSB1c2VkIGluIG5lc3RlZCBuYW1lIHNw
ZWNpZmllcgorICAgIC8vIGVycm9yOiBpbmNvbXBsZXRlIHR5cGUg4oCYS0pTOjpCaW5kaW5nczo6
SW5zdGFuY2XigJkgdXNlZCBpbiBuZXN0ZWQgbmFtZSBzcGVjaWZpZXIKKyAgICAvL1JlZlB0cjxL
SlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+Y3JlYXRlUm9v
dE9iamVjdCh0aGlzLCBtX3BhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLT5pbnRlcnByZXRlcigp
KTsKKyAgICAvL0tKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAg
IC8vX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICAvL3JldHVybiBpbnN0YW5jZTsK
KyAgICByZXR1cm4gTlVMTDsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdpblZpZXdHdGsoKQor
eworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAg
IGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0
cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKwlzZXRHdGtXaWRnZXQo
TlVMTCk7CisJbV93aW5kb3cgPSAwOworCWlmIChtX3dpbmRvdykKKwkJWERlc3Ryb3lXaW5kb3co
R1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5LCBtX3dpbmRvdyk7CisKKyAgICBtX3BhcmVu
dEZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmICht
X3BsdWdpbiAmJiAhKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkKKyAg
ICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpc2Nv
bm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtcy5jb250YWlucyhzdHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKK3sKKyAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93
bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgIGlmICht
aW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIG1f
cXVpcmtzIHw9IFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50OworICAgICAgICBtX3F1
aXJrcyB8PSBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZTsKKyAgICAgICAgbV9xdWlya3Mg
fD0gUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlczsKKyAgICB9CisKKyAg
ICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2lu
ZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRX
aW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1f
cGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCku
Y29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgeworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9k
ZSBkb2VzIG5vdCB3b3JrIGF0IGFsbCB3aXRoIHRoZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3Zl
IHRoYXQgcGFyYW1ldGVyIAorICAgICAgICAvLyBhbmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1
Zy1pbi4KKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlk
ZW9QYXJhbTsKKyAgICB9CisKKyAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBv
biB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXpl
LCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNv
cnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCisgICAgICAgIG1f
cXVpcmtzIHw9IFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1l
IGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBw
YXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290
IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qg
a25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWct
aW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0
Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAg
ICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luOworCisgICAgLy8g
UHJldmVudCB0aGUgUmVhbCBwbHVnaW4gZnJvbSBjYWxsaW5nIHRoZSBXaW5kb3cgUHJvYyByZWN1
cnNpdmVseSwgY2F1c2luZyB0aGUgc3RhY2sgdG8gb3ZlcmZsb3cuCisgICAgaWYgKG1pbWVUeXBl
ID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKQorICAgICAgICBtX3F1aXJrcyB8PSBQ
bHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIEFT
U0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOworCisgICAgdW5z
aWduZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHBhcmFtQ291bnQg
PSAwOworCisgICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RN
YWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKyAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKCht
X3F1aXJrcyAmIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFs
SWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0
ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7CisgICAgICAgIG1fcGFyYW1WYWx1ZXNbcGFyYW1D
b3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKKworICAgICAgICBwYXJh
bUNvdW50Kys7CisgICAgfQorCisgICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsKK30KKwor
UGx1Z2luVmlld0d0azo6UGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IElu
dFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSkKKyAgICA6IG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBt
X3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1faXNTdGFy
dGVkKGZhbHNlKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9iYXNlVVJMKG1fcGFyZW50RnJh
bWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNl
VVJMKCkpKQorICAgICwgbV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQor
ICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZp
cmVkKQorICAgICwgbV9pbnZhbGlkYXRlVGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OmludmFs
aWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wYXJhbU5hbWVzKDApCisgICAgLCBtX3BhcmFtVmFs
dWVzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1faXNX
aW5kb3dlZCh0cnVlKQorICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zp
c2libGUoZmFsc2UpCisgICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fbGFz
dE1lc3NhZ2UoMCkKKyAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKKyAgICAs
IG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCit7
CisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nh
bk5vdEZpbmRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKwltX3dpZGdldCA9IGd0
a194dGJpbl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdX
aW5kb3coKSktPndpbmRvdywgTlVMTCk7CisJZ3RrX3dpZGdldF9zaG93IChtX3dpZGdldCk7CisK
KyAgICBtX2luc3RhbmNlID0gJm1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRh
dGEgPSB0aGlzOworCisgICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRl
cm1pbmVRdWlya3MobWltZVR5cGUpOworCisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcyk7CisKKyAgICBtX21vZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBO
UF9FTUJFRDsKKworICAgIHJlc2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpp
bml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAg
ICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAg
ICAgICBtX3BsdWdpbiA9IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkg
eworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9
IGdfbmV3MChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0g
MDsKKyAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKyAg
ICB3cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7Cisg
ICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRkZXB0aDsKKyAg
ICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGNvbG9ybWFw
OworCisJWEZsdXNoICh3cy0+ZGlzcGxheSk7CisKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3
czsKKyAgICAKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fd2luZG93ID0gR1RL
X1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV93
aW5kb3c7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dU
eXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAg
ICBpZiAoIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQor
ICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVz
ID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtID0g
bmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1lLT5s
b2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCk7Cisg
ICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFudWFs
U3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7
CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVhbS0+
ZGlkUmVjZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisg
ICAgbV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NF
UlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJy
b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFBsdWdpblZpZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gKKworI2lu
Y2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z3RrL2d0a3dpZGdldC5oPgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJucGFwaS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEtKUyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFu
Y2U7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsK
KyAgICBjbGFzcyBGcmFtZTsKKyAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFz
cyBLZXlib2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsK
KyAgICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOworICAgIGNsYXNzIFBsdWdpblBh
Y2thZ2VHdGs7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5T
dHJlYW1HdGs7CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJl
c3BvbnNlOworICAgIAorICAgIGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVp
cmtXYW50c01vemlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVm
ZXJGaXJzdFNldFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0
bGVJbnZhbGlkYXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3ds
ZXNzVmlkZW9QYXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNl
clBsdXNPbmVNZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2Fk
UGx1Z2luID0gMSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNh
bWVNZXNzYWdlUmVjdXJzaXZlbHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5T
dGF0dXMgeworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQ
bHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRT
dWNjZXNzZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBX
aWRnZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50
RnJhbWUsIGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBs
b2FkTWFudWFsbHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAg
ICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0
KCk7IH0KKyAgICAgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsg
fQorCisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAg
ICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAg
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBs
dWdpblN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAg
IC8vIE5QTiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBO
UEVycm9yIGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAg
ICAgIE5QRXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90
aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7
CisgICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciog
dGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFt
KiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0
cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNv
bnN0IGNoYXIqIHVzZXJBZ2VudCgpOworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBt
ZXNzYWdlKTsKKyAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7
CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQg
Zm9yY2VSZWRyYXcoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3Ry
ZWFtR3RrKik7CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBnZW9tZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZv
Y3VzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBoaWRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgZ2xvbmcg
d25kUHJvYyhYSUQgaFduZCwgZ3VpbnQgbWVzc2FnZSwgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFy
YW0pOworCisgICAgICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9p
ZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKCk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwor
ICAgICAgICB2b2lkIGluaXQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lk
IHN0b3AoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2lu
Vmlld0d0ayopOworICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYs
IGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJy
b3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMy
IGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wg
c2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1
Z2luUGFja2FnZUd0az4gbV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAg
ICAgICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7Cisg
ICAgICAgIEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVn
aW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0
czsKKworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAg
ICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2
b2lkIHJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIHZv
aWQgaW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAg
VGltZXI8UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVyPFBsdWdp
blZpZXdHdGs+IG1faW52YWxpZGF0ZVRpbWVyOworCisgICAgICAgIE93blB0cjxQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyR3RrPiBtX21lc3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRh
dGVXaW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXli
b2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50
KE1vdXNlRXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJh
bUNvdW50OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9w
YXJhbVZhbHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJp
bmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90
IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAg
ICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+IG1fc3RyZWFtczsKKyAgICAgICAg
VmVjdG9yPFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIGludCBtX3F1
aXJrczsKKyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5z
cGFyZW50OworICAgICAgICBib29sIG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUlu
aXRpYWxpemVkOworCisgICAgICAgIFhJRCBtX3dpbmRvdzsgLy8gZm9yIHdpbmRvd2VkIHBsdWct
aW5zCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0
IHRvIGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3Qg
bV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9s
YXN0TWVzc2FnZTsKKyAgICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisKKyAg
ICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0
az4gbV9tYW51YWxTdHJlYW07CisKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3Vy
cmVudFBsdWdpblZpZXc7CisKKwlHdGtXaWRnZXQqIG1fd2lkZ2V0OworCURpc3BsYXkqIHhfZGlz
cGxheTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9u
cGFwaS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2lu
Y2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJucGFwaS5oIiAvLyAjaW5jbHVkZXMg
PHdpbmRvd3MuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4g
dmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1
Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEg
TlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4g
dmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1
cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZp
ZXdHdGs6OnN0YXJ0LgorLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFu
ZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2Vu
dCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5j
ZS0+bmRhdGEpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5z
dGFuY2UtPm5kYXRhKTsKKyAgICByZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZp
ZXcoKTsKK30KKwordm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVy
biBtYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAg
IGZyZWUocHRyKTsKK30KKwordWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAg
ICAvLyBEbyBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdp
bnMoTlBCb29sIHJlbG9hZFBhZ2VzKQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2Vz
KTsKK30KKworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRl
UmFuZ2UqIHJhbmdlTGlzdCkKK3sKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30K
KworTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwg
bm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9y
IE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZv
aWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlE
YXRhKTsKK30KKworTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBO
X05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50
MzIgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2
b2lkKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPndyaXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3Ry
ZWFtKHN0cmVhbSwgcmVhc29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAg
aW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSk7CisKKyAgICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5f
VXNlckFnZW50IHdpdGggYSBudWxsIGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVu
Y3Rpb24hCisgICAgIC8vIFdlJ2QgbmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhv
dXQgaGF2aW5nIGEgZnJhbWUgYXJvdW5kLgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1
cm4gMDsKKyAKKyAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0
YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9J
bnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAg
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJl
Y3QpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdp
b24gaW52YWxpZFJlZ2lvbikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJl
ZHJhdyhOUFAgaW5zdGFuY2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+Zm9yY2VSZWRyYXcoKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNl
LCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9
CisKK05QRXJyb3IgTlBOX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQqIHZhbHVlKQoreworICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPnNldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZh
RW52KCkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBO
UE5fR2V0SmF2YVBlZXIoTlBQIGluc3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQKK05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0
YW5jZSwgTlBCb29sIGVuYWJsZWQpCit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVk
U3RhdGUoTlBQIGluc3RhbmNlKQoreworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1i
ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1t
b2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdp
ZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioq
KgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
TVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMg
dW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBY
RU1CRUQgRGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgor
ICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBs
YXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJv
dmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwg
YW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lv
biBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
dGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBv
ciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAq
IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisg
KgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3Nh
Z2VzICovCisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmlu
ZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRP
V19ERUFDVElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAg
ICAgICAgMworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZp
bmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NV
U19ORVhUICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAg
ICAgICAgIDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVm
aW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9E
QUxJVFlfT04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAg
ICAgICAgICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVE
X0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFC
X0tFWSAgICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICov
CisjZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1C
RURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1Qg
ICAgICAgICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUg
WEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luRGVidWcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luRGVidWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFBMVUdJTl9ERUJVR19IX18KKyNkZWZpbmUgUExVR0lOX0RFQlVHX0hfXworCisj
aW5jbHVkZSAibnBhcGkuaCIKKworc3RhdGljIGNoYXIqIGVycm9yU3RyaW5nc1tdID0geworICAg
ICJObyBlcnJvcnMgb2NjdXJyZWQuIiwgLyogTlBFUlJfTk9fRVJST1IgKi8KKyAgICAiRXJyb3Ig
d2l0aCBubyBzcGVjaWZpYyBlcnJvciBjb2RlIG9jY3VycmVkLiIsIC8qIE5QRVJSX0dFTkVSSUNf
RVJST1IgKi8KKyAgICAiSW52YWxpZCBpbnN0YW5jZSBwYXNzZWQgdG8gdGhlIHBsdWctaW4uIiwg
LyogTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUiAqLworICAgICJGdW5jdGlvbiB0YWJsZSBp
bnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VSUk9SICovCisgICAgIkxvYWRp
bmcgb2YgcGx1Zy1pbiBmYWlsZWQuIiwgLyogTlBFUlJfTU9EVUxFX0xPQURfRkFJTEVEX0VSUk9S
ICovCisgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4iLCAvKiBOUEVSUl9PVVRfT0ZfTUVN
T1JZX0VSUk9SICovCisgICAgIlBsdWctaW4gbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJS
X0lOVkFMSURfUExVR0lOX0VSUk9SICovCisgICAgIlBsdWctaW4gZGlyZWN0b3J5IG1pc3Npbmcg
b3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9ESVJfRVJST1IgKi8KKyAgICAi
VmVyc2lvbnMgb2YgcGx1Zy1pbiBhbmQgQ29tbXVuaWNhdG9yIGRvIG5vdCBtYXRjaC4iLCAvKiBO
UEVSUl9JTkNPTVBBVElCTEVfVkVSU0lPTl9FUlJPUiAqLworICAgICJQYXJhbWV0ZXIgbWlzc2lu
ZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUEFSQU0gKi8KKyAgICAiVVJMIG1pc3Np
bmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1VSTCAqLworICAgICJGaWxlIG1pc3Np
bmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9GSUxFX05PVF9GT1VORCAqLworICAgICJTdHJlYW0g
Y29udGFpbnMgbm8gZGF0YS4iLCAvKiBOUEVSUl9OT19EQVRBICovCisgICAgIlNlZWthYmxlIHN0
cmVhbSBleHBlY3RlZC4iLCAvKiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFICovCisgICAgIlVu
a25vd24gZXJyb3IgY29kZSIKK307CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIExPR19OUEVS
Uk9SKGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgX1JQVEYyKF9DUlRfV0FSTiwgIiVz
OiAlc1xuIiwgX19GVU5DVElPTl9fLCBlcnJvclN0cmluZ3NbZXJyXSkKKyNkZWZpbmUgTE9HX1BM
VUdJTl9ORVRfRVJST1IoKSBfUlBURjEoX0NSVF9XQVJOLCAiJXM6IFN0cmVhbSBmYWlsZWQgZHVl
IHRvIHByb2JsZW1zIHdpdGggbmV0d29yaywgZGlzayBJL08sIGxhY2sgb2YgbWVtb3J5LCBvciBv
dGhlciBwcm9ibGVtcy5cbiIsIF9fRlVOQ1RJT05fXykKKyNlbHNlCisjZGVmaW5lIExPR19QTFVH
SU5fTkVUX0VSUk9SKCkgKCh2b2lkKTApCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikgKCh2b2lk
KTApCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIF9OUEZVTkNUSU9OU19I
XworI2RlZmluZSBfTlBGVU5DVElPTlNfSF8KKworI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2lu
Y2x1ZGUgIm5wYXBpLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5k
aWYKKworI2lmIGRlZmluZWQoWFBfV0lOKQorI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlw
ZSwgX25hbWUpIF90eXBlIChfX3N0ZGNhbGwgKiBfbmFtZSkKKyNlbHNlCisjZGVmaW5lIEVYUE9S
VEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKCogX25hbWUpCisjZW5kaWYKKwordHlw
ZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29u
c3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwordHlw
ZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNv
bnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAo
Kk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiBy
YW5nZUxpc3QpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiog
c3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUE5fV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSog
c3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBOX1N0YXR1c1Byb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit0eXBlZGVmIGNvbnN0IGNo
YXIqKCpOUE5fVXNlckFnZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCog
KCpOUE5fTWVtQWxsb2NQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5f
TWVtRnJlZVByb2NQdHIpKHZvaWQqIHB0cik7Cit0eXBlZGVmIHVpbnQzMiAoKk5QTl9NZW1GbHVz
aFByb2NQdHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxvYWRQbHVnaW5z
UHJvY1B0cikoTlBCb29sIHJlbG9hZFBhZ2VzKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRW
YWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJl
dF92YWx1ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5z
dGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Cit0eXBlZGVmIHZvaWQg
KCpOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVjdCAqcmVjdCk7
Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBSZWdpb24gcmVnaW9uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Gb3JjZVJlZHJhd1Byb2NQ
dHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdyk7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
TlBCb29sIGZpbGUpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9p
ZCk7Cit0eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNl
KTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUG9wUG9wdXBz
RW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKKwordHlwZWRlZiB2b2lkICgqTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKKwordHlw
ZWRlZiBOUElkZW50aWZpZXIgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIpIChjb25z
dCBOUFVURjggKm5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJz
UHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVu
dGlmaWVyICppZGVudGlmaWVycyk7Cit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRJbnRJ
ZGVudGlmaWVyUHJvY1B0cikgKGludDMyX3QgaW50aWQpOwordHlwZWRlZiBpbnQzMl90ICgqTlBO
X0ludEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKK3R5
cGVkZWYgYm9vbCAoKk5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyKSAoTlBJZGVudGlmaWVy
IGlkZW50aWZpZXIpOwordHlwZWRlZiBOUFVURjggKigqTlBOX1VURjhGcm9tSWRlbnRpZmllclBy
b2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7CisKK3R5cGVkZWYgTlBPYmplY3QqICgq
TlBOX0NyZWF0ZU9iamVjdFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFDbGFzcyk7Cit0eXBlZGVm
IE5QT2JqZWN0KiAoKk5QTl9SZXRhaW5PYmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Cit0
eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsK
K3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9i
aiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWdu
ZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZv
a2VEZWZhdWx0UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFu
dCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9FdmFsdWF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUFN0
cmluZyAqc2NyaXB0LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fR2V0
UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBw
cm9wZXJ0eU5hbWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9TZXRQ
cm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHBy
b3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50ICp2YWx1ZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5f
SGFzUHJvcGVydHlQcm9jUHRyKSAoTlBQLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBw
cm9wZXJ0eU5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX0hhc01ldGhvZFByb2NQdHIpIChOUFAg
bnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2Jq
LCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9TZXRFeGNl
cHRpb25Qcm9jUHRyKSAoTlBPYmplY3QgKm9iaiwgY29uc3QgTlBVVEY4ICptZXNzYWdlKTsKK3R5
cGVkZWYgYm9vbCAoKk5QTl9FbnVtZXJhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5w
b2JqLCBOUElkZW50aWZpZXIgKippZGVudGlmaWVyLCB1aW50MzJfdCAqY291bnQpOworCit0eXBl
ZGVmIE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAg
aW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFy
Z3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUpOwordHlwZWRlZiBOUEVy
cm9yICgqTlBQX1NldFdpbmRvd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRv
dyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWlu
dDE2KiBzdHlwZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKK3R5cGVk
ZWYgdm9pZCAoKk5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFt
KiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZuYW1lKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVS
ZWFkeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSk7Cit0eXBlZGVmIGlu
dDMyICgqTlBQX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBp
bnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Cit0eXBlZGVmIHZvaWQg
KCpOUFBfUHJpbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQp
OwordHlwZWRlZiBpbnQxNiAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
dm9pZCogZXZlbnQpOwordHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlmeVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURh
dGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0sodm9pZCwgTlBQX1No
dXRkb3duUHJvY1B0cikodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAqKCpOUFBfR2V0SmF2YUNsYXNz
UHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZvaWQqICAgSlJJR2xvYmFsUmVmOyAvL25vdCB1c2lu
ZyB0aGlzIHJpZ2h0IG5vdworCit0eXBlZGVmIHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNzIHsKKyAg
ICB1aW50MTYgc2l6ZTsKKyAgICB1aW50MTYgdmVyc2lvbjsKKyAgICAKKyAgICBOUE5fR2V0VVJM
UHJvY1B0ciBnZXR1cmw7CisgICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBvc3R1cmw7CisgICAgTlBO
X1JlcXVlc3RSZWFkUHJvY1B0ciByZXF1ZXN0cmVhZDsKKyAgICBOUE5fTmV3U3RyZWFtUHJvY1B0
ciBuZXdzdHJlYW07CisgICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUE5fRGVzdHJv
eVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUE5fU3RhdHVzUHJvY1B0ciBzdGF0
dXM7CisgICAgTlBOX1VzZXJBZ2VudFByb2NQdHIgdWFnZW50OworICAgIE5QTl9NZW1BbGxvY1By
b2NQdHIgbWVtYWxsb2M7CisgICAgTlBOX01lbUZyZWVQcm9jUHRyIG1lbWZyZWU7CisgICAgTlBO
X01lbUZsdXNoUHJvY1B0ciBtZW1mbHVzaDsKKyAgICBOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIg
cmVsb2FkcGx1Z2luczsKKyAgICBOUE5fR2V0SmF2YUVudlByb2NQdHIgZ2V0SmF2YUVudjsKKyAg
ICBOUE5fR2V0SmF2YVBlZXJQcm9jUHRyIGdldEphdmFQZWVyOworICAgIE5QTl9HZXRVUkxOb3Rp
ZnlQcm9jUHRyIGdldHVybG5vdGlmeTsKKyAgICBOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIgcG9z
dHVybG5vdGlmeTsKKyAgICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QTl9T
ZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7CisgICAgTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0ciBp
bnZhbGlkYXRlcmVjdDsKKyAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIgaW52YWxpZGF0
ZXJlZ2lvbjsKKyAgICBOUE5fRm9yY2VSZWRyYXdQcm9jUHRyIGZvcmNlcmVkcmF3OworICAgIAor
ICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyOwor
ICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcnM7
CisgICAgTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyIGdldGludGlkZW50aWZpZXI7CisgICAg
TlBOX0lkZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlzc3RyaW5nOworICAgIE5Q
Tl9VVEY4RnJvbUlkZW50aWZpZXJQcm9jUHRyIHV0Zjhmcm9taWRlbnRpZmllcjsKKyAgICBOUE5f
SW50RnJvbUlkZW50aWZpZXJQcm9jUHRyIGludGZyb21pZGVudGlmaWVyOworICAgIE5QTl9DcmVh
dGVPYmplY3RQcm9jUHRyIGNyZWF0ZW9iamVjdDsKKyAgICBOUE5fUmV0YWluT2JqZWN0UHJvY1B0
ciByZXRhaW5vYmplY3Q7CisgICAgTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyIHJlbGVhc2VvYmpl
Y3Q7CisgICAgTlBOX0ludm9rZVByb2NQdHIgaW52b2tlOworICAgIE5QTl9JbnZva2VEZWZhdWx0
UHJvY1B0ciBpbnZva2VEZWZhdWx0OworICAgIE5QTl9FdmFsdWF0ZVByb2NQdHIgZXZhbHVhdGU7
CisgICAgTlBOX0dldFByb3BlcnR5UHJvY1B0ciBnZXRwcm9wZXJ0eTsKKyAgICBOUE5fU2V0UHJv
cGVydHlQcm9jUHRyIHNldHByb3BlcnR5OworICAgIE5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIg
cmVtb3ZlcHJvcGVydHk7CisgICAgTlBOX0hhc1Byb3BlcnR5UHJvY1B0ciBoYXNwcm9wZXJ0eTsK
KyAgICBOUE5fSGFzTWV0aG9kUHJvY1B0ciBoYXNtZXRob2Q7CisgICAgTlBOX1JlbGVhc2VWYXJp
YW50VmFsdWVQcm9jUHRyIHJlbGVhc2V2YXJpYW50dmFsdWU7CisgICAgTlBOX1NldEV4Y2VwdGlv
blByb2NQdHIgc2V0ZXhjZXB0aW9uOworICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJv
Y1B0ciBwdXNocG9wdXBzZW5hYmxlZHN0YXRlOworICAgIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3Rh
dGVQcm9jUHRyIHBvcHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5fRW51bWVyYXRlUHJvY1B0
ciBlbnVtZXJhdGU7Cit9IE5QTmV0c2NhcGVGdW5jczsKKwordHlwZWRlZiBzdHJ1Y3QgX05QUGx1
Z2luRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIE5Q
UF9OZXdQcm9jUHRyIG5ld3A7CisgICAgTlBQX0Rlc3Ryb3lQcm9jUHRyIGRlc3Ryb3k7CisgICAg
TlBQX1NldFdpbmRvd1Byb2NQdHIgc2V0d2luZG93OworICAgIE5QUF9OZXdTdHJlYW1Qcm9jUHRy
IG5ld3N0cmVhbTsKKyAgICBOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsK
KyAgICBOUFBfU3RyZWFtQXNGaWxlUHJvY1B0ciBhc2ZpbGU7CisgICAgTlBQX1dyaXRlUmVhZHlQ
cm9jUHRyIHdyaXRlcmVhZHk7CisgICAgTlBQX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUFBf
UHJpbnRQcm9jUHRyIHByaW50OworICAgIE5QUF9IYW5kbGVFdmVudFByb2NQdHIgZXZlbnQ7Cisg
ICAgTlBQX1VSTE5vdGlmeVByb2NQdHIgdXJsbm90aWZ5OworICAgIEpSSUdsb2JhbFJlZiBqYXZh
Q2xhc3M7CisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKKyAgICBOUFBfU2V0VmFs
dWVQcm9jUHRyIHNldHZhbHVlOworfSBOUFBsdWdpbkZ1bmNzOworCit0eXBlZGVmIEVYUE9SVEVE
X0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3Mq
LCBOUFBsdWdpbkZ1bmNzKik7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKGNvbnN0IGNoYXIq
LCBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyKSh2b2lkKTsKKworI2lmIGRlZmluZWQoWFBf
TUFDT1NYKQordHlwZWRlZiB2b2lkICAgICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVy
ZW5jZXNGdW5jUHRyKSh2b2lkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5l
dHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKiwgTlBQX1NodXRkb3duUHJvY1B0ciopOworI2Vu
ZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9n
dGsyeHRiaW4uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MzkgQEAKKy8qIC0qLSBNb2RlOiBD
Kys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDog
MiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8q
ICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BM
IDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1Ympl
Y3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxp
Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJh
c2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAq
CisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRh
dGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUg
aXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhl
IEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFs
IERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToK
KyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxH
UEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUg
TEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdp
c2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5k
ZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFs
bG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5n
IHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisg
KiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJ
ZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50
IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9m
IGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBF
TkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRnZXQg
YWxsb3dzIGZvciBYdCB0b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RLIGFw
cGxpY2F0aW9uLiAgCisgKi8KKworI2luY2x1ZGUgInhlbWJlZC5oIgorI2luY2x1ZGUgImd0azJ4
dGJpbi5oIgorI2luY2x1ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVkZSA8Z3RrL2d0a3ByaXZh
dGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisKKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2lu
Y2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2luY2x1ZGUgPFgx
MS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisvKiB1bmNvbW1l
bnQgdGhpcyBpZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2lkZ2V0Cisg
ICBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJVR19YVEJJTgorCisjZGVm
aW5lIFhUQklOX01BWF9FVkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRi
aW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3RhdGljIHZvaWQgICAgICAg
ICAgICBndGtfeHRiaW5faW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAqeHRiaW4pOworc3RhdGlj
IHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndp
ZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl91bnJlYWxpemUgICAgKEd0
a1dpZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5f
ZGVzdHJveSAgICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0aWMgdm9pZCAgICAgICAg
ICAgIGd0a194dGJpbl9zaHV0ZG93biAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKKworLyog
WHQgYXdhcmUgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaW5pdCAgICAg
IChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRf
Y3JlYXRlICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfdW5y
ZWFsaXplIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50
X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Ns
aWVudF9zZXRfaW5mbyAgKFdpZGdldCB4dHBsdWcsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9jbGllbnRfZXZlbnRfaGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMg
dm9pZCAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRnZXQgdywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50
ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRf
Zm9jdXNfbGlzdGVuZXIgICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB1c2VyX2RhdGEsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu
dCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBY
dFBvaW50ZXIgdXNlcl9kYXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlz
dGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSk7IAorc3Rh
dGljIHZvaWQgICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50
ZXIgdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKFh0
Q2xpZW50ICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25nIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25n
IGRhdGExLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0
YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUpOyAg
CitzdGF0aWMgaW50ICAgICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChEaXNwbGF5ICpkaXNwbGF5
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFcnJvckV2ZW50ICpl
cnJvcik7CisvKiBGb3IgZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAg
IHRyYXBfZXJyb3JzKHZvaWQpOworc3RhdGljIGludCAgICAgICAgdW50cmFwX2Vycm9yKHZvaWQp
Oworc3RhdGljIGludCAgICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikgKERpc3BsYXkgKiwgWEVy
cm9yRXZlbnQgKik7CitzdGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vycm9yX2NvZGUgPSAwOwor
CitzdGF0aWMgR3RrV2lkZ2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyBE
aXNwbGF5ICAgICAgICAgKnh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMgU3RyaW5nICAgICAgICAg
ICpmYWxsYmFjayA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9pc19pbml0aWFs
aXplZCA9IEZBTFNFOworc3RhdGljIGdpbnQgICAgICAgICAgICAgbnVtX3dpZGdldHMgPSAwOwor
CitzdGF0aWMgR1BvbGxGRCAgICAgICAgICB4dF9ldmVudF9wb2xsX2ZkOworc3RhdGljIGdpbnQg
ICAgICAgICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0aWMgZ3VpbnQgICAgICAg
ICAgICB0YWcgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3ByZXBhcmUgKEdTb3Vy
Y2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBnaW50ICAgICAqdGltZW91dCkK
K3sgICAKKyAgaW50IG1hc2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIoKTsKKyAgbWFzayA9IFhQ
ZW5kaW5nKHh0ZGlzcGxheSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7CisKKyAgcmV0dXJuIChn
Ym9vbGVhbiltYXNrOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2NoZWNrIChHU291
cmNlKiAgc291cmNlX2RhdGEpCit7CisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIGlmICh4
dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAgaW50IG1hc2s7CisgICAg
bWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7Cisg
ICAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7
CisgIHJldHVybiBGQUxTRTsKK30gICAKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9kaXNw
YXRjaCAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICBHU291cmNl
RnVuYyBjYWxsX2JhY2ssCisgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICB1c2VyX2RhdGEp
Cit7CisgIFhFdmVudCBldmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgaSA9IDA7CisK
KyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRpc3BsYXkpOworCisgIEdE
S19USFJFQURTX0VOVEVSICgpOworCisgIC8qIFByb2Nlc3Mgb25seSByZWFsIFggdHJhZmZpYyBo
ZXJlLiAgV2Ugb25seSBsb29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBwaXBlLCBsaW1pdCBpdCB0
byBYVEJJTl9NQVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRBcHBQcm9jZXNzRXZlbnQg
c28gdGhhdCBpdCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUncyBubworICAgKiB0aW1l
ciBwcm9jZXNzaW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGltZXIgY2FsbGJhY2sg
dGhhdAorICAgKiBkb2VzIGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBYVEJJTl9NQVhfRVZFTlRT
ICYmIFhQZW5kaW5nKHh0ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFj
LCBYdElNWEV2ZW50KTsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOworCisgIHJldHVy
biBUUlVFOyAgCit9CisKK3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZlbnRfZnVuY3MgPSB7Cisg
IHh0X2V2ZW50X3ByZXBhcmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4dF9ldmVudF9kaXNwYXRj
aCwKKyAgZ19mcmVlLAorICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdTb3VyY2VEdW1teU1hcnNo
YWwpTlVMTAorfTsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2Nh
bGxiYWNrKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAqIGRpc3BsYXk7CisgIFh0
QXBwQ29udGV4dCBhYzsKKyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIwOworCisgIGRpc3BsYXkg
PSAoRGlzcGxheSAqKXVzZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29u
dGV4dChkaXNwbGF5KTsKKworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3MgbWFueSBYdCBldmVudHMg
aGVyZS4gSWYgd2UganVzdCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3ZSBtaWdodCBzdGFydmUg
b25lIG9yIG1vcmUgWHQgY29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFuZAorICAgICB0aGlzIGNv
dWxkIGhhbmcgdGhlIHdob2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBwb3VyaW5nIGluLiBTbyBw
cm9jZXNzCisgICAgIHVwIHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cgYW5kIHNhdmUgdGhlIHJl
c3QgZm9yIGxhdGVyLiBUaGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0IG91Z2h0YSB3b3JrLiBX
ZSAqcmVhbGx5KiBzaG91bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVnaW5zLgorICAqLworICB3
aGlsZSAoZXZlbnRzVG9Qcm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFjKSkKKyAgICBYdEFwcFBy
b2Nlc3NFdmVudChhYywgWHRJTUFsbCk7CisgIHJldHVybiBUUlVFOworfQorCitHdGtUeXBlCitn
dGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtUeXBlIHh0YmluX3R5cGUg
PSAwOworCisgIGlmICgheHRiaW5fdHlwZSkgeworICAgICAgc3RhdGljIGNvbnN0IEd0a1R5cGVJ
bmZvIHh0YmluX2luZm8gPQorICAgICAgeworICAgICAgICAiR3RrWHRCaW4iLAorICAgICAgICBz
aXplb2YgKEd0a1h0QmluKSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNzKSwKKyAgICAg
ICAgKEd0a0NsYXNzSW5pdEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0LAorICAgICAgICAoR3Rr
T2JqZWN0SW5pdEZ1bmMpIGd0a194dGJpbl9pbml0LAorICAgICAgICAvKiByZXNlcnZlZF8xICov
IE5VTEwsCisgICAgICAgIC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAgICAgICAgKEd0a0NsYXNz
SW5pdEZ1bmMpIE5VTEwKKyAgICAgIH07CisgICAgICB4dGJpbl90eXBlID0gZ3RrX3R5cGVfdW5p
cXVlIChHVEtfVFlQRV9TT0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9CisgIHJldHVybiB4dGJp
bl90eXBlOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0Qmlu
Q2xhc3MgKmtsYXNzKQoreworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNzOworICBHdGtP
YmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFzcyA9IGd0a190eXBlX2Ns
YXNzIChHVEtfVFlQRV9TT0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9IEdUS19XSURHRVRfQ0xB
U1MgKGtsYXNzKTsKKyAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3RrX3h0YmluX3JlYWxpemU7
CisgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3VucmVhbGl6ZTsKKworICBv
YmplY3RfY2xhc3MgPSBHVEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIG9iamVjdF9jbGFzcy0+
ZGVzdHJveSA9IGd0a194dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0Ymlu
X2luaXQgKEd0a1h0QmluICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlzcGxheSA9IE5VTEw7Cisg
IHh0YmluLT5wYXJlbnRfd2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0d2luZG93ID0gMDsKKyAg
eHRiaW4tPnggPSAwOworICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRi
aW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0QmluICAgICAqeHRiaW47
CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAwLCAyMDAgfTsKKyAgZ2lu
dCAgeCwgeSwgdywgaCwgZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICovCisKKyNpZmRlZiBERUJV
R19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAg
Z19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsKKworICB4dGJpbiA9IEdU
S19YVEJJTiAod2lkZ2V0KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBiZWZvcmUg
cmVhbGl6ZSAqLworICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJpbi0+cGFyZW50X3dpbmRv
dywgJngsICZ5LCAmdywgJmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHc7CisgIGFsbG9j
YXRpb24uaGVpZ2h0ID0gaDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlICh3aWRnZXQsICZh
bGxvY2F0aW9uKTsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiaW5pdGlhbCBhbGxv
Y2F0aW9uICVkICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRpZgorCisgIHh0YmluLT53
aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4tPmhlaWdodCA9IHdpZGdl
dC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tldCdzIHJlYWxpemUgKi8K
KyAgKCpHVEtfV0lER0VUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxpemUpKHdpZGdldCk7CisK
KyAgLyogY3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0X2NsaWVudF9jcmVhdGUo
Jih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VU
KHh0YmluKSksIAorICAgICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAgIHh0YmluLT53aWR0aCk7
CisgIHh0YmluLT54dHdpbmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNsaWVudC5jaGlsZF93aWRn
ZXQpOworCisgIGdka19mbHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdlIGhhdmUgY3JlYXRlZCB0
aGUgeHQgY2xpZW50LCBhZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAgZ3RrX3NvY2tldF9hZGRf
aWQoR1RLX1NPQ0tFVCh3aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOworfQorCisKKworR3RrV2lk
Z2V0KgorZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKiBm
KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKworICBhc3Nl
cnQocGFyZW50X3dpbmRvdyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtfdHlwZV9uZXcgKEdUS19U
WVBFX1hUQklOKTsKKworICBpZiAoIXh0YmluKQorICAgIHJldHVybiAoR3RrV2lkZ2V0KilOVUxM
OworCisgIGlmIChmKQorICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBY
dCB0b29sa2l0ICovCisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFyZW50X3dpbmRvdzsKKwor
ICB4dF9jbGllbnRfaW5pdCgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgR0RLX1ZJU1VBTF9Y
VklTVUFMKGdka19yZ2JfZ2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19DT0xPUk1BUF9YQ09MT1JN
QVAoZ2RrX3JnYl9nZXRfY29sb3JtYXAoKSksCisgICAgICBnZGtfcmdiX2dldF92aXN1YWwoKS0+
ZGVwdGgpOworCisgIGlmICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxheSkgeworICAgIC8qIElm
IFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVydGhlci4KKyAgICAgKiAg
QmFpbCBvdXQuCisgICAgICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoImd0a194
dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5cbiIpOworI2VuZGlmCisg
ICAgZ19mcmVlICh4dGJpbik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQgKilOVUxMOworICB9CisK
KyAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQsIGhvb2sgdGhpcyBkaXNw
bGF5IGludG8gdGhlCisgICAgIG1haW5sb29wICovCisgIGlmICgwID09IG51bV93aWRnZXRzKSB7
CisgICAgaW50ICAgICAgICAgICBjbnVtYmVyOworICAgIC8qCisgICAgICogaG9vayBYdCBldmVu
dCBsb29wIGludG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8KKworICAgIC8qIHRoZSBh
c3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKyAg
ICBHU291cmNlKiBncyA9IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVuY3MsIHNpemVvZihHU291
cmNlKSk7CisgICAgICBpZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9Cisg
ICAgCisgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsK
KyAgICBnX3NvdXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOworICAgIHRhZyA9IGdfc291
cmNlX2F0dGFjaChncywgKEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZkZWYgVk1TCisgICAgY251
bWJlciA9IFhDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxzZQorICAgIGNudW1iZXIg
PSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAgICB4dF9ldmVudF9wb2xs
X2ZkLmZkID0gY251bWJlcjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2ZW50cyA9IEdfSU9fSU47
IAorICAgIHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8qIGhtbS4uLiBpcyB0aGlz
IGNvcnJlY3Q/ICovCisKKyAgICBnX21haW5fY29udGV4dF9hZGRfcG9sbCAoKEdNYWluQ29udGV4
dCopTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4dF9ldmVudF9wb2xsX2Zk
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9MT1cpOworICAgIC8q
IGFkZCBhIHRpbWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nlc3MgWHQgdGltZXJzICov
CisgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9CisgICAgICBndGtfdGltZW91dF9hZGQoMjUsCisg
ICAgICAgICAgICAgICAgICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50X3BvbGxpbmdfdGltZXJf
Y2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5KTsKKyAgfQorCisgIC8q
IEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50ICovCisgIG51bV93aWRnZXRzKys7CisKKyAgLyogQnVp
bGQgdGhlIGhpZXJhY2h5ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+eHRjbGllbnQu
eHRkaXNwbGF5OworICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KEdUS19XSURHRVQoeHRi
aW4pLCBwYXJlbnRfd2luZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhKHh0YmluLT5w
YXJlbnRfd2luZG93LCAmdXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0YSkKKyAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19XSURHRVQoeHRiaW4pKTsK
KworICByZXR1cm4gR1RLX1dJREdFVCAoeHRiaW4pOworfQorCit2b2lkCitndGtfeHRiaW5fc2V0
X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50
ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpCit7CisgIHh0
YmluLT54ID0geDsKKyAgeHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVE
ICh4dGJpbikpCisgICAgZ2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VUICh4dGJpbiktPndpbmRv
dywgeCwgeSk7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0
LAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgaGVpZ2h0KQoreworICBBcmcgYXJnc1syXTsKKyAgR3RrWHRCaW4gKnh0Ymlu
ID0gR1RLX1hUQklOICh3aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisKKyNp
ZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZXNpemUgJXAgJWQgJWRcbiIs
ICh2b2lkICopd2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisgIHh0YmluLT5oZWln
aHQgPSBoZWlnaHQ7CisgIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKworICAvLyBBdm9pZCBCYWRW
YWx1ZSBlcnJvcnMgaW4gWHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9
MCkgeworICAgIGhlaWdodCA9IDE7CisgICAgd2lkdGggPSAxOworICB9CisgIFh0U2V0QXJnKGFy
Z3NbMF0sIFh0TmhlaWdodCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJnc1sxXSwgWHROd2lkdGgs
ICB3aWR0aCk7CisgIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50b3Bfd2lkZ2V0LCBhcmdz
LCAyKTsKKworICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9jYXRlIHNvIHRoZSBzb2Nr
ZXQga25vd3MgYWJvdXQgdGhlCisgICAgIHNpemUgY2hhbmdlcyAqLworICBhbGxvY2F0aW9uLngg
PSB4dGJpbi0+eDsKKyAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7CisgIGFsbG9jYXRpb24ud2lk
dGggPSB4dGJpbi0+d2lkdGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0geHRiaW4tPmhlaWdodDsK
KworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlvbik7Cit9CisK
K3N0YXRpYyB2b2lkCitndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRnZXQgKm9iamVjdCkKK3sK
KyAgR3RrWHRCaW4gKnh0YmluOworICBHdGtXaWRnZXQgKndpZGdldDsKKworI2lmZGVmIERFQlVH
X1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisg
IC8qIGd0a19vYmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmY291bnQgb24g
b2JqZWN0CisgICAqLworICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3QpOworICB3aWRnZXQgPSBH
VEtfV0lER0VUKG9iamVjdCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9GTEFHUyAod2lkZ2V0LCBH
VEtfVklTSUJMRSk7CisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3aWRnZXQpKSB7CisgICAg
eHRfY2xpZW50X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOworICB9CisKKyAgKCpHVEtf
V0lER0VUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdpZGdldCk7Cit9CisKK3N0
YXRpYyB2b2lkCitndGtfeHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpvYmplY3QpCit7CisgIEd0
a1h0QmluICp4dGJpbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0Ymlu
X2Rlc3Ryb3koKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0g
TlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAob2JqZWN0KSk7CisKKyAg
eHRiaW4gPSBHVEtfWFRCSU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4tPnh0d2luZG93KSB7Cisg
ICAgLyogcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyICovCisgICAgeHRfY2xpZW50X2Rlc3Ryb3ko
Jih4dGJpbi0+eHRjbGllbnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cgPSAwOworCisgICAgbnVt
X3dpZGdldHMtLTsgLyogcmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLworCisgICAgLyogSWYgdGhp
cyBpcyB0aGUgbGFzdCBydW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBYdCBkaXNwbGF5CisgICAg
ICAgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlmICgwID09IG51bV93aWRn
ZXRzKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigicmVtb3ZpbmcgdGhlIFh0
IGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRpZgorICAgICAgZ19tYWlu
X2NvbnRleHRfcmVtb3ZlX3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwgJnh0X2V2ZW50X3BvbGxf
ZmQpOworICAgICAgZ19zb3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAgIGd0a190aW1lb3V0X3Jl
bW92ZSh4dF9wb2xsaW5nX3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAw
OworICAgIH0KKyAgfQorCisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGVzdHJv
eShvYmplY3QpOworfQorCisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9m
IFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50IHNpZGUKKyovCisKKy8qIEluaXRpYWwgWHQgcGx1Z2lu
ICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50ICogeHRjbGllbnQsIAor
ICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgIENvbG9y
bWFwIHh0Y29sb3JtYXAsCisgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpCit7CisgIFh0QXBw
Q29udGV4dCAgYXBwX2NvbnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFyZ3ZbMV07CisgIGludCAg
ICAgICAgICAgbUFyZ2MgPSAwOworCisgIC8qCisgICAqIEluaXRpYWxpemUgWHQgc3R1ZmYKKyAg
ICovCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPmNoaWxkX3dp
ZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVMTDsKKyAgeHRjbGllbnQt
Pnh0dmlzdWFsICAgPSBOVUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IDA7CisgIHh0Y2xp
ZW50LT54dGRlcHRoID0gMDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxpemVkKSB7CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0dWZmXG4iKTsKKyNlbmRp
ZgorICAgIFh0VG9vbGtpdEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29udGV4dCA9IFh0Q3JlYXRl
QXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQorICAgICAgWHRBcHBTZXRG
YWxsYmFja1Jlc291cmNlcyhhcHBfY29udGV4dCwgZmFsbGJhY2spOworCisgICAgeHRkaXNwbGF5
ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNwbGF5KCksIE5VTEwsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVMTCwgMCwgJm1BcmdjLCBt
QXJndik7CisgICAgaWYgKHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gVFJV
RTsKKyAgfQorICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxheTsKKyAgeHRjbGllbnQt
Pnh0dmlzdWFsICAgPSB4dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSB4dGNvbG9y
bWFwOworICB4dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9CisKKy8qIENyZWF0ZSB0
aGUgWHQgY2xpZW50IHdpZGdldHMKKyogICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2NyZWF0
ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAsIAorICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJl
ZGRlcmlkLCAKKyAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAg
ICAgICBpbnQgd2lkdGggKSAKK3sKKyAgaW50ICAgICAgICAgICBuOworICBBcmcgICAgICAgICAg
IGFyZ3NbNl07CisgIFdpZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0OworICBXaWRnZXQgICAgICAg
IHRvcF93aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoInh0X2NsaWVudF9j
cmVhdGUoKSBcbiIpOworI2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFwcENyZWF0ZVNoZWxsKCJk
cmF3aW5nQXJlYSIsICJXcmFwcGVyIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLCAwKTsKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0b3Bfd2lkZ2V0OworCisg
IC8qIHNldCBzaXplIG9mIFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tu
XSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0
aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdldCwgYXJncywgbik7CisK
KyAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNzLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsKKworICBuID0gMDsKKyAg
WHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhh
cmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHRO
dmlzdWFsLCAgIHh0Y2xpZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0s
IFh0TmRlcHRoLCAgICB4dGNsaWVudC0+eHRkZXB0aCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nb
bl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBuKys7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRoLCAwKTsgbisrOworICBYdFNldFZhbHVlcyhjaGlsZF93
aWRnZXQsIGFyZ3MsIG4pOworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsK
KyAgeHRjbGllbnQtPm9sZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUud2luZG93OworICB0b3Bf
d2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyogdGhpcyBsaXR0bGUgdHJp
Y2sgc2VlbXMgdG8gZmluaXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0ICovCisjaWYgWGxpYlNw
ZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54
dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZXJpZCwKKyAgICAgICAgICAg
ICAgICAgICAgIHRvcF93aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0ZXJXaW5kb3coIGVtYmVk
ZGVyaWQsCisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbmRpZgorICBYdFJl
YWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4gdG8gYWxsIFh0IGV2ZW50
cyAqLworICBYU2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAg
ICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAweDBGRkZGRik7CisgIHh0
X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBYdE1hbmFnZUNoaWxkKGNo
aWxkX3dpZGdldCk7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBjaGlsZF93aWRnZXQ7CisK
KyAgLyogc2V0IHRoZSBldmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxk
X3dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+UmVzaXplUmVkaXJlY3RN
YXNrLAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0
RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgIFh0QWRk
RXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVj
dHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAg
IFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2Zv
Y3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICBYU3luYyh4
dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRf
dW5yZWFsaXplICggWHRDbGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBYbGliU3BlY2lmaWNhdGlv
blJlbGVhc2UgPj0gNgorICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5
LAorICAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5k
b3cpOworI2Vsc2UKKyAgX1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldC0+
Y29yZS53aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQp
OworI2VuZGlmCisKKyAgLyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3ZSByZXR1cm5pbmcgb3Jp
Z2luIHRvcF93aWRnZXQtPmNvcmUud2luZG93CisgICAgIG9yIHdlIGNhbiBnZXQgWCBlcnJvciBz
aW5jZSB0aGUgd2luZG93IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwg
RmFsc2UpOworCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IHh0Y2xpZW50
LT5vbGR3aW5kb3c7CisgIFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsK
K30KKworc3RhdGljIHZvaWQgICAgICAgICAgICAKK3h0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xp
ZW50KiB4dGNsaWVudCkKK3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRnZXQpIHsKKyAgICBYdFJl
bW92ZUV2ZW50SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAweDBGRkZGRiwgVFJVRSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVu
dF9oYW5kbGVyLCB4dGNsaWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0KHh0Y2xpZW50LT50b3Bf
d2lkZ2V0KTsKKyAgICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIH0KK30KKworc3Rh
dGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lkZ2V0IHh0cGx1ZywgdW5z
aWduZWQgbG9uZyBmbGFncykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZmZXJbMl07CisKKyAgQXRv
bSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcpLCAiX1hFTUJFRF9JTkZP
IiwgRmFsc2UpOyAKKworICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAgICAgICAvKiBQcm90b2Nv
bCB2ZXJzaW9uICovCisgIGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhDaGFuZ2VQcm9wZXJ0eSAo
WHREaXNwbGF5KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAgICAgICAgICAgICAgICAg
aW5mb0F0b20sIGluZm9BdG9tLCAzMiwKKyAgICAgICAgICAgICAgICAgICBQcm9wTW9kZVJlcGxh
Y2UsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDIpOworfQor
CitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZShXaWRnZXQgdywg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRw
bHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChldmVudC0+eGNsaWVudC5k
YXRhLmxbMV0pCisgIHsKKyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9USUZZOgorICAgIGJyZWFr
OworICBjYXNlIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFURVxuIik7CisjZW5k
aWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEU6CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19ERUFD
VElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9P
TjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURf
TU9EQUxJVFlfT05cbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFM
SVRZX09GRjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBY
RU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJF
RF9GT0NVU19JTjoKKyAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAgIHsKKyAgICAgIFhFdmVu
dCB4ZXZlbnQ7CisgICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhldmVudCkpOworCisg
ICAgICBpZihldmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VTX0lOKSB7Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBpblxu
Iik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJbjsKKyAgICAg
IH0KKyAgICAgIGVsc2UgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRF
TUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5
cGUgPSBGb2N1c091dDsKKyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3cgPSBY
dFdpbmRvdyh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZlbnQueGZvY3VzLmRpc3Bs
YXkgPSBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgWFNlbmRFdmVudChY
dERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgICAgeGV2ZW50
Lnhmb2N1cy53aW5kb3csCisgICAgICAgICAgICAgICAgIEZhbHNlLCBOb0V2ZW50TWFzaywKKyAg
ICAgICAgICAgICAgICAgJnhldmVudCApOworICAgICAgWFN5bmMoIFh0RGlzcGxheSh4dHBsdWct
PmNoaWxkX3dpZGdldCksIEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6Cisg
ICAgYnJlYWs7CisgIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICovCit9CisKK3N0YXRpYyB2
b2lkICAgICAgICAgCit4dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcsIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChY
dENsaWVudCopY2xpZW50X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgewor
ICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4ZW1iZWQgbWVzc2FnZSAq
LworICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09CisgICAgICAgICAgICAg
ICAgIFhJbnRlcm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsKKyAgICAgICAgeHRf
Y2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0YSwgZXZlbnQpOworICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgTWFwcGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywg
WEVNQkVEX01BUFBFRCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVubWFwTm90aWZ5OgorICAg
ICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9j
dXNJbjoKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJl
c3M6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5IFByZXNzIEdvdCFcbiIp
OworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAg
fSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAorc2Vu
ZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRl
dGFpbCwgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTEsICAKKyAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMiwgIAorICAgICAgICAgICAgICAgICAgICAgbG9u
ZyAgICAgIHRpbWUpICAgCit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBXaW5kb3cgdz1YdFdpbmRv
dyh4dGNsaWVudC0+dG9wX3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14dGNsaWVudC0+eHRkaXNw
bGF5OworICBpbnQgZXJyb3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50LDAsc2l6ZW9mKHhldmVu
dCkpOworICB4ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZlbnQueGNsaWVudC50eXBl
ID0gQ2xpZW50TWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2FnZV90eXBlID0gWEludGVy
bkF0b20oZHB5LCJfWEVNQkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xpZW50LmZvcm1hdCA9IDMy
OworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAgeGV2ZW50LnhjbGllbnQu
ZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWls
OyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7CisgIHhldmVudC54Y2xpZW50
LmRhdGEubFs0XSA9IGRhdGEyOworCisgIHRyYXBfZXJyb3JzICgpOworICBYU2VuZEV2ZW50IChk
cHksIHcsIEZhbHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhTeW5jIChkcHksRmFsc2Up
OworCisgIGlmKChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgIHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkhISFcbiIsZXJy
b3Jjb2RlKTsKKyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgCitlcnJv
cl9oYW5kbGVyKERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICplcnJvcikKK3sKKyAgdHJh
cHBlZF9lcnJvcl9jb2RlID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJldHVybiAwOworfQorCitz
dGF0aWMgdm9pZCAgICAgICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7CisgIHRyYXBwZWRfZXJy
b3JfY29kZSA9MDsKKyAgb2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKGVycm9y
X2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50ICAgICAgICAgCit1bnRyYXBfZXJyb3Iodm9pZCkK
K3sKKyAgWFNldEVycm9ySGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7CisgIGlmKHRyYXBwZWRf
ZXJyb3JfY29kZSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJHZXQgWCBXaW5k
b3cgRXJyb3IgPSAlZFxuIiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNlbmRpZgorICB9CisgIHJl
dHVybiB0cmFwcGVkX2Vycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9j
bGllbnRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhLCBYRXZl
bnQgKmV2ZW50KQoreworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodyk7CisgIFh0Q2xpZW50
ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0V2luZG93KHcpOworCisg
IHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVhdGVOb3RpZnk6CisgICAg
ICBpZihldmVudC0+eGNyZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIFdpZGdl
dCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRv
dyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJf
dHJlZShjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
RGVzdHJveU5vdGlmeToKKyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdywgdXNlcl9k
YXRhKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBpZihl
dmVudC0+eHJlcGFyZW50LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3
IHBhcmVudCAqLworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldChkcHksIGV2
ZW50LT54cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0
X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAg
ICAgIGVsc2UgaWYoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2luKSB7CisgICAgICAgIC8q
IEkgYW0gdGhlIG5ldyBjaGlsZCAqLworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8q
IEkgYW0gdGhlIG9sZCBwYXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2Ug
QnV0dG9uUmVsZWFzZToKKyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1cyhkcHksIFh0V2luZG93
KHh0Y2xpZW50LT5jaGlsZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwgZXZlbnQtPnhidXR0b24u
dGltZSk7CisjZW5kaWYKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dGNsaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwg
MCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBF
bmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgWFdpbmRv
d0F0dHJpYnV0ZXMgYXR0cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0Q2xpZW50ICp4dGNsaWVu
dCA9IHVzZXJfZGF0YTsKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAg
WEdldFdpbmRvd0F0dHJpYnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRvdyh3KSwgJmF0dHIpOwor
ICBldmVudG1hc2sgPSBhdHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1h
c2sgfCBCdXR0b25SZWxlYXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0RGlzcGxheSh3KSwKKyAg
ICAgICAgICAgICAgIFh0V2luZG93KHcpLCAKKyAgICAgICAgICAgICAgIGV2ZW50bWFzayk7CisK
KyAgWHRBZGRFdmVudEhhbmRsZXIodywgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVy
ZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRS
VUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3Vz
X2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICB1bnRyYXBfZXJy
b3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQg
dywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vy
cm9ycyAoKTsKKyAgWHRSZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3RydWN0dXJlTm90aWZ5TWFz
ayB8IEJ1dHRvblJlbGVhc2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAoWHRF
dmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEpOworCisgIHVu
dHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3Ry
ZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpIAoreworICBXaW5kb3cg
d2luID0gWHRXaW5kb3codHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxkcmVuOworICBXaW5kb3cg
cm9vdCwgcGFyZW50OworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodHJlZXJvb3QpOworICB1
bnNpZ25lZCBpbnQgaSwgbmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3ZSBkb24ndCBhZGQgbW9y
ZSB0aGFuIG9uY2UgKi8KKyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNl
cl9kYXRhKTsKKyAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsK
KyAgdHJhcF9lcnJvcnMoKTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4sICZyb290LCAmcGFy
ZW50LCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFwX2Vycm9yKCk7CisgICAg
cmV0dXJuOworICB9CisKKyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAgIHJldHVybjsKKworICBm
b3IoaT0wOyBpPG5jaGlsZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNoaWxkID0gWHRXaW5kb3dU
b1dpZGdldChkcHksIGNoaWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQpIAorICAgICAgeHRfYWRk
X2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICB9CisgIFhGcmVlKCh2
b2lkKiljaGlsZHJlbik7CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRl
YnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZUd0azo6flBsdWdp
blBhY2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK1BsdWdpblBh
Y2thZ2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1l
X3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGUoMCkK
KyAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKKyAgICAsIG1faXNMb2FkZWQoZmFs
c2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQoreworICAgIGludCBwb3MgPSBtX3BhdGguZGVwcmVj
YXRlZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmlsZU5hbWUgPSBtX3BhdGgucmln
aHQobV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdl
R3RrOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dldE1JTUVEZXNjcmlwdGlvbigp
OworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykg
eworICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIs
IDMpOworCisgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVE
YXRhWzJdKTsKKyAgICAgIGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFb
MV0sICIsIiwgLTEpOworCisgICAgICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7CisgICAgICBm
b3IgKGludCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQorCWV4dFZlY3Rvci5hcHBlbmQoU3Ry
aW5nOjpmcm9tVVRGOChleHRlbnNpb25zW2pdKSk7CisKKyAgICAgIG1fbWltZVRvRXh0ZW5zaW9u
cy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rvcik7CisgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9u
cy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgZ19zdHJmcmVldihleHRl
bnNpb25zKTsKKyAgICAgIGdfc3RyZnJlZXYobWltZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZy
ZWV2KG1pbWVEZXNjcyk7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkgewor
ICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19NT0RV
TEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBf
SW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1f
bW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUpOworICAgIGdf
bW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIsICh2b2lkKiop
Jm1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUs
ICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKworICAgIGlmICghTlBf
SW5pdGlhbGl6ZSB8fCAhbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24gfHwgIW1fTlBQX1NodXRkb3du
KQorICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6
ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9w
bHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dz
ZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJl
YWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBO
X05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9i
cm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdl
bnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01l
bUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0
dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFs
dWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0
VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0
ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlk
YXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVk
cmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVk
U3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1Bv
cFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50
dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0
c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRp
ZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50
aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBf
TlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3Qg
PSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBf
TlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05Q
Tl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tl
OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7
CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNz
Lmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0
aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24g
PSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBO
X0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3Ms
ICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOwor
CithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNM
b2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9OUFBfU2h1dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhv
dXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZFdpdGhvdXRT
aHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAg
IGdfbW9kdWxlX2Nsb3NlIChtX21vZHVsZSk7CisKKyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9
CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VHdGsocGF0aCwgbGFzdE1v
ZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVs
ZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
cGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZUd0azo6aGFzaCgpIGNvbnN0Cit7
IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+
aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2Rlcyks
IDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2lu
UGFja2FnZUd0azo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZUd0ayYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNj
cmlwdGlvbjsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1H
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3Rr
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3Rr
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblN0cmVhbUd0ay5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgi
CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRl
ci5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp
bmNsdWRlIDxmY250bC5oPgorCisvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lu
cyBsaWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgorLy8gYW5kIHRoaXMgd2F5IHdl
IHdvbid0IGNsYXNoIHdpdGggdGhlbS4KK3N0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9
IC0yOworCit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOworc3Rh
dGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCit7CisgICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNT
dHJlYW1zOworICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOworfQorCitQbHVnaW5TdHJlYW1HdGs6
OlBsdWdpblN0cmVhbUd0ayhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3LCBGcmFtZSogZnJhbWUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmlj
YXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJj
ZVJlcXVlc3QpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KHBsdWdp
blZpZXcpCisgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAsIG1fc2VuZE5vdGlm
aWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQorICAgICwgbV9sb2FkTWFudWFsbHkoZmFsc2UpCisg
ICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0ZWQpCisgICAgLCBtX2RlbGF5RGVs
aXZlcnlUaW1lcih0aGlzLCAmUGx1Z2luU3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJl
ZCkKKyAgICAsIG1fZGVsaXZlcnlEYXRhKDApCisgICAgLCBtX3RlbXBGaWxlSGFuZGxlKDApCisg
ICAgLCBtX3BsdWdpbkZ1bmNzKHBsdWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5GdW5jcygpKQor
ICAgICwgbV9pbnN0YW5jZShwbHVnaW5WaWV3LT5pbnN0YW5jZSgpKQoreworICAgIEFTU0VSVCht
X3BsdWdpblZpZXcpOworCisgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0
YSA9IDA7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7Cisg
ICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0g
MDsKKworICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKworUGx1
Z2luU3RyZWFtR3RrOjp+UGx1Z2luU3RyZWFtR3RrKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1T
dGF0ZSAhPSBTdHJlYW1TdGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGZy
ZWUoKGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJlYW1zKCkucmVtb3ZlKCZtX3N0cmVh
bSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFydCgpCit7CisgICAgQVNTRVJUKCFt
X2xvYWRNYW51YWxseSk7CisKKyAgICBtX2xvYWRlciA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyOjpjcmVhdGUobV9mcmFtZSwgdGhpcyk7CisKKyAgICBtX2xvYWRlci0+c2V0U2hvdWxkQnVm
ZmVyRGF0YShmYWxzZSk7CisgICAgbV9sb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFkZFBsdWdJ
blN0cmVhbUxvYWRlcihtX2xvYWRlci5nZXQoKSk7CisgICAgbV9sb2FkZXItPmxvYWQobV9yZXNv
dXJjZVJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3RvcCgpCit7CisgICAg
bV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAobV9sb2FkTWFudWFsbHkp
IHsKKyAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIq
IGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVy
KCk7CisgICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CisKKyAgICAgICAgaWYgKGRvY3Vt
ZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKKyAgICAgICAgICAgIGRvY3VtZW50
TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxs
ZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgICAg
ICBtX2xvYWRlciA9IDA7CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3RhcnRT
dHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0
ZWQpOworCisgICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBtX3Jlc291cmNlUmVzcG9uc2Uu
dXJsKCk7CisKKyAgICAvLyBTb21lIHBsdWdpbnMgKEZsYXNoKSBleHBlY3QgdGhhdCBqYXZhc2Ny
aXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNrIGRlY29kZWQgYXMgdGhpcyBpcyB0aGUKKyAgICAvLyBm
b3JtYXQgdXNlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAgICBpZiAocmVzcG9uc2VVUkwu
dXJsKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIG1fc3RyZWFt
LnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRlY29kZV9zdHJpbmcocmVzcG9uc2VVUkwudXJs
KCkpLnV0ZjgoKSk7CisgICAgZWxzZQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChy
ZXNwb25zZVVSTC51cmwoKS51dGY4KCkpOworICAgIAorICAgIENTdHJpbmcgbWltZVR5cGVTdHIg
PSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisgICAgCisgICAgbG9uZyBs
b25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsK
KyAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmcgc2Vw
YXJhdG9yKCI6ICIpOworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZp
cnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRv
ci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgo
KSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CisgICAg
ICAgIH0KKworICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIp
LnV0ZjgoKTsKKworICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxp
a2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdp
biwKKyAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxl
bmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVj
dGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KKyAgICAgICAgU3Ry
aW5nIGNvbnRlbnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
IkNvbnRlbnQtRW5jb2RpbmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxs
KCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3Rl
ZENvbnRlbnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9o
ZWFkZXJzLmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRh
dGEgPSB0aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgs
IDBMTCk7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNvdXJjZVJlc3BvbnNlLmxh
c3RNb2RpZmllZERhdGUoKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRh
OworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9vZmZzZXQgPSAwOwor
ICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3RlY3QgdGhlIHN0cmVh
bSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhh
bmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAg
TlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBN
SU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVy
TW9kZSk7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBj
YWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29u
Tm9uZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3N0cmVhbVN0YXRlID0gU3Ry
ZWFtU3RhcnRlZDsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAg
Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUg
PT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisgICAgCisjaWYgMAorICAgIGNoYXIgdGVt
cEZpbGVbUEFUSF9NQVhdOworCisgICAgaWYgKG1rc3RlbXAoIldLUFhYWFhYWCIpID4gMCkgewor
ICAgICAgICBtX3RlbXBGaWxlSGFuZGxlID0gb3Blbih0ZW1wRmlsZSwgT19DUkVBVCB8IE9fQVNZ
TkMpOworCisJaWYgKG1fdGVtcEZpbGVIYW5kbGUgPiAwKSB7CisJICAgIG1fcGF0aCA9IHRlbXBG
aWxlOworCSAgICByZXR1cm47CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLy8gU29tZXRoaW5n
IHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBjYW5jZWxBbmREZXN0
cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKworTlBQIFBsdWdpblN0cmVhbUd0azo6
b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gc3RyZWFtcygp
LmdldChzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6Y2FuY2VsQW5kRGVzdHJv
eVN0cmVhbShOUFJlYXNvbiByZWFzb24pCit7CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4g
cHJvdGVjdCh0aGlzKTsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICBzdG9wKCk7
Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNv
bikKK3sKKyAgICBtX3JlYXNvbiA9IHJlYXNvbjsKKyAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNf
RE9ORSkgeworICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJl
YW1lZAorICAgICAgICBpZiAobV9kZWxpdmVyeURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5
RGF0YS0+cmVzaXplKDApOworICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxp
dmVyeURhdGEtPnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRv
IGJlIHN0cmVhbWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgorICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGRlc3Ryb3lTdHJlYW0oKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OmRlc3Ryb3lTdHJlYW0oKQoreworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0
b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCAobV9yZWFzb24gIT0gV2ViUmVh
c29uTm9uZSk7CisgICAgQVNTRVJUICghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEt
PnNpemUoKSA9PSAwKTsKKworICAgIGlmIChtX3RlbXBGaWxlSGFuZGxlID4gMCkKKyAgICAgICAg
Y2xvc2UobV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICBpZiAobV9zdHJlYW0ubmRhdGEgIT0gMCkg
eworICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUg
PT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7CisKKyAgICAgICAgICAgIG1fcGx1Z2lu
RnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC5kYXRhKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgTlBFcnJvciBucEVycjsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdp
bkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOwor
CisgICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zZW5kTm90
aWZpY2F0aW9uKQorICAgICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnkobV9pbnN0YW5jZSwg
bV9yZXNvdXJjZVJlcXVlc3QudXJsKCkudXJsKCkudXRmOCgpLCBtX3JlYXNvbiwgbV9ub3RpZnlE
YXRhKTsKKworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgLy8gZGlz
Y29ubmVjdFN0cmVhbSBjYW4gY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KKyAgICBSZWZQdHI8UGx1
Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworICAgIGlmICghbV9sb2FkTWFudWFsbHkpCisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlzY29ubmVjdFN0cmVhbSh0aGlzKTsKKworICAgIG1fcGx1
Z2luVmlldyA9IDA7CisKKyAgICAvKgorICAgIGlmICghbV9wYXRoLmlzTnVsbCgpKQorICAgICAg
ICA6OkRlbGV0ZUZpbGVBKG1fcGF0aC5kYXRhKCkpOworICAgICovCit9CisKK3ZvaWQgUGx1Z2lu
U3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+
KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fZGVsYXlEZWxpdmVyeVRpbWVyKTsK
KworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxpdmVy
RGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBk
b24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFtLm5k
YXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50MzIgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgaW50MzIg
dG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJl
ZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzIgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2lu
RnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3RyZWFtKTsKKworICAgICAgICBpZiAo
ZGVsaXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5z
dGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAt
IHRvdGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAgaW50MzIgZGF0YUxlbmd0aCA9IGRl
bGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBkYXRhID0gbV9kZWxpdmVyeURhdGEtPmRh
dGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBk
YXRhCisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGUobV9p
bnN0YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0YUxlbmd0aCwgKHZvaWQqKWRhdGEpOwor
ICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgY2Fu
Y2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihk
ZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2
ZXJ5Qnl0ZXM7CisgICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0
ZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDAp
IHsKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAg
ICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2
ZXJlZDsKKyAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsK
KyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAg
ICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAg
IGRlc3Ryb3lTdHJlYW0oKTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3Ry
ZWFtR3RrOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJl
c291cmNlUmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVu
Z3RoKCksICIiLCAiIikpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlkUmVjZWl2ZURhdGEoMCwgcmVzdWx0U3RyaW5n
LmRhdGEoKSwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9
PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRGaW5pc2hMb2FkaW5n
KDApOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVCht
X3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJl
c3BvbnNlID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdp
blN0cmVhbUd0azo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxv
YWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobG9hZGVy
ID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisgICAgCisgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0
YSkKKyAgICAgICAgbV9kZWxpdmVyeURhdGEuc2V0KG5ldyBWZWN0b3I8Y2hhcj4pOworCisgICAg
aW50IG9sZFNpemUgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIG1fZGVsaXZlcnlEYXRh
LT5yZXNpemUob2xkU2l6ZSArIGxlbmd0aCk7CisgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5k
YXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4g
Y2FuY2VscyB0aGUgc3RyZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAor
ICAgIC8vIHNvIHByb3RlY3QgaXQgaGVyZS4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBw
cm90ZWN0KHRoaXMpOworCisgICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkp
CisgICAgICAgIGRlbGl2ZXJEYXRhKCk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJl
YW1TdG9wcGVkICYmIG1fdGVtcEZpbGVIYW5kbGUgPiAwKSB7CisgICAgICAgIGludCB3cml0dGVu
OworICAgICAgICBib29sIHJldHZhbCA9IGZhbHNlOworCisJd3JpdHRlbiA9IDA7CisjaWYgMAor
ICAgICAgICBkbyB7CisJICB3cml0dGVuICs9IHdyaXRlKG1fdGVtcEZpbGVIYW5kbGUsIGRhdGEs
IGxlbmd0aCk7CisJfSB3aGlsZSAod3JpdHRlbiA8IGxlbmd0aCk7CisjZW5kaWYKKworICAgICAg
ICBpZiAoIXJldHZhbCB8fCB3cml0dGVuICE9IGxlbmd0aCkKKyAgICAgICAgICAgIGNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7
CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktf
RVJSKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZpbmlzaExvYWRpbmcoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1f
bG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKwor
ICAgIG1fbG9hZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisv
KiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1i
YXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9w
PTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9u
OiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAq
IDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICog
U29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAq
IExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRn
ZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgor
ICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBs
YXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJv
dmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwg
YW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lv
biBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
dGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBv
ciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAq
IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisg
KgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBfX0dU
S19YVEJJTl9IX18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsvZ3Rr
c29ja2V0Lmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YdXRp
bC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNpbmNs
dWRlICJuc2NvcmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RLWFRC
SU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQ
SSh0eXBlKSBOU19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklO
X0FQSSh0eXBlKSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW4g
R3RrWHRCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNzOwor
CisjZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9nZXRf
dHlwZSAoKSkKKyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RLX0NI
RUNLX0NBU1QgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFTUyhr
bGFzcykgICAgICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJp
bkNsYXNzKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RLX0NI
RUNLX1RZUEUgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19UWVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAg
ICAgICAoR1RLX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1Y3Qg
X1h0Q2xpZW50IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkqeHRk
aXNwbGF5OworICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAq
LworICBXaWRnZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLworICBW
aXN1YWwJKnh0dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3JtYXA7
CisgIFdpbmRvdwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0a1Nv
Y2tldCAgICAgIGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7CisgIERp
c3BsYXkgICAgICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLwor
CisgIFdpbmRvdyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRv
dyAqLworICBnaW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVp
Z2h0OworICBYdENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1i
ZWQgKi8KK307CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENsYXNz
IHdpZGdldF9jbGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0Ymlu
X2dldF90eXBlICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25l
dyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJKHZv
aWQpICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAg
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICB5KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChH
dGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMg
eworICAgIFh0VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8g
VHJhbnNsYXRpb24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxl
OyAgICAgICAgIC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAgIHN0
cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIg
c3RhdGUgcHRyICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOworfSBY
dFRNUmVjLCAqWHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBXaWRn
ZXQgICAgICAgICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNl
bGYgICAgICAgICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAv
KiBwb2ludGVyIHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAgICAg
ICAgcGFyZW50OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQg
cmVzb3VyY2UgbmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVpbmdf
ZGVzdHJveWVkOyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KKyAg
ICBYdENhbGxiYWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVu
IHdpZGdldCBkZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAg
ICAgICAvKiBjb25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3NpdGlv
biAgICAgICAgeCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAg
ICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3
aW5kb3cgZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAg
Ym9yZGVyX3dpZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAg
Ki8KKyAgICBCb29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQg
Z2VvbWV0cnkgbWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZl
OyAgICAgICAgICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAgICBC
b29sZWFuICAgICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBz
ZW5zaXRpdmU/ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAg
ICAvKiBwcml2YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVjICAg
ICAgICAgdG07ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAg
ICAgICAgKi8KKyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2Nl
bGVyYXRvciB0cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYm9y
ZGVyX3BpeGVsOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8K
KyAgICBQaXhtYXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVy
IHBpeG1hcCBvciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsg
ICAgICAgICAvKiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJk
aW5hbCAgICAgICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAg
ICAgICAgICAgICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAv
KiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAgICAg
ICAgKnNjcmVlbjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1h
cCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2luZG93
OyAgICAgICAgICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAg
ICBDYXJkaW5hbCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVz
IGluIHdpbmRvdyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhl
bDsgICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXhtYXAg
ICAgICAgICAgYmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAg
b3IgTlVMTCAgKi8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBp
cyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAgICAg
bWFwcGVkX3doZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAg
Ki8KK30gQ29yZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENvcmVQ
YXJ0ICAgIGNvcmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRCSU5f
SF9fICovCisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2lu
UGFja2FnZUd0a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21v
ZHVsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
Im5wZnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI3VuZGVmIE5QX0lu
aXRpYWxpemVGdW5jUHRyCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAg
ICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrIDogcHVibGljIFNoYXJlZDxQbHVnaW5QYWNrYWdlR3Rr
PiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBz
dGF0aWMgUGx1Z2luUGFja2FnZUd0ayogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVU
b0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9t
aW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYg
bWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQor
CisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7
CisKKyAgICAgICAgYm9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAg
IHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5G
dW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAg
IHByaXZhdGU6CisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisK
KyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAg
ICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAg
ICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAg
IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlN
RVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSog
bV9tb2R1bGU7CisgICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKKworCU5QX0dldE1JTUVE
ZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAgICAgIE5QUF9T
aHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9w
bHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworICAg
IH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBs
dWdpblBhY2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+
aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0
IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsq
PihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYSwgY29u
c3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlR3Rr
OjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEg
YnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1
bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxl
IHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1l
c3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6
UGx1Z2luUGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2Yo
UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsK
KyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBIYXNoOworICAg
ICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAgIH07Cit9CisKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVh
bUd0a19ICisjZGVmaW5lIFBsdWdpblN0cmVhbUd0a19ICisKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJucGZ1bmN0
aW9ucy5oIgorI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgZW51bSBQ
bHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0
cmVhbVN0b3BwZWQgfTsKKworICAgIGNsYXNzIFBsdWdpblN0cmVhbUd0ayA6IHB1YmxpYyBTaGFy
ZWQ8UGx1Z2luU3RyZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNs
aWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0
ayosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAgICAg
ICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9v
bCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KKworICAg
ICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAgICAgdm9pZCBzZW5kSmF2YVNj
cmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1bHRT
dHJpbmcpOworICAgICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOwor
CisgICAgICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKyAgICBwcml2
YXRlOgorICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZvaWQgZGVzdHJveVN0
cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOworCisgICAgICAg
IFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAg
ICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAg
IFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgdm9pZCogbV9ub3RpZnlEYXRh
OworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1Z2luU3RyZWFt
U3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKworICAg
ICAgICBUaW1lcjxQbHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxpdmVyeVRpbWVyOworICAgICAg
ICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0az4qKTsK
KworICAgICAgICBPd25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVsaXZlcnlEYXRhOworCisgICAg
ICAgIGludCBtX3RlbXBGaWxlSGFuZGxlOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3Mq
IG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICB1aW50MTYg
bV90cmFuc2Zlck1vZGU7CisgICAgICAgIGludDMyIG1fb2Zmc2V0OworICAgICAgICBDU3RyaW5n
IG1faGVhZGVyczsKKyAgICAgICAgQ1N0cmluZyBtX3BhdGg7CisgICAgICAgIE5QUmVhc29uIG1f
cmVhc29uOworICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
bkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3Rr
LmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
d0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNlR3RrKiBQbHVn
aW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3RhdGljIFBsdWdpbkRh
dGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAg
ICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAgICAgcGx1Z2lucy0+c2V0
UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAg
ICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOwor
fQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJl
c2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVzaCgpCit7ICAgCisgICAg
UGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxz
ZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMg
PSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisgICAgICAgIFBsdWdp
blNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKKworICAgICAg
ICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5z
CisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAg
ICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisK
KyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8
ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMg
PSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5l
d1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9w
bHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lu
cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVz
CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Cisg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcworICAgICAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWlt
ZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCku
YmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdl
R3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQ
bHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQbHVn
aW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBI
YXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNldCBwbHVnaW5zOwor
CisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNr
YWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChpdC0+dXRmOCgpKS5kYXRh
KCksIDAsIE5VTEwpOworCWlmIChkaXIpIHsKKwkgIGNvbnN0IGNoYXIqIG5hbWU7CisJICB3aGls
ZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKwkgICAgaWYgKGdfc3RyX2hhc19z
dWZmaXgobmFtZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKwkgICAgICBnY2hhciogZmlsZW5h
bWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOwor
CSAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3Rr
OjpjcmVhdGVQYWNrYWdlKGZpbGVuYW1lLCB0aW1lKE5VTEwpKTsKKwkgICAgICBpZiAocGx1Z2lu
UGFja2FnZSkgeworCQlwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKwkgICAgICB9CisJICAg
ICAgZ19mcmVlKGZpbGVuYW1lKTsKKwkgICAgfQorCSAgfQorCSAgZ19kaXJfY2xvc2UoZGlyKTsK
Kwl9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVj
dG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykK
K3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAw
OworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJz
aW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVu
ZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQorICAgICAgICAgICAgaWYg
KHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09
ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnQgdmVyc2lvbkNvbXBv
bmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBv
cykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7CisK
KyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKworICAgIHJldHVybiB2ZXJz
aW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhh
biB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0
b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
aWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRo
ZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBj
b21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0
b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK3sKKyAg
ICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBob21lUGF0aCA9IGdfYnVpbGRf
ZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsK
KyAgICBwYXRocy5hcHBlbmQoaG9tZVBhdGgpOworICAgIGdfZnJlZShob21lUGF0aCk7CisKKyAg
ICBjb25zdCBnY2hhciogbW96UGF0aCA9IGdfZ2V0ZW52KCJNT1pfUExVR0lOX1BBVEgiKTsKKyAg
ICBpZiAobW96UGF0aCkgeworICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQo
bW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNb
aV07IGkrKykKKwlwYXRocy5hcHBlbmQocGx1Z2luUGF0aHNbaV0pOworCisgICAgICBnX2ZyZWUo
cGx1Z2luUGF0aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21v
emlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVn
aW5zIik7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6
OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29u
dGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0
azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBTdHJp
bmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICAg
ICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVn
aW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRv
RXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0
ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsg
bWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFz
ZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsKKworICAgIGlmICghbWlt
ZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVU
eXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHVy
bC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhwYXRo
LnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JFeHRl
bnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxk
IGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBlIAorICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisgICAgcmV0dXJuIHBsdWdp
bjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNyZWF0ZVBsdWdpblZp
ZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IGZp
bmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3Vu
ZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBp
ZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJs
LCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmlld0d0ayhwYXJl
bnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2lu
SW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1
bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VHdGsgKmRiID0gUGx1Z2luRGF0YWJh
c2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBs
dWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClb
aV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZpbGUg
PSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlw
dGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlw
dGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsK
KyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1l
VG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1pbWVD
bGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWltZXMu
YXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsK
KyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdpbiA9
IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1p
bWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAg
ICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKwor
ICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omlu
c3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworYm9vbCBQbHVnSW5JbmZv
U3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkg
Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlz
TUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhi
b29sIHJlbG9hZE9wZW5QYWdlcykKK3sKKyAgICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVk
UGx1Z2lucygpLT5yZWZyZXNoKCk7CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAg
ICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiAyNzc1MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTYs
NiArNiw3IEBAIENPTkZJRyArPSBidWlsZGluZy1saWJzCiBDT05GSUcgKz0gbm9fYmF0Y2gKIGlu
Y2x1ZGUoJCRQV0QvLi4vV2ViS2l0LnByaSkKIGd0ay1wb3J0OkxJQlMgLT0gLWxXZWJLaXRHdGsK
K2d0ay1wb3J0OkxJQlMgKz0gLWxYdAogCiBURU1QTEFURSA9IGxpYgogcXQtcG9ydDpUQVJHRVQg
PSBRdFdlYktpdApAQCAtNjAsNiArNjEsNyBAQCBndGstcG9ydDohY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX1hTTFQ9CiAjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMg
Kz0gRU5BQkxFX1hCTD0xCiBxdC1wb3J0OiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0u
KTogREVGSU5FUyArPSBFTkFCTEVfU1ZHPTEKIGd0ay1wb3J0OkRFRklORVMgKz0gRU5BQkxFX1NW
Rz0xCitndGstcG9ydDpERUZJTkVTICs9IFhQX1VOSVgKIAogREVGSU5FUyArPSBXVEZfQ0hBTkdF
Uz0xCiAKQEAgLTc4MywxMyArNzg1LDMxIEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJv
Y2Vzc29yLmNwcAogCiBndGstcG9ydCB7CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmggXAor
ICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luU3RyZWFtR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaCBcCisgICAg
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAorICAgIHBsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgg
XAorICAgIHBsdWdpbnMvZ3RrL3hlbWJlZC5oCisKICAgU09VUkNFUyArPSBcCisgICAgbG9hZGVy
L2d0ay9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckd0ay5jcHAgXAogICAgIHBsYXRmb3JtL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAgXAog
ICAgIHBsYXRmb3JtL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL0ZvbnQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9Gb250RGF0YS5jcHAgXAotICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3Qu
Y3BwIAorICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0
ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFz
ZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBw
bHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5W
aWV3R3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAorICAgIHBsdWdpbnMv
Z3RrL25wYXBpLmNwcAogfQogCiBxdC1wb3J0IHsKQEAgLTg5MCw2ICs5MTAsNyBAQCBxdC1wb3J0
IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lu
cy9ndGsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtkZWZp
bmVzLmggXApJbmRleDogV2ViQ29yZS9sb2FkZXIvZ3RrL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9ndGsvTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXJHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvZ3Rr
L05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKEZyYW1l
KiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCkKKyAgICA6
IFJlc291cmNlTG9hZGVyKGZyYW1lLCB0cnVlLCB0cnVlKQorICAgICwgbV9jbGllbnQoY2xpZW50
KQoreworfQorCitOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6fk5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cj4gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcihmcmFtZSwgY2xpZW50KTsKK30KKworYm9vbCBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6aXNEb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
Y2xpZW50OworfQorCit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpyZWxlYXNlUmVz
b3VyY2VzKCkKK3sKKyAgICBtX2NsaWVudCA9IDA7CisgICAgUmVzb3VyY2VMb2FkZXI6OnJlbGVh
c2VSZXNvdXJjZXMoKTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworCisgICAgLy8g
RG9uJ3QgY29udGludWUgaWYgdGhlIHN0cmVhbSBpcyBjYW5jZWxsZWQKKyAgICBpZiAoIW1fY2xp
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKHJlc3BvbnNlKTsKKworICAgIC8vIERvbid0IGNvbnRpbnVlIGlmIHRoZSBzdHJlYW0g
aXMgY2FuY2VsbGVkCisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHJlc3BvbnNlLmlzSFRUUCgpICYmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIDwgMTAw
IHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSkKKyAgICAgICAgZGlkQ2FuY2Vs
KGZyYW1lTG9hZGVyKCktPmZpbGVEb2VzTm90RXhpc3RFcnJvcihyZXNwb25zZSkpOworfQorCit2
b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoLCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRP
bmNlKQoreworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0
aGlzKTsKKworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBsZW5ndGgp
OworICAgIAorICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgs
IGxlbmd0aFJlY2VpdmVkLCBhbGxBdE9uY2UpOworfQorCit2b2lkIE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5y
ZW1vdmVQbHVnSW5TdHJlYW1Mb2FkZXIodGhpcyk7CisgICAgbV9jbGllbnQtPmRpZEZpbmlzaExv
YWRpbmcodGhpcyk7CisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKTsKK30K
Kwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+
IHByb3RlY3QodGhpcyk7CisKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVQbHVnSW5TdHJl
YW1Mb2FkZXIodGhpcyk7CisgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3IpOworICAg
IFJlc291cmNlTG9hZGVyOjpkaWRGYWlsKGVycm9yKTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlcjo6ZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorewor
ICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKwor
ICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVBsdWdJblN0cmVhbUxvYWRlcih0aGlzKTsKKyAg
ICBtX2NsaWVudC0+ZGlkRmFpbCh0aGlzLCBlcnJvcik7CisgICAgUmVzb3VyY2VMb2FkZXI6OmRp
ZENhbmNlbChlcnJvcik7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291
cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2
aXNpb24gMjc3NTApCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHRpbWUuaD4KIAorI3VuZGVmIFN0YXR1cworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENhY2hlOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlci5oCShyZXZpc2lvbiAyNzc1MCkKKysrIFdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0jaWYgVVNFKENGTkVUV09SSykKICAgICBjbGFzcyBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcjsKIAogICAgIGNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyQ2xpZW50IHsKQEAgLTQ0LDcgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNv
bnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKikgeyB9CiAgICAgfTsKLSNlbmRpZgog
CiAjaWZkZWYgX19PQkpDX18KICAgICAgICAgdHlwZWRlZiBpZCA8V2ViUGx1Z0luU3RyZWFtTG9h
ZGVyRGVsZWdhdGU+IFBsdWdJblN0cmVhbUxvYWRlckRlbGVnYXRlOwpAQCAtNjAsMjUgKzU4LDIx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGlzRG9uZSgpIGNvbnN0Owog
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIgKiwgaW50LCBsb25nIGxvbmcg
bGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVz
b3VyY2VFcnJvciYpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7
Ci0jZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyKEZyYW1lKiwgUGx1Z0luU3RyZWFtTG9hZGVyRGVsZWdhdGUpOwogCi0jaWYgUExBVEZPUk0o
TUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yKTsKLSNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgICAgICBSZXRhaW5QdHI8UGx1Z0luU3RyZWFtTG9hZGVyRGVsZWdhdGUgPiBtX3N0cmVhbTsK
LSNlbGlmIFVTRShDRk5FVFdPUkspCisjZWxzZQogICAgICAgICBOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAjZW5kaWYKICAgICB9OwpJbmRleDogV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJ
bWFnZS5oCShyZXZpc2lvbiAyNzc1MCkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjdW5kZWYgVW5rbm93bgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIERvY0xvYWRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17273</attachid>
            <date>2007-11-14 10:55:35 -0800</date>
            <delta_ts>2007-11-15 09:45:41 -0800</delta_ts>
            <desc>Updated patch for the Shared type removal</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>175417</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2aXNpb24gMjc3ODUpCisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
CiAjaWZkZWYgWFBfVU5JWAogICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogICAgICNpbmNsdWRl
IDxYMTEvWHV0aWwuaD4KKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgogCiAjaWZkZWYg
WFBfV0lOCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkocmV2aXNpb24gMjc3
ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsOCBAQCBleHRlcm4gIkMiIHsKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNp
bmNsdWRlICJucGFwaS5oIgogCisjdW5kZWYgTm9uZQorCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gp
ICYmIGRlZmluZWQoX19MUDY0X18pCiAjZXJyb3IgNjQtYml0IE5ldHNjYXBlIHBsdWctaW5zIGFy
ZSBub3Qgc3VwcG9ydGVkIG9uIE1hYyBPUyBYCiAjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAy
Nzc4NSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8K
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRG9uIEdpYnNvbiA8ZGdpYnNvbjc3QGdtYWlsLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CkBAIC01
NiwxMiArNTcsMTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNs
dWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGll
bnQoV2ViS2l0RnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKwksIG1fcGx1Z2lu
VmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpA
QCAtMTY3LDkgKzE3MywzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxT
dWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxv
YWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1f
cmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0
YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVz
cG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgewor
ICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKwkJLy8gU2V0dGluZyB0aGUgZW5jb2Rp
bmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBp
cyBub3JtYWxseSBkb25lCisJCS8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2Vp
dmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBh
Ym91dDpibGFuaykuCisJCVN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGlu
ZygpOworCQlib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisJCWlmICghdXNl
ckNob3NlbikKKwkJCWVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05h
bWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1l
TG9hZGVyKCk7CisJCWZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nl
bik7CisJCWlmIChkYXRhKQorCQkJZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsK
KyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbikgeworCQkJbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2Uo
bG9hZGVyLT5yZXNwb25zZSgpKTsKKwkJCW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVl
OworCQl9CisJCW1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRp
ZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjUxLDggKzI3OCwxMyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9m
cmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdl
dCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5E
YXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9m
cmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMs
IG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygp
ID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMjk0
LDggKzMyNiw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVn
aW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9w
bHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9
CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29u
c3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtMzE3LDYgKzM0
OCw5IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRh
dGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVU
eXBlKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdp
bjsKKwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5
cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAK
QEAgLTQ0NSwxNCArNDc5LDE0IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVk
TUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZy
YW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIg
aXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8v
IHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2Fz
ZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3Ry
aW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBi
b29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlz
TnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRl
eHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0
RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcp
CisgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsK
KyAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAgbV9wbHVnaW5W
aWV3ID0gMDsKKyAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIApAQCAtNTA4LDcgKzU0MiwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzYXZl
RG9jdW1lbnRWaWV3CiBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQogRnJhbWUqIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9s
aWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKSB7CisgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICBtX3BsdWdp
blZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICB9Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9y
U3RhbmRhcmRMb2FkKGNvbnN0IEtVUkwmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JSZWxvYWQoY29uc3QgS1VSTCYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMjc3ODUpCisrKyBXZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZyYW1lIFdlYktpdEZyYW1lOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTE4MCw3ICsxODIsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2ViS2l0RnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2Vy
QWdlbnQ7CisKKwkvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisJV2ViQ29yZTo6
UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworCWJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkocmV2aXNp
b24gMjc3ODUpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTczLDYgKzU3Myw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX2luaXQoV2Vi
S2l0UGFnZSoKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7CiAg
ICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIAorICAgIHNldHRp
bmdzLT5zZXRQbHVnaW5zRW5hYmxlZChUUlVFKTsKKwogICAgIEdUS19XSURHRVRfU0VUX0ZMQUdT
KHBhZ2UsIEdUS19DQU5fRk9DVVMpOwogICAgIHBhZ2VEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRf
RlJBTUUod2Via2l0X2ZyYW1lX25ldyhwYWdlKSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkocmV2aXNpb24g
Mjc3ODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsOCBAQAogI2luY2x1ZGUgPFF0R3VpL3Fmb250bWV0cmljcy5oPgogI2VuZGlmCiAKKyN1
bmRlZiBDb21wbGV4CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2
aXNpb24gMjc3ODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMiArNTgsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKERl
cHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQogCi1QbHVnaW5JbmZvKiBQ
bHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVk
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9y
ZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1i
b29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBX
ZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotCiBD
b2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZv
aWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZpc2lvbiAyNzc4NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4Nyw1ICsyODcsMjIgQEAgdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJv
bwogCiB2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsKKyAgICBpZiAoIXBh
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7
CisgICAgSW50UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93
KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBh
bGxvY2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRTaXplIHN6ID0gZnJhbWVHZW9t
ZXRyeSgpLnNpemUoKTsKKyAgICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHN6LndpZHRoKCksIHN6
LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAm
YWxsb2NhdGlvbik7CiB9CiB9CkluZGV4OiBXZWJDb3JlL2NvbmZpZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI3Nzg1KQorKysgV2ViQ29yZS9jb25maWcuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvRGlzYWxsb3dD
VHlwZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjZGVmaW5lIFdURl9VU0VfTlBP
QkpFQ1QgMQorI2VuZGlmCisKICNpZiAhQ09NUElMRVIoTVNWQykgLy8gY2FuJ3QgZ2V0IHRoaXMg
dG8gY29tcGlsZSBvbiBWaXN1YWwgQysrIHlldAogI2RlZmluZSBBVk9JRF9TVEFUSUNfQ09OU1RS
VUNUT1JTIDEKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiAy
Nzc4NSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDEwIEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCisjdW5kZWYg
Tm9uZQorI3VuZGVmIEFib3ZlCisjdW5kZWYgQmVsb3cKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBIVE1MQ29sbGVjdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YWJhc2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRh
dGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRh
dGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3Rr
X0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3Rr
LmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
Y2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAg
IGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVn
aW5WaWV3R3RrOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3Rr
PiwgUGx1Z2luUGFja2FnZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2lu
RGF0YWJhc2VHdGsgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNl
R3RrKiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBs
dWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAg
IFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29s
IGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAg
ICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRl
OgorICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdp
bnNJblBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdp
bihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBs
dWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
OworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24pOworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0
UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOwor
ICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQ
bHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE0ODMgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogNDsgaW5k
ZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICovCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKKyNp
bmNsdWRlICJndGsyeHRiaW4uaCIKKworI2luY2x1ZGUgPGdkay9nZGtkaXNwbGF5Lmg+CisjaW5j
bHVkZSA8Z2RrL2dka3guaD4KKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxp
Yi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2lu
Y2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisv
LyBGb250LmggY3JhY2sKKyN1bmRlZiBBdXRvCisjdW5kZWYgU2ltcGxlCisjdW5kZWYgQ29tcGxl
eAorCisvLyBSZW5kZXJTdHlsZS5oIGNyYWNrCisjdW5kZWYgTm9uZQorI3VuZGVmIENpcmNsZQor
I3VuZGVmIFJlY3RhbmdsZQorCisvLyBDYWNoZWRSZXNvdXJjZS5oIGNyYWNrCisjdW5kZWYgU3Rh
dHVzCisjdW5kZWYgTm90Q2FjaGVkCisjdW5kZWYgVW5rbm93bgorI3VuZGVmIE5ldworI3VuZGVm
IFBlbmRpbmcKKyN1bmRlZiBDYWNoZWQKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
UmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1
Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAia2pzX2JpbmRpbmcu
aCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJranNfd2luZG93LmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5j
bHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJucGFwaS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZV9yb290LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDxranMvSlNMb2Nr
Lmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNp
bmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09i
amVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcg
c3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50
TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBQbHVnaW5SZXF1ZXN0
R3RrIHsKK3B1YmxpYzoKKyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5
RGF0YSkKKyAgICAgICAgOiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAg
ICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgLCBtX3NlbmROb3RpZmlj
YXRpb24oc2VuZE5vdGlmaWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAgY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVx
dWVzdDsgfQorICAgIHZvaWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURh
dGE7IH0KKyAgICBib29sIHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmRO
b3RpZmljYXRpb247IH0KK3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9h
ZFJlcXVlc3Q7CisgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90aWZp
Y2F0aW9uOworICAgIC8vIEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisKK3N0YXRpYyBjb25zdCBk
b3VibGUgTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsID0gMC4wMDE7CisKK2NsYXNzIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJHdGsgeworcHVibGljOgorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKKyAgICAgICAgOiBtX2JhY2soMCksIG1f
ZnJvbnQoMCkKKyAgICAgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAgICAgLCBt
X21lc3NhZ2VUaHJvdHRsZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOjpt
ZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJlZSBsaXN0IHdpdGggb3VyIGlubGluZSBtZXNzYWdlcworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgICAgICBt
X2lubGluZU1lc3NhZ2VzW2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAg
ICAgIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKKyAg
ICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKKyAgICB9
CisKKyAgICB+UGx1Z2luTWVzc2FnZVRocm90dGxlckd0aygpCisgICAgeworICAgICAgICBQbHVn
aW5NZXNzYWdlKiBuZXh0OworICAgIAorICAgICAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3Nh
Z2UgPSBtX2Zyb250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4
dCA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKyAg
ICAgICAgfSAgICAgICAgCisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTWVzc2FnZShYSUQg
aFduZCwgZ3VpbnQgbXNnLCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSkgCisgICAgeworICAg
ICAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICAg
ICAgbWVzc2FnZS0+aFduZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKKyAg
ICAgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOworICAgICAgICBtZXNzYWdlLT5sUGFyYW0g
PSBsUGFyYW07CisgICAgICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisgICAgICAgIGlmIChtX2Jh
Y2spCisgICAgICAgICAgICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgICAgICBtX2JhY2sg
PSBtZXNzYWdlOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICBtX2Zyb250ID0g
bWVzc2FnZTsKKworICAgICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3Nh
Z2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBQ
bHVnaW5NZXNzYWdlIHsKKyAgICAgICAgWElEIGhXbmQ7CisgICAgICAgIGd1aW50IG1zZzsKKyAg
ICAgICAgZ3VpbnQgd1BhcmFtOworICAgICAgICBnbG9uZyBsUGFyYW07CisKKyAgICAgICAgc3Ry
dWN0IFBsdWdpbk1lc3NhZ2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIG1lc3NhZ2VU
aHJvdHRsZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4qKQorICAg
IHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7CisgICAgICAgIG1f
ZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgICAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisg
ICAgICAgICAgICBtX2JhY2sgPSAwOworCisJLy8gICAgICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9w
bHVnaW5WaWV3LT5wbHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywg
bWVzc2FnZS0+d1BhcmFtLCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgICAgIGZyZWVNZXNzYWdl
KG1lc3NhZ2UpOworCisgICAgICAgIGlmIChtX2Zyb250KQorICAgICAgICAgICAgbV9tZXNzYWdl
VGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsK
KyAgICB9CisKKyAgICBQbHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKQorICAgIHsKKyAg
ICAgICAgUGx1Z2luTWVzc2FnZSAqbWVzc2FnZTsKKworICAgICAgICBpZiAobV9mcmVlSW5saW5l
TWVzc2FnZXMpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsK
KyAgICAgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAg
ICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBpc0lubGluZU1lc3NhZ2Uo
UGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgeworICAgICAgICByZXR1cm4gbWVzc2FnZSA+
PSAmbV9pbmxpbmVNZXNzYWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051
bUlubGluZU1lc3NhZ2VzIC0gMV07CisgICAgfQorCisgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVn
aW5NZXNzYWdlKiBtZXNzYWdlKSAKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU1lc3NhZ2Uo
bWVzc2FnZSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVNZXNz
YWdlczsKKyAgICAgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICB9CisKKyAgICBQbHVn
aW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2FnZSogbV9iYWNrOworICAg
IFBsdWdpbk1lc3NhZ2UqIG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGlu
ZU1lc3NhZ2VzID0gNDsKKyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5lTWVzc2FnZXNbTnVtSW5s
aW5lTWVzc2FnZXNdOworICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOwor
CisgICAgVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVU
aW1lcjsKK307CisKK3N0YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIXVybC51cmwoKS5zdGFydHNXaXRoKCJqYXZhc2Ny
aXB0OiIsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhpcyBy
ZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VSTDo6ZGVjb2RlX3N0cmlu
Zyh1cmwudXJsKCkubWlkKDExKSk7Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6
OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCitjb25zdCB3Y2hhcl90KiBrV2ViUGx1Z2luVmll
d1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Citjb25zdCB3Y2hhcl90KiBrV2Vi
UGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOworCitzdGF0aWMg
Y29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoV2luZG93czsgVTsg
V2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8y
LjAiOworCitzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQoreworICAgIHN0YXRpYyBi
b29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCkt
PmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93
aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAg
bV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVH
ZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2Ns
aXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93
UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlmIChtX3dpbmRvdyAmJiAobV93
aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkp
IHsKKyAgICAgICAgUmVnaW9uIHJnbjsKKworICAgICAgICAvLyBUbyBwcmV2ZW50IGZsYXNoZXMg
d2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVyaW5nIHRoZSB3aW5kb3cKKyAg
ICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhlIHdpbmRvdyB0byB0aGUgemVy
byByZWN0LgorCisgICAgICAgIC8vIEZJWE1FOiBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRv
IGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyAKKyAgICAgICAgLy8gcmVwYWlu
dCBwcm9ibGVtcyB3aXRoIGF0IGxlYXN0IHRoZSBXTVAgYW5kIEphdmEgcGx1Z2lucy4KKyAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUyMTExODc+IENvbWUgdXAgd2l0aCBhIGJldHRlciB3YXkg
b2YgaGFuZGxpbmcgcGx1Zy1pbiBzY3JvbGxpbmcKKyAgICAgICAgLy8gaXMgdGhlIGJ1ZyB0aGF0
IHRyYWNrcyB0aGUgd29yayBvZiBmaXhpbmcgdGhpcy4KKyAgICAgICAgLy9yZ24gPSA6OkNyZWF0
ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CisgICAgICAgIC8vOjpTZXRXaW5kb3dSZ24obV93aW5kb3cs
IHJnbiwgZmFsc2UpOworCisJLyoKKyAgICAgICAgaWYgKG1fd2luZG93UmVjdCAhPSBvbGRXaW5k
b3dSZWN0KQorICAgICAgICAgICAgOjpNb3ZlV2luZG93KG1fd2luZG93LCBtX3dpbmRvd1JlY3Qu
eCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpLCB0cnVlKTsKKwkqLworCisgICAgICAgIC8vIFJlLWVuYWJsZSBkcmF3aW5nLiAo
VGhpcyBzZXJ2ZXMgdGhlIGRvdWJsZSBwdXJwb3NlIG9mIHVwZGF0aW5nIHRoZSBjbGlwIHJlY3Qg
aWYgaXQgaGFzIGNoYW5nZWQuKQorCS8vcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3Qu
eCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRv
bSgpKTsKKyAgICAgICAgLy86OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCB0cnVlKTsKKyAg
ICAgICAgLy86OlVwZGF0ZVdpbmRvdyhtX3dpbmRvdyk7CisKKwkJR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1Jl
Y3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisJCWlmIChtX3dpZGdldCkgewor
CQkJZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisJCQln
dGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihtX3dpZGdldCksIG1fd2luZG93UmVjdC54
KCksIG1fd2luZG93UmVjdC55KCkpOworCQkJZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgbV93
aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisJCX0KKyAgICB9Cit9
CisKK0ludFJlY3QgUGx1Z2luVmlld0d0azo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAoreworICAg
IC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAgSW50UmVjdCBjbGlwUmVj
dChtX3dpbmRvd1JlY3QpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0
aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4KKyAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCk7CisgICAgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBS
ZWN0Rm9yTGF5ZXIobGF5ZXIsIHRydWUpKTsKKworICAgIHJldHVybiBjbGlwUmVjdDsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJhbWVHZW9tZXRyeSgpKQorICAgICAgICBXaWRn
ZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisKKyAgICBpZiAobV93aWRnZXQgJiYgbV93aWRn
ZXQtPnBhcmVudCkKKwkJaW5pdCgpOworCisJZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRC
SU4obV93aWRnZXQpLCByZWN0LngoKSwgcmVjdC55KCkpOworCWd0a194dGJpbl9yZXNpemUobV93
aWRnZXQsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICB1cGRhdGVXaW5kb3co
KTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKwlXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpOwor
ICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3VzKCkK
K3sKKyAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAvL1NldEZvY3VzKHdpbmRvdyk7
CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2hv
dygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9
IG1fd2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX1NIT1dOQSk7CisKKyAgICBX
aWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoaWRlKCkKK3sKKyAgICBt
X2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQor
ICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIElt
YWdlKiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCisgICAgICAg
IG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVsbFBsdWdp
biIpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRyeSgpLngoKSwgZnJhbWVH
ZW9tZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2Ut
PmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS53aWR0aCgp
IC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNldCA9IChmcmFtZUdlb21l
dHJ5KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVj
dC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1h
Z2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNv
bnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51
bGxQbHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgewor
ICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHBhaW50
TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5lZWQgdG8g
c3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2lu
ZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsK
KworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pT
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorCisgICAg
c2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9p
bnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBF
dmVudDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBwYXNzIGl0IG9uICovCisg
ICAgLyoKKyAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7ICAgIAorCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAgICB9Cisg
ICAgKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
IGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKKy8vZXh0ZXJuIGJv
b2wgaWdub3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAg
IC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAgICBJbnRQb2ludCBwID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KEludFBv
aW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgLyoKKyAgICBucEV2
ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBucEV2ZW50LndQYXJh
bSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFy
YW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91
c2Vtb3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8
IAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93
bigpKQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFt
IHw9IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KSB7Cisg
ICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworCisgICAgICAg
ICAgICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAgIG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9X
TjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0
dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2
ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgKi8KKworICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0
Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRs
ZXIuY3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3Jl
TmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIC8vaWdub3Jl
TmV4dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisg
ICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7
CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVL
ZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAg
V2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRO
UFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
KQorICAgICAgICByZXR1cm47CisKKwlpZiAoIXBhcmVudCgpKQorCQlyZXR1cm47CisKKyAgICBJ
bnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1Rv
V2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAg
bV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0
aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworCisgICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworCisgICAgICAgIGlmICghbV9p
c1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX3dpbmRv
dyk7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXdHdGs6OnN0YXJ0KCkKK3sKKyAgICBpZiAo
bV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChtX3BsdWdp
bik7CisgICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKTsKKworICAgIE5Q
RXJyb3IgbnBFcnI7CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcodGhp
cyk7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
czsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgoTlBNSU1F
VHlwZSltX21pbWVUeXBlLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFtQ291bnQs
IG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7CisgICAgfQorICAgIFBsdWdpblZp
ZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJS
X05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzU3RhcnRlZCA9IHRy
dWU7CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkpIHsKKyAg
ICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgICAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7CisgICAg
ICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0b3AoKQoreworICAgIGlmICghbV9p
c1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0
cmVhbUd0az4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdp
blN0cmVhbUd0az4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAg
ICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9z
dHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisgICAgS0pT
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBEZXN0cm95IHRo
ZSBwbHVnaW4KKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRl
c3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayog
cGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsKK30K
KworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQorewor
ICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3JlYXRl
VVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBzdHIu
dXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RN
YWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3RyLmRh
dGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkK
K3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtp
XSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdldFN0
cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRlKiBl
eGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKKyAgICBVU3RyaW5nIHVz
dHJpbmcgPSByZXN1bHQtPnRvU3RyaW5nKGV4ZWMpOworICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgCisgICAgc3RyaW5nID0gdXN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1
ZXN0KQoreworICAgIEtVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3Qo
KS5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRT
dHJpbmdJZkphdmFTY3JpcHRVUkwocmVxdWVzdFVSTCk7CisKKyAgICBpZiAoanNTdHJpbmcuaXNO
dWxsKCkpIHsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKHJl
cXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKSwgMCwgZmFsc2UsIHRydWUpOworCisgICAgICAgIC8v
IEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVu
IHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZworICAgICAgICBpZiAocmVxdWVzdC0+
c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51
cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC51cmwoKS51dGY4KCksIE5QUkVTX0RPTkUs
IHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxv
d2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgorICAg
IC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCisgICAgQVNTRVJUKHJl
cXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKS5pc0VtcHR5KCkgfHwgbV9wYXJl
bnRGcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5h
bWUoKSkgPT0gbV9wYXJlbnRGcmFtZSk7CisgICAgCisgICAgLy8gRXhlY3V0aW5nIGEgc2NyaXB0
IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVwIGEg
cmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZnJhbWUuCisgICAgUmVmUHRyPEZyYW1lPiBwYXJlbnRG
cmFtZSA9ICBtX3BhcmVudEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fcGFyZW50RnJh
bWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
dHJ1ZSk7CisKKyAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgp
LmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CisKKyAgICAgICAgaWYg
KCFnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCksIHJlc3VsdCwgcmVzdWx0U3Ry
aW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU3RyaW5nIGNzdHIgPSByZXN1
bHRTdHJpbmcudXRmOCgpOworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBzdHJlYW0g
PSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIHBhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmlj
YXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChz
dHJlYW0pOworICAgICAgICBzdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkws
IGNzdHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJl
ZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZt
X3JlcXVlc3RUaW1lcik7CisgICAgQVNTRVJUKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCk7CisKKyAg
ICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbV9yZXF1ZXN0c1swXTsKKyAgICBtX3JlcXVl
c3RzLnJlbW92ZSgwKTsKKyAgICAKKyAgICAvLyBTY2hlZHVsZSBhIG5ldyByZXF1ZXN0IGJlZm9y
ZSBjYWxsaW5nIHBlcmZvcm1SZXF1ZXN0IHNpbmNlIHRoZSBjYWxsIHRvCisgICAgLy8gcGVyZm9y
bVJlcXVlc3QgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZWxldGVkLgorICAgIGlm
IChtX3JlcXVlc3RzLnNpemUoKSA+IDApCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKKworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQorewor
ICAgIG1fcmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpOworICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpsb2FkKGNvbnN0IEZyYW1l
TG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZ5RGF0YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIEtVUkwgdXJsID0gZnJh
bWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBpZiAodXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOworCisgICAgU3Ry
aW5nIHRhcmdldCA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisKKyAgICAvLyBkb24n
dCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9m
IGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBs
b2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBpZiAobV9wYXJl
bnRGcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYKKyAgICAgICAgKHRhcmdldC5pc051bGwo
KSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1l
KSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBTdHJpbmcganNT
dHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwodXJsKTsKKyAgICBpZiAoIWpzU3Ry
aW5nLmlzTnVsbCgpKSB7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFyZW50RnJh
bWUtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5pc0ph
dmFTY3JpcHRFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgorICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAo
dGFyZ2V0LmlzTnVsbCgpICYmIG1fbW9kZSA9PSBOUF9GVUxMKSB7CisgICAgICAgICAgICAvLyBE
b24ndCBhbGxvdyBhIEphdmFTY3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVnLWlu
IHRoYXQgaXMgc2VsZi10YXJnZXR0ZWQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYW4g
Y2F1c2UgdGhlIHVzZXIgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQwMzkp
LgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpIHx8ICF0YXJnZXQuaXNOdWxsKCkpIHsK
KyAgICAgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSAmJiAhdGFyZ2V0LmlzTnVsbCgpICYmIG1f
cGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpIHsKKyAg
ICAgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3Rz
IHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorCisgICAgICAg
IFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBuZXcgUGx1Z2luUmVxdWVzdEd0ayhmcmFtZUxv
YWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgc2NoZWR1
bGVSZXF1ZXN0KHJlcXVlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIFBsdWdpblN0cmVhbUd0
ayogc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBmcmFt
ZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlE
YXRhKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisgICAgICAgIHN0cmVhbS0+
c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK3N0YXRp
YyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVV
UkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSBEZXByZWNhdGVk
U3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAgIC8vIFN0cmlwIHJl
dHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVy
bFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVy
bFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMTm90aWZ5KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAg
IEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVl
c3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1
cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJv
ciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJh
bWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsK
KworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBi
dWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclswXSA9PSAn
XG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUo
Y29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBi
dWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAgICAgIC8v
IFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYgKGJ5dGVz
W2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4g
aSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAy
IENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAgIGlmIChi
eXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBp
ICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBp
OworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgor
ICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVz
W2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8g
U3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgorICAgICAg
ICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5
dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNw
ZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0
dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4gV29yc2Ug
eWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9mIGJvdGgg
KGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAgLy8gdG8g
YmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgorICAgIC8v
IENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5k
IG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5h
dGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGJ5
dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAgICAvLyAo
Q1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAgIC8vIG5l
eHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6
ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYm9vbCBj
YXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hh
ciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2En
ICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBwZXIobmFtZVtpXSk7Cisg
ICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYm
IG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1lW2ld
ID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3Qg
VmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFy
KiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0cmlu
ZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8gTG9v
cCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmlu
ZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMs
IGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAg
aW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1vdmUg
Ynl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBi
eSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9
PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2Fm
ZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAg
bGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQor
ICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVy
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICps
aW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlv
dXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAg
ICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtl
eSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAg
ICAgICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0gbGlu
ZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAg
ICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sb24g
PT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQg
YW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxk
TmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9uIC0gbGluZSkpOwor
ICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29s
b24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgq
Y29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBl
b2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1
ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRW
YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFs
dWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAg
ICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwg
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhl
YWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5kbGVQb3N0KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBi
dWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBi
b29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAg
ICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAg
VmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJp
bmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1ZiwgbGVuKTsKKwor
ICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgICAg
IGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgICAgIC8vIEdldCBmaWxl
IGluZm8KKyAgICAgICAgdm9pZCogYXR0cnM7CisgICAgICAgIGlmICghZ19maWxlX3Rlc3QgKChm
aWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1RfRVhJU1RTIHwg
R19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVf
Tk9UX0ZPVU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRvIGJ1ZmZlcgor
CS8qCisgICAgICAgIHZvaWQqIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFtZS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBGSUxFX1JFQURfREFUQSwgRklMRV9TSEFSRV9S
RUFELCAwLCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxl
SGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOworCisgICAgICAgIGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXpl
TG93KTsKKworICAgICAgICBEV09SRCBieXRlc1JlYWQ7CisgICAgICAgIGludCByZXR2YWwgPSBS
ZWFkRmlsZShmaWxlSGFuZGxlLCBidWZmZXIuZGF0YSgpLCBhdHRycy5uRmlsZVNpemVMb3csICZi
eXRlc1JlYWQsIDApOworCisgICAgICAgIENsb3NlSGFuZGxlKGZpbGVIYW5kbGUpOworCisgICAg
ICAgIGlmIChyZXR2YWwgPT0gMCB8fCBieXRlc1JlYWQgIT0gYXR0cnMubkZpbGVTaXplTG93KQor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCSovCisJcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUo
bGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisK
KyAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3RE
YXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFkZXJzKSB7
CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAgICAgICAg
IHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtM
aW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBv
ZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAgICAgICAg
ICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2Nh
dGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXpl
KCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxp
a2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCisgICAg
ICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3
ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQg
dHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAgICAgICAg
ICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0
aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwg
KGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKCJD
b250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247
CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJG
aWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJv
ZHkoUGFzc1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0RGF0YUxl
bmd0aCkpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisg
ICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVm
LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFuZGxlUG9z
dCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUpOwor
fQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUp
Cit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNp
ZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRs
ZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisK
K05QRXJyb3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9
CisKK2ludDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxl
biwgdm9pZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBw
b3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6ZGVzdHJv
eVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgUGx1Z2lu
U3RyZWFtR3RrKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtR3RrKj4o
c3RyZWFtLT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW1HdGs6Om93
bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJS
X0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitj
b25zdCBjaGFyKiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJr
cyAmIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KQorICAgICAgICByZXR1cm4gTW96
aWxsYVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAg
bV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51
dGY4KCk7CisgICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgcyA9IERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobWVzc2FnZSk7CisKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0
YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZSwgcyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0
azo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3
aXRjaCAodmFyaWFibGUpIHsKKwkgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisJCQkqKHZv
aWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1f
d2lkZ2V0KS0+eHRjbGllbnQueHRkaXNwbGF5KTsKKworCQkJZ19wcmludCgiUmVxdWVzdGVkIGFw
cCBjb250ZXh0XG4iKTsKKwkJCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKwkJfQorCisgICAgICAg
IGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisJCQkqKCh1bnNpZ25lZCBs
b25nICopdmFsdWUpID0gMjsKKyNlbHNlCisJCQkqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0g
MDsKKyNlbmRpZgorCQkJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCQl9CisKKyAgICAgICAgY2Fz
ZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYgUExBVEZPUk0oR1RLKQorCQkJKigodW5z
aWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7CisjZWxzZQorCQkJKigodW5zaWduZWQgbG9uZyAq
KXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisJCQlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisJCX0K
KworICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmpl
Y3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2Jq
ZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBy
ZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2pl
Y3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRP
YmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2Jq
ZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAg
ICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisjaWYgMAorICAgICAgICBjYXNlIE5Q
TlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5T
Y3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1l
KGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1l
bnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRP
YmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3Jp
cHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0
T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAg
ICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2Nh
cGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQq
Pih2YWx1ZSk7CisKKyAgICAgICAgICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9X
KEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93KTsKKworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3Ig
UGx1Z2luVmlld0d0azo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
KQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2lu
ZG93Qm9vbDoKKyAgICAgICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVu
dEJvb2w6CisgICAgICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGlt
ZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9pbnZh
bGlkYXRlVGltZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxpZFJl
Y3RzLnNpemUoKTsgaSsrKQorICAgICAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KG1faW52YWxp
ZFJlY3RzW2ldKTsKKyAgICBtX2ludmFsaWRSZWN0cy5jbGVhcigpOworfQorCisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVj
dCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxl
ZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7
CisgICAgICAgIC8qIEZJWE1FIC0gSW52YWxpZGF0ZSB0aGUgcmVjdGFuZ2xlCisJCSAgIFJFQ1Qg
aW52YWxpZFJlY3Qocik7CisJCSAgIEludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52YWxpZFJl
Y3QsIEZBTFNFKTsKKwkJKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9xdWlya3MgJiBQ
bHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVj
dHMuYXBwZW5kKHIpOworICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2
ZSgpKQorICAgICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAw
MSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChy
KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlZ2lvbihOUFJl
Z2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLyogRklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWdpb24KKyAgICBSRUNUIHI7CisKKyAg
ICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChy
KTsKKyAgICAqLworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sKKyAg
ICAvKiBGSVhNRSAtIEZvcmNlIGEgcmVkcmF3CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAg
ICAgOjpVcGRhdGVXaW5kb3cobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVX
aW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICAqLworfQorCitLSlM6OkJpbmRpbmdzOjpJ
bnN0YW5jZSogUGx1Z2luVmlld0d0azo6YmluZGluZ0luc3RhbmNlKCkKK3sKKyAgICBOUE9iamVj
dCogb2JqZWN0ID0gMDsKKworICAgIGlmICghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOUEVycm9yIG5wRXJy
OworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5z
dGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3QpOworICAgIH0KKwor
ICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUiB8fCAhb2JqZWN0KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIC8vIEZJWE1FIC0gZXJyb3I6IGluY29tcGxldGUgdHlwZSDigJhLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZeKAmSB1c2VkIGluIG5lc3RlZCBuYW1lIHNwZWNpZmllcgorICAgIC8v
IGVycm9yOiBpbmNvbXBsZXRlIHR5cGUg4oCYS0pTOjpCaW5kaW5nczo6SW5zdGFuY2XigJkgdXNl
ZCBpbiBuZXN0ZWQgbmFtZSBzcGVjaWZpZXIKKyAgICAvL1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpS
b290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+Y3JlYXRlUm9vdE9iamVjdCh0aGlzLCBt
X3BhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLT5pbnRlcnByZXRlcigpKTsKKyAgICAvL0tKUzo6
QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpj
cmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6
Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAgIC8vX05QTl9SZWxlYXNl
T2JqZWN0KG9iamVjdCk7CisKKyAgICAvL3JldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gTlVM
TDsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdpblZpZXdHdGsoKQoreworICAgIHN0b3AoKTsK
KworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJpbmdBcnJh
eShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFy
YW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKwlzZXRHdGtXaWRnZXQoTlVMTCk7CisJbV93aW5k
b3cgPSAwOworCWlmIChtX3dpbmRvdykKKwkJWERlc3Ryb3lXaW5kb3coR1RLX1hUQklOKG1fd2lk
Z2V0KS0+eHRkaXNwbGF5LCBtX3dpbmRvdyk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5jbGVhbnVw
U2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3BsdWdpbiAmJiAhKG1f
cXVpcmtzICYgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkKKyAgICAgICAgbV9wbHVnaW4t
PnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1
Z2luU3RyZWFtR3RrKiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhz
dHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAg
ICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlm
IHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBw
bGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdp
blF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50OworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZTsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtU
aHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlczsKKyAgICB9CisKKyAgICAvLyBUaGUgV01QIHBs
dWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5l
dmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUg
cGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1fcGx1Z2luLT5uYW1lKCku
Y29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIldpbmRv
d3MgTWVkaWEiKSkgeworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RT
ZXRXaW5kb3dDYWxsOworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2VzIG5vdCB3b3Jr
IGF0IGFsbCB3aXRoIHRoZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVy
IAorICAgICAgICAvLyBhbmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4KKyAgICAgICAg
bV9xdWlya3MgfD0gUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbTsKKyAgICB9
CisKKyAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQ
X1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNh
bGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAg
IGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdp
blF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBh
IHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBm
dW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5Q
T2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBv
YmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29l
cyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAgbV9xdWlya3Mg
fD0gUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luOworCisgICAgLy8gUHJldmVudCB0aGUgUmVh
bCBwbHVnaW4gZnJvbSBjYWxsaW5nIHRoZSBXaW5kb3cgUHJvYyByZWN1cnNpdmVseSwgY2F1c2lu
ZyB0aGUgc3RhY2sgdG8gb3ZlcmZsb3cuCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBu
LXJlYWxhdWRpby1wbHVnaW4iKQorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRD
YWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIEFTU0VSVChwYXJhbU5hbWVz
LnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHBh
cmFtTmFtZXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHBhcmFtQ291bnQgPSAwOworCisgICAgbV9w
YXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNo
YXIqKSAqIHNpemUpKTsKKyAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKChtX3F1aXJrcyAmIFBsdWdp
blF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBh
cmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFy
YW1OYW1lc1tpXSk7CisgICAgICAgIG1fcGFyYW1WYWx1ZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVV
VEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKKworICAgICAgICBwYXJhbUNvdW50Kys7CisgICAg
fQorCisgICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsKK30KKworUGx1Z2luVmlld0d0azo6
UGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBs
dWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkK
KyAgICA6IG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX3BsdWdpbihwbHVnaW4p
CisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1faXNTdGFydGVkKGZhbHNlKQorICAg
ICwgbV91cmwodXJsKQorICAgICwgbV9iYXNlVVJMKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5j
b21wbGV0ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkpKQorICAgICwg
bV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICwgbV9yZXF1ZXN0
VGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVkKQorICAgICwgbV9p
bnZhbGlkYXRlVGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVUaW1lckZpcmVk
KQorICAgICwgbV9wYXJhbU5hbWVzKDApCisgICAgLCBtX3BhcmFtVmFsdWVzKDApCisgICAgLCBt
X3dpbmRvdygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQor
ICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisg
ICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAg
ICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKKyAgICAsIG1fbG9hZE1hbnVhbGx5
KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCit7CisgICAgaWYgKCFtX3Bs
dWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW47
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKwltX3dpZGdldCA9IGd0a194dGJpbl9uZXcoR1RL
X1dJREdFVChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRv
dywgTlVMTCk7CisJZ3RrX3dpZGdldF9zaG93IChtX3dpZGdldCk7CisKKyAgICBtX2luc3RhbmNl
ID0gJm1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisg
ICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWlt
ZVR5cGUpOworCisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisK
KyAgICBtX21vZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAg
IHJlc2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBp
ZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFs
aXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9
IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IGdfbmV3MChOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0gMDsKKyAgICB3cy0+ZGlz
cGxheSA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKyAgICB3cy0+dmlzdWFsID0g
R1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgd3MtPmRlcHRoID0g
R1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRkZXB0aDsKKyAgICB3cy0+Y29sb3JtYXAg
PSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGNvbG9ybWFwOworCisJWEZsdXNoICh3
cy0+ZGlzcGxheSk7CisKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKKyAgICAKKyAgICBp
ZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0
KS0+eHR3aW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRv
dzsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV93aW5kb3c7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7Cisg
ICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3F1aXJr
cyAmIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQorICAgICAgICBzZXROUFdp
bmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
TG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQo
IW1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtID0gbmV3IFBsdWdpblN0cmVh
bUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZl
RG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCk7CisgICAgbV9tYW51YWxTdHJl
YW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNl
aXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJl
Y2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1f
bWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEo
MCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGaW5pc2hMb2Fk
aW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJl
YW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJl
YW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdp
blZpZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gKKworI2luY2x1ZGUgPGdkay9nZGt4
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0a3dpZGdldC5oPgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VH
dGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIK
KyNpbmNsdWRlICJucGFwaS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtKUyB7CisgICAg
bmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7CisgICAgfQorfQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFt
ZTsKKyAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFzcyBLZXlib2FyZEV2ZW50
OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyR3RrOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7CisgICAg
Y2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW1HdGs7CisgICAg
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIAor
ICAgIGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50c01vemlsbGFV
c2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRv
d0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlID0g
MSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSA9
IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdl
cyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luID0gMSA8PCA1
LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJz
aXZlbHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMgeworICAgICAg
ICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNDYW5O
b3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKKyAg
ICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IElu
dFNpemUmLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOwor
ICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAgICAgUGx1Z2luUGFja2Fn
ZUd0ayogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0KCk7IH0KKyAgICAgICAg
TlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorCisgICAgICAgIHZv
aWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIFBsdWdp
blZpZXdHdGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAgS0pTOjpCaW5kaW5nczo6
SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1cyBzdGF0
dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAgIC8vIE5QTiBmdW5jdGlv
bnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGdldFVSTChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5QRXJyb3IgcG9z
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxl
biwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAg
ICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7CisgICAgICAgIE5QRXJy
b3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVh
bSoqIHN0cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMy
IGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95U3RyZWFtKE5QU3Ry
ZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJB
Z2VudCgpOworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsKKyAgICAg
ICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOwor
ICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1
ZSk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7CisgICAgICAgIHZvaWQg
aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQgZm9yY2VSZWRyYXcoKTsK
KworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3RrKik7CisKKyAg
ICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVH
ZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNo
YW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgZ2xvbmcgd25kUHJvYyhYSUQgaFdu
ZCwgZ3VpbnQgbWVzc2FnZSwgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0pOworCisgICAgICAg
IC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7Cisg
ICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgcHJpdmF0ZToK
KyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAgICAgICB2b2lkIGlu
aXQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKyAgICAg
ICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayopOworICAg
ICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlm
aWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4g
bV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgRnJhbWUqIG1f
cGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAgIEtVUkwgbV91
cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0
dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2
b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCBzY2hl
ZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHJlcXVlc3RUaW1l
ckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVRp
bWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luVmll
d0d0az4gbV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1faW52
YWxpZGF0ZVRpbWVyOworCisgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3Rr
PiBtX21lc3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5kb3coKSBjb25z
dDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsK
KworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50OworICAgICAg
ICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKKwor
ICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7
CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1
Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFzaFNldDxSZWZQ
dHI8UGx1Z2luU3RyZWFtR3RrPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPFBsdWdpblJl
cXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIGludCBtX3F1aXJrczsKKyAgICAgICAg
Ym9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OworICAgICAg
ICBib29sIG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworCisg
ICAgICAgIFhJRCBtX3dpbmRvdzsgLy8gZm9yIHdpbmRvd2VkIHBsdWctaW5zCisgICAgICAgIG11
dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEg
d2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93aW5kb3dSZWN0OyAv
LyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKyAg
ICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisKKyAgICAgICAgYm9vbCBtX2xv
YWRNYW51YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gbV9tYW51YWxTdHJl
YW07CisKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3VycmVudFBsdWdpblZpZXc7
CisKKwlHdGtXaWRnZXQqIG1fd2lkZ2V0OworCURpc3BsYXkqIHhfZGlzcGxheTsKKyAgICB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGku
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpblZp
ZXdHdGsuaCIKKyNpbmNsdWRlICJucGFwaS5oIiAvLyAjaW5jbHVkZXMgPHdpbmRvd3MuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMg
dGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxs
IGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4g
VG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUg
YSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2
aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6OnN0YXJ0Lgor
Ly8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdo
ZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBp
bnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQ
IGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2UtPm5kYXRhKTsK
KyAgICByZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwordm9p
ZCogTlBOX01lbUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7
Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUocHRyKTsKK30K
KwordWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5n
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9h
ZFBhZ2VzKQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBFcnJv
ciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlz
dCkKK3sKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBFcnJvciBOUE5f
R2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Cit9
CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMTm90
aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEp
Cit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkxO
b3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsKK30KKworTlBF
cnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQorewor
ICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwg
dGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAg
aW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoq
IHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBOX1dyaXRlKE5Q
UCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7
CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0cmVh
bSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0
YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVh
c29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7Cisg
ICAgUGx1Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7
CisKKyAgICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFnZW50IHdpdGgg
YSBudWxsIGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24hCisgICAgIC8v
IFdlJ2QgbmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2aW5nIGEgZnJh
bWUgYXJvdW5kLgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsKKyAKKyAgICBy
ZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGlu
c3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChO
UFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOworfQorCit2b2lk
IE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lv
bikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVn
aW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFu
Y2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXco
KTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBO
X1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
KQoreworICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVl
KHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAv
LyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIo
TlBQIGluc3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQKK05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVu
YWJsZWQpCit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3Rh
bmNlKQoreworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyog
LSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz
aWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0y
OiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjog
TVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmls
ZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAx
LjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNv
ZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBM
aWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBYRU1CRUQgRGVjbGFyYXRp
b24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlz
CisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJ
bml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBE
ZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6Cisg
KgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNl
ZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BM
IiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExH
UEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNo
IHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVy
IHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxv
dyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0
aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICog
YW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYg
eW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBt
YXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBh
bnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5E
IExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3NhZ2VzICovCisjZGVmaW5l
IFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfV0lORE9X
X0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFICAg
ICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAgICAgICAgMworI2RlZmlu
ZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NVU19ORVhUICAgICAgICAg
ICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAgICAgICAgIDcKKyNkZWZp
bmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFhFTUJFRF9VTkdS
QUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT04gICAgICAg
ICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAgICAgICAgICAgMTEKKwor
LyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVEX0dUS19HUkFCX0tFWSAg
ICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFCX0tFWSAgICAgICAgICAg
MTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICovCisjZGVmaW5lIFhFTUJF
RF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfRk9DVVNfRklSU1Qg
ICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1QgICAgICAgICAgICAgICAy
CisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUgWEVNQkVEX01BUFBFRCAg
ICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5EZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBMVUdJ
Tl9ERUJVR19IX18KKyNkZWZpbmUgUExVR0lOX0RFQlVHX0hfXworCisjaW5jbHVkZSAibnBhcGku
aCIKKworc3RhdGljIGNoYXIqIGVycm9yU3RyaW5nc1tdID0geworICAgICJObyBlcnJvcnMgb2Nj
dXJyZWQuIiwgLyogTlBFUlJfTk9fRVJST1IgKi8KKyAgICAiRXJyb3Igd2l0aCBubyBzcGVjaWZp
YyBlcnJvciBjb2RlIG9jY3VycmVkLiIsIC8qIE5QRVJSX0dFTkVSSUNfRVJST1IgKi8KKyAgICAi
SW52YWxpZCBpbnN0YW5jZSBwYXNzZWQgdG8gdGhlIHBsdWctaW4uIiwgLyogTlBFUlJfSU5WQUxJ
RF9JTlNUQU5DRV9FUlJPUiAqLworICAgICJGdW5jdGlvbiB0YWJsZSBpbnZhbGlkLiIsIC8qIE5Q
RVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VSUk9SICovCisgICAgIkxvYWRpbmcgb2YgcGx1Zy1pbiBm
YWlsZWQuIiwgLyogTlBFUlJfTU9EVUxFX0xPQURfRkFJTEVEX0VSUk9SICovCisgICAgIk1lbW9y
eSBhbGxvY2F0aW9uIGZhaWxlZC4iLCAvKiBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SICovCisg
ICAgIlBsdWctaW4gbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lO
X0VSUk9SICovCisgICAgIlBsdWctaW4gZGlyZWN0b3J5IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAv
KiBOUEVSUl9JTlZBTElEX1BMVUdJTl9ESVJfRVJST1IgKi8KKyAgICAiVmVyc2lvbnMgb2YgcGx1
Zy1pbiBhbmQgQ29tbXVuaWNhdG9yIGRvIG5vdCBtYXRjaC4iLCAvKiBOUEVSUl9JTkNPTVBBVElC
TEVfVkVSU0lPTl9FUlJPUiAqLworICAgICJQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0lOVkFMSURfUEFSQU0gKi8KKyAgICAiVVJMIG1pc3Npbmcgb3IgaW52YWxpZC4i
LCAvKiBOUEVSUl9JTlZBTElEX1VSTCAqLworICAgICJGaWxlIG1pc3Npbmcgb3IgaW52YWxpZC4i
LCAvKiBOUEVSUl9GSUxFX05PVF9GT1VORCAqLworICAgICJTdHJlYW0gY29udGFpbnMgbm8gZGF0
YS4iLCAvKiBOUEVSUl9OT19EQVRBICovCisgICAgIlNlZWthYmxlIHN0cmVhbSBleHBlY3RlZC4i
LCAvKiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFICovCisgICAgIlVua25vd24gZXJyb3IgY29k
ZSIKK307CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikgaWYgKGVy
ciAhPSBOUEVSUl9OT19FUlJPUikgX1JQVEYyKF9DUlRfV0FSTiwgIiVzOiAlc1xuIiwgX19GVU5D
VElPTl9fLCBlcnJvclN0cmluZ3NbZXJyXSkKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1Io
KSBfUlBURjEoX0NSVF9XQVJOLCAiJXM6IFN0cmVhbSBmYWlsZWQgZHVlIHRvIHByb2JsZW1zIHdp
dGggbmV0d29yaywgZGlzayBJL08sIGxhY2sgb2YgbWVtb3J5LCBvciBvdGhlciBwcm9ibGVtcy5c
biIsIF9fRlVOQ1RJT05fXykKKyNlbHNlCisjZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkg
KCh2b2lkKTApCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikgKCh2b2lkKTApCisjZW5kaWYKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIF9OUEZVTkNUSU9OU19IXworI2RlZmluZSBfTlBG
VU5DVElPTlNfSF8KKworI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2luY2x1ZGUgIm5wYXBpLmgi
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmlu
ZWQoWFBfV0lOKQorI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBl
IChfX3N0ZGNhbGwgKiBfbmFtZSkKKyNlbHNlCisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90
eXBlLCBfbmFtZSkgX3R5cGUgKCogX25hbWUpCisjZW5kaWYKKwordHlwZWRlZiBOUEVycm9yICgq
TlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBj
b25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgq
TlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwg
Y29uc3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVh
ZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwordHlw
ZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1F
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiogc3RyZWFtKTsKK3R5cGVk
ZWYgaW50MzIgKCpOUE5fV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJl
YW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9EZXN0
cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNv
biByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBOX1N0YXR1c1Byb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit0eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5fVXNlckFn
ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fTWVtQWxsb2NQ
cm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIp
KHZvaWQqIHB0cik7Cit0eXBlZGVmIHVpbnQzMiAoKk5QTl9NZW1GbHVzaFByb2NQdHIpKHVpbnQz
MiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0cikoTlBCb29s
IHJlbG9hZFBhZ2VzKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0
ZVJlY3RQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVjdCAqcmVjdCk7Cit0eXBlZGVmIHZvaWQg
KCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gcmVn
aW9uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIpKE5QUCBpbnN0YW5j
ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBj
b25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpO
UE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBj
aGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwor
dHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZv
aWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUEJv
b2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJv
Y1B0cikoTlBQIGluc3RhbmNlKTsKKwordHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50
VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKKwordHlwZWRlZiBOUElkZW50aWZp
ZXIgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIpIChjb25zdCBOUFVURjggKm5hbWUp
OwordHlwZWRlZiB2b2lkICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0cikgKGNvbnN0
IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyICppZGVudGlm
aWVycyk7Cit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0
cikgKGludDMyX3QgaW50aWQpOwordHlwZWRlZiBpbnQzMl90ICgqTlBOX0ludEZyb21JZGVudGlm
aWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKK3R5cGVkZWYgYm9vbCAoKk5Q
Tl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwor
dHlwZWRlZiBOUFVURjggKigqTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50
aWZpZXIgaWRlbnRpZmllcik7CisKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0ZU9iamVj
dFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFDbGFzcyk7Cit0eXBlZGVmIE5QT2JqZWN0KiAoKk5Q
Tl9SZXRhaW5PYmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Cit0eXBlZGVmIHZvaWQgKCpO
UE5fUmVsZWFzZU9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgYm9vbCAo
Kk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVy
IG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5Q
VmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VEZWZhdWx0UHJvY1B0
cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWdu
ZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FdmFs
dWF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUFN0cmluZyAqc2NyaXB0LCBO
UFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQcm9jUHRy
KSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIE5Q
VmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9TZXRQcm9wZXJ0eVByb2NQdHIp
IChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgY29u
c3QgTlBWYXJpYW50ICp2YWx1ZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSGFzUHJvcGVydHlQcm9j
UHRyKSAoTlBQLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwor
dHlwZWRlZiBib29sICgqTlBOX0hhc01ldGhvZFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAq
bnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9SZW1v
dmVQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIg
cHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyKSAo
TlBPYmplY3QgKm9iaiwgY29uc3QgTlBVVEY4ICptZXNzYWdlKTsKK3R5cGVkZWYgYm9vbCAoKk5Q
Tl9FbnVtZXJhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZp
ZXIgKippZGVudGlmaWVyLCB1aW50MzJfdCAqY291bnQpOworCit0eXBlZGVmIE5QRXJyb3IgKCpO
UFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQx
NiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERh
dGEqIHNhdmVkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95UHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFdp
bmRvd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRvdyk7Cit0eXBlZGVmIE5Q
RXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5
cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2KiBzdHlwZSk7Cit0
eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9T
dHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0
IGNoYXIqIGZuYW1lKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVSZWFkeVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSk7Cit0eXBlZGVmIGludDMyICgqTlBQX1dyaXRl
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwg
aW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Cit0eXBlZGVmIHZvaWQgKCpOUFBfUHJpbnRQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQpOwordHlwZWRlZiBpbnQx
NiAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwor
dHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBO
UEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1
ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVl
KTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0sodm9pZCwgTlBQX1NodXRkb3duUHJvY1B0ciko
dm9pZCk7CisKK3R5cGVkZWYgdm9pZCAqKCpOUFBfR2V0SmF2YUNsYXNzUHJvY1B0cikodm9pZCk7
Cit0eXBlZGVmIHZvaWQqICAgSlJJR2xvYmFsUmVmOyAvL25vdCB1c2luZyB0aGlzIHJpZ2h0IG5v
dworCit0eXBlZGVmIHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNzIHsKKyAgICB1aW50MTYgc2l6ZTsK
KyAgICB1aW50MTYgdmVyc2lvbjsKKyAgICAKKyAgICBOUE5fR2V0VVJMUHJvY1B0ciBnZXR1cmw7
CisgICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBvc3R1cmw7CisgICAgTlBOX1JlcXVlc3RSZWFkUHJv
Y1B0ciByZXF1ZXN0cmVhZDsKKyAgICBOUE5fTmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJlYW07Cisg
ICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIg
ZGVzdHJveXN0cmVhbTsKKyAgICBOUE5fU3RhdHVzUHJvY1B0ciBzdGF0dXM7CisgICAgTlBOX1Vz
ZXJBZ2VudFByb2NQdHIgdWFnZW50OworICAgIE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVtYWxsb2M7
CisgICAgTlBOX01lbUZyZWVQcm9jUHRyIG1lbWZyZWU7CisgICAgTlBOX01lbUZsdXNoUHJvY1B0
ciBtZW1mbHVzaDsKKyAgICBOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1Z2luczsK
KyAgICBOUE5fR2V0SmF2YUVudlByb2NQdHIgZ2V0SmF2YUVudjsKKyAgICBOUE5fR2V0SmF2YVBl
ZXJQcm9jUHRyIGdldEphdmFQZWVyOworICAgIE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyIGdldHVy
bG5vdGlmeTsKKyAgICBOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIgcG9zdHVybG5vdGlmeTsKKyAg
ICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QTl9TZXRWYWx1ZVByb2NQdHIg
c2V0dmFsdWU7CisgICAgTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0ciBpbnZhbGlkYXRlcmVjdDsK
KyAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsKKyAgICBO
UE5fRm9yY2VSZWRyYXdQcm9jUHRyIGZvcmNlcmVkcmF3OworICAgIAorICAgIE5QTl9HZXRTdHJp
bmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyOworICAgIE5QTl9HZXRTdHJp
bmdJZGVudGlmaWVyc1Byb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcnM7CisgICAgTlBOX0dldElu
dElkZW50aWZpZXJQcm9jUHRyIGdldGludGlkZW50aWZpZXI7CisgICAgTlBOX0lkZW50aWZpZXJJ
c1N0cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlzc3RyaW5nOworICAgIE5QTl9VVEY4RnJvbUlkZW50
aWZpZXJQcm9jUHRyIHV0Zjhmcm9taWRlbnRpZmllcjsKKyAgICBOUE5fSW50RnJvbUlkZW50aWZp
ZXJQcm9jUHRyIGludGZyb21pZGVudGlmaWVyOworICAgIE5QTl9DcmVhdGVPYmplY3RQcm9jUHRy
IGNyZWF0ZW9iamVjdDsKKyAgICBOUE5fUmV0YWluT2JqZWN0UHJvY1B0ciByZXRhaW5vYmplY3Q7
CisgICAgTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyIHJlbGVhc2VvYmplY3Q7CisgICAgTlBOX0lu
dm9rZVByb2NQdHIgaW52b2tlOworICAgIE5QTl9JbnZva2VEZWZhdWx0UHJvY1B0ciBpbnZva2VE
ZWZhdWx0OworICAgIE5QTl9FdmFsdWF0ZVByb2NQdHIgZXZhbHVhdGU7CisgICAgTlBOX0dldFBy
b3BlcnR5UHJvY1B0ciBnZXRwcm9wZXJ0eTsKKyAgICBOUE5fU2V0UHJvcGVydHlQcm9jUHRyIHNl
dHByb3BlcnR5OworICAgIE5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIgcmVtb3ZlcHJvcGVydHk7
CisgICAgTlBOX0hhc1Byb3BlcnR5UHJvY1B0ciBoYXNwcm9wZXJ0eTsKKyAgICBOUE5fSGFzTWV0
aG9kUHJvY1B0ciBoYXNtZXRob2Q7CisgICAgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRy
IHJlbGVhc2V2YXJpYW50dmFsdWU7CisgICAgTlBOX1NldEV4Y2VwdGlvblByb2NQdHIgc2V0ZXhj
ZXB0aW9uOworICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwdXNocG9wdXBz
ZW5hYmxlZHN0YXRlOworICAgIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHBvcHBv
cHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5fRW51bWVyYXRlUHJvY1B0ciBlbnVtZXJhdGU7Cit9
IE5QTmV0c2NhcGVGdW5jczsKKwordHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3MgeworICAg
IHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIE5QUF9OZXdQcm9jUHRyIG5l
d3A7CisgICAgTlBQX0Rlc3Ryb3lQcm9jUHRyIGRlc3Ryb3k7CisgICAgTlBQX1NldFdpbmRvd1By
b2NQdHIgc2V0d2luZG93OworICAgIE5QUF9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAg
ICBOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUFBfU3RyZWFt
QXNGaWxlUHJvY1B0ciBhc2ZpbGU7CisgICAgTlBQX1dyaXRlUmVhZHlQcm9jUHRyIHdyaXRlcmVh
ZHk7CisgICAgTlBQX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUFBfUHJpbnRQcm9jUHRyIHBy
aW50OworICAgIE5QUF9IYW5kbGVFdmVudFByb2NQdHIgZXZlbnQ7CisgICAgTlBQX1VSTE5vdGlm
eVByb2NQdHIgdXJsbm90aWZ5OworICAgIEpSSUdsb2JhbFJlZiBqYXZhQ2xhc3M7CisgICAgTlBQ
X0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKKyAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldHZh
bHVlOworfSBOUFBsdWdpbkZ1bmNzOworCit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJy
b3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNz
Kik7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRNSU1FRGVz
Y3JpcHRpb25GdW5jUHRyKSh2b2lkKTsKKworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQordHlwZWRl
ZiB2b2lkICAgICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2
b2lkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBO
UFBsdWdpbkZ1bmNzKiwgTlBQX1NodXRkb3duUHJvY1B0ciopOworI2VuZGlmCisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0
ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJp
bi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MzkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDog
MjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpl
eHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJ
Q0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQor
ICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemls
bGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8v
d3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRo
ZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMg
YW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNy
b3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxv
cGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5h
dGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0
ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGlj
YWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9m
IGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwor
ICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN
UEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25z
IGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJv
dmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRl
bGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhl
IE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9D
SyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRnZXQgYWxsb3dzIGZvciBYdCB0
b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RLIGFwcGxpY2F0aW9uLiAgCisg
Ki8KKworI2luY2x1ZGUgInhlbWJlZC5oIgorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1
ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVkZSA8Z3RrL2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRl
IDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNp
bmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFhs
aWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRp
bC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4K
KyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisvKiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ug
d2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2lkZ2V0CisgICBjcmVhdGlvbiBhbmQg
ZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJVR19YVEJJTgorCisjZGVmaW5lIFhUQklOX01BWF9F
VkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fY2xhc3NfaW5pdCAo
R3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5f
aW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAqeHRiaW4pOworc3RhdGljIHZvaWQgICAgICAgICAg
ICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMg
dm9pZCAgICAgICAgICAgIGd0a194dGJpbl91bnJlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3
aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fZGVzdHJveSAgICAoR3Rr
T2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9z
aHV0ZG93biAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKKworLyogWHQgYXdhcmUgWEVtYmVk
ICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0
Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAq
eHR2aXN1YWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3Jt
YXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENs
aWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVu
dCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRD
bGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAg
KFdpZGdldCB4dHBsdWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRf
aGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9j
bGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2
ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIg
ICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFh0UG9pbnRlciB1c2VyX2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9p
ZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9k
YXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdp
ZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSk7IAorc3RhdGljIHZvaWQgICAgICAg
eHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsK
K3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldGFpbCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGExLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUpOyAgCitzdGF0aWMgaW50ICAg
ICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChEaXNwbGF5ICpkaXNwbGF5LCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFcnJvckV2ZW50ICplcnJvcik7CisvKiBGb3Ig
ZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZv
aWQpOworc3RhdGljIGludCAgICAgICAgdW50cmFwX2Vycm9yKHZvaWQpOworc3RhdGljIGludCAg
ICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikgKERpc3BsYXkgKiwgWEVycm9yRXZlbnQgKik7Citz
dGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vycm9yX2NvZGUgPSAwOworCitzdGF0aWMgR3RrV2lk
Z2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyBEaXNwbGF5ICAgICAgICAg
Knh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMgU3RyaW5nICAgICAgICAgICpmYWxsYmFjayA9IE5V
TEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOwor
c3RhdGljIGdpbnQgICAgICAgICAgICAgbnVtX3dpZGdldHMgPSAwOworCitzdGF0aWMgR1BvbGxG
RCAgICAgICAgICB4dF9ldmVudF9wb2xsX2ZkOworc3RhdGljIGdpbnQgICAgICAgICAgICAgeHRf
cG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0aWMgZ3VpbnQgICAgICAgICAgICB0YWcgPSAwOwor
CitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3ByZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0
YSwKKyAgICAgICAgICAgICAgICAgICBnaW50ICAgICAqdGltZW91dCkKK3sgICAKKyAgaW50IG1h
c2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIoKTsKKyAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxh
eSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7CisKKyAgcmV0dXJuIChnYm9vbGVhbiltYXNrOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2NoZWNrIChHU291cmNlKiAgc291cmNlX2Rh
dGEpCit7CisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIGlmICh4dF9ldmVudF9wb2xsX2Zk
LnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAgaW50IG1hc2s7CisgICAgbWFzayA9IFhQZW5kaW5n
KHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgICAgcmV0dXJuIChnYm9v
bGVhbiltYXNrOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgIHJldHVybiBGQUxT
RTsKK30gICAKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9kaXNwYXRjaCAoR1NvdXJjZSog
IHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICBHU291cmNlRnVuYyBjYWxsX2JhY2ss
CisgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICB1c2VyX2RhdGEpCit7CisgIFhFdmVudCBl
dmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgaSA9IDA7CisKKyAgYWMgPSBYdERpc3Bs
YXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRpc3BsYXkpOworCisgIEdES19USFJFQURTX0VOVEVS
ICgpOworCisgIC8qIFByb2Nlc3Mgb25seSByZWFsIFggdHJhZmZpYyBoZXJlLiAgV2Ugb25seSBs
b29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBwaXBlLCBsaW1pdCBpdCB0byBYVEJJTl9NQVhfRVZF
TlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRBcHBQcm9jZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxs
IGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUncyBubworICAgKiB0aW1lciBwcm9jZXNzaW5nIGhl
cmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGltZXIgY2FsbGJhY2sgdGhhdAorICAgKiBkb2Vz
IGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBYVEJJTl9NQVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0
ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNWEV2ZW50KTsK
KyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOworCisgIHJldHVybiBUUlVFOyAgCit9CisK
K3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZlbnRfZnVuY3MgPSB7CisgIHh0X2V2ZW50X3ByZXBh
cmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4dF9ldmVudF9kaXNwYXRjaCwKKyAgZ19mcmVlLAor
ICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdTb3VyY2VEdW1teU1hcnNoYWwpTlVMTAorfTsKKwor
c3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNrKGdwb2ludGVy
IHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAqIGRpc3BsYXk7CisgIFh0QXBwQ29udGV4dCBhYzsK
KyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIwOworCisgIGRpc3BsYXkgPSAoRGlzcGxheSAqKXVz
ZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dChkaXNwbGF5KTsK
KworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3MgbWFueSBYdCBldmVudHMgaGVyZS4gSWYgd2UganVz
dCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3ZSBtaWdodCBzdGFydmUgb25lIG9yIG1vcmUgWHQg
Y29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFuZAorICAgICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdo
b2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBwb3VyaW5nIGluLiBTbyBwcm9jZXNzCisgICAgIHVw
IHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cgYW5kIHNhdmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBU
aGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0IG91Z2h0YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91
bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVnaW5zLgorICAqLworICB3aGlsZSAoZXZlbnRzVG9Q
cm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFjKSkKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywg
WHRJTUFsbCk7CisgIHJldHVybiBUUlVFOworfQorCitHdGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5
cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtUeXBlIHh0YmluX3R5cGUgPSAwOworCisgIGlmICgh
eHRiaW5fdHlwZSkgeworICAgICAgc3RhdGljIGNvbnN0IEd0a1R5cGVJbmZvIHh0YmluX2luZm8g
PQorICAgICAgeworICAgICAgICAiR3RrWHRCaW4iLAorICAgICAgICBzaXplb2YgKEd0a1h0Qmlu
KSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNzKSwKKyAgICAgICAgKEd0a0NsYXNzSW5p
dEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0LAorICAgICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMp
IGd0a194dGJpbl9pbml0LAorICAgICAgICAvKiByZXNlcnZlZF8xICovIE5VTEwsCisgICAgICAg
IC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwK
KyAgICAgIH07CisgICAgICB4dGJpbl90eXBlID0gZ3RrX3R5cGVfdW5pcXVlIChHVEtfVFlQRV9T
T0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9CisgIHJldHVybiB4dGJpbl90eXBlOworfQorCitz
dGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKQor
eworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNzOworICBHdGtPYmplY3RDbGFzcyAqb2Jq
ZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFzcyA9IGd0a190eXBlX2NsYXNzIChHVEtfVFlQRV9T
T0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9IEdUS19XSURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAg
d2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3RrX3h0YmluX3JlYWxpemU7CisgIHdpZGdldF9jbGFz
cy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3VucmVhbGl6ZTsKKworICBvYmplY3RfY2xhc3MgPSBH
VEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIG9iamVjdF9jbGFzcy0+ZGVzdHJveSA9IGd0a194
dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2luaXQgKEd0a1h0Qmlu
ICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlzcGxheSA9IE5VTEw7CisgIHh0YmluLT5wYXJlbnRf
d2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0d2luZG93ID0gMDsKKyAgeHRiaW4tPnggPSAwOwor
ICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fcmVhbGl6ZSAoR3Rr
V2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0QmluICAgICAqeHRiaW47CisgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAwLCAyMDAgfTsKKyAgZ2ludCAgeCwgeSwgdywgaCwg
ZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICovCisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmlu
dGYoImd0a194dGJpbl9yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFp
bCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0
KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBiZWZvcmUgcmVhbGl6ZSAqLworICBn
ZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJpbi0+cGFyZW50X3dpbmRvdywgJngsICZ5LCAmdywg
JmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHc7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0g
aDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKKwor
I2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVk
ICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRpZgorCisgIHh0YmluLT53aWR0aCA9IHdpZGdldC0+
YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4tPmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5o
ZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tldCdzIHJlYWxpemUgKi8KKyAgKCpHVEtfV0lER0VU
X0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxpemUpKHdpZGdldCk7CisKKyAgLyogY3JlYXRlIHRo
ZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0X2NsaWVudF9jcmVhdGUoJih4dGJpbi0+eHRjbGll
bnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHh0YmluKSksIAorICAg
ICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAgIHh0YmluLT53aWR0aCk7CisgIHh0YmluLT54dHdp
bmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNsaWVudC5jaGlsZF93aWRnZXQpOworCisgIGdka19m
bHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdlIGhhdmUgY3JlYXRlZCB0aGUgeHQgY2xpZW50LCBh
ZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAgZ3RrX3NvY2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3
aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOworfQorCisKKworR3RrV2lkZ2V0KgorZ3RrX3h0Ymlu
X25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKiBmKQoreworICBHdGtYdEJp
biAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKworICBhc3NlcnQocGFyZW50X3dpbmRv
dyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtfdHlwZV9uZXcgKEdUS19UWVBFX1hUQklOKTsKKwor
ICBpZiAoIXh0YmluKQorICAgIHJldHVybiAoR3RrV2lkZ2V0KilOVUxMOworCisgIGlmIChmKQor
ICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCisg
IHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFyZW50X3dpbmRvdzsKKworICB4dF9jbGllbnRfaW5p
dCgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKGdka19yZ2Jf
Z2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRf
Y29sb3JtYXAoKSksCisgICAgICBnZGtfcmdiX2dldF92aXN1YWwoKS0+ZGVwdGgpOworCisgIGlm
ICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxheSkgeworICAgIC8qIElmIFh0T3BlbkRpc3BsYXkg
ZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVydGhlci4KKyAgICAgKiAgQmFpbCBvdXQuCisgICAg
ICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoImd0a194dGJpbl9pbml0OiBYdE9w
ZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5cbiIpOworI2VuZGlmCisgICAgZ19mcmVlICh4dGJp
bik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQgKilOVUxMOworICB9CisKKyAgLyogSWYgdGhpcyBp
cyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQsIGhvb2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCisg
ICAgIG1haW5sb29wICovCisgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisgICAgaW50ICAgICAg
ICAgICBjbnVtYmVyOworICAgIC8qCisgICAgICogaG9vayBYdCBldmVudCBsb29wIGludG8gdGhl
IGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8KKworICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRo
YXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKyAgICBHU291cmNlKiBncyA9
IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVuY3MsIHNpemVvZihHU291cmNlKSk7CisgICAgICBp
ZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgCisgICAgZ19zb3Vy
Y2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKKyAgICBnX3NvdXJjZV9z
ZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOworICAgIHRhZyA9IGdfc291cmNlX2F0dGFjaChncywg
KEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZkZWYgVk1TCisgICAgY251bWJlciA9IFhDb25uZWN0
aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxzZQorICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVt
YmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJl
cjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2ZW50cyA9IEdfSU9fSU47IAorICAgIHh0X2V2ZW50
X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8qIGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCisK
KyAgICBnX21haW5fY29udGV4dF9hZGRfcG9sbCAoKEdNYWluQ29udGV4dCopTlVMTCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZ4dF9ldmVudF9wb2xsX2ZkLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9MT1cpOworICAgIC8qIGFkZCBhIHRpbWVyIHNv
IHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nlc3MgWHQgdGltZXJzICovCisgICAgeHRfcG9sbGlu
Z190aW1lcl9pZCA9CisgICAgICBndGtfdGltZW91dF9hZGQoMjUsCisgICAgICAgICAgICAgICAg
ICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ssCisgICAg
ICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5KTsKKyAgfQorCisgIC8qIEJ1bXAgdXAgb3VyIHVz
YWdlIGNvdW50ICovCisgIG51bV93aWRnZXRzKys7CisKKyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5
ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5OworICBn
dGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KEdUS19XSURHRVQoeHRiaW4pLCBwYXJlbnRfd2lu
ZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhKHh0YmluLT5wYXJlbnRfd2luZG93LCAm
dXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0YSkKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19XSURHRVQoeHRiaW4pKTsKKworICByZXR1cm4gR1RL
X1dJREdFVCAoeHRiaW4pOworfQorCit2b2lkCitndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtY
dEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpCit7CisgIHh0YmluLT54ID0geDsKKyAg
eHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh4dGJpbikpCisgICAg
Z2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VUICh4dGJpbiktPndpbmRvdywgeCwgeSk7Cit9CisK
K3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVp
Z2h0KQoreworICBBcmcgYXJnc1syXTsKKyAgR3RrWHRCaW4gKnh0YmluID0gR1RLX1hUQklOICh3
aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisKKyNpZmRlZiBERUJVR19YVEJJ
TgorICBwcmludGYoImd0a194dGJpbl9yZXNpemUgJXAgJWQgJWRcbiIsICh2b2lkICopd2lkZ2V0
LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisgIHh0YmluLT5oZWlnaHQgPSBoZWlnaHQ7Cisg
IHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKworICAvLyBBdm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4g
WHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9MCkgeworICAgIGhlaWdo
dCA9IDE7CisgICAgd2lkdGggPSAxOworICB9CisgIFh0U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdo
dCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJnc1sxXSwgWHROd2lkdGgsICB3aWR0aCk7CisgIFh0
U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50b3Bfd2lkZ2V0LCBhcmdzLCAyKTsKKworICAvKiB3
ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9jYXRlIHNvIHRoZSBzb2NrZXQga25vd3MgYWJvdXQg
dGhlCisgICAgIHNpemUgY2hhbmdlcyAqLworICBhbGxvY2F0aW9uLnggPSB4dGJpbi0+eDsKKyAg
YWxsb2NhdGlvbi55ID0geHRiaW4tPnk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB4dGJpbi0+d2lk
dGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0geHRiaW4tPmhlaWdodDsKKworICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitn
dGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRnZXQgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0
YmluOworICBHdGtXaWRnZXQgKndpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50
ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIC8qIGd0a19vYmplY3Rf
ZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmY291bnQgb24gb2JqZWN0CisgICAqLwor
ICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3QpOworICB3aWRnZXQgPSBHVEtfV0lER0VUKG9iamVj
dCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9GTEFHUyAod2lkZ2V0LCBHVEtfVklTSUJMRSk7Cisg
IGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3aWRnZXQpKSB7CisgICAgeHRfY2xpZW50X3VucmVh
bGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOworICB9CisKKyAgKCpHVEtfV0lER0VUX0NMQVNTIChw
YXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdpZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkCitndGtf
eHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpvYmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsK
KworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7
CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0
dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAob2JqZWN0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRC
SU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4tPnh0d2luZG93KSB7CisgICAgLyogcmVtb3ZlIHRo
ZSBldmVudCBoYW5kbGVyICovCisgICAgeHRfY2xpZW50X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGll
bnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cgPSAwOworCisgICAgbnVtX3dpZGdldHMtLTsgLyog
cmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLworCisgICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBy
dW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBYdCBkaXNwbGF5CisgICAgICAgY29ubmVjdGlvbiBm
cm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigicmVtb3ZpbmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJv
bSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRpZgorICAgICAgZ19tYWluX2NvbnRleHRfcmVtb3Zl
X3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwgJnh0X2V2ZW50X3BvbGxfZmQpOworICAgICAgZ19z
b3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAgIGd0a190aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5n
X3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworICAgIH0KKyAgfQor
CisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGVzdHJveShvYmplY3QpOworfQor
CisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBm
b3IgY2xpZW50IHNpZGUKKyovCisKKy8qIEluaXRpYWwgWHQgcGx1Z2luICovCitzdGF0aWMgdm9p
ZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAg
IFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAs
CisgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpCit7CisgIFh0QXBwQ29udGV4dCAgYXBwX2Nv
bnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFyZ3ZbMV07CisgIGludCAgICAgICAgICAgbUFyZ2Mg
PSAwOworCisgIC8qCisgICAqIEluaXRpYWxpemUgWHQgc3R1ZmYKKyAgICovCisgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7Cisg
IHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBO
VUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IDA7CisgIHh0Y2xpZW50LT54dGRlcHRoID0g
MDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxpemVkKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0dWZmXG4iKTsKKyNlbmRpZgorICAgIFh0VG9vbGtp
dEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29udGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250
ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQorICAgICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNl
cyhhcHBfY29udGV4dCwgZmFsbGJhY2spOworCisgICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxh
eShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNwbGF5KCksIE5VTEwsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVMTCwgMCwgJm1BcmdjLCBtQXJndik7CisgICAgaWYg
KHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gVFJVRTsKKyAgfQorICB4dGNs
aWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxheTsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4
dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSB4dGNvbG9ybWFwOworICB4dGNsaWVu
dC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9CisKKy8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdp
ZGdldHMKKyogICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4
dGNsaWVudCAsIAorICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAKKyAgICAg
ICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgg
KSAKK3sKKyAgaW50ICAgICAgICAgICBuOworICBBcmcgICAgICAgICAgIGFyZ3NbNl07CisgIFdp
ZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0OworICBXaWRnZXQgICAgICAgIHRvcF93aWRnZXQ7CisK
KyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoInh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOwor
I2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFwcENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJX
cmFwcGVyIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hl
bGxXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50
LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsK
KyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0b3Bfd2lkZ2V0OworCisgIC8qIHNldCBzaXplIG9m
IFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAg
IGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24r
KzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdldCwgYXJncywgbik7CisKKyAgY2hpbGRfd2lkZ2V0
ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsKKworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tu
XSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0
aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xp
ZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4
dGNsaWVudC0+eHRkZXB0aCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFw
LCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJv
cmRlcldpZHRoLCAwKTsgbisrOworICBYdFNldFZhbHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4p
OworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKKyAgeHRjbGllbnQtPm9s
ZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUud2luZG93OworICB0b3Bfd2lkZ2V0LT5jb3JlLndp
bmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyogdGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmlu
aXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0ICovCisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxl
YXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAg
ICAgICAgICAgICAgICAgICAgZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93
aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0ZXJXaW5kb3coIGVtYmVkZGVyaWQsCisgICAgICAg
ICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbmRpZgorICBYdFJlYWxpemVXaWRnZXQoY2hp
bGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4gdG8gYWxsIFh0IGV2ZW50cyAqLworICBYU2VsZWN0
SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bf
d2lkZ2V0KSwgCisgICAgICAgICAgICAgICAweDBGRkZGRik7CisgIHh0X2NsaWVudF9zZXRfaW5m
byAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBYdE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7Cisg
IHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBjaGlsZF93aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBl
dmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwKKyAgICAg
ICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+UmVzaXplUmVkaXJlY3RNYXNrLAorICAgICAgICAg
ICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0
X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNo
aWxkX3dpZGdldCwgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sg
fCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAg
ICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAK
KyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICBYU3luYyh4dGNsaWVudC0+eHRkaXNw
bGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfdW5yZWFsaXplICggWHRD
bGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgor
ICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5LAorICAgICAgICAgICAg
ICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cpOworI2Vsc2UKKyAg
X1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCisg
ICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQpOworI2VuZGlmCisKKyAg
LyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQt
PmNvcmUud2luZG93CisgICAgIG9yIHdlIGNhbiBnZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93
IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRmFsc2UpOworCisgIHh0
Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7Cisg
IFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKK30KKworc3RhdGljIHZv
aWQgICAgICAgICAgICAKK3h0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkK
K3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRnZXQpIHsKKyAgICBYdFJlbW92ZUV2ZW50SGFuZGxl
cih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAweDBGRkZGRiwgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNs
aWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4
dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQgICAgICAg
ICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lkZ2V0IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFn
cykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZmZXJbMl07CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJ
bnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcpLCAiX1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKKwor
ICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCisg
IGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhDaGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1
ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAgICAgICAgICAgICAgICAgaW5mb0F0b20sIGluZm9B
dG9tLCAzMiwKKyAgICAgICAgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsCisgICAgICAgICAg
ICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDIpOworfQorCitzdGF0aWMgdm9pZAor
eHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50
KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChldmVudC0+eGNsaWVudC5kYXRhLmxbMV0pCisgIHsK
KyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9USUZZOgorICAgIGJyZWFrOworICBjYXNlIFhFTUJF
RF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNs
aWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsK
KyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFXG4iKTsKKyNl
bmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PTjoKKyNpZmRlZiBERUJV
R19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT05cbiIp
OworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09GRjoKKyNpZmRl
ZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlf
T0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9GT0NVU19JTjoKKyAg
Y2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAgIHsKKyAgICAgIFhFdmVudCB4ZXZlbnQ7CisgICAg
ICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhldmVudCkpOworCisgICAgICBpZihldmVudC0+
eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VTX0lOKSB7CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBpblxuIik7CisjZW5kaWYKKyAg
ICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJbjsKKyAgICAgIH0KKyAgICAgIGVsc2Ug
eworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMg
b3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c091dDsK
KyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWct
PmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZlbnQueGZvY3VzLmRpc3BsYXkgPSBYdERpc3BsYXko
eHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgWFNlbmRFdmVudChYdERpc3BsYXkoeHRwbHVn
LT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3cs
CisgICAgICAgICAgICAgICAgIEZhbHNlLCBOb0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAg
JnhldmVudCApOworICAgICAgWFN5bmMoIFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCks
IEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0g
LyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICovCit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4
dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwg
WEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50
X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ2xpZW50
TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4ZW1iZWQgbWVzc2FnZSAqLworICAgICAgaWYgKGV2
ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09CisgICAgICAgICAgICAgICAgIFhJbnRlcm5BdG9t
IChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsKKyAgICAgICAgeHRfY2xpZW50X2hhbmRsZV94
ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0YSwgZXZlbnQpOworICAgICAgfQorICAgICAgYnJl
YWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTWFw
cGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgWEVNQkVEX01BUFBFRCk7
CisgICAgICBicmVhazsKKyAgICBjYXNlIFVubWFwTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3Nl
dF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgIHNl
bmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5IFByZXNzIEdvdCFcbiIpOworI2VuZGlmCisgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dp
dGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAorc2VuZF94ZW1iZWRfbWVzc2Fn
ZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBt
ZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRldGFpbCwgCisgICAgICAg
ICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTEsICAKKyAgICAgICAgICAgICAgICAgICAgIGxv
bmcgICAgICBkYXRhMiwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIHRpbWUpICAg
Cit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBXaW5kb3cgdz1YdFdpbmRvdyh4dGNsaWVudC0+dG9w
X3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14dGNsaWVudC0+eHRkaXNwbGF5OworICBpbnQgZXJy
b3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50LDAsc2l6ZW9mKHhldmVudCkpOworICB4ZXZlbnQu
eGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZlbnQueGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2Fn
ZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2FnZV90eXBlID0gWEludGVybkF0b20oZHB5LCJfWEVN
QkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xpZW50LmZvcm1hdCA9IDMyOworICB4ZXZlbnQueGNs
aWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzFdID0gbWVz
c2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOyAKKyAgeGV2ZW50Lnhj
bGllbnQuZGF0YS5sWzNdID0gZGF0YTE7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFs0XSA9IGRh
dGEyOworCisgIHRyYXBfZXJyb3JzICgpOworICBYU2VuZEV2ZW50IChkcHksIHcsIEZhbHNlLCBO
b0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhTeW5jIChkcHksRmFsc2UpOworCisgIGlmKChlcnJv
cmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkhISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRp
ZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgCitlcnJvcl9oYW5kbGVyKERpc3Bs
YXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICplcnJvcikKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2Rl
ID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAgICAg
ICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9MDsKKyAg
b2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKGVycm9yX2hhbmRsZXIpOworfQor
CitzdGF0aWMgaW50ICAgICAgICAgCit1bnRyYXBfZXJyb3Iodm9pZCkKK3sKKyAgWFNldEVycm9y
SGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7CisgIGlmKHRyYXBwZWRfZXJyb3JfY29kZSkgewor
I2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJHZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxu
IiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNlbmRpZgorICB9CisgIHJldHVybiB0cmFwcGVkX2Vy
cm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZm9jdXNfbGlz
dGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhLCBYRXZlbnQgKmV2ZW50KQorewor
ICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodyk7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVz
ZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0V2luZG93KHcpOworCisgIHN3aXRjaChldmVudC0+
dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVhdGVOb3RpZnk6CisgICAgICBpZihldmVudC0+eGNy
ZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRv
d1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGlm
IChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZShjaGlsZCwgdXNl
cl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgRGVzdHJveU5vdGlmeToK
KyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdywgdXNlcl9kYXRhKTsKKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBpZihldmVudC0+eHJlcGFyZW50
LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IHBhcmVudCAqLworICAg
ICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldChkcHksIGV2ZW50LT54cmVwYXJlbnQu
d2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0
ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXZl
bnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBj
aGlsZCAqLworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG9sZCBw
YXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dG9uUmVsZWFzZToK
KyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1cyhkcHksIFh0V2luZG93KHh0Y2xpZW50LT5jaGls
ZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwgZXZlbnQtPnhidXR0b24udGltZSk7CisjZW5kaWYK
KyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2
ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBX
aWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0
cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsK
KyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWEdldFdpbmRvd0F0dHJp
YnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRvdyh3KSwgJmF0dHIpOworICBldmVudG1hc2sgPSBh
dHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxl
YXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0RGlzcGxheSh3KSwKKyAgICAgICAgICAgICAgIFh0
V2luZG93KHcpLCAKKyAgICAgICAgICAgICAgIGV2ZW50bWFzayk7CisKKyAgWHRBZGRFdmVudEhh
bmRsZXIodywgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBC
dXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAg
ICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAg
ICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3Rh
dGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRS
ZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVh
c2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRf
Y2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEpOworCisgIHVudHJhcF9lcnJvcigpOwor
fQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJl
ZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpIAoreworICBXaW5kb3cgd2luID0gWHRXaW5kb3co
dHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxkcmVuOworICBXaW5kb3cgcm9vdCwgcGFyZW50Owor
ICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodHJlZXJvb3QpOworICB1bnNpZ25lZCBpbnQgaSwg
bmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8K
KyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRf
YWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMo
KTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4sICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4s
ICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFwX2Vycm9yKCk7CisgICAgcmV0dXJuOworICB9CisK
KyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAgIHJldHVybjsKKworICBmb3IoaT0wOyBpPG5jaGls
ZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNoaWxkID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNo
aWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQpIAorICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVy
X3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICB9CisgIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7
CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2Fn
ZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisj
aW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNs
dWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZUd0azo6flBsdWdpblBhY2thZ2VHdGsoKQor
eworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGs6OlBsdWdp
blBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGUoMCkKKyAgICAsIG1fbGFzdE1v
ZGlmaWVkKGxhc3RNb2RpZmllZCkKKyAgICAsIG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xv
YWRDb3VudCgwKQoreworICAgIGludCBwb3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0cmluZygpLmZp
bmRSZXYoJy8nKTsKKworICAgIG1fZmlsZU5hbWUgPSBtX3BhdGgucmlnaHQobV9wYXRoLmxlbmd0
aCgpIC0gcG9zIC0gMSk7CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpmZXRjaEluZm8o
KQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25z
dCBnY2hhciogdHlwZXMgPSBtX05QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiog
bWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9
IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykgeworICAgICAgZ2NoYXIq
KiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIsIDMpOworCisgICAgICBT
dHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVEYXRhWzJdKTsKKyAgICAg
IGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOwor
CisgICAgICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7CisgICAgICBmb3IgKGludCBqID0gMDsg
ZXh0ZW5zaW9uc1tqXTsgaisrKQorCWV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChl
eHRlbnNpb25zW2pdKSk7CisKKyAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFb
MF0sIGV4dFZlY3Rvcik7CisgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZURhdGFb
MF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAgICAg
IGdfc3RyZnJlZXYobWltZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7
CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNr
YWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRD
b3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGdf
bW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NBTCk7
CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2Fk
ZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAg
ICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5p
dGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUpOworICAgIGdfbW9kdWxlX3N5bWJvbCht
X21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIsICh2b2lkKiopJm1fTlBfR2V0TUlNRURl
c2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIs
ICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAh
bV9OUF9HZXRNSU1FRGVzY3JpcHRpb24gfHwgIW1fTlBQX1NodXRkb3duKQorICAgICAgZ290byBh
Ym9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisK
KyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAg
bV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0g
TlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVz
dFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5k
ZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Muc3Rh
dHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFn
ZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOworICAgIG1f
YnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5t
ZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5z
ID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0g
TlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBO
X1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFs
dWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9i
cm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9i
cm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAg
IG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJv
d3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNo
cG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9i
cm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRT
dGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1Jl
bGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmll
ciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJp
bmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsK
KyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRl
bnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9i
amVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVj
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0
OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2Vy
RnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHBy
b3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0
eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkg
PSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0g
X05QTl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQ
cm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2Vw
dGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKwor
ICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNz
KTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7
CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1
bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1
Z2luUGFja2FnZUd0azo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9OUFBfU2h1dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOwor
fQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7Cisg
ICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2Fk
Q291bnQgPT0gMCk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAgIGdfbW9kdWxlX2Nsb3Nl
IChtX21vZHVsZSk7CisKKyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBhY2th
Z2VHdGsqIFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBw
YWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VHdGsocGF0aCwgbGFzdE1vZGlmaWVkKTsKKworICAg
IGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVsZXRlIHBhY2thZ2U7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGFja2FnZTsKK30KKwor
dW5zaWduZWQgUGx1Z2luUGFja2FnZUd0azo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVk
IGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAgICAg
ICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0
ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5z
aWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6ZXF1
YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYikK
K3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblN0cmVhbUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorCisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5o
PgorCisvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtlIHRvIHJldHVy
biAtMSB0byBpbmRpY2F0ZSBlcnJvcgorLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0IGNsYXNoIHdp
dGggdGhlbS4KK3N0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOworCit1c2luZyBz
dGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOworc3RhdGljIFN0cmVhbU1hcCYg
c3RyZWFtcygpCit7CisgICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1zOworICAgIHJl
dHVybiBzdGF0aWNTdHJlYW1zOworfQorCitQbHVnaW5TdHJlYW1HdGs6OlBsdWdpblN0cmVhbUd0
ayhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCisgICAg
LCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgLCBt
X25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90
aWZpY2F0aW9uKQorICAgICwgbV9sb2FkTWFudWFsbHkoZmFsc2UpCisgICAgLCBtX3N0cmVhbVN0
YXRlKFN0cmVhbUJlZm9yZVN0YXJ0ZWQpCisgICAgLCBtX2RlbGF5RGVsaXZlcnlUaW1lcih0aGlz
LCAmUGx1Z2luU3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCkKKyAgICAsIG1fZGVs
aXZlcnlEYXRhKDApCisgICAgLCBtX3RlbXBGaWxlSGFuZGxlKDApCisgICAgLCBtX3BsdWdpbkZ1
bmNzKHBsdWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5GdW5jcygpKQorICAgICwgbV9pbnN0YW5j
ZShwbHVnaW5WaWV3LT5pbnN0YW5jZSgpKQoreworICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwor
CisgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgbV9z
dHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0ubm90
aWZ5RGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKworICAgIHN0cmVh
bXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKworUGx1Z2luU3RyZWFtR3RrOjp+
UGx1Z2luU3RyZWFtR3RrKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1T
dGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGZyZWUoKGNoYXIqKW1fc3Ry
ZWFtLnVybCk7CisKKyAgICBzdHJlYW1zKCkucmVtb3ZlKCZtX3N0cmVhbSk7Cit9CisKK3ZvaWQg
UGx1Z2luU3RyZWFtR3RrOjpzdGFydCgpCit7CisgICAgQVNTRVJUKCFtX2xvYWRNYW51YWxseSk7
CisKKyAgICBtX2xvYWRlciA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUobV9m
cmFtZSwgdGhpcyk7CisKKyAgICBtX2xvYWRlci0+c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7
CisgICAgbV9sb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFkZFBsdWdJblN0cmVhbUxvYWRlciht
X2xvYWRlci5nZXQoKSk7CisgICAgbV9sb2FkZXItPmxvYWQobV9yZXNvdXJjZVJlcXVlc3QpOwor
fQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3RvcCgpCit7CisgICAgbV9zdHJlYW1TdGF0ZSA9
IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAobV9sb2FkTWFudWFsbHkpIHsKKyAgICAgICAgQVNT
RVJUKCFtX2xvYWRlcik7CisKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVy
ID0gbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFT
U0VSVChkb2N1bWVudExvYWRlcik7CisKKyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xv
YWRpbmdNYWluUmVzb3VyY2UoKSkKKyAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxN
YWluUmVzb3VyY2VMb2FkKG1fZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihtX3Jlc291
cmNlUmVxdWVzdCkpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sb2Fk
ZXIpIHsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgICAgICBtX2xvYWRlciA9IDA7
CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3RhcnRTdHJlYW0oKQoreworICAg
IEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgY29u
c3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBtX3Jlc291cmNlUmVzcG9uc2UudXJsKCk7CisKKyAgICAv
LyBTb21lIHBsdWdpbnMgKEZsYXNoKSBleHBlY3QgdGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJlIHBh
c3NlZCBiYWNrIGRlY29kZWQgYXMgdGhpcyBpcyB0aGUKKyAgICAvLyBmb3JtYXQgdXNlZCB3aGVu
IHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAgICBpZiAocmVzcG9uc2VVUkwudXJsKCkuc3RhcnRzV2l0
aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVw
KHJlc3BvbnNlVVJMLmRlY29kZV9zdHJpbmcocmVzcG9uc2VVUkwudXJsKCkpLnV0ZjgoKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChyZXNwb25zZVVSTC51cmwo
KS51dGY4KCkpOworICAgIAorICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVz
cG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisgICAgCisgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29u
dGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
KworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsKKyAgICAgICAgVmVjdG9y
PFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOwor
CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VS
ZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCks
IHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CisgICAgICAgIH0KKworICAgICAg
ICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKworICAg
ICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2Vk
KSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKKyAgICAgICAgLy8g
d2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBr
bm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4g
dHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExlbmd0
aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KKyAgICAgICAgU3RyaW5nIGNvbnRlbnRFbmNv
ZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRW5jb2Rp
bmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVu
Y29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGgg
PSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsK
KyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOworICAg
IG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7CisgICAgbV9z
dHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNvdXJjZVJlc3BvbnNlLmxhc3RNb2RpZmllZERhdGUo
KTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOworCisgICAgbV90cmFu
c2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9vZmZzZXQgPSAwOworICAgIG1fcmVhc29uID0g
V2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3RlY3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3Ry
ZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhhbmRsZXIKKyAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgTlBFcnJvciBucEVyciA9
IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlw
ZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7CisgICAgCisg
ICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBjYWxsIHRvIG5ld3N0cmVh
bSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKwor
ICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJv
eVN0cmVhbShucEVycik7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQor
ICAgICAgICByZXR1cm47CisgICAgCisjaWYgMAorICAgIGNoYXIgdGVtcEZpbGVbUEFUSF9NQVhd
OworCisgICAgaWYgKG1rc3RlbXAoIldLUFhYWFhYWCIpID4gMCkgeworICAgICAgICBtX3RlbXBG
aWxlSGFuZGxlID0gb3Blbih0ZW1wRmlsZSwgT19DUkVBVCB8IE9fQVNZTkMpOworCisJaWYgKG1f
dGVtcEZpbGVIYW5kbGUgPiAwKSB7CisJICAgIG1fcGF0aCA9IHRlbXBGaWxlOworCSAgICByZXR1
cm47CisJfQorICAgIH0KKyNlbmRpZgorCisgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIGNh
bmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVT
X05FVFdPUktfRVJSKTsKK30KKworTlBQIFBsdWdpblN0cmVhbUd0azo6b3duZXJGb3JTdHJlYW0o
TlBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gc3RyZWFtcygpLmdldChzdHJlYW0pOwor
fQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNv
biByZWFzb24pCit7CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsK
KworICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBtX3Jl
YXNvbiA9IHJlYXNvbjsKKyAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNfRE9ORSkgeworICAgICAg
ICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJlYW1lZAorICAgICAgICBp
ZiAobV9kZWxpdmVyeURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDAp
OworICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxpdmVyeURhdGEtPnNpemUo
KSA+IDApIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRvIGJlIHN0cmVhbWVkLCBk
b24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGRlc3Ryb3lTdHJlYW0oKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJl
YW0oKQoreworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVCAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSk7CisgICAg
QVNTRVJUICghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsK
KworICAgIGlmIChtX3RlbXBGaWxlSGFuZGxlID4gMCkKKyAgICAgICAgY2xvc2UobV90ZW1wRmls
ZUhhbmRsZSk7CisKKyAgICBpZiAobV9zdHJlYW0ubmRhdGEgIT0gMCkgeworICAgICAgICBpZiAo
bV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8
IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7CisgICAgICAgICAgICBBU1NFUlQo
IW1fcGF0aC5pc051bGwoKSk7CisKKyAgICAgICAgICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZSht
X2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgTlBFcnJvciBucEVycjsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95
c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFzb24pOworCisgICAgICAgIG1fc3Ry
ZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9zZW5kTm90aWZpY2F0aW9uKQorICAg
ICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVl
c3QudXJsKCkudXJsKCkudXRmOCgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKworICAgIG1f
c3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgLy8gZGlzY29ubmVjdFN0cmVhbSBj
YW4gY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBw
cm90ZWN0KHRoaXMpOworICAgIGlmICghbV9sb2FkTWFudWFsbHkpCisgICAgICAgIG1fcGx1Z2lu
Vmlldy0+ZGlzY29ubmVjdFN0cmVhbSh0aGlzKTsKKworICAgIG1fcGx1Z2luVmlldyA9IDA7CisK
KyAgICAvKgorICAgIGlmICghbV9wYXRoLmlzTnVsbCgpKQorICAgICAgICA6OkRlbGV0ZUZpbGVB
KG1fcGF0aC5kYXRhKCkpOworICAgICovCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxh
eURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+KiB0aW1lcikKK3sKKyAg
ICBBU1NFUlQodGltZXIgPT0gJm1fZGVsYXlEZWxpdmVyeVRpbWVyKTsKKworICAgIGRlbGl2ZXJE
YXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxpdmVyRGF0YSgpCit7CisgICAg
QVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBT
dHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNhbmNlbCBvdXIgam9i
IGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24ndCByZWFjaCB0aGlz
IGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3Ry
ZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFtLm5kYXRhIHx8IG1fZGVsaXZl
cnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50MzIgdG90YWxC
eXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgaW50MzIgdG90YWxCeXRlc0RlbGl2
ZXJlZCA9IDA7CisKKyAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMp
IHsKKyAgICAgICAgaW50MzIgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlcmVh
ZHkobV9pbnN0YW5jZSwgJm1fc3RyZWFtKTsKKworICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8
PSAwKSB7CisgICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5zdGFydE9uZVNob3QoMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGl2
ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxp
dmVyZWQpOworICAgICAgICAgICAgaW50MzIgZGF0YUxlbmd0aCA9IGRlbGl2ZXJ5Qnl0ZXM7Cisg
ICAgICAgICAgICBjaGFyKiBkYXRhID0gbV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0
ZXNEZWxpdmVyZWQ7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRhCisgICAgICAgICAg
ICBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGUobV9pbnN0YW5jZSwgJm1fc3Ry
ZWFtLCBtX29mZnNldCwgZGF0YUxlbmd0aCwgKHZvaWQqKWRhdGEpOworICAgICAgICAgICAgaWYg
KGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0
cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCBk
YXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAg
ICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsKKyAgICAgICAgaWYg
KHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgICAgICBpbnQgcmVt
YWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZDsKKyAgICAgICAg
ICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVyeURhdGEtPmRhdGEo
KSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgICAgIG1f
ZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGlmICht
X3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAgIGRlc3Ryb3lTdHJlYW0o
KTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzZW5kSmF2
YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1
bHRTdHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJlc291cmNlUmVzcG9uc2Uo
cmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVuZ3RoKCksICIiLCAiIikp
OworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZGlkUmVjZWl2ZURhdGEoMCwgcmVzdWx0U3RyaW5nLmRhdGEoKSwgcmVzdWx0
U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRGaW5pc2hMb2FkaW5nKDApOworfQorCit2b2lk
IFBsdWdpblN0cmVhbUd0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gcmVzcG9u
c2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlk
UmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsK
KyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3Ry
ZWFtU3RhcnRlZCk7CisgICAgCisgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgbV9k
ZWxpdmVyeURhdGEuc2V0KG5ldyBWZWN0b3I8Y2hhcj4pOworCisgICAgaW50IG9sZFNpemUgPSBt
X2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUob2xkU2l6
ZSArIGxlbmd0aCk7CisgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyBvbGRTaXpl
LCBkYXRhLCBsZW5ndGgpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4gY2FuY2VscyB0aGUgc3Ry
ZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAorICAgIC8vIHNvIHByb3Rl
Y3QgaXQgaGVyZS4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOwor
CisgICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkpCisgICAgICAgIGRlbGl2
ZXJEYXRhKCk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1TdG9wcGVkICYmIG1f
dGVtcEZpbGVIYW5kbGUgPiAwKSB7CisgICAgICAgIGludCB3cml0dGVuOworICAgICAgICBib29s
IHJldHZhbCA9IGZhbHNlOworCisJd3JpdHRlbiA9IDA7CisjaWYgMAorICAgICAgICBkbyB7CisJ
ICB3cml0dGVuICs9IHdyaXRlKG1fdGVtcEZpbGVIYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisJfSB3
aGlsZSAod3JpdHRlbiA8IGxlbmd0aCk7CisjZW5kaWYKKworICAgICAgICBpZiAoIXJldHZhbCB8
fCB3cml0dGVuICE9IGxlbmd0aCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0o
TlBSRVNfTkVUV09SS19FUlIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRp
ZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VF
cnJvciYpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAgICBtX2xvYWRl
ciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKwordm9p
ZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBB
U1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKworICAgIG1fbG9hZGVyID0g
MDsKKworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3Rr
Mnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvKiAtKi0gTW9kZTogQysr
OyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIg
LSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAq
KioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAy
LjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0
IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNl
bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNp
cywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgor
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQgSW1wbGVtZW50YXRp
b24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlz
CisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJ
bml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBE
ZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6Cisg
KgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNl
ZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BM
IiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExH
UEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNo
IHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVy
IHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxv
dyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0
aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICog
YW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYg
eW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBt
YXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBh
bnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5E
IExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBfX0dUS19YVEJJTl9IX18KKyNk
ZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsvZ3Rrc29ja2V0Lmg+CisjaW5j
bHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUg
PFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNpbmNsdWRlICJuc2NvcmUuaCIK
KyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5T
X0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19JTVBP
UlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSB0eXBl
CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBf
X2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW4gR3RrWHRCaW47Cit0eXBl
ZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNzOworCisjZGVmaW5lIEdUS19U
WVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9nZXRfdHlwZSAoKSkKKyNkZWZp
bmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RLX0NIRUNLX0NBU1QgKChvYmop
LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hU
QklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgICAg
KEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbkNsYXNzKSkKKyNkZWZp
bmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RLX0NIRUNLX1RZUEUgKChvYmop
LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hU
QklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAoR1RLX0NIRUNL
X0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1Y3QgX1h0Q2xpZW50IFh0Q2xp
ZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkqeHRkaXNwbGF5OworICBXaWRn
ZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAqLworICBXaWRnZXQJY2hp
bGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLworICBWaXN1YWwJKnh0dmlzdWFs
OworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3JtYXA7CisgIFdpbmRvdwlvbGR3
aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0a1NvY2tldCAgICAgIGdzb2Nr
ZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7CisgIERpc3BsYXkgICAgICAgKnh0
ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLworCisgIFdpbmRvdyAgICAg
ICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRvdyAqLworICBnaW50ICAg
ICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OworICBYdENsaWVu
dAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1iZWQgKi8KK307CisgIAor
c3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENsYXNzIHdpZGdldF9jbGFzczsK
K307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0YmluX2dldF90eXBlICh2b2lk
KTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpw
YXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJKHZvaWQpICAgICAgICBndGtf
eHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KTsKK0dU
S1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQg
ICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMgeworICAgIFh0VHJhbnNs
YXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8gVHJhbnNsYXRpb24gTWFu
YWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxlOyAgICAgICAgIC8qIHBy
b2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAgIHN0cnVjdCBfWHRTdGF0ZVJl
YyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIgc3RhdGUgcHRyICAgICAq
LworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOworfSBYdFRNUmVjLCAqWHRUTTsg
ICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBXaWRnZXQgICAgICAgICAgc2Vs
ZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNlbGYgICAgICAgICAgKi8K
KyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAvKiBwb2ludGVyIHRvIFdp
ZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAgICAgICAgcGFyZW50OyAgICAg
ICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBYcm1O
YW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSBx
dWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVpbmdfZGVzdHJveWVkOyAgICAv
KiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KKyAgICBYdENhbGxiYWNrTGlz
dCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVuIHdpZGdldCBkZXN0cm95
ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAgICAgICAvKiBjb25zdHJh
aW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3NpdGlvbiAgICAgICAgeCwgeTsg
ICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAgICAgICAgICAgKi8KKyAg
ICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3aW5kb3cgZGltZW5zaW9u
cyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgYm9yZGVyX3dpZHRoOyAg
ICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAgKi8KKyAgICBCb29sZWFu
ICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQgZ2VvbWV0cnkgbWFuYWdl
ZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZlOyAgICAgICAgICAvKiBp
cyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAgICBCb29sZWFuICAgICAgICAg
YW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBzZW5zaXRpdmU/ICAgICAg
Ki8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAgICAvKiBwcml2YXRlIHRv
IGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVjICAgICAgICAgdG07ICAgICAg
ICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAgICAgICAgKi8KKyAgICBY
dFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2NlbGVyYXRvciB0cmFuc2xh
dGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYm9yZGVyX3BpeGVsOyAgICAg
ICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8KKyAgICBQaXhtYXAgICAg
ICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeG1hcCBvciBOVUxM
ICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsgICAgICAgICAvKiBsaXN0
IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5hbCAgICAgICAgbnVt
X3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAgICAgICAgICAgICAgKi8K
KyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3Vy
Y2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAgICAgICAgKnNjcmVlbjsgICAg
ICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAgICAgKi8KKyAgICBDb2xv
cm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1hcCAgICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2luZG93OyAgICAgICAgICAgICAv
KiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5hbCAgICAg
ICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVzIGluIHdpbmRvdyAgICAg
ICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhlbDsgICAvKiB3aW5kb3cg
YmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXhtYXAgICAgICAgICAgYmFja2dy
b3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAgb3IgTlVMTCAgKi8KKyAg
ICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBpcyB3aW5kb3cgbWFwcGVk
IGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAgICAgbWFwcGVkX3doZW5fbWFu
YWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAgKi8KK30gQ29yZVBhcnQ7
CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENvcmVQYXJ0ICAgIGNvcmU7Cisg
fSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
IC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRCSU5fSF9fICovCisKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZUd0a19ICisj
ZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5oPgorI2luY2x1
ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdI
YXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9u
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0aWFsaXplRnVu
Y1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3MgUGx1
Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VHdGs+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAgIHN0YXRpYyBQ
bHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
dGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rl
c2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9F
eHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKTsKKworICAg
ICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1
bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBw
bHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRp
bWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKworICAgICAg
ICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBT
dHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3Ry
aW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAgICAgTUlNRVRv
RGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRl
bnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxlKiBtX21vZHVs
ZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisJTlBfR2V0TUlNRURlc2NyaXB0
aW9uRnVuY1B0ciBtX05QX0dldE1JTUVEZXNjcmlwdGlvbjsKKyAgICAgICAgTlBQX1NodXRkb3du
UHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKKyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1
bmNzOworICAgICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlR3RrSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFj
a2FnZUd0ayo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7
IH0KKworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIp
IHsgcmV0dXJuIGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGEpLCBy
ZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihiKSk7IH0KKyAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBhLCBjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZUd0az4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFs
KCphLmdldCgpLCAqYi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKy8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4g
V1RGLCB3aGVyZSBpdCdzIGltcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24g
YnV0IHdpdGggZGVmYXVsdCB0cmFpdHMuCisvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8g
dGhpcyB3aXRob3V0IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KK25hbWVzcGFjZSBX
VEYgeworICAgIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6
OlBsdWdpblBhY2thZ2VHdGtIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlR3RrPiA+ID4geworICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8
V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0az4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAg
ICB0eXBlZGVmIFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGtIYXNoIEhhc2g7CisgICAgICAgIHR5
cGVkZWYgSGFzaFRyYWl0czxJbnRUeXBlPiBUcmFpdHM7CisgICAgfTsKK30KKworCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luU3RyZWFtR3RrX0gK
KyNkZWZpbmUgUGx1Z2luU3RyZWFtR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgi
CisjaW5jbHVkZSAiTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgZW51bSBQbHVn
aW5TdHJlYW1TdGF0ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVh
bVN0b3BwZWQgfTsKKworICAgIGNsYXNzIFBsdWdpblN0cmVhbUd0ayA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBsdWdpblN0cmVhbUd0az4sIHByaXZhdGUgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJD
bGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luU3RyZWFtR3RrKFBsdWdpblZpZXdH
dGsqLCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIH5QbHVnaW5TdHJlYW1HdGsoKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisKKyAgICAg
ICAgdm9pZCBzdGFydFN0cmVhbSgpOworCisgICAgICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJv
b2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1hbnVhbGx5OyB9CisKKyAg
ICAgICAgLy8gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVE
YXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
ZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopOworCisgICAgICAgIHZvaWQgc2VuZEphdmFT
Y3JpcHRTdHJlYW0oY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgQ1N0cmluZyYgcmVzdWx0
U3RyaW5nKTsKKyAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsK
KworICAgICAgICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOworICAgICAgICB2b2lkIGRlc3Ryb3lT
dHJlYW0oTlBSZWFzb24pOworICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oKTsKKworICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7CisgICAgICAgIFJlc291cmNlUmVz
cG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAg
ICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOworICAgICAg
ICBQbHVnaW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIHZvaWQqIG1fbm90aWZ5RGF0
YTsKKyAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgICAgIFBsdWdpblN0cmVh
bVN0YXRlIG1fc3RyZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisKKyAg
ICAgICAgVGltZXI8UGx1Z2luU3RyZWFtR3RrPiBtX2RlbGF5RGVsaXZlcnlUaW1lcjsKKyAgICAg
ICAgdm9pZCBkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+Kik7
CisKKyAgICAgICAgT3duUHRyPCBWZWN0b3I8Y2hhcj4gPiBtX2RlbGl2ZXJ5RGF0YTsKKworICAg
ICAgICBpbnQgbV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNz
KiBtX3BsdWdpbkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2
IG1fdHJhbnNmZXJNb2RlOworICAgICAgICBpbnQzMiBtX29mZnNldDsKKyAgICAgICAgQ1N0cmlu
ZyBtX2hlYWRlcnM7CisgICAgICAgIENTdHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNvbiBt
X3JlYXNvbjsKKyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YWJhc2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0
ay5oIgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZp
ZXdHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhYmFzZUd0ayogUGx1
Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKQoreworICAgIHN0YXRpYyBQbHVnaW5E
YXRhYmFzZUd0ayogcGx1Z2lucyA9IDA7CisgICAgCisgICAgaWYgKCFwbHVnaW5zKSB7CisgICAg
ICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VHdGs7CisgICAgICAgIHBsdWdpbnMtPnNl
dFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlR3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7Cisg
ICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luczsK
K30KKwordm9pZCBQbHVnaW5EYXRhYmFzZUd0azo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICByZWZy
ZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6OnJlZnJlc2goKQoreyAgIAorICAg
IFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFs
c2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBsdWdpbnMKKyAgICBuZXdQbHVnaW5z
ID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkg
eworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgICAgICBQbHVn
aW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOworCisgICAgICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7CisKKyAgICAg
ICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1Z2lu
cworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7CisgICAgICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAg
ICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7Cisg
ICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOwor
CisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8
fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5z
ID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBu
ZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1f
cGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdp
bnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBl
cworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwor
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKKyAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1p
bWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygp
LmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkgeworICAgICAgICAgICAgbV9y
ZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOworfQorCitWZWN0b3I8UGx1Z2luUGFja2Fn
ZUd0ayo+IFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8
UGx1Z2luUGFja2FnZUd0ayo+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGx1
Z2luU2V0IFBsdWdpbkRhdGFiYXNlR3RrOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCisgICAg
SGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKKyAgICBQbHVnaW5TZXQgcGx1Z2luczsK
KworICAgIFBsdWdpblBhY2thZ2VHdGsqIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFj
a2FnZUd0ayogbmV3V01QUGx1Z2luID0gMDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbigoaXQtPnV0ZjgoKSkuZGF0
YSgpLCAwLCBOVUxMKTsKKwlpZiAoZGlyKSB7CisJICBjb25zdCBjaGFyKiBuYW1lOworCSAgd2hp
bGUgKChuYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcikpKSB7CisJICAgIGlmIChnX3N0cl9oYXNf
c3VmZml4KG5hbWUsICIuIiBHX01PRFVMRV9TVUZGSVgpKSB7CisJICAgICAgZ2NoYXIqIGZpbGVu
YW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0YSgpLCBuYW1lLCBOVUxMKTsK
KwkgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZUd0
azo6Y3JlYXRlUGFja2FnZShmaWxlbmFtZSwgdGltZShOVUxMKSk7CisJICAgICAgaWYgKHBsdWdp
blBhY2thZ2UpIHsKKwkJcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7CisJICAgICAgfQorCSAg
ICAgIGdfZnJlZShmaWxlbmFtZSk7CisJICAgIH0KKwkgIH0KKwkgIGdfZGlyX2Nsb3NlKGRpcik7
CisJfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZl
Y3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcp
Cit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0g
MDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVy
c2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBl
bmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlm
ICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9
PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21w
b25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQ
b3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOwor
CisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVy
c2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRo
YW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVj
dG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0
aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEg
Y29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworVmVj
dG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciogaG9tZVBhdGggPSBnX2J1aWxk
X2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVMTCk7
CisgICAgcGF0aHMuYXBwZW5kKGhvbWVQYXRoKTsKKyAgICBnX2ZyZWUoaG9tZVBhdGgpOworCisg
ICAgY29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7Cisg
ICAgaWYgKG1velBhdGgpIHsKKyAgICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0
KG1velBhdGgsICI6IiwgLTEpOworCisgICAgICBmb3IgKGdpbnQgaSA9IDA7IHBsdWdpblBhdGhz
W2ldOyBpKyspCisJcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ldKTsKKworICAgICAgZ19mcmVl
KHBsdWdpblBhdGhzKTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9t
b3ppbGxhL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1
Z2lucyIpOworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3Rr
Ojppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAorewor
ICAgIHJldHVybiAhbWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNv
bnRhaW5zKG1pbWVUeXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VH
dGs6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgU3Ry
aW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAgICAgICAg
ICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1
Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVU
b0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4
dGVuc2lvbnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7
IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJh
c2VHdGs6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreyAgIAorICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBpZiAoIW1p
bWVUeXBlLmlzTnVsbCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1l
VHlwZSk7CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSB1
cmwucGF0aCgpOworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJpbmcocGF0
aC5yZXZlcnNlRmluZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yRXh0
ZW5zaW9uKGV4dGVuc2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3Vs
ZCBiZSBmb3VuZCwgcXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAgICAgLy8g
Y29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVybiBwbHVn
aW47Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQbHVnaW5W
aWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSBm
aW5kUGx1Z2luKHVybCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91
bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAg
aWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVy
bCwgbWltZVR5cGUpOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdHdGsocGFy
ZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZh
bHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdp
bkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgo
dW5zaWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQ
bHVnaW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygp
W2ldOworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxl
ID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3Jp
cHRpb24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3Jp
cHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7
CisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWlt
ZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1l
Q2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVz
LmFwcGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7
CisgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4g
PSBpbmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5t
aW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisK
KyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3Jl
OjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjpp
bnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK2Jvb2wgUGx1Z0luSW5m
b1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUp
IAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5p
c01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVzaFBsdWdpbnMo
Ym9vbCByZWxvYWRPcGVuUGFnZXMpCit7CisgICAgUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxl
ZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworCisgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgeworICAg
ICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKKyAgICB9Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gMjc3ODUpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02
LDYgKzYsNyBAQCBDT05GSUcgKz0gYnVpbGRpbmctbGlicwogQ09ORklHICs9IG5vX2JhdGNoCiBp
bmNsdWRlKCQkUFdELy4uL1dlYktpdC5wcmkpCiBndGstcG9ydDpMSUJTIC09IC1sV2ViS2l0R3Rr
CitndGstcG9ydDpMSUJTICs9IC1sWHQKIAogVEVNUExBVEUgPSBsaWIKIHF0LXBvcnQ6VEFSR0VU
ID0gUXRXZWJLaXQKQEAgLTYwLDYgKzYxLDcgQEAgZ3RrLXBvcnQ6IWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9YU0xUPQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfWEJMPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9YQkw9MQogcXQtcG9ydDogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9
Lik6IERFRklORVMgKz0gRU5BQkxFX1NWRz0xCiBndGstcG9ydDpERUZJTkVTICs9IEVOQUJMRV9T
Vkc9MQorZ3RrLXBvcnQ6REVGSU5FUyArPSBYUF9VTklYCiAKIERFRklORVMgKz0gV1RGX0NIQU5H
RVM9MQogCkBAIC03ODIsMTMgKzc4NCwzMSBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFBy
b2Nlc3Nvci5jcHAKIAogZ3RrLXBvcnQgeworICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0
ay9QbHVnaW5EYXRhYmFzZUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oIFwK
KyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpblN0cmVhbUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmggXAorICAg
IHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICBwbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5o
IFwKKyAgICBwbHVnaW5zL2d0ay94ZW1iZWQuaAorCiAgIFNPVVJDRVMgKz0gXAorICAgIGxvYWRl
ci9ndGsvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJHdGsuY3BwIFwKICAgICBwbGF0Zm9ybS9H
bHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRmb3JtL0dseXBoV2lkdGhNYXAuY3BwIFwK
ICAgICBwbGF0Zm9ybS9Gb250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9Gb250LmNwcCBcCiAg
ICAgcGxhdGZvcm0vRm9udERhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9Gb250RmFsbGJhY2tMaXN0
LmNwcCAKKyAgICBwbGF0Zm9ybS9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJh
c2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisgICAg
cGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jIFwKKyAgICBwbHVnaW5z
L2d0ay9ucGFwaS5jcHAKIH0KIAogcXQtcG9ydCB7CkBAIC04ODksNiArOTA5LDcgQEAgcXQtcG9y
dCB7CiB9CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdp
bnMvZ3RrCiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZGVm
aW5lcy5oIFwKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2d0ay9OZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ3RrL05ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2d0
ay9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcihGcmFt
ZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQpCisgICAg
OiBSZXNvdXJjZUxvYWRlcihmcmFtZSwgdHJ1ZSwgdHJ1ZSkKKyAgICAsIG1fY2xpZW50KGNsaWVu
dCkKK3sKK30KKworTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6On5OZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXI+IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUoRnJhbWUqIGZyYW1lLCBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBuZXcg
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIoZnJhbWUsIGNsaWVudCk7Cit9CisKK2Jvb2wgTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmlzRG9uZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
X2NsaWVudDsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6cmVsZWFzZVJl
c291cmNlcygpCit7CisgICAgbV9jbGllbnQgPSAwOworICAgIFJlc291cmNlTG9hZGVyOjpyZWxl
YXNlUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKworICAgIC8v
IERvbid0IGNvbnRpbnVlIGlmIHRoZSBzdHJlYW0gaXMgY2FuY2VsbGVkCisgICAgaWYgKCFtX2Ns
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShyZXNwb25zZSk7CisKKyAgICAvLyBEb24ndCBjb250aW51ZSBpZiB0aGUgc3RyZWFt
IGlzIGNhbmNlbGxlZAorICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChyZXNwb25zZS5pc0hUVFAoKSAmJiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8IDEw
MCB8fCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkpCisgICAgICAgIGRpZENhbmNl
bChmcmFtZUxvYWRlcigpLT5maWxlRG9lc05vdEV4aXN0RXJyb3IocmVzcG9uc2UpKTsKK30KKwor
dm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0
T25jZSkKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHByb3RlY3Qo
dGhpcyk7CisKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3Ro
KTsKKyAgICAKKyAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3Ro
LCBsZW5ndGhSZWNlaXZlZCwgYWxsQXRPbmNlKTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgUmVmUHRyPE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworCisgICAgbV9kb2N1bWVudExvYWRlci0+
cmVtb3ZlUGx1Z0luU3RyZWFtTG9hZGVyKHRoaXMpOworICAgIG1fY2xpZW50LT5kaWRGaW5pc2hM
b2FkaW5nKHRoaXMpOworICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCk7Cit9
CisKK3ZvaWQgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
PiBwcm90ZWN0KHRoaXMpOworCisgICAgbV9kb2N1bWVudExvYWRlci0+cmVtb3ZlUGx1Z0luU3Ry
ZWFtTG9hZGVyKHRoaXMpOworICAgIG1fY2xpZW50LT5kaWRGYWlsKHRoaXMsIGVycm9yKTsKKyAg
ICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChlcnJvcik7Cit9CisKK3ZvaWQgTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXI6OmRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sK
KyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHByb3RlY3QodGhpcyk7CisK
KyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVQbHVnSW5TdHJlYW1Mb2FkZXIodGhpcyk7Cisg
ICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3IpOworICAgIFJlc291cmNlTG9hZGVyOjpk
aWRDYW5jZWwoZXJyb3IpOworfQorCit9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJl
dmlzaW9uIDI3Nzg1KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx0aW1lLmg+CiAKKyN1bmRlZiBTdGF0dXMKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDYWNoZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIuaAkocmV2aXNpb24gMjc3ODUpCisrKyBXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotI2lmIFVTRShDRk5FVFdPUkspCiAgICAgY2xhc3MgTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI7CiAKICAgICBjbGFzcyBOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlckNsaWVudCB7CkBAIC00NCw3ICs0Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBj
b25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNo
TG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopIHsgfQogICAgIH07Ci0jZW5kaWYK
IAogI2lmZGVmIF9fT0JKQ19fCiAgICAgICAgIHR5cGVkZWYgaWQgPFdlYlBsdWdJblN0cmVhbUxv
YWRlckRlbGVnYXRlPiBQbHVnSW5TdHJlYW1Mb2FkZXJEZWxlZ2F0ZTsKQEAgLTYwLDI1ICs1OCwy
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBpc0RvbmUoKSBjb25zdDsK
IAotI2lmIFBMQVRGT1JNKE1BQykgfHwgVVNFKENGTkVUV09SSykKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyICosIGludCwgbG9uZyBsb25n
IGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVJlc291cmNlcygp
OwotI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlcihGcmFtZSosIFBsdWdJblN0cmVhbUxvYWRlckRlbGVnYXRlKTsKIAotI2lmIFBMQVRGT1JN
KE1BQykgfHwgVVNFKENGTkVUV09SSykKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcik7Ci0jZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgUmV0YWluUHRyPFBsdWdJblN0cmVhbUxvYWRlckRlbGVnYXRlID4gbV9zdHJlYW07
Ci0jZWxpZiBVU0UoQ0ZORVRXT1JLKQorI2Vsc2UKICAgICAgICAgTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXJDbGllbnQqIG1fY2xpZW50OwogI2VuZGlmCiAgICAgfTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0NhY2hlZEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuaAkocmV2aXNpb24gMjc3ODUpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI3VuZGVmIFVua25vd24KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBEb2NMb2FkZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17297</attachid>
            <date>2007-11-15 09:45:41 -0800</date>
            <delta_ts>2007-12-11 10:44:03 -0800</delta_ts>
            <desc>Updated patch to handle XEmbed and Xt plug-ins both</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>176772</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2aXNpb24gMjc4MTEpCisrKyBKYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBA
CiAjaWZkZWYgWFBfVU5JWAogICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogICAgICNpbmNsdWRl
IDxYMTEvWHV0aWwuaD4KKyAgICAjaW5jbHVkZSA8c3RkaW8uaD4KICNlbmRpZgogCiAjaWZkZWYg
WFBfV0lOCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkocmV2aXNpb24gMjc4
MTEpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1bnRpbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUsNiArNzUsOCBAQCBleHRlcm4gIkMiIHsKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNp
bmNsdWRlICJucGFwaS5oIgogCisjdW5kZWYgTm9uZQorCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gp
ICYmIGRlZmluZWQoX19MUDY0X18pCiAjZXJyb3IgNjQtYml0IE5ldHNjYXBlIHBsdWctaW5zIGFy
ZSBub3Qgc3VwcG9ydGVkIG9uIE1hYyBPUyBYCiAjZW5kaWYKSW5kZXg6IFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAy
NzgxMSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiA0OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8K
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRG9uIEdpYnNvbiA8ZGdpYnNvbjc3QGdtYWlsLmNv
bT4KICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CkBAIC01
NiwxMiArNTcsMTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNs
dWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGll
bnQoV2ViS2l0RnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKwksIG1fcGx1Z2lu
VmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpA
QCAtMTY3LDkgKzE3MywzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxT
dWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxv
YWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1f
cmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0
YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVz
cG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgewor
ICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKwkJLy8gU2V0dGluZyB0aGUgZW5jb2Rp
bmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBp
cyBub3JtYWxseSBkb25lCisJCS8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2Vp
dmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBh
Ym91dDpibGFuaykuCisJCVN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGlu
ZygpOworCQlib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisJCWlmICghdXNl
ckNob3NlbikKKwkJCWVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05h
bWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1l
TG9hZGVyKCk7CisJCWZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nl
bik7CisJCWlmIChkYXRhKQorCQkJZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsK
KyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbikgeworCQkJbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2Uo
bG9hZGVyLT5yZXNwb25zZSgpKTsKKwkJCW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVl
OworCQl9CisJCW1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAg
ICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRp
ZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjUxLDggKzI3OCwxMyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9m
cmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdl
dCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5E
YXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9m
cmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMs
IG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygp
ID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMjk0
LDggKzMyNiw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVn
aW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9w
bHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9
CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29u
c3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtMzE3LDYgKzM0
OCw5IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRh
dGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVU
eXBlKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdp
bjsKKwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5
cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAK
QEAgLTQ0NSwxNCArNDc5LDE0IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVk
TUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZy
YW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIg
aXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8v
IHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2Fz
ZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3Ry
aW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBi
b29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlz
TnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRl
eHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0
RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcp
CisgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsK
KyAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAgbV9wbHVnaW5W
aWV3ID0gMDsKKyAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIApAQCAtNTA4LDcgKzU0MiwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzYXZl
RG9jdW1lbnRWaWV3CiBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQogRnJhbWUqIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9s
aWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKSB7CisgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICBtX3BsdWdp
blZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICB9Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9y
U3RhbmRhcmRMb2FkKGNvbnN0IEtVUkwmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JSZWxvYWQoY29uc3QgS1VSTCYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMjc4MTEpCisrKyBXZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZyYW1lIFdlYktpdEZyYW1lOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTE4MCw3ICsxODIsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2ViS2l0RnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2Vy
QWdlbnQ7CisKKwkvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisJV2ViQ29yZTo6
UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworCWJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkocmV2aXNp
b24gMjc4MTEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTczLDYgKzU3Myw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9wYWdlX2luaXQoV2Vi
S2l0UGFnZSoKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7CiAg
ICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIAorICAgIHNldHRp
bmdzLT5zZXRQbHVnaW5zRW5hYmxlZChUUlVFKTsKKwogICAgIEdUS19XSURHRVRfU0VUX0ZMQUdT
KHBhZ2UsIEdUS19DQU5fRk9DVVMpOwogICAgIHBhZ2VEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRf
RlJBTUUod2Via2l0X2ZyYW1lX25ldyhwYWdlKSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkocmV2aXNpb24g
Mjc4MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsOCBAQAogI2luY2x1ZGUgPFF0R3VpL3Fmb250bWV0cmljcy5oPgogI2VuZGlmCiAKKyN1
bmRlZiBDb21wbGV4CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2
aXNpb24gMjc4MTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMiArNTgsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJl
c291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKERl
cHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IHJldHVybiBmYWxzZTsgfQogCi1QbHVnaW5JbmZvKiBQ
bHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVk
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVkIFBsdWdJbkluZm9TdG9y
ZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1i
b29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBX
ZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQotCiBD
b2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZv
aWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZpc2lvbiAyNzgxMSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4Nyw1ICsyODcsMjIgQEAgdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJv
bwogCiB2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsKKyAgICBpZiAoIXBh
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7
CisgICAgSW50UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93
KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBh
bGxvY2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRTaXplIHN6ID0gZnJhbWVHZW9t
ZXRyeSgpLnNpemUoKTsKKyAgICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHN6LndpZHRoKCksIHN6
LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAm
YWxsb2NhdGlvbik7CiB9CiB9CkluZGV4OiBXZWJDb3JlL2NvbmZpZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI3ODExKQorKysgV2ViQ29yZS9jb25maWcuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvRGlzYWxsb3dD
VHlwZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjZGVmaW5lIFdURl9VU0VfTlBP
QkpFQ1QgMQorI2VuZGlmCisKICNpZiAhQ09NUElMRVIoTVNWQykgLy8gY2FuJ3QgZ2V0IHRoaXMg
dG8gY29tcGlsZSBvbiBWaXN1YWwgQysrIHlldAogI2RlZmluZSBBVk9JRF9TVEFUSUNfQ09OU1RS
VUNUT1JTIDEKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiAy
NzgxMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDEwIEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCisjdW5kZWYg
Tm9uZQorI3VuZGVmIEFib3ZlCisjdW5kZWYgQmVsb3cKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBIVE1MQ29sbGVjdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YWJhc2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRh
dGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRh
dGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3Rr
X0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3Rr
LmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
Y2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAg
IGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVn
aW5WaWV3R3RrOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3Rr
PiwgUGx1Z2luUGFja2FnZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2lu
RGF0YWJhc2VHdGsgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNl
R3RrKiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBs
dWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAg
IFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29s
IGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAg
ICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRl
OgorICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdp
bnNJblBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdp
bihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBs
dWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
OworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24pOworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0
UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOwor
ICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQ
bHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE1MTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogNDsgaW5k
ZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICovCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKKyNp
bmNsdWRlICJndGsyeHRiaW4uaCIKKworI2luY2x1ZGUgPGdkay9nZGtkaXNwbGF5Lmg+CisjaW5j
bHVkZSA8Z2RrL2dka3guaD4KKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxp
Yi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2lu
Y2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisv
LyBGb250LmggY3JhY2sKKyN1bmRlZiBBdXRvCisjdW5kZWYgU2ltcGxlCisjdW5kZWYgQ29tcGxl
eAorCisvLyBSZW5kZXJTdHlsZS5oIGNyYWNrCisjdW5kZWYgTm9uZQorI3VuZGVmIENpcmNsZQor
I3VuZGVmIFJlY3RhbmdsZQorCisvLyBDYWNoZWRSZXNvdXJjZS5oIGNyYWNrCisjdW5kZWYgU3Rh
dHVzCisjdW5kZWYgTm90Q2FjaGVkCisjdW5kZWYgVW5rbm93bgorI3VuZGVmIE5ldworI3VuZGVm
IFBlbmRpbmcKKyN1bmRlZiBDYWNoZWQKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
UmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1
Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAia2pzX2JpbmRpbmcu
aCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJranNfd2luZG93LmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5j
bHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJucGFwaS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVu
dGltZV9yb290LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDxranMvSlNMb2Nr
Lmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNp
bmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09i
amVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcg
c3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50
TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBQbHVnaW5SZXF1ZXN0
R3RrIHsKK3B1YmxpYzoKKyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5
RGF0YSkKKyAgICAgICAgOiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAg
ICAgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgLCBtX3NlbmROb3RpZmlj
YXRpb24oc2VuZE5vdGlmaWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAgY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVx
dWVzdDsgfQorICAgIHZvaWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURh
dGE7IH0KKyAgICBib29sIHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmRO
b3RpZmljYXRpb247IH0KK3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9h
ZFJlcXVlc3Q7CisgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90aWZp
Y2F0aW9uOworICAgIC8vIEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisKK3N0YXRpYyBjb25zdCBk
b3VibGUgTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsID0gMC4wMDE7CisKK2NsYXNzIFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJHdGsgeworcHVibGljOgorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKKyAgICAgICAgOiBtX2JhY2soMCksIG1f
ZnJvbnQoMCkKKyAgICAgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAgICAgLCBt
X21lc3NhZ2VUaHJvdHRsZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOjpt
ZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJlZSBsaXN0IHdpdGggb3VyIGlubGluZSBtZXNzYWdlcworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgTnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgICAgICBt
X2lubGluZU1lc3NhZ2VzW2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAg
ICAgIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKKyAg
ICAgICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKKyAgICB9
CisKKyAgICB+UGx1Z2luTWVzc2FnZVRocm90dGxlckd0aygpCisgICAgeworICAgICAgICBQbHVn
aW5NZXNzYWdlKiBuZXh0OworICAgIAorICAgICAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3Nh
Z2UgPSBtX2Zyb250OyBtZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4
dCA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKyAg
ICAgICAgfSAgICAgICAgCisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTWVzc2FnZShYSUQg
aFduZCwgZ3VpbnQgbXNnLCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSkgCisgICAgeworICAg
ICAgICBQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICAg
ICAgbWVzc2FnZS0+aFduZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKKyAg
ICAgICAgbWVzc2FnZS0+d1BhcmFtID0gd1BhcmFtOworICAgICAgICBtZXNzYWdlLT5sUGFyYW0g
PSBsUGFyYW07CisgICAgICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisgICAgICAgIGlmIChtX2Jh
Y2spCisgICAgICAgICAgICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgICAgICBtX2JhY2sg
PSBtZXNzYWdlOworICAgICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICBtX2Zyb250ID0g
bWVzc2FnZTsKKworICAgICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3Nh
Z2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBQ
bHVnaW5NZXNzYWdlIHsKKyAgICAgICAgWElEIGhXbmQ7CisgICAgICAgIGd1aW50IG1zZzsKKyAg
ICAgICAgZ3VpbnQgd1BhcmFtOworICAgICAgICBnbG9uZyBsUGFyYW07CisKKyAgICAgICAgc3Ry
dWN0IFBsdWdpbk1lc3NhZ2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIG1lc3NhZ2VU
aHJvdHRsZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4qKQorICAg
IHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7CisgICAgICAgIG1f
ZnJvbnQgPSBtX2Zyb250LT5uZXh0OworICAgICAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisg
ICAgICAgICAgICBtX2JhY2sgPSAwOworCisJLy8gICAgICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9w
bHVnaW5WaWV3LT5wbHVnaW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywg
bWVzc2FnZS0+d1BhcmFtLCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgICAgIGZyZWVNZXNzYWdl
KG1lc3NhZ2UpOworCisgICAgICAgIGlmIChtX2Zyb250KQorICAgICAgICAgICAgbV9tZXNzYWdl
VGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsK
KyAgICB9CisKKyAgICBQbHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKQorICAgIHsKKyAg
ICAgICAgUGx1Z2luTWVzc2FnZSAqbWVzc2FnZTsKKworICAgICAgICBpZiAobV9mcmVlSW5saW5l
TWVzc2FnZXMpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsK
KyAgICAgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAg
ICAgICAgcmV0dXJuIG1lc3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBpc0lubGluZU1lc3NhZ2Uo
UGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgeworICAgICAgICByZXR1cm4gbWVzc2FnZSA+
PSAmbV9pbmxpbmVNZXNzYWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051
bUlubGluZU1lc3NhZ2VzIC0gMV07CisgICAgfQorCisgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVn
aW5NZXNzYWdlKiBtZXNzYWdlKSAKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU1lc3NhZ2Uo
bWVzc2FnZSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVNZXNz
YWdlczsKKyAgICAgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICB9CisKKyAgICBQbHVn
aW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2FnZSogbV9iYWNrOworICAg
IFBsdWdpbk1lc3NhZ2UqIG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGlu
ZU1lc3NhZ2VzID0gNDsKKyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5lTWVzc2FnZXNbTnVtSW5s
aW5lTWVzc2FnZXNdOworICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOwor
CisgICAgVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVU
aW1lcjsKK307CisKK3N0YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIXVybC51cmwoKS5zdGFydHNXaXRoKCJqYXZhc2Ny
aXB0OiIsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhpcyBy
ZXR1cm5zIGFuIHVuZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VSTDo6ZGVjb2RlX3N0cmlu
Zyh1cmwudXJsKCkubWlkKDExKSk7Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6
OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCitjb25zdCB3Y2hhcl90KiBrV2ViUGx1Z2luVmll
d1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Citjb25zdCB3Y2hhcl90KiBrV2Vi
UGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOworCitzdGF0aWMg
Y29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoV2luZG93czsgVTsg
V2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8y
LjAiOworCitzdGF0aWMgYm9vbCByZWdpc3RlclBsdWdpblZpZXcoKQoreworICAgIHN0YXRpYyBi
b29sIGhhdmVSZWdpc3RlcmVkV2luZG93Q2xhc3MgPSBmYWxzZTsKKyAgICBpZiAoaGF2ZVJlZ2lz
dGVyZWRXaW5kb3dDbGFzcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCkt
PmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93
aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAg
bV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVH
ZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2Ns
aXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93
UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlmIChtX3dpbmRvdyAmJiAobV93
aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkp
IHsKKyAgICAgICAgUmVnaW9uIHJnbjsKKworICAgICAgICAvLyBUbyBwcmV2ZW50IGZsYXNoZXMg
d2hpbGUgc2Nyb2xsaW5nLCB3ZSBkaXNhYmxlIGRyYXdpbmcgZHVyaW5nIHRoZSB3aW5kb3cKKyAg
ICAgICAgLy8gdXBkYXRlIHByb2Nlc3MgYnkgY2xpcHBpbmcgdGhlIHdpbmRvdyB0byB0aGUgemVy
byByZWN0LgorCisgICAgICAgIC8vIEZJWE1FOiBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRv
IGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyAKKyAgICAgICAgLy8gcmVwYWlu
dCBwcm9ibGVtcyB3aXRoIGF0IGxlYXN0IHRoZSBXTVAgYW5kIEphdmEgcGx1Z2lucy4KKyAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUyMTExODc+IENvbWUgdXAgd2l0aCBhIGJldHRlciB3YXkg
b2YgaGFuZGxpbmcgcGx1Zy1pbiBzY3JvbGxpbmcKKyAgICAgICAgLy8gaXMgdGhlIGJ1ZyB0aGF0
IHRyYWNrcyB0aGUgd29yayBvZiBmaXhpbmcgdGhpcy4KKyAgICAgICAgLy9yZ24gPSA6OkNyZWF0
ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CisgICAgICAgIC8vOjpTZXRXaW5kb3dSZ24obV93aW5kb3cs
IHJnbiwgZmFsc2UpOworCisJLyoKKyAgICAgICAgaWYgKG1fd2luZG93UmVjdCAhPSBvbGRXaW5k
b3dSZWN0KQorICAgICAgICAgICAgOjpNb3ZlV2luZG93KG1fd2luZG93LCBtX3dpbmRvd1JlY3Qu
eCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpLCB0cnVlKTsKKwkqLworCisgICAgICAgIC8vIFJlLWVuYWJsZSBkcmF3aW5nLiAo
VGhpcyBzZXJ2ZXMgdGhlIGRvdWJsZSBwdXJwb3NlIG9mIHVwZGF0aW5nIHRoZSBjbGlwIHJlY3Qg
aWYgaXQgaGFzIGNoYW5nZWQuKQorCS8vcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3Qu
eCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRv
bSgpKTsKKyAgICAgICAgLy86OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCB0cnVlKTsKKyAg
ICAgICAgLy86OlVwZGF0ZVdpbmRvdyhtX3dpbmRvdyk7CisKKwkJR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1Jl
Y3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisJCWlmIChtX3dpZGdldCkgewor
CQkJZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisJCQlp
ZiAoIW1fbmVlZHNYRW1iZWQpIHsKKwkJCQlndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJ
TihtX3dpZGdldCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworCQkJCWd0
a194dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1Jl
Y3QuaGVpZ2h0KCkpOworCQkJfQorCQl9CisgICAgfQorfQorCitJbnRSZWN0IFBsdWdpblZpZXdH
dGs6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0
byBvdXIgYm91bmRzLgorICAgIEludFJlY3QgY2xpcFJlY3QobV93aW5kb3dSZWN0KTsKKyAgICAK
KyAgICAvLyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBl
bmNsb3NpbmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
bV9lbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIEZyYW1lVmlldyog
cGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGNsaXBSZWN0
LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckxheWVyKGxheWVyLCB0cnVl
KSk7CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0
RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0
ICE9IGZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJl
Y3QpOworCisgICAgaWYgKHBhcmVudCgpKQorCQlpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3co
KTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKwlXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpOwor
ICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3VzKCkK
K3sKKyAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAvL1NldEZvY3VzKHdpbmRvdyk7
CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2hv
dygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9
IG1fd2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX1NIT1dOQSk7CisKKyAgICBX
aWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoaWRlKCkKK3sKKyAgICBt
X2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQor
ICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIElt
YWdlKiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCisgICAgICAg
IG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVsbFBsdWdp
biIpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRyeSgpLngoKSwgZnJhbWVH
ZW9tZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2Ut
PmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS53aWR0aCgp
IC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNldCA9IChmcmFtZUdlb21l
dHJ5KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVj
dC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1h
Z2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNv
bnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51
bGxQbHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgewor
ICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHBhaW50
TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5lZWQgdG8g
c3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2lu
ZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsK
KworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pT
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorCisgICAg
c2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9p
bnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBF
dmVudDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBwYXNzIGl0IG9uICovCisg
ICAgLyoKKyAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7ICAgIAorCisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNl
IGlmIChldmVudC0+dHlwZSgpID09IGtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAgICB9Cisg
ICAgKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
IGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKKy8vZXh0ZXJuIGJv
b2wgaWdub3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVNb3Vz
ZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAg
IC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAgICBJbnRQb2ludCBwID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KEludFBv
aW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgLyoKKyAgICBucEV2
ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBucEV2ZW50LndQYXJh
bSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFy
YW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91
c2Vtb3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8
IAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93
bigpKQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFt
IHw9IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KSB7Cisg
ICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworCisgICAgICAg
ICAgICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAgIG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9X
TjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0
dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2
ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgKi8KKworICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0
Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRs
ZXIuY3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3Jl
TmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIC8vaWdub3Jl
TmV4dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisg
ICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7
CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVL
ZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAg
V2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRO
UFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
KQorICAgICAgICByZXR1cm47CisKKwlpZiAoIXBhcmVudCgpKQorCQlyZXR1cm47CisKKyAgICBJ
bnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1Rv
V2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAg
bV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0
aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworCisgICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworCisgICAgICAgIGlmICghbV9p
c1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChtX3dpbmRv
dyk7CisgICAgfQorCUd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKKwlndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKwlpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKwkJ
Z3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBhbGxvY2F0aW9uLngs
IGFsbG9jYXRpb24ueSk7CisJCWd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIGFsbG9jYXRpb24u
d2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKwl9Cit9CisKK2Jvb2wgUGx1Z2luVmlld0d0azo6
c3RhcnQoKQoreworICAgIGlmIChtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQVNTRVJUKG1fcGx1Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPm5ld3ApOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUuZGF0YSgpLCBtX2luc3RhbmNlLCBt
X21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsK
KyAgICB9CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAg
ICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFt
X2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVl
c3Q7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1l
dGhvZCgiR0VUIik7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0VVJMKG1fdXJsKTsKKyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c3Rv
cCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAg
SGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1z
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+OjppdGVy
YXRvciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgq
aXQpLT5zdG9wKCk7CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAg
IH0KKworICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVk
ID0gZmFsc2U7CisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsK
KworICAgIC8vIERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKworICAgIG1faW5zdGFu
Y2UtPnBkYXRhID0gMDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2lu
VmlldyhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3KQoreworICAgIHNfY3VycmVudFBsdWdpblZp
ZXcgPSBwbHVnaW5WaWV3OworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3RrOjpjdXJy
ZW50UGx1Z2luVmlldygpCit7CisgICAgcmV0dXJuIHNfY3VycmVudFBsdWdpblZpZXc7Cit9CisK
K3N0YXRpYyBjaGFyKiBjcmVhdGVVVEY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAg
IENTdHJpbmcgY3N0ciA9IHN0ci51dGY4KCk7CisgICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3RyLmxlbmd0aCgpICsgMSkpOworCisgICAgc3Ry
bmNweShyZXN1bHQsIGNzdHIuZGF0YSgpLCBjc3RyLmxlbmd0aCgpICsgMSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBmcmVlU3RyaW5nQXJyYXkoY2hhcioqIHN0cmlu
Z0FycmF5LCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5nQXJyYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGZh
c3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKKworICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5KTsKK30K
Kworc3RhdGljIGJvb2wgZ2V0U3RyaW5nKEtKU1Byb3h5KiBwcm94eSwgSlNWYWx1ZSogcmVzdWx0
LCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXByb3h5IHx8ICFyZXN1bHQgfHwgcmVzdWx0
LT5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNMb2NrIGxvY2s7
CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhl
YygpOworICAgIFVTdHJpbmcgdXN0cmluZyA9IHJlc3VsdC0+dG9TdHJpbmcoZXhlYyk7CisgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAKKyAgICBzdHJpbmcgPSB1c3RyaW5nOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBlcmZvcm1SZXF1ZXN0KFBs
dWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAgS1VSTCByZXF1ZXN0VVJMID0gcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIFN0cmlu
ZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKKwor
ICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+dXJsU2VsZWN0ZWQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLCAwLCBmYWxzZSwg
dHJ1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlz
IHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisg
ICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICAgICAgbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLnVybCgp
LnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJl
cXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEph
dmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6
bG9hZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgp
LmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVM
b2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAv
LyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0
cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBS
ZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSog
cmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcu
ZGVwcmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRS
ZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0
cmluZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHko
KSwgcmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVn
aW5TdHJlYW1HdGs+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgcGFyZW50RnJh
bWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwg
cmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAg
ICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3Jp
cHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAg
ICBBU1NFUlQodGltZXIgPT0gJm1fcmVxdWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0
cy5zaXplKCkgPiAwKTsKKworICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVl
c3RzWzBdOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxl
IGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNh
bGwgdG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRv
IGJlIGRlbGV0ZWQuCisgICAgaWYgKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9y
ZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVz
dCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVl
c3RHdGsqIHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAg
bV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdH
dGs6OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBz
ZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFt
ZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOwor
CisgICAgS1VSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgp
OworICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5W
QUxJRF9VUkw7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5h
bWUoKTsKKworICAgIC8vIGRvbid0IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQg
aXMgbm8gbG9uZ2VyIHBhcnQgb2YgYSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRp
c3BsYXllZCB1bmxlc3MgdGhlIGxvYWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1
Z2luLgorICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAh
PSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAg
ICAgICAodGFyZ2V0LmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJn
ZXQpICE9IG1fcGFyZW50RnJhbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1
cmwpOworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gbV9wYXJlbnRGcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5n
cyB8fCAhc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8g
UmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hh
dCBNb3ppbGxhIGRvZXMuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KyAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwp
IHsKKyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20g
YSBzdGFuZGFsb25lIHBsdWctaW4gdGhhdCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAg
Ly8gYmVjYXVzZSB0aGlzIGNhbiBjYXVzZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEg
YmxhbmsgcGFnZSAoMzQyNDAzOSkuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9Q
QVJBTTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwg
IXRhcmdldC5pc051bGwoKSkgeworICAgICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0
YXJnZXQuaXNOdWxsKCkgJiYgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0g
bV9wYXJlbnRGcmFtZSkgeworICAgICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9u
bHkgYWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlu
cyB0aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwor
ICAgICAgICB9CisKKyAgICAgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVn
aW5SZXF1ZXN0R3RrKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURh
dGEpOworICAgICAgICBzY2hlZHVsZVJlcXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMs
IG1fcGFyZW50RnJhbWUsIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmRO
b3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7
CisKKyAgICAgICAgc3RyZWFtLT5zdGFydCgpOworICAgIH0KKworICAgIHJldHVybiBOUEVSUl9O
T19FUlJPUjsKK30KKworc3RhdGljIEtVUkwgbWFrZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBj
b25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVy
bFN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEocmVsYXRpdmVVUkxTdHJpbmcp
OworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMKKyAgICB1cmxTdHJpbmcucmVwbGFj
ZSgnXG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xyJywgIiIpOworCisgICAgcmV0
dXJuIEtVUkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3Rr
OjpnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQq
IG5vdGlmeURhdGEpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0Owor
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJM
LCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlm
eURhdGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTChjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9h
ZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VU
Iik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVS
TChtX2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwg
ZmFsc2UsIDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShj
b25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+
IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9u
QWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBj
b25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
YnVmZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0
OyBpKyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4i
LgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykK
KyAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMg
dGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3Qg
bGluZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdc
bicpIHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAn
XG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAi
XHJcblxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAg
ICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykK
KyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxu
IiAoMzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZp
bmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2Nv
cmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8v
IGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAg
ICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0
aW9uCisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRF
T0wgbmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0
IENSTEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwg
aWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIg
dG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisg
ICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xy
JykgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3Vu
ZHMKKyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZv
cgorICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxl
bmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVz
ICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5s
aW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmlu
ZyByZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsg
aSsrKSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0
ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0g
dG91cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIg
JiYgbmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9s
b3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisK
KyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJh
Y3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0
ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgy
MkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBj
aGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJG
aWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVh
ZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgo
ZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGlu
ZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAg
ICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJt
aW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsK
KyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAg
ICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5p
bmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlm
IChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0
aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlm
ICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGlu
dWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5Lmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0
IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBw
cmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVh
ZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUg
PSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdW
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBC
cmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAg
ICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29s
b24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1l
ZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFs
aXplUkZDODIySGVhZGVyRmllbGROYW1lKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGlu
ZSwgY29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAg
ICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbUxhdGluMShjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAg
ICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7
CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVy
RmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXdH
dGs6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
MiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29s
IHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8
ICFsZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAg
ICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFw
IGhlYWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChm
aWxlKSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21M
YXRpbjEoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxl
Oi8vLyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisK
KyAgICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICB2b2lkKiBhdHRyczsKKyAgICAgICAg
aWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAoR0ZpbGVUZXN0KShH
X0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJWE1FIC0gcmVhZCB0aGUgZmls
ZSBkYXRhIGludG8gYnVmZmVyCisJLyoKKyAgICAgICAgdm9pZCogZmlsZUhhbmRsZSA9IENyZWF0
ZUZpbGVXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEZJTEVfUkVB
RF9EQVRBLCBGSUxFX1NIQVJFX1JFQUQsIDAsIE9QRU5fRVhJU1RJTkcsIDAsIDApOworICAgICAg
ICAKKyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgYnVmZmVyLnJl
c2l6ZShhdHRycy5uRmlsZVNpemVMb3cpOworCisgICAgICAgIERXT1JEIGJ5dGVzUmVhZDsKKyAg
ICAgICAgaW50IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGF0
dHJzLm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7CisKKyAgICAgICAgQ2xvc2VIYW5kbGUo
ZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBh
dHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7CisJKi8KKwlyZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwg
YnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRh
dGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworICAgIAorICAg
IGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVm
ZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVu
Z3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2Nh
dGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlv
biAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3
aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRo
ZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRl
ckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRh
TGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgLy8g
U29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3
aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2Vz
IG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAg
ICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxl
bmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxk
cy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRM
ZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29u
dGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhl
YWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBw
b3N0RGF0YSArPSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRh
dGFMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVS
TCwgdXJsKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQ
SGVhZGVyRmllbGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRIVFRQQm9keShQYXNzUmVmUHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEo
cG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJh
bWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5k
Tm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpw
b3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQorewor
ICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93
IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmls
ZS4KKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAs
IGZhbHNlLCBmaWxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpuZXdTdHJlYW0oTlBN
SU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKK30KKworaW50MzIgUGx1Z2luVmlld0d0azo6d3JpdGUoTlBTdHJl
YW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAtMTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJl
YXNvbikKK3sKKyAgICBQbHVnaW5TdHJlYW1HdGsqIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2Fz
dDxQbHVnaW5TdHJlYW1HdGsqPihzdHJlYW0tPm5kYXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8
IFBsdWdpblN0cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQor
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dz
ZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgp
Cit7CisgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQp
CisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50
LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgp
OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsK
KworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKwor
TlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworCSAgICBjYXNlIE5QTlZ4dEFw
cENvbnRleHQ6IHsKKwkJCWlmICghbV9uZWVkc1hFbWJlZCkgeworCQkJCSoodm9pZCAqKil2YWx1
ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4obV93aWRnZXQpLT54
dGNsaWVudC54dGRpc3BsYXkpOworCisJCQkJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCQkJfSBl
bHNlCisJCQkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisJCX0KKworICAgICAgICBjYXNl
IE5QTlZUb29sa2l0OiB7CisjaWYgUExBVEZPUk0oR1RLKQorCQkJKigodW5zaWduZWQgbG9uZyAq
KXZhbHVlKSA9IDI7CisjZWxzZQorCQkJKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IDA7Cisj
ZW5kaWYKKwkJCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKwkJfQorCisgICAgICAgIGNhc2UgTlBO
VlN1cHBvcnRzWEVtYmVkQm9vbDogeworI2lmIFBMQVRGT1JNKEdUSykKKwkJCSooKHVuc2lnbmVk
IGxvbmcgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKwkJCSooKHVuc2lnbmVkIGxvbmcgKil2YWx1
ZSkgPSBmYWxzZTsKKyNlbmRpZgorCQkJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCQl9CisKKyAg
ICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3
aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgp
OworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWlu
ZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9w
bHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0
KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7
CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2
ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgY2FzZSBOUE5WUGx1
Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0
T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5o
YXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVj
dCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0
YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0
cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2Jq
ZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVj
dCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAg
ICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2lu
ZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFs
dWUpOworCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhHVEtf
V0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdyk7CisKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdp
blZpZXdHdGs6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jv
b2w6CisgICAgICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29s
OgorICAgICAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAg
fQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBs
dWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1faW52YWxpZGF0
ZVRpbWVyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5z
aXplKCk7IGkrKykKKyAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0
c1tpXSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZp
ZXdHdGs6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsK
KyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50
UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCBy
ZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAg
ICAgICAvKiBGSVhNRSAtIEludmFsaWRhdGUgdGhlIHJlY3RhbmdsZQorCQkgICBSRUNUIGludmFs
aWRSZWN0KHIpOworCQkgICBJbnZhbGlkYXRlUmVjdChtX3dpbmRvdywgJmludmFsaWRSZWN0LCBG
QUxTRSk7CisJCSovCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2lu
UXVpcmtUaHJvdHRsZUludmFsaWRhdGUpIHsKKyAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFw
cGVuZChyKTsKKyAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7Cisg
ICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24g
cmVnaW9uKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IC8qIEZJWE1FIC0gSW52YWxpZGF0ZSB0aGUgcmVnaW9uCisgICAgUkVDVCByOworCisgICAgaWYg
KEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7Cisg
ICAgKi8KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpmb3JjZVJlZHJhdygpCit7CisgICAgLyog
RklYTUUgLSBGb3JjZSBhIHJlZHJhdworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIDo6
VXBkYXRlV2luZG93KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBkYXRlV2luZG93
KGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgKi8KK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFu
Y2UqIFBsdWdpblZpZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBPYmplY3QqIG9i
amVjdCA9IDA7CisKKyAgICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBucEVycjsKKyAg
ICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
ICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNl
LCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9CisKKyAgICBp
ZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICAvLyBGSVhNRSAtIGVycm9yOiBpbmNvbXBsZXRlIHR5cGUg4oCYS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2XigJkgdXNlZCBpbiBuZXN0ZWQgbmFtZSBzcGVjaWZpZXIKKyAgICAvLyBlcnJv
cjogaW5jb21wbGV0ZSB0eXBlIOKAmEtKUzo6QmluZGluZ3M6Okluc3RhbmNl4oCZIHVzZWQgaW4g
bmVzdGVkIG5hbWUgc3BlY2lmaWVyCisgICAgLy9SZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QodGhpcywgbV9wYXJl
bnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+aW50ZXJwcmV0ZXIoKSk7CisgICAgLy9LSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZSAqaW5zdGFuY2UgPSBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRl
QmluZGluZ0Zvckxhbmd1YWdlSW5zdGFuY2UoS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OkNMYW5n
dWFnZSwgb2JqZWN0LCByb290LnJlbGVhc2UoKSk7CisKKyAgICAvL19OUE5fUmVsZWFzZU9iamVj
dChvYmplY3QpOworCisgICAgLy9yZXR1cm4gaW5zdGFuY2U7CisgICAgcmV0dXJuIE5VTEw7Cit9
CisKK1BsdWdpblZpZXdHdGs6On5QbHVnaW5WaWV3R3RrKCkKK3sKKyAgICBzdG9wKCk7CisKKyAg
ICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9w
YXJhbU5hbWVzLCBtX3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFs
dWVzLCBtX3BhcmFtQ291bnQpOworCisJaWYgKCFtX25lZWRzWEVtYmVkICYmIG1fd2lkZ2V0KQor
CQlndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aWRnZXQpOworCW1fd2luZG93ID0gMDsKKwlzZXRHdGtX
aWRnZXQoTlVMTCk7CisKKyAgICBtX3BhcmVudEZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0Zv
clBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3BsdWdpbiAmJiAhKG1fcXVpcmtzICYgUGx1Z2lu
UXVpcmtEb250VW5sb2FkUGx1Z2luKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3RrKiBz
dHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKKworICAg
IG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkZXRl
cm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBUaGUgZmxhc2gg
cGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1v
emlsbGEgdXNlciBhZ2VudAorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9j
a3dhdmUtZmxhc2giKSB7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50OworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1Rocm90dGxlSW52
YWxpZGF0ZTsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBs
dXNPbmVNZXNzYWdlczsKKyAgICB9CisKKyAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBz
aXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRz
IHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFz
IGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIk1pY3Jv
c29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgewor
ICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOwor
CisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2VzIG5vdCB3b3JrIGF0IGFsbCB3aXRoIHRo
ZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVyIAorICAgICAgICAvLyBh
bmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MgfD0gUGx1
Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbTsKKyAgICB9CisKKyAgICAvLyBUaGUg
RGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxs
IGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdo
ZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9
PSAidmlkZW8vZGl2eCIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGw7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9y
IGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRl
cyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5v
dCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3Mg
dG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJl
IGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8v
IFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBs
aWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtE
b250VW5sb2FkUGx1Z2luOworCisgICAgLy8gUHJldmVudCB0aGUgUmVhbCBwbHVnaW4gZnJvbSBj
YWxsaW5nIHRoZSBXaW5kb3cgUHJvYyByZWN1cnNpdmVseSwgY2F1c2luZyB0aGUgc3RhY2sgdG8g
b3ZlcmZsb3cuCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVn
aW4iKQorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNh
bWVNZXNzYWdlUmVjdXJzaXZlbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyYW1l
dGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKQoreworICAgIEFTU0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJh
bVZhbHVlcy5zaXplKCkpOworCisgICAgdW5zaWduZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgp
OworICAgIHVuc2lnbmVkIHBhcmFtQ291bnQgPSAwOworCisgICAgbV9wYXJhbU5hbWVzID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsK
KyAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Mo
c2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICAgICAgaWYgKChtX3F1aXJrcyAmIFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3
aW5kb3dsZXNzdmlkZW8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fcGFy
YW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7Cisg
ICAgICAgIG1fcGFyYW1WYWx1ZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFt
VmFsdWVzW2ldKTsKKworICAgICAgICBwYXJhbUNvdW50Kys7CisgICAgfQorCisgICAgbV9wYXJh
bUNvdW50ID0gcGFyYW1Db3VudDsKK30KKworUGx1Z2luVmlld0d0azo6UGx1Z2luVmlld0d0ayhG
cmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2VHdGsq
IHBsdWdpbiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKKyAgICA6IG1fcGFyZW50
RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1l
bnQoZWxlbWVudCkKKyAgICAsIG1faXNTdGFydGVkKGZhbHNlKQorICAgICwgbV91cmwodXJsKQor
ICAgICwgbV9iYXNlVVJMKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkpKQorICAgICwgbV9zdGF0dXMoUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJlBs
dWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVkKQorICAgICwgbV9pbnZhbGlkYXRlVGltZXIo
dGhpcywgJlBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wYXJh
bU5hbWVzKDApCisgICAgLCBtX3BhcmFtVmFsdWVzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAg
ICwgbV9xdWlya3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorICAgICwgbV9pc1RyYW5z
cGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2hhdmVJbml0
aWFsaXplZChmYWxzZSkKKyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1faXNDYWxsaW5n
UGx1Z2luV25kUHJvYyhmYWxzZSkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkK
KyAgICAsIG1fbWFudWFsU3RyZWFtKDApCisJLCBtX3dpZGdldCgwKQorCSwgbV9uZWVkc1hFbWJl
ZChmYWxzZSkKK3sKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1
Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1faW5zdGFuY2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9
IHRoaXM7CisKKyAgICBtX21pbWVUeXBlID0gbWltZVR5cGUudXRmOCgpOworICAgIGRldGVybWlu
ZVF1aXJrcyhtaW1lVHlwZSk7CisKKyAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzKTsKKworICAgIG1fbW9kZSA9IG1fbG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VN
QkVEOworCisgICAgcmVzaXplKHNpemUpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmluaXQo
KQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
aGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAg
QVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAg
IG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2Fk
UGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFydCgpKSB7Cisg
ICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFs
dWUpCisJCW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBW
cGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKworCWlmIChtX25lZWRzWEVtYmVk
KSB7CisJCW1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKwkJZ3RrX2NvbnRhaW5lcl9hZGQo
bV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKwkJ
c2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKwl9IGVsc2UgeworCQltX3dpZGdldCA9IGd0a194dGJp
bl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3co
KSktPndpbmRvdywgTlVMTCk7CisJCWlmICghR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3cp
CisJCQlwcmludGYoIkZhaWxlZCB0byBjcmVhdGUgWFR3aW5kb3dcbiIpOworCX0KKworCUd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgZnJhbWVHZW9tZXRyeSgpLngoKSwgZnJhbWVHZW9tZXRy
eSgpLnkoKSwgZnJhbWVHZW9tZXRyeSgpLndpZHRoKCksIGZyYW1lR2VvbWV0cnkoKS5oZWlnaHQo
KSB9OworCWd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOwor
CWlmICghbV9uZWVkc1hFbWJlZCkgeworCQlndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJ
TihtX3dpZGdldCksIGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsKKwkJZ3RrX3h0YmluX3Jl
c2l6ZShtX3dpZGdldCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOworCX0K
KwlndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworICAgIE5QU2V0V2luZG93Q2FsbGJhY2tT
dHJ1Y3QqIHdzID0gZ19uZXcwKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QsIDEpOworCisgICAg
d3MtPnR5cGUgPSAwOworCisJaWYgKG1fbmVlZHNYRW1iZWQpIHsKKwkJd3MtPmRpc3BsYXkgPSBH
REtfV0lORE9XX1hESVNQTEFZKG1fd2lkZ2V0LT53aW5kb3cpOworCQl3cy0+dmlzdWFsID0gR0RL
X1ZJU1VBTF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbChtX3dpZGdldC0+d2luZG93KSk7
CisJCXdzLT5kZXB0aCA9IGdka193aW5kb3dfZ2V0X3Zpc3VhbChtX3dpZGdldC0+d2luZG93KS0+
ZGVwdGg7CisJCXdzLT5jb2xvcm1hcCA9IEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3dpbmRv
d19nZXRfY29sb3JtYXAobV93aWRnZXQtPndpbmRvdykpOworCQltX3dpbmRvdyA9IEdES19XSU5E
T1dfWFdJTkRPVyhtX3dpZGdldC0+d2luZG93KTsKKwl9IGVsc2UgeworCQl3cy0+ZGlzcGxheSA9
IEdUS19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKwkJd3MtPnZpc3VhbCA9IEdUS19YVEJJ
TihtX3dpZGdldCktPnh0Y2xpZW50Lnh0dmlzdWFsOworCQl3cy0+ZGVwdGggPSBHVEtfWFRCSU4o
bV93aWRnZXQpLT54dGNsaWVudC54dGRlcHRoOworCQl3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4o
bV93aWRnZXQpLT54dGNsaWVudC54dGNvbG9ybWFwOworCQltX3dpbmRvdyA9IEdUS19YVEJJTiht
X3dpZGdldCktPnh0d2luZG93OworCisJCVhGbHVzaCAod3MtPmRpc3BsYXkpOworCX0KKworICAg
IG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOworICAgIAorICAgIGlmIChtX2lzV2luZG93ZWQpIHsK
KyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBt
X25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcXVpcmtzICYgUGx1Z2luUXVp
cmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFt
ZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCghbV9tYW51YWxTdHJl
YW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1f
cGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRl
cigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1h
bnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgw
LCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZURhdGEoY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0p
OworICAgIAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5n
dGgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAg
IEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmluaXNo
TG9hZGluZygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGYWlsKGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBt
X21hbnVhbFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luVmlld0d0a19ICisj
ZGVmaW5lIFBsdWdpblZpZXdHdGtfSAorCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRl
IDxndGsvZ3Rrd2lkZ2V0Lmg+CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisjaW5j
bHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIm5w
YXBpLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBuYW1lc3BhY2UgQmlu
ZGluZ3MgeworICAgICAgICBjbGFzcyBJbnN0YW5jZTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIHN0cnVj
dCBGcmFtZUxvYWRSZXF1ZXN0OworICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3Mg
TW91c2VFdmVudDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJHdGs7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5S
ZXF1ZXN0R3RrOworICAgIGNsYXNzIFBsdWdpblN0cmVhbUd0azsKKyAgICBjbGFzcyBSZXNvdXJj
ZUVycm9yOworICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CisgICAgCisgICAgZW51bSBQbHVn
aW5RdWlya3MgeworICAgICAgICBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCA9IDEg
PDwgMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCA9IDEgPDwg
MSwKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUgPSAxIDw8IDIsIAorICAg
ICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtID0gMSA8PCAzLAorICAg
ICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzID0gMSA8PCA0LAor
ICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4gPSAxIDw8IDUsCisgICAgICAgIFBs
dWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwg
NgorICAgIH07CisKKyAgICBlbnVtIFBsdWdpblN0YXR1cyB7CisgICAgICAgIFBsdWdpblN0YXR1
c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW4s
CisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseQorICAgIH07CisKKyAgICBj
bGFzcyBQbHVnaW5WaWV3R3RrIDogcHVibGljIFdpZGdldCB7CisgICAgcHVibGljOgorICAgICAg
ICBQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdp
blBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1
YWwgflBsdWdpblZpZXdHdGsoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorICAgICAgICBOUFAgaW5zdGFuY2Uo
KSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisKKyAgICAgICAgdm9pZCBzZXROUFdpbmRv
d1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0aWMgUGx1Z2luVmlld0d0ayogY3Vy
cmVudFBsdWdpblZpZXcoKTsKKworICAgICAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogYmlu
ZGluZ0luc3RhbmNlKCk7CisKKyAgICAgICAgUGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICAgICAgLy8gTlBOIGZ1bmN0aW9ucworICAgICAgICBO
UEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0KTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFy
KiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBw
b3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBj
b25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAgICAgICAgTlBFcnJvciBuZXdTdHJlYW0o
TlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsK
KyAgICAgICAgaW50MzIgd3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBi
dWZmZXIpOworICAgICAgICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwg
TlBSZWFzb24gcmVhc29uKTsKKyAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7CisgICAg
ICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgICAgICBOUEVycm9yIGdl
dFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIE5QRXJy
b3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAg
dm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVn
aW9uKE5QUmVnaW9uKTsKKyAgICAgICAgdm9pZCBmb3JjZVJlZHJhdygpOworCisgICAgICAgIHZv
aWQgZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW1HdGsqKTsKKworICAgICAgICAvLyBXaWRn
ZXQgZnVuY3Rpb25zCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0
IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmly
dHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVFdmVudChFdmVudCopOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNj
cm9sbFZpZXcqKTsKKworICAgICAgICBnbG9uZyB3bmRQcm9jKFhJRCBoV25kLCBndWludCBtZXNz
YWdlLCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSk7CisKKyAgICAgICAgLy8gVXNlZCBmb3Ig
bWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
LCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAg
ICBib29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3RvcCgpOworICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKik7CisgICAgICAgIE5QRXJyb3Ig
bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lk
KiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wg
ZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93
SGVhZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAg
ICAgICAgRWxlbWVudCogbV9lbGVtZW50OworICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsK
KyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICAgICAg
S1VSTCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKKyAgICAgICAg
VmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOworCisgICAgICAgIHZvaWQgcGVyZm9ybVJl
cXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQ
bHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8
UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlVGltZXJGaXJlZChUaW1l
cjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICBUaW1lcjxQbHVnaW5WaWV3R3RrPiBtX3JlcXVl
c3RUaW1lcjsKKyAgICAgICAgVGltZXI8UGx1Z2luVmlld0d0az4gbV9pbnZhbGlkYXRlVGltZXI7
CisKKyAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRo
cm90dGxlcjsKKworICAgICAgICB2b2lkIHVwZGF0ZVdpbmRvdygpIGNvbnN0OworICAgICAgICB2
b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgdm9p
ZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KTsKKworICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopOwor
ICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopOworCisgICAgICAgIGlu
dCBtX21vZGU7CisgICAgICAgIGludCBtX3BhcmFtQ291bnQ7CisgICAgICAgIGNoYXIqKiBtX3Bh
cmFtTmFtZXM7CisgICAgICAgIGNoYXIqKiBtX3BhcmFtVmFsdWVzOworCisgICAgICAgIENTdHJp
bmcgbV9taW1lVHlwZTsKKyAgICAgICAgQ1N0cmluZyBtX3VzZXJBZ2VudDsKKworICAgICAgICBO
UFAgbV9pbnN0YW5jZTsKKyAgICAgICAgTlBQX3QgbV9pbnN0YW5jZVN0cnVjdDsKKyAgICAgICAg
TlBXaW5kb3cgbV9ucFdpbmRvdzsKKworICAgICAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+ID4gbV9zdHJlYW1zOworICAgICAgICBWZWN0b3I8UGx1Z2luUmVxdWVzdEd0ayo+IG1f
cmVxdWVzdHM7CisKKyAgICAgICAgaW50IG1fcXVpcmtzOworICAgICAgICBib29sIG1faXNXaW5k
b3dlZDsKKyAgICAgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9pc1Zp
c2libGU7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CisKKyAgICAgICAgWElEIG1f
d2luZG93OyAvLyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMKKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0
IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVn
LWluCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cg
cmVjdC4KKworICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNzYWdlOworICAgICAgICBib29sIG1f
aXNDYWxsaW5nUGx1Z2luV25kUHJvYzsKKworICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5Owor
ICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBtX21hbnVhbFN0cmVhbTsKKworICAgICAg
ICBzdGF0aWMgUGx1Z2luVmlld0d0ayogc19jdXJyZW50UGx1Z2luVmlldzsKKworCUd0a1dpZGdl
dCogbV93aWRnZXQ7CisJYm9vbCBtX25lZWRzWEVtYmVkOworICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2lu
Y2x1ZGUgIm5wYXBpLmgiIC8vICNpbmNsdWRlcyA8d2luZG93cy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworLy8gVGhlIHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2Yg
dGhlIGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Ut
c3BlY2lmaWMgZnVuY3Rpb24KKy8vIHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5k
IHRoaXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBw
bHVnLWluLgorLy8gQ3VycmVudGx5LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBz
ZXQgYmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmlld0d0azo6c3RhcnQuCisvLyBUaGlzIHNwZWNp
ZmljYWxseSB3b3JrcyBhcm91bmQgRmxhc2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5Q
UF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNlcmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3Rh
dGljIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7
CisgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQ
bHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygpOworfQorCit2b2lkKiBOUE5fTWVtQWxs
b2ModWludDMyIHNpemUpCit7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKwordm9pZCBO
UE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAgZnJlZShwdHIpOworfQorCit1aW50MzIgTlBO
X01lbUZsdXNoKHVpbnQzMiBzaXplKQoreworICAgIC8vIERvIG5vdGhpbmcKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhOUEJvb2wgcmVsb2FkUGFnZXMpCit7Cisg
ICAgcmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOworfQorCitOUEVycm9yIE5QTl9SZXF1ZXN0
UmVhZChOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5nZSogcmFuZ2VMaXN0KQoreworICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorCitOUEVycm9yIE5QTl9HZXRVUkxOb3RpZnko
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCog
bm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBO
UE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVS
TCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3Rh
bmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29u
c3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRh
cmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9Qb3N0
VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgcmV0dXJuIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkwodXJsLCB0YXJnZXQsIGxlbiwg
YnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBN
SU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQorewor
ICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0odHlw
ZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQzMiBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBO
UFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4g
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZl
cik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVh
bSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOworfQorCitj
b25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3
R3RrKiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICAvLyBG
SVhNRTogU29tZSBwbHVnLWlucyBjYWxsIE5QTl9Vc2VyQWdlbnQgd2l0aCBhIG51bGwgaW5zdGFu
Y2UgaW4gdGhlaXIgTlBfaW5pdGlhbGl6ZSBmdW5jdGlvbiEKKyAgICAgLy8gV2UnZCBuZWVkIGEg
d2F5IHRvIGdldCBhIHVzZXIgYWdlbnQgd2l0aG91dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQuCisg
ICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVybiAwOworIAorICAgIHJldHVybiB2aWV3LT51
c2VyQWdlbnQoKTsKK30KKwordm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0
dXMobWVzc2FnZSk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwg
TlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRh
dGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQoreworICAgIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJl
Z2lvbik7Cit9CisKK3ZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOworfQorCitOUEVy
cm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQ
IGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZh
bHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFFbnYoKQoreworICAgIC8vIFVuc3VwcG9ydGVk
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2Up
Cit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorTlBOX1B1
c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sKK30K
Kwordm9pZAorTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UpCit7Cit9Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L3hlbWJlZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKiAtKi0gTW9kZTogQysr
OyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIg
LSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAq
KioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAy
LjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0
IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNl
bnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNp
cywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgor
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhFTUJFRCBEZWNsYXJhdGlvbi4KKyAqCisgKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNy
b3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxv
cGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5h
dGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0
ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGlj
YWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9m
IGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwor
ICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN
UEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25z
IGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJv
dmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRl
bGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhl
IE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9D
SyAqKioqKiAqLworCisvKiBYRU1CRUQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgWEVNQkVEX0VNQkVE
REVEX05PVElGWSAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUgICAg
ICAgICAgMQorI2RlZmluZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUgICAgICAgIDIKKyNkZWZp
bmUgWEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAgICAgICAzCisjZGVmaW5lIFhFTUJFRF9GT0NV
U19JTiAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBYRU1CRURfRk9DVVNfT1VUICAgICAgICAg
ICAgICAgIDUKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX05FWFQgICAgICAgICAgICAgICA2CisjZGVm
aW5lIFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAgICAgICAgNworI2RlZmluZSBYRU1CRURfR1JB
Ql9LRVkgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWEVNQkVEX1VOR1JBQl9LRVkgICAgICAg
ICAgICAgICA5CisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PTiAgICAgICAgICAgICAgMTAKKyNk
ZWZpbmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAgICAgICAgICAxMQorCisvKiBOb24gc3RhbmRh
cmQgbWVzc2FnZXMqLworI2RlZmluZSBYRU1CRURfR1RLX0dSQUJfS0VZICAgICAgICAgICAgIDEw
OCAKKyNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJfS0VZICAgICAgICAgICAxMDkKKworLyogRGV0
YWlscyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8KKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJF
TlQgICAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9GT0NVU19GSVJTVCAgICAgICAgICAgICAg
MQorI2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAgICAgICAgICAgICAgIDIKKworLyogRmxhZ3Mg
Zm9yIF9YRU1CRURfSU5GTyAqLworI2RlZmluZSBYRU1CRURfTUFQUEVEICAgICAgICAgICAgICAg
ICAgICgxIDw8IDApCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUExVR0lOX0RFQlVHX0hfXwor
I2RlZmluZSBQTFVHSU5fREVCVUdfSF9fCisKKyNpbmNsdWRlICJucGFwaS5oIgorCitzdGF0aWMg
Y2hhciogZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAvKiBO
UEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNvZGUg
b2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJbnZhbGlkIGluc3Rh
bmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VS
Uk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9G
VU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAvKiBO
UEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5IGFsbG9jYXRpb24g
ZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAgICAiUGx1Zy1pbiBt
aXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8KKyAg
ICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFM
SURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBDb21t
dW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9OX0VS
Uk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5W
QUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lO
VkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0ZJ
TEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5QRVJS
X05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJSX1NU
UkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2RlIgorfTsKKworI2lm
bmRlZiBOREVCVUcKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSBpZiAoZXJyICE9IE5QRVJSX05P
X0VSUk9SKSBfUlBURjIoX0NSVF9XQVJOLCAiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGVycm9y
U3RyaW5nc1tlcnJdKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpIF9SUFRGMShfQ1JU
X1dBUk4sICIlczogU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3b3JrLCBk
aXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIiwgX19GVU5DVElP
Tl9fKQorI2Vsc2UKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSAoKHZvaWQpMCkKKyNk
ZWZpbmUgTE9HX05QRVJST1IoZXJyKSAoKHZvaWQpMCkKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgX05QRlVOQ1RJT05TX0hfCisjZGVmaW5lIF9OUEZVTkNUSU9OU19IXwor
CisjaW5jbHVkZSAibnBydW50aW1lLmgiCisjaW5jbHVkZSAibnBhcGkuaCIKKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9XSU4pCisj
ZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKF9fc3RkY2FsbCAq
IF9uYW1lKQorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUsIF9uYW1lKSBf
dHlwZSAoKiBfbmFtZSkKKyNlbmRpZgorCit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMTm90
aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdywgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTE5v
dGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3
aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1JlcXVlc3RSZWFkUHJvY1B0cikoTlBT
dHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Cit0eXBlZGVmIE5QRXJyb3Ig
KCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0pOwordHlwZWRlZiBpbnQzMiAoKk5Q
Tl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVu
LCB2b2lkKiBidWZmZXIpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0Rlc3Ryb3lTdHJlYW1Qcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7Cit0
eXBlZGVmIHZvaWQgKCpOUE5fU3RhdHVzUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBtZXNzYWdlKTsKK3R5cGVkZWYgY29uc3QgY2hhciooKk5QTl9Vc2VyQWdlbnRQcm9jUHRyKShO
UFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQdHIpKHVpbnQz
MiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVlUHJvY1B0cikodm9pZCogcHRyKTsK
K3R5cGVkZWYgdWludDMyICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyIHNpemUpOwordHlw
ZWRlZiB2b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyKShOUEJvb2wgcmVsb2FkUGFnZXMp
OwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJvciAo
Kk5QTl9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlk
YXRlUmVnaW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24pOwordHlwZWRl
ZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYg
TlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVS
TCwgY29uc3QgY2hhciogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBlZGVmIHZvaWQq
ICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fR2V0
SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsK
K3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5z
dGFuY2UpOworCit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIp
IChOUFZhcmlhbnQgKnZhcmlhbnQpOworCit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRT
dHJpbmdJZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7Cit0eXBlZGVmIHZv
aWQgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyKSAoY29uc3QgTlBVVEY4ICoqbmFt
ZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIgKmlkZW50aWZpZXJzKTsKK3R5cGVk
ZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyKSAoaW50MzJfdCBp
bnRpZCk7Cit0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9jUHRyKSAo
TlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBib29sICgqTlBOX0lkZW50aWZpZXJJ
c1N0cmluZ1Byb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBlZGVmIE5QVVRG
OCAqKCpOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlm
aWVyKTsKKwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0cikgKE5Q
UCwgTlBDbGFzcyAqYUNsYXNzKTsKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX1JldGFpbk9iamVj
dFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlT2Jq
ZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZVBy
b2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwg
Y29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1
bHQpOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyKSAoTlBQIG5wcCwg
TlBPYmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwg
TlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRlUHJvY1B0cikg
KE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFyaWFudCAqcmVz
dWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9HZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBO
UE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50ICpyZXN1
bHQpOwordHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5Q
T2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlhbnQg
KnZhbHVlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIpIChOUFAsIE5Q
T2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVmIGJvb2wg
KCpOUE5fSGFzTWV0aG9kUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVu
dGlmaWVyIG1ldGhvZE5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVByb3BlcnR5UHJv
Y1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUp
OwordHlwZWRlZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9iamVjdCAqb2Jq
LCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwordHlwZWRlZiBib29sICgqTlBOX0VudW1lcmF0ZVBy
b2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAqKmlkZW50aWZp
ZXIsIHVpbnQzMl90ICpjb3VudCk7CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdQcm9jUHRy
KShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1vZGUsIGludDE2
IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2ZWQpOwor
dHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU2F2
ZWREYXRhKiogc2F2ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93UHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9O
ZXdTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgTlBTdHJlYW0q
IHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0eXBlKTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3Ry
ZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBQX1N0cmVhbUFzRmlsZVBy
b2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZm5hbWUp
OwordHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFN0cmVhbSogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbiwg
dm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7Cit0eXBlZGVmIGludDE2ICgqTlBQX0hhbmRs
ZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBlZGVmIHZvaWQg
KCpOUFBfVVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIE5Q
UmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBf
R2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
ICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwordHlwZWRlZiBF
WFBPUlRFRF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Qcm9jUHRyKSh2b2lkKTsKKwordHlw
ZWRlZiB2b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9p
ZCogICBKUklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMgcmlnaHQgbm93CisKK3R5cGVkZWYg
c3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2
ZXJzaW9uOworICAgIAorICAgIE5QTl9HZXRVUkxQcm9jUHRyIGdldHVybDsKKyAgICBOUE5fUG9z
dFVSTFByb2NQdHIgcG9zdHVybDsKKyAgICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRyIHJlcXVlc3Ry
ZWFkOworICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUE5fV3JpdGVQ
cm9jUHRyIHdyaXRlOworICAgIE5QTl9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFt
OworICAgIE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKKyAgICBOUE5fVXNlckFnZW50UHJvY1B0
ciB1YWdlbnQ7CisgICAgTlBOX01lbUFsbG9jUHJvY1B0ciBtZW1hbGxvYzsKKyAgICBOUE5fTWVt
RnJlZVByb2NQdHIgbWVtZnJlZTsKKyAgICBOUE5fTWVtRmx1c2hQcm9jUHRyIG1lbWZsdXNoOwor
ICAgIE5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxvYWRwbHVnaW5zOworICAgIE5QTl9HZXRK
YXZhRW52UHJvY1B0ciBnZXRKYXZhRW52OworICAgIE5QTl9HZXRKYXZhUGVlclByb2NQdHIgZ2V0
SmF2YVBlZXI7CisgICAgTlBOX0dldFVSTE5vdGlmeVByb2NQdHIgZ2V0dXJsbm90aWZ5OworICAg
IE5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90aWZ5OworICAgIE5QTl9HZXRWYWx1
ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBOX1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1ZTsKKyAg
ICBOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRhdGVyZWN0OworICAgIE5QTl9JbnZh
bGlkYXRlUmVnaW9uUHJvY1B0ciBpbnZhbGlkYXRlcmVnaW9uOworICAgIE5QTl9Gb3JjZVJlZHJh
d1Byb2NQdHIgZm9yY2VyZWRyYXc7CisgICAgCisgICAgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQ
cm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXI7CisgICAgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJz
UHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKKyAgICBOUE5fR2V0SW50SWRlbnRpZmllclBy
b2NQdHIgZ2V0aW50aWRlbnRpZmllcjsKKyAgICBOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0
ciBpZGVudGlmaWVyaXNzdHJpbmc7CisgICAgTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIg
dXRmOGZyb21pZGVudGlmaWVyOworICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIgaW50
ZnJvbWlkZW50aWZpZXI7CisgICAgTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIgY3JlYXRlb2JqZWN0
OworICAgIE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFpbm9iamVjdDsKKyAgICBOUE5fUmVs
ZWFzZU9iamVjdFByb2NQdHIgcmVsZWFzZW9iamVjdDsKKyAgICBOUE5fSW52b2tlUHJvY1B0ciBp
bnZva2U7CisgICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1bHQ7CisgICAg
TlBOX0V2YWx1YXRlUHJvY1B0ciBldmFsdWF0ZTsKKyAgICBOUE5fR2V0UHJvcGVydHlQcm9jUHRy
IGdldHByb3BlcnR5OworICAgIE5QTl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJvcGVydHk7Cisg
ICAgTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKKyAgICBOUE5fSGFz
UHJvcGVydHlQcm9jUHRyIGhhc3Byb3BlcnR5OworICAgIE5QTl9IYXNNZXRob2RQcm9jUHRyIGhh
c21ldGhvZDsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFzZXZhcmlh
bnR2YWx1ZTsKKyAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRpb247CisgICAg
TlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFibGVkc3RhdGU7
CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBzZW5hYmxlZHN0
YXRlOworICAgIE5QTl9FbnVtZXJhdGVQcm9jUHRyIGVudW1lcmF0ZTsKK30gTlBOZXRzY2FwZUZ1
bmNzOworCit0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7CisgICAgdWludDE2IHNpemU7
CisgICAgdWludDE2IHZlcnNpb247CisgICAgTlBQX05ld1Byb2NQdHIgbmV3cDsKKyAgICBOUFBf
RGVzdHJveVByb2NQdHIgZGVzdHJveTsKKyAgICBOUFBfU2V0V2luZG93UHJvY1B0ciBzZXR3aW5k
b3c7CisgICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5QUF9EZXN0cm95
U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRy
IGFzZmlsZTsKKyAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsKKyAgICBOUFBf
V3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7CisgICAgTlBQ
X0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKKyAgICBOUFBfVVJMTm90aWZ5UHJvY1B0ciB1cmxu
b3RpZnk7CisgICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKKyAgICBOUFBfR2V0VmFsdWVQcm9j
UHRyIGdldHZhbHVlOworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7Cit9IE5QUGx1
Z2luRnVuY3M7CisKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfSW5pdGlh
bGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsKK3R5cGVkZWYg
RVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQ
dHIpKHZvaWQpOworCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCit0eXBlZGVmIHZvaWQgICAgKCpC
UF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOwordHlwZWRl
ZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3Mq
LCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkzOSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFi
cy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlm
dHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq
KioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAq
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRo
ZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERl
dmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5j
LgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHly
aWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBl
aXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAo
dGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQK
KyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBH
UEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUg
eW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUg
cHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BM
IG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisg
CisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0
byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisjaW5jbHVk
ZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21h
aW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90
aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAq
LworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVk
ZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgx
MS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2lu
ZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAq
LworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitz
dGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNz
ICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChH
dGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9y
ZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAg
ICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAq
b2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0
a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2
b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGll
bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVk
ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7
CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGll
bnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1
ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRn
ZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2lu
dGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVf
eGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0
IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Fk
ZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRp
YyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290
LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9j
dXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQg
ICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hh
bmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9m
IFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMg
aW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9l
cnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAg
ICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFy
ZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0g
TlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBn
Ym9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAg
ICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0
X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVy
X2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9v
bGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtf
VEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RI
UkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RL
X1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdf
SU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsK
KyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cisg
IH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitz
dGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEs
CisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFw
cENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRp
b25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyog
UHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEg
b24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkg
Y2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBl
dmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBh
bHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBm
b3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsr
KSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RL
X1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3Vy
Y2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZl
bnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVu
YylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xl
YW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRz
VG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBh
YyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5l
ZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAg
ICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9u
IHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0
IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZl
bnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNr
LAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBv
ZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBY
dEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAg
cmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sK
KyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7
CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7Cisg
ICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBz
aXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0
YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2lu
aXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRf
MiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAg
ICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0Ymlu
X2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitn
dGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdl
dENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisK
KyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAg
d2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3Mt
PnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUg
PSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xB
U1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7
Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQorewor
ICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxM
OworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0g
MDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdl
dCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRy
eSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0Ymlu
X3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRC
SU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNh
Y3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0
X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBh
bGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHks
IHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndp
ZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAv
KiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50
X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3
aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAg
IGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhl
aWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5k
b3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAg
Lyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUg
c29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0Ymlu
LT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5k
b3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAg
Z3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOwor
ICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4p
CisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sg
PSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVu
dF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0
Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkp
LAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwK
KyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRj
bGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNh
bid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBE
RUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSBy
ZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1
cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBy
dW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3Ag
Ki8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7
CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBs
b29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBo
YXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3
KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3Jp
dHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJz
ZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0
KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRk
aXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5
KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2
ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZl
bnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9j
b250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4g
cG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0K
KyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVu
Y3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAg
ICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8K
KyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4t
Pnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0
X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtf
d2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOwor
ICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNl
cl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJp
bik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7
CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21v
dmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0
YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFy
ZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50Zigi
Z3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWln
aHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRo
ICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcwor
ICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3
aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOwor
ICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRi
aW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2Vu
ZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6
ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkg
PSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2Nh
dGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJl
YWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dp
ZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5f
dW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2ls
bCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RL
X1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtf
V0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURH
RVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4t
Pnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcykt
PnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95
IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisg
IGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAo
R1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsK
KworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRs
ZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0
YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVz
YWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0
LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5s
b29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgor
ICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxv
b3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5D
b250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUo
dGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOwor
ICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVD
VF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxv
d2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lk
ZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRf
aW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZp
c3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAg
ICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hh
ciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoK
KyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQg
PSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0
ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xp
ZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgh
eHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3Rh
cnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgp
OworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBp
ZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0
LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0
LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQor
ICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3Bs
YXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4
dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAg
ID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8K
K3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisg
ICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAg
IGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQg
ICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBj
aGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVH
X1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9w
X3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNz
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+
dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICov
CisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7
CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZh
bHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRl
V2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9z
aXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93
aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQs
ICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7
bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFs
ICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRl
cHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54
dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDAp
OyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMo
eHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9w
X3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRk
ZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6
aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBY
dFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAg
ICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxz
ZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAg
IHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOwor
CisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVu
dC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAg
ICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRn
ZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNo
aWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIg
Ki8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRS
VUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50
X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAK
KyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVh
c2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAg
IChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAg
ICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsK
K30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGll
bnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3Rl
ckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0
Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVy
V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAg
ICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUg
cXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cK
KyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLwor
ICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93
aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVX
aWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAg
IAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNs
aWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5j
aGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAo
WHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBY
dERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bf
d2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50
X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNp
Z25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHRE
aXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9
IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0g
ZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3co
eHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAg
ICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5z
aWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFu
ZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVu
dCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRh
OworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJF
RF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJ
VkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1C
RURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJF
RF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQg
Y2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJl
YWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAg
cHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAg
ICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2Vu
ZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9G
T0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2
ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEu
bFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBw
cmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQu
eGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2Vu
ZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisg
ICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0
KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxk
X3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdl
dCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAg
ICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7Cisg
ICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAg
IH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVt
YmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVu
dF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50
KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisg
IHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAg
ICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQu
bWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4
dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hF
TUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdl
KHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNl
IFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5Ogor
ICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDAp
OworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVz
c2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVT
VF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0Ogor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAg
ICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5
cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAg
Knh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAg
ICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAg
IGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEy
LCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50
IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAg
RGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAg
bWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRv
dyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQu
eGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsK
KyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFsw
XSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZl
bnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxb
M10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJh
cF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAm
eGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJh
cF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJl
ZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKwor
c3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwg
WEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJy
b3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9l
cnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFu
ZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQg
ICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9l
cnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vy
cm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30K
Kworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0
IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRw
eSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBX
aW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsK
KyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBh
cmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRw
eSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAg
ICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVt
b3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdp
bikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBj
aGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAg
ICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNo
aWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50
LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAg
ICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAg
IFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJl
dmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94
ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhF
TUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICov
Cit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBv
aW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2
ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jj
b2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3Bs
YXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVu
dF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBY
U2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAor
ICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAg
ICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VN
YXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChY
dEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAg
ICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRf
cmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQorewor
ICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFu
ZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUs
IAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNf
bGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2
b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2lu
dGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7Cisg
IFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRw
eSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisK
KyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVf
Zm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlz
dGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1
ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikp
IHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBf
ZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsK
KyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOwor
ICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQs
IHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47
Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIm5wcnVudGlt
ZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQbHVnaW5QYWNrYWdlR3RrOjp+UGx1Z2luUGFja2FnZUd0aygpCit7CisgICAgQVNTRVJU
KCFtX2lzTG9hZGVkKTsKK30KKworUGx1Z2luUGFja2FnZUd0azo6UGx1Z2luUGFja2FnZUd0ayhj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQorICAgIDogbV9w
YXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1v
ZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50KDApCit7
CisgICAgaW50IHBvcyA9IG1fcGF0aC5kZXByZWNhdGVkU3RyaW5nKCkuZmluZFJldignLycpOwor
CisgICAgbV9maWxlTmFtZSA9IG1fcGF0aC5yaWdodChtX3BhdGgubGVuZ3RoKCkgLSBwb3MgLSAx
KTsKKworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmZldGNoSW5mbygpCit7CisgICAgaWYg
KCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGdjaGFyKiB0eXBl
cyA9IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7CisgICAgZ2NoYXIqKiBtaW1lRGVzY3MgPSBn
X3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAgICBmb3IgKGludCBpID0gMDsgbWltZURlc2Nz
W2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7CisgICAgICBnY2hhcioqIG1pbWVEYXRhID0g
Z19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgIFN0cmluZyBkZXNjcmlw
dGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWltZURhdGFbMl0pOworICAgICAgZ2NoYXIqKiBleHRl
bnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0YVsxXSwgIiwiLCAtMSk7CisKKyAgICAgIFZlY3Rv
cjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgIGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pd
OyBqKyspCisJZXh0VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0p
KTsKKworICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVswXSwgZXh0VmVjdG9y
KTsKKyAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3JpcHRp
b24pOworCisgICAgICBnX3N0cmZyZWV2KGV4dGVuc2lvbnMpOworICAgICAgZ19zdHJmcmVldiht
aW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURlc2NzKTsKKworICAgIHVubG9h
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmxvYWQo
KQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3Blbigo
bV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1f
bW9kdWxlKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisK
KyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBF
cnI7CisKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwgKHZv
aWQqKikmTlBfSW5pdGlhbGl6ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBf
R2V0TUlNRURlc2NyaXB0aW9uIiwgKHZvaWQqKikmbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24pOwor
ICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQqKikmbV9O
UFBfU2h1dGRvd24pOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVE
ZXNjcmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICBnb3RvIGFib3J0OworCisgICAg
bWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1f
cGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIG1fYnJvd3Nl
ckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwg
PSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1
bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0g
PSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3Rh
dHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9i
cm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3Mu
bWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBO
X01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2Fk
UGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90
aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlm
eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVu
Y3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0
SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVy
ID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVk
c3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5w
b3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAg
bV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRW
YWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJz
ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRp
ZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlk
ZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAg
IG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1f
YnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJv
d3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93
c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tl
RGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0
ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBO
X0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQ
cm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3Zl
UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhv
ZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAg
IG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1f
YnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisgICAgbnBFcnIgPSBO
UF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9h
ZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRT
aHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3Rr
Ojp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX05QUF9T
aHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1
Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNM
b2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsK
KyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVfY2xvc2UgKG1fbW9kdWxlKTsK
KworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2lu
UGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVf
dCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBuZXcg
UGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOworCisgICAgaWYgKCFwYWNrYWdl
LT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2FnZTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOworfQorCit1bnNpZ25lZCBQbHVn
aW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJd
ID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFzdE1vZGlm
aWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVy
cHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXpl
b2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjplcXVhbChjb25zdCBQbHVn
aW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKQoreworICAgIHJldHVy
biBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9CkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGx1Z2luU3RyZWFtR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3Rr
LmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKy8vIFdlIHVz
ZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0dXJuIC0xIHRvIGluZGlj
YXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2ggd2l0aCB0aGVtLgorc3Rh
dGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisKK3VzaW5nIHN0ZDo6bWF4OwordXNp
bmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPE5Q
U3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3RyZWFtTWFwJiBzdHJlYW1zKCkKK3sK
KyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7CisgICAgcmV0dXJuIHN0YXRpY1N0
cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6UGx1Z2luU3RyZWFtR3RrKFBsdWdpblZpZXdH
dGsqIHBsdWdpblZpZXcsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNv
dXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKKyAg
ICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkKKyAgICAsIG1fZnJhbWUoZnJh
bWUpCisgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAsIG1fbm90aWZ5RGF0YShu
b3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pCisg
ICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVm
b3JlU3RhcnRlZCkKKyAgICAsIG1fZGVsYXlEZWxpdmVyeVRpbWVyKHRoaXMsICZQbHVnaW5TdHJl
YW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAgICwgbV9kZWxpdmVyeURhdGEoMCkK
KyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoMCkKKyAgICAsIG1fcGx1Z2luRnVuY3MocGx1Z2luVmll
dy0+cGx1Z2luKCktPnBsdWdpbkZ1bmNzKCkpCisgICAgLCBtX2luc3RhbmNlKHBsdWdpblZpZXct
Pmluc3RhbmNlKCkpCit7CisgICAgQVNTRVJUKG1fcGx1Z2luVmlldyk7CisKKyAgICBtX3N0cmVh
bS51cmwgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICBtX3N0cmVhbS5wZGF0YSA9
IDA7CisgICAgbV9zdHJlYW0uZW5kID0gMDsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gMDsK
KyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAwOworCisgICAgc3RyZWFtcygpLmFkZCgmbV9z
dHJlYW0sIG1faW5zdGFuY2UpOworfQorCitQbHVnaW5TdHJlYW1HdGs6On5QbHVnaW5TdHJlYW1H
dGsoKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0YXJ0ZWQpOworICAg
IEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgZnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKKwor
ICAgIHN0cmVhbXMoKS5yZW1vdmUoJm1fc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OnN0YXJ0KCkKK3sKKyAgICBBU1NFUlQoIW1fbG9hZE1hbnVhbGx5KTsKKworICAgIG1fbG9h
ZGVyID0gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShtX2ZyYW1lLCB0aGlzKTsK
KworICAgIG1fbG9hZGVyLT5zZXRTaG91bGRCdWZmZXJEYXRhKGZhbHNlKTsKKyAgICBtX2xvYWRl
ci0+ZG9jdW1lbnRMb2FkZXIoKS0+YWRkUGx1Z0luU3RyZWFtTG9hZGVyKG1fbG9hZGVyLmdldCgp
KTsKKyAgICBtX2xvYWRlci0+bG9hZChtX3Jlc291cmNlUmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpzdG9wKCkKK3sKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBl
ZDsKKworICAgIGlmIChtX2xvYWRNYW51YWxseSkgeworICAgICAgICBBU1NFUlQoIW1fbG9hZGVy
KTsKKworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5s
b2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50
TG9hZGVyKTsKKworICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNv
dXJjZSgpKQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxv
YWQobV9mcmFtZS0+bG9hZGVyKCktPmNhbmNlbGxlZEVycm9yKG1fcmVzb3VyY2VSZXF1ZXN0KSk7
CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xvYWRlcikgeworICAgICAg
ICBtX2xvYWRlci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0gMDsKKyAgICB9Cit9CisK
K3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFydFN0cmVhbSgpCit7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBjb25zdCBLVVJMJiByZXNw
b25zZVVSTCA9IG1fcmVzb3VyY2VSZXNwb25zZS51cmwoKTsKKworICAgIC8vIFNvbWUgcGx1Z2lu
cyAoRmxhc2gpIGV4cGVjdCB0aGF0IGphdmFzY3JpcHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVj
b2RlZCBhcyB0aGlzIGlzIHRoZQorICAgIC8vIGZvcm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0
aGUgVVJMLgorICAgIGlmIChyZXNwb25zZVVSTC51cmwoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0
OiIsIGZhbHNlKSkKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwu
ZGVjb2RlX3N0cmluZyhyZXNwb25zZVVSTC51cmwoKSkudXRmOCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLnVybCgpLnV0ZjgoKSk7Cisg
ICAgCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1fcmVzb3VyY2VSZXNwb25zZS5taW1lVHlw
ZSgpLnV0ZjgoKTsKKyAgICAKKyAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0g
bV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworCisgICAgaWYgKG1f
cmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAgICBWZWN0b3I8VUNoYXI+IHN0cmlu
Z0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjogIik7CisKKyAgICAgICAgSFRU
UEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJhY3RlcnMoKSwgc2VwYXJhdG9yLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5zZWNvbmQuY2hh
cmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKKyAgICAgICAgfQorCisgICAgICAgIG1faGVhZGVycyA9
IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgpOworCisgICAgICAgIC8vIElmIHRo
ZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQpLCB0aGVuIGRvbid0
IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAgICAvLyB3aGljaCBpcyBvbmx5
IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtub3duIGF0IHRoZSBt
b21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0cmFja3MgYSByZXF1
ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXSB0byBpbmNvcnBv
cmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVudEVuY29kaW5nID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1FbmNvZGluZyIpOworICAgICAg
ICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBjb250ZW50RW5jb2RpbmcgIT0gImlk
ZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IC0xOworICAgIH0K
KworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMuZGF0YSgpOworICAgIG1fc3RyZWFt
LnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7CisgICAgbV9zdHJlYW0uZW5k
ID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsKKyAgICBtX3N0cmVhbS5sYXN0bW9k
aWZpZWQgPSBtX3Jlc291cmNlUmVzcG9uc2UubGFzdE1vZGlmaWVkRGF0ZSgpOworICAgIG1fc3Ry
ZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICBtX3RyYW5zZmVyTW9kZSA9IE5Q
X05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9yZWFzb24gPSBXZWJSZWFzb25Ob25l
OworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJlYW0gaXMgY2FsbGVk
IGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgorICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBOUEVycm9yIG5wRXJyID0gbV9wbHVnaW5GdW5j
cy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBlU3RyLmRhdGEoKSwg
Jm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAgICAKKyAgICAvLyBJZiB0aGUg
c3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3RyZWFtIHdlIHJldHVybgor
ICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOworCisgICAgaWYgKG5wRXJy
ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKG5wRXJy
KTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyNpZiAwCisgICAgY2hhciB0ZW1wRmlsZVtQQVRIX01BWF07CisKKyAgICBpZiAo
bWtzdGVtcCgiV0tQWFhYWFhYIikgPiAwKSB7CisgICAgICAgIG1fdGVtcEZpbGVIYW5kbGUgPSBv
cGVuKHRlbXBGaWxlLCBPX0NSRUFUIHwgT19BU1lOQyk7CisKKwlpZiAobV90ZW1wRmlsZUhhbmRs
ZSA+IDApIHsKKwkgICAgbV9wYXRoID0gdGVtcEZpbGU7CisJICAgIHJldHVybjsKKwl9CisgICAg
fQorI2VuZGlmCisKKyAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcg
dGhlIHN0cmVhbQorICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIp
OworfQorCitOUFAgUGx1Z2luU3RyZWFtR3RrOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3Ry
ZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sK
KyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVzdHJv
eVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6
OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVhc29uID0gcmVhc29u
OworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAgIC8vIFN0b3AgYW55
IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2ZXJ5
RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBlbHNl
IGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgeworICAg
ICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kg
dGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0cmVh
bSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbSgpCit7CisgICAg
aWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFtX2Rl
bGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgaWYgKG1f
dGVtcEZpbGVIYW5kbGUgPiAwKQorICAgICAgICBjbG9zZShtX3RlbXBGaWxlSGFuZGxlKTsKKwor
ICAgIGlmIChtX3N0cmVhbS5uZGF0YSAhPSAwKSB7CisgICAgICAgIGlmIChtX3JlYXNvbiA9PSBO
UFJFU19ET05FICYmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFuc2Zlck1v
ZGUgPT0gTlBfQVNGSUxFT05MWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wYXRoLmlzTnVs
bCgpKTsKKworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+YXNmaWxlKG1faW5zdGFuY2UsICZt
X3N0cmVhbSwgbV9wYXRoLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBOUEVycm9yIG5w
RXJyOworICAgICAgICBucEVyciA9IG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9pbnN0
YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7CisKKyAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAw
OworICAgIH0KKworICAgIGlmIChtX3NlbmROb3RpZmljYXRpb24pCisgICAgICAgIG1fcGx1Z2lu
RnVuY3MtPnVybG5vdGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS51cmwo
KS51dGY4KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworCisgICAgbV9zdHJlYW1TdGF0ZSA9
IFN0cmVhbVN0b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0U3RyZWFtIGNhbiBjYXVzZSB1cyB0
byBiZSBkZWxldGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7
CisgICAgaWYgKCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaXNjb25u
ZWN0U3RyZWFtKHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3ID0gMDsKKworICAgIC8qCisgICAg
aWYgKCFtX3BhdGguaXNOdWxsKCkpCisgICAgICAgIDo6RGVsZXRlRmlsZUEobV9wYXRoLmRhdGEo
KSk7CisgICAgKi8KK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1l
ckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1l
ciA9PSAmbV9kZWxheURlbGl2ZXJ5VGltZXIpOworCisgICAgZGVsaXZlckRhdGEoKTsKK30KKwor
dm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxp
dmVyeURhdGEpOworICAgIAorICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQp
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJl
c291cmNlTG9hZGVyIG9uIGVycm9yIHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFy
dGVkKTsKKworICAgIGlmICghbV9zdHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUo
KSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxp
dmVyeURhdGEtPnNpemUoKTsKKyAgICBpbnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKwor
ICAgIHdoaWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBp
bnQzMiBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNl
LCAmbV9zdHJlYW0pOworCisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAg
ICAgICAgIG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1p
bihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAg
ICAgICAgICBpbnQzMiBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNo
YXIqIGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsK
KworICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0
ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0
LCBkYXRhTGVuZ3RoLCAodm9pZCopZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRl
cyA8IDApIHsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05F
VFdPUktfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOwor
ICAgICAgICAgICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFs
Qnl0ZXNEZWxpdmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRlc0Rl
bGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRlcyA9
IHRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92ZSht
X2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRl
c0RlbGl2ZXJlZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEt
PnJlc2l6ZShyZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdl
YlJlYXNvbk5vbmUpCisgICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9
CisgICAgfSAKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFt
KGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sK
KyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAi
dGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIsICIiKSk7CisKKyAgICBpZiAo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBk
aWRSZWNlaXZlRGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3Ro
KCkpOworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGxvYWRl
ciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3Jl
U3RhcnRlZCk7CisKKyAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0
YXJ0U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlRGF0YShO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChs
ZW5ndGggPiAwKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsK
KyAgICAKKyAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQorICAgICAgICBtX2RlbGl2ZXJ5RGF0YS5z
ZXQobmV3IFZlY3RvcjxjaGFyPik7CisKKyAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlEYXRh
LT5zaXplKCk7CisgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsK
KyAgICBtZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0
aCk7CisKKyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZl
ckRhdGEgaXQgY291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgor
ICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV90
cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKwor
ICAgIGlmIChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgbV90ZW1wRmlsZUhhbmRs
ZSA+IDApIHsKKyAgICAgICAgaW50IHdyaXR0ZW47CisgICAgICAgIGJvb2wgcmV0dmFsID0gZmFs
c2U7CisKKwl3cml0dGVuID0gMDsKKyNpZiAwCisgICAgICAgIGRvIHsKKwkgIHdyaXR0ZW4gKz0g
d3JpdGUobV90ZW1wRmlsZUhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKKwl9IHdoaWxlICh3cml0dGVu
IDwgbGVuZ3RoKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghcmV0dmFsIHx8IHdyaXR0ZW4gIT0g
bGVuZ3RoKQorICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JL
X0VSUik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkRmFpbChOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAg
ICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKworICAgIG1fbG9hZGVyID0gMDsKKworICAg
IGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bUd0azo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVy
KQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOworCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVz
dHJveVN0cmVhbShOUFJFU19ET05FKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0
ay9ndGsyeHRiaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJp
bi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDog
MjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpl
eHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJ
Q0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQor
ICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemls
bGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8v
d3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRo
ZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMg
YW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNy
b3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxv
cGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5h
dGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0
ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGlj
YWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9m
IGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwor
ICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBN
UEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25z
IGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJv
dmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRl
bGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhl
IE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9D
SyAqKioqKiAqLyAgIAorCisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2RlZmluZSBfX0dUS19Y
VEJJTl9IX18KKworI2luY2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNsdWRlIDxYMTEvSW50
cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4K
KyNpZmRlZiBNT1pJTExBX0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgorI2lmZGVmIF9JTVBM
X0dUS1hUQklOX0FQSQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQT1JUXyh0eXBl
KQorI2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8odHlwZSkKKyNl
bmRpZgorI2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKKyNlbmRpZgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICov
CisKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVkZWYgc3RydWN0IF9H
dGtYdEJpbkNsYXNzIEd0a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZUEVfWFRCSU4gICAg
ICAgICAgICAgICAgICAoZ3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmluZSBHVEtfWFRCSU4o
b2JqKSAgICAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiksIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0Qmlu
KSkKKyNkZWZpbmUgR1RLX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR1RLX0NIRUNLX0NM
QVNTX0NBU1QgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmluZSBHVEtfSVNfWFRC
SU4ob2JqKSAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQorI2RlZmlu
ZSBHVEtfSVNfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfVFlQRSAo
KGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtf
VFlQRV9YVEJJTikpCit0eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGllbnQ7CisKK3N0cnVj
dCBfWHRDbGllbnQgeworICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdldAl0b3Bfd2lkZ2V0
OyAgICAvKiBUaGUgdG9wbGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGlsZF93aWRnZXQ7ICAv
KiBUaGUgZW1iZWRkZWQgd2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7CisgIGludAkJeHRk
ZXB0aDsKKyAgQ29sb3JtYXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdpbmRvdzsKK307CisK
K3N0cnVjdCBfR3RrWHRCaW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tldDsKKyAgR2RrV2lu
ZG93ICAgICAqcGFyZW50X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRkaXNwbGF5OyAgICAg
ICAgLyogWHQgVG9vbGtpdCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAgICAgeHR3aW5kb3c7
ICAgICAgICAgLyogWHQgVG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAgICAgICAgIHgsIHk7
CisgIGdpbnQgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50CSB4dGNsaWVudDsg
ICAgICAgICAvKiBYdCBDbGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitzdHJ1Y3QgX0d0a1h0
QmluQ2xhc3MKK3sKKyAgR3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOworfTsKKworR1RLWFRC
SU5fQVBJKEd0a1R5cGUpICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpOworR1RLWFRCSU5f
QVBJKEd0a1dpZGdldCAqKSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3cs
IFN0cmluZyAqZik7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194dGJpbl9zZXRfcG9z
aXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RLWFRCSU5fQVBJKHZv
aWQpICAgICAgIGd0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQp
OworCit0eXBlZGVmIHN0cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xhdGlvbnMgIHRyYW5z
bGF0aW9uczsgICAgICAgLyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5hZ2VyICAgICovCisg
ICAgWHRCb3VuZEFjdGlvbnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJvY2VkdXJlIGJpbmRp
bmdzIGZvciBhY3Rpb25zICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVjICpjdXJyZW50X3N0
YXRlOyAgLyogVHJhbnNsYXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICovCisgICAgdW5zaWdu
ZWQgbG9uZyAgIGxhc3RFdmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAgIAorCit0eXBlZGVm
IHN0cnVjdCBfQ29yZVBhcnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxmOyAgICAgICAgICAg
ICAgIC8qIHBvaW50ZXIgdG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLworICAgIFdpZGdldENs
YXNzICAgICB3aWRnZXRfY2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lkZ2V0J3MgQ2xhc3NS
ZWMgICAgICAqLworICAgIFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAgICAgICAgIC8qIHBh
cmVudCB3aWRnZXQgICAgICAgICAgICAgICAgICAgICAqLworICAgIFhybU5hbWUgICAgICAgICB4
cm1fbmFtZTsgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1YXJraWZpZWQgICAq
LworICAgIEJvb2xlYW4gICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8qIG1hcmtlZCBmb3Ig
ZGVzdHJveSAgICAgICAgICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0ICBkZXN0cm95X2Nh
bGxiYWNrczsgIC8qIHdobyB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3llZCAqLworICAgIFh0
UG9pbnRlciAgICAgICBjb25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFpbnQgcmVjb3JkICAg
ICAgICAgICAgICAgICAqLworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAgICAgICAgICAgICAg
IC8qIHdpbmRvdyBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAg
ICAgICB3aWR0aCwgaGVpZ2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25zICAgICAgICAgICAg
ICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAgICAgIC8qIHdpbmRv
dyBib3JkZXIgd2lkdGggICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBtYW5h
Z2VkOyAgICAgICAgICAgIC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2VkPyAgICAgICAqLwor
ICAgIEJvb2xlYW4gICAgICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlzIHdpZGdldCBzZW5z
aXRpdmUgdG8gdXNlciBldmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBhbmNlc3Rvcl9zZW5z
aXRpdmU7IC8qIGFyZSBhbGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAqLworICAgIFh0RXZl
bnRUYWJsZSAgICBldmVudF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8gZXZlbnQgZGlzcGF0
Y2hlciAgICAgICAqLworICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAgICAgICAgICAgIC8q
IHRyYW5zbGF0aW9uIG1hbmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0VHJhbnNsYXRpb25z
ICBhY2NlbGVyYXRvcnM7ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0aW9ucyAgICAgICAg
ICAqLworICAgIFBpeGVsICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAgIC8qIHdpbmRvdyBi
b3JkZXIgcGl4ZWwgICAgICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBib3JkZXJf
cGl4bWFwOyAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwgICAgICAqLworICAg
IFdpZGdldExpc3QgICAgICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qgb2YgcG9wdXBzICAg
ICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1fcG9wdXBzOyAgICAg
ICAgIC8qIGhvdyBtYW55IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLworICAgIFN0cmluZyAg
ICAgICAgICBuYW1lOyAgICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lICAgICAg
ICAgICAgICAqLworICAgIFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAgICAgICAgIC8qIHdp
bmRvdydzIHNjcmVlbiAgICAgICAgICAgICAgICAgICAqLworICAgIENvbG9ybWFwICAgICAgICBj
b2xvcm1hcDsgICAgICAgICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAq
LworICAgIFdpbmRvdyAgICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8qIHdpbmRvdyBJRCAg
ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBkZXB0aDsgICAg
ICAgICAgICAgIC8qIG51bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAgICAqLworICAgIFBp
eGVsICAgICAgICAgICBiYWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBp
eGVsICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3JvdW5kX3BpeG1hcDsg
IC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAgIEJvb2xlYW4gICAg
ICAgICB2aXNpYmxlOyAgICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQgYW5kIG5vdCBvY2Ns
dWRlZD8qLworICAgIEJvb2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5hZ2VkOy8qIG1hcCB3
aW5kb3cgaWYgaXQncyBtYW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsKKwordHlwZWRlZiBz
dHJ1Y3QgX1dpZGdldFJlYyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9IFdpZGdldFJlYywg
Q29yZVJlYzsgICAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3Bs
dXMgKi8KKyNlbmRpZiAvKiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5QYWNrYWdlR3RrX0gKKyNkZWZpbmUgUGx1Z2lu
UGFja2FnZUd0a19ICisKKyNpbmNsdWRlIDxnbW9kdWxlLmg+CisjaW5jbHVkZSA8dGltZS5oPgor
CisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworI3VuZGVmIE5QX0luaXRpYWxpemVGdW5jUHRyCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3Rr
IDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZUd0az4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgflBsdWdpblBhY2thZ2VHdGsoKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBhY2thZ2VH
dGsqIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RN
b2RpZmllZCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBt
X2Rlc2NyaXB0aW9uOyB9CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsZU5hbWU7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1p
bWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9
CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBj
b25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKworICAgICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Q7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdpblBhY2th
Z2VHdGsmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpOworCisgICAgICAgIGJvb2wgbG9h
ZCgpOworICAgICAgICB2b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdpdGhvdXRT
aHV0ZG93bigpOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1bmNzKCkg
Y29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBQ
bHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9k
aWZpZWQpOworICAgICAgICBib29sIGZldGNoSW5mbygpOworCisgICAgICAgIGJvb2wgbV9pc0xv
YWRlZDsKKyAgICAgICAgaW50IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmluZyBtX2Rlc2Ny
aXB0aW9uOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcgbV9maWxlTmFt
ZTsKKyAgICAgICAgU3RyaW5nIG1fbmFtZTsKKworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNN
YXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNNYXAgbV9t
aW1lVG9FeHRlbnNpb25zOworCisgICAgICAgIEdNb2R1bGUqIG1fbW9kdWxlOworICAgICAgICB0
aW1lX3QgbV9sYXN0TW9kaWZpZWQ7CisKKwlOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIG1f
TlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQ
X1NodXRkb3duOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAg
IE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBs
dWdpblBhY2thZ2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
aW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5
KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQ
bHVnaW5QYWNrYWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1
YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nh
c3Q8UGx1Z2luUGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNr
YWdlR3RrPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpi
LmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
Ly8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0
J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZh
dWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQg
YSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2Fn
ZUd0a0hhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4g
PiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlR3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2Vi
Q29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJh
aXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5TdHJlYW1HdGtfSAorI2RlZmluZSBQbHVn
aW5TdHJlYW1HdGtfSAorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgor
I2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisj
aW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1l
OworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRl
IHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9Owor
CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3Ry
ZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCB7CisgICAg
cHVibGljOgorICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayosIEZyYW1lKiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3Rp
ZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOworICAgICAgICAKKyAgICAgICAg
dm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAgICAgICB2b2lkIHN0YXJ0
U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFs
bHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KKworICAgICAgICAvLyBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVy
cm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShj
b25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAg
ICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0
YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKyAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbShOUFJlYXNv
bik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOworCisgICAgICAgIFJlc291cmNlUmVx
dWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc291
cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFJlZlB0cjxO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIFBsdWdpblZpZXdH
dGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgICAgICBi
b29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJl
YW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKworICAgICAgICBUaW1lcjxQ
bHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxpdmVyeVRpbWVyOworICAgICAgICB2b2lkIGRlbGF5
RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0az4qKTsKKworICAgICAgICBP
d25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVsaXZlcnlEYXRhOworCisgICAgICAgIGludCBtX3Rl
bXBGaWxlSGFuZGxlOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIG1fcGx1Z2luRnVu
Y3M7CisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICB1aW50MTYgbV90cmFuc2Zlck1v
ZGU7CisgICAgICAgIGludDMyIG1fb2Zmc2V0OworICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsK
KyAgICAgICAgQ1N0cmluZyBtX3BhdGg7CisgICAgICAgIE5QUmVhc29uIG1fcmVhc29uOworICAg
ICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3Rr
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0
azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBw
bHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9
IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMo
UGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lu
cy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lkIFBs
dWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30KKwor
Ym9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5l
d1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8v
IENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5z
SW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1f
cmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisgICAgICAgIFBsdWdpblNldCBwbHVnaW5z
VG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKKworICAgICAgICBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQbHVn
aW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVu
ZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBBZGQgbmV3
IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1
Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5z
LmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5z
OworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5k
KCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgq
aXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7
CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRp
b25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFw
X2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1F
VHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2lu
RGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
R3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgo
Kml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQbHVnaW5TZXQgUGx1Z2lu
RGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmlu
Zz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgUGx1Z2lu
UGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdX
TVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChpdC0+dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwp
OworCWlmIChkaXIpIHsKKwkgIGNvbnN0IGNoYXIqIG5hbWU7CisJICB3aGlsZSAoKG5hbWUgPSBn
X2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKwkgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgobmFtZSwg
Ii4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKwkgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxk
X2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworCSAgICAgIFBsdWdp
blBhY2thZ2VHdGsqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQYWNr
YWdlKGZpbGVuYW1lLCB0aW1lKE5VTEwpKTsKKwkgICAgICBpZiAocGx1Z2luUGFja2FnZSkgewor
CQlwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKwkgICAgICB9CisJICAgICAgZ19mcmVlKGZp
bGVuYW1lKTsKKwkgICAgfQorCSAgfQorCSAgZ19kaXJfY2xvc2UoZGlyKTsKKwl9CisgICAgfQor
CisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFy
c2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0
b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2ln
bmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxl
bmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNp
b25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQorICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJp
bmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNp
b25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsK
KyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7CisKKyAgICAgICAgc3Rh
cnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCisv
LyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgor
c3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVy
c2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVy
c2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZl
cnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBh
cmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1
c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5nPiBQ
bHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19n
ZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRocy5h
cHBlbmQoaG9tZVBhdGgpOworICAgIGdfZnJlZShob21lUGF0aCk7CisKKyAgICBjb25zdCBnY2hh
ciogbW96UGF0aCA9IGdfZ2V0ZW52KCJNT1pfUExVR0lOX1BBVEgiKTsKKyAgICBpZiAobW96UGF0
aCkgeworICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQobW96UGF0aCwgIjoi
LCAtMSk7CisKKyAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKwlw
YXRocy5hcHBlbmQocGx1Z2luUGF0aHNbaV0pOworCisgICAgICBnX2ZyZWUocGx1Z2luUGF0aHMp
OworICAgIH0KKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEvcGx1Z2lu
cyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7CisKKyAg
ICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6OmlzTUlNRVR5cGVS
ZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
aW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5
cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBTdHJpbmcga2V5ID0gbWlt
ZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
cGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuICgq
aXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3Rr
KiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5z
LmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVu
ZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
bWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBt
aW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6ZmluZFBs
dWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAg
UGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsKKworICAgIGlmICghbWltZVR5cGUuaXNOdWxs
KCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAK
KyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7Cisg
ICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5k
KCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5z
aW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBx
dWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBlIAorICAgICAgICAvLyBjb3JyZXNwb25kaW5n
IHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1
Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBh
cmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJs
LCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJl
c2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAm
JiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7
CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmlld0d0ayhwYXJlbnRGcmFtZSwgc2l6
ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlw
ZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
SW5JbmZvU3RvcmVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1Z0lu
SW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAK
K3sgCisgICAgUGx1Z2luRGF0YWJhc2VHdGsgKmRiID0gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3Rh
bGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Cisg
ICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAgICBp
bmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5m
aWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisg
ICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNr
YWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1p
bWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUp
OworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgbWlt
ZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lv
bnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAw
KQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAg
bWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdp
bnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0
dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdp
c3RlcmVkKG1pbWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9w
ZW5QYWdlcykKK3sKKyAgICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5y
ZWZyZXNoKCk7CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1F
OiByZWxvYWQgb3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyNzgxMSkK
KysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiw3IEBAIENP
TkZJRyArPSBidWlsZGluZy1saWJzCiBDT05GSUcgKz0gbm9fYmF0Y2gKIGluY2x1ZGUoJCRQV0Qv
Li4vV2ViS2l0LnByaSkKIGd0ay1wb3J0OkxJQlMgLT0gLWxXZWJLaXRHdGsKK2d0ay1wb3J0OkxJ
QlMgKz0gLWxYdAogCiBURU1QTEFURSA9IGxpYgogcXQtcG9ydDpUQVJHRVQgPSBRdFdlYktpdApA
QCAtNjAsNiArNjEsNyBAQCBndGstcG9ydDohY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hTTFQ9
CiAjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5BQkxFX1hC
TD0xCiBxdC1wb3J0OiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0uKTogREVGSU5FUyAr
PSBFTkFCTEVfU1ZHPTEKIGd0ay1wb3J0OkRFRklORVMgKz0gRU5BQkxFX1NWRz0xCitndGstcG9y
dDpERUZJTkVTICs9IFhQX1VOSVgKIAogREVGSU5FUyArPSBXVEZfQ0hBTkdFUz0xCiAKQEAgLTc4
MiwxMyArNzg0LDMxIEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAog
CiBndGstcG9ydCB7CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFi
YXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmggXAorICAgIHBsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3Rr
LmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsv
Z3RrMnh0YmluLmggXAorICAgIHBsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmggXAorICAgIHBsdWdp
bnMvZ3RrL3hlbWJlZC5oCisKICAgU09VUkNFUyArPSBcCisgICAgbG9hZGVyL2d0ay9OZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlckd0ay5jcHAgXAogICAgIHBsYXRmb3JtL0dseXBoUGFnZVRyZWVO
b2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3Jt
L0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9G
b250RGF0YS5jcHAgXAotICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwIAorICAgIHBs
YXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZv
U3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAor
ICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9Q
bHVnaW5TdHJlYW1HdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBc
CisgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNw
cAogfQogCiBxdC1wb3J0IHsKQEAgLTg4OSw2ICs5MDksNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3Rr
LXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBI
RUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3Rr
LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtkZWZpbmVzLmggXApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvZ3RrL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9ndGsvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXJHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvZ3RrL05ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmgiCisKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXI6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKEZyYW1lKiBmcmFtZSwgTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IFJlc291cmNlTG9h
ZGVyKGZyYW1lLCB0cnVlLCB0cnVlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6fk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKCkK
K3sKK30KKworUGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUsIE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIG5ldyBOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlcihmcmFtZSwgY2xpZW50KTsKK30KKworYm9vbCBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcjo6aXNEb25lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fY2xpZW50OworfQor
Cit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKCkKK3sK
KyAgICBtX2NsaWVudCA9IDA7CisgICAgUmVzb3VyY2VMb2FkZXI6OnJlbGVhc2VSZXNvdXJjZXMo
KTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIFJlZlB0cjxOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIG1fY2xpZW50LT5k
aWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworCisgICAgLy8gRG9uJ3QgY29udGlu
dWUgaWYgdGhlIHN0cmVhbSBpcyBjYW5jZWxsZWQKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3Bv
bnNlKTsKKworICAgIC8vIERvbid0IGNvbnRpbnVlIGlmIHRoZSBzdHJlYW0gaXMgY2FuY2VsbGVk
CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlc3BvbnNl
LmlzSFRUUCgpICYmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpIDwgMTAwIHx8IHJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSkKKyAgICAgICAgZGlkQ2FuY2VsKGZyYW1lTG9hZGVy
KCktPmZpbGVEb2VzTm90RXhpc3RFcnJvcihyZXNwb25zZSkpOworfQorCit2b2lkIE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoLCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKQoreworICAg
IFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBsZW5ndGgpOworICAgIAorICAg
IFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgsIGxlbmd0aFJlY2Vp
dmVkLCBhbGxBdE9uY2UpOworfQorCit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpk
aWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVQbHVnSW5T
dHJlYW1Mb2FkZXIodGhpcyk7CisgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7
CisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKTsKK30KKwordm9pZCBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHByb3RlY3QodGhp
cyk7CisKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVQbHVnSW5TdHJlYW1Mb2FkZXIodGhp
cyk7CisgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3IpOworICAgIFJlc291cmNlTG9h
ZGVyOjpkaWRGYWlsKGVycm9yKTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cjo6ZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIFJlZlB0cjxO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIG1fZG9jdW1l
bnRMb2FkZXItPnJlbW92ZVBsdWdJblN0cmVhbUxvYWRlcih0aGlzKTsKKyAgICBtX2NsaWVudC0+
ZGlkRmFpbCh0aGlzLCBlcnJvcik7CisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbChlcnJv
cik7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMjc4MTEp
CisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHRpbWUuaD4K
IAorI3VuZGVmIFN0YXR1cworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oCShyZXZp
c2lvbiAyNzgxMSkKKysrIFdlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0jaWYgVVNFKENGTkVUV09SSykKICAgICBjbGFzcyBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlcjsKIAogICAgIGNsYXNzIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50
IHsKQEAgLTQ0LDcgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNl
RXJyb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKikgeyB9CiAgICAgfTsKLSNlbmRpZgogCiAjaWZkZWYgX19P
QkpDX18KICAgICAgICAgdHlwZWRlZiBpZCA8V2ViUGx1Z0luU3RyZWFtTG9hZGVyRGVsZWdhdGU+
IFBsdWdJblN0cmVhbUxvYWRlckRlbGVnYXRlOwpAQCAtNjAsMjUgKzU4LDIxIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGlzRG9uZSgpIGNvbnN0OwogCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCBVU0UoQ0ZORVRXT1JLKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIgKiwgaW50LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2
ZWQsIGJvb2wgYWxsQXRPbmNlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYp
OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUmVzb3VyY2VzKCk7Ci0jZW5kaWYKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKEZyYW1lKiwg
UGx1Z0luU3RyZWFtTG9hZGVyRGVsZWdhdGUpOwogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCBVU0Uo
Q0ZORVRXT1JLKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKTsKLSNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBSZXRh
aW5QdHI8UGx1Z0luU3RyZWFtTG9hZGVyRGVsZWdhdGUgPiBtX3N0cmVhbTsKLSNlbGlmIFVTRShD
Rk5FVFdPUkspCisjZWxzZQogICAgICAgICBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVu
dCogbV9jbGllbnQ7CiAjZW5kaWYKICAgICB9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5oCShyZXZp
c2lvbiAyNzgxMSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCisjdW5kZWYgVW5rbm93bgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERvY0xvYWRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17851</attachid>
            <date>2007-12-11 10:44:03 -0800</date>
            <delta_ts>2007-12-12 14:01:35 -0800</delta_ts>
            <desc>Updated to build against trunk</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>181791</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkocmV2aXNpb24gMjg2MTMp
CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChf
X0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9w
cm94eS5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIEtKUyB7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmgJKHJldmlzaW9uIDI4NjEzKQorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18p
CiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIK
IAogbmFtZXNwYWNlIEtKUyB7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19j
bGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CShyZXZpc2lvbiAyODYxMykKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWZuZGVmIEJJTkRJTkdTX0NfQ0xB
U1NfSF8KICNkZWZpbmUgQklORElOR1NfQ19DTEFTU19IXwogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAicnVudGltZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L05QX2pzb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBf
anNvYmplY3QuaAkocmV2aXNpb24gMjg2MTMpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9O
UF9qc29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExB
VEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChfX0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGlt
ZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9wcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBy
dW50aW1lX2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWVfaW1wbC5oCShyZXZpc2lvbiAyODYxMykKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L25wcnVudGltZV9pbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lm
ICFQTEFURk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBy
dW50aW1lLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAKICNpZmRlZiBfX2NwbHVz
cGx1cwogZXh0ZXJuICJDIiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHJldmlzaW9u
IDI4NjEzKQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkod29ya2luZyBjb3B5
KQpAQCAtODksNiArODksNyBAQAogI2lmZGVmIFhQX1VOSVgKICAgICAjaW5jbHVkZSA8WDExL1hs
aWIuaD4KICAgICAjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgICAgI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjZW5kaWYKIAogI2lmZGVmIFhQX1dJTgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
bnBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWUuY3BwCShyZXZpc2lvbiAyODYxMykKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
cnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmICFQTEFU
Rk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ucHJ1bnRpbWVfcHJpdi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDI4NjEzKQorKysgSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvbnBydW50aW1lX3ByaXYuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18pCiAK
LSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKIAog
LyoKICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSgpIHdpbGwgY29weSBz
dHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ucHJ1bnRpbWVfcHJveHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4K
KyAqCisgKgorICogVGhpcyBpcyBhIHByb3h5IGluY2x1ZGUgaGVhZGVyIGZvciBucGFwaS5oCisg
KgorICogU29tZSBvZiB0aGUgI2RlZmluZXMgd2hpY2ggYXJlIGluIFgxMSBoZWFkZXJzIGNvbmZs
aWN0IHdpdGggdHlwZSBhbmQgZW51bQorICogbmFtZXMgaW4gSmF2YVNjcmlwdENvcmUgYW5kIFdl
YkNvcmUKKyAqIFRoaXMgaGVhZGVyICN1bmRlZnMgdGhvc2UgZGVmaW5lcyB0byBmaXggdGhlIGNv
bmZsaWN0cworICogSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBucGFwaS5oIG9yIG5wcnVudGltZS5o
IHdoZW4gYnVpbGRpbmcgb24gWDExLAorICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0
aGUgYWN0dWFsIG5wYXBpLmggb3IgbnBydW50aW1lLmgKKyAqLworCisjaW5jbHVkZSAibnBydW50
aW1lLmgiCisKKyNpZmRlZiBYUF9VTklYCisgICAgI2luY2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4K
KworICAgICN1bmRlZiBOb25lCisgICAgI3VuZGVmIEFib3ZlCisgICAgI3VuZGVmIEJlbG93Cisg
ICAgI3VuZGVmIEF1dG8KKyAgICAjdW5kZWYgQ29tcGxleAorICAgICN1bmRlZiBTdGF0dXMKKyNl
bmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvdGVzdGJpbmRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy90ZXN0YmluZGluZ3MuY3BwCShyZXZp
c2lvbiAyODYxMykKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3Rlc3RiaW5kaW5ncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2lu
Y2x1ZGUgImludGVycHJldGVyLmgiCiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfcHJveHkuaCIKIAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJy
dW50aW1lX29iamVjdC5oIgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDI4NjEzKQorKysgV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDQ7IGluZGVudC10
YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLSAqLwogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiBEb24gR2lic29uIDxkZ2lic29uNzdAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KQEAgLTYxLDEyICs2MiwxNyBAQAogI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9y
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
d0d0ay5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorCSwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBt
X3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNzIsOSArMTc4LDMw
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRl
ci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5j
b2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAg
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNv
ZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFTU0VSVChs
b2FkZXItPmZyYW1lKCkpOworCQkvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUg
bG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUK
KwkJLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRo
ZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KKwkJ
U3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7CisJCWJvb2wgdXNl
ckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKKwkJaWYgKCF1c2VyQ2hvc2VuKQorCQkJZW5j
b2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgICAg
IEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKwkJZnJh
bWVMb2FkZXItPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKwkJaWYgKGRhdGEp
CisJCQlmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIGlm
IChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2lu
KSB7CisJCQltX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPnJlc3BvbnNl
KCkpOworCQkJbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7CisJCX0KKwkJbV9wbHVn
aW5WaWV3LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCkBAIC0yNzAsOCArMjk3LDEzIEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCkt
Pipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNs
aWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJp
bmcmLCBib29sKQorV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0
IEludFNpemUmIHBsdWdpblNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7
CisgICAgUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0
YWxsZWRQbHVnaW5zKCktPmNyZWF0ZVBsdWdpblZpZXcoY29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6
ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRN
YW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVz
TG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwogICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zMTMsOCArMzQ1LDcgQEAgUGFz
c1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0
aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFt
ZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxl
bWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCkBAIC0zMzYsNiArMzY3LDkgQEAgT2JqZWN0Q29u
dGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnQ6Om9iagogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpPYmplY3RDb250ZW50SW1hZ2U7CiAKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2VHdGs6Omluc3Rh
bGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpKQorICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworCiAgICAgaWYgKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0eXBlKSkKICAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRGcmFtZTsKIApAQCAtNDgyLDE0ICs1MTYs
MTQgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyKQogewotICAgIEFTU0VSVChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8g
U2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdl
dCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3Qg
Yml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQg
d2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBk
b2N1bWVudExvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9
ICFlbmNvZGluZy5pc051bGwoKTsKLSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAg
IGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OwotICAgIGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGlu
ZywgdXNlckNob3Nlbik7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgIGNvbW1pdHRl
ZExvYWQoZG9jdW1lbnRMb2FkZXIsIDAsIDApOworICAgIGVsc2UgeworICAgICAgbV9wbHVnaW5W
aWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAg
bV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogCkBAIC01NDUs
NyArNTc5LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNhdmVEb2N1bWVudFZpZXcKIGJv
b2wgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbkNhY2hlUGFnZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBGcmFtZSogRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
Q3JlYXRlUGFnZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3Vy
Y2VFcnJvciYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1h
aW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpIHsKKyAgaWYgKG1fcGx1Z2luVmlldykgeworICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChl
cnJvcik7CisgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1
Z2luID0gZmFsc2U7CisgIH0KK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3du
bG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JTdGFuZGFyZExvYWQoY29u
c3QgS1VSTCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
dXBkYXRlR2xvYmFsSGlzdG9yeUZvclJlbG9hZChjb25zdCBLVVJMJikgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5oCShyZXZpc2lvbiAyODYxMykKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBA
QAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCiB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MTc4LDcgKzE4MCwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBwcml2YXRlOgogICAgICAg
ICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSBtX3Jlc3BvbnNlOworCiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsK
KworCS8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKwlXZWJDb3JlOjpQbHVnaW5W
aWV3R3RrKiBtX3BsdWdpblZpZXc7CisJYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwog
ICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKHJldmlz
aW9uIDI4NjEzKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MDIsNiArODAyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2luaXQoV2ViS2l0VwogICAgIHNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlh
bCIpOwogICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIgTmV3Iik7CiAg
ICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKKyAgICBzZXR0aW5n
cy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CiAKICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3
ZWJWaWV3LCBHVEtfQ0FOX0ZPQ1VTKTsKICAgICB3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lID0gV0VC
S0lUX1dFQl9GUkFNRSh3ZWJraXRfd2ViX2ZyYW1lX25ldyh3ZWJWaWV3KSk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9UaHJlYWRpbmdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1RocmVhZGluZ0d0ay5jcHAJKHJldmlzaW9uIDI4NjEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVGhyZWFkaW5nR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyAr
MzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBnYm9vbGVhbiBjYWxsRnVuY3Rp
b25Pbk1haW5UaHJlYWQoZ3BvaW50ZXIgZGF0YSkKIHsKLSAgICB2b2lkICgqZnVuY3Rpb24pKCkg
PSByZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oZGF0YSk7CisgICAgdm9pZCAoKmZ1bmN0aW9u
KSgpID0gKHZvaWQoKikoKSkoZGF0YSk7CiAgICAgZnVuY3Rpb24oKTsKICAgICByZXR1cm4gRkFM
U0U7CiB9CkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBnYm9vbGVhbiBjYWxsRnVuY3Rpb25Pbk1h
aW5UaHJlYWQKIHZvaWQgY2FsbE9uTWFpblRocmVhZCh2b2lkICgqZnVuY3Rpb24pKCkpCiB7CiAg
ICAgQVNTRVJUKGZ1bmN0aW9uKTsKLSAgICBnX3RpbWVvdXRfYWRkKDAsIGNhbGxGdW5jdGlvbk9u
TWFpblRocmVhZCwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oZnVuY3Rpb24pKTsKKyAgICBn
X3RpbWVvdXRfYWRkKDAsIGNhbGxGdW5jdGlvbk9uTWFpblRocmVhZCwgKGdwb2ludGVyKShmdW5j
dGlvbikpOwogfQogCiB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAyODYxMykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDEzICs1OCw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpj
cmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotU3RyaW5nIFBsdWdJbkluZm9T
dG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9IAotYm9vbCBXZWJDb3JlOjpQbHVnSW5J
bmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdp
bnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3IgV2ViQ29yZTo6Zm9jdXNS
aW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3Vz
UmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhckd0ay5jcHAJKHJldmlzaW9uIDI4NjEz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw4ICs0OCw5IEBAIHN0YXRpYyBnYm9vbGVhbiBndGtTY3JvbGxFdmVu
dENhbGxiYWNrKEcKIFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxi
YXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29u
dHJvbFNpemUpCiAgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNp
emUpCi0gICAgLCBtX2FkanVzdG1lbnQoR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3
KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSkKLXsgCit7CisgICAgbV9hZGp1c3RtZW50
ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wLCAwLjApKTsKKwogICAgIEd0a1Njcm9sbGJhciogc2Nyb2xsQmFyID0gb3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfU0NST0xMQkFSKDo6Z3RrX2hzY3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpIDoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JPTExCQVIoOjpndGtfdnNjcm9sbGJhcl9u
ZXcobV9hZGp1c3RtZW50KSk7CkBAIC03Myw4ICs3NCw4IEBAIFBsYXRmb3JtU2Nyb2xsYmFyOjp+
UGxhdGZvcm1TY3JvbGxiYXIoKQogICAgIC8qCiAgICAgICogdGhlIFdpZGdldCBkb2VzIG5vdCB0
YWtlIG92ZXIgb3duZXJzaGlwLgogICAgICAqLwotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZnVuYyhHX09CSkVDVChndGtXaWRnZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3Bv
aW50ZXI+KFBsYXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQpLCB0aGlzKTsKLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QoZ3RrV2lkZ2V0KCkp
LCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihndGtTY3JvbGxFdmVudENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGd0
a1dpZGdldCgpKSwgKGdwb2ludGVyKShQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2Vk
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JK
RUNUKGd0a1dpZGdldCgpKSwgKGdwb2ludGVyKShndGtTY3JvbGxFdmVudENhbGxiYWNrKSwgdGhp
cyk7CiAgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZ3RrV2lkZ2V0KCkpKTsKIH0KIApAQCAt
MTM2LDcgKzEzNyw3IEBAIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6Omdlb21ldHJ5Q2hhbmdlZCgK
IAogdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQq
LCBQbGF0Zm9ybVNjcm9sbGJhciogdGhhdCkKIHsKLSAgICB0aGF0LT5zZXRWYWx1ZShndGtfYWRq
dXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50KSk7CisgICAgdGhhdC0+c2V0VmFs
dWUoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1
c3RtZW50KSkpOwogfQogCiBzdGF0aWMgaW50IHNjcm9sbGJhclNpemUoKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZpc2lvbiAyODYxMykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MCw1ICsyOTAsMjIgQEAg
dm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvbwogCiB2b2lkIFdpZGdldDo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UG9pbnQgbG9j
ID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5s
b2NhdGlvbigpKTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBhbGxvY2F0aW9uIHNpemUgdG8g
YmUgbmVnYXRpdmUKKyAgICBJbnRTaXplIHN6ID0gZnJhbWVHZW9tZXRyeSgpLnNpemUoKTsKKyAg
ICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSB7IGxvYy54KCksIGxvYy55KCksIHN6LndpZHRoKCksIHN6LmhlaWdodCgpIH07CisgICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlTWFuYWdlci5jcHAJKHJldmlzaW9uIDI4NjEzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiQmFz
ZTY0LmgiCiAKKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTkyLDI2ICsxOTMsMjkgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZQogICAgIHN0YXJ0U2NoZWR1bGVkSm9icygpOwogCiAg
ICAgZmRfc2V0IGZkcmVhZDsKLSAgICBGRF9aRVJPKCZmZHJlYWQpOwogICAgIGZkX3NldCBmZHdy
aXRlOwotICAgIEZEX1pFUk8oJmZkd3JpdGUpOwogICAgIGZkX3NldCBmZGV4Y2VwOwotICAgIEZE
X1pFUk8oJmZkZXhjZXApOwogICAgIGludCBtYXhmZCA9IDA7Ci0gICAgY3VybF9tdWx0aV9mZHNl
dChtX2N1cmxNdWx0aUhhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQp
OwogCiAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7
CiAgICAgdGltZW91dC50dl91c2VjID0gc2VsZWN0VGltZW91dE1TICogMTAwMDsgICAgICAgLy8g
c2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcwogCiAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSB0
aW1lcnMgc2luY2Ugc2lnbmFscyBtYXkgaW50ZXJydXB0IHNlbGVjdCgpLCByYWlzaW5nIEVJTlRS
IGVycm9ycyBvbiBzb21lIHBsYXRmb3JtcwotICAgIHNldERlZmVycmluZ1RpbWVycyh0cnVlKTsK
LSAgICBpbnQgcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRl
eGNlcCwgJnRpbWVvdXQpOwotICAgIHNldERlZmVycmluZ1RpbWVycyhmYWxzZSk7CisgICAgV2Vi
Q29yZTo6c2V0RGVmZXJyaW5nVGltZXJzKHRydWUpOworICAgIGludCByYzsKKyAgICBkbyB7Cisg
ICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CisJRkRfWkVSTygmZmR3cml0ZSk7CisJRkRfWkVSTygm
ZmRleGNlcCk7CisJY3VybF9tdWx0aV9mZHNldChtX2N1cmxNdWx0aUhhbmRsZSwgJmZkcmVhZCwg
JmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworCXJjID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAm
ZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKKyAgICB9IHdoaWxlIChyYyA9
PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgV2ViQ29yZTo6c2V0RGVmZXJyaW5nVGltZXJz
KGZhbHNlKTsKIAogICAgIGlmICgtMSA9PSByYykgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
cHJpbnRmKCJiYWQ6IHNlbGVjdCgpIHJldHVybmVkIC0xXG4iKTsKKyAgICAgICAgcGVycm9yKCJi
YWQ6IHNlbGVjdCgpIHJldHVybmVkIC0xOiAiKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDogV2ViQ29yZS9jb25maWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2NvbmZp
Zy5oCShyZXZpc2lvbiAyODYxMykKKysrIFdlYkNvcmUvY29uZmlnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDYgKzc2LDEwIEBACiAjaW5jbHVkZSA8d3RmL0Rpc2FsbG93Q1R5cGUuaD4KICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oR1RLKQorI2RlZmluZSBXVEZfVVNFX05QT0JKRUNUIDEKKyNlbmRp
ZgorCiAjaWYgIUNPTVBJTEVSKE1TVkMpIC8vIGNhbid0IGdldCB0aGlzIHRvIGNvbXBpbGUgb24g
VmlzdWFsIEMrKyB5ZXQKICNkZWZpbmUgQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUyAxCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCShyZXZpc2lvbiAyODYxMykKKysrIFdl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShOUE9CSkVDVCkKLSNpbmNsdWRlIDxiaW5kaW5ncy9u
cHJ1bnRpbWUuaD4KKyNpbmNsdWRlIDxiaW5kaW5ncy9ucHJ1bnRpbWVfcHJveHkuaD4KICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
bkRhdGFiYXNlR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VHdGtfSAorI2RlZmluZSBQbHVnaW5EYXRhYmFzZUd0
a19ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0
ay5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgSW50U2l6ZTsKKyAg
ICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7CisgICAgY2xhc3MgUGx1
Z2luVmlld0d0azsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZUd0
az4sIFBsdWdpblBhY2thZ2VHdGtIYXNoPiBQbHVnaW5TZXQ7CisgIAorICAgIGNsYXNzIFBsdWdp
bkRhdGFiYXNlR3RrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFz
ZUd0ayogaW5zdGFsbGVkUGx1Z2lucygpOworICAgICAgICBQbHVnaW5WaWV3R3RrKiBjcmVhdGVQ
bHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAg
ICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAgICAgYm9v
bCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKyAg
ICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJik7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CisgICAgICAgIFBsdWdpblNldCBnZXRQbHVn
aW5zSW5QYXRocygpIGNvbnN0OworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIGZpbmRQbHVn
aW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKworICAgICAgICBQ
bHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZXh0ZW5zaW9uKTsKKworICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVs
dFBsdWdpblBhdGhzKCk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsK
KyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKKyAgICAgICAg
UGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdp
bkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdp
blN0cmVhbUd0ay5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgor
I2luY2x1ZGUgImtqc193aW5kb3cuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRl
IDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZp
bmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVk
ZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNs
dWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3Vz
aW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNP
YmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5n
IHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVu
dE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVz
dEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1
ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisg
ICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgICAgICwgbV9zZW5kTm90aWZp
Y2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJl
cXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlE
YXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5k
Tm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxv
YWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlm
aWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0dXJlCit9OworCitzdGF0aWMgY29uc3Qg
ZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCA9IDAuMDAxOworCitjbGFzcyBQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyR3RrIHsKK3B1YmxpYzoKKyAgICBQbHVnaW5NZXNzYWdlVGhyb3R0
bGVyR3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcpCisgICAgICAgIDogbV9wbHVnaW5WaWV3
KHBsdWdpblZpZXcpCisgICAgICAgICwgbV9iYWNrKDApLCBtX2Zyb250KDApCisgICAgICAgICwg
bV9tZXNzYWdlVGhyb3R0bGVUaW1lcih0aGlzLCAmUGx1Z2luTWVzc2FnZVRocm90dGxlckd0azo6
bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUg
dGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IE51bUlubGluZU1lc3NhZ2VzIC0gMTsgaSsrKQorICAgICAgICAgICAg
bV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1faW5saW5lTWVzc2FnZXNbaSArIDFdOworICAg
ICAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7Cisg
ICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07CisgICAg
fQorCisgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsoKQorICAgIHsKKyAgICAgICAgUGx1
Z2luTWVzc2FnZSogbmV4dDsKKyAgICAKKyAgICAgICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNz
YWdlID0gbV9mcm9udDsgbWVzc2FnZTsgbWVzc2FnZSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5l
eHQgPSBtZXNzYWdlLT5uZXh0OworICAgICAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7Cisg
ICAgICAgIH0gICAgICAgIAorICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoWElE
IGhXbmQsIGd1aW50IG1zZywgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0pIAorICAgIHsKKyAg
ICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IGFsbG9jYXRlTWVzc2FnZSgpOworCisgICAg
ICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOworICAgICAgICBtZXNzYWdlLT5tc2cgPSBtc2c7Cisg
ICAgICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJhbTsKKyAgICAgICAgbWVzc2FnZS0+bFBhcmFt
ID0gbFBhcmFtOworICAgICAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKworICAgICAgICBpZiAobV9i
YWNrKQorICAgICAgICAgICAgbV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKKyAgICAgICAgbV9iYWNr
ID0gbWVzc2FnZTsKKyAgICAgICAgaWYgKCFtX2Zyb250KQorICAgICAgICAgICAgbV9mcm9udCA9
IG1lc3NhZ2U7CisKKyAgICAgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNz
YWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
UGx1Z2luTWVzc2FnZSB7CisgICAgICAgIFhJRCBoV25kOworICAgICAgICBndWludCBtc2c7Cisg
ICAgICAgIGd1aW50IHdQYXJhbTsKKyAgICAgICAgZ2xvbmcgbFBhcmFtOworCisgICAgICAgIHN0
cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0OworICAgIH07CisgICAgCisgICAgdm9pZCBtZXNzYWdl
VGhyb3R0bGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+KikKKyAg
ICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OworICAgICAgICBt
X2Zyb250ID0gbV9mcm9udC0+bmV4dDsKKyAgICAgICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQor
ICAgICAgICAgICAgbV9iYWNrID0gMDsKKworCS8vICAgICAgICA6OkNhbGxXaW5kb3dQcm9jKG1f
cGx1Z2luVmlldy0+cGx1Z2luV25kUHJvYygpLCBtZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2cs
IG1lc3NhZ2UtPndQYXJhbSwgbWVzc2FnZS0+bFBhcmFtKTsKKworICAgICAgICBmcmVlTWVzc2Fn
ZShtZXNzYWdlKTsKKworICAgICAgICBpZiAobV9mcm9udCkKKyAgICAgICAgICAgIG1fbWVzc2Fn
ZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7
CisgICAgfQorCisgICAgUGx1Z2luTWVzc2FnZSogYWxsb2NhdGVNZXNzYWdlKCkKKyAgICB7Cisg
ICAgICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICAgICAgaWYgKG1fZnJlZUlubGlu
ZU1lc3NhZ2VzKSB7CisgICAgICAgICAgICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7
CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdlOworCisg
ICAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0KKworICAgIGJvb2wgaXNJbmxpbmVNZXNzYWdl
KFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2Ug
Pj0gJm1faW5saW5lTWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tO
dW1JbmxpbmVNZXNzYWdlcyAtIDFdOworICAgIH0KKworICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1
Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmVNZXNzYWdl
KG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVz
c2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2U7CisgICAgfQorCisgICAgUGx1
Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAg
ICBQbHVnaW5NZXNzYWdlKiBtX2Zyb250OworCisgICAgc3RhdGljIGNvbnN0IGludCBOdW1Jbmxp
bmVNZXNzYWdlcyA9IDQ7CisgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlu
bGluZU1lc3NhZ2VzXTsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2ZyZWVJbmxpbmVNZXNzYWdlczsK
KworICAgIFRpbWVyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRocm90dGxl
VGltZXI7Cit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwudXJsKCkuc3RhcnRzV2l0aCgiamF2YXNj
cmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMg
cmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJp
bmcodXJsLnVybCgpLm1pZCgxMSkpOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3Rr
OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKKworY29uc3Qgd2NoYXJfdCoga1dlYlBsdWdpblZp
ZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3Qgd2NoYXJfdCoga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7
IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gv
Mi4wIjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAg
IGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93ICYmIChtX3dp
bmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkg
eworICAgICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCks
IG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVp
Z2h0KCkgfTsKKwlpZiAobV93aWRnZXQpIHsKKwkgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkg
JiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKwkgICAgaWYgKCFtX25lZWRzWEVtYmVk
KSB7CisJICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihtX3dpZGdldCks
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworCQlndGtfeHRiaW5fcmVzaXpl
KG1fd2lkZ2V0LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsK
KwkgICAgfQorI2VuZGlmCisJfQorICAgIH0KK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3
aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3Vy
IGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAg
Ly8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9z
aW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxl
bWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVu
dFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRl
cnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOwor
CisgICAgcmV0dXJuIGNsaXBSZWN0OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZyYW1l
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1
bWVudCgpLT5wcmludGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVjdCAhPSBm
cmFtZUdlb21ldHJ5KCkpCisgICAgICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsK
KworICAgIGlmIChwYXJlbnQoKSkKKwkJaW5pdCgpOworCisgICAgdXBkYXRlV2luZG93KCk7Cisg
ICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6Omdlb21l
dHJ5Q2hhbmdlZCgpIGNvbnN0Cit7CisJV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKTsKKyAgICB1
cGRhdGVXaW5kb3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGb2N1cygpCit7Cisg
IC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgLy9TZXRGb2N1cyh3aW5kb3cpOworCisg
ICAgV2lkZ2V0OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNob3coKQor
eworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dp
bmRvdykKKyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19TSE9XTkEpOworCisgICAgV2lkZ2V0
OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7CisgICAgbV9pc1Zp
c2libGUgPSBmYWxzZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgICAv
L1Nob3dXaW5kb3cod2luZG93LCBTV19ISURFKTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSog
bnVsbFBsdWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxs
UGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsK
KworICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0
cnkoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWln
aHQoKSk7CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSAtIGlt
YWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgp
LmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFnZVJlY3QubW92
ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVj
dCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0
LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1
Z2luSW1hZ2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAg
ICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3Np
bmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRo
ZXNpemUgWGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVEcmF3YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIHNldE5Q
V2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFu
Y2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7
CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBpdCBvbiAqLworICAgIC8q
CisgICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAKKworICAgIGlmIChl
dmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0g
V01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAo
ZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7CisgICAgfQorICAgICov
CisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAo
IW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisvL2V4dGVybiBib29sIGln
bm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlTW91c2VFdmVu
dChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBT
eW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChl
dmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8qCisgICAgbnBFdmVudC5s
UGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAw
OworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9
IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlbW92
ZUV2ZW50IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVudCB8fCAKKyAg
ICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgeworICAgICAgICBucEV2ZW50
LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbkRvd24oKSkK
KyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0g
TUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0g
TUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkgeworICAgICAg
ICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAg
ICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKworICAgICAgICAgICAg
ICAgIC8vIEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5k
b2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigp
KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9
IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
MToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICovCisKKyAgICBLSlM6OkpT
TG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNv
ciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNw
cAorICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRT
ZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICAvL2lnbm9yZU5leHRT
ZXRDdXJzb3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlRXZl
bnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAg
ICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAg
IGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9h
cmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdl
dDo6c2V0UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0TlBXaW5k
b3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisJaWYgKCFwYXJlbnQoKSkKKwkJcmV0dXJuOworCisgICAgSW50UG9p
bnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRv
dyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBX
aW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsK
KyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93
LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAg
ICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNXaW5k
b3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOwor
ICAgIH0KKwlHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisJZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkg
JiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKwlpZiAoIW1fbmVlZHNYRW1iZWQpIHsK
KwkJZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBhbGxvY2F0aW9u
LngsIGFsbG9jYXRpb24ueSk7CisJCWd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIGFsbG9jYXRp
b24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKwl9CisjZW5kaWYKK30KKworYm9vbCBQbHVn
aW5WaWV3R3RrOjpzdGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIFBsdWdpblZp
ZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5kYXRhKCksIG1f
aW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1
ZXMsIE5VTEwpOworICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmll
dygwKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3VybC5pc0Vt
cHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJh
bWVMb2FkUmVxdWVzdDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9hZFJlcXVlc3Qs
IGZhbHNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID4gc3RyZWFtcyA9IG1fc3Ry
ZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJhdG9yIGVu
ZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1H
dGs+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5n
ZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAg
bV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5w
ZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXco
UGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0g
cGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBs
dWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0
aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3Ry
aW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHko
cmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJh
eSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0
YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpz
U3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAg
aWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVl
KTsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hv
dWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAg
ICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwudXJsKCkudXRm
OCgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRhcmdldGVkIEphdmFTY3JpcHQgcmVxdWVz
dHMgYXJlIG9ubHkgYWxsb3dlZCBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgSmF2YVNj
cmlwdCBwbHVnaW4KKyAgICAvLyBhbmQgdGhpcyBoYXMgYmVlbiBtYWRlIHN1cmUgaW4gOjpsb2Fk
LgorICAgIEFTU0VSVChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNF
bXB0eSgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZChyZXF1ZXN0LT5mcmFtZUxvYWRS
ZXF1ZXN0KCkuZnJhbWVOYW1lKCkpID09IG1fcGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4
ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3ll
ZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGZyYW1lLgorICAgIFJlZlB0
cjxGcmFtZT4gcGFyZW50RnJhbWUgPSAgbV9wYXJlbnRGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChqc1N0cmluZy5kZXBy
ZWNhdGVkU3RyaW5nKCksIHRydWUpOworCisgICAgaWYgKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVl
c3QoKS5mcmFtZU5hbWUoKS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5n
OworCisgICAgICAgIGlmICghZ2V0U3RyaW5nKHBhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLCBy
ZXN1bHQsIHJlc3VsdFN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1N0
cmluZyBjc3RyID0gcmVzdWx0U3RyaW5nLnV0ZjgoKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0
cmVhbUd0az4gc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBwYXJlbnRGcmFtZS5n
ZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1
ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAg
IG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0
cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFT
U0VSVCh0aW1lciA9PSAmbV9yZXF1ZXN0VGltZXIpOworICAgIEFTU0VSVChtX3JlcXVlc3RzLnNp
emUoKSA+IDApOworCisgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG1fcmVxdWVzdHNb
MF07CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBu
ZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0
bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUg
ZGVsZXRlZC4KKyAgICBpZiAobV9yZXF1ZXN0cy5zaXplKCkgPiAwKQorICAgICAgICBtX3JlcXVl
c3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0
ayogcmVxdWVzdCkKK3sKKyAgICBtX3JlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3Jl
cXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7CisKKyAg
ICBLVVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7Cisg
ICAgCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElE
X1VSTDsKKworICAgIFN0cmluZyB0YXJnZXQgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgp
OworCisgICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBu
byBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxh
eWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4u
CisgICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpICE9IG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmCisgICAgICAg
ICh0YXJnZXQuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkg
IT0gbV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwor
CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7
CisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX3BhcmVudEZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBpZiAoIXNldHRpbmdzIHx8
ICFzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBSZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1v
emlsbGEgZG9lcy4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAg
ICAgICB9IGVsc2UgaWYgKHRhcmdldC5pc051bGwoKSAmJiBtX21vZGUgPT0gTlBfRlVMTCkgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYSBKYXZhU2NyaXB0IHJlcXVlc3QgZnJvbSBhIHN0
YW5kYWxvbmUgcGx1Zy1pbiB0aGF0IGlzIHNlbGYtdGFyZ2V0dGVkCisgICAgICAgICAgICAvLyBi
ZWNhdXNlIHRoaXMgY2FuIGNhdXNlIHRoZSB1c2VyIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBibGFu
ayBwYWdlICgzNDI0MDM5KS4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFN
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSB8fCAhdGFy
Z2V0LmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgJiYgIXRhcmdl
dC5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3Bh
cmVudEZyYW1lKSB7CisgICAgICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBh
bGxvdyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRo
ZSBwbHVnLWluLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAg
ICAgIH0KKworICAgICAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbmV3IFBsdWdpblJl
cXVlc3RHdGsoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7
CisgICAgICAgIHNjaGVkdWxlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9w
YXJlbnRGcmFtZSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2VuZE5vdGlm
aWNhdGlvbiwgbm90aWZ5RGF0YSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKwor
ICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworfQorCitzdGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0
IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsU3Ry
aW5nID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShyZWxhdGl2ZVVSTFN0cmluZyk7CisK
KyAgICAvLyBTdHJpcCByZXR1cm4gY2hhcmFjdGVycworICAgIHVybFN0cmluZy5yZXBsYWNlKCdc
bicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisKKyAgICByZXR1cm4g
S1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6Omdl
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVy
bCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVx
dWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1f
YmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxz
ZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0
IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAm
JiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRl
ckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0
IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZm
ZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkr
KykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisg
ICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAg
ICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUg
cG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykg
eworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicp
CisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxu
XG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAg
ICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAg
ICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgz
NzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVP
TChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBD
UkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8v
IGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24K
KyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBu
ZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JM
RiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBF
T0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0
aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAg
ICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7
CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcwor
ICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisg
ICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUg
U3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJl
c3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKysp
IHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAm
JiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b3Vw
cGVyKG5hbWVbaV0pOworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBu
YW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b2xvd2Vy
KG5hbWVbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gbmFtZVtpXTsKKworICAg
ICAgICBpZiAobmFtZVtpXSA9PSAnLScpCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVy
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9
IGZhbHNlOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBhcnNlUkZDODIySGVh
ZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIGNvbnN0IGNoYXIq
IGVvbDsKKyAgICBTdHJpbmcgbGFzdEtleTsKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKKworICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIs
IG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCisgICAgd2hpbGUgKChlb2wg
PSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgeworICAgICAgICBjb25zdCBjaGFyKiBsaW5lID0g
Ynl0ZXM7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7CisgICAgICAgIAor
ICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0
b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KKyAgICAgICAgYnl0ZXMgPSBlb2wgKyAxOworICAg
ICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkKKyAgICAgICAgICAg
IGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4gYSBzcGFubmluZyBD
UkxGLgorCisgICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKKyAgICAgICAgaWYgKGxp
bmVMZW5ndGggPT0gMCkKKyAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBl
bmQgb2YgdGhlIGhlYWRlcgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKCps
aW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7CisgICAgICAgICAgICAvLyBDb250aW51YXRp
b24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgaWYgKGxhc3RLZXkuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5k
IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZp
b3VzIGhlYWRlcgorICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJG
aWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZSA9IERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAg
ICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5k
IG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAg
Zm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisr
KSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhl
YWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVS
RkM4MjJIZWFkZXJGaWVsZE5hbWUoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBj
b2xvbiAtIGxpbmUpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoY29sb24gPT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBEZXByZWNhdGVk
U3RyaW5nOjpmcm9tTGF0aW4xKGNvbG9uLCBlb2wgLSBjb2xvbik7CisKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAg
ICAgICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIHRtcCA9IG9sZFZhbHVlOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKKyAg
ICAgICAgICAgICAgICAgICAgdG1wICs9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMuc2V0KGxhc3RLZXksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBoZWFkZXJGaWVsZHM7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
aGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxl
biB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVh
ZGVyRmllbGRzOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUp
IHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGlu
MShidWYsIGxlbik7CisKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8v
IikpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAg
ICAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgICAgIGlmICghZ19maWxlX3Rlc3QgKChmaWxlbmFt
ZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxF
X1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZP
VU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRvIGJ1ZmZlcgorICAgICAg
ICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAiciIp
OworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgICAgICAvL2J1ZmZlci5yZXNpemUo
KTsKKworICAgICAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwg
ZmlsZUhhbmRsZSk7CisKKyAgICAgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisgICAgICAgIGlm
IChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKKworCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZm
ZXIucmVzaXplKGxlbik7CisgICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7
CisgICAgfQorCisgICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0YSgpOworICAg
IGludCBwb3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisgICAgCisgICAgaWYgKGFsbG93
SGVhZGVycykgeworICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7Cisg
ICAgICAgICAgICBwb3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJG
aXJzdEJsYW5rTGluZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7
CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRo
ZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgor
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1
ZmZlciwgbG9jYXRpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBi
dWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMg
cGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBw
b3N0LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2Ug
dGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFu
ZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAg
ICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29u
dGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3Ro
LnRvSW50KCksIChpbnQpZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRz
LnJlbW92ZSgiQ29udGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9
IGxvY2F0aW9uOworICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVs
ZHMoaGVhZGVyRmllbGRzKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LnNldEhUVFBCb2R5KFBhc3NSZWZQdHI8Rm9ybURhdGE+KG5ldyBGb3JtRGF0YShwb3N0RGF0YSwg
cG9zdERhdGFMZW5ndGgpKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFy
Z2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRp
b24sIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkxOb3Rp
ZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJu
IGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhLCB0cnVl
LCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlKQoreworICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0
byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgorICAgIHJl
dHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZp
bGUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6Om5ld1N0cmVhbShOUE1JTUVUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOworfQorCitpbnQzMiBQbHVnaW5WaWV3R3RrOjp3cml0ZShOUFN0cmVhbSogc3RyZWFt
LCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIC0xOworfQorCitOUEVycm9yIFBsdWdpblZpZXdH
dGs6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQorewor
ICAgIFBsdWdpblN0cmVhbUd0ayogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0
cmVhbUd0ayo+KHN0cmVhbS0+bmRhdGEpOworCisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3Ry
ZWFtR3RrOjpvd25lckZvclN0cmVhbShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJl
dHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SOworCisgICAgYnJvd3NlclN0cmVhbS0+
Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKK30KKworY29uc3QgY2hhciogUGx1Z2luVmlld0d0azo6dXNlckFnZW50KCkKK3sKKyAgICBp
ZiAobV9xdWlya3MgJiBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkKKyAgICAgICAg
cmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisKKyAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkp
CisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2Vu
dChtX3VybCkudXRmOCgpOworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgU3Ry
aW5nIHMgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKG1lc3NhZ2UpOworCisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9t
ZSgpLT5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUsIHMpOworfQorCitOUEVycm9yIFBs
dWdpblZpZXdHdGs6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkgJiYgIWRlZmluZWQgKEdUS19ESVNBQkxFX1BMVUdJTlMpCisJICAgIGNhc2UgTlBOVnh0QXBw
Q29udGV4dDogeworCQkJaWYgKCFtX25lZWRzWEVtYmVkKSB7CisJCQkJKih2b2lkICoqKXZhbHVl
ID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTihtX3dpZGdldCktPnh0
Y2xpZW50Lnh0ZGlzcGxheSk7CisKKwkJCQlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisJCQl9IGVs
c2UKKwkJCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKwkJfQorI2VuZGlmCisKKyAgICAg
ICAgY2FzZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKwkJCSooKHVuc2lnbmVk
IGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKwkJCSooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkg
PSAwOworI2VuZGlmCisJCQlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisJCX0KKworICAgICAgICBj
YXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
WDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorCQkJKigodW5zaWduZWQgbG9u
ZyAqKXZhbHVlKSA9IHRydWU7CisjZWxzZQorCQkJKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9
IGZhbHNlOworI2VuZGlmCisJCQlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisJCX0KKworICAgICAg
ICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisK
KyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisg
ICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKwor
ICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSB3
aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnRO
UE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7
CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBt
X2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19j
YXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAg
ICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBk
ZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25w
cnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAg
ICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAg
ICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdp
blNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAg
IHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyAgICAgICAgICAg
ICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKEdUS19XSURHRVQoY29udGFpbmluZ1dp
bmRvdygpKS0+d2luZG93KTsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUo
TlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFi
bGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1f
aXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBtX2lz
VHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVy
KQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9pbnZhbGlkYXRlVGltZXIpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAgICAg
ICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KG1faW52YWxpZFJlY3RzW2ldKTsKKyAgICBtX2ludmFs
aWRSZWN0cy5jbGVhcigpOworfQorCisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJl
Y3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwg
cmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3Qt
PnRvcCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIC8qIEZJWE1FIC0gSW52
YWxpZGF0ZSB0aGUgcmVjdGFuZ2xlCisJCSAgIFJFQ1QgaW52YWxpZFJlY3Qocik7CisJCSAgIElu
dmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKKwkJKi8KKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAobV9xdWlya3MgJiBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxp
ZGF0ZSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5kKHIpOworICAgICAgICAg
ICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAgIG1f
aW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYg
KG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogRklYTUUgLSBJbnZhbGlk
YXRlIHRoZSByZWdpb24KKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwg
JnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICAqLworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICAvKiBGSVhNRSAtIEZvcmNlIGEgcmVk
cmF3CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgOjpVcGRhdGVXaW5kb3cobV93aW5k
b3cpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVXaW5kb3coY29udGFpbmluZ1dpbmRvdygp
KTsKKyAgICAqLworfQorCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogUGx1Z2luVmlld0d0azo6
YmluZGluZ0luc3RhbmNlKCkKK3sKKyAgICBOUE9iamVjdCogb2JqZWN0ID0gMDsKKworICAgIGlm
ICghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRh
YmxlTlBPYmplY3QsICZvYmplY3QpOworICAgIH0KKworICAgIGlmIChucEVyciAhPSBOUEVSUl9O
T19FUlJPUiB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJWE1FIC0g
ZXJyb3I6IGluY29tcGxldGUgdHlwZSDigJhLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZeKAmSB1c2Vk
IGluIG5lc3RlZCBuYW1lIHNwZWNpZmllcgorICAgIC8vIGVycm9yOiBpbmNvbXBsZXRlIHR5cGUg
4oCYS0pTOjpCaW5kaW5nczo6SW5zdGFuY2XigJkgdXNlZCBpbiBuZXN0ZWQgbmFtZSBzcGVjaWZp
ZXIKKyAgICAvL1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJl
bnRGcmFtZS0+Y3JlYXRlUm9vdE9iamVjdCh0aGlzLCBtX3BhcmVudEZyYW1lLT5zY3JpcHRQcm94
eSgpLT5pbnRlcnByZXRlcigpKTsKKyAgICAvL0tKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0
YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJ
bnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3Qu
cmVsZWFzZSgpKTsKKworICAgIC8vX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICAv
L3JldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUGx1Z2luVmlld0d0azo6
flBsdWdpblZpZXdHdGsoKQoreworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyht
X3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1D
b3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7
CisKKwlpZiAoIW1fbmVlZHNYRW1iZWQgJiYgbV93aWRnZXQpCisJCWd0a193aWRnZXRfZGVzdHJv
eShtX3dpZGdldCk7CisJbV93aW5kb3cgPSAwOworCXNldEd0a1dpZGdldChOVUxMKTsKKworICAg
IG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOworCisg
ICAgaWYgKG1fcGx1Z2luICYmICEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVn
aW4pKQorICAgICAgICBtX3BsdWdpbi0+dW5sb2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSkKK3sKKyAgICBBU1NF
UlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShz
dHJlYW0pOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRldGVybWluZVF1aXJrcyhjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQoreworICAgIC8vIFRoZSBmbGFzaCBwbHVnaW4gb25seSByZXF1ZXN0
cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50Cisg
ICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAg
ICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQ7CisgICAg
ICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlOworICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzOworICAg
IH0KKworICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5Q
UF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBj
YWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAg
ICBpZiAobV9wbHVnaW4tPm5hbWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbV9wbHVnaW4t
Pm5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7CisgICAgICAgIG1fcXVpcmtzIHw9
IFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAgICAgLy8gV2luZG93
bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVz
dCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRv
IHRoZSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1JlbW92ZVdpbmRv
d2xlc3NWaWRlb1BhcmFtOworICAgIH0KKworICAgIC8vIFRoZSBEaXZYIHBsdWdpbiBzZXRzIGl0
cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMg
aXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcg
aGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1pbWVUeXBlID09ICJ2aWRlby9kaXZ4IikKKyAg
ICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKwor
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBO
UFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisgICAgLy8gTlBPYmpl
Y3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3
aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAgICAvLyBUaHVzLCB3
ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0
aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxl
bS81NDg3NzQyPi4KKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGln
aHQiKQorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW47CisK
KyAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQ
cm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAo
bWltZVR5cGUgPT0gImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVp
cmtzIHw9IFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVs
eTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7
CisgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisK
KyAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFy
YW1Db3VudCA9IDA7CisKKyAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIq
Kj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMg
PSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6
ZSkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICBpZiAoKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkg
JiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRd
ID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVl
c1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAg
ICAgIHBhcmFtQ291bnQrKzsKKyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50
OworfQorCitQbHVnaW5WaWV3R3RrOjpQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorICAgIDogbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9w
YXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwg
bV9pc1N0YXJ0ZWQoZmFsc2UpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2Jhc2VVUkwobV9w
YXJlbnRGcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50
KCktPmJhc2VVUkwoKSkpCisgICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkpCisgICAgLCBtX3JlcXVlc3RUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6cmVxdWVz
dFRpbWVyRmlyZWQpCisgICAgLCBtX2ludmFsaWRhdGVUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0
azo6aW52YWxpZGF0ZVRpbWVyRmlyZWQpCisgICAgLCBtX3BhcmFtTmFtZXMoMCkKKyAgICAsIG1f
cGFyYW1WYWx1ZXMoMCkKKyAgICAsIG1fcXVpcmtzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAg
ICwgbV9pc1dpbmRvd2VkKHRydWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAg
LCBtX2lzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAg
ICwgbV9sYXN0TWVzc2FnZSgwKQorICAgICwgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNl
KQorICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJl
YW0oMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQorewor
ICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5O
b3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9
ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0gdGhpczsKKworICAg
IG1fbWltZVR5cGUgPSBtaW1lVHlwZS51dGY4KCk7CisgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVU
eXBlKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworCisg
ICAgbV9tb2RlID0gbV9sb2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQ7CisKKyAgICBy
ZXNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW5pdCgpCit7CisgICAgaWYg
KG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6
ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0
dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAw
OworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0
dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKwkJbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hF
bWJlZCwgJm1fbmVlZHNYRW1iZWQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkg
JiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKwlpZiAobV9uZWVkc1hFbWJlZCkgewor
CQltX3dpZGdldCA9IGd0a19zb2NrZXRfbmV3KCk7CisJCWd0a19jb250YWluZXJfYWRkKG1fcGFy
ZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7CisJCXNldEd0
a1dpZGdldChtX3dpZGdldCk7CisJfSBlbHNlCisJCW1fd2lkZ2V0ID0gZ3RrX3h0YmluX25ldyhH
VEtfV0lER0VUKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpKS0+d2lu
ZG93LCBOVUxMKTsKKyNlbHNlCisJbV93aWRnZXQgPSBnZGtfc29ja2V0X25ldygpOworCWd0a19j
b250YWluZXJfYWRkKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBt
X3dpZGdldCk7CisJc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyNlbmRpZgorCisJR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBmcmFtZUdlb21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCku
eSgpLCBmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSwgZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIH07
CisJZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lO
UykKKwlpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKwkJZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtf
WFRCSU4obV93aWRnZXQpLCBhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisJCWd0a194dGJp
bl9yZXNpemUobV93aWRnZXQsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsK
Kwl9CisjZW5kaWYKKwlndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworI2lmIGRlZmluZWQo
R0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKwlpZiAobV9uZWVkc1hFbWJlZCkg
eworCQl3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkobV93aWRnZXQtPndpbmRvdyk7
CisJCXdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3dpbmRvd19nZXRfdmlzdWFs
KG1fd2lkZ2V0LT53aW5kb3cpKTsKKwkJd3MtPmRlcHRoID0gZ2RrX3dpbmRvd19nZXRfdmlzdWFs
KG1fd2lkZ2V0LT53aW5kb3cpLT5kZXB0aDsKKwkJd3MtPmNvbG9ybWFwID0gR0RLX0NPTE9STUFQ
X1hDT0xPUk1BUChnZGtfd2luZG93X2dldF9jb2xvcm1hcChtX3dpZGdldC0+d2luZG93KSk7CisJ
CW1fd2luZG93ID0gR0RLX1dJTkRPV19YV0lORE9XKG1fd2lkZ2V0LT53aW5kb3cpOworCX0gZWxz
ZSB7CisJCXdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5OworCQl3
cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisJCXdz
LT5kZXB0aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7CisJCXdzLT5j
b2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisJCW1f
d2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisKKwkJWEZsdXNoICh3cy0+
ZGlzcGxheSk7CisJfQorCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKyNp
ZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisJbV93aW5kb3cgPSBHREtfV0lORE9XX0hXTkQobV93
aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAg
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2lu
ZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25w
V2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21l
dHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1fcGFyZW50
RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0KCksIGZhbHNlLCAwKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5
KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNw
b25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworICAg
IAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIEFTU0VS
VChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGlu
ZygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luVmlld0d0a19ICisjZGVmaW5l
IFBsdWdpblZpZXdHdGtfSAorCisjaW5jbHVkZSA8Z3RrL2d0a3dpZGdldC5oPgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CisgICAgICAgIGNs
YXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7
CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBNb3VzZUV2ZW50OworICAgIGNs
YXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlckd0azsKKyAgICBjbGFz
cyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblJlcXVlc3RHdGs7CisgICAgY2xh
c3MgUGx1Z2luU3RyZWFtR3RrOworICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CisgICAgY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKKyAgICAKKyAgICBlbnVtIFBsdWdpblF1aXJrcyB7CisgICAgICAg
IFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAorICAgICAgICBQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAorICAgICAgICBQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCisgICAgICAgIFBsdWdpblF1aXJrUmVt
b3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCisgICAgICAgIFBsdWdpblF1aXJrVGhy
b3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCisgICAgICAgIFBsdWdpblF1aXJr
RG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFdu
ZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2CisgICAgfTsKKworICAgIGVu
dW0gUGx1Z2luU3RhdHVzIHsKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwK
KyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3Rh
dHVzTG9hZGVkU3VjY2Vzc2Z1bGx5CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblZpZXdHdGsg
OiBwdWJsaWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZpZXdHdGsoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2lu
LCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld0d0aygp
OworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cGx1Z2luLmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdGFuY2U7IH0KKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0
Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2luVmlldygpOwor
CisgICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKKwor
ICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0K
KworICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsK
KyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpOworICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUs
IHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBC
b29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMiB3cml0
ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgICAgIE5Q
RXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwor
ICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBzdGF0dXMoY29u
c3QgY2hhciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0
KE5QUmVjdCopOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworICAg
ICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFt
KFBsdWdpblN0cmVhbUd0ayopOworCisgICAgICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRGb2N1cygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93
Q2xpcFJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50
Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworCisgICAg
ICAgIGdsb25nIHduZFByb2MoWElEIGhXbmQsIGd1aW50IG1lc3NhZ2UsIGd1aW50IHdQYXJhbSwg
Z2xvbmcgbFBhcmFtKTsKKworICAgICAgICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZworICAg
ICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZv
aWQgZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
VmFsdWVzKTsKKyAgICAgICAgdm9pZCBpbml0KCk7CisgICAgICAgIGJvb2wgc3RhcnQoKTsKKyAg
ICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5W
aWV3KFBsdWdpblZpZXdHdGsqKTsKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAg
ICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAgICAgICAg
UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+IG1fcGx1Z2luOworICAgICAgICBFbGVtZW50KiBtX2Vs
ZW1lbnQ7CisgICAgICAgIEZyYW1lKiBtX3BhcmVudEZyYW1lOworICAgICAgICBib29sIG1faXNT
dGFydGVkOworICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBLVVJMIG1fYmFzZVVSTDsKKyAg
ICAgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gbV9p
bnZhbGlkUmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0
R3RrKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsK
KyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiopOwor
ICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7
CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1fcmVxdWVzdFRpbWVyOworICAgICAgICBU
aW1lcjxQbHVnaW5WaWV3R3RrPiBtX2ludmFsaWRhdGVUaW1lcjsKKworICAgICAgICBPd25QdHI8
UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVyOworCisgICAgICAg
IHZvaWQgdXBkYXRlV2luZG93KCkgY29uc3Q7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdp
bkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZvaWQg
aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZvaWQgaGFuZGxl
TW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisKKyAgICAgICAgaW50IG1fbW9kZTsKKyAgICAgICAg
aW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKKyAgICAgICAg
Y2hhcioqIG1fcGFyYW1WYWx1ZXM7CisKKyAgICAgICAgQ1N0cmluZyBtX21pbWVUeXBlOworICAg
ICAgICBDU3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAg
ICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93
OworCisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPiBtX3N0cmVhbXM7
CisgICAgICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0R3RrKj4gbV9yZXF1ZXN0czsKKworICAgICAg
ICBpbnQgbV9xdWlya3M7CisgICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOworICAgICAgICBib29s
IG1faXNUcmFuc3BhcmVudDsKKyAgICAgICAgYm9vbCBtX2lzVmlzaWJsZTsKKyAgICAgICAgYm9v
bCBtX2hhdmVJbml0aWFsaXplZDsKKworICAgICAgICBYSUQgbV93aW5kb3c7IC8vIGZvciB3aW5k
b3dlZCBwbHVnLWlucworICAgICAgICBtdXRhYmxlIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhl
IGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KKyAgICAgICAgbXV0YWJs
ZSBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdpbmRvdyByZWN0LgorCisgICAgICAgIHVu
c2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQ
cm9jOworCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJlZlB0cjxQbHVn
aW5TdHJlYW1HdGs+IG1fbWFudWFsU3RyZWFtOworCisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3
R3RrKiBzX2N1cnJlbnRQbHVnaW5WaWV3OworCisJR3RrV2lkZ2V0KiBtX3dpZGdldDsKKwlib29s
IG1fbmVlZHNYRW1iZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3Rv
cmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3By
b3h5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2luIHZpZXcg
aXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBsdWctaW5z
IHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBhIE5VTEwg
aW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWluIHZpZXcg
dGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBjdXJyZW50
IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5WaWV3R3Rr
OjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBhbmQgU2hv
Y2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdlbnQgd2l0
aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlld0d0ayogcGx1Z2luVmlld0Zvcklu
c3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5k
YXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KGluc3RhbmNl
LT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3KCk7
Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFs
bG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBmcmVl
KHB0cik7Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2godWludDMyIHNpemUpCit7CisgICAgLy8g
RG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5Q
Qm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Cit9
CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdl
KiByYW5nZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK05Q
RXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQsIG5vdGlm
eURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJvciBOUE5f
UG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7
Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9z
dFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5QTl9OZXdT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwg
TlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2ludDMyIE5Q
Tl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCog
YnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53
cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJveVN0cmVh
bShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAg
ICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShz
dHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3Rh
bmNlKQoreworICAgIFBsdWdpblZpZXdHdGsqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBOX1VzZXJB
Z2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1bmN0aW9u
IQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRob3V0IGhh
dmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0dXJuIDA7
CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9TdGF0dXMo
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5fSW52YWxp
ZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQoreworICAgIHBsdWdp
blZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRSZWN0KTsK
K30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIGlu
dmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52
YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VSZWRyYXco
TlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmZv
cmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCitO
UEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2YUVudigp
Cit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogTlBOX0dl
dEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVy
biAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2Us
IE5QQm9vbCBlbmFibGVkKQoreworfQorCit2b2lkCitOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRl
KE5QUCBpbnN0YW5jZSkKK3sKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTog
bmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0y
OnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAq
IFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVy
c2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8K
KyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVy
IHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVNQkVE
IERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2lu
YWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRl
ZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhl
IEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1
dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdlcyAq
LworI2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUgWEVN
QkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVB
Q1RJVkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAgICAg
IDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFhF
TUJFRF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNfTkVY
VCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAgICAg
ICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBY
RU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZ
X09OICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAgICAg
ICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9HVEtf
R1JBQl9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkg
ICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLworI2Rl
ZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZP
Q1VTX0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAgICAg
ICAgICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhFTUJF
RF9NQVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luRGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRl
YnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBQTFVHSU5fREVCVUdfSF9fCisjZGVmaW5lIFBMVUdJTl9ERUJVR19IX18KKworI2luY2x1
ZGUgIm5wcnVudGltZV9wcm94eS5oIgorCitzdGF0aWMgY2hhciogZXJyb3JTdHJpbmdzW10gPSB7
CisgICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJF
cnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VO
RVJJQ19FUlJPUiAqLworICAgICJJbnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1p
bi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRh
YmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAi
TG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURf
RVJST1IgKi8KKyAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9P
Rl9NRU1PUllfRVJST1IgKi8KKyAgICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyog
TlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlz
c2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLwor
ICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIs
IC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBt
aXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwg
bWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUg
bWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0
cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2Fi
bGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAg
ICAiVW5rbm93biBlcnJvciBjb2RlIgorfTsKKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgTE9H
X05QRVJST1IoZXJyKSBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSBfUlBURjIoX0NSVF9XQVJO
LCAiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGVycm9yU3RyaW5nc1tlcnJdKQorI2RlZmluZSBM
T0dfUExVR0lOX05FVF9FUlJPUigpIF9SUFRGMShfQ1JUX1dBUk4sICIlczogU3RyZWFtIGZhaWxl
ZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnks
IG9yIG90aGVyIHByb2JsZW1zLlxuIiwgX19GVU5DVElPTl9fKQorI2Vsc2UKKyNkZWZpbmUgTE9H
X1BMVUdJTl9ORVRfRVJST1IoKSAoKHZvaWQpMCkKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSAo
KHZvaWQpMCkKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBm
dW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25z
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgX05QRlVOQ1RJ
T05TX0hfCisjZGVmaW5lIF9OUEZVTkNUSU9OU19IXworCisjaW5jbHVkZSAibnBydW50aW1lX3By
b3h5LmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lm
IGRlZmluZWQoWFBfV0lOKQorI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUp
IF90eXBlIChfX3N0ZGNhbGwgKiBfbmFtZSkKKyNlbHNlCisjZGVmaW5lIEVYUE9SVEVEX0NBTExC
QUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKCogX25hbWUpCisjZW5kaWYKKwordHlwZWRlZiBOUEVy
cm9yICgqTlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciog
VVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVy
cm9yICgqTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1
ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3Qp
OwordHlwZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiogc3RyZWFtKTsK
K3R5cGVkZWYgaW50MzIgKCpOUE5fV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFt
KiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5Q
Tl9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBO
UFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBOX1N0YXR1c1Byb2NQdHIpKE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit0eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5f
VXNlckFnZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fTWVt
QWxsb2NQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVBy
b2NQdHIpKHZvaWQqIHB0cik7Cit0eXBlZGVmIHVpbnQzMiAoKk5QTl9NZW1GbHVzaFByb2NQdHIp
KHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciko
TlBCb29sIHJlbG9hZFBhZ2VzKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZVByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7
Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5Q
UFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52
YWxpZGF0ZVJlY3RQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVjdCAqcmVjdCk7Cit0eXBlZGVm
IHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWdp
b24gcmVnaW9uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIpKE5QUCBp
bnN0YW5jZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJy
b3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBj
b25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZp
bGUpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7Cit0eXBl
ZGVmIHZvaWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVk
ZWYgdm9pZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNl
LCBOUEJvb2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0
YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKKwordHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VW
YXJpYW50VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKKwordHlwZWRlZiBOUElk
ZW50aWZpZXIgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIpIChjb25zdCBOUFVURjgg
Km5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0cikg
KGNvbnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyICpp
ZGVudGlmaWVycyk7Cit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRJbnRJZGVudGlmaWVy
UHJvY1B0cikgKGludDMyX3QgaW50aWQpOwordHlwZWRlZiBpbnQzMl90ICgqTlBOX0ludEZyb21J
ZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKK3R5cGVkZWYgYm9v
bCAoKk5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIpOwordHlwZWRlZiBOUFVURjggKigqTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIpIChO
UElkZW50aWZpZXIgaWRlbnRpZmllcik7CisKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0
ZU9iamVjdFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFDbGFzcyk7Cit0eXBlZGVmIE5QT2JqZWN0
KiAoKk5QTl9SZXRhaW5PYmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Cit0eXBlZGVmIHZv
aWQgKCpOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVu
dGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291
bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VEZWZhdWx0
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywg
dW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5Q
Tl9FdmFsdWF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUFN0cmluZyAqc2Ny
aXB0LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQ
cm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5h
bWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9TZXRQcm9wZXJ0eVBy
b2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFt
ZSwgY29uc3QgTlBWYXJpYW50ICp2YWx1ZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSGFzUHJvcGVy
dHlQcm9jUHRyKSAoTlBQLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUpOwordHlwZWRlZiBib29sICgqTlBOX0hhc01ldGhvZFByb2NQdHIpIChOUFAgbnBwLCBOUE9i
amVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5Q
Tl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9TZXRFeGNlcHRpb25Qcm9j
UHRyKSAoTlBPYmplY3QgKm9iaiwgY29uc3QgTlBVVEY4ICptZXNzYWdlKTsKK3R5cGVkZWYgYm9v
bCAoKk5QTl9FbnVtZXJhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElk
ZW50aWZpZXIgKippZGVudGlmaWVyLCB1aW50MzJfdCAqY291bnQpOworCit0eXBlZGVmIE5QRXJy
b3IgKCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2Us
IHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBT
YXZlZERhdGEqIHNhdmVkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95UHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQ
X1NldFdpbmRvd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRvdyk7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVU
eXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2KiBzdHlw
ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKK3R5cGVkZWYgdm9pZCAo
Kk5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0s
IGNvbnN0IGNoYXIqIGZuYW1lKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVSZWFkeVByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSk7Cit0eXBlZGVmIGludDMyICgqTlBQ
X1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IG9m
ZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7Cit0eXBlZGVmIHZvaWQgKCpOUFBfUHJp
bnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQpOwordHlwZWRl
ZiBpbnQxNiAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogZXZl
bnQpOwordHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
Y29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwordHlw
ZWRlZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9T
ZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQg
KnZhbHVlKTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0sodm9pZCwgTlBQX1NodXRkb3duUHJv
Y1B0cikodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAqKCpOUFBfR2V0SmF2YUNsYXNzUHJvY1B0ciko
dm9pZCk7Cit0eXBlZGVmIHZvaWQqICAgSlJJR2xvYmFsUmVmOyAvL25vdCB1c2luZyB0aGlzIHJp
Z2h0IG5vdworCit0eXBlZGVmIHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNzIHsKKyAgICB1aW50MTYg
c2l6ZTsKKyAgICB1aW50MTYgdmVyc2lvbjsKKyAgICAKKyAgICBOUE5fR2V0VVJMUHJvY1B0ciBn
ZXR1cmw7CisgICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBvc3R1cmw7CisgICAgTlBOX1JlcXVlc3RS
ZWFkUHJvY1B0ciByZXF1ZXN0cmVhZDsKKyAgICBOUE5fTmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJl
YW07CisgICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUE5fRGVzdHJveVN0cmVhbVBy
b2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUE5fU3RhdHVzUHJvY1B0ciBzdGF0dXM7CisgICAg
TlBOX1VzZXJBZ2VudFByb2NQdHIgdWFnZW50OworICAgIE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVt
YWxsb2M7CisgICAgTlBOX01lbUZyZWVQcm9jUHRyIG1lbWZyZWU7CisgICAgTlBOX01lbUZsdXNo
UHJvY1B0ciBtZW1mbHVzaDsKKyAgICBOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1
Z2luczsKKyAgICBOUE5fR2V0SmF2YUVudlByb2NQdHIgZ2V0SmF2YUVudjsKKyAgICBOUE5fR2V0
SmF2YVBlZXJQcm9jUHRyIGdldEphdmFQZWVyOworICAgIE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRy
IGdldHVybG5vdGlmeTsKKyAgICBOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIgcG9zdHVybG5vdGlm
eTsKKyAgICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QTl9TZXRWYWx1ZVBy
b2NQdHIgc2V0dmFsdWU7CisgICAgTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0ciBpbnZhbGlkYXRl
cmVjdDsKKyAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsK
KyAgICBOUE5fRm9yY2VSZWRyYXdQcm9jUHRyIGZvcmNlcmVkcmF3OworICAgIAorICAgIE5QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyOworICAgIE5QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcnM7CisgICAgTlBO
X0dldEludElkZW50aWZpZXJQcm9jUHRyIGdldGludGlkZW50aWZpZXI7CisgICAgTlBOX0lkZW50
aWZpZXJJc1N0cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlzc3RyaW5nOworICAgIE5QTl9VVEY4RnJv
bUlkZW50aWZpZXJQcm9jUHRyIHV0Zjhmcm9taWRlbnRpZmllcjsKKyAgICBOUE5fSW50RnJvbUlk
ZW50aWZpZXJQcm9jUHRyIGludGZyb21pZGVudGlmaWVyOworICAgIE5QTl9DcmVhdGVPYmplY3RQ
cm9jUHRyIGNyZWF0ZW9iamVjdDsKKyAgICBOUE5fUmV0YWluT2JqZWN0UHJvY1B0ciByZXRhaW5v
YmplY3Q7CisgICAgTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyIHJlbGVhc2VvYmplY3Q7CisgICAg
TlBOX0ludm9rZVByb2NQdHIgaW52b2tlOworICAgIE5QTl9JbnZva2VEZWZhdWx0UHJvY1B0ciBp
bnZva2VEZWZhdWx0OworICAgIE5QTl9FdmFsdWF0ZVByb2NQdHIgZXZhbHVhdGU7CisgICAgTlBO
X0dldFByb3BlcnR5UHJvY1B0ciBnZXRwcm9wZXJ0eTsKKyAgICBOUE5fU2V0UHJvcGVydHlQcm9j
UHRyIHNldHByb3BlcnR5OworICAgIE5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIgcmVtb3ZlcHJv
cGVydHk7CisgICAgTlBOX0hhc1Byb3BlcnR5UHJvY1B0ciBoYXNwcm9wZXJ0eTsKKyAgICBOUE5f
SGFzTWV0aG9kUHJvY1B0ciBoYXNtZXRob2Q7CisgICAgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQ
cm9jUHRyIHJlbGVhc2V2YXJpYW50dmFsdWU7CisgICAgTlBOX1NldEV4Y2VwdGlvblByb2NQdHIg
c2V0ZXhjZXB0aW9uOworICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwdXNo
cG9wdXBzZW5hYmxlZHN0YXRlOworICAgIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRy
IHBvcHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5fRW51bWVyYXRlUHJvY1B0ciBlbnVtZXJh
dGU7Cit9IE5QTmV0c2NhcGVGdW5jczsKKwordHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3Mg
eworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIE5QUF9OZXdQcm9j
UHRyIG5ld3A7CisgICAgTlBQX0Rlc3Ryb3lQcm9jUHRyIGRlc3Ryb3k7CisgICAgTlBQX1NldFdp
bmRvd1Byb2NQdHIgc2V0d2luZG93OworICAgIE5QUF9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVh
bTsKKyAgICBOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUFBf
U3RyZWFtQXNGaWxlUHJvY1B0ciBhc2ZpbGU7CisgICAgTlBQX1dyaXRlUmVhZHlQcm9jUHRyIHdy
aXRlcmVhZHk7CisgICAgTlBQX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUFBfUHJpbnRQcm9j
UHRyIHByaW50OworICAgIE5QUF9IYW5kbGVFdmVudFByb2NQdHIgZXZlbnQ7CisgICAgTlBQX1VS
TE5vdGlmeVByb2NQdHIgdXJsbm90aWZ5OworICAgIEpSSUdsb2JhbFJlZiBqYXZhQ2xhc3M7Cisg
ICAgTlBQX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKKyAgICBOUFBfU2V0VmFsdWVQcm9jUHRy
IHNldHZhbHVlOworfSBOUFBsdWdpbkZ1bmNzOworCit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNL
KE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdp
bkZ1bmNzKik7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRN
SU1FRGVzY3JpcHRpb25GdW5jUHRyKSh2b2lkKTsKKworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQor
dHlwZWRlZiB2b2lkICAgICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5j
UHRyKSh2b2lkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVu
Y3MqLCBOUFBsdWdpbkZ1bmNzKiwgTlBQX1NodXRkb3duUHJvY1B0ciopOworI2VuZGlmCisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4u
YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MzkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13
aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAq
IHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJF
R0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BM
IDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhl
IE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsg
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0
aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBo
dHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICog
V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4g
U2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBy
aWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUg
T3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAq
CisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1
biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwg
RGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Bl
ci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBB
bHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVy
IHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAq
IGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUg
YXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxs
b3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRl
cm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVy
cyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92
aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3Ro
ZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8g
bm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUg
b2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5T
RSBCTE9DSyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRnZXQgYWxsb3dzIGZv
ciBYdCB0b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RLIGFwcGxpY2F0aW9u
LiAgCisgKi8KKworI2luY2x1ZGUgInhlbWJlZC5oIgorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgor
I2luY2x1ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVkZSA8Z3RrL2d0a3ByaXZhdGUuaD4KKyNp
bmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQu
aD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisK
Ky8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgx
MS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5z
aWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisvKiB1bmNvbW1lbnQgdGhpcyBp
ZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2lkZ2V0CisgICBjcmVhdGlv
biBhbmQgZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJVR19YVEJJTgorCisjZGVmaW5lIFhUQklO
X01BWF9FVkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fY2xhc3Nf
aW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtf
eHRiaW5faW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAqeHRiaW4pOworc3RhdGljIHZvaWQgICAg
ICAgICAgICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7Citz
dGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl91bnJlYWxpemUgICAgKEd0a1dpZGdldCAg
ICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fZGVzdHJveSAg
ICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194
dGJpbl9zaHV0ZG93biAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKKworLyogWHQgYXdhcmUg
WEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaW5pdCAgICAgIChYdENsaWVu
dCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
c3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29sb3JtYXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfY3JlYXRlICAg
IChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfdW5yZWFsaXplIChY
dENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kg
ICAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9zZXRf
aW5mbyAgKFdpZGdldCB4dHBsdWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRf
ZXZlbnRfaGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRnZXQgdywgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50
X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZm9jdXNfbGlz
dGVuZXIgICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB1c2VyX2RhdGEsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0
aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIg
dXNlcl9kYXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJl
ZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSk7IAorc3RhdGljIHZvaWQg
ICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9k
YXRhKTsKK3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4
dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWVz
c2FnZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldGFp
bCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGExLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUpOyAgCitzdGF0aWMg
aW50ICAgICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChEaXNwbGF5ICpkaXNwbGF5LCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFcnJvckV2ZW50ICplcnJvcik7Cisv
KiBGb3IgZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHRyYXBfZXJy
b3JzKHZvaWQpOworc3RhdGljIGludCAgICAgICAgdW50cmFwX2Vycm9yKHZvaWQpOworc3RhdGlj
IGludCAgICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikgKERpc3BsYXkgKiwgWEVycm9yRXZlbnQg
Kik7CitzdGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vycm9yX2NvZGUgPSAwOworCitzdGF0aWMg
R3RrV2lkZ2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyBEaXNwbGF5ICAg
ICAgICAgKnh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMgU3RyaW5nICAgICAgICAgICpmYWxsYmFj
ayA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9pc19pbml0aWFsaXplZCA9IEZB
TFNFOworc3RhdGljIGdpbnQgICAgICAgICAgICAgbnVtX3dpZGdldHMgPSAwOworCitzdGF0aWMg
R1BvbGxGRCAgICAgICAgICB4dF9ldmVudF9wb2xsX2ZkOworc3RhdGljIGdpbnQgICAgICAgICAg
ICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0aWMgZ3VpbnQgICAgICAgICAgICB0YWcg
PSAwOworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3ByZXBhcmUgKEdTb3VyY2UqICBzb3Vy
Y2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBnaW50ICAgICAqdGltZW91dCkKK3sgICAKKyAg
aW50IG1hc2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIoKTsKKyAgbWFzayA9IFhQZW5kaW5nKHh0
ZGlzcGxheSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7CisKKyAgcmV0dXJuIChnYm9vbGVhbilt
YXNrOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2NoZWNrIChHU291cmNlKiAgc291
cmNlX2RhdGEpCit7CisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIGlmICh4dF9ldmVudF9w
b2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAgaW50IG1hc2s7CisgICAgbWFzayA9IFhQ
ZW5kaW5nKHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgICAgcmV0dXJu
IChnYm9vbGVhbiltYXNrOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgIHJldHVy
biBGQUxTRTsKK30gICAKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9kaXNwYXRjaCAoR1Nv
dXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICBHU291cmNlRnVuYyBjYWxs
X2JhY2ssCisgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICB1c2VyX2RhdGEpCit7CisgIFhF
dmVudCBldmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgaSA9IDA7CisKKyAgYWMgPSBY
dERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRpc3BsYXkpOworCisgIEdES19USFJFQURT
X0VOVEVSICgpOworCisgIC8qIFByb2Nlc3Mgb25seSByZWFsIFggdHJhZmZpYyBoZXJlLiAgV2Ug
b25seSBsb29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBwaXBlLCBsaW1pdCBpdCB0byBYVEJJTl9N
QVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRBcHBQcm9jZXNzRXZlbnQgc28gdGhhdCBp
dCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUncyBubworICAgKiB0aW1lciBwcm9jZXNz
aW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGltZXIgY2FsbGJhY2sgdGhhdAorICAg
KiBkb2VzIGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBYVEJJTl9NQVhfRVZFTlRTICYmIFhQZW5k
aW5nKHh0ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNWEV2
ZW50KTsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOworCisgIHJldHVybiBUUlVFOyAg
Cit9CisKK3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZlbnRfZnVuY3MgPSB7CisgIHh0X2V2ZW50
X3ByZXBhcmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4dF9ldmVudF9kaXNwYXRjaCwKKyAgZ19m
cmVlLAorICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdTb3VyY2VEdW1teU1hcnNoYWwpTlVMTAor
fTsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNrKGdw
b2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAqIGRpc3BsYXk7CisgIFh0QXBwQ29udGV4
dCBhYzsKKyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIwOworCisgIGRpc3BsYXkgPSAoRGlzcGxh
eSAqKXVzZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dChkaXNw
bGF5KTsKKworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3MgbWFueSBYdCBldmVudHMgaGVyZS4gSWYg
d2UganVzdCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3ZSBtaWdodCBzdGFydmUgb25lIG9yIG1v
cmUgWHQgY29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFuZAorICAgICB0aGlzIGNvdWxkIGhhbmcg
dGhlIHdob2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBwb3VyaW5nIGluLiBTbyBwcm9jZXNzCisg
ICAgIHVwIHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cgYW5kIHNhdmUgdGhlIHJlc3QgZm9yIGxh
dGVyLiBUaGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0IG91Z2h0YSB3b3JrLiBXZSAqcmVhbGx5
KiBzaG91bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVnaW5zLgorICAqLworICB3aGlsZSAoZXZl
bnRzVG9Qcm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFjKSkKKyAgICBYdEFwcFByb2Nlc3NFdmVu
dChhYywgWHRJTUFsbCk7CisgIHJldHVybiBUUlVFOworfQorCitHdGtUeXBlCitndGtfeHRiaW5f
Z2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtUeXBlIHh0YmluX3R5cGUgPSAwOworCisg
IGlmICgheHRiaW5fdHlwZSkgeworICAgICAgc3RhdGljIGNvbnN0IEd0a1R5cGVJbmZvIHh0Ymlu
X2luZm8gPQorICAgICAgeworICAgICAgICAiR3RrWHRCaW4iLAorICAgICAgICBzaXplb2YgKEd0
a1h0QmluKSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNzKSwKKyAgICAgICAgKEd0a0Ns
YXNzSW5pdEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0LAorICAgICAgICAoR3RrT2JqZWN0SW5p
dEZ1bmMpIGd0a194dGJpbl9pbml0LAorICAgICAgICAvKiByZXNlcnZlZF8xICovIE5VTEwsCisg
ICAgICAgIC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMp
IE5VTEwKKyAgICAgIH07CisgICAgICB4dGJpbl90eXBlID0gZ3RrX3R5cGVfdW5pcXVlIChHVEtf
VFlQRV9TT0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9CisgIHJldHVybiB4dGJpbl90eXBlOwor
fQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmts
YXNzKQoreworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNzOworICBHdGtPYmplY3RDbGFz
cyAqb2JqZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFzcyA9IGd0a190eXBlX2NsYXNzIChHVEtf
VFlQRV9TT0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9IEdUS19XSURHRVRfQ0xBU1MgKGtsYXNz
KTsKKyAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3RrX3h0YmluX3JlYWxpemU7CisgIHdpZGdl
dF9jbGFzcy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3VucmVhbGl6ZTsKKworICBvYmplY3RfY2xh
c3MgPSBHVEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIG9iamVjdF9jbGFzcy0+ZGVzdHJveSA9
IGd0a194dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2luaXQgKEd0
a1h0QmluICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlzcGxheSA9IE5VTEw7CisgIHh0YmluLT5w
YXJlbnRfd2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0d2luZG93ID0gMDsKKyAgeHRiaW4tPngg
PSAwOworICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fcmVhbGl6
ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0QmluICAgICAqeHRiaW47CisgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAwLCAyMDAgfTsKKyAgZ2ludCAgeCwgeSwg
dywgaCwgZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICovCisKKyNpZmRlZiBERUJVR19YVEJJTgor
ICBwcmludGYoImd0a194dGJpbl9yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5f
aWZfZmFpbCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAo
d2lkZ2V0KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBiZWZvcmUgcmVhbGl6ZSAq
LworICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJpbi0+cGFyZW50X3dpbmRvdywgJngsICZ5
LCAmdywgJmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHc7CisgIGFsbG9jYXRpb24uaGVp
Z2h0ID0gaDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlICh3aWRnZXQsICZhbGxvY2F0aW9u
KTsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVk
ICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRpZgorCisgIHh0YmluLT53aWR0aCA9IHdp
ZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4tPmhlaWdodCA9IHdpZGdldC0+YWxsb2Nh
dGlvbi5oZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tldCdzIHJlYWxpemUgKi8KKyAgKCpHVEtf
V0lER0VUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxpemUpKHdpZGdldCk7CisKKyAgLyogY3Jl
YXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0X2NsaWVudF9jcmVhdGUoJih4dGJpbi0+
eHRjbGllbnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHh0YmluKSks
IAorICAgICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAgIHh0YmluLT53aWR0aCk7CisgIHh0Ymlu
LT54dHdpbmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNsaWVudC5jaGlsZF93aWRnZXQpOworCisg
IGdka19mbHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdlIGhhdmUgY3JlYXRlZCB0aGUgeHQgY2xp
ZW50LCBhZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAgZ3RrX3NvY2tldF9hZGRfaWQoR1RLX1NP
Q0tFVCh3aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOworfQorCisKKworR3RrV2lkZ2V0KgorZ3Rr
X3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKiBmKQoreworICBH
dGtYdEJpbiAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKworICBhc3NlcnQocGFyZW50
X3dpbmRvdyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtfdHlwZV9uZXcgKEdUS19UWVBFX1hUQklO
KTsKKworICBpZiAoIXh0YmluKQorICAgIHJldHVybiAoR3RrV2lkZ2V0KilOVUxMOworCisgIGlm
IChmKQorICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBYdCB0b29sa2l0
ICovCisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFyZW50X3dpbmRvdzsKKworICB4dF9jbGll
bnRfaW5pdCgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKGdk
a19yZ2JfZ2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3Jn
Yl9nZXRfY29sb3JtYXAoKSksCisgICAgICBnZGtfcmdiX2dldF92aXN1YWwoKS0+ZGVwdGgpOwor
CisgIGlmICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxheSkgeworICAgIC8qIElmIFh0T3BlbkRp
c3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVydGhlci4KKyAgICAgKiAgQmFpbCBvdXQu
CisgICAgICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoImd0a194dGJpbl9pbml0
OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5cbiIpOworI2VuZGlmCisgICAgZ19mcmVl
ICh4dGJpbik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQgKilOVUxMOworICB9CisKKyAgLyogSWYg
dGhpcyBpcyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQsIGhvb2sgdGhpcyBkaXNwbGF5IGludG8g
dGhlCisgICAgIG1haW5sb29wICovCisgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisgICAgaW50
ICAgICAgICAgICBjbnVtYmVyOworICAgIC8qCisgICAgICogaG9vayBYdCBldmVudCBsb29wIGlu
dG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8KKworICAgIC8qIHRoZSBhc3N1bXB0aW9u
IGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKyAgICBHU291cmNl
KiBncyA9IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVuY3MsIHNpemVvZihHU291cmNlKSk7Cisg
ICAgICBpZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgCisgICAg
Z19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKKyAgICBnX3Nv
dXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOworICAgIHRhZyA9IGdfc291cmNlX2F0dGFj
aChncywgKEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZkZWYgVk1TCisgICAgY251bWJlciA9IFhD
b25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxzZQorICAgIGNudW1iZXIgPSBDb25uZWN0
aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmZkID0g
Y251bWJlcjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2ZW50cyA9IEdfSU9fSU47IAorICAgIHh0
X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8qIGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/
ICovCisKKyAgICBnX21haW5fY29udGV4dF9hZGRfcG9sbCAoKEdNYWluQ29udGV4dCopTlVMTCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4dF9ldmVudF9wb2xsX2ZkLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9MT1cpOworICAgIC8qIGFkZCBhIHRp
bWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nlc3MgWHQgdGltZXJzICovCisgICAgeHRf
cG9sbGluZ190aW1lcl9pZCA9CisgICAgICBndGtfdGltZW91dF9hZGQoMjUsCisgICAgICAgICAg
ICAgICAgICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ss
CisgICAgICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5KTsKKyAgfQorCisgIC8qIEJ1bXAgdXAg
b3VyIHVzYWdlIGNvdW50ICovCisgIG51bV93aWRnZXRzKys7CisKKyAgLyogQnVpbGQgdGhlIGhp
ZXJhY2h5ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5
OworICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KEdUS19XSURHRVQoeHRiaW4pLCBwYXJl
bnRfd2luZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhKHh0YmluLT5wYXJlbnRfd2lu
ZG93LCAmdXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0YSkKKyAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19XSURHRVQoeHRiaW4pKTsKKworICByZXR1
cm4gR1RLX1dJREdFVCAoeHRiaW4pOworfQorCit2b2lkCitndGtfeHRiaW5fc2V0X3Bvc2l0aW9u
IChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgs
CisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpCit7CisgIHh0YmluLT54ID0g
eDsKKyAgeHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh4dGJpbikp
CisgICAgZ2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VUICh4dGJpbiktPndpbmRvdywgeCwgeSk7
Cit9CisKK3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAg
ICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAg
ICAgaGVpZ2h0KQoreworICBBcmcgYXJnc1syXTsKKyAgR3RrWHRCaW4gKnh0YmluID0gR1RLX1hU
QklOICh3aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisKKyNpZmRlZiBERUJV
R19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZXNpemUgJXAgJWQgJWRcbiIsICh2b2lkICop
d2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisgIHh0YmluLT5oZWlnaHQgPSBoZWln
aHQ7CisgIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKworICAvLyBBdm9pZCBCYWRWYWx1ZSBlcnJv
cnMgaW4gWHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9MCkgeworICAg
IGhlaWdodCA9IDE7CisgICAgd2lkdGggPSAxOworICB9CisgIFh0U2V0QXJnKGFyZ3NbMF0sIFh0
TmhlaWdodCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJnc1sxXSwgWHROd2lkdGgsICB3aWR0aCk7
CisgIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50b3Bfd2lkZ2V0LCBhcmdzLCAyKTsKKwor
ICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9jYXRlIHNvIHRoZSBzb2NrZXQga25vd3Mg
YWJvdXQgdGhlCisgICAgIHNpemUgY2hhbmdlcyAqLworICBhbGxvY2F0aW9uLnggPSB4dGJpbi0+
eDsKKyAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB4dGJp
bi0+d2lkdGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0geHRiaW4tPmhlaWdodDsKKworICBndGtf
d2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2
b2lkCitndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRnZXQgKm9iamVjdCkKK3sKKyAgR3RrWHRC
aW4gKnh0YmluOworICBHdGtXaWRnZXQgKndpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisg
IHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIC8qIGd0a19v
YmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmY291bnQgb24gb2JqZWN0Cisg
ICAqLworICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3QpOworICB3aWRnZXQgPSBHVEtfV0lER0VU
KG9iamVjdCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9GTEFHUyAod2lkZ2V0LCBHVEtfVklTSUJM
RSk7CisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3aWRnZXQpKSB7CisgICAgeHRfY2xpZW50
X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOworICB9CisKKyAgKCpHVEtfV0lER0VUX0NM
QVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdpZGdldCk7Cit9CisKK3N0YXRpYyB2b2lk
CitndGtfeHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpvYmplY3QpCit7CisgIEd0a1h0QmluICp4
dGJpbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX2Rlc3Ryb3ko
KVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCk7Cisg
IGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAob2JqZWN0KSk7CisKKyAgeHRiaW4gPSBH
VEtfWFRCSU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4tPnh0d2luZG93KSB7CisgICAgLyogcmVt
b3ZlIHRoZSBldmVudCBoYW5kbGVyICovCisgICAgeHRfY2xpZW50X2Rlc3Ryb3koJih4dGJpbi0+
eHRjbGllbnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cgPSAwOworCisgICAgbnVtX3dpZGdldHMt
LTsgLyogcmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLworCisgICAgLyogSWYgdGhpcyBpcyB0aGUg
bGFzdCBydW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBYdCBkaXNwbGF5CisgICAgICAgY29ubmVj
dGlvbiBmcm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlmICgwID09IG51bV93aWRnZXRzKSB7Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigicmVtb3ZpbmcgdGhlIFh0IGNvbm5lY3Rp
b24gZnJvbSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRpZgorICAgICAgZ19tYWluX2NvbnRleHRf
cmVtb3ZlX3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwgJnh0X2V2ZW50X3BvbGxfZmQpOworICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAgIGd0a190aW1lb3V0X3JlbW92ZSh4dF9w
b2xsaW5nX3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworICAgIH0K
KyAgfQorCisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGVzdHJveShvYmplY3Qp
OworfQorCisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFh0IFhFbWJl
ZGRlZCBmb3IgY2xpZW50IHNpZGUKKyovCisKKy8qIEluaXRpYWwgWHQgcGx1Z2luICovCitzdGF0
aWMgdm9pZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAg
ICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29s
b3JtYXAsCisgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpCit7CisgIFh0QXBwQ29udGV4dCAg
YXBwX2NvbnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFyZ3ZbMV07CisgIGludCAgICAgICAgICAg
bUFyZ2MgPSAwOworCisgIC8qCisgICAqIEluaXRpYWxpemUgWHQgc3R1ZmYKKyAgICovCisgIHh0
Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IE5V
TEw7CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0dmlzdWFs
ICAgPSBOVUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IDA7CisgIHh0Y2xpZW50LT54dGRl
cHRoID0gMDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxpemVkKSB7CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0dWZmXG4iKTsKKyNlbmRpZgorICAgIFh0
VG9vbGtpdEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29udGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRp
b25Db250ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQorICAgICAgWHRBcHBTZXRGYWxsYmFja1Jl
c291cmNlcyhhcHBfY29udGV4dCwgZmFsbGJhY2spOworCisgICAgeHRkaXNwbGF5ID0gWHRPcGVu
RGlzcGxheShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNwbGF5KCksIE5VTEwsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVMTCwgMCwgJm1BcmdjLCBtQXJndik7Cisg
ICAgaWYgKHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gVFJVRTsKKyAgfQor
ICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxheTsKKyAgeHRjbGllbnQtPnh0dmlzdWFs
ICAgPSB4dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSB4dGNvbG9ybWFwOworICB4
dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9CisKKy8qIENyZWF0ZSB0aGUgWHQgY2xp
ZW50IHdpZGdldHMKKyogICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xp
ZW50KiB4dGNsaWVudCAsIAorICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAK
KyAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICBpbnQg
d2lkdGggKSAKK3sKKyAgaW50ICAgICAgICAgICBuOworICBBcmcgICAgICAgICAgIGFyZ3NbNl07
CisgIFdpZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0OworICBXaWRnZXQgICAgICAgIHRvcF93aWRn
ZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoInh0X2NsaWVudF9jcmVhdGUoKSBc
biIpOworI2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFwcENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJl
YSIsICJXcmFwcGVyIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0
aW9uU2hlbGxXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0
Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LCAwKTsKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0b3Bfd2lkZ2V0OworCisgIC8qIHNldCBz
aXplIG9mIFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVp
Z2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lk
dGgpO24rKzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdldCwgYXJncywgbik7CisKKyAgY2hpbGRf
d2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsKKworICBuID0gMDsKKyAgWHRTZXRBcmco
YXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBY
dE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROdmlzdWFsLCAg
IHh0Y2xpZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRo
LCAgICB4dGNsaWVudC0+eHRkZXB0aCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNv
bG9ybWFwLCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0s
IFh0TmJvcmRlcldpZHRoLCAwKTsgbisrOworICBYdFNldFZhbHVlcyhjaGlsZF93aWRnZXQsIGFy
Z3MsIG4pOworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKKyAgeHRjbGll
bnQtPm9sZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUud2luZG93OworICB0b3Bfd2lkZ2V0LT5j
b3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyogdGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMg
dG8gZmluaXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0ICovCisjaWYgWGxpYlNwZWNpZmljYXRp
b25SZWxlYXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXks
IAorICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAg
IHRvcF93aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0ZXJXaW5kb3coIGVtYmVkZGVyaWQsCisg
ICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbmRpZgorICBYdFJlYWxpemVXaWRn
ZXQoY2hpbGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4gdG8gYWxsIFh0IGV2ZW50cyAqLworICBY
U2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICBYdFdpbmRv
dyh0b3Bfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAweDBGRkZGRik7CisgIHh0X2NsaWVudF9z
ZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBYdE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdl
dCk7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBjaGlsZF93aWRnZXQ7CisKKyAgLyogc2V0
IHRoZSBldmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwK
KyAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+UmVzaXplUmVkaXJlY3RNYXNrLAorICAg
ICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5k
bGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgIFh0QWRkRXZlbnRIYW5k
bGVyKGNoaWxkX3dpZGdldCwgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlm
eU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAor
ICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3Rl
bmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICBYU3luYyh4dGNsaWVudC0+
eHRkaXNwbGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfdW5yZWFsaXpl
ICggWHRDbGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2Ug
Pj0gNgorICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5LAorICAgICAg
ICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cpOworI2Vs
c2UKKyAgX1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5k
b3csCisgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQpOworI2VuZGlm
CisKKyAgLyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93
aWRnZXQtPmNvcmUud2luZG93CisgICAgIG9yIHdlIGNhbiBnZXQgWCBlcnJvciBzaW5jZSB0aGUg
d2luZG93IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRmFsc2UpOwor
CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5k
b3c7CisgIFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKK30KKworc3Rh
dGljIHZvaWQgICAgICAgICAgICAKK3h0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNs
aWVudCkKK3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRnZXQpIHsKKyAgICBYdFJlbW92ZUV2ZW50
SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAweDBGRkZGRiwgVFJVRSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVy
LCB4dGNsaWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsK
KyAgICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQg
ICAgICAgICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lkZ2V0IHh0cGx1ZywgdW5zaWduZWQgbG9u
ZyBmbGFncykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZmZXJbMl07CisKKyAgQXRvbSBpbmZvQXRv
bSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcpLCAiX1hFTUJFRF9JTkZPIiwgRmFsc2Up
OyAKKworICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCB2ZXJzaW9u
ICovCisgIGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhDaGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5
KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAgICAgICAgICAgICAgICAgaW5mb0F0b20s
IGluZm9BdG9tLCAzMiwKKyAgICAgICAgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsCisgICAg
ICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDIpOworfQorCitzdGF0aWMg
dm9pZAoreHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZShXaWRnZXQgdywgWHRQb2ludGVy
IGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0
Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChldmVudC0+eGNsaWVudC5kYXRhLmxbMV0p
CisgIHsKKyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9USUZZOgorICAgIGJyZWFrOworICBjYXNl
IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYo
Ilh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBi
cmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFXG4i
KTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PTjoKKyNpZmRl
ZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlf
T05cbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09GRjoK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9E
QUxJVFlfT0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9GT0NVU19J
TjoKKyAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAgIHsKKyAgICAgIFhFdmVudCB4ZXZlbnQ7
CisgICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhldmVudCkpOworCisgICAgICBpZihl
dmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VTX0lOKSB7CisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBpblxuIik7CisjZW5k
aWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJbjsKKyAgICAgIH0KKyAgICAg
IGVsc2UgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3Qg
Zm9jdXMgb3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1
c091dDsKKyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3cgPSBYdFdpbmRvdyh4
dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZlbnQueGZvY3VzLmRpc3BsYXkgPSBYdERp
c3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgWFNlbmRFdmVudChYdERpc3BsYXko
eHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgICAgeGV2ZW50Lnhmb2N1cy53
aW5kb3csCisgICAgICAgICAgICAgICAgIEZhbHNlLCBOb0V2ZW50TWFzaywKKyAgICAgICAgICAg
ICAgICAgJnhldmVudCApOworICAgICAgWFN5bmMoIFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dp
ZGdldCksIEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7
CisgIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICovCit9CisKK3N0YXRpYyB2b2lkICAgICAg
ICAgCit4dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRf
ZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChYdENsaWVudCop
Y2xpZW50X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2Ug
Q2xpZW50TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4ZW1iZWQgbWVzc2FnZSAqLworICAgICAg
aWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09CisgICAgICAgICAgICAgICAgIFhJbnRl
cm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsKKyAgICAgICAgeHRfY2xpZW50X2hh
bmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0YSwgZXZlbnQpOworICAgICAgfQorICAg
ICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgTWFwcGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgWEVNQkVEX01B
UFBFRCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVubWFwTm90aWZ5OgorICAgICAgeHRfY2xp
ZW50X3NldF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNJbjoKKyAg
ICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5IFByZXNzIEdvdCFcbiIpOworI2VuZGlm
CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQg
b2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAorc2VuZF94ZW1iZWRf
bWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcg
ICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRldGFpbCwgCisg
ICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTEsICAKKyAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgICAgICBkYXRhMiwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIHRp
bWUpICAgCit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBXaW5kb3cgdz1YdFdpbmRvdyh4dGNsaWVu
dC0+dG9wX3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14dGNsaWVudC0+eHRkaXNwbGF5OworICBp
bnQgZXJyb3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50LDAsc2l6ZW9mKHhldmVudCkpOworICB4
ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZlbnQueGNsaWVudC50eXBlID0gQ2xpZW50
TWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2FnZV90eXBlID0gWEludGVybkF0b20oZHB5
LCJfWEVNQkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xpZW50LmZvcm1hdCA9IDMyOworICB4ZXZl
bnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzFd
ID0gbWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOyAKKyAgeGV2
ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFs0
XSA9IGRhdGEyOworCisgIHRyYXBfZXJyb3JzICgpOworICBYU2VuZEV2ZW50IChkcHksIHcsIEZh
bHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhTeW5jIChkcHksRmFsc2UpOworCisgIGlm
KChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAg
IHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkhISFcbiIsZXJyb3Jjb2RlKTsK
KyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgCitlcnJvcl9oYW5kbGVy
KERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICplcnJvcikKK3sKKyAgdHJhcHBlZF9lcnJv
cl9jb2RlID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p
ZCAgICAgICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9
MDsKKyAgb2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKGVycm9yX2hhbmRsZXIp
OworfQorCitzdGF0aWMgaW50ICAgICAgICAgCit1bnRyYXBfZXJyb3Iodm9pZCkKK3sKKyAgWFNl
dEVycm9ySGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7CisgIGlmKHRyYXBwZWRfZXJyb3JfY29k
ZSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJHZXQgWCBXaW5kb3cgRXJyb3Ig
PSAlZFxuIiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNlbmRpZgorICB9CisgIHJldHVybiB0cmFw
cGVkX2Vycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZm9j
dXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhLCBYRXZlbnQgKmV2ZW50
KQoreworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodyk7CisgIFh0Q2xpZW50ICp4dGNsaWVu
dCA9IHVzZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0V2luZG93KHcpOworCisgIHN3aXRjaChl
dmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVhdGVOb3RpZnk6CisgICAgICBpZihldmVu
dC0+eGNyZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIFdpZGdldCBjaGlsZD1Y
dFdpbmRvd1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAg
ICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZShjaGls
ZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgRGVzdHJveU5v
dGlmeToKKyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdywgdXNlcl9kYXRhKTsKKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBpZihldmVudC0+eHJl
cGFyZW50LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IHBhcmVudCAq
LworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldChkcHksIGV2ZW50LT54cmVw
YXJlbnQud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1
c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGVsc2Ug
aWYoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhl
IG5ldyBjaGlsZCAqLworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEkgYW0gdGhl
IG9sZCBwYXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dG9uUmVs
ZWFzZToKKyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1cyhkcHksIFh0V2luZG93KHh0Y2xpZW50
LT5jaGlsZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwgZXZlbnQtPnhidXR0b24udGltZSk7Cisj
ZW5kaWYKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dGNsaWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dp
dGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3Rl
bmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgWFdpbmRvd0F0dHJpYnV0
ZXMgYXR0cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJf
ZGF0YTsKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWEdldFdpbmRv
d0F0dHJpYnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRvdyh3KSwgJmF0dHIpOworICBldmVudG1h
c2sgPSBhdHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0
b25SZWxlYXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0RGlzcGxheSh3KSwKKyAgICAgICAgICAg
ICAgIFh0V2luZG93KHcpLCAKKyAgICAgICAgICAgICAgIGV2ZW50bWFzayk7CisKKyAgWHRBZGRF
dmVudEhhbmRsZXIodywgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1h
c2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAg
ICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVy
LCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICB1bnRyYXBfZXJyb3IoKTsKK30K
Kworc3RhdGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2lu
dGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsK
KyAgWHRSZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRv
blJlbGVhc2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRs
ZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEpOworCisgIHVudHJhcF9lcnJv
cigpOworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRn
ZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpIAoreworICBXaW5kb3cgd2luID0gWHRX
aW5kb3codHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxkcmVuOworICBXaW5kb3cgcm9vdCwgcGFy
ZW50OworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodHJlZXJvb3QpOworICB1bnNpZ25lZCBp
bnQgaSwgbmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9u
Y2UgKi8KKyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsK
KyAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgdHJhcF9l
cnJvcnMoKTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4sICZyb290LCAmcGFyZW50LCAmY2hp
bGRyZW4sICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFwX2Vycm9yKCk7CisgICAgcmV0dXJuOwor
ICB9CisKKyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAgIHJldHVybjsKKworICBmb3IoaT0wOyBp
PG5jaGlsZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNoaWxkID0gWHRXaW5kb3dUb1dpZGdldChk
cHksIGNoaWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQpIAorICAgICAgeHRfYWRkX2ZvY3VzX2xp
c3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICB9CisgIFhGcmVlKCh2b2lkKiljaGls
ZHJlbik7CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
UGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5o
IgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZUd0azo6flBsdWdpblBhY2thZ2VH
dGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGs6
OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RN
b2RpZmllZCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGUoMCkKKyAgICAsIG1f
bGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKKyAgICAsIG1faXNMb2FkZWQoZmFsc2UpCisgICAg
LCBtX2xvYWRDb3VudCgwKQoreworICAgIGludCBwb3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0cmlu
ZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmlsZU5hbWUgPSBtX3BhdGgucmlnaHQobV9wYXRo
Lmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpmZXRj
aEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdj
aGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykgeworICAgICAg
ICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisK
KyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsy
XSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0s
ICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rv
ci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRlbnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9t
aW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9t
aW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAg
ICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAgICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7
CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURlc2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9
IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0
cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAg
bV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBtX05QUF9HZXRW
YWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIpOworICAgIGlmIChl
cnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisK
KyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdl
R3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3Vu
dCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9k
dWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NBTCk7Cisg
ICAgaWYgKCFtX21vZHVsZSkKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2FkZWQg
PSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBO
UEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5pdGlh
bGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUpOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21v
ZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIsICh2b2lkKiopJm1fTlBfR2V0TUlNRURlc2Ny
aXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2
b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJO
UF9HZXRWYWx1ZSIsICh2b2lkKiopJm1fTlBQX0dldFZhbHVlKTsKKworICAgIGlmICghTlBfSW5p
dGlhbGl6ZSB8fCAhbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24gfHwgIW1fTlBQX1NodXRkb3duIHx8
ICFtX05QUF9HZXRWYWx1ZSkKKyAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1
Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5z
aXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9
IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBO
UF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7
CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNz
Lm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBO
UE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95
U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9i
cm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5t
ZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBO
X01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7Cisg
ICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9i
cm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNl
dHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0
ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdp
b24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJh
dyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBO
X0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2
YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Q
dXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJs
ZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZp
ZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0
cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBf
TlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3Ry
aW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZy
b21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVu
Y3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3Mu
cmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVs
ZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZv
a2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05Q
Tl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFs
dWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7
CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAg
IG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJv
d3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVu
Y3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3Mu
ZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUo
Jm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJS
X05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAg
ICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZCgpCit7
CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoLS1tX2xv
YWRDb3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fTlBQX1NodXRkb3duKCk7CisK
KyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3Rr
Ojp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworICAgIEFTU0VSVCht
X21vZHVsZSk7CisKKyAgICBnX21vZHVsZV9jbG9zZSAobV9tb2R1bGUpOworCisgICAgbV9pc0xv
YWRlZCA9IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5QYWNrYWdlR3RrOjpj
cmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZp
ZWQpCit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdl
R3RrKHBhdGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygp
KSB7CisgICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2VHdGs6
Omhhc2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAg
IG1fcGF0aC5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9Owor
CisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNo
YXIqPihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOwor
fQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VHdGsm
IGEsIGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlw
dGlvbiA9PSBiLm1fZGVzY3JpcHRpb247Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luU3RyZWFtR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzk4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1H
dGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRl
ICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
U3VicmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVj
YXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8v
IGFuZCB0aGlzIHdheSB3ZSB3b24ndCBjbGFzaCB3aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50
IFdlYlJlYXNvbk5vbmUgPSAtMjsKKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+
IFN0cmVhbU1hcDsKK3N0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBT
dHJlYW1NYXAgc3RhdGljU3RyZWFtczsKKyAgICByZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKwor
UGx1Z2luU3RyZWFtR3RrOjpQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmll
dywgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgIDogbV9yZXNvdXJj
ZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1f
cGx1Z2luVmlldyhwbHVnaW5WaWV3KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisg
ICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fbG9hZE1h
bnVhbGx5KGZhbHNlKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1CZWZvcmVTdGFydGVkKQor
ICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIodGhpcywgJlBsdWdpblN0cmVhbUd0azo6ZGVsYXlE
ZWxpdmVyeVRpbWVyRmlyZWQpCisgICAgLCBtX2RlbGl2ZXJ5RGF0YSgwKQorICAgICwgbV90ZW1w
RmlsZUhhbmRsZSgwKQorICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5WaWV3LT5wbHVnaW4oKS0+
cGx1Z2luRnVuY3MoKSkKKyAgICAsIG1faW5zdGFuY2UocGx1Z2luVmlldy0+aW5zdGFuY2UoKSkK
K3sKKyAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKKworICAgIG1fc3RyZWFtLnVybCA9IDA7Cisg
ICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0
cmVhbS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOworICAgIG1fc3RyZWFt
Lmxhc3Rtb2RpZmllZCA9IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0
YW5jZSk7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6flBsdWdpblN0cmVhbUd0aygpCit7CisgICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xv
YWRlcik7CisKKyAgICBmcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOworCisgICAgc3RyZWFtcygp
LnJlbW92ZSgmbV9zdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3RhcnQoKQor
eworICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOworCisgICAgbV9sb2FkZXIgPSBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKG1fZnJhbWUsIHRoaXMpOworCisgICAgbV9sb2Fk
ZXItPnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2UpOworICAgIG1fbG9hZGVyLT5kb2N1bWVudExv
YWRlcigpLT5hZGRQbHVnSW5TdHJlYW1Mb2FkZXIobV9sb2FkZXIuZ2V0KCkpOworICAgIG1fbG9h
ZGVyLT5sb2FkKG1fcmVzb3VyY2VSZXF1ZXN0KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6
OnN0b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYg
KG1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgICAg
IERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5hY3Rp
dmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOworCisg
ICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCisgICAg
ICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5s
b2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IobV9yZXNvdXJjZVJlcXVlc3QpKTsKKworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5j
YW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIgPSAwOworICAgIH0KK30KKwordm9pZCBQbHVnaW5T
dHJlYW1HdGs6OnN0YXJ0U3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBT
dHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMID0gbV9y
ZXNvdXJjZVJlc3BvbnNlLnVybCgpOworCisgICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhw
ZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMg
aXMgdGhlCisgICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAg
aWYgKHJlc3BvbnNlVVJMLnVybCgpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQor
ICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChyZXNwb25zZVVSTC5kZWNvZGVfc3RyaW5n
KHJlc3BvbnNlVVJMLnVybCgpKS51dGY4KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJlYW0u
dXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwudXJsKCkudXRmOCgpKTsKKyAgICAKKyAgICBDU3Ry
aW5nIG1pbWVUeXBlU3RyID0gbV9yZXNvdXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOwor
ICAgIAorICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGggPSBtX3Jlc291cmNlUmVz
cG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisKKyAgICBpZiAobV9yZXNvdXJjZVJlc3Bv
bnNlLmlzSFRUUCgpKSB7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsKKyAg
ICAgICAgU3RyaW5nIHNlcGFyYXRvcigiOiAiKTsKKworICAgICAgICBIVFRQSGVhZGVyTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygp
LmVuZCgpOworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFy
YWN0ZXJzKCksIGl0LT5maXJzdC5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChzZXBhcmF0b3IuY2hhcmFjdGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0
LT5zZWNvbmQubGVuZ3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVD
aGFyKSdcbicpOworICAgICAgICB9CisKKyAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5nOjphZG9w
dChzdHJpbmdCdWlsZGVyKS51dGY4KCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMg
ZW5jb2RlZCAobW9zdCBsaWtlbHkgY29tcHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVu
Z3RoIHRvIHRoZSBwbHVnaW4sCisgICAgICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBp
biB0aGUgZGVjb2RlZCBsZW5ndGgsIG5vdCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KKyAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0NzA1OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1bTlNV
UkxSZXNwb25zZSBleHBlY3RlZENvbnRlbnRMZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMgbG9n
aWMuCisgICAgICAgIFN0cmluZyBjb250ZW50RW5jb2RpbmcgPSBtX3Jlc291cmNlUmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJDb250ZW50LUVuY29kaW5nIik7CisgICAgICAgIGlmICghY29udGVu
dEVuY29kaW5nLmlzTnVsbCgpICYmIGNvbnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQorICAg
ICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gLTE7CisgICAgfQorCisgICAgbV9zdHJl
YW0uaGVhZGVycyA9IG1faGVhZGVycy5kYXRhKCk7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOwor
ICAgIG1fc3RyZWFtLm5kYXRhID0gdGhpczsKKyAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0
ZWRDb250ZW50TGVuZ3RoLCAwTEwpOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IG1fcmVz
b3VyY2VSZXNwb25zZS5sYXN0TW9kaWZpZWREYXRlKCk7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0
YSA9IG1fbm90aWZ5RGF0YTsKKworICAgIG1fdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOworICAg
IG1fb2Zmc2V0ID0gMDsKKyAgICBtX3JlYXNvbiA9IFdlYlJlYXNvbk5vbmU7CisKKyAgICAvLyBQ
cm90ZWN0IHRoZSBzdHJlYW0gaWYgZGVzdHJveXN0cmVhbSBpcyBjYWxsZWQgZnJvbSB3aXRoaW4g
dGhlIG5ld3N0cmVhbSBoYW5kbGVyCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVj
dCh0aGlzKTsKKworICAgIE5QRXJyb3IgbnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0o
bV9pbnN0YW5jZSwgKE5QTUlNRVR5cGUpbWltZVR5cGVTdHIuZGF0YSgpLCAmbV9zdHJlYW0sIGZh
bHNlLCAmbV90cmFuc2Zlck1vZGUpOworICAgIAorICAgIC8vIElmIHRoZSBzdHJlYW0gd2FzIGRl
c3Ryb3llZCBpbiB0aGUgY2FsbCB0byBuZXdzdHJlYW0gd2UgcmV0dXJuCisgICAgaWYgKG1fcmVh
c29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9z
dHJlYW1TdGF0ZSA9IFN0cmVhbVN0YXJ0ZWQ7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9f
RVJST1IpCisgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0obnBFcnIpOworCisgICAgaWYg
KG1fdHJhbnNmZXJNb2RlID09IE5QX05PUk1BTCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmICgobV90ZW1wRmlsZUhhbmRsZSA9IHRtcGZpbGUoKSkgIT0gTlVMTCkgeworCSAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5n
IHRoZSBzdHJlYW0KKyAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJS
KTsKK30KKworTlBQIFBsdWdpblN0cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0
cmVhbSkKK3sKKyAgICByZXR1cm4gc3RyZWFtcygpLmdldChzdHJlYW0pOworfQorCit2b2lkIFBs
dWdpblN0cmVhbUd0azo6Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCit7
CisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKworICAgIGRlc3Ry
b3lTdHJlYW0ocmVhc29uKTsKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3Rr
OjpkZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBtX3JlYXNvbiA9IHJlYXNv
bjsKKyAgICBpZiAobV9yZWFzb24gIT0gTlBSRVNfRE9ORSkgeworICAgICAgICAvLyBTdG9wIGFu
eSBwZW5kaW5nIGRhdGEgZnJvbSBiZWluZyBzdHJlYW1lZAorICAgICAgICBpZiAobV9kZWxpdmVy
eURhdGEpCisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgIH0gZWxz
ZSBpZiAobV9kZWxpdmVyeURhdGEgJiYgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA+IDApIHsKKyAg
ICAgICAgLy8gVGhlcmUgaXMgbW9yZSBkYXRhIHRvIGJlIHN0cmVhbWVkLCBkb24ndCBkZXN0cm95
IHRoZSBzdHJlYW0gbm93LgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlc3Ryb3lTdHJl
YW0oKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJlYW0oKQoreworICAg
IGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSk7CisgICAgQVNTRVJUICghbV9k
ZWxpdmVyeURhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKTsKKworICAgIGlmICht
X3RlbXBGaWxlSGFuZGxlICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShtX3RlbXBGaWxlSGFuZGxl
KTsKKworICAgIGlmIChtX3N0cmVhbS5uZGF0YSAhPSAwKSB7CisgICAgICAgIGlmIChtX3JlYXNv
biA9PSBOUFJFU19ET05FICYmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFu
c2Zlck1vZGUgPT0gTlBfQVNGSUxFT05MWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wYXRo
LmlzTnVsbCgpKTsKKworICAgICAgICAgICAgbV9wbHVnaW5GdW5jcy0+YXNmaWxlKG1faW5zdGFu
Y2UsICZtX3N0cmVhbSwgbV9wYXRoLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBOUEVy
cm9yIG5wRXJyOworICAgICAgICBucEVyciA9IG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0o
bV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3JlYXNvbik7CisKKyAgICAgICAgbV9zdHJlYW0ubmRh
dGEgPSAwOworICAgIH0KKworICAgIGlmIChtX3NlbmROb3RpZmljYXRpb24pCisgICAgICAgIG1f
cGx1Z2luRnVuY3MtPnVybG5vdGlmeShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwo
KS51cmwoKS51dGY4KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworCisgICAgbV9zdHJlYW1T
dGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0U3RyZWFtIGNhbiBjYXVz
ZSB1cyB0byBiZSBkZWxldGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3Qo
dGhpcyk7CisgICAgaWYgKCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5k
aXNjb25uZWN0U3RyZWFtKHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3ID0gMDsKK30KKwordm9p
ZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0
cmVhbUd0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9kZWxheURlbGl2ZXJ5
VGltZXIpOworCisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6
OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURhdGEpOworICAgIAorICAg
IGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNlTG9hZGVyIG9uIGVycm9y
IHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGlmICghbV9z
dHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAg
ICBpbnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIHdoaWxlICh0b3RhbEJ5dGVz
RGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMiBkZWxpdmVyeUJ5dGVzID0g
bV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOworCisgICAg
ICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVy
eVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3Rh
bEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBpbnQzMiBkYXRhTGVu
Z3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5
RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAgICAgICAgICAgLy8gV3Jp
dGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53
cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRhTGVuZ3RoLCAodm9pZCop
ZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDApIHsKKyAgICAgICAgICAg
ICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVz
ID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgbV9vZmZzZXQg
Kz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWxpdmVyZWQgKz0gZGVs
aXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZl
cmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMp
IHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRlcyA9IHRvdGFsQnl0ZXMgLSB0b3RhbEJ5
dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92ZShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgp
LCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZCwgcmVtYWluaW5n
Qnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShyZW1haW5pbmdCeXRl
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXpl
KDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAg
ICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9CisgICAgfSAKK30KKwordm9pZCBQ
bHVnaW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBkaWRSZWNlaXZlUmVzcG9u
c2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0
cmluZy5sZW5ndGgoKSwgIiIsICIiKSk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJl
YW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCByZXN1
bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOworICAgIGlmIChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZEZpbmlz
aExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlUmVzcG9u
c2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBtX3Jl
c291cmNlUmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0YXJ0U3RyZWFtKCk7Cit9CisKK3Zv
aWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VS
VChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKyAgICBBU1NF
UlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKyAgICAKKyAgICBpZiAoIW1fZGVs
aXZlcnlEYXRhKQorICAgICAgICBtX2RlbGl2ZXJ5RGF0YS5zZXQobmV3IFZlY3RvcjxjaGFyPik7
CisKKyAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgbV9kZWxp
dmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKKyAgICBtZW1jcHkobV9kZWxpdmVy
eURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CisKKyAgICAvLyBJZiB0aGUg
cGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVs
ZXRlZCwgCisgICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgorICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNG
SUxFT05MWSkKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKworICAgIGlmIChtX3N0cmVhbVN0YXRl
ICE9IFN0cmVhbVN0b3BwZWQgJiYgbV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxMKSB7CisgICAgICAg
IGludCB3cml0dGVuOworICAgICAgICBib29sIHJldHZhbCA9IGZhbHNlOworCisgICAgICAgIGlm
ICghcmV0dmFsIHx8IGZwdXRzKGRhdGEsIG1fdGVtcEZpbGVIYW5kbGUpIDw9IDApCisgICAgICAg
ICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKKyAgICB9Cit9
CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIEFTU0VSVChsb2FkZXIg
PT0gbV9sb2FkZXIpOworCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVzdHJveVN0cmVhbShO
UFJFU19ORVRXT1JLX0VSUik7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRGaW5pc2hM
b2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIpCit7CisgICAgQVNTRVJU
KGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RhcnRlZCk7CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVT
X0RPTkUpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1t
b2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdp
ZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioq
KgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
TVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMg
dW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBH
dGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVs
b3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgor
ICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdo
dCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRo
ZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhl
ICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAq
IG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwg
b3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91
cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxh
Y2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVk
IGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJv
dmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9y
IHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovICAgCisK
KyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVmaW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5j
bHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNs
dWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFf
Q0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisjaWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisj
ZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19FWFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmlu
ZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2Rl
ZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1
cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1
Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3Rr
WHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQRV9YVEJJTiAgICAgICAgICAgICAgICAgIChn
dGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19YVEJJTihvYmopICAgICAgICAgICAg
ICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtf
WFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz
KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9Y
VEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5lIEdUS19JU19YVEJJTihvYmopICAgICAgICAg
ICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9D
TEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5
cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVudDsKKworc3RydWN0IF9YdENsaWVudCB7Cisg
IERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3Bs
ZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3
aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1h
cAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2luZG93OworfTsKKworc3RydWN0IF9HdGtYdEJp
bgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRf
d2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRpc3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0
IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAgICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBU
b29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAgICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAg
ICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJIHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENs
aWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBH
dGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkg
ICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICop
IGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dU
S1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4g
Knh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0
YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3Ry
dWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAv
KiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9u
cyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9jZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMg
ICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xh
dGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2
ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAgCisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFy
dCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0
byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisgICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9j
bGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRnZXQncyBDbGFzc1JlYyAgICAgICovCisgICAg
V2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAgICAgICAgLyogcGFyZW50IHdpZGdldCAgICAg
ICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFtZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAg
ICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVhcmtpZmllZCAgICovCisgICAgQm9vbGVhbiAg
ICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyogbWFya2VkIGZvciBkZXN0cm95ICAgICAgICAg
ICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3QgIGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hv
IHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVkICovCisgICAgWHRQb2ludGVyICAgICAgIGNv
bnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWludCByZWNvcmQgICAgICAgICAgICAgICAgICov
CisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAgICAgICAgICAgICAgLyogd2luZG93IHBvc2l0
aW9uICAgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWln
aHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMgICAgICAgICAgICAgICAgICovCisgICAgRGlt
ZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAgICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAg
ICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAg
LyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAgICAgICovCisgICAgQm9vbGVhbiAgICAg
ICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMgd2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2
ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFuY2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFs
bCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICovCisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50
X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBldmVudCBkaXNwYXRjaGVyICAgICAgICovCisg
ICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAgICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFu
YWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRUcmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsg
ICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRpb25zICAgICAgICAgICovCisgICAgUGl4ZWwg
ICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAgLyogd2luZG93IGJvcmRlciBwaXhlbCAgICAg
ICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyog
d2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAgICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAg
IHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBvZiBwb3B1cHMgICAgICAgICAgICAgICAgICAg
ICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9wb3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkg
cG9wdXBzICAgICAgICAgICAgICAgICAgICovCisgICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAg
ICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgICAgICAgICAgICAgICovCisgICAg
U2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAgICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAg
ICAgICAgICAgICAgICAgICovCisgICAgQ29sb3JtYXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAg
ICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgV2luZG93ICAg
ICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyogd2luZG93IElEICAgICAgICAgICAgICAgICAg
ICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIGRlcHRoOyAgICAgICAgICAgICAgLyogbnVt
YmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJh
Y2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJhY2tncm91bmQgcGl4ZWwgICAgICAgICAgICov
CisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tn
cm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAgQm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAg
ICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBhbmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9v
bGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1h
bmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0OworCit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVj
IHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0gV2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8q
IF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBh
Y2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2Fn
ZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVnaW5QYWNrYWdlR3RrX0gKKwor
I2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJSZWZD
b3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFw
OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0
ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGsgOiBwdWJsaWMgUmVmQ291
bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2luUGFj
a2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZUd0ayogY3JlYXRlUGFja2Fn
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAg
ICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAg
ICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0K
KyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQor
CisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25z
KCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAgICAgICAgY29uc3Qg
TUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
bWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3Qg
UGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7CisgICAgICAgIHZv
aWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisKKyAg
ICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAm
bV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblBhY2thZ2VHdGso
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CisgICAgICAg
IGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAgICAgICBp
bnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CisgICAgICAg
IFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAgICBTdHJp
bmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2Ny
aXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7
CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7CisgICAgICAgIHRpbWVfdCBtX2xhc3RNb2Rp
ZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIG1fTlBfR2V0TUlN
RURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3du
OworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1fTlBQX0dldFZhbHVlOworICAgICAgICBO
UFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jy
b3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VHdGtIYXNoIHsK
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYga2V5
KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+
KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYikgeyByZXR1cm4g
UGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRoaXMgaXMgYSB3
b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2Ug
YSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNo
b3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNp
YWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtl
eVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2gsIEhhc2hUcmFpdHM8
UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7CisgICAgICAgIHR5cGVkZWYg
SW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrPik+OjpTaWdu
ZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0
a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsK
KyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5T
dHJlYW1HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVh
bUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1H
dGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBQbHVnaW5TdHJlYW1HdGtfSAorI2RlZmluZSBQbHVnaW5TdHJlYW1HdGtfSAorCisjaW5j
bHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAi
VGltZXIuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFt
ZTsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0
ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsK
KworICAgIGNsYXNzIFBsdWdpblN0cmVhbUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0
cmVhbUd0az4sIHByaXZhdGUgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUGx1Z2luU3RyZWFtR3RrKFBsdWdpblZpZXdHdGsqLCBGcmFtZSos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90
aWZ5RGF0YSk7CisgICAgICAgIH5QbHVnaW5TdHJlYW1HdGsoKTsKKyAgICAgICAgCisgICAgICAg
IHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisKKyAgICAgICAgdm9pZCBzdGFy
dFN0cmVhbSgpOworCisgICAgICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVh
bGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1hbnVhbGx5OyB9CisKKyAgICAgICAgLy8gTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciopOworCisgICAgICAgIHZvaWQgc2VuZEphdmFTY3JpcHRTdHJlYW0o
Y29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgQ1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKKyAg
ICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKworICAgICAgICBz
dGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBkZWxpdmVyRGF0YSgpOworICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFz
b24pOworICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oKTsKKworICAgICAgICBSZXNvdXJjZVJl
cXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNv
dXJjZVJlc3BvbnNlOworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBSZWZQdHI8
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOworICAgICAgICBQbHVnaW5WaWV3
R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICAgICAg
Ym9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgICAgIFBsdWdpblN0cmVhbVN0YXRlIG1fc3Ry
ZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisKKyAgICAgICAgVGltZXI8
UGx1Z2luU3RyZWFtR3RrPiBtX2RlbGF5RGVsaXZlcnlUaW1lcjsKKyAgICAgICAgdm9pZCBkZWxh
eURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+Kik7CisKKyAgICAgICAg
T3duUHRyPCBWZWN0b3I8Y2hhcj4gPiBtX2RlbGl2ZXJ5RGF0YTsKKworICAgICAgICBGSUxFKiBt
X3RlbXBGaWxlSGFuZGxlOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIG1fcGx1Z2lu
RnVuY3M7CisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICB1aW50MTYgbV90cmFuc2Zl
ck1vZGU7CisgICAgICAgIGludDMyIG1fb2Zmc2V0OworICAgICAgICBDU3RyaW5nIG1faGVhZGVy
czsKKyAgICAgICAgQ1N0cmluZyBtX3BhdGg7CisgICAgICAgIE5QUmVhc29uIG1fcmVhc29uOwor
ICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFz
ZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3Rr
KiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lu
cyA9IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0
aHMoUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1
Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lk
IFBsdWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30K
KworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0
IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAg
IC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVn
aW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAg
IG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisgICAgICAgIFBsdWdpblNldCBwbHVn
aW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsKKworICAgICAgICBlbmQgPSBt
X3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQ
bHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAg
IGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBBZGQg
bmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAg
cGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVn
aW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVn
aW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMu
ZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1Bs
dWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFk
ZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5
KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQ
bHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcworICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsg
bWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1
Z2luRGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVnaW5QYWNr
YWdlR3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQbHVnaW5TZXQgUGx1
Z2luRGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0
cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgUGx1
Z2luUGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBu
ZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChpdC0+dXRmOCgpKS5kYXRhKCksIDAsIE5V
TEwpOworCWlmIChkaXIpIHsKKwkgIGNvbnN0IGNoYXIqIG5hbWU7CisJICB3aGlsZSAoKG5hbWUg
PSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKwkgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgobmFt
ZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKwkgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1
aWxkX2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworCSAgICAgIFBs
dWdpblBhY2thZ2VHdGsqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQ
YWNrYWdlKGZpbGVuYW1lLCB0aW1lKE5VTEwpKTsKKwkgICAgICBpZiAocGx1Z2luUGFja2FnZSkg
eworCQlwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKwkgICAgICB9CisJICAgICAgZ19mcmVl
KGZpbGVuYW1lKTsKKwkgICAgfQorCSAgfQorCSAgZ19kaXJfY2xvc2UoZGlyKTsKKwl9CisgICAg
fQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4g
cGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKK3sKKyAgICBW
ZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHVu
c2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5n
Lmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZl
cnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQorICAgICAgICAgICAgaWYgKHZlcnNpb25T
dHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZl
cnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQo
KTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7CisKKyAgICAgICAg
c3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKworICAgIHJldHVybiB2ZXJzaW9uOworfQor
CisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9u
Qgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYg
dmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPj0g
dmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYg
KHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9u
cyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQs
IGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5n
PiBQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8
U3RyaW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUo
Z19nZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRo
cy5hcHBlbmQoaG9tZVBhdGgpOworICAgIGdfZnJlZShob21lUGF0aCk7CisKKyAgICBjb25zdCBn
Y2hhciogbW96UGF0aCA9IGdfZ2V0ZW52KCJNT1pfUExVR0lOX1BBVEgiKTsKKyAgICBpZiAobW96
UGF0aCkgeworICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQobW96UGF0aCwg
IjoiLCAtMSk7CisKKyAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykK
KwlwYXRocy5hcHBlbmQocGx1Z2luUGF0aHNbaV0pOworCisgICAgICBnX2ZyZWUocGx1Z2luUGF0
aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEvcGx1
Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7CisK
KyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6OmlzTUlNRVR5
cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWlt
ZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2lu
Rm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBTdHJpbmcga2V5ID0g
bWltZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQp
LT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJu
ICgqaXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdl
R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVn
aW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygp
LmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAh
PSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6Zmlu
ZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisg
ICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsKKworICAgIGlmICghbWltZVR5cGUuaXNO
dWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAg
ICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7
CisgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VG
aW5kKCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JFeHRlbnNpb24oZXh0
ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5k
LCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBlIAorICAgICAgICAvLyBjb3JyZXNwb25k
aW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKwor
UGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IGZpbmRQbHVnaW4o
dXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJl
ZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdp
biAmJiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlw
ZSk7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmlld0d0ayhwYXJlbnRGcmFtZSwg
c2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1l
VHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5m
b1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1
Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBp
KSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VHdGsgKmRiID0gUGx1Z2luRGF0YWJhc2VHdGs6Omlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87
CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAg
ICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdl
LT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOwor
CisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBw
YWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlw
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8q
IG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1p
bWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAg
bWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVu
c2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkg
PiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAg
ICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNv
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBs
dWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6
cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBHVEsrCisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6
Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQor
Cit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdp
bkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKKworICAgIGlmIChy
ZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisg
ICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDI4NjEzKQorKysgV2ViQ29yZS9XZWJDb3JlLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCwxMSBAQCBERVBFTkRQQVRIICs9IGVkaXRp
bmcvcXQgaGlzdG9yeS9xdCBsb2FkCiB9CiAKIGd0ay1wb3J0IHsKK3gxMTpwbHVnaW5zIHsKKyAg
ICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICBMSUJTICs9IC1sWHQKK30KKwogICAgIElOQ0xVREVQ
QVRIICs9IFwKICAgICAkJFBXRC9wbGF0Zm9ybS9ndGsgXAogICAgICQkUFdEL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ayBcCkBAIC0xNjcsNiArMTcyLDcgQEAgZ3RrLXBvcnQgewogICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3hibSBcCiAgICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAor
ICAgIHBsdWdpbnMvZ3RrIFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAg
ICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcKIH0KQEAgLTgzNiwxMyArODQyLDM5IEBAIFNPVVJDRVMg
Kz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5z
IHsKKyAgICBERUZJTkVTICs9IEdUS19ESVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMg
Kz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMv
Z3RrL1BsdWdpbkRlYnVnLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBc
CisgICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1h
cC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5j
cHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9Q
bHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVn
aW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3
R3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgewor
ICAgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICBwbHVn
aW5zL2d0ay9ucGZ1bmN0aW9ucy5oIFwKKyAgICBwbHVnaW5zL2d0ay94ZW1iZWQuaAorCisgICAg
U09VUkNFUyArPSBcCisgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKKyAgfQogfQogCiBxdC1w
b3J0IHsKQEAgLTk0Myw2ICs5NzUsNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAg
IElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwK
ICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAg
ICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmggXApJbmRleDogV2ViQ29yZS9sb2FkZXIv
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAkocmV2aXNpb24gMjg2MTMpCisrKyBX
ZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDggKzI5LDkxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKIAorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIoRnJhbWUq
IGZyYW1lLCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCogY2xpZW50KQorICAgIDog
UmVzb3VyY2VMb2FkZXIoZnJhbWUsIHRydWUsIHRydWUpCisgICAgLCBtX2NsaWVudChjbGllbnQp
Cit7Cit9CisKK05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjp+TmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXIoKQoreworfQorCitQYXNzUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
PiBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gbmV3IE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKGZyYW1lLCBjbGllbnQpOworfQorCitib29sIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyOjppc0RvbmUoKSBjb25zdAoreworICAgIHJldHVybiAhbV9j
bGllbnQ7Cit9CisKK3ZvaWQgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OnJlbGVhc2VSZXNv
dXJjZXMoKQoreworICAgIG1fY2xpZW50ID0gMDsKKyAgICBSZXNvdXJjZUxvYWRlcjo6cmVsZWFz
ZVJlc291cmNlcygpOworfQorCit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
UmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworCisgICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7CisKKyAgICAvLyBE
b24ndCBjb250aW51ZSBpZiB0aGUgc3RyZWFtIGlzIGNhbmNlbGxlZAorICAgIGlmICghbV9jbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UocmVzcG9uc2UpOworCisgICAgLy8gRG9uJ3QgY29udGludWUgaWYgdGhlIHN0cmVhbSBp
cyBjYW5jZWxsZWQKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocmVzcG9uc2UuaXNIVFRQKCkgJiYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPCAxMDAg
fHwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApKQorICAgICAgICBkaWRDYW5jZWwo
ZnJhbWVMb2FkZXIoKS0+ZmlsZURvZXNOb3RFeGlzdEVycm9yKHJlc3BvbnNlKSk7Cit9CisKK3Zv
aWQgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9u
Y2UpCit7CisgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBwcm90ZWN0KHRo
aXMpOworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0aCk7
CisgICAgCisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aCwg
bGVuZ3RoUmVjZWl2ZWQsIGFsbEF0T25jZSk7Cit9CisKK3ZvaWQgTmV0c2NhcGVQbHVnSW5TdHJl
YW1Mb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKworICAgIG1fZG9jdW1lbnRMb2FkZXItPnJl
bW92ZVBsdWdJblN0cmVhbUxvYWRlcih0aGlzKTsKKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9h
ZGluZyh0aGlzKTsKKyAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZygpOworfQor
Cit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKQoreworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4g
cHJvdGVjdCh0aGlzKTsKKworICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVBsdWdJblN0cmVh
bUxvYWRlcih0aGlzKTsKKyAgICBtX2NsaWVudC0+ZGlkRmFpbCh0aGlzLCBlcnJvcik7CisgICAg
UmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoZXJyb3IpOworfQorCit2b2lkIE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyOjpkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7Cisg
ICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworCisg
ICAgbV9kb2N1bWVudExvYWRlci0+cmVtb3ZlUGx1Z0luU3RyZWFtTG9hZGVyKHRoaXMpOworICAg
IG1fY2xpZW50LT5kaWRGYWlsKHRoaXMsIGVycm9yKTsKKyAgICBSZXNvdXJjZUxvYWRlcjo6ZGlk
Q2FuY2VsKGVycm9yKTsKK30KKwogfQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRk
aXJzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQko
cmV2aXNpb24gMjg2MTMpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDcgQEAgbXkgJGN1cnJlbnRTVk5SZXZpc2lvbjsKIG15
ICRvc1hWZXJzaW9uOwogbXkgJGlzUXQ7CiBteSAkaXNHdGs7CitteSAkZW5hYmxlR3RrUGx1Z2lu
czsKIG15ICRpc1d4OwogCiAjIFZhcmlhYmxlcyBmb3IgV2luMzIgc3VwcG9ydApAQCAtNDgwLDYg
KzQ4MSwyMyBAQCBzdWIgZGV0ZXJtaW5lSXNHdGsoKQogICAgIH0KIH0KIAorc3ViIGVuYWJsZUd0
a1BsdWdpbnMoKQoreworICAgIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKTsKKyAgICByZXR1
cm4gJGVuYWJsZUd0a1BsdWdpbnM7Cit9CisKK3N1YiBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5z
KCkKK3sKKyAgICByZXR1cm4gaWYgZGVmaW5lZCgkZW5hYmxlR3RrUGx1Z2lucyk7CisKKyAgICBp
ZiAoY2hlY2tBcmd2KCItLWRpc2FibGUtZ3RrLXBsdWdpbnMiKSkgeworICAgICAgICAkZW5hYmxl
R3RrUGx1Z2lucyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMg
PSAxOworICAgIH0KK30KKwogc3ViIGlzV3goKQogewogICAgIGRldGVybWluZUlzV3goKTsKQEAg
LTc3OSw2ICs3OTcsNyBAQCBzdWIgYnVpbGRRTWFrZUd0a1Byb2plY3QoJCQpCiAKICAgICBteSBA
YnVpbGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0Iik7CiAgICAgcHVzaCBAYnVpbGRBcmdzLCAi
Q09ORklHLT1xdCI7CisgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBl
bmFibGVHdGtQbHVnaW5zKCk7CiAKICAgICByZXR1cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFu
LCBAYnVpbGRBcmdzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17869</attachid>
            <date>2007-12-12 14:01:35 -0800</date>
            <delta_ts>2007-12-13 13:56:33 -0800</delta_ts>
            <desc>Updated patch for KURL class changes and without other patches included</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>169635</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShyZXZpc2lvbiAyODY1NSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMiArNjIsMTcg
QEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJQbHVnSW5J
bmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2Vi
RnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygw
KQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTcy
LDkgKzE3OCwzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAq
ZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9u
c2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVu
Z3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2Uo
KS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAgICAg
ICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rp
bmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBp
cyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlz
IHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAo
bGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3Zl
cnJpZGVFbmNvZGluZygpOworICAgICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNO
dWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3NlbikKKyAgICAgICAgICAgIGVuY29kaW5nID0g
bG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgICAgICBGcmFtZUxv
YWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1l
TG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGlmIChk
YXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAg
ICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50UmVz
cG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVz
cG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNl
VG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVj
ZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9h
ZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKQpAQCAtMjcwLDggKzI5NywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rp
b24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBs
dWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dp
ZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVn
aW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZp
ZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygp
LT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVy
bCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisg
ICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiAwOwogfQpAQCAtMzEzLDggKzM0NSw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+
IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJl
Y3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
Vmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6
OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBL
VVJMJiBiYXNlVVJMLApAQCAtMzM2LDYgKzM2Nyw5IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1l
TG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVu
dEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCkt
PmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJD
b3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAKQEAgLTQ4MiwxNCArNTE2LDE0IEBAIFN0cmluZyBG
cmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAg
ICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVu
Y29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRo
YXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlz
IHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAo
bGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXIt
Pm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNO
dWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRv
Y3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVu
dExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4p
OworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisgICAgICAgIGNvbW1pdHRlZExvYWQoZG9jdW1l
bnRMb2FkZXIsIDAsIDApOworICAgIGVsc2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZp
bmlzaExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogCkBAIC01NDUsNyArNTc5
LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNhdmVEb2N1bWVudFZpZXcKIGJvb2wgRnJh
bWVMb2FkZXJDbGllbnQ6OmNhbkNhY2hlUGFnZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIGZhbHNlOyB9CiBGcmFtZSogRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRl
UGFnZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJv
ciYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFp
bkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1
bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIHsK
KyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChl
cnJvcik7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3Bv
bnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyBub3RJbXBsZW1lbnRlZCgp
OyB9CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yU3RhbmRh
cmRMb2FkKGNvbnN0IEtVUkwmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnVwZGF0ZUdsb2JhbEhpc3RvcnlGb3JSZWxvYWQoY29uc3QgS1VSTCYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMjg2NTUpCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlJl
c291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTE3OCw3ICsxODAsMTEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNl
ckFnZW50OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAg
ICAgICAgV2ViQ29yZTo6UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICBib29s
IG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMjg2NTUpCisrKyBXZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXCiAgICAgc2V0dGluZ3Mt
PnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVk
Rm9udEZhbWlseSgiQ291cmllciBOZXciKTsKICAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250
RmFtaWx5KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsK
IAogICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOwogICAg
IHdlYlZpZXdEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJh
bWVfbmV3KHdlYlZpZXcpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjg2NTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsNiBAQCBW
ZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6
aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9
CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWdu
ZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBT
dHJpbmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVU
eXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZh
bHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQotCi0KIENvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhG
RjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9u
KHZvaWQgKCopKCkpIHsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJl
dmlzaW9uIDI4NjU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDUgKzMwNiwyMiBAQCB2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJ
bnZhbGlkYXRpb24oYm9vCiAKIHZvaWQgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAog
eworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3RrV2lk
Z2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHBhcmVudCgpKTsKKyAgICBJbnRQb2ludCBsb2MgPSBmcmFtZVZpZXctPmNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpOworCisgICAgLy8gRG9u
J3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6ZSB0byBiZSBuZWdhdGl2ZQorICAgIEludFNpemUg
c3ogPSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpOworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8o
KTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwg
c3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
Z3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIH0KSW5kZXg6IFdlYkNvcmUvY29uZmlnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jb25maWcuaAkocmV2aXNpb24gMjg2NTUpCisrKyBXZWJD
b3JlL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9EaXNhbGxvd0NUeXBlLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyNkZWZp
bmUgV1RGX1VTRV9OUE9CSkVDVCAxCisjZW5kaWYKKwogI2lmICFDT01QSUxFUihNU1ZDKSAvLyBj
YW4ndCBnZXQgdGhpcyB0byBjb21waWxlIG9uIFZpc3VhbCBDKysgeWV0CiAjZGVmaW5lIEFWT0lE
X1NUQVRJQ19DT05TVFJVQ1RPUlMgMQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFiYXNlR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5EYXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5EYXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VHdGtfSAorI2RlZmluZSBQbHVnaW5EYXRh
YmFzZUd0a19ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFj
a2FnZUd0ay5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgSW50U2l6
ZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7CisgICAgY2xh
c3MgUGx1Z2luVmlld0d0azsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UGx1Z2luUGFj
a2FnZUd0az4sIFBsdWdpblBhY2thZ2VHdGtIYXNoPiBQbHVnaW5TZXQ7CisgIAorICAgIGNsYXNz
IFBsdWdpbkRhdGFiYXNlR3RrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQbHVnaW5E
YXRhYmFzZUd0ayogaW5zdGFsbGVkUGx1Z2lucygpOworICAgICAgICBQbHVnaW5WaWV3R3RrKiBj
cmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIGJvb2wgcmVmcmVzaCgpOwor
ICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IHBsdWdpbnMoKSBjb25zdDsKKyAgICAg
ICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25z
dDsKKyAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJik7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CisgICAgICAgIFBsdWdpblNldCBn
ZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIGZp
bmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKworICAg
ICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luRm9yRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgZXh0ZW5zaW9uKTsKKworICAgICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
ZGVmYXVsdFBsdWdpblBhdGhzKCk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9wbHVnaW5Q
YXRoczsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVUeXBlczsKKyAg
ICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisj
aW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUg
IlBsdWdpblN0cmVhbUd0ay5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94
eS5oIgorI2luY2x1ZGUgImtqc193aW5kb3cuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5o
IgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNp
bmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYm
ICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisj
aW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIK
KyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0
ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtK
Uzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisK
K3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2lu
UmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQq
IG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVl
c3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgICAgICwgbV9zZW5k
Tm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVibGljOgorICAgIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
TG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9u
b3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9m
cmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2Vu
ZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0dXJlCit9OworCitzdGF0aWMg
Y29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCA9IDAuMDAxOworCitjbGFz
cyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrIHsKK3B1YmxpYzoKKyAgICBQbHVnaW5NZXNzYWdl
VGhyb3R0bGVyR3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcpCisgICAgICAgIDogbV9wbHVn
aW5WaWV3KHBsdWdpblZpZXcpCisgICAgICAgICwgbV9iYWNrKDApLCBtX2Zyb250KDApCisgICAg
ICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcih0aGlzLCAmUGx1Z2luTWVzc2FnZVRocm90dGxl
ckd0azo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKKyAgICB7CisgICAgICAgIC8vIEluaXRp
YWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVzc2FnZXMKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUlubGluZU1lc3NhZ2VzIC0gMTsgaSsrKQorICAgICAg
ICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1faW5saW5lTWVzc2FnZXNbaSArIDFd
OworICAgICAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9
IDA7CisgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07
CisgICAgfQorCisgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsoKQorICAgIHsKKyAgICAg
ICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICAKKyAgICAgICAgZm9yIChQbHVnaW5NZXNzYWdl
KiBtZXNzYWdlID0gbV9mcm9udDsgbWVzc2FnZTsgbWVzc2FnZSA9IG5leHQpIHsKKyAgICAgICAg
ICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OworICAgICAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2Fn
ZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE1lc3Nh
Z2UoWElEIGhXbmQsIGd1aW50IG1zZywgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0pIAorICAg
IHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IGFsbG9jYXRlTWVzc2FnZSgpOwor
CisgICAgICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOworICAgICAgICBtZXNzYWdlLT5tc2cgPSBt
c2c7CisgICAgICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJhbTsKKyAgICAgICAgbWVzc2FnZS0+
bFBhcmFtID0gbFBhcmFtOworICAgICAgICBtZXNzYWdlLT5uZXh0ID0gMDsKKworICAgICAgICBp
ZiAobV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrLT5uZXh0ID0gbWVzc2FnZTsKKyAgICAgICAg
bV9iYWNrID0gbWVzc2FnZTsKKyAgICAgICAgaWYgKCFtX2Zyb250KQorICAgICAgICAgICAgbV9m
cm9udCA9IG1lc3NhZ2U7CisKKyAgICAgICAgaWYgKCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hv
dChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dHJ1Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAgIFhJRCBoV25kOworICAgICAgICBndWludCBt
c2c7CisgICAgICAgIGd1aW50IHdQYXJhbTsKKyAgICAgICAgZ2xvbmcgbFBhcmFtOworCisgICAg
ICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0OworICAgIH07CisgICAgCisgICAgdm9pZCBt
ZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+
KikKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OworICAg
ICAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsKKyAgICAgICAgaWYgKG1lc3NhZ2UgPT0gbV9i
YWNrKQorICAgICAgICAgICAgbV9iYWNrID0gMDsKKworCS8vICAgICAgICA6OkNhbGxXaW5kb3dQ
cm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJvYygpLCBtZXNzYWdlLT5oV25kLCBtZXNzYWdl
LT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2FnZS0+bFBhcmFtKTsKKworICAgICAgICBmcmVl
TWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICBpZiAobV9mcm9udCkKKyAgICAgICAgICAgIG1f
bWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRl
cnZhbCk7CisgICAgfQorCisgICAgUGx1Z2luTWVzc2FnZSogYWxsb2NhdGVNZXNzYWdlKCkKKyAg
ICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7CisKKyAgICAgICAgaWYgKG1fZnJl
ZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgICAgICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVz
c2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdl
OworCisgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0KKworICAgIGJvb2wgaXNJbmxpbmVN
ZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1l
c3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0gJiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNz
YWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOworICAgIH0KKworICAgIHZvaWQgZnJlZU1lc3Nh
Z2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmVN
ZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5s
aW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2U7CisgICAgfQorCisg
ICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFj
azsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2Zyb250OworCisgICAgc3RhdGljIGNvbnN0IGludCBO
dW1JbmxpbmVNZXNzYWdlcyA9IDQ7CisgICAgUGx1Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2Vz
W051bUlubGluZU1lc3NhZ2VzXTsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2ZyZWVJbmxpbmVNZXNz
YWdlczsKKworICAgIFRpbWVyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRo
cm90dGxlVGltZXI7Cit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlw
dFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwuc3RyaW5nKCkuc3RhcnRzV2l0
aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIEtVUkw6OmRl
Y29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoMTEpKTsKK30KKworUGx1Z2lu
Vmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK2NvbnN0
IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3V2luZG93Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3
IjsKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZp
ZXdQcm9wZXJ0eSI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1v
emlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBH
ZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRl
V2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVj
dCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3Qg
PSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNv
bnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5
KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2Ns
aXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAg
IGlmIChtX3dpbmRvdyAmJiAobV93aW5kb3dSZWN0ICE9IG9sZFdpbmRvd1JlY3QgfHwgbV9jbGlw
UmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsKKyAgICAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgICAgIGlmIChtX3dpZGdldCkgewor
ICAgICAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlv
bik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FC
TEVfUExVR0lOUykKKyAgICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAg
ICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1fd2lkZ2V0KSwgbV93aW5k
b3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAgICAgICAgZ3RrX3h0Ymlu
X3Jlc2l6ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWln
aHQoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KK30KKworSW50
UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3Rh
cnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2lu
ZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlw
IHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRl
ckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsK
KyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXco
KTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JM
YXllcihsYXllciwgdHJ1ZSkpOworCisgICAgcmV0dXJuIGNsaXBSZWN0OworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5wcmludGluZygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAocmVjdCAhPSBmcmFtZUdlb21ldHJ5KCkpCisgICAgICAgIFdpZGdldDo6c2V0
RnJhbWVHZW9tZXRyeShyZWN0KTsKKworICAgIGlmIChwYXJlbnQoKSkKKyAgICAgICAgaW5pdCgp
OworCisgICAgdXBkYXRlV2luZG93KCk7CisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0Cit7CisgICAgV2lk
Z2V0OjpnZW9tZXRyeUNoYW5nZWQoKTsKKyAgICB1cGRhdGVXaW5kb3coKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpzZXRGb2N1cygpCit7CisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2lu
ZG93KQorICAgIC8vU2V0Rm9jdXMod2luZG93KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzaG93KCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHRy
dWU7CisKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TaG93V2luZG93
KHdpbmRvdywgU1dfU0hPV05BKTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OmhpZGUoKQoreworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICAv
L2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TaG93V2luZG93KHdpbmRvdywgU1df
SElERSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpw
YWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG51bGxQbHVnaW5JbWFnZTsKKyAgICBp
ZiAoIW51bGxQbHVnaW5JbWFnZSkKKyAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7CisKKyAgICBJbnRSZWN0IGltYWdlUmVj
dChmcmFtZUdlb21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBudWxsUGx1Z2luSW1h
Z2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50IHhPZmZz
ZXQgPSAoZnJhbWVHZW9tZXRyeSgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOwor
ICAgIGludCB5T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS5oZWlnaHQoKSAtIGltYWdlUmVjdC5o
ZWlnaHQoKSkgLyAyOworCisgICAgaW1hZ2VSZWN0Lm1vdmUoeE9mZnNldCwgeU9mZnNldCk7CisK
KyAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhpbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+Y2xpcCh3aW5kb3dDbGlwUmVjdCgp
KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobnVsbFBsdWdpbkltYWdlLCBpbWFnZVJlY3QubG9j
YXRpb24oKSk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIC8vIERyYXcgdGhlICJtaXNzaW5n
IHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCBy
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzV2luZG93ZWQgfHwg
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOUEV2
ZW50IG5wRXZlbnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLwor
CisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisKKyAgICBBU1NF
UlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFu
Y2UsICZucEV2ZW50KTsKKyAgICB9CisKKyAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRy
eSgpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgLyogU3ludGhlc2l6ZSBh
biBYRXZlbnQgYW5kIHBhc3MgaXQgb24gKi8KKyAgICAvKgorICAgIG5wRXZlbnQud1BhcmFtID0g
ZXZlbnQtPmtleUNvZGUoKTsgICAgCisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3du
RXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047CisgICAgICAgIG5w
RXZlbnQubFBhcmFtID0gMDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5dXBF
dmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7CisgICAgICAgIG5wRXZl
bnQubFBhcmFtID0gMHg4MDAwOworICAgIH0KKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKK30KKworLy9leHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOworCit2
b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7
CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8g
cGFzcyBvbiAqLworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJl
bnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5w
YWdlWSgpKSk7CisKKyAgICAvKgorICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngo
KSwgcC55KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGlmIChldmVudC0+Y3Ry
bEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOworICAgIGlmIChl
dmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7CisK
KyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW1vdmVFdmVudCB8fAorICAgICAgICBldmVu
dC0+dHlwZSgpID09IG1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0g
bW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsK
KyAgICAgICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2
ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAg
ICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAg
ICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAg
ICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50
eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9u
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTEJVVFRPTkRPV047CisKKyAgICAgICAgICAgICAgICAvLyBGb2N1cyB0aGUgcGx1Z2lu
CisgICAgICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5v
ZGUobV9lbGVtZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
MToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkg
eworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAw
OgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9OVVA7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX01CVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRP
TlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIHJldHVybjsKKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKwor
ICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRl
ciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKKyAgICAvLyBhbmQgc2luY2Ugd2Ug
ZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0
byBwcmV2ZW50IHRoYXQuCisgICAgLy9pZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsgICAgIAor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAg
ICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0
aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXli
b2FyZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5
Ym9hcmRFdmVudCo+KGV2ZW50KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyZW50
KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlv
bigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBwLnko
KTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRv
dy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0
ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJv
dHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnNldHdpbmRvdykgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3Rh
bmNlLCAmbV9ucFdpbmRvdyk7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICB9CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpZGdl
dCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZp
bmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAg
ICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1fd2lkZ2V0KSwgYWxsb2NhdGlv
bi54LCBhbGxvY2F0aW9uLnkpOworICAgICAgICBndGtfeHRiaW5fcmVzaXplKG1fd2lkZ2V0LCBh
bGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CisgICAgfQorI2VuZGlmCit9CisK
K2Jvb2wgUGx1Z2luVmlld0d0azo6c3RhcnQoKQoreworICAgIGlmIChtX2lzU3RhcnRlZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1fcGx1Z2luKTsKKyAgICBBU1NFUlQo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOworCisgICAgTlBFcnJvciBucEVycjsKKyAg
ICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICB7CisgICAg
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVy
ciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUu
ZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBt
X3BhcmFtVmFsdWVzLCBOVUxMKTsKKyAgICB9CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVu
dFBsdWdpblZpZXcoMCk7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICgh
bV91cmwuaXNFbXB0eSgpICYmICFtX2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRS
ZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJsKTsKKyAgICAgICAgbG9hZChmcmFtZUxv
YWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6c3RvcCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+IHN0cmVh
bXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+Ojpp
dGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtR3RrPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7CisgICAgICAgIGRpc2Nvbm5lY3RTdHJl
YW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgp
KTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrczsKKworICAgIC8vIERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5zdGFuY2UsIDApOworCisgICAgbV9p
bnN0YW5jZS0+cGRhdGEgPSAwOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcpCit7CisgICAgc19jdXJyZW50UGx1
Z2luVmlldyA9IHBsdWdpblZpZXc7Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6
OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsK
K30KKworc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7
CisgICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKKyAgICBjaGFyKiByZXN1bHQgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGNzdHIubGVuZ3RoKCkgKyAxKSk7CisKKyAg
ICBzdHJuY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHIubGVuZ3RoKCkgKyAxKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiog
c3RyaW5nQXJyYXksIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJpbmdBcnJheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAg
ICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkp
OworfQorCitzdGF0aWMgYm9vbCBnZXRTdHJpbmcoS0pTUHJveHkqIHByb3h5LCBKU1ZhbHVlKiBy
ZXN1bHQsIFN0cmluZyYgc3RyaW5nKQoreworICAgIGlmICghcHJveHkgfHwgIXJlc3VsdCB8fCBy
ZXN1bHQtPmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0xvY2sg
bG9jazsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb3h5LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOworICAgIFVTdHJpbmcgdXN0cmluZyA9IHJlc3VsdC0+dG9TdHJpbmcoZXhlYyk7
CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAKKyAgICBzdHJpbmcgPSB1c3RyaW5n
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBlcmZvcm1SZXF1
ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAgS1VSTCByZXF1ZXN0VVJMID0g
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAg
IFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJM
KTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBtX3BhcmVudEZyYW1l
LT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLCAwLCBm
YWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5
PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2Fk
aW5nCisgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKKyAgICAgICAg
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJM
LmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURh
dGEoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGFy
Z2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0
aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgorICAgIC8vIGFuZCB0aGlzIGhhcyBi
ZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCisgICAgQVNTRVJUKHJlcXVlc3QtPmZyYW1lTG9hZFJl
cXVlc3QoKS5mcmFtZU5hbWUoKS5pc0VtcHR5KCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5m
aW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKSkgPT0gbV9wYXJlbnRG
cmFtZSk7CisgICAgCisgICAgLy8gRXhlY3V0aW5nIGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUgcGx1
Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBw
YXJlbnQgZnJhbWUuCisgICAgUmVmUHRyPEZyYW1lPiBwYXJlbnRGcmFtZSA9ICBtX3BhcmVudEZy
YW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5leGVj
dXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdHJ1ZSk7CisKKyAgICBpZiAo
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlzTnVsbCgpKSB7CisgICAg
ICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CisKKyAgICAgICAgaWYgKCFnZXRTdHJpbmcocGFyZW50
RnJhbWUtPnNjcmlwdFByb3h5KCksIHJlc3VsdCwgcmVzdWx0U3RyaW5nKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBDU3RyaW5nIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOwor
ICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFt
R3RrKHRoaXMsIHBhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCku
cmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+
bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworICAgICAgICBz
dHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3
R3RrPiogdGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX3JlcXVlc3RUaW1lcik7Cisg
ICAgQVNTRVJUKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCk7CisKKyAgICBQbHVnaW5SZXF1ZXN0R3Rr
KiByZXF1ZXN0ID0gbV9yZXF1ZXN0c1swXTsKKyAgICBtX3JlcXVlc3RzLnJlbW92ZSgwKTsKKyAg
ICAKKyAgICAvLyBTY2hlZHVsZSBhIG5ldyByZXF1ZXN0IGJlZm9yZSBjYWxsaW5nIHBlcmZvcm1S
ZXF1ZXN0IHNpbmNlIHRoZSBjYWxsIHRvCisgICAgLy8gcGVyZm9ybVJlcXVlc3QgY2FuIGNhdXNl
IHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZWxldGVkLgorICAgIGlmIChtX3JlcXVlc3RzLnNpemUo
KSA+IDApCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKworICAgIHBl
cmZvcm1SZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNjaGVkdWxl
UmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdHMuYXBw
ZW5kKHJlcXVlc3QpOworICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
TlBFcnJvciBQbHVnaW5WaWV3R3RrOjpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1l
TG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKK3sK
KyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9k
KCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0
aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIEtVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOworCisgICAgU3RyaW5nIHRhcmdldCA9IGZyYW1l
TG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisKKyAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3Rh
cnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBp
cyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNh
bWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3Vt
ZW50TG9hZGVyKCkgJiYKKyAgICAgICAgKHRhcmdldC5pc051bGwoKSB8fCBtX3BhcmVudEZyYW1l
LT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJp
bmdJZkphdmFTY3JpcHRVUkwodXJsKTsKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7Cisg
ICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFyZW50RnJhbWUtPnNldHRpbmdzKCk7Cisg
ICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkp
IHsKKyAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SIGlmIEpTIGlzIGRp
c2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmlzTnVsbCgpICYm
IG1fbW9kZSA9PSBOUF9GVUxMKSB7CisgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBhIEphdmFT
Y3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVnLWluIHRoYXQgaXMgc2VsZi10YXJn
ZXR0ZWQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2UgdGhlIHVzZXIgdG8g
YmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQwMzkpLgorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWpz
U3RyaW5nLmlzTnVsbCgpIHx8ICF0YXJnZXQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFqc1N0
cmluZy5pc051bGwoKSAmJiAhdGFyZ2V0LmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUtPnRyZWUo
KS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpIHsKKyAgICAgICAgICAgIC8vIEZvciBz
ZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhl
IGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorCisgICAgICAgIFBsdWdpblJlcXVlc3RHdGsq
IHJlcXVlc3QgPSBuZXcgUGx1Z2luUmVxdWVzdEd0ayhmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90
aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgc2NoZWR1bGVSZXF1ZXN0KHJlcXVlc3Qp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFBsdWdpblN0cmVhbUd0ayogc3RyZWFtID0gbmV3IFBs
dWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgbV9z
dHJlYW1zLmFkZChzdHJlYW0pOworCisgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwoY29u
c3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAg
RGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4x
KHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzCisg
ICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVybFN0cmluZy5yZXBsYWNlKCdc
cicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05Q
RXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3Qg
ZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRh
cmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0
aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVS
TChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRS
ZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpn
ZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVM
b2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRG
cmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBsb2Fk
KGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN0
YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0
dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclswXSA9PSAnXG4nOworfQorCitzdGF0aWMg
aW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+
JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9i
YXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0
ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIAor
ICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYg
aWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYm
IGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAg
ICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgZWxz
ZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBE
aXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgorICAgICAgICAgICAgICAgIHJl
dHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0
ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2gu
IEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgorICAgICAgICAgICAgICAgIHJldHVybiBp
ICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlu
bGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlz
IGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2
ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMg
d2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxG
TEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcu
IEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgorICAgIC8vIENSLgorICAgIC8vCisgICAg
Ly8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJu
CisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChi
eXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAg
aWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBz
cGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVh
ZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAgIC8vIG5leHQgcmVhZC4KKyAgICAgICAg
ICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxk
TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVy
ID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hhciBjOworCisgICAgICAgIGlm
IChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3on
KQorICAgICAgICAgICAgYyA9IHRvdXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFj
YXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQor
ICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAg
ICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChj
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBI
ZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5k
YXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhU
VFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGls
IHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2Yt
bGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBl
b2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJh
Y3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAg
ICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVz
ID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdv
bid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAt
IGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxh
bmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAg
ICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAg
ICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1l
ZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNv
bnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5n
IGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAg
ICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBs
aW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwg
Y3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAgICAgICAgICAgY29uc3QgY2hh
ciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6JyAm
JiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAvLyBlbXB0eSBsb29w
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKSAKKyAgICAgICAg
ICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShEZXByZWNhdGVkU3Ry
aW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0
cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9s
OyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpj
b2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoY29sb24sIGVvbCAtIGNv
bG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5n
ZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgewor
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30KKwor
TlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9p
ZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykK
K3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAgIHJldHVybiBOUEVSUl9J
TlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0Owor
CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1ZiwgbGVuKTsKKworICAgICAgICBpZiAoZmlsZW5h
bWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5h
bWUuc3Vic3RyaW5nKDgpOworCisgICAgICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICAgICAgaWYg
KCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAoR0ZpbGVUZXN0KShHX0ZJ
TEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJWE1FIC0gcmVhZCB0aGUgZmlsZSBk
YXRhIGludG8gYnVmZmVyCisgICAgICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksICJyIik7CisgICAgICAgIAorICAgICAgICBpZiAoZmlsZUhhbmRs
ZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisg
ICAgICAgIC8vYnVmZmVyLnJlc2l6ZSgpOworCisgICAgICAgIGludCBieXRlc1JlYWQgPSBmcmVh
ZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAgICAgICBmY2xvc2UoZmls
ZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBwb3N0RGF0
YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUo
KTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFkZXJzKSB7CisgICAgICAgIGlmIChzdGFydHNXaXRo
QmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIHBvc3REYXRhKys7CisgICAgICAgICAg
ICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGxv
Y2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZlcik7CisgICAgICAgICAg
ICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxhbmsg
bGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5n
IGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzID0gcGFy
c2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2NhdGlvbjsKKworICAgICAg
ICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENvbnRlbnQtTGVuZ3Ro
IHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCisgICAgICAgICAgICAgICAgLy8gYnV0IFdlYkZv
dW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVy
CisgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhl
IHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRMZW5ndGgg
PSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAg
aWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVu
Z3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50LUxlbmd0aCIpOworCisgICAg
ICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERh
dGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQ
T1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFr
ZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJGaWVsZHMpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoUGFzc1JlZlB0cjxGb3JtRGF0YT4o
bmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2Fk
UmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1
Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90
aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYs
IGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdH
dGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRl
ZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hl
biB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwg
YnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoq
IHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisg
ICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK2ludDMyIFBsdWdpblZpZXdHdGs6
OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9
CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFt
LCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgUGx1Z2luU3RyZWFtR3RrKiBicm93c2VyU3RyZWFt
ID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtR3RrKj4oc3RyZWFtLT5uZGF0YSk7CisKKyAgICBp
ZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW1HdGs6Om93bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0g
bV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7
CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95U3RyZWFtKHJlYXNvbik7Cisg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitjb25zdCBjaGFyKiBQbHVnaW5WaWV3R3Rr
Ojp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJrcyAmIFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50KQorICAgICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKKworICAgIGlm
IChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZy
YW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CisgICAgcmV0dXJuIG1fdXNl
ckFnZW50LmRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdGF0dXMoY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgcyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEobWVzc2FnZSk7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2Uo
KSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0YXR1c2JhclRleHQobV9wYXJlbnRGcmFt
ZSwgcyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBk
ZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZCAoR1RLX0RJU0FCTEVfUExVR0lO
UykKKyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisgICAgICAgICAgICBpZiAoIW1f
bmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3Bs
YXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRk
aXNwbGF5KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7CisjaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IDI7
CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IDA7CisjZW5k
aWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogeworI2lmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgICAgICAq
KCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgICAgICAqKCh1
bnNpZ25lZCBsb25nICopdmFsdWUpID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVldpbmRvd05Q
T2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9w
YXJlbnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisgICAgICAg
ICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYg
KG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAg
ICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1l
bnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4g
dmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAg
ICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0g
KHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgdm9pZCogdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworICAgICAgICAgICAgKigoWElEICopdykgPSBHREtf
V0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cpOwor
CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0K
K30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAgICAgICBjYXNl
IE5QUFZwbHVnaW5XaW5kb3dCb29sOgorICAgICAgICAgICAgbV9pc1dpbmRvd2VkID0gdmFsdWU7
CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIGNhc2UgTlBQVnBs
dWdpblRyYW5zcGFyZW50Qm9vbDoKKyAgICAgICAgICAgIG1faXNUcmFuc3BhcmVudCA9IHZhbHVl
OworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRl
VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGltZXIpCit7CisgICAgQVNTRVJUKHRp
bWVyID09ICZtX2ludmFsaWRhdGVUaW1lcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9pbnZhbGlkUmVjdHMuc2l6ZSgpOyBpKyspCisgICAgICAgIFdpZGdldDo6aW52YWxpZGF0
ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOworICAgIG1faW52YWxpZFJlY3RzLmNsZWFyKCk7Cit9
CisKKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7
CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJp
Z2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKworICAgIGlmICht
X2lzV2luZG93ZWQpIHsKKyAgICAgICAgLyogRklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWN0YW5n
bGUKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdChyKTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3Qo
bV93aW5kb3csICZpbnZhbGlkUmVjdCwgRkFMU0UpOworICAgICAgICAqLworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChtX3F1aXJrcyAmIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKSB7
CisgICAgICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7CisgICAgICAgICAgICBpZiAo
IW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgbV9pbnZhbGlk
YXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBpZiAobV9pc1dp
bmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRSAtIEludmFsaWRhdGUgdGhl
IHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25Cb3gocmVnaW9uLCAmcikgPT0g
MCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICovCit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIC8qIEZJWE1FIC0gRm9yY2UgYSByZWRyYXcKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhtX3dpbmRvdyk7Cisg
ICAgZWxzZQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhjb250YWluaW5nV2luZG93KCkpOworICAg
ICovCit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBQbHVnaW5WaWV3R3RrOjpiaW5kaW5n
SW5zdGFuY2UoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisgICAgaWYgKCFtX3Bs
dWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9i
amVjdCwgJm9iamVjdCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9S
IHx8ICFvYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUUgLSBlcnJvcjog
aW5jb21wbGV0ZSB0eXBlIOKAmEtKUzo6QmluZGluZ3M6Okluc3RhbmNl4oCZIHVzZWQgaW4gbmVz
dGVkIG5hbWUgc3BlY2lmaWVyCisgICAgLy8gZXJyb3I6IGluY29tcGxldGUgdHlwZSDigJhLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZeKAmSB1c2VkIGluIG5lc3RlZCBuYW1lIHNwZWNpZmllcgorICAg
IC8vUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3QgPSBtX3BhcmVudEZyYW1l
LT5jcmVhdGVSb290T2JqZWN0KHRoaXMsIG1fcGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCktPmlu
dGVycHJldGVyKCkpOworICAgIC8vS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmluc3RhbmNlID0g
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNl
KEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpDTGFuZ3VhZ2UsIG9iamVjdCwgcm9vdC5yZWxlYXNl
KCkpOworCisgICAgLy9fTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIC8vcmV0dXJu
IGluc3RhbmNlOworICAgIHJldHVybiBOVUxMOworfQorCitQbHVnaW5WaWV3R3RrOjp+UGx1Z2lu
Vmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVz
dHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsK
KyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKworICAg
IGlmICghbV9uZWVkc1hFbWJlZCAmJiBtX3dpZGdldCkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0
cm95KG1fd2lkZ2V0KTsKKyAgICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwp
OworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhp
cyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVu
bG9hZFBsdWdpbikpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayogc3RyZWFtKQorewor
ICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMu
cmVtb3ZlKHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5
IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIg
YWdlbnQKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNo
IikgeworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2Vu
dDsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7Cisg
ICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2Fn
ZXM7CisgICAgfQorCisgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUg
Zmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbwor
ICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qg
c2l6ZQorICAgIGlmIChtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBt
X3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9x
dWlya3MgfD0gUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAv
LyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdp
biBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBh
c3MgaXQgdG8gdGhlIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVt
b3ZlV2luZG93bGVzc1ZpZGVvUGFyYW07CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2lu
IHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIg
dXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVn
aW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2Rp
dngiKQorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dD
YWxsOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0g
aW4gb3VyIE5QUnVudGltZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAv
LyBOUE9iamVjdCBhbmQgcGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUg
dG8gc2VlIHdoYXQgcm9vdCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8v
IFRodXMsIHdlIGRvbid0IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRl
ZCB3aGVuIHRoZSBwbHVnLWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzU0ODc3NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1z
aWx2ZXJsaWdodCIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBs
dWdpbjsKKworICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUg
V2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93Lgor
ICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAg
ICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJl
Y3Vyc2l2ZWx5OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6
ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNp
Z25lZCBwYXJhbUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJh
bVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFy
KikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CisgICAgICAgIGlmICgobV9xdWlya3MgJiBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRl
b1BhcmFtKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3Zp
ZGVvIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFy
YW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3Bh
cmFtVmFsdWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7
CisKKyAgICAgICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBh
cmFtQ291bnQ7Cit9CisKK1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVu
dEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisg
ICAgLCBtX3BhcmVudEZyYW1lKHBhcmVudEZyYW1lKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQp
CisgICAgLCBtX2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFz
ZVVSTChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+
ZG9jdW1lbnQoKS0+YmFzZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRl
ZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3Rr
OjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1faW52YWxpZGF0ZVRpbWVyKHRoaXMsICZQbHVn
aW5WaWV3R3RrOjppbnZhbGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQor
ICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1fd2luZG93
KDApCisgICAgLCBtX2lzV2luZG93ZWQodHJ1ZSkKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxz
ZSkKKyAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9oYXZlSW5pdGlhbGl6ZWQoZmFs
c2UpCisgICAgLCBtX2xhc3RNZXNzYWdlKDApCisgICAgLCBtX2lzQ2FsbGluZ1BsdWdpblduZFBy
b2MoZmFsc2UpCisgICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21h
bnVhbFN0cmVhbSgwKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFs
c2UpCit7CisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdEZpbmRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2lu
c3RhbmNlID0gJm1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlz
OworCisgICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWly
a3MobWltZVR5cGUpOworCisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVl
cyk7CisKKyAgICBtX21vZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsK
KworICAgIHJlc2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sK
KyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJ
bml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VS
VChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3Bs
dWdpbiA9IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAg
ICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQor
ICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQ
VnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19X
SU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgIGlmICht
X25lZWRzWEVtYmVkKSB7CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAg
ICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5n
V2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQobV9w
YXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwpOwor
I2Vsc2UKKyAgICBtX3dpZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0
KTsKKyAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworI2VuZGlmCisKKyAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb24gPSB7IGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55
KCksIGZyYW1lR2VvbWV0cnkoKS53aWR0aCgpLCBmcmFtZUdlb21ldHJ5KCkuaGVpZ2h0KCkgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNp
ZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVH
SU5TKQorICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICBndGtfeHRiaW5fc2V0X3Bv
c2l0aW9uKEdUS19YVEJJTihtX3dpZGdldCksIGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsK
KyAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgYWxsb2NhdGlvbi53aWR0aCwgYWxs
b2NhdGlvbi5oZWlnaHQpOworICAgIH0KKyNlbmRpZgorICAgIGd0a193aWRnZXRfc2hvdyAobV93
aWRnZXQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RL
X0RJU0FCTEVfUExVR0lOUykKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IGdf
bmV3MChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0gMDsK
KworICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJ
TkRPV19YRElTUExBWShtX3dpZGdldC0+d2luZG93KTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdE
S19WSVNVQUxfWFZJU1VBTChnZGtfd2luZG93X2dldF92aXN1YWwobV93aWRnZXQtPndpbmRvdykp
OworICAgICAgICB3cy0+ZGVwdGggPSBnZGtfd2luZG93X2dldF92aXN1YWwobV93aWRnZXQtPndp
bmRvdyktPmRlcHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHREtfQ09MT1JNQVBfWENPTE9S
TUFQKGdka193aW5kb3dfZ2V0X2NvbG9ybWFwKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAg
bV93aW5kb3cgPSBHREtfV0lORE9XX1hXSU5ET1cobV93aWRnZXQtPndpbmRvdyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGRpc3Bs
YXk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54
dHZpc3VhbDsKKyAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGll
bnQueHRkZXB0aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+
eHRjbGllbnQueHRjb2xvcm1hcDsKKyAgICAgICAgbV93aW5kb3cgPSBHVEtfWFRCSU4obV93aWRn
ZXQpLT54dHdpbmRvdzsKKworICAgICAgICBYRmx1c2ggKHdzLT5kaXNwbGF5KTsKKyAgICB9CisK
KyAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJ
TkdfV0lOMzIKKyAgICBtX3dpbmRvdyA9IEdES19XSU5ET1dfSFdORChtX3dpZGdldC0+d2luZG93
KTsKKyNlbmRpZgorCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0g
KHZvaWQqKW1fd2luZG93OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7Cisg
ICAgfQorCisgICAgaWYgKCEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5k
b3dDYWxsKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAg
ICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVh
bFN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJl
bnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFs
c2UsIDApOworICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7CisKKyAg
ICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9tYW51
YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3Ry
ZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7
CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRG
YWlsKDAsIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5WaWV3R3RrX0gKKyNkZWZpbmUgUGx1Z2luVmlld0d0
a19ICisKKyNpbmNsdWRlIDxndGsvZ3Rrd2lkZ2V0Lmg+CisjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdldC5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9wcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEtKUyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7
CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAg
ICBjbGFzcyBGcmFtZTsKKyAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFzcyBL
ZXlib2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAg
ICBjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOworICAgIGNsYXNzIFBsdWdpblBhY2th
Z2VHdGs7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJl
YW1HdGs7CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworICAgIAorICAgIGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtX
YW50c01vemlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJG
aXJzdFNldFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJ
bnZhbGlkYXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNz
VmlkZW9QYXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBs
dXNPbmVNZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1
Z2luID0gMSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVN
ZXNzYWdlUmVjdXJzaXZlbHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0
dXMgeworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRn
ZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJh
bWUsIGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAgICAg
UGx1Z2luUGFja2FnZUd0ayogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0KCk7
IH0KKyAgICAgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQor
CisgICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAg
c3RhdGljIFBsdWdpblZpZXdHdGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAgS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdp
blN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAgIC8v
IE5QTiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVy
cm9yIGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAg
IE5QRXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5
RGF0YSk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7Cisg
ICAgICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBz
dHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95
U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNvbnN0
IGNoYXIqIHVzZXJBZ2VudCgpOworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNz
YWdlKTsKKyAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7Cisg
ICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQgZm9y
Y2VSZWRyYXcoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFt
R3RrKik7CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBnZW9tZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBo
aWRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgZ2xvbmcgd25k
UHJvYyhYSUQgaFduZCwgZ3VpbnQgbWVzc2FnZSwgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0p
OworCisgICAgICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBk
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKCk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAg
ICAgICB2b2lkIGluaXQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0
b3AoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmll
d0d0ayopOworICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3Ig
aGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2lu
UGFja2FnZUd0az4gbV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAg
ICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAg
ICAgIEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5T
dGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsK
KworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAg
ICAgdm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lk
IHJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIHZvaWQg
aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGlt
ZXI8UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVyPFBsdWdpblZp
ZXdHdGs+IG1faW52YWxpZGF0ZVRpbWVyOworCisgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdl
VGhyb3R0bGVyR3RrPiBtX21lc3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVX
aW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNv
dW50OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJh
bVZhbHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcg
bV91c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1f
aW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAg
SGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVj
dG9yPFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIGludCBtX3F1aXJr
czsKKyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFy
ZW50OworICAgICAgICBib29sIG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUluaXRp
YWxpemVkOworCisgICAgICAgIFhJRCBtX3dpbmRvdzsgLy8gZm9yIHdpbmRvd2VkIHBsdWctaW5z
CisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRv
IGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93
aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0
TWVzc2FnZTsKKyAgICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisKKyAgICAg
ICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4g
bV9tYW51YWxTdHJlYW07CisKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3VycmVu
dFBsdWdpblZpZXc7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICAgICAgYm9v
bCBtX25lZWRzWEVtYmVkOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9w
cm94eS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhlIHBsdWdpbiB2aWV3
IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVnLWlu
cyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8vIHdpdGggYSBOVUxM
IGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2aWV3
IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgorLy8gQ3VycmVudGx5LCB0aGUgY3VycmVu
dCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmlld0d0
azo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxhc2ggYW5kIFNo
b2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNlcmFnZW50IHdp
dGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLT5u
ZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihpbnN0YW5j
ZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygp
OworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyIHNpemUpCit7CisgICAgcmV0dXJuIG1h
bGxvYyhzaXplKTsKK30KKwordm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAgZnJl
ZShwdHIpOworfQorCit1aW50MzIgTlBOX01lbUZsdXNoKHVpbnQzMiBzaXplKQoreworICAgIC8v
IERvIG5vdGhpbmcKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhO
UEJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgcmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOwor
fQorCitOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5n
ZSogcmFuZ2VMaXN0KQoreworICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorCitO
UEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3Rp
ZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3IgTlBO
X1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCog
bm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEp
OworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBv
c3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5fTmV3
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQs
IE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQzMiBO
UE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQq
IGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJl
YW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7Cisg
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJlYW0o
c3RyZWFtLCByZWFzb24pOworfQorCitjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0
YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3R3RrKiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKTsKKworICAgICAvLyBGSVhNRTogU29tZSBwbHVnLWlucyBjYWxsIE5QTl9Vc2Vy
QWdlbnQgd2l0aCBhIG51bGwgaW5zdGFuY2UgaW4gdGhlaXIgTlBfaW5pdGlhbGl6ZSBmdW5jdGlv
biEKKyAgICAgLy8gV2UnZCBuZWVkIGEgd2F5IHRvIGdldCBhIHVzZXIgYWdlbnQgd2l0aG91dCBo
YXZpbmcgYSBmcmFtZSBhcm91bmQuCisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVybiAw
OworIAorICAgIHJldHVybiB2aWV3LT51c2VyQWdlbnQoKTsKK30KKwordm9pZCBOUE5fU3RhdHVz
KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9y
SW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMobWVzc2FnZSk7Cit9CisKK3ZvaWQgTlBOX0ludmFs
aWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sKKyAgICBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7
Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBp
bnZhbGlkUmVnaW9uKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmlu
dmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBOX0ZvcmNlUmVkcmF3
KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5m
b3JjZVJlZHJhdygpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKwor
TlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCit7CisgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFFbnYo
KQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5QTl9H
ZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZAorTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNl
LCBOUEJvb2wgZW5hYmxlZCkKK3sKK30KKwordm9pZAorTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0
ZShOUFAgaW5zdGFuY2UpCit7Cit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY0IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6
IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9
Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisg
KiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwv
CisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhFTUJF
RCBEZWNsYXJhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdp
bmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0
ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRo
ZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmli
dXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxl
IG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVy
ICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQ
TCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4g
SWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25s
eQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5
IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUg
bm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRo
ZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEg
cmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhl
IHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisg
KiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisvKiBYRU1CRUQgbWVzc2FnZXMg
Ki8KKyNkZWZpbmUgWEVNQkVEX0VNQkVEREVEX05PVElGWSAgICAgICAgICAwCisjZGVmaW5lIFhF
TUJFRF9XSU5ET1dfQUNUSVZBVEUgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfV0lORE9XX0RF
QUNUSVZBVEUgICAgICAgIDIKKyNkZWZpbmUgWEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAgICAg
ICAzCisjZGVmaW5lIFhFTUJFRF9GT0NVU19JTiAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBY
RU1CRURfRk9DVVNfT1VUICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX05F
WFQgICAgICAgICAgICAgICA2CisjZGVmaW5lIFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAgICAg
ICAgNworI2RlZmluZSBYRU1CRURfR1JBQl9LRVkgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUg
WEVNQkVEX1VOR1JBQl9LRVkgICAgICAgICAgICAgICA5CisjZGVmaW5lIFhFTUJFRF9NT0RBTElU
WV9PTiAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAgICAg
ICAgICAxMQorCisvKiBOb24gc3RhbmRhcmQgbWVzc2FnZXMqLworI2RlZmluZSBYRU1CRURfR1RL
X0dSQUJfS0VZICAgICAgICAgICAgIDEwOCAKKyNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJfS0VZ
ICAgICAgICAgICAxMDkKKworLyogRGV0YWlscyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8KKyNk
ZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQgICAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9G
T0NVU19GSVJTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAgICAg
ICAgICAgICAgIDIKKworLyogRmxhZ3MgZm9yIF9YRU1CRURfSU5GTyAqLworI2RlZmluZSBYRU1C
RURfTUFQUEVEICAgICAgICAgICAgICAgICAgICgxIDw8IDApCkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
ZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgUExVR0lOX0RFQlVHX0hfXworI2RlZmluZSBQTFVHSU5fREVCVUdfSF9fCisKKyNpbmNs
dWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKworc3RhdGljIGNoYXIqIGVycm9yU3RyaW5nc1tdID0g
eworICAgICJObyBlcnJvcnMgb2NjdXJyZWQuIiwgLyogTlBFUlJfTk9fRVJST1IgKi8KKyAgICAi
RXJyb3Igd2l0aCBubyBzcGVjaWZpYyBlcnJvciBjb2RlIG9jY3VycmVkLiIsIC8qIE5QRVJSX0dF
TkVSSUNfRVJST1IgKi8KKyAgICAiSW52YWxpZCBpbnN0YW5jZSBwYXNzZWQgdG8gdGhlIHBsdWct
aW4uIiwgLyogTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUiAqLworICAgICJGdW5jdGlvbiB0
YWJsZSBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VSUk9SICovCisgICAg
IkxvYWRpbmcgb2YgcGx1Zy1pbiBmYWlsZWQuIiwgLyogTlBFUlJfTU9EVUxFX0xPQURfRkFJTEVE
X0VSUk9SICovCisgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4iLCAvKiBOUEVSUl9PVVRf
T0ZfTUVNT1JZX0VSUk9SICovCisgICAgIlBsdWctaW4gbWlzc2luZyBvciBpbnZhbGlkLiIsIC8q
IE5QRVJSX0lOVkFMSURfUExVR0lOX0VSUk9SICovCisgICAgIlBsdWctaW4gZGlyZWN0b3J5IG1p
c3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9ESVJfRVJST1IgKi8K
KyAgICAiVmVyc2lvbnMgb2YgcGx1Zy1pbiBhbmQgQ29tbXVuaWNhdG9yIGRvIG5vdCBtYXRjaC4i
LCAvKiBOUEVSUl9JTkNPTVBBVElCTEVfVkVSU0lPTl9FUlJPUiAqLworICAgICJQYXJhbWV0ZXIg
bWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUEFSQU0gKi8KKyAgICAiVVJM
IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1VSTCAqLworICAgICJGaWxl
IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9GSUxFX05PVF9GT1VORCAqLworICAgICJT
dHJlYW0gY29udGFpbnMgbm8gZGF0YS4iLCAvKiBOUEVSUl9OT19EQVRBICovCisgICAgIlNlZWth
YmxlIHN0cmVhbSBleHBlY3RlZC4iLCAvKiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtBQkxFICovCisg
ICAgIlVua25vd24gZXJyb3IgY29kZSIKK307CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIExP
R19OUEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgX1JQVEYyKF9DUlRfV0FS
TiwgIiVzOiAlc1xuIiwgX19GVU5DVElPTl9fLCBlcnJvclN0cmluZ3NbZXJyXSkKKyNkZWZpbmUg
TE9HX1BMVUdJTl9ORVRfRVJST1IoKSBfUlBURjEoX0NSVF9XQVJOLCAiJXM6IFN0cmVhbSBmYWls
ZWQgZHVlIHRvIHByb2JsZW1zIHdpdGggbmV0d29yaywgZGlzayBJL08sIGxhY2sgb2YgbWVtb3J5
LCBvciBvdGhlciBwcm9ibGVtcy5cbiIsIF9fRlVOQ1RJT05fXykKKyNlbHNlCisjZGVmaW5lIExP
R19QTFVHSU5fTkVUX0VSUk9SKCkgKCh2b2lkKTApCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikg
KCh2b2lkKTApCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25w
ZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9u
cy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIF9OUEZVTkNU
SU9OU19IXworI2RlZmluZSBfTlBGVU5DVElPTlNfSF8KKworI2luY2x1ZGUgIm5wcnVudGltZV9w
cm94eS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNp
ZiBkZWZpbmVkKFhQX1dJTikKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUsIF9uYW1l
KSBfdHlwZSAoX19zdGRjYWxsICogX25hbWUpCisjZWxzZQorI2RlZmluZSBFWFBPUlRFRF9DQUxM
QkFDSyhfdHlwZSwgX25hbWUpIF90eXBlICgqIF9uYW1lKQorI2VuZGlmCisKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IFVSTCwgY29uc3QgY2hhciogd2luZG93LCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUmVx
dWVzdFJlYWRQcm9jUHRyKShOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5nZSogcmFuZ2VMaXN0
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9OZXdTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogd2luZG93LCBOUFN0cmVhbSoqIHN0cmVhbSk7
Cit0eXBlZGVmIGludDMyICgqTlBOX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVh
bSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7Cit0eXBlZGVmIE5QRXJyb3IgKCpO
UE5fRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwg
TlBSZWFzb24gcmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9TdGF0dXNQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwordHlwZWRlZiBjb25zdCBjaGFyKigqTlBO
X1VzZXJBZ2VudFByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBlZGVmIHZvaWQqICgqTlBOX01l
bUFsbG9jUHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRlZiB2b2lkICgqTlBOX01lbUZyZWVQ
cm9jUHRyKSh2b2lkKiBwdHIpOwordHlwZWRlZiB1aW50MzIgKCpOUE5fTWVtRmx1c2hQcm9jUHRy
KSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIp
KE5QQm9vbCByZWxvYWRQYWdlcyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VmFsdWVQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUp
OwordHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwordHlwZWRlZiB2b2lkICgqTlBOX0lu
dmFsaWRhdGVSZWN0UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlY3QgKnJlY3QpOwordHlwZWRl
ZiB2b2lkICgqTlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUmVn
aW9uIHJlZ2lvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fRm9yY2VSZWRyYXdQcm9jUHRyKShOUFAg
aW5zdGFuY2UpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTFByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3cpOwordHlwZWRlZiBOUEVy
cm9yICgqTlBOX1Bvc3RVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwg
Y29uc3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YUVudlByb2NQdHIpKHZvaWQpOwordHlw
ZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhUGVlclByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBl
ZGVmIHZvaWQgKCpOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBCb29sIGVuYWJsZWQpOwordHlwZWRlZiB2b2lkICgqTlBOX1BvcFBvcHVwc0VuYWJsZWRT
dGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSk7CisKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNl
VmFyaWFudFZhbHVlUHJvY1B0cikgKE5QVmFyaWFudCAqdmFyaWFudCk7CisKK3R5cGVkZWYgTlBJ
ZGVudGlmaWVyICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQcm9jUHRyKSAoY29uc3QgTlBVVEY4
ICpuYW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIp
IChjb25zdCBOUFVURjggKipuYW1lcywgaW50MzJfdCBuYW1lQ291bnQsIE5QSWRlbnRpZmllciAq
aWRlbnRpZmllcnMpOwordHlwZWRlZiBOUElkZW50aWZpZXIgKCpOUE5fR2V0SW50SWRlbnRpZmll
clByb2NQdHIpIChpbnQzMl90IGludGlkKTsKK3R5cGVkZWYgaW50MzJfdCAoKk5QTl9JbnRGcm9t
SWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBlZGVmIGJv
b2wgKCpOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlm
aWVyKTsKK3R5cGVkZWYgTlBVVEY4ICooKk5QTl9VVEY4RnJvbUlkZW50aWZpZXJQcm9jUHRyKSAo
TlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOworCit0eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9DcmVh
dGVPYmplY3RQcm9jUHRyKSAoTlBQLCBOUENsYXNzICphQ2xhc3MpOwordHlwZWRlZiBOUE9iamVj
dCogKCpOUE5fUmV0YWluT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRlZiB2
b2lkICgqTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Cit0eXBlZGVm
IGJvb2wgKCpOUE5fSW52b2tlUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRl
bnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0Nv
dW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tlRGVmYXVs
dFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3Ms
IHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpO
UE5fRXZhbHVhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBTdHJpbmcgKnNj
cmlwdCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0dldFByb3BlcnR5
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlO
YW1lLCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fU2V0UHJvcGVydHlQ
cm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5h
bWUsIGNvbnN0IE5QVmFyaWFudCAqdmFsdWUpOwordHlwZWRlZiBib29sICgqTlBOX0hhc1Byb3Bl
cnR5UHJvY1B0cikgKE5QUCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNNZXRob2RQcm9jUHRyKSAoTlBQIG5wcCwgTlBP
YmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7Cit0eXBlZGVmIGJvb2wgKCpO
UE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fU2V0RXhjZXB0aW9uUHJv
Y1B0cikgKE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVVRGOCAqbWVzc2FnZSk7Cit0eXBlZGVmIGJv
b2wgKCpOUE5fRW51bWVyYXRlUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJ
ZGVudGlmaWVyICoqaWRlbnRpZmllciwgdWludDMyX3QgKmNvdW50KTsKKwordHlwZWRlZiBOUEVy
cm9yICgqTlBQX05ld1Byb2NQdHIpKE5QTUlNRVR5cGUgcGx1Z2luVHlwZSwgTlBQIGluc3RhbmNl
LCB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywgY2hhciogYXJnbltdLCBjaGFyKiBhcmd2W10sIE5Q
U2F2ZWREYXRhKiBzYXZlZCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJveVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5Q
UF9TZXRXaW5kb3dQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QV2luZG93KiB3aW5kb3cpOwordHlw
ZWRlZiBOUEVycm9yICgqTlBQX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1F
VHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNiogc3R5
cGUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyKShOUFAgaW5z
dGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7Cit0eXBlZGVmIHZvaWQg
KCpOUFBfU3RyZWFtQXNGaWxlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFt
LCBjb25zdCBjaGFyKiBmbmFtZSk7Cit0eXBlZGVmIGludDMyICgqTlBQX1dyaXRlUmVhZHlQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0pOwordHlwZWRlZiBpbnQzMiAoKk5Q
UF9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzJfdCBv
ZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwordHlwZWRlZiB2b2lkICgqTlBQX1By
aW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9ybVByaW50KTsKK3R5cGVk
ZWYgaW50MTYgKCpOUFBfSGFuZGxlRXZlbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIHZvaWQqIGV2
ZW50KTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9VUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IGNvbnN0IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5
cGVkZWYgTlBFcnJvciAoKk5QUF9HZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBf
U2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
ICp2YWx1ZSk7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKHZvaWQsIE5QUF9TaHV0ZG93blBy
b2NQdHIpKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKigqTlBQX0dldEphdmFDbGFzc1Byb2NQdHIp
KHZvaWQpOwordHlwZWRlZiB2b2lkKiAgIEpSSUdsb2JhbFJlZjsgLy9ub3QgdXNpbmcgdGhpcyBy
aWdodCBub3cKKwordHlwZWRlZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5jcyB7CisgICAgdWludDE2
IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgCisgICAgTlBOX0dldFVSTFByb2NQdHIg
Z2V0dXJsOworICAgIE5QTl9Qb3N0VVJMUHJvY1B0ciBwb3N0dXJsOworICAgIE5QTl9SZXF1ZXN0
UmVhZFByb2NQdHIgcmVxdWVzdHJlYWQ7CisgICAgTlBOX05ld1N0cmVhbVByb2NQdHIgbmV3c3Ry
ZWFtOworICAgIE5QTl9Xcml0ZVByb2NQdHIgd3JpdGU7CisgICAgTlBOX0Rlc3Ryb3lTdHJlYW1Q
cm9jUHRyIGRlc3Ryb3lzdHJlYW07CisgICAgTlBOX1N0YXR1c1Byb2NQdHIgc3RhdHVzOworICAg
IE5QTl9Vc2VyQWdlbnRQcm9jUHRyIHVhZ2VudDsKKyAgICBOUE5fTWVtQWxsb2NQcm9jUHRyIG1l
bWFsbG9jOworICAgIE5QTl9NZW1GcmVlUHJvY1B0ciBtZW1mcmVlOworICAgIE5QTl9NZW1GbHVz
aFByb2NQdHIgbWVtZmx1c2g7CisgICAgTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyIHJlbG9hZHBs
dWdpbnM7CisgICAgTlBOX0dldEphdmFFbnZQcm9jUHRyIGdldEphdmFFbnY7CisgICAgTlBOX0dl
dEphdmFQZWVyUHJvY1B0ciBnZXRKYXZhUGVlcjsKKyAgICBOUE5fR2V0VVJMTm90aWZ5UHJvY1B0
ciBnZXR1cmxub3RpZnk7CisgICAgTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyIHBvc3R1cmxub3Rp
Znk7CisgICAgTlBOX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKKyAgICBOUE5fU2V0VmFsdWVQ
cm9jUHRyIHNldHZhbHVlOworICAgIE5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIgaW52YWxpZGF0
ZXJlY3Q7CisgICAgTlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyIGludmFsaWRhdGVyZWdpb247
CisgICAgTlBOX0ZvcmNlUmVkcmF3UHJvY1B0ciBmb3JjZXJlZHJhdzsKKyAgICAKKyAgICBOUE5f
R2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcjsKKyAgICBOUE5f
R2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXJzOworICAgIE5Q
Tl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0ciBnZXRpbnRpZGVudGlmaWVyOworICAgIE5QTl9JZGVu
dGlmaWVySXNTdHJpbmdQcm9jUHRyIGlkZW50aWZpZXJpc3N0cmluZzsKKyAgICBOUE5fVVRGOEZy
b21JZGVudGlmaWVyUHJvY1B0ciB1dGY4ZnJvbWlkZW50aWZpZXI7CisgICAgTlBOX0ludEZyb21J
ZGVudGlmaWVyUHJvY1B0ciBpbnRmcm9taWRlbnRpZmllcjsKKyAgICBOUE5fQ3JlYXRlT2JqZWN0
UHJvY1B0ciBjcmVhdGVvYmplY3Q7CisgICAgTlBOX1JldGFpbk9iamVjdFByb2NQdHIgcmV0YWlu
b2JqZWN0OworICAgIE5QTl9SZWxlYXNlT2JqZWN0UHJvY1B0ciByZWxlYXNlb2JqZWN0OworICAg
IE5QTl9JbnZva2VQcm9jUHRyIGludm9rZTsKKyAgICBOUE5fSW52b2tlRGVmYXVsdFByb2NQdHIg
aW52b2tlRGVmYXVsdDsKKyAgICBOUE5fRXZhbHVhdGVQcm9jUHRyIGV2YWx1YXRlOworICAgIE5Q
Tl9HZXRQcm9wZXJ0eVByb2NQdHIgZ2V0cHJvcGVydHk7CisgICAgTlBOX1NldFByb3BlcnR5UHJv
Y1B0ciBzZXRwcm9wZXJ0eTsKKyAgICBOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyIHJlbW92ZXBy
b3BlcnR5OworICAgIE5QTl9IYXNQcm9wZXJ0eVByb2NQdHIgaGFzcHJvcGVydHk7CisgICAgTlBO
X0hhc01ldGhvZFByb2NQdHIgaGFzbWV0aG9kOworICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVl
UHJvY1B0ciByZWxlYXNldmFyaWFudHZhbHVlOworICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRy
IHNldGV4Y2VwdGlvbjsKKyAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVz
aHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0
ciBwb3Bwb3B1cHNlbmFibGVkc3RhdGU7CisgICAgTlBOX0VudW1lcmF0ZVByb2NQdHIgZW51bWVy
YXRlOworfSBOUE5ldHNjYXBlRnVuY3M7CisKK3R5cGVkZWYgc3RydWN0IF9OUFBsdWdpbkZ1bmNz
IHsKKyAgICB1aW50MTYgc2l6ZTsKKyAgICB1aW50MTYgdmVyc2lvbjsKKyAgICBOUFBfTmV3UHJv
Y1B0ciBuZXdwOworICAgIE5QUF9EZXN0cm95UHJvY1B0ciBkZXN0cm95OworICAgIE5QUF9TZXRX
aW5kb3dQcm9jUHRyIHNldHdpbmRvdzsKKyAgICBOUFBfTmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJl
YW07CisgICAgTlBQX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lzdHJlYW07CisgICAgTlBQ
X1N0cmVhbUFzRmlsZVByb2NQdHIgYXNmaWxlOworICAgIE5QUF9Xcml0ZVJlYWR5UHJvY1B0ciB3
cml0ZXJlYWR5OworICAgIE5QUF9Xcml0ZVByb2NQdHIgd3JpdGU7CisgICAgTlBQX1ByaW50UHJv
Y1B0ciBwcmludDsKKyAgICBOUFBfSGFuZGxlRXZlbnRQcm9jUHRyIGV2ZW50OworICAgIE5QUF9V
UkxOb3RpZnlQcm9jUHRyIHVybG5vdGlmeTsKKyAgICBKUklHbG9iYWxSZWYgamF2YUNsYXNzOwor
ICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBQX1NldFZhbHVlUHJvY1B0
ciBzZXR2YWx1ZTsKK30gTlBQbHVnaW5GdW5jczsKKwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFD
SyhOUEVycm9yLCBOUF9Jbml0aWFsaXplRnVuY1B0cikoTlBOZXRzY2FwZUZ1bmNzKiwgTlBQbHVn
aW5GdW5jcyopOwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhjb25zdCBjaGFyKiwgTlBfR2V0
TUlNRURlc2NyaXB0aW9uRnVuY1B0cikodm9pZCk7CisKKyNpZiBkZWZpbmVkKFhQX01BQ09TWCkK
K3R5cGVkZWYgdm9pZCAgICAoKkJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzRnVu
Y1B0cikodm9pZCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpNYWluRnVuY1B0cikoTlBOZXRzY2FwZUZ1
bmNzKiwgTlBQbHVnaW5GdW5jcyosIE5QUF9TaHV0ZG93blByb2NQdHIqKTsKKyNlbmRpZgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9n
dGsyeHRiaW4uYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTM5IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWIt
d2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisg
KiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBC
RUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQ
TCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRo
ZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICog
dGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICog
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAq
IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
IFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhl
IE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQgSW1wbGVtZW50YXRpb24uCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBT
dW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICog
QWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRl
ciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisg
KiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJl
IGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFs
bG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0
ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhl
cnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRv
IG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25l
IG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VO
U0UgQkxPQ0sgKioqKiogKi8KKyAKKy8qCisgKiBUaGUgR3RrWHRCaW4gd2lkZ2V0IGFsbG93cyBm
b3IgWHQgdG9vbGtpdCBjb2RlIHRvIGJlIHVzZWQKKyAqIGluc2lkZSBhIEdUSyBhcHBsaWNhdGlv
bi4gIAorICovCisKKyNpbmNsdWRlICJ4ZW1iZWQuaCIKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIK
KyNpbmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorI2luY2x1ZGUgPGd0ay9ndGtwcml2YXRlLmg+Cisj
aW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0
Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor
CisvKiBYbGliL1h0IHN0dWZmICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxY
MTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmlu
c2ljLmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KKworLyogdW5jb21tZW50IHRoaXMg
aWYgeW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHdpZGdldAorICAgY3JlYXRp
b24gYW5kIGRlc3RydWN0aW9uICovCisjdW5kZWYgREVCVUdfWFRCSU4KKworI2RlZmluZSBYVEJJ
Tl9NQVhfRVZFTlRTIDMwCisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2NsYXNz
X2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3Rr
X3h0YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0YmluKTsKK3N0YXRpYyB2b2lkICAg
ICAgICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwor
c3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5yZWFsaXplICAgIChHdGtXaWRnZXQg
ICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2Rlc3Ryb3kg
ICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtf
eHRiaW5fc2h1dGRvd24gICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CisKKy8qIFh0IGF3YXJl
IFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2luaXQgICAgICAoWHRDbGll
bnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbG9ybWFwIHh0Y29sb3JtYXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHh0ZGVwdGgpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2NyZWF0ZSAg
ICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXaW5kb3cgZW1iZWRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB3aWR0aCApOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3VucmVhbGl6ZSAo
WHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9kZXN0cm95
ICAgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfc2V0
X2luZm8gIChXaWRnZXQgeHRwbHVnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50
X2V2ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAoV2lkZ2V0IHcsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2ZvY3VzX2xp
c3RlbmVyICAgICAgIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9kYXRhLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3Rh
dGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVy
IHVzZXJfZGF0YSApOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3Ry
ZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpOyAKK3N0YXRpYyB2b2lk
ICAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJf
ZGF0YSk7CitzdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAq
eHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1l
c3NhZ2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXRh
aWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGEyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lKTsgIAorc3RhdGlj
IGludCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlzcGxheSAqZGlzcGxheSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXJyb3JFdmVudCAqZXJyb3IpOwor
LyogRm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB0cmFwX2Vy
cm9ycyh2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgIHVudHJhcF9lcnJvcih2b2lkKTsKK3N0YXRp
YyBpbnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChEaXNwbGF5ICosIFhFcnJvckV2ZW50
ICopOworc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJvcl9jb2RlID0gMDsKKworc3RhdGlj
IEd0a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitzdGF0aWMgRGlzcGxheSAg
ICAgICAgICp4dGRpc3BsYXkgPSBOVUxMOworc3RhdGljIFN0cmluZyAgICAgICAgICAqZmFsbGJh
Y2sgPSBOVUxMOworc3RhdGljIGdib29sZWFuICAgICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBG
QUxTRTsKK3N0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93aWRnZXRzID0gMDsKKworc3RhdGlj
IEdQb2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsKK3N0YXRpYyBnaW50ICAgICAgICAg
ICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworc3RhdGljIGd1aW50ICAgICAgICAgICAgdGFn
ID0gMDsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wcmVwYXJlIChHU291cmNlKiAgc291
cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgKnRpbWVvdXQpCit7ICAgCisg
IGludCBtYXNrOworCisgIEdES19USFJFQURTX0VOVEVSKCk7CisgIG1hc2sgPSBYUGVuZGluZyh4
dGRpc3BsYXkpOworICBHREtfVEhSRUFEU19MRUFWRSgpOworCisgIHJldHVybiAoZ2Jvb2xlYW4p
bWFzazsKK30KKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9jaGVjayAoR1NvdXJjZSogIHNv
dXJjZV9kYXRhKQoreworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKworICBpZiAoeHRfZXZlbnRf
cG9sbF9mZC5yZXZlbnRzICYgR19JT19JTikgeworICAgIGludCBtYXNrOworICAgIG1hc2sgPSBY
UGVuZGluZyh4dGRpc3BsYXkpOworICAgIEdES19USFJFQURTX0xFQVZFICgpOworICAgIHJldHVy
biAoZ2Jvb2xlYW4pbWFzazsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOworICByZXR1
cm4gRkFMU0U7Cit9ICAgCisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfZGlzcGF0Y2ggKEdT
b3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMgY2Fs
bF9iYWNrLAorICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgdXNlcl9kYXRhKQoreworICBY
RXZlbnQgZXZlbnQ7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGkgPSAwOworCisgIGFjID0g
WHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNwbGF5KTsKKworICBHREtfVEhSRUFE
U19FTlRFUiAoKTsKKworICAvKiBQcm9jZXNzIG9ubHkgcmVhbCBYIHRyYWZmaWMgaGVyZS4gIFdl
IG9ubHkgbG9vayBmb3IgZGF0YSBvbiB0aGUKKyAgICogcGlwZSwgbGltaXQgaXQgdG8gWFRCSU5f
TUFYX0VWRU5UUyBhbmQgb25seSBjYWxsCisgICAqIFh0QXBwUHJvY2Vzc0V2ZW50IHNvIHRoYXQg
aXQgd2lsbCBsb29rIGZvciBYIGV2ZW50cy4gIFRoZXJlJ3Mgbm8KKyAgICogdGltZXIgcHJvY2Vz
c2luZyBoZXJlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHRpbWVyIGNhbGxiYWNrIHRoYXQKKyAg
ICogZG9lcyBpdC4gICovCisgIGZvciAoaT0wOyBpIDwgWFRCSU5fTUFYX0VWRU5UUyAmJiBYUGVu
ZGluZyh4dGRpc3BsYXkpOyBpKyspIHsKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTVhF
dmVudCk7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKworICByZXR1cm4gVFJVRTsg
IAorfQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50X2Z1bmNzID0geworICB4dF9ldmVu
dF9wcmVwYXJlLAorICB4dF9ldmVudF9jaGVjaywKKyAgeHRfZXZlbnRfZGlzcGF0Y2gsCisgIGdf
ZnJlZSwKKyAgKEdTb3VyY2VGdW5jKU5VTEwsCisgIChHU291cmNlRHVtbXlNYXJzaGFsKU5VTEwK
K307CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjayhn
cG9pbnRlciB1c2VyX2RhdGEpCit7CisgIERpc3BsYXkgKiBkaXNwbGF5OworICBYdEFwcENvbnRl
eHQgYWM7CisgIGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsKKworICBkaXNwbGF5ID0gKERpc3Bs
YXkgKil1c2VyX2RhdGE7CisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoZGlz
cGxheSk7CisKKyAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1hbnkgWHQgZXZlbnRzIGhlcmUuIElm
IHdlIGp1c3QgcHJvY2VzcworICAgICBvbmUgZXZlbnQgd2UgbWlnaHQgc3RhcnZlIG9uZSBvciBt
b3JlIFh0IGNvbnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQKKyAgICAgdGhpcyBjb3VsZCBoYW5n
IHRoZSB3aG9sZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91cmluZyBpbi4gU28gcHJvY2Vzcwor
ICAgICB1cCB0byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFuZCBzYXZlIHRoZSByZXN0IGZvciBs
YXRlci4gVGhpcyBpcyBhIGhhY2ssCisgICAgIGJ1dCBpdCBvdWdodGEgd29yay4gV2UgKnJlYWxs
eSogc2hvdWxkIGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lucy4KKyAgKi8KKyAgd2hpbGUgKGV2
ZW50c1RvUHJvY2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykpCisgICAgWHRBcHBQcm9jZXNzRXZl
bnQoYWMsIFh0SU1BbGwpOworICByZXR1cm4gVFJVRTsKK30KKworR3RrVHlwZQorZ3RrX3h0Ymlu
X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR3RrVHlwZSB4dGJpbl90eXBlID0gMDsKKwor
ICBpZiAoIXh0YmluX3R5cGUpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBHdGtUeXBlSW5mbyB4dGJp
bl9pbmZvID0KKyAgICAgIHsKKyAgICAgICAgIkd0a1h0QmluIiwKKyAgICAgICAgc2l6ZW9mIChH
dGtYdEJpbiksCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW5DbGFzcyksCisgICAgICAgIChHdGtD
bGFzc0luaXRGdW5jKSBndGtfeHRiaW5fY2xhc3NfaW5pdCwKKyAgICAgICAgKEd0a09iamVjdElu
aXRGdW5jKSBndGtfeHRiaW5faW5pdCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMSAqLyBOVUxMLAor
ICAgICAgICAvKiByZXNlcnZlZF8yICovIE5VTEwsCisgICAgICAgIChHdGtDbGFzc0luaXRGdW5j
KSBOVUxMCisgICAgICB9OworICAgICAgeHRiaW5fdHlwZSA9IGd0a190eXBlX3VuaXF1ZSAoR1RL
X1RZUEVfU09DS0VULCAmeHRiaW5faW5mbyk7CisgICAgfQorICByZXR1cm4geHRiaW5fdHlwZTsK
K30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICpr
bGFzcykKK3sKKyAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9jbGFzczsKKyAgR3RrT2JqZWN0Q2xh
c3MgKm9iamVjdF9jbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBndGtfdHlwZV9jbGFzcyAoR1RL
X1RZUEVfU09DS0VUKTsKKworICB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTIChrbGFz
cyk7CisgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194dGJpbl9yZWFsaXplOworICB3aWRn
ZXRfY2xhc3MtPnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJlYWxpemU7CisKKyAgb2JqZWN0X2Ns
YXNzID0gR1RLX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBvYmplY3RfY2xhc3MtPmRlc3Ryb3kg
PSBndGtfeHRiaW5fZGVzdHJveTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9pbml0IChH
dGtYdEJpbiAqeHRiaW4pCit7CisgIHh0YmluLT54dGRpc3BsYXkgPSBOVUxMOworICB4dGJpbi0+
cGFyZW50X3dpbmRvdyA9IE5VTEw7CisgIHh0YmluLT54dHdpbmRvdyA9IDA7CisgIHh0YmluLT54
ID0gMDsKKyAgeHRiaW4tPnkgPSAwOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX3JlYWxp
emUgKEd0a1dpZGdldCAqd2lkZ2V0KQoreworICBHdGtYdEJpbiAgICAgKnh0YmluOworICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDIwMCwgMjAwIH07CisgIGdpbnQgIHgsIHks
IHcsIGgsIGQ7IC8qIGdlb21ldHJ5IG9mIHdpbmRvdyAqLworCisjaWZkZWYgREVCVUdfWFRCSU4K
KyAgcHJpbnRmKCJndGtfeHRiaW5fcmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJu
X2lmX2ZhaWwgKEdUS19JU19YVEJJTiAod2lkZ2V0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4g
KHdpZGdldCk7CisKKyAgLyogY2FjdWxhdGUgdGhlIGFsbG9jYXRpb24gYmVmb3JlIHJlYWxpemUg
Ki8KKyAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoeHRiaW4tPnBhcmVudF93aW5kb3csICZ4LCAm
eSwgJncsICZoLCAmZCk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB3OworICBhbGxvY2F0aW9uLmhl
aWdodCA9IGg7CisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSAod2lkZ2V0LCAmYWxsb2NhdGlv
bik7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImluaXRpYWwgYWxsb2NhdGlvbiAl
ZCAlZCAlZCAlZFxuIiwgeCwgeSwgdywgaCk7CisjZW5kaWYKKworICB4dGJpbi0+d2lkdGggPSB3
aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgIHh0YmluLT5oZWlnaHQgPSB3aWRnZXQtPmFsbG9j
YXRpb24uaGVpZ2h0OworCisgIC8qIHVzZSBHdGtTb2NrZXQncyByZWFsaXplICovCisgICgqR1RL
X1dJREdFVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWFsaXplKSh3aWRnZXQpOworCisgIC8qIGNy
ZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldCAqLworICB4dF9jbGllbnRfY3JlYXRlKCYoeHRiaW4t
Pnh0Y2xpZW50KSwgCisgICAgICAgZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVCh4dGJpbikp
LCAKKyAgICAgICB4dGJpbi0+aGVpZ2h0LCAKKyAgICAgICB4dGJpbi0+d2lkdGgpOworICB4dGJp
bi0+eHR3aW5kb3cgPSBYdFdpbmRvdyh4dGJpbi0+eHRjbGllbnQuY2hpbGRfd2lkZ2V0KTsKKwor
ICBnZGtfZmx1c2goKTsKKworICAvKiBub3cgdGhhdCB3ZSBoYXZlIGNyZWF0ZWQgdGhlIHh0IGNs
aWVudCwgYWRkIGl0IHRvIHRoZSBzb2NrZXQuICovCisgIGd0a19zb2NrZXRfYWRkX2lkKEdUS19T
T0NLRVQod2lkZ2V0KSwgeHRiaW4tPnh0d2luZG93KTsKK30KKworCisKK0d0a1dpZGdldCoKK2d0
a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3RyaW5nICogZikKK3sKKyAg
R3RrWHRCaW4gKnh0YmluOworICBncG9pbnRlciB1c2VyX2RhdGE7CisKKyAgYXNzZXJ0KHBhcmVu
dF93aW5kb3cgIT0gTlVMTCk7CisgIHh0YmluID0gZ3RrX3R5cGVfbmV3IChHVEtfVFlQRV9YVEJJ
Tik7CisKKyAgaWYgKCF4dGJpbikKKyAgICByZXR1cm4gKEd0a1dpZGdldCopTlVMTDsKKworICBp
ZiAoZikKKyAgICBmYWxsYmFjayA9IGY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgWHQgdG9vbGtp
dCAqLworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IHBhcmVudF93aW5kb3c7CisKKyAgeHRfY2xp
ZW50X2luaXQoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgIEdES19WSVNVQUxfWFZJU1VBTChn
ZGtfcmdiX2dldF92aXN1YWwoKSksCisgICAgICBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdka19y
Z2JfZ2V0X2NvbG9ybWFwKCkpLAorICAgICAgZ2RrX3JnYl9nZXRfdmlzdWFsKCktPmRlcHRoKTsK
KworICBpZiAoIXh0YmluLT54dGNsaWVudC54dGRpc3BsYXkpIHsKKyAgICAvKiBJZiBYdE9wZW5E
aXNwbGF5IGZhaWxlZCwgd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIuCisgICAgICogIEJhaWwgb3V0
LgorICAgICAqLworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJndGtfeHRiaW5faW5p
dDogWHRPcGVuRGlzcGxheSgpIHJldHVybmVkIE5VTEwuXG4iKTsKKyNlbmRpZgorICAgIGdfZnJl
ZSAoeHRiaW4pOworICAgIHJldHVybiAoR3RrV2lkZ2V0ICopTlVMTDsKKyAgfQorCisgIC8qIElm
IHRoaXMgaXMgdGhlIGZpcnN0IHJ1bm5pbmcgd2lkZ2V0LCBob29rIHRoaXMgZGlzcGxheSBpbnRv
IHRoZQorICAgICBtYWlubG9vcCAqLworICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgeworICAgIGlu
dCAgICAgICAgICAgY251bWJlcjsKKyAgICAvKgorICAgICAqIGhvb2sgWHQgZXZlbnQgbG9vcCBp
bnRvIHRoZSBnbGliIGV2ZW50IGxvb3AuCisgICAgICovCisKKyAgICAvKiB0aGUgYXNzdW1wdGlv
biBpcyB0aGF0IGd0a19pbml0IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkICovCisgICAgR1NvdXJj
ZSogZ3MgPSBnX3NvdXJjZV9uZXcoJnh0X2V2ZW50X2Z1bmNzLCBzaXplb2YoR1NvdXJjZSkpOwor
ICAgICAgaWYgKCFncykgeworICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIAorICAg
IGdfc291cmNlX3NldF9wcmlvcml0eShncywgR0RLX1BSSU9SSVRZX0VWRU5UUyk7CisgICAgZ19z
b3VyY2Vfc2V0X2Nhbl9yZWN1cnNlKGdzLCBUUlVFKTsKKyAgICB0YWcgPSBnX3NvdXJjZV9hdHRh
Y2goZ3MsIChHTWFpbkNvbnRleHQqKU5VTEwpOworI2lmZGVmIFZNUworICAgIGNudW1iZXIgPSBY
Q29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2Vsc2UKKyAgICBjbnVtYmVyID0gQ29ubmVj
dGlvbk51bWJlcih4dGRpc3BsYXkpOworI2VuZGlmCisgICAgeHRfZXZlbnRfcG9sbF9mZC5mZCA9
IGNudW1iZXI7CisgICAgeHRfZXZlbnRfcG9sbF9mZC5ldmVudHMgPSBHX0lPX0lOOyAKKyAgICB4
dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgPSAwOyAgICAvKiBobW0uLi4gaXMgdGhpcyBjb3JyZWN0
PyAqLworCisgICAgZ19tYWluX2NvbnRleHRfYWRkX3BvbGwgKChHTWFpbkNvbnRleHQqKU5VTEws
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHRfZXZlbnRfcG9sbF9mZCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfTE9XKTsKKyAgICAvKiBhZGQgYSB0
aW1lciBzbyB0aGF0IHdlIGNhbiBwb2xsIGFuZCBwcm9jZXNzIFh0IHRpbWVycyAqLworICAgIHh0
X3BvbGxpbmdfdGltZXJfaWQgPQorICAgICAgZ3RrX3RpbWVvdXRfYWRkKDI1LAorICAgICAgICAg
ICAgICAgICAgICAgIChHdGtGdW5jdGlvbil4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNr
LAorICAgICAgICAgICAgICAgICAgICAgIHh0ZGlzcGxheSk7CisgIH0KKworICAvKiBCdW1wIHVw
IG91ciB1c2FnZSBjb3VudCAqLworICBudW1fd2lkZ2V0cysrOworCisgIC8qIEJ1aWxkIHRoZSBo
aWVyYWNoeSAqLworICB4dGJpbi0+eHRkaXNwbGF5ID0geHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxh
eTsKKyAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhHVEtfV0lER0VUKHh0YmluKSwgcGFy
ZW50X3dpbmRvdyk7CisgIGdka193aW5kb3dfZ2V0X3VzZXJfZGF0YSh4dGJpbi0+cGFyZW50X3dp
bmRvdywgJnVzZXJfZGF0YSk7CisgIGlmICh1c2VyX2RhdGEpCisgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih1c2VyX2RhdGEpLCBHVEtfV0lER0VUKHh0YmluKSk7CisKKyAgcmV0
dXJuIEdUS19XSURHRVQgKHh0YmluKTsKK30KKwordm9pZAorZ3RrX3h0YmluX3NldF9wb3NpdGlv
biAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4
LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KQoreworICB4dGJpbi0+eCA9
IHg7CisgIHh0YmluLT55ID0geTsKKworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAoeHRiaW4p
KQorICAgIGdka193aW5kb3dfbW92ZSAoR1RLX1dJREdFVCAoeHRiaW4pLT53aW5kb3csIHgsIHkp
OworfQorCit2b2lkCitndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIGhlaWdodCkKK3sKKyAgQXJnIGFyZ3NbMl07CisgIEd0a1h0QmluICp4dGJpbiA9IEdUS19Y
VEJJTiAod2lkZ2V0KTsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworCisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVzaXplICVwICVkICVkXG4iLCAodm9pZCAq
KXdpZGdldCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKworICB4dGJpbi0+aGVpZ2h0ID0gaGVp
Z2h0OworICB4dGJpbi0+d2lkdGggID0gd2lkdGg7CisKKyAgLy8gQXZvaWQgQmFkVmFsdWUgZXJy
b3JzIGluIFh0U2V0VmFsdWVzCisgIGlmIChoZWlnaHQgPD0gMCB8fCB3aWR0aCA8PTApIHsKKyAg
ICBoZWlnaHQgPSAxOworICAgIHdpZHRoID0gMTsKKyAgfQorICBYdFNldEFyZyhhcmdzWzBdLCBY
dE5oZWlnaHQsIGhlaWdodCk7CisgIFh0U2V0QXJnKGFyZ3NbMV0sIFh0TndpZHRoLCAgd2lkdGgp
OworICBYdFNldFZhbHVlcyh4dGJpbi0+eHRjbGllbnQudG9wX3dpZGdldCwgYXJncywgMik7CisK
KyAgLyogd2UgbmVlZCB0byBzZW5kIGEgc2l6ZSBhbGxvY2F0ZSBzbyB0aGUgc29ja2V0IGtub3dz
IGFib3V0IHRoZQorICAgICBzaXplIGNoYW5nZXMgKi8KKyAgYWxsb2NhdGlvbi54ID0geHRiaW4t
Png7CisgIGFsbG9jYXRpb24ueSA9IHh0YmluLT55OworICBhbGxvY2F0aW9uLndpZHRoID0geHRi
aW4tPndpZHRoOworICBhbGxvY2F0aW9uLmhlaWdodCA9IHh0YmluLT5oZWlnaHQ7CisKKyAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKHdpZGdldCwgJmFsbG9jYXRpb24pOworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX3VucmVhbGl6ZSAoR3RrV2lkZ2V0ICpvYmplY3QpCit7CisgIEd0a1h0
QmluICp4dGJpbjsKKyAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgor
ICBwcmludGYoImd0a194dGJpbl91bnJlYWxpemUoKVxuIik7CisjZW5kaWYKKworICAvKiBndGtf
b2JqZWN0X2Rlc3Ryb3koKSB3aWxsIGFscmVhZHkgaG9sZCBhIHJlZmNvdW50IG9uIG9iamVjdAor
ICAgKi8KKyAgeHRiaW4gPSBHVEtfWFRCSU4ob2JqZWN0KTsKKyAgd2lkZ2V0ID0gR1RLX1dJREdF
VChvYmplY3QpOworCisgIEdUS19XSURHRVRfVU5TRVRfRkxBR1MgKHdpZGdldCwgR1RLX1ZJU0lC
TEUpOworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAod2lkZ2V0KSkgeworICAgIHh0X2NsaWVu
dF91bnJlYWxpemUoJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgfQorCisgICgqR1RLX1dJREdFVF9D
TEFTUyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKSh3aWRnZXQpOworfQorCitzdGF0aWMgdm9p
ZAorZ3RrX3h0YmluX2Rlc3Ryb3kgKEd0a09iamVjdCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAq
eHRiaW47CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9kZXN0cm95
KClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOwor
ICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9iamVjdCkpOworCisgIHh0YmluID0g
R1RLX1hUQklOIChvYmplY3QpOworCisgIGlmKHh0YmluLT54dHdpbmRvdykgeworICAgIC8qIHJl
bW92ZSB0aGUgZXZlbnQgaGFuZGxlciAqLworICAgIHh0X2NsaWVudF9kZXN0cm95KCYoeHRiaW4t
Pnh0Y2xpZW50KSk7CisgICAgeHRiaW4tPnh0d2luZG93ID0gMDsKKworICAgIG51bV93aWRnZXRz
LS07IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KKworICAgIC8qIElmIHRoaXMgaXMgdGhl
IGxhc3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQgZGlzcGxheQorICAgICAgIGNvbm5l
Y3Rpb24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KKyAgICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgewor
I2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoInJlbW92aW5nIHRoZSBYdCBjb25uZWN0
aW9uIGZyb20gdGhlIG1haW4gbG9vcFxuIik7CisjZW5kaWYKKyAgICAgIGdfbWFpbl9jb250ZXh0
X3JlbW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4dF9ldmVudF9wb2xsX2ZkKTsKKyAg
ICAgIGdfc291cmNlX3JlbW92ZSh0YWcpOworCisgICAgICBndGtfdGltZW91dF9yZW1vdmUoeHRf
cG9sbGluZ190aW1lcl9pZCk7CisgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKKyAgICB9
CisgIH0KKworICBHVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmRlc3Ryb3kob2JqZWN0
KTsKK30KKworLyoKKyogRm9sbG93aW5nIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBYdCBYRW1i
ZWRkZWQgZm9yIGNsaWVudCBzaWRlCisqLworCisvKiBJbml0aWFsIFh0IHBsdWdpbiAqLworc3Rh
dGljIHZvaWQKK3h0X2NsaWVudF9pbml0KCBYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAg
ICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNv
bG9ybWFwLAorICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKQoreworICBYdEFwcENvbnRleHQg
IGFwcF9jb250ZXh0OworICBjaGFyICAgICAgICAgKm1Bcmd2WzFdOworICBpbnQgICAgICAgICAg
IG1BcmdjID0gMDsKKworICAvKgorICAgKiBJbml0aWFsaXplIFh0IHN0dWZmCisgICAqLworICB4
dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBO
VUxMOworICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dHZpc3Vh
bCAgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSAwOworICB4dGNsaWVudC0+eHRk
ZXB0aCA9IDA7CisKKyAgaWYgKCF4dF9pc19pbml0aWFsaXplZCkgeworI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJzdGFydGluZyB1cCBYdCBzdHVmZlxuIik7CisjZW5kaWYKKyAgICBY
dFRvb2xraXRJbml0aWFsaXplKCk7CisgICAgYXBwX2NvbnRleHQgPSBYdENyZWF0ZUFwcGxpY2F0
aW9uQ29udGV4dCgpOworICAgIGlmIChmYWxsYmFjaykKKyAgICAgIFh0QXBwU2V0RmFsbGJhY2tS
ZXNvdXJjZXMoYXBwX2NvbnRleHQsIGZhbGxiYWNrKTsKKworICAgIHh0ZGlzcGxheSA9IFh0T3Bl
bkRpc3BsYXkoYXBwX2NvbnRleHQsIGdka19nZXRfZGlzcGxheSgpLCBOVUxMLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiV3JhcHBlciIsIE5VTEwsIDAsICZtQXJnYywgbUFyZ3YpOwor
ICAgIGlmICh4dGRpc3BsYXkpCisgICAgICB4dF9pc19pbml0aWFsaXplZCA9IFRSVUU7CisgIH0K
KyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSB4dGRpc3BsYXk7CisgIHh0Y2xpZW50LT54dHZpc3Vh
bCAgID0geHR2aXN1YWw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0geHRjb2xvcm1hcDsKKyAg
eHRjbGllbnQtPnh0ZGVwdGggICAgPSB4dGRlcHRoOworfQorCisvKiBDcmVhdGUgdGhlIFh0IGNs
aWVudCB3aWRnZXRzCisqICAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9jcmVhdGUgKCBYdENs
aWVudCogeHRjbGllbnQgLCAKKyAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRkZXJpZCwg
CisgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgaW50
IHdpZHRoICkgCit7CisgIGludCAgICAgICAgICAgbjsKKyAgQXJnICAgICAgICAgICBhcmdzWzZd
OworICBXaWRnZXQgICAgICAgIGNoaWxkX3dpZGdldDsKKyAgV2lkZ2V0ICAgICAgICB0b3Bfd2lk
Z2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJ4dF9jbGllbnRfY3JlYXRlKCkg
XG4iKTsKKyNlbmRpZgorICB0b3Bfd2lkZ2V0ID0gWHRBcHBDcmVhdGVTaGVsbCgiZHJhd2luZ0Fy
ZWEiLCAiV3JhcHBlciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNh
dGlvblNoZWxsV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwgMCk7CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gdG9wX3dpZGdldDsKKworICAvKiBzZXQg
c2l6ZSBvZiBYdCB3aW5kb3cgKi8KKyAgbiA9IDA7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0Tmhl
aWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROd2lkdGgsICAgIHdp
ZHRoKTtuKys7CisgIFh0U2V0VmFsdWVzKHRvcF93aWRnZXQsIGFyZ3MsIG4pOworCisgIGNoaWxk
X3dpZGdldCA9IFh0VmFDcmVhdGVXaWRnZXQoImZvcm0iLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wb3NpdGVXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9wX3dpZGdldCwgTlVMTCk7CisKKyAgbiA9IDA7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwg
WHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TnZpc3VhbCwg
ICB4dGNsaWVudC0+eHR2aXN1YWwgKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5kZXB0
aCwgICAgeHRjbGllbnQtPnh0ZGVwdGggKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5j
b2xvcm1hcCwgeHRjbGllbnQtPnh0Y29sb3JtYXAgKTsgbisrOworICBYdFNldEFyZyhhcmdzW25d
LCBYdE5ib3JkZXJXaWR0aCwgMCk7IG4rKzsKKyAgWHRTZXRWYWx1ZXMoY2hpbGRfd2lkZ2V0LCBh
cmdzLCBuKTsKKworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7CisgIHh0Y2xp
ZW50LT5vbGR3aW5kb3cgPSB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdzsKKyAgdG9wX3dpZGdldC0+
Y29yZS53aW5kb3cgPSBlbWJlZGRlcmlkOworCisgIC8qIHRoaXMgbGl0dGxlIHRyaWNrIHNlZW1z
IHRvIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHdpZGdldCAqLworI2lmIFhsaWJTcGVjaWZpY2F0
aW9uUmVsZWFzZSA+PSA2CisgIFh0UmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5
LCAKKyAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAg
ICB0b3Bfd2lkZ2V0KTsKKyNlbHNlCisgIF9YdFJlZ2lzdGVyV2luZG93KCBlbWJlZGRlcmlkLAor
ICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZW5kaWYKKyAgWHRSZWFsaXplV2lk
Z2V0KGNoaWxkX3dpZGdldCk7CisKKyAgLyogbGlzdGVuIHRvIGFsbCBYdCBldmVudHMgKi8KKyAg
WFNlbGVjdElucHV0KHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgWHRXaW5k
b3codG9wX3dpZGdldCksIAorICAgICAgICAgICAgICAgMHgwRkZGRkYpOworICB4dF9jbGllbnRf
c2V0X2luZm8gKGNoaWxkX3dpZGdldCwgMCk7CisKKyAgWHRNYW5hZ2VDaGlsZChjaGlsZF93aWRn
ZXQpOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gY2hpbGRfd2lkZ2V0OworCisgIC8qIHNl
dCB0aGUgZXZlbnQgaGFuZGxlciAqLworICBYdEFkZEV2ZW50SGFuZGxlcihjaGlsZF93aWRnZXQs
CisgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGICYgflJlc2l6ZVJlZGlyZWN0TWFzaywKKyAg
ICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFu
ZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOworICBYdEFkZEV2ZW50SGFu
ZGxlcihjaGlsZF93aWRnZXQsIAorICAgICAgICAgICAgICAgICAgICBTdWJzdHJ1Y3R1cmVOb3Rp
ZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAK
KyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0
ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgWFN5bmMoeHRjbGllbnQt
Pnh0ZGlzcGxheSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X3VucmVhbGl6
ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCApCit7CisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNl
ID49IDYKKyAgWHRVbnJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93KTsKKyNl
bHNlCisgIF9YdFVucmVnaXN0ZXJXaW5kb3coeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2lu
ZG93LAorICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyNlbmRp
ZgorCisgIC8qIGZsdXNoIHRoZSBxdWV1ZSBiZWZvcmUgd2UgcmV0dXJuaW5nIG9yaWdpbiB0b3Bf
d2lkZ2V0LT5jb3JlLndpbmRvdworICAgICBvciB3ZSBjYW4gZ2V0IFggZXJyb3Igc2luY2UgdGhl
IHdpbmRvdyBpcyBnb25lICovCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZhbHNlKTsK
KworICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSB4dGNsaWVudC0+b2xkd2lu
ZG93OworICBYdFVucmVhbGl6ZVdpZGdldCh4dGNsaWVudC0+dG9wX3dpZGdldCk7Cit9CisKK3N0
YXRpYyB2b2lkICAgICAgICAgICAgCit4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRj
bGllbnQpCit7CisgIGlmKHh0Y2xpZW50LT50b3Bfd2lkZ2V0KSB7CisgICAgWHRSZW1vdmVFdmVu
dEhhbmRsZXIoeHRjbGllbnQtPmNoaWxkX3dpZGdldCwgMHgwRkZGRkYsIFRSVUUsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxl
ciwgeHRjbGllbnQpOworICAgIFh0RGVzdHJveVdpZGdldCh4dGNsaWVudC0+dG9wX3dpZGdldCk7
CisgICAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lk
ICAgICAgICAgCit4dF9jbGllbnRfc2V0X2luZm8gKFdpZGdldCB4dHBsdWcsIHVuc2lnbmVkIGxv
bmcgZmxhZ3MpCit7CisgIHVuc2lnbmVkIGxvbmcgYnVmZmVyWzJdOworCisgIEF0b20gaW5mb0F0
b20gPSBYSW50ZXJuQXRvbShYdERpc3BsYXkoeHRwbHVnKSwgIl9YRU1CRURfSU5GTyIsIEZhbHNl
KTsgCisKKyAgYnVmZmVyWzFdID0gMDsgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgdmVyc2lv
biAqLworICBidWZmZXJbMV0gPSBmbGFnczsKKworICBYQ2hhbmdlUHJvcGVydHkgKFh0RGlzcGxh
eSh4dHBsdWcpLCBYdFdpbmRvdyh4dHBsdWcpLAorICAgICAgICAgICAgICAgICAgIGluZm9BdG9t
LCBpbmZvQXRvbSwgMzIsCisgICAgICAgICAgICAgICAgICAgUHJvcE1vZGVSZXBsYWNlLAorICAg
ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCAyKTsKK30KKworc3RhdGlj
IHZvaWQKK3h0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UoV2lkZ2V0IHcsIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChY
dENsaWVudCopY2xpZW50X2RhdGE7CisgIHN3aXRjaCAoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFd
KQorICB7CisgIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElGWToKKyAgICBicmVhazsKKyAgY2Fz
ZSBYRU1CRURfV0lORE9XX0FDVElWQVRFOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRm
KCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAg
YnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFOgorI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURVxu
Iik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT046CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01PREFMSVRZ
X09OXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PRkY6
CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01P
REFMSVRZX09GRlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfRk9DVVNf
SU46CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKKyAgICB7CisgICAgICBYRXZlbnQgeGV2ZW50
OworICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4ZXZlbnQpKTsKKworICAgICAgaWYo
ZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9GT0NVU19JTikgeworI2lmZGVmIERF
QlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgaW5cbiIpOworI2Vu
ZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzSW47CisgICAgICB9CisgICAg
ICBlbHNlIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290
IGZvY3VzIG91dFxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9j
dXNPdXQ7CisgICAgICB9CisKKyAgICAgIHhldmVudC54Zm9jdXMud2luZG93ID0gWHRXaW5kb3co
eHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgeGV2ZW50Lnhmb2N1cy5kaXNwbGF5ID0gWHRE
aXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIFhTZW5kRXZlbnQoWHREaXNwbGF5
KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAgIHhldmVudC54Zm9jdXMu
d2luZG93LAorICAgICAgICAgICAgICAgICBGYWxzZSwgTm9FdmVudE1hc2ssCisgICAgICAgICAg
ICAgICAgICZ4ZXZlbnQgKTsKKyAgICAgIFhTeW5jKCBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93
aWRnZXQpLCBGYWxzZSk7CisgICAgfQorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGJyZWFr
OworICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLworfQorCitzdGF0aWMgdm9pZCAgICAg
ICAgIAoreHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50
X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQq
KWNsaWVudF9kYXRhOworICAKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNl
IENsaWVudE1lc3NhZ2U6CisgICAgICAvKiBIYW5kbGUgeGVtYmVkIG1lc3NhZ2UgKi8KKyAgICAg
IGlmIChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQorICAgICAgICAgICAgICAgICBYSW50
ZXJuQXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7CisgICAgICAgIHh0X2NsaWVudF9o
YW5kbGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEsIGV2ZW50KTsKKyAgICAgIH0KKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBicmVhazsKKyAgICBj
YXNlIE1hcHBpbmdOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIFhFTUJFRF9N
QVBQRUQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm1hcE5vdGlmeToKKyAgICAgIHh0X2Ns
aWVudF9zZXRfaW5mbyAodywgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzSW46Cisg
ICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9jdXNPdXQ6CisgICAgICBicmVhazsKKyAgICBjYXNlIEtleVByZXNzOgorI2lm
ZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoIktleSBQcmVzcyBHb3QhXG4iKTsKKyNlbmRp
ZgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0gLyogRW5k
IG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3NlbmRfeGVtYmVk
X21lc3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICBsb25n
ICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkZXRhaWwsIAor
ICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGExLCAgCisgICAgICAgICAgICAgICAg
ICAgICBsb25nICAgICAgZGF0YTIsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICB0
aW1lKSAgIAoreworICBYRXZlbnQgeGV2ZW50OyAKKyAgV2luZG93IHc9WHRXaW5kb3coeHRjbGll
bnQtPnRvcF93aWRnZXQpOworICBEaXNwbGF5KiBkcHk9eHRjbGllbnQtPnh0ZGlzcGxheTsKKyAg
aW50IGVycm9yY29kZTsKKworICBtZW1zZXQoJnhldmVudCwwLHNpemVvZih4ZXZlbnQpKTsKKyAg
eGV2ZW50LnhjbGllbnQud2luZG93ID0gdzsKKyAgeGV2ZW50LnhjbGllbnQudHlwZSA9IENsaWVu
dE1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IFhJbnRlcm5BdG9tKGRw
eSwiX1hFTUJFRCIsRmFsc2UpOworICB4ZXZlbnQueGNsaWVudC5mb3JtYXQgPSAzMjsKKyAgeGV2
ZW50LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCisgIHhldmVudC54Y2xpZW50LmRhdGEubFsx
XSA9IG1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFsyXSA9IGRldGFpbDsgCisgIHhl
dmVudC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxb
NF0gPSBkYXRhMjsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWFNlbmRFdmVudCAoZHB5LCB3LCBG
YWxzZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOworICBYU3luYyAoZHB5LEZhbHNlKTsKKworICBp
ZigoZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3IoJWQpISEhXG4iLGVycm9yY29kZSk7
CisjZW5kaWYKKyAgfQorfQorCitzdGF0aWMgaW50ICAgICAgICAgICAgIAorZXJyb3JfaGFuZGxl
cihEaXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJyb3IpCit7CisgIHRyYXBwZWRfZXJy
b3JfY29kZSA9IGVycm9yLT5lcnJvcl9jb2RlOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZv
aWQgICAgICAgICAgCit0cmFwX2Vycm9ycyh2b2lkKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUg
PTA7CisgIG9sZF9lcnJvcl9oYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihlcnJvcl9oYW5kbGVy
KTsKK30KKworc3RhdGljIGludCAgICAgICAgIAordW50cmFwX2Vycm9yKHZvaWQpCit7CisgIFhT
ZXRFcnJvckhhbmRsZXIob2xkX2Vycm9yX2hhbmRsZXIpOworICBpZih0cmFwcGVkX2Vycm9yX2Nv
ZGUpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiR2V0IFggV2luZG93IEVycm9y
ID0gJWRcbiIsIHRyYXBwZWRfZXJyb3JfY29kZSk7CisjZW5kaWYKKyAgfQorICByZXR1cm4gdHJh
cHBlZF9lcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X2Zv
Y3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSwgWEV2ZW50ICpldmVu
dCkKK3sKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHcpOworICBYdENsaWVudCAqeHRjbGll
bnQgPSB1c2VyX2RhdGE7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh3KTsKKworICBzd2l0Y2go
ZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ3JlYXRlTm90aWZ5OgorICAgICAgaWYoZXZl
bnQtPnhjcmVhdGV3aW5kb3cucGFyZW50ID09IHdpbikgeworICAgICAgICBXaWRnZXQgY2hpbGQ9
WHRXaW5kb3dUb1dpZGdldCggZHB5LCBldmVudC0+eGNyZWF0ZXdpbmRvdy53aW5kb3cpOworICAg
ICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoY2hp
bGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIERlc3Ryb3lO
b3RpZnk6CisgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHcsIHVzZXJfZGF0YSk7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgaWYoZXZlbnQtPnhy
ZXBhcmVudC5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBwYXJlbnQg
Ki8KKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoZHB5LCBldmVudC0+eHJl
cGFyZW50LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9j
dXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBlbHNl
IGlmKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRo
ZSBuZXcgY2hpbGQgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBJIGFtIHRo
ZSBvbGQgcGFyZW50ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRvblJl
bGVhc2U6CisjaWYgMAorICAgICAgWFNldElucHV0Rm9jdXMoZHB5LCBYdFdpbmRvdyh4dGNsaWVu
dC0+Y2hpbGRfd2lkZ2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2ZW50LT54YnV0dG9uLnRpbWUpOwor
I2VuZGlmCisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRjbGllbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0gLyogRW5kIG9mIHN3
aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0
ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7CisgIFhXaW5kb3dBdHRyaWJ1
dGVzIGF0dHI7CisgIGxvbmcgZXZlbnRtYXNrOworICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2Vy
X2RhdGE7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhHZXRXaW5k
b3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3codyksICZhdHRyKTsKKyAgZXZlbnRt
YXNrID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0
dG9uUmVsZWFzZU1hc2s7CisgIFhTZWxlY3RJbnB1dChYdERpc3BsYXkodyksCisgICAgICAgICAg
ICAgICBYdFdpbmRvdyh3KSwgCisgICAgICAgICAgICAgICBldmVudG1hc2spOworCisgIFh0QWRk
RXZlbnRIYW5kbGVyKHcsIAorICAgICAgICAgICAgICAgICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlN
YXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAg
ICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5l
ciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgdW50cmFwX2Vycm9yKCk7Cit9
CisKK3N0YXRpYyB2b2lkCit4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9p
bnRlciB1c2VyX2RhdGEpCit7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMgKCk7
CisgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0
b25SZWxlYXNlTWFzaywgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5k
bGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgdXNlcl9kYXRhKTsKKworICB1bnRyYXBfZXJy
b3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lk
Z2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKSAKK3sKKyAgV2luZG93IHdpbiA9IFh0
V2luZG93KHRyZWVyb290KTsKKyAgV2luZG93ICpjaGlsZHJlbjsKKyAgV2luZG93IHJvb3QsIHBh
cmVudDsKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHRyZWVyb290KTsKKyAgdW5zaWduZWQg
aW50IGksIG5jaGlsZHJlbjsKKworICAvKiBlbnN1cmUgd2UgZG9uJ3QgYWRkIG1vcmUgdGhhbiBv
bmNlICovCisgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJfZGF0YSk7
CisgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJfZGF0YSk7CisgIHRyYXBf
ZXJyb3JzKCk7CisgIGlmKCFYUXVlcnlUcmVlKGRweSwgd2luLCAmcm9vdCwgJnBhcmVudCwgJmNo
aWxkcmVuLCAmbmNoaWxkcmVuKSkgeworICAgIHVudHJhcF9lcnJvcigpOworICAgIHJldHVybjsK
KyAgfQorCisgIGlmKHVudHJhcF9lcnJvcigpKSAKKyAgICByZXR1cm47CisKKyAgZm9yKGk9MDsg
aTxuY2hpbGRyZW47ICsraSkgeworICAgIFdpZGdldCBjaGlsZCA9IFh0V2luZG93VG9XaWRnZXQo
ZHB5LCBjaGlsZHJlbltpXSk7CisgICAgaWYgKGNoaWxkKSAKKyAgICAgIHh0X2FkZF9mb2N1c19s
aXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgfQorICBYRnJlZSgodm9pZCopY2hp
bGRyZW4pOworCisgIHJldHVybjsKK30KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgi
CisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBhY2thZ2VHdGs6On5QbHVnaW5QYWNrYWdl
R3RrKCkKK3sKKyAgICBBU1NFUlQoIW1faXNMb2FkZWQpOworfQorCitQbHVnaW5QYWNrYWdlR3Rr
OjpQbHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0
TW9kaWZpZWQpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlKDApCisgICAgLCBt
X2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCisgICAgLCBtX2lzTG9hZGVkKGZhbHNlKQorICAg
ICwgbV9sb2FkQ291bnQoMCkKK3sKKyAgICBpbnQgcG9zID0gbV9wYXRoLmRlcHJlY2F0ZWRTdHJp
bmcoKS5maW5kUmV2KCcvJyk7CisKKyAgICBtX2ZpbGVOYW1lID0gbV9wYXRoLnJpZ2h0KG1fcGF0
aC5sZW5ndGgoKSAtIHBvcyAtIDEpOworCit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6ZmV0
Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgZ2NoYXIqIHR5cGVzID0gbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsKKyAgICBn
Y2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7IiwgLTEpOworICAgIGZvciAo
aW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ldWzBdOyBpKyspIHsKKyAgICAg
ICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIsIDMpOwor
CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWltZURhdGFb
Ml0pOworICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMgPSBnX3N0cnNwbGl0KG1pbWVEYXRhWzFd
LCAiLCIsIC0xKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7CisgICAgICAg
IGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisgICAgICAgICAgICBleHRWZWN0
b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5zaW9uc1tqXSkpOworCisgICAgICAgIG1f
bWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rvcik7CisgICAgICAgIG1f
bWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOworCisgICAg
ICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7CisgICAgICAgIGdfc3RyZnJlZXYobWltZURhdGEp
OworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7CisKKyAgICBjaGFyKiBidWZmZXIg
PSAwOworICAgIE5QRXJyb3IgZXJyID0gbV9OUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVT
dHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAg
IG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gbV9OUFBfR2V0
VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBpZiAo
ZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOwor
CisgICAgdW5sb2FkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2Fn
ZUd0azo6bG9hZCgpCit7CisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291
bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9tb2R1bGUgPSBnX21v
ZHVsZV9vcGVuKChtX3BhdGgudXRmOCgpKS5kYXRhKCksIEdfTU9EVUxFX0JJTkRfTE9DQUwpOwor
ICAgIGlmICghbV9tb2R1bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2Fk
ZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAg
ICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5p
dGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUpOworICAgIGdfbW9kdWxlX3N5bWJvbCht
X21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIsICh2b2lkKiopJm1fTlBfR2V0TUlNRURl
c2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIs
ICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUs
ICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJm1fTlBQX0dldFZhbHVlKTsKKworICAgIGlmICghTlBf
SW5pdGlhbGl6ZSB8fCAhbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24gfHwgIW1fTlBQX1NodXRkb3du
IHx8ICFtX05QUF9HZXRWYWx1ZSkKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgm
bV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1
bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5z
aXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lv
biA9IE5QX1ZFUlNJT05fTUlOT1I7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dl
dFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9i
cm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2Vy
RnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0
ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rl
c3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1
bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUg
PSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVz
aDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVu
Y3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0
ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0
ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNl
cmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYg
PSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9H
ZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0g
TlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBz
ZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmll
ciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVy
aXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51
dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNz
Lmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQg
PSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBO
X0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9w
ZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7
CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5
OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7CisgICAg
bV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlh
bGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsr
OworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24o
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2Fk
KCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgt
LW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9OUFBfU2h1dGRvd24o
KTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBhY2th
Z2VHdGs6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CisgICAgQVNT
RVJUKG1fbW9kdWxlKTsKKworICAgIGdfbW9kdWxlX2Nsb3NlIChtX21vZHVsZSk7CisKKyAgICBt
X2lzTG9hZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpblBhY2thZ2VH
dGs6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RN
b2RpZmllZCkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwYWNrYWdlID0gbmV3IFBsdWdpblBh
Y2thZ2VHdGsocGF0aCwgbGFzdE1vZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJ
bmZvKCkpIHsKKyAgICAgICAgZGVsZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gcGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2Fn
ZUd0azo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAg
ICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmllZAorICAg
IH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2Fz
dDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFy
KSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2Fn
ZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rl
c2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblN0
cmVhbUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2lu
Y2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNs
dWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvLyBXZSB1c2UgLTIgaGVy
ZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtlIHRvIHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJv
cgorLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0IGNsYXNoIHdpdGggdGhlbS4KK3N0YXRpYyBjb25z
dCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOworCit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6
bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSos
IE5QUD4gU3RyZWFtTWFwOworc3RhdGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCit7CisgICAgc3Rh
dGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1zOworICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOwor
fQorCitQbHVnaW5TdHJlYW1HdGs6OlBsdWdpblN0cmVhbUd0ayhQbHVnaW5WaWV3R3RrKiBwbHVn
aW5WaWV3LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1
ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgOiBtX3Jl
c291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAg
ICwgbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0
YSkKKyAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKQorICAgICwgbV9s
b2FkTWFudWFsbHkoZmFsc2UpCisgICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0
ZWQpCisgICAgLCBtX2RlbGF5RGVsaXZlcnlUaW1lcih0aGlzLCAmUGx1Z2luU3RyZWFtR3RrOjpk
ZWxheURlbGl2ZXJ5VGltZXJGaXJlZCkKKyAgICAsIG1fZGVsaXZlcnlEYXRhKDApCisgICAgLCBt
X3RlbXBGaWxlSGFuZGxlKDApCisgICAgLCBtX3BsdWdpbkZ1bmNzKHBsdWdpblZpZXctPnBsdWdp
bigpLT5wbHVnaW5GdW5jcygpKQorICAgICwgbV9pbnN0YW5jZShwbHVnaW5WaWV3LT5pbnN0YW5j
ZSgpKQoreworICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOworCisgICAgbV9zdHJlYW0udXJsID0g
MDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAg
IG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IDA7CisgICAgbV9z
dHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKworICAgIHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBt
X2luc3RhbmNlKTsKK30KKworUGx1Z2luU3RyZWFtR3RrOjp+UGx1Z2luU3RyZWFtR3RrKCkKK3sK
KyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1TdGFydGVkKTsKKyAgICBBU1NFUlQo
IW1fbG9hZGVyKTsKKworICAgIGZyZWUoKGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJl
YW1zKCkucmVtb3ZlKCZtX3N0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFy
dCgpCit7CisgICAgQVNTRVJUKCFtX2xvYWRNYW51YWxseSk7CisKKyAgICBtX2xvYWRlciA9IE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUobV9mcmFtZSwgdGhpcyk7CisKKyAgICBt
X2xvYWRlci0+c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7CisgICAgbV9sb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCktPmFkZFBsdWdJblN0cmVhbUxvYWRlcihtX2xvYWRlci5nZXQoKSk7CisgICAg
bV9sb2FkZXItPmxvYWQobV9yZXNvdXJjZVJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bUd0azo6c3RvcCgpCit7CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAg
ICBpZiAobV9sb2FkTWFudWFsbHkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAg
ICAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCkt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7
CisKKyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkK
KyAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJh
bWUtPmxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOworCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9sb2Fk
ZXItPmNhbmNlbCgpOworICAgICAgICBtX2xvYWRlciA9IDA7CisgICAgfQorfQorCit2b2lkIFBs
dWdpblN0cmVhbUd0azo6c3RhcnRTdHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRl
ID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwg
PSBtX3Jlc291cmNlUmVzcG9uc2UudXJsKCk7CisKKyAgICAvLyBTb21lIHBsdWdpbnMgKEZsYXNo
KSBleHBlY3QgdGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNrIGRlY29kZWQgYXMg
dGhpcyBpcyB0aGUKKyAgICAvLyBmb3JtYXQgdXNlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4K
KyAgICBpZiAocmVzcG9uc2VVUkwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBm
YWxzZSkpCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRlY29k
ZV9zdHJpbmcocmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0cmluZygpKS51dGY4KCkpOworICAgIGVs
c2UKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVwcmVjYXRl
ZFN0cmluZygpLnV0ZjgoKSk7CisgICAgCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1fcmVz
b3VyY2VSZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKyAgICAKKyAgICBsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExl
bmd0aCgpOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAg
ICBWZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3Io
IjogIik7CisKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9y
ZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVu
Z3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJh
Y3RlcnMoKSwgc2VwYXJhdG9yLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1faGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgp
OworCisgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNv
bXByZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAg
ICAgICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBu
b3QgeWV0IGtub3duIGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80
NDcwNTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29u
dGVudEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVu
dC1FbmNvZGluZyIpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBj
b250ZW50RW5jb2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29udGVu
dExlbmd0aCA9IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMu
ZGF0YSgpOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IHRo
aXM7CisgICAgbV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsK
KyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSBtX3Jlc291cmNlUmVzcG9uc2UubGFzdE1vZGlm
aWVkRGF0ZSgpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAg
ICBtX3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9y
ZWFzb24gPSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRl
c3Ryb3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgor
ICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBOUEVycm9y
IG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBl
KW1pbWVUeXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsK
KyAgICAKKyAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8g
bmV3c3RyZWFtIHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFy
dGVkOworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBjYW5jZWxB
bmREZXN0cm95U3RyZWFtKG5wRXJyKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9O
T1JNQUwpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoKG1fdGVtcEZpbGVIYW5kbGUg
PSB0bXBmaWxlKCkpICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFNvbWV0aGluZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCisgICAgY2Fu
Y2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK05QUCBQbHVnaW5T
dHJlYW1HdGs6Om93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJu
IHN0cmVhbXMoKS5nZXQoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmNhbmNl
bEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBkZXN0cm95U3RyZWFtKHJlYXNvbik7Cisg
ICAgc3RvcCgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbShOUFJl
YXNvbiByZWFzb24pCit7CisgICAgbV9yZWFzb24gPSByZWFzb247CisgICAgaWYgKG1fcmVhc29u
ICE9IE5QUkVTX0RPTkUpIHsKKyAgICAgICAgLy8gU3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20g
YmVpbmcgc3RyZWFtZWQKKyAgICAgICAgaWYgKG1fZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAg
bV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICB9IGVsc2UgaWYgKG1fZGVsaXZlcnlEYXRh
ICYmIG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPiAwKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG1v
cmUgZGF0YSB0byBiZSBzdHJlYW1lZCwgZG9uJ3QgZGVzdHJveSB0aGUgc3RyZWFtIG5vdy4KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZXN0cm95U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpkZXN0cm95U3RyZWFtKCkKK3sKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9
PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQgKG1fcmVhc29u
ICE9IFdlYlJlYXNvbk5vbmUpOworICAgIEFTU0VSVCAoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVs
aXZlcnlEYXRhLT5zaXplKCkgPT0gMCk7CisKKyAgICBpZiAobV90ZW1wRmlsZUhhbmRsZSAhPSBO
VUxMKQorICAgICAgICBmY2xvc2UobV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICBpZiAobV9zdHJl
YW0ubmRhdGEgIT0gMCkgeworICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAo
bV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklM
RU9OTFkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7CisKKyAgICAg
ICAgICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0
aC5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgTlBFcnJvciBucEVycjsKKyAgICAgICAg
bnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVh
bSwgbV9yZWFzb24pOworCisgICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAg
ICBpZiAobV9zZW5kTm90aWZpY2F0aW9uKQorICAgICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3Rp
ZnkobV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuZGVwcmVjYXRlZFN0cmluZygp
LnV0ZjgoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7CisKKyAgICBtX3N0cmVhbVN0YXRlID0g
U3RyZWFtU3RvcHBlZDsKKworICAgIC8vIGRpc2Nvbm5lY3RTdHJlYW0gY2FuIGNhdXNlIHVzIHRv
IGJlIGRlbGV0ZWQuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsK
KyAgICBpZiAoIW1fbG9hZE1hbnVhbGx5KQorICAgICAgICBtX3BsdWdpblZpZXctPmRpc2Nvbm5l
Y3RTdHJlYW0odGhpcyk7CisKKyAgICBtX3BsdWdpblZpZXcgPSAwOworfQorCit2b2lkIFBsdWdp
blN0cmVhbUd0azo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luU3RyZWFtR3Rr
PiogdGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX2RlbGF5RGVsaXZlcnlUaW1lcik7
CisKKyAgICBkZWxpdmVyRGF0YSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVsaXZl
ckRhdGEoKQoreworICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7CisgICAgCisgICAgaWYgKG1f
c3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjYW5jZWwgb3VyIGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24gZXJyb3Igc28gd2Ug
ZG9uJ3QgcmVhY2ggdGhpcyBjYXNlCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0
cmVhbVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgaWYgKCFtX3N0cmVhbS5u
ZGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludDMyIHRvdGFsQnl0ZXMgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIGludDMy
IHRvdGFsQnl0ZXNEZWxpdmVyZWQgPSAwOworCisgICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVy
ZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAgIGludDMyIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdp
bkZ1bmNzLT53cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7CisKKyAgICAgICAgaWYg
KGRlbGl2ZXJ5Qnl0ZXMgPD0gMCkgeworICAgICAgICAgICAgbV9kZWxheURlbGl2ZXJ5VGltZXIu
c3RhcnRPbmVTaG90KDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIHRvdGFsQnl0ZXMg
LSB0b3RhbEJ5dGVzRGVsaXZlcmVkKTsKKyAgICAgICAgICAgIGludDMyIGRhdGFMZW5ndGggPSBk
ZWxpdmVyeUJ5dGVzOworICAgICAgICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRhLT5k
YXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOworCisgICAgICAgICAgICAvLyBXcml0ZSB0aGUg
ZGF0YQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1f
aW5zdGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRhKTsK
KyAgICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgeworICAgICAgICAgICAgICAgIGNh
bmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4o
ZGVsaXZlcnlCeXRlcywgZGF0YUxlbmd0aCk7CisgICAgICAgICAgICBtX29mZnNldCArPSBkZWxp
dmVyeUJ5dGVzOworICAgICAgICAgICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5
dGVzOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAw
KSB7CisgICAgICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAg
ICAgICAgICAgaW50IHJlbWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxp
dmVyZWQ7CisgICAgICAgICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVs
aXZlcnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7
CisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7Cisg
ICAgICAgICAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgICAgICAg
ICBkZXN0cm95U3RyZWFtKCk7CisgICAgICAgIH0KKyAgICB9IAorfQorCit2b2lkIFBsdWdpblN0
cmVhbUd0azo6c2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29u
c3QgQ1N0cmluZyYgcmVzdWx0U3RyaW5nKQoreworICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCBS
ZXNvdXJjZVJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L3BsYWluIiwgcmVzdWx0U3RyaW5nLmxl
bmd0aCgpLCAiIiwgIiIpKTsKKworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3Bw
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmlu
Zy5kYXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUg
PT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlkRmluaXNoTG9hZGlu
ZygwKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZFJlY2VpdmVSZXNwb25zZShOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQo
bV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIG1fcmVzb3VyY2VS
ZXNwb25zZSA9IHJlc3BvbnNlOworCisgICAgc3RhcnRTdHJlYW0oKTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxvYWRl
ciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworICAgIEFTU0VSVChtX3N0
cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOworICAgIAorICAgIGlmICghbV9kZWxpdmVyeURh
dGEpCisgICAgICAgIG1fZGVsaXZlcnlEYXRhLnNldChuZXcgVmVjdG9yPGNoYXI+KTsKKworICAg
IGludCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAgICBtX2RlbGl2ZXJ5RGF0
YS0+cmVzaXplKG9sZFNpemUgKyBsZW5ndGgpOworICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+
ZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWlu
IGNhbmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAK
KyAgICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4g
cHJvdGVjdCh0aGlzKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZ
KQorICAgICAgICBkZWxpdmVyRGF0YSgpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3Ry
ZWFtU3RvcHBlZCAmJiBtX3RlbXBGaWxlSGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgaW50IHdy
aXR0ZW47CisgICAgICAgIGJvb2wgcmV0dmFsID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFyZXR2
YWwgfHwgZnB1dHMoZGF0YSwgbV90ZW1wRmlsZUhhbmRsZSkgPD0gMCkKKyAgICAgICAgICAgIGNh
bmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgIH0KK30KKwordm9p
ZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxv
YWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05F
VFdPUktfRVJSKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZpbmlzaExvYWRpbmco
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVy
ID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVk
KTsKKworICAgIG1fbG9hZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5
IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5p
bDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0
YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBW
ZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj
ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisg
KgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0
aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJp
biBXaWRnZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAy
MDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRl
ZiBfX0dUS19YVEJJTl9IX18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxn
dGsvZ3Rrc29ja2V0Lmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgx
MS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQK
KyNpbmNsdWRlICJuc2NvcmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUg
R1RLWFRCSU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hU
QklOX0FQSSh0eXBlKSBOU19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdU
S1hUQklOX0FQSSh0eXBlKSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl
cm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3Rr
WHRCaW4gR3RrWHRCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNs
YXNzOworCisjZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJp
bl9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAo
R1RLX0NIRUNLX0NBU1QgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9D
TEFTUyhrbGFzcykgICAgICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBH
dGtYdEJpbkNsYXNzKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAo
R1RLX0NIRUNLX1RZUEUgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGts
YXNzKSAgICAgICAoR1RLX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBz
dHJ1Y3QgX1h0Q2xpZW50IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxh
eQkqeHRkaXNwbGF5OworICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdp
ZGdldCAqLworICBXaWRnZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAq
LworICBWaXN1YWwJKnh0dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29s
b3JtYXA7CisgIFdpbmRvdwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7Cisg
IEd0a1NvY2tldCAgICAgIGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7
CisgIERpc3BsYXkgICAgICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxh
eSAqLworCisgIFdpbmRvdyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQg
WFdpbmRvdyAqLworICBnaW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0
aCwgaGVpZ2h0OworICBYdENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZv
ciBYRW1iZWQgKi8KK307CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tl
dENsYXNzIHdpZGdldF9jbGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3Rr
X3h0YmluX2dldF90eXBlICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0
YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5f
QVBJKHZvaWQpICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQg
ICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICB5KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVz
aXplIChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0
VE1SZWMgeworICAgIFh0VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZh
dGUgdG8gVHJhbnNsYXRpb24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9j
X3RhYmxlOyAgICAgICAgIC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLwor
ICAgIHN0cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1h
bmFnZXIgc3RhdGUgcHRyICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1l
OworfSBYdFRNUmVjLCAqWHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAg
ICBXaWRnZXQgICAgICAgICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdl
dCBpdHNlbGYgICAgICAgICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAg
ICAgICAvKiBwb2ludGVyIHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQg
ICAgICAgICAgcGFyZW50OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAg
ICAgICAgICAgKi8KKyAgICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3
aWRnZXQgcmVzb3VyY2UgbmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAg
YmVpbmdfZGVzdHJveWVkOyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAg
Ki8KKyAgICBYdENhbGxiYWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2Fs
bCB3aGVuIHdpZGdldCBkZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWlu
dHM7ICAgICAgICAvKiBjb25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQ
b3NpdGlvbiAgICAgICAgeCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAg
ICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAg
ICAvKiB3aW5kb3cgZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24g
ICAgICAgYm9yZGVyX3dpZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAg
ICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3
aWRnZXQgZ2VvbWV0cnkgbWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vu
c2l0aXZlOyAgICAgICAgICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8K
KyAgICBCb29sZWFuICAgICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2Vz
dG9ycyBzZW5zaXRpdmU/ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7
ICAgICAgICAvKiBwcml2YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRN
UmVjICAgICAgICAgdG07ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50
ICAgICAgICAgICAgKi8KKyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAv
KiBhY2NlbGVyYXRvciB0cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAg
ICAgYm9yZGVyX3BpeGVsOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAg
ICAgKi8KKyAgICBQaXhtYXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cg
Ym9yZGVyIHBpeG1hcCBvciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBf
bGlzdDsgICAgICAgICAvKiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAg
ICBDYXJkaW5hbCAgICAgICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMg
ICAgICAgICAgICAgICAgICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAg
ICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4g
ICAgICAgICAgKnNjcmVlbjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAg
ICAgICAgICAgKi8KKyAgICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBj
b2xvcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAg
d2luZG93OyAgICAgICAgICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KKyAgICBDYXJkaW5hbCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2Yg
cGxhbmVzIGluIHdpbmRvdyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3Vu
ZF9waXhlbDsgICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQ
aXhtYXAgICAgICAgICAgYmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBw
aXhtYXAgb3IgTlVMTCAgKi8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAg
ICAvKiBpcyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAg
ICAgICAgbWFwcGVkX3doZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8g
ICAgICAgKi8KK30gQ29yZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAg
IENvcmVQYXJ0ICAgIGNvcmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtf
WFRCSU5fSF9fICovCisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UGx1Z2luUGFja2FnZUd0a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVk
ZSA8Z21vZHVsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50ZWQu
aCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1
bmRlZiBOUF9Jbml0aWFsaXplRnVuY1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25z
TWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBs
dWdpblBhY2thZ2VHdGs+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlR3Rr
KCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAKKyAg
ICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAgU3Ry
aW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgICAg
ICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAgICAg
ICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9F
eHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9F
eHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5Q
YWNrYWdlR3RrJiBiKTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxv
YWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBj
b25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdp
bkZ1bmNzOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBm
ZXRjaEluZm8oKTsKKworICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xv
YWRDb3VudDsKKworICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5n
IG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25h
bWU7CisKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25z
OworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAg
ICAgICBHTW9kdWxlKiBtX21vZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOwor
CisgICAgICAgIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3Jp
cHRpb247CisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAg
ICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgbV9OUFBfR2V0VmFsdWU7CisgICAgICAgIE5QUGx1Z2lu
RnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1
bmNzOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0
dXJuIGtleS0+aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50
IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBh
Y2thZ2VHdGsqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9
CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3Rr
PiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVnaW5Q
YWNrYWdlR3RrOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91
bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3Rv
bSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxkIGJl
IHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRp
b24uCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFn
ZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8
V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBl
czxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5cGUg
SW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBI
YXNoOworICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAgIH07
Cit9CisKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBs
dWdpblN0cmVhbUd0a19ICisjZGVmaW5lIFBsdWdpblN0cmVhbUd0a19ICisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZWZD
b3VudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAg
IGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3Ry
ZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OworCisgICAg
Y2xhc3MgUGx1Z2luU3RyZWFtR3RrIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3RyZWFtR3Rr
PiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCB7CisgICAgcHVibGlj
OgorICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayosIEZyYW1lKiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRh
KTsKKyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOworICAgICAgICAKKyAgICAgICAgdm9pZCBz
dGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFt
KCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsg
bV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KKworICAgICAgICAvLyBOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKik7CisKKyAgICAgICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBL
VVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAgICAgICB2
b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0YXRpYyBO
UFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbShOUFJlYXNvbik7Cisg
ICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOworCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBt
X3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc291cmNlUmVz
cG9uc2U7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIG1f
cGx1Z2luVmlldzsKKyAgICAgICAgdm9pZCogbV9ub3RpZnlEYXRhOworICAgICAgICBib29sIG1f
c2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0
ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKworICAgICAgICBUaW1lcjxQbHVnaW5T
dHJlYW1HdGs+IG1fZGVsYXlEZWxpdmVyeVRpbWVyOworICAgICAgICB2b2lkIGRlbGF5RGVsaXZl
cnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0az4qKTsKKworICAgICAgICBPd25QdHI8
IFZlY3RvcjxjaGFyPiA+IG1fZGVsaXZlcnlEYXRhOworCisgICAgICAgIEZJTEUqIG1fdGVtcEZp
bGVIYW5kbGU7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsK
KyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsK
KyAgICAgICAgaW50MzIgbV9vZmZzZXQ7CisgICAgICAgIENTdHJpbmcgbV9oZWFkZXJzOworICAg
ICAgICBDU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgTlBSZWFzb24gbV9yZWFzb247CisgICAgICAg
IE5QU3RyZWFtIG1fc3RyZWFtOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKworI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpp
bnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIHBsdWdp
bnMgPSAwOworICAgIAorICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3
IFBsdWdpbkRhdGFiYXNlR3RrOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVn
aW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5y
ZWZyZXNoKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2lu
RGF0YWJhc2VHdGs6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29s
IFBsdWdpbkRhdGFiYXNlR3RrOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1
Z2luczsKKworICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3Jl
YXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBh
dGhzKCk7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1Vu
bG9hZCA9IG1fcGx1Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMu
cmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0g
cGx1Z2luc1RvVW5sb2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1
Z2lucworICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5T
ZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNF
bXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7Cisg
ICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsK
KyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7
CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAg
ICB9CisKKyAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMo
KS5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQg
IT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5hZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1
Z2luU2V0Q2hhbmdlZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiBQbHVnaW5EYXRh
YmFzZUd0azo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsq
PiByZXN1bHQ7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQp
LmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRh
YmFzZUd0azo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1
bmlxdWVGaWxlbmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBQbHVnaW5QYWNr
YWdlR3RrKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VHdGsqIG5ld1dNUFBs
dWdpbiA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEdEaXIqIGRpciA9IGdfZGlyX29wZW4oKGl0LT51dGY4KCkpLmRhdGEoKSwgMCwgTlVMTCk7Cisg
ICAgICAgIGlmIChkaXIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAg
ICAgICB3aGlsZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChuYW1lLCAiLiIgR19NT0RVTEVfU1VGRklYKSkgewor
ICAgICAgICAgICAgICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChp
dC0+dXRmOCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFj
a2FnZShmaWxlbmFtZSwgdGltZShOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVn
aW5QYWNrYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFj
a2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGlyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5l
IFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJp
bmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9z
ID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwg
dmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9z
OyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAg
IGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9z
XSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25D
b21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3Rh
cnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQp
OworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
dmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVy
IHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3Qg
VmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJl
LCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0
cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
VmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciogaG9tZVBhdGggPSBnX2J1
aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVM
TCk7CisgICAgcGF0aHMuYXBwZW5kKGhvbWVQYXRoKTsKKyAgICBnX2ZyZWUoaG9tZVBhdGgpOwor
CisgICAgY29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7
CisgICAgaWYgKG1velBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ry
c3BsaXQobW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVn
aW5QYXRoc1tpXTsgaSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ld
KTsKKworICAgICAgICBnX2ZyZWUocGx1Z2luUGF0aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBl
bmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgi
L3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2VHdGs6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdl
R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKK3sKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250
YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1
Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9l
bmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9F
eHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNl
Y29uZDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRl
bnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNr
YWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2lu
ID0gMDsKKworICAgIGlmICghbWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBs
dWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAg
ICAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24g
PSBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBw
bHVnaW4gPSBwbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhN
RTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWlt
ZSB0eXBlIAorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAg
fQorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJh
c2VHdGs6OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBh
Y2thZ2VHdGsqIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAg
Ly8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBz
ZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBs
dWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBu
ZXcgUGx1Z2luVmlld0d0ayhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmws
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5J
bmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VH
dGsgKmRiID0gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVn
aW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFj
a2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFt
ZSgpOworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRl
c2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRp
b25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMo
KTsKKyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVU
b0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsK
KyAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWlt
ZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0
ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXpl
KCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUt
PnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5z
aW9uc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNp
Z25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
UGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsK
K30KKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhv
ZCBvbiBHVEsrCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFBsdWdJbkluZm9TdG9y
ZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sK
KyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1F
VHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wg
cmVsb2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVn
aW5zKCktPnJlZnJlc2goKTsKKworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAg
Ly8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDI4NjU1KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYg
KzEzNCwxMSBAQCBERVBFTkRQQVRIICs9IGVkaXRpbmcvcXQgaGlzdG9yeS9xdCBsb2FkCiB9CiAK
IGd0ay1wb3J0IHsKK3gxMTpwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICBM
SUJTICs9IC1sWHQKK30KKwogICAgIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFBXRC9wbGF0Zm9y
bS9ndGsgXAogICAgICQkUFdEL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCkBAIC0xNjcsNiArMTcy
LDcgQEAgZ3RrLXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBcCiAgICAg
bG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAgICAuLi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcKIH0K
QEAgLTgzNiwxMyArODQyLDM5IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29y
LmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdUS19ESVNB
QkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdp
bkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmggXAorICAgIHBs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luU3Ry
ZWFtR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAorCiAgIFNPVVJDRVMg
Kz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFj
a0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAg
ICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3Bw
IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsv
bnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0gXAorICAgIHBsdWdp
bnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICBwbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oIFwKKyAg
ICBwbHVnaW5zL2d0ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk0Myw2ICs5NzUsNyBAQCBx
dC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUv
cGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0LmggXApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkocmV2aXNpb24gMjg2NTUp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDcgQEAgbXkgJGN1cnJlbnRTVk5SZXZpc2lvbjsKIG15ICRvc1hWZXJzaW9uOwog
bXkgJGlzUXQ7CiBteSAkaXNHdGs7CitteSAkZW5hYmxlR3RrUGx1Z2luczsKIG15ICRpc1d4Owog
CiAjIFZhcmlhYmxlcyBmb3IgV2luMzIgc3VwcG9ydApAQCAtNDgwLDYgKzQ4MSwyMyBAQCBzdWIg
ZGV0ZXJtaW5lSXNHdGsoKQogICAgIH0KIH0KIAorc3ViIGVuYWJsZUd0a1BsdWdpbnMoKQorewor
ICAgIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKTsKKyAgICByZXR1cm4gJGVuYWJsZUd0a1Bs
dWdpbnM7Cit9CisKK3N1YiBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICByZXR1
cm4gaWYgZGVmaW5lZCgkZW5hYmxlR3RrUGx1Z2lucyk7CisKKyAgICBpZiAoY2hlY2tBcmd2KCIt
LWRpc2FibGUtZ3RrLXBsdWdpbnMiKSkgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDA7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAxOworICAgIH0KK30K
Kwogc3ViIGlzV3goKQogewogICAgIGRldGVybWluZUlzV3goKTsKQEAgLTc3OSw2ICs3OTcsNyBA
QCBzdWIgYnVpbGRRTWFrZUd0a1Byb2plY3QoJCQpCiAKICAgICBteSBAYnVpbGRBcmdzID0gKCJD
T05GSUcrPWd0ay1wb3J0Iik7CiAgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHLT1xdCI7Cisg
ICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBlbmFibGVHdGtQbHVnaW5z
KCk7CiAKICAgICByZXR1cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17880</attachid>
            <date>2007-12-13 13:56:33 -0800</date>
            <delta_ts>2007-12-17 07:58:30 -0800</delta_ts>
            <desc>Updated Giant Patch With Everything</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>181590</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkocmV2aXNpb24gMjg2OTIp
CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChf
X0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9w
cm94eS5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIEtKUyB7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmgJKHJldmlzaW9uIDI4NjkyKQorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18p
CiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIK
IAogbmFtZXNwYWNlIEtKUyB7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19j
bGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CShyZXZpc2lvbiAyODY5MikKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWZuZGVmIEJJTkRJTkdTX0NfQ0xB
U1NfSF8KICNkZWZpbmUgQklORElOR1NfQ19DTEFTU19IXwogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAicnVudGltZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L05QX2pzb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBf
anNvYmplY3QuaAkocmV2aXNpb24gMjg2OTIpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9O
UF9qc29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExB
VEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChfX0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGlt
ZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9wcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBy
dW50aW1lX2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWVfaW1wbC5oCShyZXZpc2lvbiAyODY5MikKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L25wcnVudGltZV9pbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lm
ICFQTEFURk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBy
dW50aW1lLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAKICNpZmRlZiBfX2NwbHVz
cGx1cwogZXh0ZXJuICJDIiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHJldmlzaW9u
IDI4NjkyKQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkod29ya2luZyBjb3B5
KQpAQCAtODksNiArODksNyBAQAogI2lmZGVmIFhQX1VOSVgKICAgICAjaW5jbHVkZSA8WDExL1hs
aWIuaD4KICAgICAjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgICAgI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjZW5kaWYKIAogI2lmZGVmIFhQX1dJTgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
bnBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWUuY3BwCShyZXZpc2lvbiAyODY5MikKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
cnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmICFQTEFU
Rk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ucHJ1bnRpbWVfcHJpdi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDI4NjkyKQorKysgSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvbnBydW50aW1lX3ByaXYuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18pCiAK
LSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKIAog
LyoKICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSgpIHdpbGwgY29weSBz
dHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ucHJ1bnRpbWVfcHJveHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4K
KyAqCisgKgorICogVGhpcyBpcyBhIHByb3h5IGluY2x1ZGUgaGVhZGVyIGZvciBucGFwaS5oCisg
KgorICogU29tZSBvZiB0aGUgI2RlZmluZXMgd2hpY2ggYXJlIGluIFgxMSBoZWFkZXJzIGNvbmZs
aWN0IHdpdGggdHlwZSBhbmQgZW51bQorICogbmFtZXMgaW4gSmF2YVNjcmlwdENvcmUgYW5kIFdl
YkNvcmUKKyAqIFRoaXMgaGVhZGVyICN1bmRlZnMgdGhvc2UgZGVmaW5lcyB0byBmaXggdGhlIGNv
bmZsaWN0cworICogSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBucGFwaS5oIG9yIG5wcnVudGltZS5o
IHdoZW4gYnVpbGRpbmcgb24gWDExLAorICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0
aGUgYWN0dWFsIG5wYXBpLmggb3IgbnBydW50aW1lLmgKKyAqLworCisjaW5jbHVkZSAibnBydW50
aW1lLmgiCisKKyNpZmRlZiBYUF9VTklYCisgICAgI2luY2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4K
KworICAgICN1bmRlZiBOb25lCisgICAgI3VuZGVmIEFib3ZlCisgICAgI3VuZGVmIEJlbG93Cisg
ICAgI3VuZGVmIEF1dG8KKyAgICAjdW5kZWYgQ29tcGxleAorICAgICN1bmRlZiBTdGF0dXMKKyNl
bmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvdGVzdGJpbmRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy90ZXN0YmluZGluZ3MuY3BwCShyZXZp
c2lvbiAyODY5MikKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3Rlc3RiaW5kaW5ncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2lu
Y2x1ZGUgImludGVycHJldGVyLmgiCiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfcHJveHkuaCIKIAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJy
dW50aW1lX29iamVjdC5oIgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDI4NjkyKQorKysgV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9r
ZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJp
c3RpYW5AdHdvdG9hc3RzLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpA
QCAtNjEsMTIgKzYyLDE3IEBACiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNlbmRpZgogCisj
aW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsu
aCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9hZGVy
Q2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAg
LCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50KCIiKQogewogICAgIEFTU0VSVCht
X2ZyYW1lKTsKQEAgLTE3Miw5ICsxNzgsMzAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hXaWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpjb21taXR0ZWRMb2FkKERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0g
ICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgIGZsLT5zZXRF
bmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwotICAgIGZsLT5h
ZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcgPSBs
b2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgaWYgKCFtX3BsdWdp
blZpZXcpIHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJhbWUoKSk7CisgICAgICAgIC8vIFNl
dHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQg
d29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAgICAgICAvLyB3aGVuIHRoZSBmaXJz
dCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVu
dCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgorICAgICAgICBTdHJpbmcgZW5jb2Rp
bmcgPSBsb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAgICAgICAgYm9vbCB1c2VyQ2hvc2Vu
ID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAoIXVzZXJDaG9zZW4pCisgICAgICAg
ICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisK
KyAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbG9hZGVyLT5mcmFtZUxvYWRlcigp
OworICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4p
OworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRh
dGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBp
ZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAgICAgICAgICAgIG1fcGx1Z2luVmll
dy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9uc2UoKSk7CisgICAgICAgICAgICBt
X2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3Bs
dWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI3MCw4ICsyOTcsMTMgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIo
KS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCi1XaWRnZXQqIEZyYW1lTG9hZGVy
Q2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0
cmluZyYsIGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29u
c3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkK
IHsKKyAgICBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3ID0gUGx1Z2luRGF0YWJhc2VHdGs6Omlu
c3RhbGxlZFBsdWdpbnMoKS0+Y3JlYXRlUGx1Z2luVmlldyhjb3JlKG1fZnJhbWUpLCBwbHVnaW5T
aXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9h
ZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTMxMyw4ICszNDUsNyBAQCBQ
YXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlCiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lkZ2V0KQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOworICAgIG1fcGx1Z2luVmlldyA9IHN0
YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihwbHVnaW5XaWRnZXQpOwogfQogCiBXaWRnZXQqIEZy
YW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBF
bGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTMzNiw2ICszNjcsOSBAQCBPYmplY3RD
b250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudDo6b2JqCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNv
cmU6Ok9iamVjdENvbnRlbnRJbWFnZTsKIAorICAgIGlmIChQbHVnaW5EYXRhYmFzZUd0azo6aW5z
dGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSkpCisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47CisKICAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKHR5cGUpKQogICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEZyYW1lOwogCkBAIC00ODEsMTQgKzUx
NSwxNCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6OmdlbmVyYXRlZE1JTUVUCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyLT5mcmFtZSgpKTsKLSAgICAv
LyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8g
Z2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUKLSAgICAvLyB3aGVuIHRoZSBmaXJz
dCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVu
dCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgotICAgIFN0cmluZyBlbmNvZGluZyA9
IGRvY3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7Ci0gICAgYm9vbCB1c2VyQ2hvc2Vu
ID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNvZGluZy5pc051bGwoKSkKLSAgICAg
ICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1l
KCk7Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29k
aW5nLCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAgICAgICBjb21t
aXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7
CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAK
IApAQCAtNTQyLDcgKzU3NiwxNSBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxsVXNlQXJj
aGl2ZShSCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UoKSBjb25zdCB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQogRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNv
bnN0IFJlc291cmNlRXJyb3ImKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVz
b3VyY2VFcnJvciYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKSB7CisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBtX3BsdWdp
blZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAg
ICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6dXBkYXRlR2xvYmFs
SGlzdG9yeUZvclN0YW5kYXJkTG9hZChjb25zdCBLVVJMJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp1cGRhdGVHbG9iYWxIaXN0b3J5Rm9yUmVsb2FkKGNv
bnN0IEtVUkwmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4NjkyKQor
KysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCkBAIC0zMiw2ICszMyw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3
R3RrLmgiCisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xODAsNiArMTgzLDEwIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91
c2VyQWdlbnQ7CisKKyAgICAgICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bwor
ICAgICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJv
b2wgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAyODY5MikKKysrIFdlYktpdC9ndGsv
V2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4LDYgKzgxOCw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFcKICAgICBzZXR0aW5n
cy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4
ZWRGb250RmFtaWx5KCJDb3VyaWVyIE5ldyIpOwogICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkoIkFyaWFsIik7CisgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUp
OwogCiAgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2ViVmlldywgR1RLX0NBTl9GT0NVUyk7CiAg
ICAgd2ViVmlld0RhdGEtPm1haW5GcmFtZSA9IFdFQktJVF9XRUJfRlJBTUUod2Via2l0X3dlYl9m
cmFtZV9uZXcod2ViVmlldykpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAyODY5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nyw2IEBA
IFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3Jl
OjpoaXN0b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7
IH0KIAotUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1
Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNp
Z25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IFN0cmluZygpOyB9IAotYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlN
RVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
ZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci0KLQogQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAw
eEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rp
b24odm9pZCAoKikoKSkgeyB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAko
cmV2aXNpb24gMjg2OTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDYsNSArMzA2LDIyIEBAIHZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVz
c0ludmFsaWRhdGlvbihib28KIAogdm9pZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0
CiB7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtX
aWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4ocGFyZW50KCkpOworICAgIEludFBvaW50IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBE
b24ndCBhbGxvdyB0aGUgYWxsb2NhdGlvbiBzaXplIHRvIGJlIG5lZ2F0aXZlCisgICAgSW50U2l6
ZSBzeiA9IGZyYW1lR2VvbWV0cnkoKS5zaXplKCk7CisgICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVy
bygpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBsb2MueCgpLCBsb2MueSgp
LCBzei53aWR0aCgpLCBzei5oZWlnaHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwogfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCShy
ZXZpc2lvbiAyODY5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNs
dWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIkJhc2U2NC5oIgogCisjaW5jbHVkZSA8ZXJy
bm8uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTE5MiwyNiArMTkzLDI5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRp
bWUKICAgICBzdGFydFNjaGVkdWxlZEpvYnMoKTsKIAogICAgIGZkX3NldCBmZHJlYWQ7Ci0gICAg
RkRfWkVSTygmZmRyZWFkKTsKICAgICBmZF9zZXQgZmR3cml0ZTsKLSAgICBGRF9aRVJPKCZmZHdy
aXRlKTsKICAgICBmZF9zZXQgZmRleGNlcDsKLSAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKICAgICBp
bnQgbWF4ZmQgPSAwOwotICAgIGN1cmxfbXVsdGlfZmRzZXQobV9jdXJsTXVsdGlIYW5kbGUsICZm
ZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKIAogICAgIHN0cnVjdCB0aW1ldmFs
IHRpbWVvdXQ7CiAgICAgdGltZW91dC50dl9zZWMgPSAwOwogICAgIHRpbWVvdXQudHZfdXNlYyA9
IHNlbGVjdFRpbWVvdXRNUyAqIDEwMDA7ICAgICAgIC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29u
ZHMKIAogICAgIC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgdGltZXJzIHNpbmNlIHNpZ25hbHMgbWF5
IGludGVycnVwdCBzZWxlY3QoKSwgcmFpc2luZyBFSU5UUiBlcnJvcnMgb24gc29tZSBwbGF0Zm9y
bXMKLSAgICBzZXREZWZlcnJpbmdUaW1lcnModHJ1ZSk7Ci0gICAgaW50IHJjID0gOjpzZWxlY3Qo
bWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0KTsKLSAgICBz
ZXREZWZlcnJpbmdUaW1lcnMoZmFsc2UpOworICAgIFdlYkNvcmU6OnNldERlZmVycmluZ1RpbWVy
cyh0cnVlKTsKKyAgICBpbnQgcmM7CisgICAgZG8geworICAgICAgICBGRF9aRVJPKCZmZHJlYWQp
OworCUZEX1pFUk8oJmZkd3JpdGUpOworCUZEX1pFUk8oJmZkZXhjZXApOworCWN1cmxfbXVsdGlf
ZmRzZXQobV9jdXJsTXVsdGlIYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1h
eGZkKTsKKwlyYyA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4
Y2VwLCAmdGltZW91dCk7CisgICAgfSB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIp
OworICAgIFdlYkNvcmU6OnNldERlZmVycmluZ1RpbWVycyhmYWxzZSk7CiAKICAgICBpZiAoLTEg
PT0gcmMpIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHByaW50ZigiYmFkOiBzZWxlY3QoKSBy
ZXR1cm5lZCAtMVxuIik7CisgICAgICAgIHBlcnJvcigiYmFkOiBzZWxlY3QoKSByZXR1cm5lZCAt
MTogIik7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvY29u
ZmlnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jb25maWcuaAkocmV2aXNpb24gMjg2OTIpCisr
KyBXZWJDb3JlL2NvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwxMCBAQAogI2lu
Y2x1ZGUgPHd0Zi9EaXNhbGxvd0NUeXBlLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykK
KyNkZWZpbmUgV1RGX1VTRV9OUE9CSkVDVCAxCisjZW5kaWYKKwogI2lmICFDT01QSUxFUihNU1ZD
KSAvLyBjYW4ndCBnZXQgdGhpcyB0byBjb21waWxlIG9uIFZpc3VhbCBDKysgeWV0CiAjZGVmaW5l
IEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJ
bkVsZW1lbnQuaAkocmV2aXNpb24gMjg2OTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2VuZGlmCiAKICNpZiBV
U0UoTlBPQkpFQ1QpCi0jaW5jbHVkZSA8YmluZGluZ3MvbnBydW50aW1lLmg+CisjaW5jbHVkZSA8
YmluZGluZ3MvbnBydW50aW1lX3Byb3h5Lmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpbkRh
dGFiYXNlR3RrX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VHdGtfSAorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAg
IGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3MgS1VSTDsKKyAgICBj
bGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICB0
eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+LCBQbHVnaW5QYWNrYWdlR3Rr
SGFzaD4gUGx1Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFzZUd0ayB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIGluc3RhbGxlZFBsdWdp
bnMoKTsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogY3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFy
ZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5
KTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9yPFBsdWdpblBhY2th
Z2VHdGsqPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1FVHlwZVJlZ2lzdGVy
ZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIHZvaWQgYWRkRXh0cmFQ
bHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0
UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1fcGx1Z2luUGF0aHMg
PSBwYXRoczsgfQorICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdDsK
KworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1
Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIFBsdWdpblBh
Y2thZ2VHdGsqIHBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbik7CisK
KyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5QYXRocygpOworCisg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7CisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CisgICAgICAgIFBsdWdpblNldCBtX3BsdWdpbnM7
CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlld0d0ay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50
LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1HdGsuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAi
a2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJranNfd2lu
ZG93LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jv
b3QuaCIKKyNpbmNsdWRlIDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisK
KyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9Q
TFVHSU5TKQorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+Cisj
ZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisjaW5jbHVkZSA8Z2RrL2dka3dpbjMy
Lmg+CisjZW5kaWYKKwordXNpbmcgS0pTOjpFeGVjU3RhdGU7Cit1c2luZyBLSlM6OkludGVycHJl
dGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1c2luZyBLSlM6OkpTT2JqZWN0OwordXNpbmcgS0pT
OjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3RyaW5nOworCit1c2luZyBzdGQ6Om1pbjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CisKK2NsYXNzIFBsdWdpblJlcXVlc3RHdGsgeworcHVibGljOgor
ICAgIFBsdWdpblJlcXVlc3RHdGsoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVx
dWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgICAgICA6
IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQorICAgICAgICAsIG1fbm90aWZ5
RGF0YShub3RpZnlEYXRhKQorICAgICAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZp
Y2F0aW9uKSB7IH0KK3B1YmxpYzoKKyAgICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxv
YWRSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxvYWRSZXF1ZXN0OyB9CisgICAgdm9p
ZCogbm90aWZ5RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90aWZ5RGF0YTsgfQorICAgIGJvb2wg
c2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsgfQor
cHJpdmF0ZToKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IG1fZnJhbWVMb2FkUmVxdWVzdDsKKyAgICB2
b2lkKiBtX25vdGlmeURhdGE7CisgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgLy8g
RklYTUU6IHVzZXIgZ2VzdHVyZQorfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBNZXNzYWdlVGhy
b3R0bGVUaW1lSW50ZXJ2YWwgPSAwLjAwMTsKKworY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxl
ckd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luTWVzc2FnZVRocm90dGxlckd0ayhQbHVnaW5WaWV3
R3RrKiBwbHVnaW5WaWV3KQorICAgICAgICA6IG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQorICAg
ICAgICAsIG1fYmFjaygwKSwgbV9mcm9udCgwKQorICAgICAgICAsIG1fbWVzc2FnZVRocm90dGxl
VGltZXIodGhpcywgJlBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs6Om1lc3NhZ2VUaHJvdHRsZVRp
bWVyRmlyZWQpCisgICAgeworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmVlIGxpc3Qgd2l0
aCBvdXIgaW5saW5lIG1lc3NhZ2VzCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBO
dW1JbmxpbmVNZXNzYWdlcyAtIDE7IGkrKykKKyAgICAgICAgICAgIG1faW5saW5lTWVzc2FnZXNb
aV0ubmV4dCA9ICZtX2lubGluZU1lc3NhZ2VzW2kgKyAxXTsKKyAgICAgICAgbV9pbmxpbmVNZXNz
YWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdLm5leHQgPSAwOworICAgICAgICBtX2ZyZWVJbmxp
bmVNZXNzYWdlcyA9ICZtX2lubGluZU1lc3NhZ2VzWzBdOworICAgIH0KKworICAgIH5QbHVnaW5N
ZXNzYWdlVGhyb3R0bGVyR3RrKCkKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG5leHQ7
CisgICAgCisgICAgICAgIGZvciAoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7IG1l
c3NhZ2U7IG1lc3NhZ2UgPSBuZXh0KSB7CisgICAgICAgICAgICBuZXh0ID0gbWVzc2FnZS0+bmV4
dDsKKyAgICAgICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICB9ICAgICAgICAK
KyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRNZXNzYWdlKFhJRCBoV25kLCBndWludCBtc2cs
IGd1aW50IHdQYXJhbSwgZ2xvbmcgbFBhcmFtKSAKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3Nh
Z2UqIG1lc3NhZ2UgPSBhbGxvY2F0ZU1lc3NhZ2UoKTsKKworICAgICAgICBtZXNzYWdlLT5oV25k
ID0gaFduZDsKKyAgICAgICAgbWVzc2FnZS0+bXNnID0gbXNnOworICAgICAgICBtZXNzYWdlLT53
UGFyYW0gPSB3UGFyYW07CisgICAgICAgIG1lc3NhZ2UtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICAg
ICAgbWVzc2FnZS0+bmV4dCA9IDA7CisKKyAgICAgICAgaWYgKG1fYmFjaykKKyAgICAgICAgICAg
IG1fYmFjay0+bmV4dCA9IG1lc3NhZ2U7CisgICAgICAgIG1fYmFjayA9IG1lc3NhZ2U7CisgICAg
ICAgIGlmICghbV9mcm9udCkKKyAgICAgICAgICAgIG1fZnJvbnQgPSBtZXNzYWdlOworCisgICAg
ICAgIGlmICghbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAg
bV9tZXNzYWdlVGhyb3R0bGVUaW1lci5zdGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUlu
dGVydmFsKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFBsdWdpbk1lc3NhZ2Ugewor
ICAgICAgICBYSUQgaFduZDsKKyAgICAgICAgZ3VpbnQgbXNnOworICAgICAgICBndWludCB3UGFy
YW07CisgICAgICAgIGdsb25nIGxQYXJhbTsKKworICAgICAgICBzdHJ1Y3QgUGx1Z2luTWVzc2Fn
ZSogbmV4dDsKKyAgICB9OworICAgIAorICAgIHZvaWQgbWVzc2FnZVRocm90dGxlVGltZXJGaXJl
ZChUaW1lcjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrPiopCisgICAgeworICAgICAgICBQbHVn
aW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsKKyAgICAgICAgbV9mcm9udCA9IG1fZnJvbnQt
Pm5leHQ7CisgICAgICAgIGlmIChtZXNzYWdlID09IG1fYmFjaykKKyAgICAgICAgICAgIG1fYmFj
ayA9IDA7CisKKwkvLyAgICAgICAgOjpDYWxsV2luZG93UHJvYyhtX3BsdWdpblZpZXctPnBsdWdp
blduZFByb2MoKSwgbWVzc2FnZS0+aFduZCwgbWVzc2FnZS0+bXNnLCBtZXNzYWdlLT53UGFyYW0s
IG1lc3NhZ2UtPmxQYXJhbSk7CisKKyAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisKKyAg
ICAgICAgaWYgKG1fZnJvbnQpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLnN0
YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOworICAgIH0KKworICAgIFBs
dWdpbk1lc3NhZ2UqIGFsbG9jYXRlTWVzc2FnZSgpCisgICAgeworICAgICAgICBQbHVnaW5NZXNz
YWdlICptZXNzYWdlOworCisgICAgICAgIGlmIChtX2ZyZWVJbmxpbmVNZXNzYWdlcykgeworICAg
ICAgICAgICAgbWVzc2FnZSA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICAgICAgbV9m
cmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdlLT5uZXh0OworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1lc3NhZ2UgPSBuZXcgUGx1Z2luTWVzc2FnZTsKKworICAgICAgICByZXR1cm4gbWVz
c2FnZTsKKyAgICB9CisKKyAgICBib29sIGlzSW5saW5lTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBt
ZXNzYWdlKSAKKyAgICB7CisgICAgICAgIHJldHVybiBtZXNzYWdlID49ICZtX2lubGluZU1lc3Nh
Z2VzWzBdICYmIG1lc3NhZ2UgPD0gJm1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXMg
LSAxXTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3Nh
Z2UpIAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lTWVzc2FnZShtZXNzYWdlKSkgeworICAg
ICAgICAgICAgbWVzc2FnZS0+bmV4dCA9IG1fZnJlZUlubGluZU1lc3NhZ2VzOworICAgICAgICAg
ICAgbV9mcmVlSW5saW5lTWVzc2FnZXMgPSBtZXNzYWdlOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGRlbGV0ZSBtZXNzYWdlOworICAgIH0KKworICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1
Z2luVmlldzsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2JhY2s7CisgICAgUGx1Z2luTWVzc2FnZSog
bV9mcm9udDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgTnVtSW5saW5lTWVzc2FnZXMgPSA0Owor
ICAgIFBsdWdpbk1lc3NhZ2UgbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlc107Cisg
ICAgUGx1Z2luTWVzc2FnZSogbV9mcmVlSW5saW5lTWVzc2FnZXM7CisKKyAgICBUaW1lcjxQbHVn
aW5NZXNzYWdlVGhyb3R0bGVyR3RrPiBtX21lc3NhZ2VUaHJvdHRsZVRpbWVyOworfTsKKworc3Rh
dGljIFN0cmluZyBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsKQor
eworICAgIGlmICghdXJsLnN0cmluZygpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2Up
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBUaGlzIHJldHVybnMgYW4gdW5l
c2NhcGVkIHN0cmluZworICAgIHJldHVybiBLVVJMOjpkZWNvZGVfc3RyaW5nKHVybC5kZXByZWNh
dGVkU3RyaW5nKCkubWlkKDExKSk7Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6
OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCitjb25zdCB3Y2hhcl90KiBrV2ViUGx1Z2luVmll
d1dpbmRvd0NsYXNzTmFtZSA9IEwiV2ViUGx1Z2luVmlldyI7Citjb25zdCB3Y2hhcl90KiBrV2Vi
UGx1Z2luVmlld1Byb3BlcnR5ID0gTCJXZWJQbHVnaW5WaWV3UHJvcGVydHkiOworCitzdGF0aWMg
Y29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoV2luZG93czsgVTsg
V2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8y
LjAiOworCit2b2lkIFBsdWdpblZpZXdHdGs6OnVwZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAg
aWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5p
c0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2lu
ZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1f
d2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2Vv
bWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7CisgICAgbV9jbGlw
UmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1Jl
Y3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBpZiAobV93aW5kb3cgJiYgKG1fd2lu
ZG93UmVjdCAhPSBvbGRXaW5kb3dSZWN0IHx8IG1fY2xpcFJlY3QgIT0gb2xkQ2xpcFJlY3QpKSB7
CisgICAgICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0LngoKSwg
bV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWln
aHQoKSB9OworICAgICAgICBpZiAobV93aWRnZXQpIHsKKyAgICAgICAgICAgIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgICAg
ICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bv
c2l0aW9uKEdUS19YVEJJTihtX3dpZGdldCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVj
dC55KCkpOworICAgICAgICAgICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2lu
ZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgUGx1Z2luVmlld0d0azo6d2lu
ZG93Q2xpcFJlY3QoKSBjb25zdAoreworICAgIC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBi
b3VuZHMuCisgICAgSW50UmVjdCBjbGlwUmVjdChtX3dpbmRvd1JlY3QpOworICAgIAorICAgIC8v
IFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2lu
ZyBsYXllciBhbmQgZnJhbWUgdmlldy4KKyAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2VsZW1l
bnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgRnJhbWVWaWV3KiBwYXJlbnRW
aWV3ID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJz
ZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIobGF5ZXIsIHRydWUpKTsKKwor
ICAgIHJldHVybiBjbGlwUmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+cHJpbnRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJh
bWVHZW9tZXRyeSgpKQorICAgICAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisK
KyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIGluaXQoKTsKKworICAgIHVwZGF0ZVdpbmRvdygp
OworICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpn
ZW9tZXRyeUNoYW5nZWQoKSBjb25zdAoreworICAgIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCk7
CisgICAgdXBkYXRlV2luZG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Rm9jdXMo
KQoreworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1NldEZvY3VzKHdp
bmRvdyk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgLy9pZiAoWElEIHdp
bmRvdyA9IG1fd2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX1NIT1dOQSk7CisK
KyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoaWRlKCkKK3sK
KyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2lu
ZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX0hJREUpOworCisgICAgV2lkZ2V0Ojpo
aWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3Rh
dGljIEltYWdlKiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCisg
ICAgICAgIG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVs
bFBsdWdpbiIpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRyeSgpLngoKSwg
ZnJhbWVHZW9tZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2lu
SW1hZ2UtPmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS53
aWR0aCgpIC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNldCA9IChmcmFt
ZUdlb21ldHJ5KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKworICAgIGlt
YWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0LmludGVyc2Vj
dHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+c2F2ZSgpOwor
ICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4dC0+ZHJhd0lt
YWdlKG51bGxQbHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRl
ZCkgeworICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAg
IHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5l
ZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmll
dygpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQor
CisgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZl
bnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZl
bnQgbnBFdmVudDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBwYXNzIGl0IG9u
ICovCisgICAgLyoKKyAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7ICAgIAor
CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAg
fSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAg
ICB9CisgICAgKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
OworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZu
cEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKKy8vZXh0
ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsK
KworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAgICBJbnRQb2lu
dCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93
KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgLyoKKyAg
ICBucEV2ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBucEV2ZW50
LndQYXJhbSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbnBFdmVu
dC53UGFyYW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAg
ICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gbW91c2Vtb3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2
ZW50IHx8IAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0
dG9uRG93bigpKQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50
KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNl
IDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworCisg
ICAgICAgICAgICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAgIG1fcGFy
ZW50RnJhbWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVU
VE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVu
dC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9O
VVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgKi8KKwor
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50bHksIFdpZGdl
dDo6c2V0Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVu
dEhhbmRsZXIuY3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQg
aWdub3JlTmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIC8v
aWdub3JlTmV4dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lz
V2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50
KCkpCisgICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBo
YW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7
CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNT
dGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50
KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54
ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93Lndp
ZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQo
KTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC50b3AgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0Lndp
ZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOwor
CisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAg
S0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworCisg
ICAgICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEFTU0VSVChtX3dpbmRvdyk7CisgICAgfQorICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKKyAg
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNpZiBk
ZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5T
KQorICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0
aW9uKEdUS19YVEJJTihtX3dpZGdldCksIGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsKKyAg
ICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2Nh
dGlvbi5oZWlnaHQpOworICAgIH0KKyNlbmRpZgorfQorCitib29sIFBsdWdpblZpZXdHdGs6OnN0
YXJ0KCkKK3sKKyAgICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEFTU0VSVChtX3BsdWdpbik7CisgICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5uZXdwKTsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3Vy
cmVudFBsdWdpblZpZXcodGhpcyk7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+bmV3cCgoTlBNSU1FVHlwZSltX21pbWVUeXBlLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9t
b2RlLCBtX3BhcmFtQ291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7Cisg
ICAgfQorICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisgICAg
aWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2lzU3RhcnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9s
b2FkTWFudWFsbHkpIHsKKyAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0
OworICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRo
b2QoIkdFVCIpOworICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dFVSTChtX3VybCk7CisgICAgICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0b3Ao
KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hT
ZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhh
c2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5l
bmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0
b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0
KS0+c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9
CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9
IGZhbHNlOworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisK
KyAgICAvLyBEZXN0cm95IHRoZSBwbHVnaW4KKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKworICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3Rr
KiBwbHVnaW5WaWV3KQoreworICAgIHNfY3VycmVudFBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Owor
fQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygpCit7
CisgICAgcmV0dXJuIHNfY3VycmVudFBsdWdpblZpZXc7Cit9CisKK3N0YXRpYyBjaGFyKiBjcmVh
dGVVVEY4U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIENTdHJpbmcgY3N0ciA9IHN0
ci51dGY4KCk7CisgICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFz
dE1hbGxvYyhjc3RyLmxlbmd0aCgpICsgMSkpOworCisgICAgc3RybmNweShyZXN1bHQsIGNzdHIu
ZGF0YSgpLCBjc3RyLmxlbmd0aCgpICsgMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgdm9pZCBmcmVlU3RyaW5nQXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3Ro
KQoreworICAgIGlmICghc3RyaW5nQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5
W2ldKTsKKworICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5KTsKK30KKworc3RhdGljIGJvb2wgZ2V0
U3RyaW5nKEtKU1Byb3h5KiBwcm94eSwgSlNWYWx1ZSogcmVzdWx0LCBTdHJpbmcmIHN0cmluZykK
K3sKKyAgICBpZiAoIXByb3h5IHx8ICFyZXN1bHQgfHwgcmVzdWx0LT5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNMb2NrIGxvY2s7CisKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBwcm94eS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBVU3RyaW5n
IHVzdHJpbmcgPSByZXN1bHQtPnRvU3RyaW5nKGV4ZWMpOworICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgCisgICAgc3RyaW5nID0gdXN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiBy
ZXF1ZXN0KQoreworICAgIEtVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVl
c3QoKS5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3Jp
cHRTdHJpbmdJZkphdmFTY3JpcHRVUkwocmVxdWVzdFVSTCk7CisKKyAgICBpZiAoanNTdHJpbmcu
aXNOdWxsKCkpIHsKKyAgICAgICAgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVybFNlbGVjdGVk
KHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKSwgMCwgZmFsc2UsIHRydWUpOworCisgICAgICAg
IC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3
aGVuIHRoZSBkb2N1bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZworICAgICAgICBpZiAocmVxdWVz
dC0+c2VuZE5vdGlmaWNhdGlvbigpKSB7CisgICAgICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT51cmxub3RpZnkobV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5kZXByZWNhdGVkU3RyaW5nKCkudXRm
OCgpLCBOUFJFU19ET05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRhcmdldGVkIEphdmFTY3JpcHQgcmVxdWVz
dHMgYXJlIG9ubHkgYWxsb3dlZCBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgSmF2YVNj
cmlwdCBwbHVnaW4KKyAgICAvLyBhbmQgdGhpcyBoYXMgYmVlbiBtYWRlIHN1cmUgaW4gOjpsb2Fk
LgorICAgIEFTU0VSVChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNF
bXB0eSgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZChyZXF1ZXN0LT5mcmFtZUxvYWRS
ZXF1ZXN0KCkuZnJhbWVOYW1lKCkpID09IG1fcGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4
ZWN1dGluZyBhIHNjcmlwdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3ll
ZCwgc28gd2Uga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGZyYW1lLgorICAgIFJlZlB0
cjxGcmFtZT4gcGFyZW50RnJhbWUgPSAgbV9wYXJlbnRGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChqc1N0cmluZy5kZXBy
ZWNhdGVkU3RyaW5nKCksIHRydWUpOworCisgICAgaWYgKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVl
c3QoKS5mcmFtZU5hbWUoKS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5n
OworCisgICAgICAgIGlmICghZ2V0U3RyaW5nKHBhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLCBy
ZXN1bHQsIHJlc3VsdFN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1N0
cmluZyBjc3RyID0gcmVzdWx0U3RyaW5nLnV0ZjgoKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0
cmVhbUd0az4gc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBwYXJlbnRGcmFtZS5n
ZXQoKSwgcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1
ZXN0LT5zZW5kTm90aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAg
IG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0
cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFT
U0VSVCh0aW1lciA9PSAmbV9yZXF1ZXN0VGltZXIpOworICAgIEFTU0VSVChtX3JlcXVlc3RzLnNp
emUoKSA+IDApOworCisgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG1fcmVxdWVzdHNb
MF07CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBu
ZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0
bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUg
ZGVsZXRlZC4KKyAgICBpZiAobV9yZXF1ZXN0cy5zaXplKCkgPiAwKQorICAgICAgICBtX3JlcXVl
c3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0
ayogcmVxdWVzdCkKK3sKKyAgICBtX3JlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3Jl
cXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7CisKKyAg
ICBLVVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7Cisg
ICAgCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElE
X1VSTDsKKworICAgIFN0cmluZyB0YXJnZXQgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgp
OworCisgICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBu
byBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxh
eWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4u
CisgICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpICE9IG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmCisgICAgICAg
ICh0YXJnZXQuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkg
IT0gbV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwor
CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7
CisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX3BhcmVudEZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBpZiAoIXNldHRpbmdzIHx8
ICFzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBSZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1v
emlsbGEgZG9lcy4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAg
ICAgICB9IGVsc2UgaWYgKHRhcmdldC5pc051bGwoKSAmJiBtX21vZGUgPT0gTlBfRlVMTCkgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYSBKYXZhU2NyaXB0IHJlcXVlc3QgZnJvbSBhIHN0
YW5kYWxvbmUgcGx1Zy1pbiB0aGF0IGlzIHNlbGYtdGFyZ2V0dGVkCisgICAgICAgICAgICAvLyBi
ZWNhdXNlIHRoaXMgY2FuIGNhdXNlIHRoZSB1c2VyIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBibGFu
ayBwYWdlICgzNDI0MDM5KS4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFN
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSB8fCAhdGFy
Z2V0LmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgJiYgIXRhcmdl
dC5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3Bh
cmVudEZyYW1lKSB7CisgICAgICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBh
bGxvdyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRo
ZSBwbHVnLWluLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAg
ICAgIH0KKworICAgICAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbmV3IFBsdWdpblJl
cXVlc3RHdGsoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7
CisgICAgICAgIHNjaGVkdWxlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9w
YXJlbnRGcmFtZSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2VuZE5vdGlm
aWNhdGlvbiwgbm90aWZ5RGF0YSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKwor
ICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworfQorCitzdGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0
IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsU3Ry
aW5nID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShyZWxhdGl2ZVVSTFN0cmluZyk7CisK
KyAgICAvLyBTdHJpcCByZXR1cm4gY2hhcmFjdGVycworICAgIHVybFN0cmluZy5yZXBsYWNlKCdc
bicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisKKyAgICByZXR1cm4g
S1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6Omdl
dFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90
aWZ5RGF0YSkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAg
ICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVy
bCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVx
dWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1f
YmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxz
ZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0
IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAm
JiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRl
ckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0
IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZm
ZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkr
KykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisg
ICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAg
ICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUg
cG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykg
eworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicp
CisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxu
XG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAg
ICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAg
ICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgz
NzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVP
TChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBD
UkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8v
IGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24K
KyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBu
ZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JM
RiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBF
T0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0
aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAg
ICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7
CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcwor
ICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisg
ICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUg
U3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJl
c3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKysp
IHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAm
JiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b3Vw
cGVyKG5hbWVbaV0pOworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBu
YW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b2xvd2Vy
KG5hbWVbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gbmFtZVtpXTsKKworICAg
ICAgICBpZiAobmFtZVtpXSA9PSAnLScpCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVy
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9
IGZhbHNlOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBhcnNlUkZDODIySGVh
ZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIGNvbnN0IGNoYXIq
IGVvbDsKKyAgICBTdHJpbmcgbGFzdEtleTsKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKKworICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIs
IG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCisgICAgd2hpbGUgKChlb2wg
PSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgeworICAgICAgICBjb25zdCBjaGFyKiBsaW5lID0g
Ynl0ZXM7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7CisgICAgICAgIAor
ICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0
b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KKyAgICAgICAgYnl0ZXMgPSBlb2wgKyAxOworICAg
ICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkKKyAgICAgICAgICAg
IGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4gYSBzcGFubmluZyBD
UkxGLgorCisgICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKKyAgICAgICAgaWYgKGxp
bmVMZW5ndGggPT0gMCkKKyAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBl
bmQgb2YgdGhlIGhlYWRlcgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKCps
aW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7CisgICAgICAgICAgICAvLyBDb250aW51YXRp
b24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgaWYgKGxhc3RLZXkuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5k
IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZp
b3VzIGhlYWRlcgorICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJG
aWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZSA9IERl
cHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAg
ICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5k
IG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAg
Zm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisr
KSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhl
YWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVS
RkM4MjJIZWFkZXJGaWVsZE5hbWUoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBj
b2xvbiAtIGxpbmUpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoY29sb24gPT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBEZXByZWNhdGVk
U3RyaW5nOjpmcm9tTGF0aW4xKGNvbG9uLCBlb2wgLSBjb2xvbik7CisKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAg
ICAgICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIHRtcCA9IG9sZFZhbHVlOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKKyAg
ICAgICAgICAgICAgICAgICAgdG1wICs9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVs
ZHMuc2V0KGxhc3RLZXksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBoZWFkZXJGaWVsZHM7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
aGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxl
biB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVh
ZGVyRmllbGRzOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUp
IHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGlu
MShidWYsIGxlbik7CisKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8v
IikpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAg
ICAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgICAgIGlmICghZ19maWxlX3Rlc3QgKChmaWxlbmFt
ZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxF
X1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZP
VU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRvIGJ1ZmZlcgorICAgICAg
ICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAiciIp
OworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgICAgICAvL2J1ZmZlci5yZXNpemUo
KTsKKworICAgICAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwg
ZmlsZUhhbmRsZSk7CisKKyAgICAgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisgICAgICAgIGlm
IChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKKworCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZm
ZXIucmVzaXplKGxlbik7CisgICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7
CisgICAgfQorCisgICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0YSgpOworICAg
IGludCBwb3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisgICAgCisgICAgaWYgKGFsbG93
SGVhZGVycykgeworICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7Cisg
ICAgICAgICAgICBwb3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJG
aXJzdEJsYW5rTGluZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7
CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRo
ZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgor
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1
ZmZlciwgbG9jYXRpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBi
dWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMg
cGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBw
b3N0LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2Ug
dGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFu
ZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAg
ICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29u
dGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3Ro
LnRvSW50KCksIChpbnQpZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRz
LnJlbW92ZSgiQ29udGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9
IGxvY2F0aW9uOworICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVs
ZHMoaGVhZGVyRmllbGRzKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LnNldEhUVFBCb2R5KFBhc3NSZWZQdHI8Rm9ybURhdGE+KG5ldyBGb3JtRGF0YShwb3N0RGF0YSwg
cG9zdERhdGFMZW5ndGgpKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFy
Z2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRp
b24sIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkxOb3Rp
ZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJu
IGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhLCB0cnVl
LCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMKGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5Q
Qm9vbCBmaWxlKQoreworICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0
byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgorICAgIHJl
dHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZp
bGUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6Om5ld1N0cmVhbShOUE1JTUVUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOworfQorCitpbnQzMiBQbHVnaW5WaWV3R3RrOjp3cml0ZShOUFN0cmVhbSogc3RyZWFt
LCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIC0xOworfQorCitOUEVycm9yIFBsdWdpblZpZXdH
dGs6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQorewor
ICAgIFBsdWdpblN0cmVhbUd0ayogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0
cmVhbUd0ayo+KHN0cmVhbS0+bmRhdGEpOworCisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3Ry
ZWFtR3RrOjpvd25lckZvclN0cmVhbShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJl
dHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SOworCisgICAgYnJvd3NlclN0cmVhbS0+
Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKK30KKworY29uc3QgY2hhciogUGx1Z2luVmlld0d0azo6dXNlckFnZW50KCkKK3sKKyAgICBp
ZiAobV9xdWlya3MgJiBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkKKyAgICAgICAg
cmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisKKyAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkp
CisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2Vu
dChtX3VybCkudXRmOCgpOworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgU3Ry
aW5nIHMgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKG1lc3NhZ2UpOworCisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9t
ZSgpLT5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUsIHMpOworfQorCitOUEVycm9yIFBs
dWdpblZpZXdHdGs6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkgJiYgIWRlZmluZWQgKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgIGNhc2UgTlBOVnh0
QXBwQ29udGV4dDogeworICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAg
ICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQg
KEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisK
KyAgICAgICAgY2FzZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAg
ICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICoo
KHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1hF
bWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChH
VEtfRElTQUJMRV9QTFVHSU5TKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVl
KSA9IHRydWU7CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9
IGZhbHNlOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAg
TlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1Njcmlw
dE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0
byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dT
Y3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2Ny
aXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAg
ICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBO
VlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNj
cmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUo
YXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVu
dC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9i
amVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBP
YmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJl
IHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJv
amVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlw
dE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRP
YmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAg
ICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6
IHsKKyAgICAgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7
CisKKyAgICAgICAgICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKEdUS19XSURH
RVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93KTsKKworICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmll
d0d0azo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoK
KyAgICAgICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6Cisg
ICAgICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2lu
Vmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9pbnZhbGlkYXRlVGlt
ZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxpZFJlY3RzLnNpemUo
KTsgaSsrKQorICAgICAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KG1faW52YWxpZFJlY3RzW2ld
KTsKKyAgICBtX2ludmFsaWRSZWN0cy5jbGVhcigpOworfQorCisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAg
ICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0
IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3Qt
PmJvdHRvbSAtIHJlY3QtPnRvcCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAg
IC8qIEZJWE1FIC0gSW52YWxpZGF0ZSB0aGUgcmVjdGFuZ2xlCisgICAgICAgIFJFQ1QgaW52YWxp
ZFJlY3Qocik7CisgICAgICAgIEludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52YWxpZFJlY3Qs
IEZBTFNFKTsKKyAgICAgICAgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9xdWlya3Mg
JiBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkgeworICAgICAgICAgICAgbV9pbnZhbGlk
UmVjdHMuYXBwZW5kKHIpOworICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgw
LjAwMSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVj
dChyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLyogRklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWdpb24KKyAgICBSRUNUIHI7CisK
KyAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVj
dChyKTsKKyAgICAqLworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sK
KyAgICAvKiBGSVhNRSAtIEZvcmNlIGEgcmVkcmF3CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAg
ICAgICAgOjpVcGRhdGVXaW5kb3cobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRh
dGVXaW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICAqLworfQorCitLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSogUGx1Z2luVmlld0d0azo6YmluZGluZ0luc3RhbmNlKCkKK3sKKyAgICBOUE9i
amVjdCogb2JqZWN0ID0gMDsKKworICAgIGlmICghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOUEVycm9yIG5w
RXJyOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1f
aW5zdGFuY2UsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3QpOworICAgIH0K
KworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUiB8fCAhb2JqZWN0KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIC8vIEZJWE1FIC0gZXJyb3I6IGluY29tcGxldGUgdHlwZSDigJhLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZeKAmSB1c2VkIGluIG5lc3RlZCBuYW1lIHNwZWNpZmllcgorICAg
IC8vIGVycm9yOiBpbmNvbXBsZXRlIHR5cGUg4oCYS0pTOjpCaW5kaW5nczo6SW5zdGFuY2XigJkg
dXNlZCBpbiBuZXN0ZWQgbmFtZSBzcGVjaWZpZXIKKyAgICAvL1JlZlB0cjxLSlM6OkJpbmRpbmdz
OjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFtZS0+Y3JlYXRlUm9vdE9iamVjdCh0aGlz
LCBtX3BhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLT5pbnRlcnByZXRlcigpKTsKKyAgICAvL0tK
Uzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
OjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAgIC8vX05QTl9SZWxl
YXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICAvL3JldHVybiBpbnN0YW5jZTsKKyAgICByZXR1cm4g
TlVMTDsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdpblZpZXdHdGsoKQoreworICAgIHN0b3Ao
KTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJpbmdB
cnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5KG1f
cGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQgJiYg
bV93aWRnZXQpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpZGdldCk7CisgICAgbV93
aW5kb3cgPSAwOworICAgIHNldEd0a1dpZGdldChOVUxMKTsKKworICAgIG1fcGFyZW50RnJhbWUt
PmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOworCisgICAgaWYgKG1fcGx1Z2lu
ICYmICEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQorICAgICAgICBt
X3BsdWdpbi0+dW5sb2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlzY29ubmVjdFN0
cmVhbShQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1zLmNv
bnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShzdHJlYW0pOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworICAgIC8vIFRoZSBmbGFzaCBwbHVnaW4gb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBs
dWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgaWYgKG1pbWVUeXBl
ID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgbV9xdWlya3Mg
fD0gUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQ7CisgICAgICAgIG1fcXVpcmtzIHw9
IFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlOworICAgICAgICBtX3F1aXJrcyB8PSBQbHVn
aW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzOworICAgIH0KKworICAgIC8vIFRo
ZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2Fs
bCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3
aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobV9wbHVnaW4t
Pm5hbWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbV9wbHVnaW4tPm5hbWUoKS5jb250YWlu
cygiV2luZG93cyBNZWRpYSIpKSB7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRGVm
ZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMg
bm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBw
YXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgor
ICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFt
OworICAgIH0KKworICAgIC8vIFRoZSBEaXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBm
aXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisg
ICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBz
aXplCisgICAgaWYgKG1pbWVUeXBlID09ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWlya3Mg
fD0gUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGlu
Z3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBp
dCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0
IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRo
YXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0
YW5jZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAg
ICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW47CisKKyAgICAvLyBQcmV2ZW50
IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5
LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0gImF1
ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1
aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJUKHBh
cmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBz
aXplID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7CisK
KyAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhz
aXplb2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9j
YXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoKG1fcXVpcmtz
ICYgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0
cmluZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9
IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291bnQr
KzsKKyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCitQbHVnaW5W
aWV3R3RrOjpQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KQorICAgIDogbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9wYXJlbnRGcmFtZShwYXJl
bnRGcmFtZSkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9pc1N0YXJ0ZWQoZmFs
c2UpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCktPmNvbXBsZXRlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSkp
CisgICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgLCBt
X3JlcXVlc3RUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVyRmlyZWQpCisg
ICAgLCBtX2ludmFsaWRhdGVUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVRp
bWVyRmlyZWQpCisgICAgLCBtX3BhcmFtTmFtZXMoMCkKKyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkK
KyAgICAsIG1fcXVpcmtzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9pc1dpbmRvd2Vk
KHRydWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShm
YWxzZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9sYXN0TWVzc2Fn
ZSgwKQorICAgICwgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV9sb2Fk
TWFudWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAsIG1f
d2lkZ2V0KDApCisgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQoreworICAgIGlmICghbV9wbHVn
aW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3Ry
dWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0gdGhpczsKKworICAgIG1fbWltZVR5cGUgPSBt
aW1lVHlwZS51dGY4KCk7CisgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVUeXBlKTsKKworICAgIHNl
dFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworCisgICAgbV9tb2RlID0gbV9s
b2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQ7CisKKyAgICByZXNpemUoc2l6ZSk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxp
emVkKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisg
ICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3Rh
dHVzQ2FuTm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1fcGx1Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1f
bmVlZHNYRW1iZWQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmlu
ZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAg
ICBtX3dpZGdldCA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRk
KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7Cisg
ICAgICAgIHNldEd0a1dpZGdldChtX3dpZGdldCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fd2lk
Z2V0ID0gZ3RrX3h0YmluX25ldyhHVEtfV0lER0VUKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29u
dGFpbmluZ1dpbmRvdygpKS0+d2luZG93LCBOVUxMKTsKKyNlbHNlCisgICAgbV93aWRnZXQgPSBn
ZGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7CisgICAgc2V0R3RrV2lkZ2V0KG1f
d2lkZ2V0KTsKKyNlbmRpZgorCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBmcmFt
ZUdlb21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBmcmFtZUdlb21ldHJ5KCkud2lk
dGgoKSwgZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5H
X1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICBpZiAoIW1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRn
ZXQpLCBhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisgICAgICAgIGd0a194dGJpbl9yZXNp
emUobV93aWRnZXQsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKyAgICB9
CisjZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworI2lmIGRlZmluZWQo
R0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9uZWVkc1hFbWJl
ZCkgeworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkobV93aWRnZXQt
PndpbmRvdyk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3dp
bmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAgd3MtPmRlcHRoID0g
Z2RrX3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpLT5kZXB0aDsKKyAgICAgICAg
d3MtPmNvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfd2luZG93X2dldF9jb2xv
cm1hcChtX3dpZGdldC0+d2luZG93KSk7CisgICAgICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19Y
V0lORE9XKG1fd2lkZ2V0LT53aW5kb3cpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdzLT5kaXNw
bGF5ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5OworICAgICAgICB3cy0+dmlzdWFs
ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgICAgIHdzLT5k
ZXB0aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgIHdz
LT5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7Cisg
ICAgICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisKKyAgICAg
ICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7CisgICAgfQorCisgICAgbV9ucFdpbmRvdy53c19pbmZv
ID0gd3M7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisgICAgbV93aW5kb3cg
PSBHREtfV0lORE9XX0hXTkQobV93aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKworICAgIGlmICht
X2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2lu
ZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsK
KyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcXVp
cmtzICYgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAgICAgIHNldE5Q
V2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VCghbV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3Ry
ZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3Rp
dmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwKTsKKyAgICBtX21hbnVhbFN0
cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJl
Y2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
bV9tYW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0
YSgwLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZpbmlzaExv
YWRpbmcoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0
cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0
cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmll
d0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UGx1Z2luVmlld0d0a19ICisjZGVmaW5lIFBsdWdpblZpZXdHdGtfSAorCisjaW5jbHVkZSA8Z3Rr
L2d0a3dpZGdldC5oPgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJucHJ1bnRp
bWVfcHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFj
ZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAg
c3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBj
bGFzcyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlckd0azsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBs
dWdpblJlcXVlc3RHdGs7CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrOworICAgIGNsYXNzIFJl
c291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICAKKyAgICBlbnVt
IFBsdWdpblF1aXJrcyB7CisgICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50
ID0gMSA8PCAwLAorICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0g
MSA8PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwg
CisgICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMs
CisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8
IDQsCisgICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAg
ICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0g
MSA8PCA2CisgICAgfTsKKworICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKKyAgICAgICAgUGx1Z2lu
U3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBs
dWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5CisgICAgfTsKKwor
ICAgIGNsYXNzIFBsdWdpblZpZXdHdGsgOiBwdWJsaWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwg
UGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAg
dmlydHVhbCB+UGx1Z2luVmlld0d0aygpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBs
dWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAgICAgICB2b2lkIHNldE5Q
V2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3Rr
KiBjdXJyZW50UGx1Z2luVmlldygpOworCisgICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAg
ICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3Rp
ZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVy
cm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0
cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJl
YW0pOworICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZv
aWQqIGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3Ry
ZWFtLCBOUFJlYXNvbiByZWFzb24pOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsK
KyAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJy
b3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAg
TlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAg
ICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2b2lkIGludmFsaWRh
dGVSZWdpb24oTlBSZWdpb24pOworICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAg
ICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayopOworCisgICAgICAgIC8v
IFdpZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnko
Y29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2hvdygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAg
ICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJl
bnQoU2Nyb2xsVmlldyopOworCisgICAgICAgIGdsb25nIHduZFByb2MoWElEIGhXbmQsIGd1aW50
IG1lc3NhZ2UsIGd1aW50IHdQYXJhbSwgZ2xvbmcgbFBhcmFtKTsKKworICAgICAgICAvLyBVc2Vk
IGZvciBtYW51YWwgbG9hZGluZworICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciosIGludCk7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICB2
b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgdm9pZCBpbml0KCk7Cisg
ICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHN0YXRp
YyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqKTsKKyAgICAgICAgTlBF
cnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+IG1fcGx1Z2lu
OworICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIEZyYW1lKiBtX3BhcmVudEZy
YW1lOworICAgICAgICBib29sIG1faXNTdGFydGVkOworICAgICAgICBLVVJMIG1fdXJsOworICAg
ICAgICBLVVJMIG1fYmFzZVVSTDsKKyAgICAgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAg
ICAgICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlkUmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJm
b3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1
ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChU
aW1lcjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1f
cmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lcjxQbHVnaW5WaWV3R3RrPiBtX2ludmFsaWRhdGVU
aW1lcjsKKworICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNz
YWdlVGhyb3R0bGVyOworCisgICAgICAgIHZvaWQgdXBkYXRlV2luZG93KCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAg
ICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
Kik7CisgICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisKKyAgICAg
ICAgaW50IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioq
IG1fcGFyYW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisKKyAgICAgICAg
Q1N0cmluZyBtX21pbWVUeXBlOworICAgICAgICBDU3RyaW5nIG1fdXNlckFnZW50OworCisgICAg
ICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAg
ICAgICBOUFdpbmRvdyBtX25wV2luZG93OworCisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdp
blN0cmVhbUd0az4gPiBtX3N0cmVhbXM7CisgICAgICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0R3Rr
Kj4gbV9yZXF1ZXN0czsKKworICAgICAgICBpbnQgbV9xdWlya3M7CisgICAgICAgIGJvb2wgbV9p
c1dpbmRvd2VkOworICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKKyAgICAgICAgYm9vbCBt
X2lzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKKworICAgICAgICBY
SUQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworICAgICAgICBtdXRhYmxlIElu
dFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2Vk
IHBsdWctaW4KKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdp
bmRvdyByZWN0LgorCisgICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJv
b2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOworCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFs
bHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IG1fbWFudWFsU3RyZWFtOworCisg
ICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVnaW5WaWV3OworCisgICAg
ICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
bnBhcGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5k
YXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGlu
c3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29y
a2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxs
IHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlz
IG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6OnN0YXJ0LgorLy8gVGhp
cyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2Ug
Y2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5j
ZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3Rh
bmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBy
ZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwordm9pZCogTlBO
X01lbUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisK
K3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUocHRyKTsKK30KKwordWlu
dDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2Vz
KQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBFcnJvciBOUE5f
UmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCkKK3sK
KyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBFcnJvciBOUE5fR2V0VVJM
Tm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Cit9CisKK05Q
RXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5Q
UCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7Cisg
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkxOb3RpZnko
dXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBO
UE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQoreworICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0
LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFu
Y2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVh
bSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3Ry
ZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBOX1dyaXRlKE5QUCBpbnN0
YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0cmVhbSwgbGVu
LCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsK
K30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1
Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAg
ICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFnZW50IHdpdGggYSBudWxs
IGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24hCisgICAgIC8vIFdlJ2Qg
bmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2aW5nIGEgZnJhbWUgYXJv
dW5kLgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsKKyAKKyAgICByZXR1cm4g
dmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5z
dGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOworfQorCit2b2lkIE5QTl9J
bnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKK3sK
KyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGlu
dmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7
CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30K
KworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZh
bHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQorewor
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlh
YmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1
cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGlu
c3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQK
K05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQp
Cit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQor
eworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVn
aW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyogLSotIE1v
ZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zm
c2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLwor
IAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEu
MS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUg
c3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRo
ZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJl
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNl
LgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBT
dW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICog
QWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRl
ciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisg
KiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJl
IGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFs
bG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0
ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhl
cnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRv
IG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25l
IG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VO
U0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3NhZ2VzICovCisjZGVmaW5lIFhFTUJF
RF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElW
QVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFICAgICAgICAy
CisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAgICAgICAgMworI2RlZmluZSBYRU1C
RURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAg
ICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NVU19ORVhUICAgICAgICAgICAgICAg
NgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgWEVN
QkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZ
ICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT04gICAgICAgICAgICAg
IDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAgICAgICAgICAgMTEKKworLyogTm9u
IHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAg
ICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFCX0tFWSAgICAgICAgICAgMTA5CisK
Ky8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICovCisjZGVmaW5lIFhFTUJFRF9GT0NV
U19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAg
ICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1QgICAgICAgICAgICAgICAyCisKKy8q
IEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAg
ICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBMVUdJTl9E
RUJVR19IX18KKyNkZWZpbmUgUExVR0lOX0RFQlVHX0hfXworCisjaW5jbHVkZSAibnBydW50aW1l
X3Byb3h5LmgiCisKK3N0YXRpYyBjaGFyKiBlcnJvclN0cmluZ3NbXSA9IHsKKyAgICAiTm8gZXJy
b3JzIG9jY3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9SICovCisgICAgIkVycm9yIHdpdGggbm8g
c3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICov
CisgICAgIkludmFsaWQgaW5zdGFuY2UgcGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJS
X0lOVkFMSURfSU5TVEFOQ0VfRVJST1IgKi8KKyAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4i
LCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNUQUJMRV9FUlJPUiAqLworICAgICJMb2FkaW5nIG9mIHBs
dWctaW4gZmFpbGVkLiIsIC8qIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLworICAg
ICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJP
UiAqLworICAgICJQbHVnLWluIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X1BMVUdJTl9FUlJPUiAqLworICAgICJQbHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFs
aWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRElSX0VSUk9SICovCisgICAgIlZlcnNpb25z
IG9mIHBsdWctaW4gYW5kIENvbW11bmljYXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5D
T01QQVRJQkxFX1ZFUlNJT05fRVJST1IgKi8KKyAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52
YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BBUkFNICovCisgICAgIlVSTCBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9VUkwgKi8KKyAgICAiRmlsZSBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfRklMRV9OT1RfRk9VTkQgKi8KKyAgICAiU3RyZWFtIGNvbnRhaW5z
IG5vIGRhdGEuIiwgLyogTlBFUlJfTk9fREFUQSAqLworICAgICJTZWVrYWJsZSBzdHJlYW0gZXhw
ZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRSAqLworICAgICJVbmtub3duIGVy
cm9yIGNvZGUiCit9OworCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBMT0dfTlBFUlJPUihlcnIp
IGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIF9SUFRGMihfQ1JUX1dBUk4sICIlczogJXNcbiIs
IF9fRlVOQ1RJT05fXywgZXJyb3JTdHJpbmdzW2Vycl0pCisjZGVmaW5lIExPR19QTFVHSU5fTkVU
X0VSUk9SKCkgX1JQVEYxKF9DUlRfV0FSTiwgIiVzOiBTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9i
bGVtcyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJv
YmxlbXMuXG4iLCBfX0ZVTkNUSU9OX18pCisjZWxzZQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9F
UlJPUigpICgodm9pZCkwKQorI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpICgodm9pZCkwKQorI2Vu
ZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBfTlBGVU5DVElPTlNfSF8KKyNk
ZWZpbmUgX05QRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChY
UF9XSU4pCisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKF9f
c3RkY2FsbCAqIF9uYW1lKQorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUs
IF9uYW1lKSBfdHlwZSAoKiBfbmFtZSkKKyNlbmRpZgorCit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
R2V0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0
IGNoYXIqIHdpbmRvdywgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
UG9zdFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25z
dCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUs
IHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1JlcXVlc3RSZWFkUHJv
Y1B0cikoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Cit0eXBlZGVm
IE5QRXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBl
IHR5cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0pOwordHlwZWRlZiBp
bnQzMiAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwg
aW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0Rlc3Ryb3lT
dHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJl
YXNvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fU3RhdHVzUHJvY1B0cikoTlBQIGluc3RhbmNlLCBj
b25zdCBjaGFyKiBtZXNzYWdlKTsKK3R5cGVkZWYgY29uc3QgY2hhciooKk5QTl9Vc2VyQWdlbnRQ
cm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQ
dHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVlUHJvY1B0cikodm9p
ZCogcHRyKTsKK3R5cGVkZWYgdWludDMyICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyIHNp
emUpOwordHlwZWRlZiB2b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyKShOUEJvb2wgcmVs
b2FkUGFnZXMpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFZhbHVlUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYg
TlBFcnJvciAoKk5QTl9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVj
dFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKK3R5cGVkZWYgdm9pZCAoKk5Q
Tl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24p
OwordHlwZWRlZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsK
K3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Q
b3N0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIq
IHdpbmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBl
ZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCog
KCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgq
TlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBl
bmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRy
KShOUFAgaW5zdGFuY2UpOworCit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1
ZVByb2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOworCit0eXBlZGVmIE5QSWRlbnRpZmllciAo
Kk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7Cit0
eXBlZGVmIHZvaWQgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyKSAoY29uc3QgTlBV
VEY4ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIgKmlkZW50aWZpZXJz
KTsKK3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyKSAo
aW50MzJfdCBpbnRpZCk7Cit0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQ
cm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBib29sICgqTlBOX0lk
ZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBl
ZGVmIE5QVVRGOCAqKCpOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmll
ciBpZGVudGlmaWVyKTsKKwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fQ3JlYXRlT2JqZWN0UHJv
Y1B0cikgKE5QUCwgTlBDbGFzcyAqYUNsYXNzKTsKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX1Jl
dGFpbk9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9S
ZWxlYXNlT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRlZiBib29sICgqTlBO
X0ludm9rZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbWV0
aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJp
YW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyKSAo
TlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBh
cmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRl
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFy
aWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9HZXRQcm9wZXJ0eVByb2NQdHIpIChO
UFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgTlBWYXJp
YW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5Q
UCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBO
UFZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIp
IChOUFAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBl
ZGVmIGJvb2wgKCpOUE5fSGFzTWV0aG9kUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9i
aiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVBy
b3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9i
amVjdCAqb2JqLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwordHlwZWRlZiBib29sICgqTlBOX0Vu
dW1lcmF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAq
KmlkZW50aWZpZXIsIHVpbnQzMl90ICpjb3VudCk7CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9O
ZXdQcm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1v
ZGUsIGludDE2IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSog
c2F2ZWQpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QUF9OZXdTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0eXBlKTsKK3R5cGVk
ZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBQX1N0cmVh
bUFzRmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hh
ciogZm5hbWUpOwordHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQz
Ml90IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7Cit0eXBlZGVmIGludDE2ICgq
TlBQX0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBl
ZGVmIHZvaWQgKCpOUFBfVVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBVUkwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJy
b3IgKCpOUFBfR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwor
dHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Qcm9jUHRyKSh2b2lk
KTsKKwordHlwZWRlZiB2b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKK3R5
cGVkZWYgdm9pZCogICBKUklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMgcmlnaHQgbm93CisK
K3R5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAg
IHVpbnQxNiB2ZXJzaW9uOworICAgIAorICAgIE5QTl9HZXRVUkxQcm9jUHRyIGdldHVybDsKKyAg
ICBOUE5fUG9zdFVSTFByb2NQdHIgcG9zdHVybDsKKyAgICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRy
IHJlcXVlc3RyZWFkOworICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBO
UE5fV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QTl9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0
cm95c3RyZWFtOworICAgIE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKKyAgICBOUE5fVXNlckFn
ZW50UHJvY1B0ciB1YWdlbnQ7CisgICAgTlBOX01lbUFsbG9jUHJvY1B0ciBtZW1hbGxvYzsKKyAg
ICBOUE5fTWVtRnJlZVByb2NQdHIgbWVtZnJlZTsKKyAgICBOUE5fTWVtRmx1c2hQcm9jUHRyIG1l
bWZsdXNoOworICAgIE5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxvYWRwbHVnaW5zOworICAg
IE5QTl9HZXRKYXZhRW52UHJvY1B0ciBnZXRKYXZhRW52OworICAgIE5QTl9HZXRKYXZhUGVlclBy
b2NQdHIgZ2V0SmF2YVBlZXI7CisgICAgTlBOX0dldFVSTE5vdGlmeVByb2NQdHIgZ2V0dXJsbm90
aWZ5OworICAgIE5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90aWZ5OworICAgIE5Q
Tl9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBOX1NldFZhbHVlUHJvY1B0ciBzZXR2
YWx1ZTsKKyAgICBOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRhdGVyZWN0OworICAg
IE5QTl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0ciBpbnZhbGlkYXRlcmVnaW9uOworICAgIE5QTl9G
b3JjZVJlZHJhd1Byb2NQdHIgZm9yY2VyZWRyYXc7CisgICAgCisgICAgTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXJQcm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXI7CisgICAgTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXJzUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKKyAgICBOUE5fR2V0SW50SWRl
bnRpZmllclByb2NQdHIgZ2V0aW50aWRlbnRpZmllcjsKKyAgICBOUE5fSWRlbnRpZmllcklzU3Ry
aW5nUHJvY1B0ciBpZGVudGlmaWVyaXNzdHJpbmc7CisgICAgTlBOX1VURjhGcm9tSWRlbnRpZmll
clByb2NQdHIgdXRmOGZyb21pZGVudGlmaWVyOworICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclBy
b2NQdHIgaW50ZnJvbWlkZW50aWZpZXI7CisgICAgTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIgY3Jl
YXRlb2JqZWN0OworICAgIE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFpbm9iamVjdDsKKyAg
ICBOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIgcmVsZWFzZW9iamVjdDsKKyAgICBOUE5fSW52b2tl
UHJvY1B0ciBpbnZva2U7CisgICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1
bHQ7CisgICAgTlBOX0V2YWx1YXRlUHJvY1B0ciBldmFsdWF0ZTsKKyAgICBOUE5fR2V0UHJvcGVy
dHlQcm9jUHRyIGdldHByb3BlcnR5OworICAgIE5QTl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJv
cGVydHk7CisgICAgTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKKyAg
ICBOUE5fSGFzUHJvcGVydHlQcm9jUHRyIGhhc3Byb3BlcnR5OworICAgIE5QTl9IYXNNZXRob2RQ
cm9jUHRyIGhhc21ldGhvZDsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVs
ZWFzZXZhcmlhbnR2YWx1ZTsKKyAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRp
b247CisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFi
bGVkc3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBz
ZW5hYmxlZHN0YXRlOworICAgIE5QTl9FbnVtZXJhdGVQcm9jUHRyIGVudW1lcmF0ZTsKK30gTlBO
ZXRzY2FwZUZ1bmNzOworCit0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7CisgICAgdWlu
dDE2IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgTlBQX05ld1Byb2NQdHIgbmV3cDsK
KyAgICBOUFBfRGVzdHJveVByb2NQdHIgZGVzdHJveTsKKyAgICBOUFBfU2V0V2luZG93UHJvY1B0
ciBzZXR3aW5kb3c7CisgICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5Q
UF9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QUF9TdHJlYW1Bc0Zp
bGVQcm9jUHRyIGFzZmlsZTsKKyAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsK
KyAgICBOUFBfV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7
CisgICAgTlBQX0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKKyAgICBOUFBfVVJMTm90aWZ5UHJv
Y1B0ciB1cmxub3RpZnk7CisgICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKKyAgICBOUFBfR2V0
VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7
Cit9IE5QUGx1Z2luRnVuY3M7CisKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwg
TlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsK
K3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dldE1JTUVEZXNjcmlw
dGlvbkZ1bmNQdHIpKHZvaWQpOworCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCit0eXBlZGVmIHZv
aWQgICAgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQp
OwordHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1
Z2luRnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7CisjZW5kaWYKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDkzOSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBp
bmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFu
ZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5T
RSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgor
ICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExp
Y2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJ
bml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lz
dGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2gg
Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxl
IGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2Yg
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0
aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwg
aW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRl
CisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBM
LCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoq
KioqICovCisgCisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xr
aXQgY29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLwor
CisjaW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8
Z3RrL2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdk
ay9nZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1
ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9Y
dCBzdHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+
CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2lu
Y2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50
IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0
cnVjdGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5U
UyAzMAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtY
dEJpbkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0
ICAgICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0
a194dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lk
ICAgICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdl
dCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmpl
Y3QgICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRk
b3duICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8K
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGll
bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZp
c3VhbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4
dGNvbG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4
dGRlcHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50
ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lu
ZG93IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk
dGggKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4
dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVu
dCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lk
Z2V0IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5k
bGVyIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVu
dF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQg
KmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAg
ICAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEg
KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0
IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9y
ZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3Rh
dGljIHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAg
IGVycm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJv
ciB0cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7
CitzdGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAg
ICAoKm9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRp
YyBpbnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRD
bGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRk
aXNwbGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsK
K3N0YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0
aWMgZ2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAg
ICAgICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xs
aW5nX3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0
YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAor
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsK
KworICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsK
KyAgR0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkK
K3sKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2
ZW50cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRk
aXNwbGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFu
KW1hc2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOwor
fSAgIAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291
cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50
OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRv
QXBwbGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7
CisKKyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sg
Zm9yIGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMg
YW5kIG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9v
ayBmb3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBz
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQu
ICAqLworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNw
bGF5KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9
CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3Rh
dGljIEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwK
KyAgeHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChH
U291cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0
aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNl
cl9kYXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBp
bnQgZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9k
YXRhOworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisg
IC8qIFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHBy
b2Nlc3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25z
dW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUg
YXBwIGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8g
MjAgWHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMg
aXMgYSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBo
YXZlIG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nl
c3MtLSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElN
QWxsKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAo
dm9pZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJp
bl90eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9Cisg
ICAgICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAor
ICAgICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVu
YykgZ3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3Rr
X3h0YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyog
cmVzZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAg
ICAgfTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tF
VCwgJnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRp
YyB2b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7Cisg
IEd0a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3Rf
Y2xhc3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tF
VCk7CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRn
ZXRfY2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51
bnJlYWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19P
QkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0Ymlu
X2Rlc3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0
YmluKQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5k
b3cgPSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0
YmluLT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRn
ZXQgKndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAv
KiBnZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50Zigi
Z3RrX3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChH
VEtfSVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOwor
CisgIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193
aW5kb3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwg
JmQpOworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOwor
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRc
biIsIHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxv
Y2F0aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdo
dDsKKworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xB
U1MocGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0
IGNsaWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCks
IAorICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAg
eHRiaW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93
ID0gWHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNo
KCk7CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBp
dCB0byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdl
dCksIHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3
IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4
dGJpbjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9
IE5VTEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlm
ICgheHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAg
ZmFsbGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRi
aW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYo
eHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRf
dmlzdWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xv
cm1hcCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4
dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWls
ZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8K
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRp
c3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsK
KyAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRo
ZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAg
bWFpbmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAg
IGNudW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xp
YiBldmVudCBsb29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBn
dGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19z
b3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICgh
Z3MpIHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9z
ZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9j
YW5fcmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01h
aW5Db250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25O
dW1iZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIo
eHRkaXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOwor
ICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9s
bF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAg
IGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhh
dCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3Rp
bWVyX2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAg
ICAoR3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2Ug
Y291bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8K
KyAgeHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193
aWRnZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cp
OworICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2Vy
X2RhdGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lE
R0VUICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0Qmlu
ICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJp
bi0+eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtf
d2luZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9p
ZAorZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAg
ICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQp
Cit7CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdl
dCk7CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisg
IHByaW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdp
ZHRoLCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRi
aW4tPndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNl
dFZhbHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0g
MTsKKyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBo
ZWlnaHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRW
YWx1ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5l
ZWQgdG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUK
KyAgICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxv
Y2F0aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsK
KyAgYWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6
ZV9hbGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194
dGJpbl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47
CisgIEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJn
dGtfeHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0
cm95KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0
YmluID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsK
KworICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYg
KEdUS19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXpl
KCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVu
dF9jbGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJp
bl9kZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNl
bmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5f
aWZfZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAo
b2JqZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2
ZW50IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkp
OworICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1
Y2Ugb3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5p
bmcgd2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20g
dGhlIG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJV
R19YVEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRo
ZSBtYWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9s
bCgoR01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJj
ZV9yZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGlt
ZXJfaWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAg
R1RLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8q
CisqIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBj
bGllbnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4
dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlz
dWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAg
ICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4
dDsKKyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7
CisKKyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRv
cF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRj
bGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7
CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOwor
CisgIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHBy
aW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5p
dGlhbGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQo
KTsKKyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFw
cF9jb250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFw
cF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRk
aXNwbGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50
LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlz
dWFsOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54
dGRlcHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0
cworKiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xp
ZW50ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAg
ICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAor
eworICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0
ICAgICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lm
ZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5k
aWYKKyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBw
ZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdp
ZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0
ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4
dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQg
d2luZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVp
Z2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOwor
ICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBY
dFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBY
dE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAg
ICB3aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQt
Pnh0dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xp
ZW50LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0
Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVy
V2lkdGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisK
KyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2lu
ZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93
ID0gZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2gg
aW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2Ug
Pj0gNgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAg
ICAgICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdl
dCk7CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAg
ICAgICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93
aWRnZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1
dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRn
ZXQpLCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChj
aGlsZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRj
bGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50
IGhhbmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAg
ICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xp
ZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRf
d2lkZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1
dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAg
ICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAg
ICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXks
IEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVu
dCogeHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0
VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAg
ICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRV
bnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAg
ICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBm
bHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29y
ZS53aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMg
Z29uZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGll
bnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRV
bnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAg
ICAgICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQorewor
ICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0
Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50
KTsKKyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xp
ZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAor
eHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQor
eworICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVy
bkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1
ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVm
ZmVyWzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwg
WHRXaW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20s
IDMyLAorICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9j
bGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2Rh
dGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNs
aWVudF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBj
YXNlIFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJ
TkRPV19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50
IGdldCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBj
YXNlIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHBy
aW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlm
CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7Cisj
ZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERF
QlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZc
biIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNl
IFhFTUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1l
bXNldCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xp
ZW50LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgor
ICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAg
ICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRc
biIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAg
ICAgfQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hp
bGRfd2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBs
dWctPmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNo
aWxkX3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAg
ICAgICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2
ZW50ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFs
c2UpOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBF
bmQgb2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2Ns
aWVudF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZl
bnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0
YTsKKyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNz
YWdlOgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQt
PnhjbGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0
RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJl
ZF9tZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsK
KyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5n
Tm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2lu
Zm8gKHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94
ZW1iZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1C
RURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZv
Y3VzT3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2go
ZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChY
dENsaWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3Nh
Z2UsCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAg
ICAgIGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sK
KyAgWEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lk
Z2V0KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNv
ZGU7CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xp
ZW50LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOwor
ICB4ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQi
LEZhbHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50
LmRhdGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdl
OworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVu
dC5kYXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7
CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZl
bnRNYXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29k
ZSA9IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJz
ZW5kX3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisg
IH0KK30KKworc3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAq
ZGlzcGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBl
cnJvci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAg
IAordHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRf
ZXJyb3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0
YXRpYyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5k
bGVyKG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0
cmFwcGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3Jf
Y29kZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5l
ciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERp
c3BsYXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9k
YXRhOworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBl
KQorICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRl
d2luZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9X
aWRnZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNo
aWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2Rh
dGEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAg
ICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7
CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFy
ZW50ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAg
IFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5k
b3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVy
X3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+
eHJlcGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxk
ICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVu
dCAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lm
IDAKKyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dp
ZGdldCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAg
ICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQt
PnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdl
dCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOwor
ICBsb25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBp
bnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRl
cyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIu
eW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VN
YXNrOworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5k
b3codyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxl
cih3LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRv
blJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMg
dm9pZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9k
YXRhKQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92
ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1h
c2ssIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGll
bnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisK
K3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9v
dCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVl
cm9vdCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERp
c3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hp
bGRyZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4
dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRf
Zm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOwor
ICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5j
aGlsZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBp
Zih1bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVu
OyArK2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRy
ZW5baV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJl
ZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKwor
ICByZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3Rr
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdlR3RrOjp+UGx1Z2luUGFja2FnZUd0aygpCit7
CisgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKK30KKworUGx1Z2luUGFja2FnZUd0azo6UGx1Z2lu
UGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVk
KQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9k
aWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9h
ZENvdW50KDApCit7CisgICAgaW50IHBvcyA9IG1fcGF0aC5kZXByZWNhdGVkU3RyaW5nKCkuZmlu
ZFJldignLycpOworCisgICAgbV9maWxlTmFtZSA9IG1fcGF0aC5yaWdodChtX3BhdGgubGVuZ3Ro
KCkgLSBwb3MgLSAxKTsKKworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmZldGNoSW5mbygp
Cit7CisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IGdjaGFyKiB0eXBlcyA9IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7CisgICAgZ2NoYXIqKiBt
aW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAgICBmb3IgKGludCBpID0g
MDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7CisgICAgICAgIGdjaGFy
KiogbWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWVEZXNjc1tpXSwgIjoiLCAzKTsKKworICAgICAg
ICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVEYXRhWzJdKTsKKyAg
ICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0YVsxXSwgIiwiLCAt
MSk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0VmVjdG9yOworICAgICAgICBmb3IgKGlu
dCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQorICAgICAgICAgICAgZXh0VmVjdG9yLmFwcGVu
ZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0pKTsKKworICAgICAgICBtX21pbWVUb0V4
dGVuc2lvbnMuYWRkKG1pbWVEYXRhWzBdLCBleHRWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rl
c2NyaXB0aW9ucy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgICBnX3N0
cmZyZWV2KGV4dGVuc2lvbnMpOworICAgICAgICBnX3N0cmZyZWV2KG1pbWVEYXRhKTsKKyAgICB9
CisgICAgZ19zdHJmcmVldihtaW1lRGVzY3MpOworCisgICAgY2hhciogYnVmZmVyID0gMDsKKyAg
ICBOUEVycm9yIGVyciA9IG1fTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAm
YnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX25hbWUg
PSBidWZmZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IG1fTlBQX0dldFZhbHVlKDAs
IE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBO
UEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHVu
bG9hZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6Omxv
YWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3Bl
bigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAo
IW1fbW9kdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1
ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJv
ciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUi
LCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUs
ICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZtX05QX0dldE1JTUVEZXNjcmlwdGlv
bik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iLCAodm9pZCoq
KSZtX05QUF9TaHV0ZG93bik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0
VmFsdWUiLCAodm9pZCoqKSZtX05QUF9HZXRWYWx1ZSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxp
emUgfHwgIW1fTlBfR2V0TUlNRURlc2NyaXB0aW9uIHx8ICFtX05QUF9TaHV0ZG93biB8fCAhbV9O
UFBfR2V0VmFsdWUpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2lu
RnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXpl
ID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNp
emVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9W
RVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7Cisg
ICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1
bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5l
d3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5f
V3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3Ry
ZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93
c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1h
bGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01l
bUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAg
bV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93
c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZh
bHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0g
TlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24g
PSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9
IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dl
dEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBl
ZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNo
UG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRz
dGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBO
X0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5n
ID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21p
ZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3Mu
Y3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0
YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFz
ZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2Ug
PSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9J
bnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7Cisg
ICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1f
YnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Mu
c2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51
bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1f
YnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05P
X0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZCgpCit7Cisg
ICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoLS1tX2xvYWRD
b3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fTlBQX1NodXRkb3duKCk7CisKKyAg
ICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1
bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworICAgIEFTU0VSVChtX21v
ZHVsZSk7CisKKyAgICBnX21vZHVsZV9jbG9zZSAobV9tb2R1bGUpOworCisgICAgbV9pc0xvYWRl
ZCA9IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5QYWNrYWdlR3RrOjpjcmVh
dGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQp
Cit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlR3Rr
KHBhdGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7
CisgICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2VHdGs6Omhh
c2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1f
cGF0aC5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIq
PihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQor
Citib29sIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGEs
IGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlv
biA9PSBiLm1fZGVzY3JpcHRpb247Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luU3RyZWFtR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1H
dGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRl
ICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
U3VicmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVj
YXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8v
IGFuZCB0aGlzIHdheSB3ZSB3b24ndCBjbGFzaCB3aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50
IFdlYlJlYXNvbk5vbmUgPSAtMjsKKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+
IFN0cmVhbU1hcDsKK3N0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBT
dHJlYW1NYXAgc3RhdGljU3RyZWFtczsKKyAgICByZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKwor
UGx1Z2luU3RyZWFtR3RrOjpQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmll
dywgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgIDogbV9yZXNvdXJj
ZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1f
cGx1Z2luVmlldyhwbHVnaW5WaWV3KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisg
ICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fbG9hZE1h
bnVhbGx5KGZhbHNlKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1CZWZvcmVTdGFydGVkKQor
ICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIodGhpcywgJlBsdWdpblN0cmVhbUd0azo6ZGVsYXlE
ZWxpdmVyeVRpbWVyRmlyZWQpCisgICAgLCBtX2RlbGl2ZXJ5RGF0YSgwKQorICAgICwgbV90ZW1w
RmlsZUhhbmRsZSgwKQorICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5WaWV3LT5wbHVnaW4oKS0+
cGx1Z2luRnVuY3MoKSkKKyAgICAsIG1faW5zdGFuY2UocGx1Z2luVmlldy0+aW5zdGFuY2UoKSkK
K3sKKyAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKKworICAgIG1fc3RyZWFtLnVybCA9IDA7Cisg
ICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0
cmVhbS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOworICAgIG1fc3RyZWFt
Lmxhc3Rtb2RpZmllZCA9IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0
YW5jZSk7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6flBsdWdpblN0cmVhbUd0aygpCit7CisgICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xv
YWRlcik7CisKKyAgICBpZiAobV9zdHJlYW0udXJsKQorICAgICAgICBmcmVlKChjaGFyKiltX3N0
cmVhbS51cmwpOworCisgICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOworfQorCit2b2lk
IFBsdWdpblN0cmVhbUd0azo6c3RhcnQoKQoreworICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkp
OworCisgICAgbV9sb2FkZXIgPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKG1f
ZnJhbWUsIHRoaXMpOworCisgICAgbV9sb2FkZXItPnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2Up
OworICAgIG1fbG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hZGRQbHVnSW5TdHJlYW1Mb2FkZXIo
bV9sb2FkZXIuZ2V0KCkpOworICAgIG1fbG9hZGVyLT5sb2FkKG1fcmVzb3VyY2VSZXF1ZXN0KTsK
K30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUg
PSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFT
U0VSVCghbV9sb2FkZXIpOworCisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRl
ciA9IG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBB
U1NFUlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNM
b2FkaW5nTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2Vs
TWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IobV9yZXNv
dXJjZVJlcXVlc3QpKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbG9h
ZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIgPSAw
OworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0U3RyZWFtKCkKK3sKKyAg
ICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGNv
bnN0IEtVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOworCisgICAg
Ly8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBw
YXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9ybWF0IHVzZWQgd2hl
biByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYgKHJlc3BvbnNlVVJMLnN0cmluZygpLnN0YXJ0
c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0
cmR1cChyZXNwb25zZVVSTC5kZWNvZGVfc3RyaW5nKHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJp
bmcoKSkudXRmOCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVw
KHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCkpOworICAgIAorICAgIENTdHJp
bmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7Cisg
ICAgCisgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNw
b25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9u
c2UuaXNIVFRQKCkpIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAg
ICAgICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCku
ZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJh
Y3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQt
PnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNo
YXIpJ1xuJyk7CisgICAgICAgIH0KKworICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0
KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKworICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBl
bmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5n
dGggdG8gdGhlIHBsdWdpbiwKKyAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGlu
IHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VS
TFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dp
Yy4KKyAgICAgICAgU3RyaW5nIGNvbnRlbnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRW5jb2RpbmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50
RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAg
ICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVh
bS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Cisg
ICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsIDBMTCk7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmxhc3RNb2RpZmllZERhdGUoKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRh
ID0gbV9ub3RpZnlEYXRhOworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAg
bV9vZmZzZXQgPSAwOworICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFBy
b3RlY3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0
aGUgbmV3c3RyZWFtIGhhbmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0
KHRoaXMpOworCisgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbSht
X2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFs
c2UsICZtX3RyYW5zZmVyTW9kZSk7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVz
dHJveWVkIGluIHRoZSBjYWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFz
b24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3N0
cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUikKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisKKyAgICBpZiAo
bV90cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKChtX3RlbXBGaWxlSGFuZGxlID0gdG1wZmlsZSgpKSAhPSBOVUxMKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRp
bmcgdGhlIHN0cmVhbQorICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19F
UlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtR3RrOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSog
c3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQg
UGx1Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikK
K3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVz
dHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVhc29uID0gcmVh
c29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAgIC8vIFN0b3Ag
YW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2
ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBl
bHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewor
ICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ry
b3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0
cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbSgpCit7Cisg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFt
X2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgaWYg
KG1fdGVtcEZpbGVIYW5kbGUgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKG1fdGVtcEZpbGVIYW5k
bGUpOworCisgICAgaWYgKG1fc3RyZWFtLm5kYXRhICE9IDApIHsKKyAgICAgICAgaWYgKG1fcmVh
c29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3Ry
YW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX3Bh
dGguaXNOdWxsKCkpOworCisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0
YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGguZGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIE5Q
RXJyb3IgbnBFcnI7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVh
bShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICBtX3N0cmVhbS5u
ZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikKKyAgICAgICAg
bV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVy
bCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOwor
CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0
U3RyZWFtIGNhbiBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IHByb3RlY3QodGhpcyk7CisgICAgaWYgKCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAg
bV9wbHVnaW5WaWV3LT5kaXNjb25uZWN0U3RyZWFtKHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3
ID0gMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblN0cmVhbUd0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAm
bV9kZWxheURlbGl2ZXJ5VGltZXIpOworCisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQ
bHVnaW5TdHJlYW1HdGs6OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURh
dGEpOworICAgIAorICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNl
TG9hZGVyIG9uIGVycm9yIHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsK
KworICAgIGlmICghbV9zdHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAw
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURh
dGEtPnNpemUoKTsKKyAgICBpbnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIHdo
aWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMiBk
ZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9z
dHJlYW0pOworCisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAg
IG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxp
dmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAg
ICBpbnQzMiBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRh
dGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAg
ICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBt
X3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRh
TGVuZ3RoLCAodm9pZCopZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDAp
IHsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktf
RVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAgICAg
ICAgICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNE
ZWxpdmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0
b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJl
ZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRlcyA9IHRvdGFs
Qnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92ZShtX2RlbGl2
ZXJ5RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2
ZXJlZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6
ZShyZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2
ZXJ5RGF0YS0+cmVzaXplKDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNv
bk5vbmUpCisgICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9CisgICAg
fSAKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0
IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBk
aWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9w
bGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIsICIiKSk7CisKKyAgICBpZiAobV9zdHJl
YW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRSZWNl
aXZlRGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOwor
ICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpk
aWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBt
X2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRl
ZCk7CisKKyAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0YXJ0U3Ry
ZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlRGF0YShOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChsZW5ndGgg
PiAwKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKyAgICAK
KyAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQorICAgICAgICBtX2RlbGl2ZXJ5RGF0YS5zZXQobmV3
IFZlY3RvcjxjaGFyPik7CisKKyAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXpl
KCk7CisgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKKyAgICBt
ZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CisK
KyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEg
aXQgY291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgorICAgIFJl
ZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2Zl
ck1vZGUgIT0gTlBfQVNGSUxFT05MWSkKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKworICAgIGlm
IChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgbV90ZW1wRmlsZUhhbmRsZSAhPSBO
VUxMKSB7CisgICAgICAgIGludCB3cml0dGVuOworICAgICAgICBib29sIHJldHZhbCA9IGZhbHNl
OworCisgICAgICAgIGlmICghcmV0dmFsIHx8IGZwdXRzKGRhdGEsIG1fdGVtcEZpbGVIYW5kbGUp
IDw9IDApCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktf
RVJSKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRGYWlsKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAg
IEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgbV9sb2FkZXIgPSAwOworCisgICAg
ZGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIp
Cit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0
cm95U3RyZWFtKE5QUkVTX0RPTkUpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAy
OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4
cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElD
RU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisg
KgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxs
YSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhl
IExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBh
bmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRo
ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jv
c3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0
aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNh
YmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2Yg
ZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisg
KiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1Q
TCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMg
YWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92
aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVs
ZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUg
TVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NL
ICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVmaW5lIF9fR1RLX1hU
QklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPFgxMS9JbnRy
aW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgor
I2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisjaWZkZWYgX0lNUExf
R1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19FWFBPUlRfKHR5cGUp
CisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0eXBlKQorI2Vu
ZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQorI2VuZGlmCisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8K
KwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRlZiBzdHJ1Y3QgX0d0
a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQRV9YVEJJTiAgICAg
ICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19YVEJJTihv
YmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW4p
KQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChHVEtfQ0hFQ0tfQ0xB
U1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5lIEdUS19JU19YVEJJ
TihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCisjZGVmaW5l
IEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgo
a2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVudDsKKworc3RydWN0
IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRvcF93aWRnZXQ7
ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dpZGdldDsgIC8q
IFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAgaW50CQl4dGRl
cHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2luZG93OworfTsKKwor
c3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0OworICBHZGtXaW5k
b3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRpc3BsYXk7ICAgICAg
ICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAgICB4dHdpbmRvdzsg
ICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAgICAgICAgeCwgeTsK
KyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJIHh0Y2xpZW50OyAg
ICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0cnVjdCBfR3RrWHRC
aW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9OworCitHVEtYVEJJ
Tl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7CitHVEtYVEJJTl9B
UEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywg
U3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0YmluX3NldF9wb3Np
dGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtYVEJJTl9BUEkodm9p
ZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCk7
CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0aW9ucyAgdHJhbnNs
YXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIgICAgKi8KKyAg
ICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9jZWR1cmUgYmluZGlu
Z3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3Rh
dGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8KKyAgICB1bnNpZ25l
ZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAgCisKK3R5cGVkZWYg
c3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7ICAgICAgICAgICAg
ICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisgICAgV2lkZ2V0Q2xh
c3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRnZXQncyBDbGFzc1Jl
YyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAgICAgICAgLyogcGFy
ZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFtZSAgICAgICAgIHhy
bV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVhcmtpZmllZCAgICov
CisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyogbWFya2VkIGZvciBk
ZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3QgIGRlc3Ryb3lfY2Fs
bGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVkICovCisgICAgWHRQ
b2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWludCByZWNvcmQgICAg
ICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAgICAgICAgICAgICAg
Lyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAg
ICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMgICAgICAgICAgICAg
ICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAgICAgLyogd2luZG93
IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIG1hbmFn
ZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAgICAgICovCisg
ICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMgd2lkZ2V0IHNlbnNp
dGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFuY2VzdG9yX3NlbnNp
dGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICovCisgICAgWHRFdmVu
dFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBldmVudCBkaXNwYXRj
aGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAgICAgICAgICAgLyog
dHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRUcmFuc2xhdGlvbnMg
IGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRpb25zICAgICAgICAg
ICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAgLyogd2luZG93IGJv
cmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJvcmRlcl9w
aXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAgICAgICovCisgICAg
V2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBvZiBwb3B1cHMgICAg
ICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9wb3B1cHM7ICAgICAg
ICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisgICAgU3RyaW5nICAg
ICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgICAgICAg
ICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAgICAgICAgLyogd2lu
ZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3JtYXAgICAgICAgIGNv
bG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICov
CisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyogd2luZG93IElEICAg
ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIGRlcHRoOyAgICAg
ICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAgICovCisgICAgUGl4
ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJhY2tncm91bmQgcGl4
ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91bmRfcGl4bWFwOyAg
Lyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAgQm9vbGVhbiAgICAg
ICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBhbmQgbm90IG9jY2x1
ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7LyogbWFwIHdp
bmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0OworCit0eXBlZGVmIHN0
cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0gV2lkZ2V0UmVjLCBD
b3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1
cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbUd0a19ICisjZGVmaW5lIFBsdWdpblN0
cmVhbUd0a19ICisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hh
c2guaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICBlbnVt
IFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwg
U3RyZWFtU3RvcHBlZCB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGx1Z2luU3RyZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2lu
Vmlld0d0ayosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKwor
ICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFs
bHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0K
KworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIq
LCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAgICAgdm9pZCBzZW5k
SmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiBy
ZXN1bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFz
b24pOworCisgICAgICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZvaWQgZGVz
dHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOworCisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7
CisgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7Cisg
ICAgICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgdm9pZCogbV9ub3Rp
ZnlEYXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1Z2lu
U3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsK
KworICAgICAgICBUaW1lcjxQbHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxpdmVyeVRpbWVyOwor
ICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0
az4qKTsKKworICAgICAgICBPd25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVsaXZlcnlEYXRhOwor
CisgICAgICAgIEZJTEUqIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAgY29uc3QgTlBQbHVn
aW5GdW5jcyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAg
IHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzIgbV9vZmZzZXQ7CisgICAgICAg
IENTdHJpbmcgbV9oZWFkZXJzOworICAgICAgICBDU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgTlBS
ZWFzb24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVnaW5QYWNr
YWdlR3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNp
bmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGsgOiBw
dWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVibGljOgorICAgICAg
ICB+UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZUd0ayog
Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlm
aWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
Y3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
aWxlTmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRv
RGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAg
ICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0
ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7
CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRk
b3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25z
dCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdp
blBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVk
OworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRp
b247CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwor
ICAgICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBt
X21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVU
b0V4dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7CisgICAgICAgIHRpbWVf
dCBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRy
IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1f
TlBQX1NodXRkb3duOworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1fTlBQX0dldFZhbHVl
OworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0c2Nh
cGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2th
Z2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFzaCgp
OyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNr
YWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2lu
UGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYg
YikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsg
fQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6
IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3Nz
aWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0
cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdl
VHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2gs
IEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7CisgICAg
ICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
R3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1
Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5
cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5j
bHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRh
dGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAg
c3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBs
dWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAg
ICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVn
aW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJl
dHVybiBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdp
blBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBh
dGgpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVz
aCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNl
dENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucwor
ICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdp
bnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwor
CisgICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAg
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAg
ICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUo
Kml0KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8v
IFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2Fk
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUo
Kml0KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1
Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdp
bnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9Vbmxv
YWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5n
ZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1
Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0
eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9l
bmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRv
RGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3Rv
cjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAor
eworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhz
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0
aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdp
blNldCBwbHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsK
KyAgICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChp
dC0+dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwpOworICAgICAgICBpZiAoZGlyKSB7CisgICAgICAg
ICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgd2hpbGUgKChuYW1lID0gZ19kaXJf
cmVhZF9uYW1lKGRpcikpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgo
bmFtZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2NoYXIq
IGZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0YSgpLCBuYW1lLCBO
VUxMKTsKKyAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luUGFja2Fn
ZSA9IFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoZmlsZW5hbWUsIHRpbWUoTlVMTCkp
OworICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOworICAgICAgICAgICAgICAgICAg
ICBnX2ZyZWUoZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGdfZGlyX2Nsb3NlKGRpcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gcGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25T
dHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZl
cnNpb247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9z
OworICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsK
KyAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5s
ZW5ndGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3Nd
ID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5z
dWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2
ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVu
ZFBvcyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0
dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29u
c3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0g
PiB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlm
ICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIg
dGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4g
ZmFsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFi
YXNlR3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhz
OworCisgICAgZ2NoYXIqIGhvbWVQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2Rp
cigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChob21l
UGF0aCk7CisgICAgZ19mcmVlKGhvbWVQYXRoKTsKKworICAgIGNvbnN0IGdjaGFyKiBtb3pQYXRo
ID0gZ19nZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQYXRoKSB7CisgICAg
ICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgsICI6IiwgLTEpOwor
CisgICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKyAgICAgICAg
ICAgIHBhdGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAgZ19mcmVlKHBsdWdp
blBhdGhzKTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxh
L3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIp
OworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjppc01J
TUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAoreworICAgIHJl
dHVybiAhbWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5z
KG1pbWVUeXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBs
dWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgU3RyaW5nIGtl
eSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIHJl
dHVybiAoKml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFj
a2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVUb0V4dGVu
c2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lv
bnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVf
aXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6
OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreyAg
IAorICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBpZiAoIW1pbWVUeXBl
LmlzTnVsbCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSB1cmwucGF0
aCgpOworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJpbmcocGF0aC5yZXZl
cnNlRmluZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yRXh0ZW5zaW9u
KGV4dGVuc2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBm
b3VuZCwgcXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAgICAgLy8gY29ycmVz
cG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9
CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSBmaW5kUGx1
Z2luKHVybCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRy
eSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgaWYgKCFw
bHVnaW4gJiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWlt
ZVR5cGUpOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdHdGsocGFyZW50RnJh
bWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywg
bWltZVR5cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbklu
Zm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5z
aWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRhdGFiYXNl
R3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVn
aW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ld
OworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0g
cGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRp
b24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRp
b25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7Cisg
ICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRv
RGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xh
c3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVzLmFw
cGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4gPSBp
bmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAg
ICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpw
bHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0
YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmluZyBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBl
KTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKK3sKKyAg
ICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CisKKyAg
ICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBw
YWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyODY5MikKKysrIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTEgQEAgREVQRU5EUEFUSCAr
PSBlZGl0aW5nL3F0IGhpc3RvcnkvcXQgbG9hZAogfQogCiBndGstcG9ydCB7Cit4MTE6cGx1Z2lu
cyB7CisgICAgREVGSU5FUyArPSBYUF9VTklYCisgICAgTElCUyArPSAtbFh0Cit9CisKICAgICBJ
TkNMVURFUEFUSCArPSBcCiAgICAgJCRQV0QvcGxhdGZvcm0vZ3RrIFwKICAgICAkJFBXRC9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsgXApAQCAtMTY3LDYgKzE3Miw3IEBAIGd0ay1wb3J0IHsKICAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsgXAogICAgIHBhZ2Uv
Z3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dCBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiB9CkBAIC04MzYsMTMgKzg0MiwzOSBAQCBT
T1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKIAogZ3RrLXBvcnQgeworICAh
cGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9QTFVHSU5TPTEKKyAgfQorICBI
RUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oIFwKKyAgICBw
bHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdl
R3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oIFwKKyAgICBwbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
V2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCisgICAgcGx1Z2lu
cy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0
YWJhc2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luVmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNwcAorCisgIHgxMTpwbHVn
aW5zIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCisg
ICAgcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaCBcCisgICAgcGx1Z2lucy9ndGsveGVtYmVkLmgK
KworICAgIFNPVVJDRVMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0K
IAogcXQtcG9ydCB7CkBAIC05NDIsNiArOTc0LDcgQEAgcXQtcG9ydCB7CiB9CiAKIGd0ay1wb3J0
IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3RrCiAgICAgSEVBREVS
UyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwK
ICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oIFwKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAJKHJldmlzaW9uIDI4Njky
KQorKysgV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw5MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCiAKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCkK
KyAgICA6IFJlc291cmNlTG9hZGVyKGZyYW1lLCB0cnVlLCB0cnVlKQorICAgICwgbV9jbGllbnQo
Y2xpZW50KQoreworfQorCitOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6fk5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlcj4gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShGcmFtZSogZnJhbWUs
IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJu
IG5ldyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcihmcmFtZSwgY2xpZW50KTsKK30KKworYm9v
bCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6aXNEb25lKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIW1fY2xpZW50OworfQorCit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpyZWxl
YXNlUmVzb3VyY2VzKCkKK3sKKyAgICBtX2NsaWVudCA9IDA7CisgICAgUmVzb3VyY2VMb2FkZXI6
OnJlbGVhc2VSZXNvdXJjZXMoKTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsK
KworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworCisg
ICAgLy8gRG9uJ3QgY29udGludWUgaWYgdGhlIHN0cmVhbSBpcyBjYW5jZWxsZWQKKyAgICBpZiAo
IW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKworICAgIC8vIERvbid0IGNvbnRpbnVlIGlmIHRoZSBz
dHJlYW0gaXMgY2FuY2VsbGVkCisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHJlc3BvbnNlLmlzSFRUUCgpICYmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
IDwgMTAwIHx8IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSkKKyAgICAgICAgZGlk
Q2FuY2VsKGZyYW1lTG9hZGVyKCktPmZpbGVEb2VzTm90RXhpc3RFcnJvcihyZXNwb25zZSkpOwor
fQorCit2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wg
YWxsQXRPbmNlKQoreworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJv
dGVjdCh0aGlzKTsKKworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBs
ZW5ndGgpOworICAgIAorICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShkYXRhLCBs
ZW5ndGgsIGxlbmd0aFJlY2VpdmVkLCBhbGxBdE9uY2UpOworfQorCit2b2lkIE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBSZWZQdHI8TmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBtX2RvY3VtZW50TG9h
ZGVyLT5yZW1vdmVQbHVnSW5TdHJlYW1Mb2FkZXIodGhpcyk7CisgICAgbV9jbGllbnQtPmRpZEZp
bmlzaExvYWRpbmcodGhpcyk7CisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmco
KTsKK30KKwordm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVQbHVn
SW5TdHJlYW1Mb2FkZXIodGhpcyk7CisgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgZXJyb3Ip
OworICAgIFJlc291cmNlTG9hZGVyOjpkaWRGYWlsKGVycm9yKTsKK30KKwordm9pZCBOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQoreworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlz
KTsKKworICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVBsdWdJblN0cmVhbUxvYWRlcih0aGlz
KTsKKyAgICBtX2NsaWVudC0+ZGlkRmFpbCh0aGlzLCBlcnJvcik7CisgICAgUmVzb3VyY2VMb2Fk
ZXI6OmRpZENhbmNlbChlcnJvcik7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJh
bWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShy
ZXZpc2lvbiAyODY5MikKKysrIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMywxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0tKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQo
V2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEZyYW1lOjpjbGVh
clBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHJldmlzaW9uIDI4NjkyKQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAog
IyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU2LDcgQEAg
bXkgJGN1cnJlbnRTVk5SZXZpc2lvbjsKIG15ICRvc1hWZXJzaW9uOwogbXkgJGlzUXQ7CiBteSAk
aXNHdGs7CitteSAkZW5hYmxlR3RrUGx1Z2luczsKIG15ICRpc1d4OwogCiAjIFZhcmlhYmxlcyBm
b3IgV2luMzIgc3VwcG9ydApAQCAtNDgwLDYgKzQ4MiwyMyBAQCBzdWIgZGV0ZXJtaW5lSXNHdGso
KQogICAgIH0KIH0KIAorc3ViIGVuYWJsZUd0a1BsdWdpbnMoKQoreworICAgIGRldGVybWluZUVu
YWJsZUd0a1BsdWdpbnMoKTsKKyAgICByZXR1cm4gJGVuYWJsZUd0a1BsdWdpbnM7Cit9CisKK3N1
YiBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICByZXR1cm4gaWYgZGVmaW5lZCgk
ZW5hYmxlR3RrUGx1Z2lucyk7CisKKyAgICBpZiAoY2hlY2tBcmd2KCItLWRpc2FibGUtZ3RrLXBs
dWdpbnMiKSkgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDA7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAxOworICAgIH0KK30KKwogc3ViIGlzV3goKQog
ewogICAgIGRldGVybWluZUlzV3goKTsKQEAgLTc3OSw2ICs3OTgsNyBAQCBzdWIgYnVpbGRRTWFr
ZUd0a1Byb2plY3QoJCQpCiAKICAgICBteSBAYnVpbGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0
Iik7CiAgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHLT1xdCI7CisgICAgcHVzaCBAYnVpbGRB
cmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBlbmFibGVHdGtQbHVnaW5zKCk7CiAKICAgICByZXR1
cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17963</attachid>
            <date>2007-12-17 07:58:30 -0800</date>
            <delta_ts>2007-12-18 09:16:21 -0800</delta_ts>
            <desc>Updated giant patch for trunk</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>178672</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkocmV2aXNpb24gMjg4MDgp
CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChf
X0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9w
cm94eS5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIEtKUyB7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmgJKHJldmlzaW9uIDI4ODA4KQorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18p
CiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIK
IAogbmFtZXNwYWNlIEtKUyB7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19j
bGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CShyZXZpc2lvbiAyODgwOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWZuZGVmIEJJTkRJTkdTX0NfQ0xB
U1NfSF8KICNkZWZpbmUgQklORElOR1NfQ19DTEFTU19IXwogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAicnVudGltZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L05QX2pzb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBf
anNvYmplY3QuaAkocmV2aXNpb24gMjg4MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9O
UF9qc29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExB
VEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChfX0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGlt
ZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9wcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBy
dW50aW1lX2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWVfaW1wbC5oCShyZXZpc2lvbiAyODgwOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L25wcnVudGltZV9pbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lm
ICFQTEFURk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBy
dW50aW1lLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAKICNpZmRlZiBfX2NwbHVz
cGx1cwogZXh0ZXJuICJDIiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHJldmlzaW9u
IDI4ODA4KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkod29ya2luZyBjb3B5
KQpAQCAtODksNiArODksNyBAQAogI2lmZGVmIFhQX1VOSVgKICAgICAjaW5jbHVkZSA8WDExL1hs
aWIuaD4KICAgICAjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgICAgI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjZW5kaWYKIAogI2lmZGVmIFhQX1dJTgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
bnBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWUuY3BwCShyZXZpc2lvbiAyODgwOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
cnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmICFQTEFU
Rk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ucHJ1bnRpbWVfcHJpdi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDI4ODA4KQorKysgSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvbnBydW50aW1lX3ByaXYuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18pCiAK
LSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKIAog
LyoKICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSgpIHdpbGwgY29weSBz
dHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ucHJ1bnRpbWVfcHJveHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4K
KyAqCisgKgorICogVGhpcyBpcyBhIHByb3h5IGluY2x1ZGUgaGVhZGVyIGZvciBucGFwaS5oCisg
KgorICogU29tZSBvZiB0aGUgI2RlZmluZXMgd2hpY2ggYXJlIGluIFgxMSBoZWFkZXJzIGNvbmZs
aWN0IHdpdGggdHlwZSBhbmQgZW51bQorICogbmFtZXMgaW4gSmF2YVNjcmlwdENvcmUgYW5kIFdl
YkNvcmUKKyAqIFRoaXMgaGVhZGVyICN1bmRlZnMgdGhvc2UgZGVmaW5lcyB0byBmaXggdGhlIGNv
bmZsaWN0cworICogSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBucGFwaS5oIG9yIG5wcnVudGltZS5o
IHdoZW4gYnVpbGRpbmcgb24gWDExLAorICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0
aGUgYWN0dWFsIG5wYXBpLmggb3IgbnBydW50aW1lLmgKKyAqLworCisjaW5jbHVkZSAibnBydW50
aW1lLmgiCisKKyNpZmRlZiBYUF9VTklYCisgICAgI2luY2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4K
KworICAgICN1bmRlZiBOb25lCisgICAgI3VuZGVmIEFib3ZlCisgICAgI3VuZGVmIEJlbG93Cisg
ICAgI3VuZGVmIEF1dG8KKyAgICAjdW5kZWYgQ29tcGxleAorICAgICN1bmRlZiBTdGF0dXMKKyNl
bmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvdGVzdGJpbmRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy90ZXN0YmluZGluZ3MuY3BwCShyZXZp
c2lvbiAyODgwOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3Rlc3RiaW5kaW5ncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2lu
Y2x1ZGUgImludGVycHJldGVyLmgiCiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfcHJveHkuaCIKIAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJy
dW50aW1lX29iamVjdC5oIgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDI4ODA4KQorKysgV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3
b3RvYXN0cy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDEyICs1MCwxNyBAQAog
I2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9T
dG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2lu
Vmlld0d0ay5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFt
ZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAg
ICAgLCBtX3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjAsOSAr
MTY2LDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVy
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9
IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50
ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgp
OworICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRl
eHRFbmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFT
U0VSVChsb2FkZXItPmZyYW1lKCkpOworICAgICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBv
biB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5v
cm1hbGx5IGRvbmUKKyAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVj
ZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtl
IGFib3V0OmJsYW5rKS4KKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlk
ZUVuY29kaW5nKCk7CisgICAgICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwo
KTsKKyAgICAgICAgaWYgKCF1c2VyQ2hvc2VuKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2Fk
ZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVy
KiBmcmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2Fk
ZXItPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEp
CisgICAgICAgICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0K
KworICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25z
ZVRvUGx1Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25z
ZShsb2FkZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZl
RGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpCkBAIC0yNTgsOCArMjg1LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGVjaWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbiko
UG9saWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2lu
KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0
KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNp
emUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisgICAgUGx1Z2luVmlld0d0
ayogcGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmNy
ZWF0ZVBsdWdpblZpZXcoY29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBw
YXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBp
ZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
KQorICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIDA7CiB9CkBAIC0zMDEsOCArMzMzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERh
dGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
R3RrKj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3Jl
YXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwm
IGJhc2VVUkwsCkBAIC0zMjQsNiArMzU1LDkgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2Fk
ZXJDbGllbnQ6Om9iagogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50SW1h
Z2U7CiAKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNN
SU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2Jq
ZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6
Ok9iamVjdENvbnRlbnRGcmFtZTsKIApAQCAtNjA5LDE0ICs2NDMsMTQgQEAgU3RyaW5nIEZyYW1l
TG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpm
aW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIEFT
U0VSVChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rp
bmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBp
cyBub3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVj
ZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtl
IGFib3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+b3Zl
cnJpZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwo
KTsKLSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9jdW1l
bnRMb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50TG9h
ZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisK
KyAgICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVudExv
YWRlciwgMCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNo
TG9hZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRS
ZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiAKQEAgLTc0NCw5ICs3NzgsMTMg
QEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVy
cm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1f
cGx1Z2luVmlldykgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAg
ICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2lu
ID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25s
b2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyODgwOCkKKysrIFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNp
biA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5o
IgorCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpAQCAtMTgwLDYgKzE4MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
ICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFn
ZW50OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAg
ICAgV2ViQ29yZTo6UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1f
aGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMjg4MDgpCisrKyBXZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwOCw2ICs4MDgsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXCiAgICAgc2V0dGluZ3MtPnNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9u
dEZhbWlseSgiQ291cmllciBOZXciKTsKICAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFt
aWx5KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKIAog
ICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOwogICAgIHdl
YlZpZXdEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVf
bmV3KHdlYlZpZXcpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcAkocmV2aXNpb24gMjg4MDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0
b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlz
dG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LVBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0
SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQg
UGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJp
bmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBl
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotCi0KIENvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAw
MDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZv
aWQgKCopKCkpIHsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlz
aW9uIDI4ODA4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA1LDUgKzMwNSwyMiBAQCB2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24oYm9vCiAKIHZvaWQgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogewor
ICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHBhcmVudCgpKTsKKyAgICBJbnRQb2ludCBsb2MgPSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRh
aW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6ZSB0byBiZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3og
PSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpOworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
KworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3ou
d2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3Rr
V2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMjg4MDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJCYXNlNjQuaCIKIAorI2luY2x1ZGUgPGVycm5vLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xOTUs
MjYgKzE5NiwyOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lCiAg
ICAgc3RhcnRTY2hlZHVsZWRKb2JzKCk7CiAKICAgICBmZF9zZXQgZmRyZWFkOwotICAgIEZEX1pF
Uk8oJmZkcmVhZCk7CiAgICAgZmRfc2V0IGZkd3JpdGU7Ci0gICAgRkRfWkVSTygmZmR3cml0ZSk7
CiAgICAgZmRfc2V0IGZkZXhjZXA7Ci0gICAgRkRfWkVSTygmZmRleGNlcCk7CiAgICAgaW50IG1h
eGZkID0gMDsKLSAgICBjdXJsX211bHRpX2Zkc2V0KG1fY3VybE11bHRpSGFuZGxlLCAmZmRyZWFk
LCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CiAKICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1l
b3V0OwogICAgIHRpbWVvdXQudHZfc2VjID0gMDsKICAgICB0aW1lb3V0LnR2X3VzZWMgPSBzZWxl
Y3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCiAK
ICAgICAvLyBUZW1wb3JhcmlseSBkaXNhYmxlIHRpbWVycyBzaW5jZSBzaWduYWxzIG1heSBpbnRl
cnJ1cHQgc2VsZWN0KCksIHJhaXNpbmcgRUlOVFIgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zCi0g
ICAgc2V0RGVmZXJyaW5nVGltZXJzKHRydWUpOwotICAgIGludCByYyA9IDo6c2VsZWN0KG1heGZk
ICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7Ci0gICAgc2V0RGVm
ZXJyaW5nVGltZXJzKGZhbHNlKTsKKyAgICBXZWJDb3JlOjpzZXREZWZlcnJpbmdUaW1lcnModHJ1
ZSk7CisgICAgaW50IHJjOworICAgIGRvIHsKKyAgICAgICAgRkRfWkVSTygmZmRyZWFkKTsKKwlG
RF9aRVJPKCZmZHdyaXRlKTsKKwlGRF9aRVJPKCZmZGV4Y2VwKTsKKwljdXJsX211bHRpX2Zkc2V0
KG1fY3VybE11bHRpSGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7
CisJcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwg
JnRpbWVvdXQpOworICAgIH0gd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAg
ICBXZWJDb3JlOjpzZXREZWZlcnJpbmdUaW1lcnMoZmFsc2UpOwogCiAgICAgaWYgKC0xID09IHJj
KSB7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBwcmludGYoImJhZDogc2VsZWN0KCkgcmV0dXJu
ZWQgLTFcbiIpOworICAgICAgICBwZXJyb3IoImJhZDogc2VsZWN0KCkgcmV0dXJuZWQgLTE6ICIp
OwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBXZWJDb3JlL2NvbmZpZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY29uZmlnLmgJKHJldmlzaW9uIDI4ODA4KQorKysgV2Vi
Q29yZS9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMTAgQEAKICNpbmNsdWRl
IDx3dGYvRGlzYWxsb3dDVHlwZS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjZGVm
aW5lIFdURl9VU0VfTlBPQkpFQ1QgMQorI2VuZGlmCisKICNpZiAhQ09NUElMRVIoTVNWQykgLy8g
Y2FuJ3QgZ2V0IHRoaXMgdG8gY29tcGlsZSBvbiBWaXN1YWwgQysrIHlldAogI2RlZmluZSBBVk9J
RF9TVEFUSUNfQ09OU1RSVUNUT1JTIDEKICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQ
bHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVt
ZW50LmgJKHJldmlzaW9uIDI4ODA4KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKE5Q
T0JKRUNUKQotI2luY2x1ZGUgPGJpbmRpbmdzL25wcnVudGltZS5oPgorI2luY2x1ZGUgPGJpbmRp
bmdzL25wcnVudGltZV9wcm94eS5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFz
ZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFz
aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFz
cyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3Mg
UGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgdHlwZWRl
ZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2FnZUd0a0hhc2g+
IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQbHVnaW5zKCk7
CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZy
YW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisK
KyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3Rr
Kj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2lu
UGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBsdWdp
blBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0
aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisKKyAg
ICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdl
R3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pOworCisgICAg
ICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4g
bV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAg
IH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZp
ZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgor
I2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtqc19i
aW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRl
IDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZp
bmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVk
ZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNs
dWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3Vz
aW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNP
YmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5n
IHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVz
dEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1
ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEp
CisgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVi
bGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZy
YW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0
YTsKKyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0
dXJlCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZh
bCA9IDAuMDAxOworCitjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrIHsKK3B1YmxpYzoK
KyAgICBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcp
CisgICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgICAgICwgbV9iYWNrKDAp
LCBtX2Zyb250KDApCisgICAgICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcih0aGlzLCAmUGx1
Z2luTWVzc2FnZVRocm90dGxlckd0azo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKKyAgICB7
CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUgbWVz
c2FnZXMKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUlubGluZU1lc3NhZ2Vz
IC0gMTsgaSsrKQorICAgICAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1faW5s
aW5lTWVzc2FnZXNbaSArIDFdOworICAgICAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1l
c3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gJm1f
aW5saW5lTWVzc2FnZXNbMF07CisgICAgfQorCisgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJH
dGsoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICAKKyAgICAgICAg
Zm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsgbWVzc2FnZTsgbWVzc2FnZSA9
IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OworICAgICAgICAgICAg
ZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFwcGVuZE1lc3NhZ2UoWElEIGhXbmQsIGd1aW50IG1zZywgZ3VpbnQgd1BhcmFtLCBn
bG9uZyBsUGFyYW0pIAorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9IGFs
bG9jYXRlTWVzc2FnZSgpOworCisgICAgICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOworICAgICAg
ICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJhbTsK
KyAgICAgICAgbWVzc2FnZS0+bFBhcmFtID0gbFBhcmFtOworICAgICAgICBtZXNzYWdlLT5uZXh0
ID0gMDsKKworICAgICAgICBpZiAobV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrLT5uZXh0ID0g
bWVzc2FnZTsKKyAgICAgICAgbV9iYWNrID0gbWVzc2FnZTsKKyAgICAgICAgaWYgKCFtX2Zyb250
KQorICAgICAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7CisKKyAgICAgICAgaWYgKCFtX21lc3Nh
Z2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAgIFhJRCBoV25k
OworICAgICAgICBndWludCBtc2c7CisgICAgICAgIGd1aW50IHdQYXJhbTsKKyAgICAgICAgZ2xv
bmcgbFBhcmFtOworCisgICAgICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0OworICAgIH07
CisgICAgCisgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpbk1l
c3NhZ2VUaHJvdHRsZXJHdGs+KikKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1lc3Nh
Z2UgPSBtX2Zyb250OworICAgICAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsKKyAgICAgICAg
aWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrID0gMDsKKworCS8vICAg
ICAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJvYygpLCBtZXNz
YWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2FnZS0+bFBhcmFt
KTsKKworICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICBpZiAobV9mcm9u
dCkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3Nh
Z2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCisgICAgUGx1Z2luTWVzc2FnZSogYWxs
b2NhdGVNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7CisK
KyAgICAgICAgaWYgKG1fZnJlZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgICAgICBtZXNzYWdl
ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVNZXNzYWdl
cyA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWVzc2FnZSA9
IG5ldyBQbHVnaW5NZXNzYWdlOworCisgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0KKwor
ICAgIGJvb2wgaXNJbmxpbmVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpIAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0gJiYgbWVzc2Fn
ZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOworICAgIH0KKwor
ICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgeworICAg
ICAgICBpZiAoaXNJbmxpbmVNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBtZXNzYWdl
LT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVN
ZXNzYWdlcyA9IG1lc3NhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGVsZXRlIG1l
c3NhZ2U7CisgICAgfQorCisgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgIFBs
dWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2Zyb250OworCisgICAg
c3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7CisgICAgUGx1Z2luTWVzc2Fn
ZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICBQbHVnaW5NZXNzYWdl
KiBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKworICAgIFRpbWVyPFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGs+IG1fbWVzc2FnZVRocm90dGxlVGltZXI7Cit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlw
dFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwu
c3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisg
ICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQo
MTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2lu
VmlldyA9IDA7CisKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3V2luZG93Q2xhc3NOYW1l
ID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3UHJvcGVy
dHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBNb3pp
bGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsg
ZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwor
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50
KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIElu
dFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50
UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9u
KCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xp
cFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRv
d1JlY3QueSgpKTsKKworICAgIGlmIChtX3dpbmRvdyAmJiAobV93aW5kb3dSZWN0ICE9IG9sZFdp
bmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsKKyAgICAgICAgR3RrQWxs
b2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgp
LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgICAg
IGlmIChtX3dpZGdldCkgeworICAgICAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1f
d2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYg
IWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgICAgIGlmICghbV9uZWVkc1hF
bWJlZCkgeworICAgICAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklO
KG1fd2lkZ2V0KSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAg
ICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
fQorICAgIH0KK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJbnRS
ZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxlbWVu
dCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFt
ZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+
ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmlldy0+
d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAgcmV0dXJuIGNsaXBS
ZWN0OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5wcmludGluZygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVjdCAhPSBmcmFtZUdlb21ldHJ5KCkpCisg
ICAgICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKKworICAgIGlmIChwYXJlbnQo
KSkKKyAgICAgICAgaW5pdCgpOworCisgICAgdXBkYXRlV2luZG93KCk7CisgICAgc2V0TlBXaW5k
b3dSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6Omdlb21ldHJ5Q2hhbmdlZCgp
IGNvbnN0Cit7CisgICAgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKTsKKyAgICB1cGRhdGVXaW5k
b3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGb2N1cygpCit7CisgICAgLy9pZiAo
WElEIHdpbmRvdyA9IG1fd2luZG93KQorICAgIC8vU2V0Rm9jdXMod2luZG93KTsKKworICAgIFdp
ZGdldDo6c2V0Rm9jdXMoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzaG93KCkKK3sKKyAg
ICBtX2lzVmlzaWJsZSA9IHRydWU7CisKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cp
CisgICAgLy9TaG93V2luZG93KHdpbmRvdywgU1dfU0hPV05BKTsKKworICAgIFdpZGdldDo6c2hv
dygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhpZGUoKQoreworICAgIG1faXNWaXNpYmxl
ID0gZmFsc2U7CisKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TaG93
V2luZG93KHdpbmRvdywgU1dfSElERSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3R3RrOjpwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG51bGxQ
bHVnaW5JbWFnZTsKKyAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKKyAgICAgICAgbnVsbFBsdWdp
bkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7CisKKyAg
ICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZUdlb21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCku
eSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0KCkp
OworCisgICAgaW50IHhPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLndpZHRoKCkgLSBpbWFnZVJl
Y3Qud2lkdGgoKSkgLyAyOworICAgIGludCB5T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS5oZWln
aHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkgLyAyOworCisgICAgaW1hZ2VSZWN0Lm1vdmUoeE9m
ZnNldCwgeU9mZnNldCk7CisKKyAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhpbWFnZVJlY3QpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+Y2xp
cCh3aW5kb3dDbGlwUmVjdCgpKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobnVsbFBsdWdpbklt
YWdlLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIC8v
IERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgcGFpbnRNaXNzaW5nUGx1
Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX2lzV2luZG93ZWQgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVzaXpl
IFhldmVudHMgaGVyZSAqLworCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJh
d2FibGU7CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9CisKKyAgICBzZXROUFdpbmRv
d1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAm
bnBFdmVudCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisg
ICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgYW5kIHBhc3MgaXQgb24gKi8KKyAgICAvKgorICAg
IG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsgICAgCisKKyAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tF
WURPV047CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKyAgICB9IGVsc2UgaWYgKGV2ZW50
LT50eXBlKCkgPT0ga2V5dXBFdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZ
VVA7CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMHg4MDAwOworICAgIH0KKyAgICAqLworCisg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKworLy9leHRlcm4gYm9vbCBpZ25vcmVO
ZXh0U2V0Q3Vyc29yOworCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgLyogU3ludGhl
c2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyBvbiAqLworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQt
PnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CisKKyAgICAvKgorICAgIG5wRXZlbnQubFBhcmFt
ID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKwor
ICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19D
T05UUk9MOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFy
YW0gfD0gTUtfU0hJRlQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW1vdmVFdmVu
dCB8fAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAg
IGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX01PVVNFTU9WRTsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCisgICAg
ICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJV
VFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBN
aWRkbGVCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01C
VVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
UmlnaHRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JC
VVRUT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgc3dp
dGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047CisKKyAgICAgICAgICAgICAgICAv
LyBGb2N1cyB0aGUgcGx1Z2luCisgICAgICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1l
bnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01f
TUJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IG1vdXNldXBFdmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewor
ICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9M
QlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRUT05VUDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50
LmV2ZW50ID0gV01fUkJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKworICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMg
YWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKKyAg
ICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vy
c29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCisgICAgLy9pZ25vcmVOZXh0U2V0Q3Vy
c29yID0gdHJ1ZTsgICAgIAorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUV2ZW50KEV2
ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgaGFu
ZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNl
IGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZl
bnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNl
dFBhcmVudChwYXJlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldE5QV2luZG93UmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIElu
dFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9X
aW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBt
X25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRo
KCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7
CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25w
V2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisKKyAgICAgICAgaWYgKCFtX2lz
V2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKG1fd2luZG93
KTsKKyAgICB9CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyByZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6
ZV9hbGxvY2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgaWYgKCFtX25l
ZWRzWEVtYmVkKSB7CisgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1f
d2lkZ2V0KSwgYWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnkpOworICAgICAgICBndGtfeHRiaW5f
cmVzaXplKG1fd2lkZ2V0LCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7Cisg
ICAgfQorI2VuZGlmCit9CisKK2Jvb2wgUGx1Z2luVmlld0d0azo6c3RhcnQoKQoreworICAgIGlm
IChtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1fcGx1
Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOworCisgICAg
TlBFcnJvciBucEVycjsKKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldyh0
aGlzKTsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChOUE1J
TUVUeXBlKW1fbWltZVR5cGUuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1Db3Vu
dCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKKyAgICB9CisgICAgUGx1Z2lu
Vmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICBpZiAobnBFcnIgIT0gTlBF
UlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNTdGFydGVkID0g
dHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFtX2xvYWRNYW51YWxseSkgewor
ICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisgICAgICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAg
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJsKTsKKyAg
ICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c3RvcCgpCit7CisgICAgaWYgKCFt
X2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2lu
U3RyZWFtR3RrPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtR3RrPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOworICAgIGZvciAo
SGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7CisgICAg
ICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVCht
X3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisKKyAgICBL
SlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKworICAgIC8vIERlc3Ryb3kg
dGhlIHBsdWdpbgorICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5zdGFu
Y2UsIDApOworCisgICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcpCit7
CisgICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Cit9CisKK1BsdWdpblZpZXdH
dGsqIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc19j
dXJyZW50UGx1Z2luVmlldzsKK30KKworc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHIpCit7CisgICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKKyAgICBj
aGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGNzdHIubGVu
Z3RoKCkgKyAxKSk7CisKKyAgICBzdHJuY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHIubGVu
Z3RoKCkgKyAxKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVT
dHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFz
dHJpbmdBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykKKyAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFz
dEZyZWUoc3RyaW5nQXJyYXkpOworfQorCitzdGF0aWMgYm9vbCBnZXRTdHJpbmcoS0pTUHJveHkq
IHByb3h5LCBKU1ZhbHVlKiByZXN1bHQsIFN0cmluZyYgc3RyaW5nKQoreworICAgIGlmICghcHJv
eHkgfHwgIXJlc3VsdCB8fCByZXN1bHQtPmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBKU0xvY2sgbG9jazsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb3h5LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIFVTdHJpbmcgdXN0cmluZyA9IHJlc3Vs
dC0+dG9TdHJpbmcoZXhlYyk7CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAKKyAg
ICBzdHJpbmcgPSB1c3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAg
S1VSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVx
dWVzdCgpLnVybCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNj
cmlwdFVSTChyZXF1ZXN0VVJMKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgeworICAg
ICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQocmVxdWVzdC0+ZnJhbWVM
b2FkUmVxdWVzdCgpLCAwLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IDxyZGFy
Oi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3VtZW50
IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZpY2F0
aW9uKCkpIHsKKyAgICAgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzOworICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeShtX2lu
c3RhbmNlLCByZXF1ZXN0VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIE5QUkVTX0RPTkUs
IHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBhbGxv
d2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgorICAg
IC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCisgICAgQVNTRVJUKHJl
cXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKS5pc0VtcHR5KCkgfHwgbV9wYXJl
bnRGcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5h
bWUoKSkgPT0gbV9wYXJlbnRGcmFtZSk7CisgICAgCisgICAgLy8gRXhlY3V0aW5nIGEgc2NyaXB0
IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVwIGEg
cmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZnJhbWUuCisgICAgUmVmUHRyPEZyYW1lPiBwYXJlbnRG
cmFtZSA9ICBtX3BhcmVudEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fcGFyZW50RnJh
bWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
dHJ1ZSk7CisKKyAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgp
LmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CisKKyAgICAgICAgaWYg
KCFnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCksIHJlc3VsdCwgcmVzdWx0U3Ry
aW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU3RyaW5nIGNzdHIgPSByZXN1
bHRTdHJpbmcudXRmOCgpOworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBzdHJlYW0g
PSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIHBhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3RpZmlj
YXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChz
dHJlYW0pOworICAgICAgICBzdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkws
IGNzdHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJl
ZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZt
X3JlcXVlc3RUaW1lcik7CisgICAgQVNTRVJUKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCk7CisKKyAg
ICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbV9yZXF1ZXN0c1swXTsKKyAgICBtX3JlcXVl
c3RzLnJlbW92ZSgwKTsKKyAgICAKKyAgICAvLyBTY2hlZHVsZSBhIG5ldyByZXF1ZXN0IGJlZm9y
ZSBjYWxsaW5nIHBlcmZvcm1SZXF1ZXN0IHNpbmNlIHRoZSBjYWxsIHRvCisgICAgLy8gcGVyZm9y
bVJlcXVlc3QgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZWxldGVkLgorICAgIGlm
IChtX3JlcXVlc3RzLnNpemUoKSA+IDApCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKKworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQorewor
ICAgIG1fcmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpOworICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpsb2FkKGNvbnN0IEZyYW1l
TG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZ5RGF0YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIEtVUkwgdXJsID0gZnJh
bWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBpZiAodXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOworCisgICAgU3Ry
aW5nIHRhcmdldCA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisKKyAgICAvLyBkb24n
dCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9m
IGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBs
b2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBpZiAobV9wYXJl
bnRGcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYKKyAgICAgICAgKHRhcmdldC5pc051bGwo
KSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1l
KSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBTdHJpbmcganNT
dHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwodXJsKTsKKyAgICBpZiAoIWpzU3Ry
aW5nLmlzTnVsbCgpKSB7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFyZW50RnJh
bWUtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5pc0ph
dmFTY3JpcHRFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgorICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAo
dGFyZ2V0LmlzTnVsbCgpICYmIG1fbW9kZSA9PSBOUF9GVUxMKSB7CisgICAgICAgICAgICAvLyBE
b24ndCBhbGxvdyBhIEphdmFTY3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVnLWlu
IHRoYXQgaXMgc2VsZi10YXJnZXR0ZWQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYW4g
Y2F1c2UgdGhlIHVzZXIgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQwMzkp
LgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpIHx8ICF0YXJnZXQuaXNOdWxsKCkpIHsK
KyAgICAgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSAmJiAhdGFyZ2V0LmlzTnVsbCgpICYmIG1f
cGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpIHsKKyAg
ICAgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3Rz
IHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorCisgICAgICAg
IFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBuZXcgUGx1Z2luUmVxdWVzdEd0ayhmcmFtZUxv
YWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgc2NoZWR1
bGVSZXF1ZXN0KHJlcXVlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIFBsdWdpblN0cmVhbUd0
ayogc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBmcmFt
ZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlE
YXRhKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisgICAgICAgIHN0cmVhbS0+
c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK3N0YXRp
YyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVV
UkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSBEZXByZWNhdGVk
U3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAgIC8vIFN0cmlwIHJl
dHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVy
bFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVy
bFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMTm90aWZ5KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAg
IEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVl
c3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1
cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJv
ciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJh
bWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsK
KworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBi
dWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclswXSA9PSAn
XG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUo
Y29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBi
dWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAgICAgIC8v
IFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYgKGJ5dGVz
W2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4g
aSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAy
IENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAgIGlmIChi
eXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBp
ICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBp
OworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgor
ICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVz
W2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8g
U3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgorICAgICAg
ICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAt
MTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5
dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNw
ZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0
dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4gV29yc2Ug
eWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9mIGJvdGgg
KGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAgLy8gdG8g
YmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgorICAgIC8v
IENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5k
IG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5h
dGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGJ5
dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAgICAgIC8v
IENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAgICAvLyAo
Q1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAgIC8vIG5l
eHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6
ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYm9vbCBj
YXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hh
ciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2En
ICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBwZXIobmFtZVtpXSk7Cisg
ICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYm
IG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1lW2ld
ID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3Qg
VmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFy
KiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0cmlu
ZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8gTG9v
cCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmlu
ZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMs
IGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAg
aW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1vdmUg
Ynl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBi
eSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9
PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2Fm
ZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAg
bGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQor
ICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVy
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICps
aW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlv
dXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAg
ICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtl
eSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6
ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAg
ICAgICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0gbGlu
ZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAg
ICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sb24g
PT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQg
YW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxk
TmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9uIC0gbGluZSkpOwor
ICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29s
b24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgq
Y29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBl
b2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1
ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRW
YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFs
dWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAg
ICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwg
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhl
YWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5kbGVQb3N0KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBi
dWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBi
b29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAg
ICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAg
VmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJp
bmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1ZiwgbGVuKTsKKwor
ICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgICAg
IGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgICAgIC8vIEdldCBmaWxl
IGluZm8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgp
LCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFS
KSkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJWE1F
IC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisgICAgICAgIEZJTEUqIGZpbGVIYW5k
bGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7CisgICAgICAgIAorICAg
ICAgICBpZiAoZmlsZUhhbmRsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJ
TEVfTk9UX0ZPVU5EOworCisgICAgICAgIC8vYnVmZmVyLnJlc2l6ZSgpOworCisgICAgICAgIGlu
dCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKwor
ICAgICAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8PSAw
KQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsK
KyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICBj
b25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3REYXRhTGVu
Z3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFkZXJzKSB7CisgICAg
ICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIHBvc3RE
YXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGJ1
ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUg
YnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAg
aGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLSBs
b2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8g
c2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCisgICAgICAgICAg
ICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxs
IHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNh
dGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAgICAgICAgICAgU3Ry
aW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0aCIpOwor
CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAgICAgICAg
ICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGludClk
YXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50
LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247CisgICAg
ICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAgIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJGaWVsZHMp
OworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoUGFz
c1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkp
KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAgcmV0
dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7
Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJv
b2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmws
IHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUpOworfQorCitO
UEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7Cisg
ICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2
aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3Qo
dXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciog
dGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK2lu
dDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9p
ZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQK
KyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6ZGVzdHJveVN0cmVh
bShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgUGx1Z2luU3RyZWFt
R3RrKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtR3RrKj4oc3RyZWFt
LT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW1HdGs6Om93bmVyRm9y
U3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFM
SURfSU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95
U3RyZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitjb25zdCBj
aGFyKiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJrcyAmIFBs
dWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KQorICAgICAgICByZXR1cm4gTW96aWxsYVVz
ZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91c2Vy
QWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7
CisgICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgcyA9IERlcHJlY2F0
ZWRTdHJpbmc6OmZyb21MYXRpbjEobWVzc2FnZSk7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1f
cGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0YXR1c2Jh
clRleHQobV9wYXJlbnRGcmFtZSwgcyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0
VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAo
dmFyaWFibGUpIHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZCAo
R1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7Cisg
ICAgICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICAqKHZvaWQg
KiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1fd2lk
Z2V0KS0+eHRjbGllbnQueHRkaXNwbGF5KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBO
UEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5Q
TlZUb29sa2l0OiB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgKigodW5zaWduZWQg
bG9uZyAqKXZhbHVlKSA9IDI7CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAq
KXZhbHVlKSA9IDA7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogeworI2lm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJ
TlMpCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNl
CisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gZmFsc2U7CisjZW5kaWYK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVjdCogd2luZG93
U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKwor
ICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBh
cyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2lu
L25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAg
ICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisg
ICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHdp
bmRvd1NjcmlwdE9iamVjdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5Q
T2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsK
KworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAg
ICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRl
c2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBy
dW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAg
ICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAg
ICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2lu
U2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAg
dm9pZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworICAgICAgICAgICAg
KigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5nV2lu
ZG93KCkpLT53aW5kb3cpOworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOworICAgIH0KK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpzZXRWYWx1ZShO
UFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJs
ZSkgeworICAgICAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgorICAgICAgICAgICAgbV9p
c1dpbmRvd2VkID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDoKKyAgICAgICAgICAgIG1faXNU
cmFuc3BhcmVudCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjppbnZhbGlkYXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGltZXIp
Cit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX2ludmFsaWRhdGVUaW1lcik7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnZhbGlkUmVjdHMuc2l6ZSgpOyBpKyspCisgICAgICAg
IFdpZGdldDo6aW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOworICAgIG1faW52YWxp
ZFJlY3RzLmNsZWFyKCk7Cit9CisKKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVj
dChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRhdGUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCBy
ZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+
dG9wKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgLyogRklYTUUgLSBJbnZh
bGlkYXRlIHRoZSByZWN0YW5nbGUKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdChyKTsKKyAgICAg
ICAgSW52YWxpZGF0ZVJlY3QobV93aW5kb3csICZpbnZhbGlkUmVjdCwgRkFMU0UpOworICAgICAg
ICAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3F1aXJrcyAmIFBsdWdpblF1aXJrVGhy
b3R0bGVJbnZhbGlkYXRlKSB7CisgICAgICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQocik7
CisgICAgICAgICAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
ICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikK
K3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhN
RSAtIEludmFsaWRhdGUgdGhlIHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25C
b3gocmVnaW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICovCit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIC8qIEZJWE1FIC0g
Rm9yY2UgYSByZWRyYXcKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICA6OlVwZGF0ZVdp
bmRvdyhtX3dpbmRvdyk7CisgICAgZWxzZQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhjb250YWlu
aW5nV2luZG93KCkpOworICAgICovCit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBQbHVn
aW5WaWV3R3RrOjpiaW5kaW5nSW5zdGFuY2UoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAw
OworCisgICAgaWYgKCFtX3BsdWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZh
bHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAgeworICAg
ICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbnBF
cnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBs
dWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7CisgICAgfQorCisgICAgaWYgKG5wRXJy
ICE9IE5QRVJSX05PX0VSUk9SIHx8ICFvYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3QgPSBtX3BhcmVudEZyYW1lLT5j
cmVhdGVSb290T2JqZWN0KHRoaXMsIG1fcGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCktPmdsb2Jh
bE9iamVjdCgpKTsKKyAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqaW5zdGFuY2UgPSBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxhbmd1YWdlSW5zdGFuY2UoS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2U6OkNMYW5ndWFnZSwgb2JqZWN0LCByb290LnJlbGVhc2UoKSk7
CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBpbnN0YW5j
ZTsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdpblZpZXdHdGsoKQoreworICAgIHN0b3AoKTsK
KworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJpbmdBcnJh
eShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFy
YW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQgJiYgbV93
aWRnZXQpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpZGdldCk7CisgICAgbV93aW5k
b3cgPSAwOworICAgIHNldEd0a1dpZGdldChOVUxMKTsKKworICAgIG1fcGFyZW50RnJhbWUtPmNs
ZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOworCisgICAgaWYgKG1fcGx1Z2luICYm
ICEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQorICAgICAgICBtX3Bs
dWdpbi0+dW5sb2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlzY29ubmVjdFN0cmVh
bShQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRh
aW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShzdHJlYW0pOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIC8vIFRoZSBmbGFzaCBwbHVnaW4gb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdp
bnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgaWYgKG1pbWVUeXBlID09
ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQ7CisgICAgICAgIG1fcXVpcmtzIHw9IFBs
dWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlOworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5R
dWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzOworICAgIH0KKworICAgIC8vIFRoZSBX
TVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBh
bmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVu
IHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobV9wbHVnaW4tPm5h
bWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbV9wbHVnaW4tPm5hbWUoKS5jb250YWlucygi
V2luZG93cyBNZWRpYSIpKSB7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRGVmZXJG
aXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90
IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJh
bWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgorICAg
ICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtOwor
ICAgIH0KKworICAgIC8vIFRoZSBEaXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJz
dCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAg
Ly8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXpl
CisgICAgaWYgKG1pbWVUeXBlID09ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7
IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0
byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRo
YXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQg
dGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5j
ZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBp
ZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1
aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW47CisKKyAgICAvLyBQcmV2ZW50IHRo
ZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBj
YXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0gImF1ZGlv
L3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJr
RG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJUKHBhcmFt
TmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBzaXpl
ID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7CisKKyAg
ICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXpl
b2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9jYXN0
PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoKG1fcXVpcmtzICYg
UGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nh
c2UocGFyYW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmlu
ZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9IGNy
ZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291bnQrKzsK
KyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCitQbHVnaW5WaWV3
R3RrOjpQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVh
bGx5KQorICAgIDogbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9wYXJlbnRGcmFtZShwYXJlbnRG
cmFtZSkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2Up
CisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9hZGVy
KCktPmNvbXBsZXRlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSkpCisg
ICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgLCBtX3Jl
cXVlc3RUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAg
LCBtX2ludmFsaWRhdGVUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVRpbWVy
RmlyZWQpCisgICAgLCBtX3BhcmFtTmFtZXMoMCkKKyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKKyAg
ICAsIG1fcXVpcmtzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9pc1dpbmRvd2VkKHRy
dWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShmYWxz
ZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9sYXN0TWVzc2FnZSgw
KQorICAgICwgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV9sb2FkTWFu
dWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAsIG1fd2lk
Z2V0KDApCisgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQoreworICAgIGlmICghbV9wbHVnaW4p
IHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0
OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0gdGhpczsKKworICAgIG1fbWltZVR5cGUgPSBtaW1l
VHlwZS51dGY4KCk7CisgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVUeXBlKTsKKworICAgIHNldFBh
cmFtZXRlcnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworCisgICAgbV9tb2RlID0gbV9sb2Fk
TWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQ7CisKKyAgICByZXNpemUoc2l6ZSk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVk
KQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAg
aWYgKCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVz
Q2FuTm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1f
cGx1Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXND
YW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVl
ZHNYRW1iZWQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQo
R1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICBt
X3dpZGdldCA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRkKG1f
cGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7CisgICAg
ICAgIHNldEd0a1dpZGdldChtX3dpZGdldCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fd2lkZ2V0
ID0gZ3RrX3h0YmluX25ldyhHVEtfV0lER0VUKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFp
bmluZ1dpbmRvdygpKS0+d2luZG93LCBOVUxMKTsKKyNlbHNlCisgICAgbV93aWRnZXQgPSBnZGtf
c29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKG1fcGFyZW50RnJhbWUtPnZpZXco
KS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7CisgICAgc2V0R3RrV2lkZ2V0KG1fd2lk
Z2V0KTsKKyNlbmRpZgorCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBmcmFtZUdl
b21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBmcmFtZUdlb21ldHJ5KCkud2lkdGgo
KSwgZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICBpZiAoIW1fbmVlZHNYRW1i
ZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQp
LCBhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisgICAgICAgIGd0a194dGJpbl9yZXNpemUo
bV93aWRnZXQsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKyAgICB9Cisj
ZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworI2lmIGRlZmluZWQoR0RL
X1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgTlBT
ZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFja1N0
cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkg
eworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkobV93aWRnZXQtPndp
bmRvdyk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3dpbmRv
d19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAgd3MtPmRlcHRoID0gZ2Rr
X3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpLT5kZXB0aDsKKyAgICAgICAgd3Mt
PmNvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfd2luZG93X2dldF9jb2xvcm1h
cChtX3dpZGdldC0+d2luZG93KSk7CisgICAgICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19YV0lO
RE9XKG1fd2lkZ2V0LT53aW5kb3cpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdzLT5kaXNwbGF5
ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5OworICAgICAgICB3cy0+dmlzdWFsID0g
R1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgICAgIHdzLT5kZXB0
aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgIHdzLT5j
b2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisgICAg
ICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisKKyAgICAgICAg
WEZsdXNoICh3cy0+ZGlzcGxheSk7CisgICAgfQorCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0g
d3M7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisgICAgbV93aW5kb3cgPSBH
REtfV0lORE9XX0hXTkQobV93aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKworICAgIGlmIChtX2lz
V2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93
OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAg
ICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcXVpcmtz
ICYgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAgICAgIHNldE5QV2lu
ZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNM
b2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCgh
bV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFt
R3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwKTsKKyAgICBtX21hbnVhbFN0cmVh
bS0+c2V0TG9hZE1hbnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2Vp
dmVSZXNwb25zZSgwLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9t
YW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgw
LCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZpbmlzaExvYWRp
bmcoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVh
bS0+ZGlkRmluaXNoTG9hZGluZygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVh
bSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
Q29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1
Z2luVmlld0d0a19ICisjZGVmaW5lIFBsdWdpblZpZXdHdGtfSAorCisjaW5jbHVkZSA8Z3RrL2d0
a3dpZGdldC5oPgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNT
dHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVf
cHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFjZSBC
aW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgc3Ry
dWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFz
cyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRo
cm90dGxlckd0azsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdp
blJlcXVlc3RHdGs7CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrOworICAgIGNsYXNzIFJlc291
cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICAKKyAgICBlbnVtIFBs
dWdpblF1aXJrcyB7CisgICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0g
MSA8PCAwLAorICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8
PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCisg
ICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCisg
ICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQs
CisgICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAgICAg
UGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8
PCA2CisgICAgfTsKKworICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKKyAgICAgICAgUGx1Z2luU3Rh
dHVzQ2FuTm90RmluZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
biwKKyAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5CisgICAgfTsKKworICAg
IGNsYXNzIFBsdWdpblZpZXdHdGsgOiBwdWJsaWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1
Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgdmly
dHVhbCB+UGx1Z2luVmlld0d0aygpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0YW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAgICAgICB2b2lkIHNldE5QV2lu
ZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBj
dXJyZW50UGx1Z2luVmlldygpOworCisgICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBi
aW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAgICAg
IE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3RpZnko
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNo
YXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9y
IHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4s
IGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVh
bShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0p
OworICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQq
IGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFt
LCBOUFJlYXNvbiByZWFzb24pOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyAg
ICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJyb3Ig
Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgTlBF
cnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2b2lkIGludmFsaWRhdGVS
ZWdpb24oTlBSZWdpb24pOworICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAgICAg
dm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayopOworCisgICAgICAgIC8vIFdp
ZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29u
c3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2hvdygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2
aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQo
U2Nyb2xsVmlldyopOworCisgICAgICAgIGdsb25nIHduZFByb2MoWElEIGhXbmQsIGd1aW50IG1l
c3NhZ2UsIGd1aW50IHdQYXJhbSwgZ2xvbmcgbFBhcmFtKTsKKworICAgICAgICAvLyBVc2VkIGZv
ciBtYW51YWwgbG9hZGluZworICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciosIGludCk7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICB2b2lk
IGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgc2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgdm9pZCBpbml0KCk7CisgICAg
ICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHN0YXRpYyB2
b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqKTsKKyAgICAgICAgTlBFcnJv
ciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZv
aWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9v
bCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxs
b3dIZWFkZXJzKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+IG1fcGx1Z2luOwor
ICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIEZyYW1lKiBtX3BhcmVudEZyYW1l
OworICAgICAgICBib29sIG1faXNTdGFydGVkOworICAgICAgICBLVVJMIG1fdXJsOworICAgICAg
ICBLVVJMIG1fYmFzZVVSTDsKKyAgICAgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAgICAg
ICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlkUmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJmb3Jt
UmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0
KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1l
cjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKFRp
bWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1fcmVx
dWVzdFRpbWVyOworICAgICAgICBUaW1lcjxQbHVnaW5WaWV3R3RrPiBtX2ludmFsaWRhdGVUaW1l
cjsKKworICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdl
VGhyb3R0bGVyOworCisgICAgICAgIHZvaWQgdXBkYXRlV2luZG93KCkgY29uc3Q7CisgICAgICAg
IHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2
b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7
CisgICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisKKyAgICAgICAg
aW50IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1f
cGFyYW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisKKyAgICAgICAgQ1N0
cmluZyBtX21pbWVUeXBlOworICAgICAgICBDU3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAg
IE5QUCBtX2luc3RhbmNlOworICAgICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAgICAg
ICBOUFdpbmRvdyBtX25wV2luZG93OworCisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0
cmVhbUd0az4gPiBtX3N0cmVhbXM7CisgICAgICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0R3RrKj4g
bV9yZXF1ZXN0czsKKworICAgICAgICBpbnQgbV9xdWlya3M7CisgICAgICAgIGJvb2wgbV9pc1dp
bmRvd2VkOworICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKKyAgICAgICAgYm9vbCBtX2lz
VmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKKworICAgICAgICBYSUQg
bV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworICAgICAgICBtdXRhYmxlIEludFJl
Y3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBs
dWctaW4KKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdpbmRv
dyByZWN0LgorCisgICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJvb2wg
bV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOworCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7
CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IG1fbWFudWFsU3RyZWFtOworCisgICAg
ICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVnaW5WaWV3OworCisgICAgICAg
IEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBh
cGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRh
IG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3Rh
bmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fy
b3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRv
IGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9u
bHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6OnN0YXJ0LgorLy8gVGhpcyBz
cGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2Fs
bCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4K
K3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNl
KQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICByZXR1
cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwordm9pZCogTlBOX01l
bUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3Zv
aWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUocHRyKTsKK30KKwordWludDMy
IE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2VzKQor
eworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBFcnJvciBOUE5fUmVx
dWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCkKK3sKKyAg
ICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMTm90
aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZv
aWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJy
b3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5n
ZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBp
bnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4s
IGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkxOb3RpZnkodXJs
LCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5f
UG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQoreworICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBs
ZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2Us
IE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkK
K3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFt
KHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBOX1dyaXRlKE5QUCBpbnN0YW5j
ZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgcmV0
dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0cmVhbSwgbGVuLCBi
dWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBT
dHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsKK30K
KworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2lu
Vmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAg
Ly8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFnZW50IHdpdGggYSBudWxsIGlu
c3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24hCisgICAgIC8vIFdlJ2QgbmVl
ZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2aW5nIGEgZnJhbWUgYXJvdW5k
LgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsKKyAKKyAgICByZXR1cm4gdmll
dy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFu
Y2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGlu
c3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOworfQorCit2b2lkIE5QTl9JbnZh
bGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKK3sKKyAg
ICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFs
aWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7Cisg
ICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30KKwor
TlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZhbHVl
KE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlhYmxl
LCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1cHBv
cnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGluc3Rh
bmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK05Q
Tl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCit7
Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQorewor
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5z
L2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyogLSotIE1vZGU6
IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0
OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAor
LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9H
UEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3Vi
amVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAi
TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
YmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgor
ICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCisgKgor
ICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4g
TWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERl
dmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0
ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0
aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBp
biB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFw
cGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93
IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJt
cyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlz
aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVy
IHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5v
dCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9m
IHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0Ug
QkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3NhZ2VzICovCisjZGVmaW5lIFhFTUJFRF9F
TUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRF
ICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFICAgICAgICAyCisj
ZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAgICAgICAgMworI2RlZmluZSBYRU1CRURf
Rk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAg
ICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NVU19ORVhUICAgICAgICAgICAgICAgNgor
I2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgWEVNQkVE
X0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAg
ICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT04gICAgICAgICAgICAgIDEw
CisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAgICAgICAgICAgMTEKKworLyogTm9uIHN0
YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAg
ICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFCX0tFWSAgICAgICAgICAgMTA5CisKKy8q
IERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICovCisjZGVmaW5lIFhFTUJFRF9GT0NVU19D
VVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAgICAg
ICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1QgICAgICAgICAgICAgICAyCisKKy8qIEZs
YWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAg
ICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBMVUdJTl9ERUJV
R19IX18KKyNkZWZpbmUgUExVR0lOX0RFQlVHX0hfXworCisjaW5jbHVkZSAibnBydW50aW1lX3By
b3h5LmgiCisKK3N0YXRpYyBjaGFyKiBlcnJvclN0cmluZ3NbXSA9IHsKKyAgICAiTm8gZXJyb3Jz
IG9jY3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9SICovCisgICAgIkVycm9yIHdpdGggbm8gc3Bl
Y2lmaWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICovCisg
ICAgIkludmFsaWQgaW5zdGFuY2UgcGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJSX0lO
VkFMSURfSU5TVEFOQ0VfRVJST1IgKi8KKyAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4iLCAv
KiBOUEVSUl9JTlZBTElEX0ZVTkNUQUJMRV9FUlJPUiAqLworICAgICJMb2FkaW5nIG9mIHBsdWct
aW4gZmFpbGVkLiIsIC8qIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLworICAgICJN
ZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUiAq
LworICAgICJQbHVnLWluIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BM
VUdJTl9FUlJPUiAqLworICAgICJQbHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFsaWQu
IiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRElSX0VSUk9SICovCisgICAgIlZlcnNpb25zIG9m
IHBsdWctaW4gYW5kIENvbW11bmljYXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5DT01Q
QVRJQkxFX1ZFUlNJT05fRVJST1IgKi8KKyAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxp
ZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BBUkFNICovCisgICAgIlVSTCBtaXNzaW5nIG9yIGludmFs
aWQuIiwgLyogTlBFUlJfSU5WQUxJRF9VUkwgKi8KKyAgICAiRmlsZSBtaXNzaW5nIG9yIGludmFs
aWQuIiwgLyogTlBFUlJfRklMRV9OT1RfRk9VTkQgKi8KKyAgICAiU3RyZWFtIGNvbnRhaW5zIG5v
IGRhdGEuIiwgLyogTlBFUlJfTk9fREFUQSAqLworICAgICJTZWVrYWJsZSBzdHJlYW0gZXhwZWN0
ZWQuIiwgLyogTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRSAqLworICAgICJVbmtub3duIGVycm9y
IGNvZGUiCit9OworCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlm
IChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIF9SUFRGMihfQ1JUX1dBUk4sICIlczogJXNcbiIsIF9f
RlVOQ1RJT05fXywgZXJyb3JTdHJpbmdzW2Vycl0pCisjZGVmaW5lIExPR19QTFVHSU5fTkVUX0VS
Uk9SKCkgX1JQVEYxKF9DUlRfV0FSTiwgIiVzOiBTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVt
cyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxl
bXMuXG4iLCBfX0ZVTkNUSU9OX18pCisjZWxzZQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJP
UigpICgodm9pZCkwKQorI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpICgodm9pZCkwKQorI2VuZGlm
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBfTlBGVU5DVElPTlNfSF8KKyNkZWZp
bmUgX05QRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9X
SU4pCisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKF9fc3Rk
Y2FsbCAqIF9uYW1lKQorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUsIF9u
YW1lKSBfdHlwZSAoKiBfbmFtZSkKKyNlbmRpZgorCit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0
VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNo
YXIqIHdpbmRvdywgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9z
dFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBj
aGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZv
aWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1JlcXVlc3RSZWFkUHJvY1B0
cikoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Cit0eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0pOwordHlwZWRlZiBpbnQz
MiAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzIgbGVuLCB2b2lkKiBidWZmZXIpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0Rlc3Ryb3lTdHJl
YW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNv
bik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fU3RhdHVzUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25z
dCBjaGFyKiBtZXNzYWdlKTsKK3R5cGVkZWYgY29uc3QgY2hhciooKk5QTl9Vc2VyQWdlbnRQcm9j
UHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQdHIp
KHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVlUHJvY1B0cikodm9pZCog
cHRyKTsKK3R5cGVkZWYgdWludDMyICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyIHNpemUp
OwordHlwZWRlZiB2b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyKShOUEJvb2wgcmVsb2Fk
UGFnZXMpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVjdFBy
b2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9J
bnZhbGlkYXRlUmVnaW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24pOwor
dHlwZWRlZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5
cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNo
YXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0
VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBlZGVm
IHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogKCpO
UE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBO
X1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShO
UFAgaW5zdGFuY2UpOworCit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVBy
b2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOworCit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7Cit0eXBl
ZGVmIHZvaWQgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyKSAoY29uc3QgTlBVVEY4
ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIgKmlkZW50aWZpZXJzKTsK
K3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyKSAoaW50
MzJfdCBpbnRpZCk7Cit0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9j
UHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBib29sICgqTlBOX0lkZW50
aWZpZXJJc1N0cmluZ1Byb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBlZGVm
IE5QVVRGOCAqKCpOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBp
ZGVudGlmaWVyKTsKKwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0
cikgKE5QUCwgTlBDbGFzcyAqYUNsYXNzKTsKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX1JldGFp
bk9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxl
YXNlT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRlZiBib29sICgqTlBOX0lu
dm9rZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbWV0aG9k
TmFtZSwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJpYW50
ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyKSAoTlBQ
IG5wcCwgTlBPYmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdD
b3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRlUHJv
Y1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFyaWFu
dCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9HZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAg
bnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50
ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5QUCBu
cHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZh
cmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIpIChO
UFAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVm
IGJvb2wgKCpOUE5fSGFzTWV0aG9kUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwg
TlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVByb3Bl
cnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9iamVj
dCAqb2JqLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwordHlwZWRlZiBib29sICgqTlBOX0VudW1l
cmF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAqKmlk
ZW50aWZpZXIsIHVpbnQzMl90ICpjb3VudCk7CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdQ
cm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1vZGUs
IGludDE2IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2
ZWQpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QU2F2ZWREYXRhKiogc2F2ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93UHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAo
Kk5QUF9OZXdTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgTlBT
dHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0eXBlKTsKK3R5cGVkZWYg
TlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVh
bSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBQX1N0cmVhbUFz
RmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciog
Zm5hbWUpOwordHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90
IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7Cit0eXBlZGVmIGludDE2ICgqTlBQ
X0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBlZGVm
IHZvaWQgKCpOUFBfVVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBV
UkwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3Ig
KCpOUFBfR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwordHlw
ZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Qcm9jUHRyKSh2b2lkKTsK
KwordHlwZWRlZiB2b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKK3R5cGVk
ZWYgdm9pZCogICBKUklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMgcmlnaHQgbm93CisKK3R5
cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVp
bnQxNiB2ZXJzaW9uOworICAgIAorICAgIE5QTl9HZXRVUkxQcm9jUHRyIGdldHVybDsKKyAgICBO
UE5fUG9zdFVSTFByb2NQdHIgcG9zdHVybDsKKyAgICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRyIHJl
cXVlc3RyZWFkOworICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUE5f
V3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QTl9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95
c3RyZWFtOworICAgIE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKKyAgICBOUE5fVXNlckFnZW50
UHJvY1B0ciB1YWdlbnQ7CisgICAgTlBOX01lbUFsbG9jUHJvY1B0ciBtZW1hbGxvYzsKKyAgICBO
UE5fTWVtRnJlZVByb2NQdHIgbWVtZnJlZTsKKyAgICBOUE5fTWVtRmx1c2hQcm9jUHRyIG1lbWZs
dXNoOworICAgIE5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxvYWRwbHVnaW5zOworICAgIE5Q
Tl9HZXRKYXZhRW52UHJvY1B0ciBnZXRKYXZhRW52OworICAgIE5QTl9HZXRKYXZhUGVlclByb2NQ
dHIgZ2V0SmF2YVBlZXI7CisgICAgTlBOX0dldFVSTE5vdGlmeVByb2NQdHIgZ2V0dXJsbm90aWZ5
OworICAgIE5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90aWZ5OworICAgIE5QTl9H
ZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBOX1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1
ZTsKKyAgICBOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRhdGVyZWN0OworICAgIE5Q
Tl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0ciBpbnZhbGlkYXRlcmVnaW9uOworICAgIE5QTl9Gb3Jj
ZVJlZHJhd1Byb2NQdHIgZm9yY2VyZWRyYXc7CisgICAgCisgICAgTlBOX0dldFN0cmluZ0lkZW50
aWZpZXJQcm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXI7CisgICAgTlBOX0dldFN0cmluZ0lkZW50
aWZpZXJzUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKKyAgICBOUE5fR2V0SW50SWRlbnRp
ZmllclByb2NQdHIgZ2V0aW50aWRlbnRpZmllcjsKKyAgICBOUE5fSWRlbnRpZmllcklzU3RyaW5n
UHJvY1B0ciBpZGVudGlmaWVyaXNzdHJpbmc7CisgICAgTlBOX1VURjhGcm9tSWRlbnRpZmllclBy
b2NQdHIgdXRmOGZyb21pZGVudGlmaWVyOworICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQ
dHIgaW50ZnJvbWlkZW50aWZpZXI7CisgICAgTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIgY3JlYXRl
b2JqZWN0OworICAgIE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFpbm9iamVjdDsKKyAgICBO
UE5fUmVsZWFzZU9iamVjdFByb2NQdHIgcmVsZWFzZW9iamVjdDsKKyAgICBOUE5fSW52b2tlUHJv
Y1B0ciBpbnZva2U7CisgICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1bHQ7
CisgICAgTlBOX0V2YWx1YXRlUHJvY1B0ciBldmFsdWF0ZTsKKyAgICBOUE5fR2V0UHJvcGVydHlQ
cm9jUHRyIGdldHByb3BlcnR5OworICAgIE5QTl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJvcGVy
dHk7CisgICAgTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKKyAgICBO
UE5fSGFzUHJvcGVydHlQcm9jUHRyIGhhc3Byb3BlcnR5OworICAgIE5QTl9IYXNNZXRob2RQcm9j
UHRyIGhhc21ldGhvZDsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFz
ZXZhcmlhbnR2YWx1ZTsKKyAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRpb247
CisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFibGVk
c3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBzZW5h
YmxlZHN0YXRlOworICAgIE5QTl9FbnVtZXJhdGVQcm9jUHRyIGVudW1lcmF0ZTsKK30gTlBOZXRz
Y2FwZUZ1bmNzOworCit0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7CisgICAgdWludDE2
IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgTlBQX05ld1Byb2NQdHIgbmV3cDsKKyAg
ICBOUFBfRGVzdHJveVByb2NQdHIgZGVzdHJveTsKKyAgICBOUFBfU2V0V2luZG93UHJvY1B0ciBz
ZXR3aW5kb3c7CisgICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5QUF9E
ZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QUF9TdHJlYW1Bc0ZpbGVQ
cm9jUHRyIGFzZmlsZTsKKyAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsKKyAg
ICBOUFBfV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7Cisg
ICAgTlBQX0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKKyAgICBOUFBfVVJMTm90aWZ5UHJvY1B0
ciB1cmxub3RpZnk7CisgICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKKyAgICBOUFBfR2V0VmFs
dWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7Cit9
IE5QUGx1Z2luRnVuY3M7CisKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsKK3R5
cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dldE1JTUVEZXNjcmlwdGlv
bkZ1bmNQdHIpKHZvaWQpOworCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCit0eXBlZGVmIHZvaWQg
ICAgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOwor
dHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2lu
RnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNw
bHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkzOSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRh
YjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBC
TE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICog
VGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96
aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJB
TlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vu
c2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGlt
aXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0
aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVt
cywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJl
IENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHks
IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9m
CisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBs
YXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGlu
c3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVy
IHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2Ug
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5k
aWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUg
YW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25z
IHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisg
KiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0
aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioq
ICovCisgCisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQg
Y29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisj
aW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9n
ZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUg
PHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBz
dHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+Cisj
aW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1
ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRl
YnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVj
dGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAz
MAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJp
bkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAg
ICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194
dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAg
ICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7
CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3Qg
ICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3du
ICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3Vh
bCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNv
bG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRl
cHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICog
eHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93
IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhl
aWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgg
KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNs
aWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCog
eHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0
IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVy
IChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9o
YW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2
ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAo
V2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAg
IHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRy
ZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1v
dmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGlj
IHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVy
cm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0
cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7Citz
dGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAo
Km9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBp
bnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFz
cyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNw
bGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0
YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMg
Z2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAg
ICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5n
X3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRp
YyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKwor
ICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAg
R0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sK
KyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50
cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNw
bGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1h
c2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAg
IAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNl
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50Owor
ICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBw
bGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisK
KyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9y
IGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5k
IG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBm
b3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5j
ZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAq
LworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5
KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisK
KyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGlj
IEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAg
eHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291
cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMg
Z2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9k
YXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQg
ZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRh
OworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8q
IFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nl
c3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1l
cnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBw
IGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAg
WHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMg
YSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZl
IG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3Mt
LSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxs
KTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9p
ZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90
eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAg
ICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAg
ICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykg
Z3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0
YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVz
ZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAg
fTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwg
Jnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2
b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0
a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xh
c3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7
CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRf
Y2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJl
YWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpF
Q1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rl
c3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0Ymlu
KQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cg
PSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0Ymlu
LT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQg
KndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBn
ZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3Rr
X3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtf
SVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisg
IC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5k
b3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQp
OworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIs
IHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0
aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsK
KworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1Mo
cGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNs
aWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAor
ICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRi
aW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0g
WHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7
CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0
byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCks
IHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChH
ZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJp
bjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5V
TEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgh
eHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFs
bGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4t
PnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRi
aW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlz
dWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1h
cCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJp
bi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQs
IHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNp
ZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3Bs
YXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAg
ICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBm
aXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFp
bmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNu
dW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBl
dmVudCBsb29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtf
aW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3Vy
Y2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3Mp
IHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRf
cHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5f
cmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5D
b250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1i
ZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRk
aXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAg
IHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9m
ZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdf
bWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3
ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVy
X2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAo
R3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAg
ICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291
bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAg
eHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRn
ZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOwor
ICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2Rh
dGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VU
ICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4
dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+
eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2lu
ZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAor
Z3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7
CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7
CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHBy
aW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRo
LCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4t
PndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZh
bHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsK
KyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWln
aHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1
ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQg
dG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAg
ICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0
aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAg
YWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJp
bl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47Cisg
IEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtf
eHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95
KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0Ymlu
ID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKwor
ICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdU
S19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYo
eHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9j
bGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9k
ZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRp
ZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZf
ZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2Jq
ZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50
IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOwor
ICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ug
b3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcg
d2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhl
IG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBt
YWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgo
R01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9y
ZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJf
aWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RL
X09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisq
IEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGll
bnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9j
bGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFs
ICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAg
ICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsK
KyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisK
KyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93
aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGll
bnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7Cisg
IHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisg
IGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlh
bGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsK
KyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9j
b250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9j
b250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNw
bGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54
dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFs
OworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRl
cHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cwor
KiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50
ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAg
ICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAorewor
ICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAg
ICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVm
IERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYK
KyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIi
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdl
dENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlz
cGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNs
aWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2lu
ZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0
KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBY
dFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZh
Q3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5o
ZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3
aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0
dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50
LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xp
ZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lk
dGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAg
WFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93
ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0g
ZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5p
dGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0g
NgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAg
ICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7
CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAg
ICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRn
ZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4
dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQp
LCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGls
ZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGll
bnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhh
bmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAg
ICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50
X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lk
Z2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRv
blJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZB
TFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCog
eHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5y
ZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAg
ICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJl
Z2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVz
aCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53
aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29u
ZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQt
PnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJl
YWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAg
ICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBp
Zih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xp
ZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsK
KyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRf
Y2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorewor
ICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0
b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZl
clsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVy
WzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRX
aW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMy
LAorICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAg
ICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGll
bnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVu
dF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNl
IFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRP
V19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdl
dCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNl
IFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisg
ICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5k
aWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVH
X1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIp
OworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhF
TUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNl
dCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50
LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAg
ICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4
ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIp
OworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAg
fQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRf
d2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWct
PmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxk
X3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAg
ICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50
ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2Up
OworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQg
b2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVu
dF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQg
KmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsK
KyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdl
OgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhj
bGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlz
cGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9t
ZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90
aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAg
IGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8g
KHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1i
ZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURf
UkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3Vz
T3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJ
TgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZl
bnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENs
aWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2Us
CisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAg
IGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAg
WEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0
KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7
CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50
LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4
ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZh
bHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRh
dGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOwor
ICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5k
YXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisK
KyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRN
YXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9
IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5k
X3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0K
K30KKworc3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlz
cGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJv
ci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAor
dHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJy
b3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRp
YyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVy
KG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFw
cGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29k
ZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lcigg
V2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3Bs
YXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRh
OworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQor
ICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2lu
ZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRn
ZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxk
KQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEp
OworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAg
eHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50
ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdp
ZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cp
OworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3Ry
ZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJl
cGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICov
CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAq
LworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAK
KyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdl
dCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAg
c2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5
cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3
LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBs
b25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQg
ZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhY
dERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91
cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNr
OworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3co
dyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3
LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJl
bGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAg
ICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAg
ICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9p
ZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRh
KQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2
ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ss
IFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRf
Zm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0
YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwg
WHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9v
dCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3Bs
YXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRy
ZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9y
ZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9j
dXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBp
ZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGls
ZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1
bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyAr
K2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5b
aV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSgg
Y2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICBy
ZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNpbmNs
dWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUg
Im5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdlR3RrOjp+UGx1Z2luUGFja2FnZUd0aygpCit7Cisg
ICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKK30KKworUGx1Z2luUGFja2FnZUd0azo6UGx1Z2luUGFj
a2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQor
ICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZp
ZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENv
dW50KDApCit7CisgICAgaW50IHBvcyA9IG1fcGF0aC5kZXByZWNhdGVkU3RyaW5nKCkuZmluZFJl
dignLycpOworCisgICAgbV9maWxlTmFtZSA9IG1fcGF0aC5yaWdodChtX3BhdGgubGVuZ3RoKCkg
LSBwb3MgLSAxKTsKKworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmZldGNoSW5mbygpCit7
CisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGdj
aGFyKiB0eXBlcyA9IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7CisgICAgZ2NoYXIqKiBtaW1l
RGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAgICBmb3IgKGludCBpID0gMDsg
bWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7CisgICAgICAgIGdjaGFyKiog
bWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWVEZXNjc1tpXSwgIjoiLCAzKTsKKworICAgICAgICBT
dHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVEYXRhWzJdKTsKKyAgICAg
ICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0YVsxXSwgIiwiLCAtMSk7
CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0VmVjdG9yOworICAgICAgICBmb3IgKGludCBq
ID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQorICAgICAgICAgICAgZXh0VmVjdG9yLmFwcGVuZChT
dHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0pKTsKKworICAgICAgICBtX21pbWVUb0V4dGVu
c2lvbnMuYWRkKG1pbWVEYXRhWzBdLCBleHRWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rlc2Ny
aXB0aW9ucy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgICBnX3N0cmZy
ZWV2KGV4dGVuc2lvbnMpOworICAgICAgICBnX3N0cmZyZWV2KG1pbWVEYXRhKTsKKyAgICB9Cisg
ICAgZ19zdHJmcmVldihtaW1lRGVzY3MpOworCisgICAgY2hhciogYnVmZmVyID0gMDsKKyAgICBO
UEVycm9yIGVyciA9IG1fTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAmYnVm
ZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX25hbWUgPSBi
dWZmZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IG1fTlBQX0dldFZhbHVlKDAsIE5Q
UFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVS
Ul9OT19FUlJPUikKKyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHVubG9h
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmxvYWQo
KQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3Blbigo
bV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1f
bW9kdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsK
KworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJvciBu
cEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiLCAo
dm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJO
UF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZtX05QX0dldE1JTUVEZXNjcmlwdGlvbik7
CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iLCAodm9pZCoqKSZt
X05QUF9TaHV0ZG93bik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0VmFs
dWUiLCAodm9pZCoqKSZtX05QUF9HZXRWYWx1ZSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUg
fHwgIW1fTlBfR2V0TUlNRURlc2NyaXB0aW9uIHx8ICFtX05QUF9TaHV0ZG93biB8fCAhbV9OUFBf
R2V0VmFsdWUpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVu
Y3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0g
c2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVv
ZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJT
SU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAg
bV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNz
LnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0
cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3Jp
dGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFt
OworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2Vy
RnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxv
YyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZy
ZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9i
cm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2Vy
RnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1
bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVl
ID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBO
X0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBO
UE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5Q
Tl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEph
dmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7
CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9w
dXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0
ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxl
YXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dl
dEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0g
X05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVu
dGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3Jl
YXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlu
b2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9i
amVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBf
TlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZv
a2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAg
bV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJv
d3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1
bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0
ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVy
YXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJv
d3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1
cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZCgpCit7CisgICAg
aWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoLS1tX2xvYWRDb3Vu
dCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fTlBQX1NodXRkb3duKCk7CisKKyAgICB1
bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxv
YWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworICAgIEFTU0VSVChtX21vZHVs
ZSk7CisKKyAgICBnX21vZHVsZV9jbG9zZSAobV9tb2R1bGUpOworCisgICAgbV9pc0xvYWRlZCA9
IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQ
YWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCit7
CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlR3RrKHBh
dGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7Cisg
ICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2VHdGs6Omhhc2go
KSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1fcGF0
aC5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPiho
YXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQorCiti
b29sIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGEsIGNv
bnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9
PSBiLm1fZGVzY3JpcHRpb247Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luU3RyZWFtR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1HdGsu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQ
bHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3Vi
cmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVjYXVz
ZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8vIGFu
ZCB0aGlzIHdheSB3ZSB3b24ndCBjbGFzaCB3aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50IFdl
YlJlYXNvbk5vbmUgPSAtMjsKKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+IFN0
cmVhbU1hcDsKK3N0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBTdHJl
YW1NYXAgc3RhdGljU3RyZWFtczsKKyAgICByZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKworUGx1
Z2luU3RyZWFtR3RrOjpQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldywg
RnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgIDogbV9yZXNvdXJjZVJl
cXVlc3QocmVzb3VyY2VSZXF1ZXN0KQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1
Z2luVmlldyhwbHVnaW5WaWV3KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAg
LCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fbG9hZE1hbnVh
bGx5KGZhbHNlKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1CZWZvcmVTdGFydGVkKQorICAg
ICwgbV9kZWxheURlbGl2ZXJ5VGltZXIodGhpcywgJlBsdWdpblN0cmVhbUd0azo6ZGVsYXlEZWxp
dmVyeVRpbWVyRmlyZWQpCisgICAgLCBtX2RlbGl2ZXJ5RGF0YSgwKQorICAgICwgbV90ZW1wRmls
ZUhhbmRsZSgwKQorICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5WaWV3LT5wbHVnaW4oKS0+cGx1
Z2luRnVuY3MoKSkKKyAgICAsIG1faW5zdGFuY2UocGx1Z2luVmlldy0+aW5zdGFuY2UoKSkKK3sK
KyAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKKworICAgIG1fc3RyZWFtLnVybCA9IDA7CisgICAg
bV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVh
bS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOworICAgIG1fc3RyZWFtLmxh
c3Rtb2RpZmllZCA9IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5j
ZSk7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6flBsdWdpblN0cmVhbUd0aygpCit7CisgICAgQVNT
RVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xvYWRl
cik7CisKKyAgICBpZiAobV9zdHJlYW0udXJsKQorICAgICAgICBmcmVlKChjaGFyKiltX3N0cmVh
bS51cmwpOworCisgICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOworfQorCit2b2lkIFBs
dWdpblN0cmVhbUd0azo6c3RhcnQoKQoreworICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOwor
CisgICAgbV9sb2FkZXIgPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKG1fZnJh
bWUsIHRoaXMpOworCisgICAgbV9sb2FkZXItPnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2UpOwor
ICAgIG1fbG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hZGRQbHVnSW5TdHJlYW1Mb2FkZXIobV9s
b2FkZXIuZ2V0KCkpOworICAgIG1fbG9hZGVyLT5sb2FkKG1fcmVzb3VyY2VSZXF1ZXN0KTsKK30K
Kwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUgPSBT
dHJlYW1TdG9wcGVkOworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFTU0VS
VCghbV9sb2FkZXIpOworCisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9
IG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBBU1NF
UlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2Fk
aW5nTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFp
blJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IobV9yZXNvdXJj
ZVJlcXVlc3QpKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbG9hZGVy
KSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIgPSAwOwor
ICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0U3RyZWFtKCkKK3sKKyAgICBB
U1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGNvbnN0
IEtVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOworCisgICAgLy8g
U29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNz
ZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9ybWF0IHVzZWQgd2hlbiBy
ZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYgKHJlc3BvbnNlVVJMLnN0cmluZygpLnN0YXJ0c1dp
dGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1
cChyZXNwb25zZVVSTC5kZWNvZGVfc3RyaW5nKHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmco
KSkudXRmOCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJl
c3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCkpOworICAgIAorICAgIENTdHJpbmcg
bWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisgICAg
CisgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25z
ZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2Uu
aXNIVFRQKCkpIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAg
ICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5k
KCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jl
c291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3Rl
cnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNl
Y29uZC5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIp
J1xuJyk7CisgICAgICAgIH0KKworICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0
cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKworICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNv
ZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGgg
dG8gdGhlIHBsdWdpbiwKKyAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRo
ZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAv
LyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJl
c3BvbnNlIGV4cGVjdGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4K
KyAgICAgICAgU3RyaW5nIGNvbnRlbnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoIkNvbnRlbnQtRW5jb2RpbmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5j
b2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAg
ICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5o
ZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAg
bV9zdHJlYW0ubmRhdGEgPSB0aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENv
bnRlbnRMZW5ndGgsIDBMTCk7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNvdXJj
ZVJlc3BvbnNlLmxhc3RNb2RpZmllZERhdGUoKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0g
bV9ub3RpZnlEYXRhOworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9v
ZmZzZXQgPSAwOworICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3Rl
Y3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUg
bmV3c3RyZWFtIGhhbmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRo
aXMpOworCisgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2lu
c3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2Us
ICZtX3RyYW5zZmVyTW9kZSk7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJv
eWVkIGluIHRoZSBjYWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24g
IT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3N0cmVh
bVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJP
UikKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisKKyAgICBpZiAobV90
cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYg
KChtX3RlbXBGaWxlSGFuZGxlID0gdG1wZmlsZSgpKSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcg
dGhlIHN0cmVhbQorICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIp
OworfQorCitOUFAgUGx1Z2luU3RyZWFtR3RrOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3Ry
ZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sK
KyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVzdHJv
eVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6
OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVhc29uID0gcmVhc29u
OworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAgIC8vIFN0b3AgYW55
IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2ZXJ5
RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBlbHNl
IGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgeworICAg
ICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kg
dGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0cmVh
bSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbSgpCit7CisgICAg
aWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFtX2Rl
bGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgaWYgKG1f
dGVtcEZpbGVIYW5kbGUgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKG1fdGVtcEZpbGVIYW5kbGUp
OworCisgICAgaWYgKG1fc3RyZWFtLm5kYXRhICE9IDApIHsKKyAgICAgICAgaWYgKG1fcmVhc29u
ID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5z
ZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX3BhdGgu
aXNOdWxsKCkpOworCisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5j
ZSwgJm1fc3RyZWFtLCBtX3BhdGguZGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIE5QRXJy
b3IgbnBFcnI7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbSht
X2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICBtX3N0cmVhbS5uZGF0
YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikKKyAgICAgICAgbV9w
bHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgp
LmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworCisg
ICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0U3Ry
ZWFtIGNhbiBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1H
dGs+IHByb3RlY3QodGhpcyk7CisgICAgaWYgKCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaXNjb25uZWN0U3RyZWFtKHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3ID0g
MDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRp
bWVyPFBsdWdpblN0cmVhbUd0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9k
ZWxheURlbGl2ZXJ5VGltZXIpOworCisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURhdGEp
OworICAgIAorICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNlTG9h
ZGVyIG9uIGVycm9yIHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKwor
ICAgIGlmICghbV9zdHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEt
PnNpemUoKTsKKyAgICBpbnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIHdoaWxl
ICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMiBkZWxp
dmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJl
YW0pOworCisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1f
ZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVy
eUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBp
bnQzMiBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRhdGEg
PSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAgICAg
ICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3Bs
dWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRhTGVu
Z3RoLCAodm9pZCopZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDApIHsK
KyAgICAgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJS
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAgICAgICAg
ICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWxp
dmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0b3Rh
bEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8
IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRlcyA9IHRvdGFsQnl0
ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92ZShtX2RlbGl2ZXJ5
RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJl
ZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShy
ZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2ZXJ5
RGF0YS0+cmVzaXplKDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5v
bmUpCisgICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9CisgICAgfSAK
K30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtV
UkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBkaWRS
ZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFp
biIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIsICIiKSk7CisKKyAgICBpZiAobV9zdHJlYW1T
dGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRSZWNlaXZl
RGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOworICAg
IGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRS
ZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7
CisKKyAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0YXJ0U3RyZWFt
KCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAw
KTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKyAgICAKKyAg
ICBpZiAoIW1fZGVsaXZlcnlEYXRhKQorICAgICAgICBtX2RlbGl2ZXJ5RGF0YS5zZXQobmV3IFZl
Y3RvcjxjaGFyPik7CisKKyAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7
CisgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKKyAgICBtZW1j
cHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CisKKyAg
ICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEgaXQg
Y291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgorICAgIFJlZlB0
cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2Zlck1v
ZGUgIT0gTlBfQVNGSUxFT05MWSkKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKworICAgIGlmICht
X3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgbV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxM
KSB7CisgICAgICAgIGludCB3cml0dGVuOworICAgICAgICBib29sIHJldHZhbCA9IGZhbHNlOwor
CisgICAgICAgIGlmICghcmV0dmFsIHx8IGZwdXRzKGRhdGEsIG1fdGVtcEZpbGVIYW5kbGUpIDw9
IDApCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJS
KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRGYWlsKE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIEFT
U0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVz
dHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3Rr
OjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIpCit7
CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3Rh
dGUgPT0gU3RyZWFtU3RhcnRlZCk7CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95
U3RyZWFtKE5QUkVTX0RPTkUpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBp
bmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFu
ZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5T
RSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgor
ICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExp
Y2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJ
bml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lz
dGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2gg
Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxl
IGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2Yg
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0
aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwg
aW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRl
CisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBM
LCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoq
KioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVmaW5lIF9fR1RLX1hUQklO
X0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5z
aWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2lm
ZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisjaWZkZWYgX0lNUExfR1RL
WFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19FWFBPUlRfKHR5cGUpCisj
ZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0eXBlKQorI2VuZGlm
CisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQorI2VuZGlmCisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwor
dHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0
QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQRV9YVEJJTiAgICAgICAg
ICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19YVEJJTihvYmop
ICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW4pKQor
I2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1Nf
Q0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5lIEdUS19JU19YVEJJTihv
YmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCisjZGVmaW5lIEdU
S19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgoa2xh
c3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBF
X1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVudDsKKworc3RydWN0IF9Y
dENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRvcF93aWRnZXQ7ICAg
IC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dpZGdldDsgIC8qIFRo
ZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAgaW50CQl4dGRlcHRo
OworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2luZG93OworfTsKKworc3Ry
dWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0OworICBHZGtXaW5kb3cg
ICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRpc3BsYXk7ICAgICAgICAv
KiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAgICB4dHdpbmRvdzsgICAg
ICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAgICAgICAgeCwgeTsKKyAg
Z2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJIHh0Y2xpZW50OyAgICAg
ICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0cnVjdCBfR3RrWHRCaW5D
bGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9OworCitHVEtYVEJJTl9B
UEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7CitHVEtYVEJJTl9BUEko
R3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3Ry
aW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlv
biAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtYVEJJTl9BUEkodm9pZCkg
ICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCk7CisK
K3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0aW9ucyAgdHJhbnNsYXRp
b25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIgICAgKi8KKyAgICBY
dEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9jZWR1cmUgYmluZGluZ3Mg
Zm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7
ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8KKyAgICB1bnNpZ25lZCBs
b25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAgCisKK3R5cGVkZWYgc3Ry
dWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7ICAgICAgICAgICAgICAg
LyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisgICAgV2lkZ2V0Q2xhc3Mg
ICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRnZXQncyBDbGFzc1JlYyAg
ICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAgICAgICAgLyogcGFyZW50
IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFtZSAgICAgICAgIHhybV9u
YW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVhcmtpZmllZCAgICovCisg
ICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyogbWFya2VkIGZvciBkZXN0
cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3QgIGRlc3Ryb3lfY2FsbGJh
Y2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVkICovCisgICAgWHRQb2lu
dGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWludCByZWNvcmQgICAgICAg
ICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAgICAgICAgICAgICAgLyog
d2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAg
IHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMgICAgICAgICAgICAgICAg
ICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAgICAgLyogd2luZG93IGJv
cmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIG1hbmFnZWQ7
ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAgICAgICovCisgICAg
Qm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMgd2lkZ2V0IHNlbnNpdGl2
ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFuY2VzdG9yX3NlbnNpdGl2
ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICovCisgICAgWHRFdmVudFRh
YmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBldmVudCBkaXNwYXRjaGVy
ICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAgICAgICAgICAgLyogdHJh
bnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRUcmFuc2xhdGlvbnMgIGFj
Y2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRpb25zICAgICAgICAgICov
CisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAgLyogd2luZG93IGJvcmRl
ciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJvcmRlcl9waXht
YXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAgICAgICovCisgICAgV2lk
Z2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBvZiBwb3B1cHMgICAgICAg
ICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9wb3B1cHM7ICAgICAgICAg
LyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisgICAgU3RyaW5nICAgICAg
ICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgICAgICAgICAg
ICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAgICAgICAgLyogd2luZG93
J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3JtYXAgICAgICAgIGNvbG9y
bWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg
ICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyogd2luZG93IElEICAgICAg
ICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIGRlcHRoOyAgICAgICAg
ICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAgICovCisgICAgUGl4ZWwg
ICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJhY2tncm91bmQgcGl4ZWwg
ICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91bmRfcGl4bWFwOyAgLyog
d2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAgQm9vbGVhbiAgICAgICAg
IHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBhbmQgbm90IG9jY2x1ZGVk
PyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7LyogbWFwIHdpbmRv
dyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0OworCit0eXBlZGVmIHN0cnVj
dCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0gV2lkZ2V0UmVjLCBDb3Jl
UmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAq
LworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblN0cmVhbUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbUd0a19ICisjZGVmaW5lIFBsdWdpblN0cmVh
bUd0a19ICisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisKKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICBlbnVtIFBs
dWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwgU3Ry
ZWFtU3RvcHBlZCB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrIDogcHVibGljIFJlZkNv
dW50ZWQ8UGx1Z2luU3RyZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmll
d0d0ayosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0
aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKworICAg
ICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFsbHko
Ym9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0KKwor
ICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBj
b25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAgICAgdm9pZCBzZW5kSmF2
YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiByZXN1
bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24p
OworCisgICAgICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKyAgICBw
cml2YXRlOgorICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZvaWQgZGVzdHJv
eVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOworCisgICAg
ICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAgUmVzb3VyY2VS
ZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7Cisg
ICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7CisgICAg
ICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgdm9pZCogbV9ub3RpZnlE
YXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1Z2luU3Ry
ZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsKKwor
ICAgICAgICBUaW1lcjxQbHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxpdmVyeVRpbWVyOworICAg
ICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0az4q
KTsKKworICAgICAgICBPd25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVsaXZlcnlEYXRhOworCisg
ICAgICAgIEZJTEUqIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5G
dW5jcyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIHVp
bnQxNiBtX3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzIgbV9vZmZzZXQ7CisgICAgICAgIENT
dHJpbmcgbV9oZWFkZXJzOworICAgICAgICBDU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgTlBSZWFz
b24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOworICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
UGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVnaW5QYWNrYWdl
R3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNs
dWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4g
TUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGsgOiBwdWJs
aWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVibGljOgorICAgICAgICB+
UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZUd0ayogY3Jl
YXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVk
KTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
OyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3Jp
cHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxl
TmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVz
Y3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAgICAg
ICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYg
YSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7Cisg
ICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7
IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblBh
Y2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7
CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOwor
ICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247
CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAg
ICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21p
bWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4
dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7CisgICAgICAgIHRpbWVfdCBt
X2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIG1f
TlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQ
X1NodXRkb3duOworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1fTlBQX0dldFZhbHVlOwor
ICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0c2NhcGVG
dW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VH
dGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFzaCgpOyB9
CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdl
R3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnBy
ZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFj
a2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8
UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYikg
eyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQor
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRo
aXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJs
ZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4K
Ky8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJh
aXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2gsIEhh
c2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7CisgICAgICAg
IHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3Rr
Pik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2lu
UGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+
IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVk
ZSAiUGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFi
YXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3Rh
dGljIFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdp
bnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAgICAg
cGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5Q
YXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVy
biBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdpblBh
dGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgp
OworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVzaCgp
Cit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENo
YW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAg
IG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMu
aXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisg
ICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0
KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVu
bG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0
KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lu
cy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3
UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMu
YWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQu
aXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQg
PSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1p
biBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdp
bnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVn
aW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBl
cworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQg
PSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRv
RGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVz
Y3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAg
ICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQ
bHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAorewor
ICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhzKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZl
IHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNl
dCBwbHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsKKyAg
ICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChpdC0+
dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwpOworICAgICAgICBpZiAoZGlyKSB7CisgICAgICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgd2hpbGUgKChuYW1lID0gZ19kaXJfcmVh
ZF9uYW1lKGRpcikpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgobmFt
ZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2NoYXIqIGZp
bGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0YSgpLCBuYW1lLCBOVUxM
KTsKKyAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luUGFja2FnZSA9
IFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoZmlsZW5hbWUsIHRpbWUoTlVMTCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOworICAgICAgICAgICAgICAgICAgICBn
X2ZyZWUoZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGdfZGlyX2Nsb3NlKGRpcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
cGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJp
bmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZlcnNp
b247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zOwor
ICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAg
ICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5n
dGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09
ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJz
dHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2ZXJz
aW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVuZFBv
cyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0dXJu
cyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5saW5l
IGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3Qg
VmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2
ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlmICh2
ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhl
IHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFs
c2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNl
R3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwor
CisgICAgZ2NoYXIqIGhvbWVQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2Rpcigp
LCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChob21lUGF0
aCk7CisgICAgZ19mcmVlKGhvbWVQYXRoKTsKKworICAgIGNvbnN0IGdjaGFyKiBtb3pQYXRoID0g
Z19nZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQYXRoKSB7CisgICAgICAg
IGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgsICI6IiwgLTEpOworCisg
ICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKyAgICAgICAgICAg
IHBhdGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAgZ19mcmVlKHBsdWdpblBh
dGhzKTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxhL3Bs
dWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOwor
CisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjppc01JTUVU
eXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAoreworICAgIHJldHVy
biAhbWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1p
bWVUeXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgU3RyaW5nIGtleSA9
IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0
KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIHJldHVy
biAoKml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2Fn
ZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcm
IGV4dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1
Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Bs
dWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVUb0V4dGVuc2lv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMo
KS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQg
IT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmZp
bmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreyAgIAor
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBpZiAoIW1pbWVUeXBlLmlz
TnVsbCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Cisg
ICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSB1cmwucGF0aCgp
OworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJpbmcocGF0aC5yZXZlcnNl
RmluZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yRXh0ZW5zaW9uKGV4
dGVuc2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3Vu
ZCwgcXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAgICAgLy8gY29ycmVzcG9u
ZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9CisK
K1BsdWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1l
KiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxv
YWRNYW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSBmaW5kUGx1Z2lu
KHVybCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSBy
ZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgaWYgKCFwbHVn
aW4gJiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5
cGUpOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdHdGsocGFyZW50RnJhbWUs
IHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWlt
ZVR5cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdJ
bkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkluZm8q
IFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWdu
ZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRhdGFiYXNlR3Rr
OjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5J
bmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOwor
CisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0gcGFj
a2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24o
KTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25z
ID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xhc3NJ
bmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVzLmFwcGVu
ZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAg
ICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZv
OworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlm
IChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAgICAg
ICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVn
aW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxs
ZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmluZyBQbHVnSW5JbmZvU3Rv
cmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNl
R3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsK
K30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKK3sKKyAgICBQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CisKKyAgICBp
ZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdl
cworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyODgwOCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTEgQEAgREVQRU5EUEFUSCArPSBl
ZGl0aW5nL3F0IGhpc3RvcnkvcXQgbG9hZAogfQogCiBndGstcG9ydCB7Cit4MTE6cGx1Z2lucyB7
CisgICAgREVGSU5FUyArPSBYUF9VTklYCisgICAgTElCUyArPSAtbFh0Cit9CisKICAgICBJTkNM
VURFUEFUSCArPSBcCiAgICAgJCRQV0QvcGxhdGZvcm0vZ3RrIFwKICAgICAkJFBXRC9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsgXApAQCAtMTY3LDYgKzE3Miw3IEBAIGd0ay1wb3J0IHsKICAgICBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsgXAogICAgIHBhZ2UvZ3Rr
IFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydCBc
CiAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiB9CkBAIC04NDMsMTMgKzg0OSwzOSBAQCBTT1VS
Q0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKIAogZ3RrLXBvcnQgeworICAhcGx1
Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9QTFVHSU5TPTEKKyAgfQorICBIRUFE
RVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oIFwKKyAgICBwbHVn
aW5zL2d0ay9QbHVnaW5EZWJ1Zy5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3Rr
LmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lk
dGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERh
dGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJh
c2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisgICAg
cGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNwcAorCisgIHgxMTpwbHVnaW5z
IHsKKyAgICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCisgICAg
cGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaCBcCisgICAgcGx1Z2lucy9ndGsveGVtYmVkLmgKKwor
ICAgIFNPVVJDRVMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0KIAog
cXQtcG9ydCB7CkBAIC05NDksNiArOTgxLDcgQEAgcXQtcG9ydCB7CiB9CiAKIGd0ay1wb3J0IHsK
KyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3RrCiAgICAgSEVBREVSUyAr
PSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwKICAg
ICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oIFwKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVH
dGsuY3BwCShyZXZpc2lvbiAyODgwOCkKKysrIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMjIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKIAorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1
ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdElu
c3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQoreworICAvL3JldHVybiBLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxhbmd1YWdlSW5zdGFuY2UoS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2U6OkNMYW5ndWFnZSwgd2lkZ2V0LT5ndGtXaWRnZXQoKSwgYmluZGluZ1Jv
b3RPYmplY3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPih3aWRn
ZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKK30KKwogdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNj
cmlwdE9iamVjdHMoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAyODgwOCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
IwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50
U1ZOUmV2aXNpb247CiBteSAkb3NYVmVyc2lvbjsKIG15ICRpc1F0OwogbXkgJGlzR3RrOworbXkg
JGVuYWJsZUd0a1BsdWdpbnM7CiBteSAkaXNXeDsKIAogIyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1
cHBvcnQKQEAgLTQ4MCw2ICs0ODIsMjMgQEAgc3ViIGRldGVybWluZUlzR3RrKCkKICAgICB9CiB9
CiAKK3N1YiBlbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICBkZXRlcm1pbmVFbmFibGVHdGtQbHVn
aW5zKCk7CisgICAgcmV0dXJuICRlbmFibGVHdGtQbHVnaW5zOworfQorCitzdWIgZGV0ZXJtaW5l
RW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgcmV0dXJuIGlmIGRlZmluZWQoJGVuYWJsZUd0a1Bs
dWdpbnMpOworCisgICAgaWYgKGNoZWNrQXJndigiLS1kaXNhYmxlLWd0ay1wbHVnaW5zIikpIHsK
KyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRl
bmFibGVHdGtQbHVnaW5zID0gMTsKKyAgICB9Cit9CisKIHN1YiBpc1d4KCkKIHsKICAgICBkZXRl
cm1pbmVJc1d4KCk7CkBAIC03NzksNiArNzk4LDcgQEAgc3ViIGJ1aWxkUU1ha2VHdGtQcm9qZWN0
KCQkKQogCiAgICAgbXkgQGJ1aWxkQXJncyA9ICgiQ09ORklHKz1ndGstcG9ydCIpOwogICAgIHB1
c2ggQGJ1aWxkQXJncywgIkNPTkZJRy09cXQiOworICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJ
Rys9cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lucygpOwogCiAgICAgcmV0dXJuIGJ1aWxkUU1h
a2VQcm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17973</attachid>
            <date>2007-12-18 09:16:21 -0800</date>
            <delta_ts>2007-12-20 15:07:15 -0800</delta_ts>
            <desc>Updated patch for trunk today</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>178196</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19ydW50aW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3J1bnRpbWUuaAkocmV2aXNpb24gMjg4Mjgp
CisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfcnVudGltZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExBVEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChf
X0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGltZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9w
cm94eS5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIEtKUyB7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9jL2NfdXRpbGl0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL2MvY191dGlsaXR5LmgJKHJldmlzaW9uIDI4ODI4KQorKysgSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvYy9jX3V0aWxpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18p
CiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIK
IAogbmFtZXNwYWNlIEtKUyB7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19j
bGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CShyZXZpc2lvbiAyODgyOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL2MvY19jbGFzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaWZuZGVmIEJJTkRJTkdTX0NfQ0xB
U1NfSF8KICNkZWZpbmUgQklORElOR1NfQ19DTEFTU19IXwogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAicnVudGltZS5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L05QX2pzb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvTlBf
anNvYmplY3QuaAkocmV2aXNpb24gMjg4MjgpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9O
UF9qc29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiAhUExB
VEZPUk0oREFSV0lOKSB8fCAhZGVmaW5lZChfX0xQNjRfXykKIAotI2luY2x1ZGUgIm5wcnVudGlt
ZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9wcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBLSlMgewpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBy
dW50aW1lX2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWVfaW1wbC5oCShyZXZpc2lvbiAyODgyOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L25wcnVudGltZV9pbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lm
ICFQTEFURk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBy
dW50aW1lLmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAKICNpZmRlZiBfX2NwbHVz
cGx1cwogZXh0ZXJuICJDIiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHJldmlzaW9u
IDI4ODI4KQorKysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkod29ya2luZyBjb3B5
KQpAQCAtODksNiArODksNyBAQAogI2lmZGVmIFhQX1VOSVgKICAgICAjaW5jbHVkZSA8WDExL1hs
aWIuaD4KICAgICAjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgICAgI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjZW5kaWYKIAogI2lmZGVmIFhQX1dJTgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
bnBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucHJ1
bnRpbWUuY3BwCShyZXZpc2lvbiAyODgyOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
cnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmICFQTEFU
Rk9STShEQVJXSU4pIHx8ICFkZWZpbmVkKF9fTFA2NF9fKQogCi0jaW5jbHVkZSAibnBydW50aW1l
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3Byb3h5LmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2lt
cGwuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgogCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9iaW5kaW5ncy9ucHJ1bnRpbWVfcHJpdi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDI4ODI4KQorKysgSmF2YVNjcmlw
dENvcmUvYmluZGluZ3MvbnBydW50aW1lX3ByaXYuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgIVBMQVRGT1JNKERBUldJTikgfHwgIWRlZmluZWQoX19MUDY0X18pCiAK
LSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKIAog
LyoKICAgICBOUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSgpIHdpbGwgY29weSBz
dHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvbnBydW50aW1lX3Byb3h5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9ucHJ1bnRpbWVfcHJveHkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4K
KyAqCisgKgorICogVGhpcyBpcyBhIHByb3h5IGluY2x1ZGUgaGVhZGVyIGZvciBucGFwaS5oCisg
KgorICogU29tZSBvZiB0aGUgI2RlZmluZXMgd2hpY2ggYXJlIGluIFgxMSBoZWFkZXJzIGNvbmZs
aWN0IHdpdGggdHlwZSBhbmQgZW51bQorICogbmFtZXMgaW4gSmF2YVNjcmlwdENvcmUgYW5kIFdl
YkNvcmUKKyAqIFRoaXMgaGVhZGVyICN1bmRlZnMgdGhvc2UgZGVmaW5lcyB0byBmaXggdGhlIGNv
bmZsaWN0cworICogSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBucGFwaS5oIG9yIG5wcnVudGltZS5o
IHdoZW4gYnVpbGRpbmcgb24gWDExLAorICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0
aGUgYWN0dWFsIG5wYXBpLmggb3IgbnBydW50aW1lLmgKKyAqLworCisjaW5jbHVkZSAibnBydW50
aW1lLmgiCisKKyNpZmRlZiBYUF9VTklYCisgICAgI2luY2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4K
KworICAgICN1bmRlZiBOb25lCisgICAgI3VuZGVmIEFib3ZlCisgICAgI3VuZGVmIEJlbG93Cisg
ICAgI3VuZGVmIEF1dG8KKyAgICAjdW5kZWYgQ29tcGxleAorICAgICN1bmRlZiBTdGF0dXMKKyNl
bmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvdGVzdGJpbmRpbmdzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy90ZXN0YmluZGluZ3MuY3BwCShyZXZp
c2lvbiAyODgyOCkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL3Rlc3RiaW5kaW5ncy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2lu
Y2x1ZGUgImludGVycHJldGVyLmgiCiAKLSNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfcHJveHkuaCIKIAogI2luY2x1ZGUgInJ1bnRpbWUuaCIKICNpbmNsdWRlICJy
dW50aW1lX29iamVjdC5oIgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDI4ODI4KQorKysgV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3
b3RvYXN0cy5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00OSwxMiArNTAsMTcgQEAK
ICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJh
bWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQog
ICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYwLDkg
KzE2NiwzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwg
PSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2Uu
dGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3Ro
KTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBB
U1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcg
b24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBu
b3JtYWxseSBkb25lCisgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJl
Y2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlr
ZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJp
ZGVFbmNvZGluZygpOworICAgICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxs
KCk7CisgICAgICAgIGlmICghdXNlckNob3NlbikKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9h
ZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgICAgICBGcmFtZUxvYWRl
ciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9h
ZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGlmIChkYXRh
KQorICAgICAgICAgICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9
CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9u
c2VUb1BsdWdpbikgeworICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9u
c2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9Q
bHVnaW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2
ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKQpAQCAtMjU4LDggKzI4NSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24p
KFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdp
bihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdl
dCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5T
aXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdH
dGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5j
cmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwg
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAg
aWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxs
eSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgIHJldHVybiAwOwogfQpAQCAtMzAxLDggKzMzMyw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZy
YW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3RE
YXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLSAgICByZXR1cm47CisgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
d0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJM
JiBiYXNlVVJMLApAQCAtMzI0LDYgKzM1NSw5IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9h
ZGVyQ2xpZW50OjpvYmoKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudElt
YWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlz
TUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9i
amVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpPYmplY3RDb250ZW50RnJhbWU7CiAKQEAgLTYyMywxNCArNjU3LDE0IEBAIFN0cmluZyBGcmFt
ZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBB
U1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29k
aW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQg
aXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJl
Y2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlr
ZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92
ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxs
KCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3Vt
ZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExv
YWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwor
CisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisgICAgICAgIGNvbW1pdHRlZExvYWQoZG9jdW1lbnRM
b2FkZXIsIDAsIDApOworICAgIGVsc2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlz
aExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogCkBAIC03NTMsOSArNzg3LDEz
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG8KICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRF
cnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICht
X3BsdWdpblZpZXcpIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAg
ICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdp
biA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3du
bG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMjg4MjgpCisrKyBX
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsu
aCIKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4MCw2ICsxODMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBtX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJB
Z2VudDsKKworICAgICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisgICAg
ICAgIFdlYkNvcmU6OlBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgYm9vbCBt
X2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdC9ndGsv
V2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDI4ODI4KQorKysgV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzgsNiArODM4LDcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0VwogICAgIHNldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOwogICAgIHNldHRpbmdzLT5zZXRGaXhlZEZv
bnRGYW1pbHkoIkNvdXJpZXIgTmV3Iik7CiAgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZh
bWlseSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CiAK
ICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3ZWJWaWV3LCBHVEtfQ0FOX0ZPQ1VTKTsKICAgICB3
ZWJWaWV3RGF0YS0+bWFpbkZyYW1lID0gV0VCS0lUX1dFQl9GUkFNRSh3ZWJraXRfd2ViX2ZyYW1l
X25ldyh3ZWJWaWV3KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAJKHJldmlzaW9uIDI4ODI4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDYgQEAgVmVj
dG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAogCiBib29sIFdlYkNvcmU6Omhp
c3RvcnlDb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkKSB7IHJldHVybiBmYWxzZTsgfQog
Ci1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5B
dEluZGV4KHVuc2lnbmVkKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVuc2lnbmVk
IFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci1TdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3Ry
aW5nKCk7IH0gCi1ib29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlw
ZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxz
ZTsgfQotdm9pZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLQotCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYw
MDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2
b2lkICgqKSgpKSB7IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZp
c2lvbiAyODgyOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwNSw1ICszMDUsMjIgQEAgdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52
YWxpZGF0aW9uKGJvbwogCiB2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsK
KyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWd0a1dpZGdl
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3
KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSk7CisgICAgSW50UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250
YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKTsKKworICAgIC8vIERvbid0
IGFsbG93IHRoZSBhbGxvY2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRTaXplIHN6
ID0gZnJhbWVHZW9tZXRyeSgpLnNpemUoKTsKKyAgICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7
CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHN6
LndpZHRoKCksIHN6LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0
a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAJKHJldmlz
aW9uIDI4ODI4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAKKyNpbmNsdWRlIDxlcnJuby5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTk1
LDI2ICsxOTYsMjkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZQog
ICAgIHN0YXJ0U2NoZWR1bGVkSm9icygpOwogCiAgICAgZmRfc2V0IGZkcmVhZDsKLSAgICBGRF9a
RVJPKCZmZHJlYWQpOwogICAgIGZkX3NldCBmZHdyaXRlOwotICAgIEZEX1pFUk8oJmZkd3JpdGUp
OwogICAgIGZkX3NldCBmZGV4Y2VwOwotICAgIEZEX1pFUk8oJmZkZXhjZXApOwogICAgIGludCBt
YXhmZCA9IDA7Ci0gICAgY3VybF9tdWx0aV9mZHNldChtX2N1cmxNdWx0aUhhbmRsZSwgJmZkcmVh
ZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOwogCiAgICAgc3RydWN0IHRpbWV2YWwgdGlt
ZW91dDsKICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CiAgICAgdGltZW91dC50dl91c2VjID0gc2Vs
ZWN0VGltZW91dE1TICogMTAwMDsgICAgICAgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcwog
CiAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSB0aW1lcnMgc2luY2Ugc2lnbmFscyBtYXkgaW50
ZXJydXB0IHNlbGVjdCgpLCByYWlzaW5nIEVJTlRSIGVycm9ycyBvbiBzb21lIHBsYXRmb3Jtcwot
ICAgIHNldERlZmVycmluZ1RpbWVycyh0cnVlKTsKLSAgICBpbnQgcmMgPSA6OnNlbGVjdChtYXhm
ZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOwotICAgIHNldERl
ZmVycmluZ1RpbWVycyhmYWxzZSk7CisgICAgV2ViQ29yZTo6c2V0RGVmZXJyaW5nVGltZXJzKHRy
dWUpOworICAgIGludCByYzsKKyAgICBkbyB7CisgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CisJ
RkRfWkVSTygmZmR3cml0ZSk7CisJRkRfWkVSTygmZmRleGNlcCk7CisJY3VybF9tdWx0aV9mZHNl
dChtX2N1cmxNdWx0aUhhbmRsZSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQp
OworCXJjID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAs
ICZ0aW1lb3V0KTsKKyAgICB9IHdoaWxlIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7Cisg
ICAgV2ViQ29yZTo6c2V0RGVmZXJyaW5nVGltZXJzKGZhbHNlKTsKIAogICAgIGlmICgtMSA9PSBy
YykgewogI2lmbmRlZiBOREVCVUcKLSAgICAgICAgcHJpbnRmKCJiYWQ6IHNlbGVjdCgpIHJldHVy
bmVkIC0xXG4iKTsKKyAgICAgICAgcGVycm9yKCJiYWQ6IHNlbGVjdCgpIHJldHVybmVkIC0xOiAi
KTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5F
bGVtZW50LmgJKHJldmlzaW9uIDI4ODI4KQorKysgV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNlbmRpZgogCiAjaWYgVVNF
KE5QT0JKRUNUKQotI2luY2x1ZGUgPGJpbmRpbmdzL25wcnVudGltZS5oPgorI2luY2x1ZGUgPGJp
bmRpbmdzL25wcnVudGltZV9wcm94eS5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRh
YmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBj
bGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xh
c3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgdHlw
ZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2FnZUd0a0hh
c2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQbHVnaW5z
KCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVu
dEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7
CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
R3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVk
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBs
dWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0g
cGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisK
KyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNr
YWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pOworCisg
ICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgor
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5o
IgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtq
c19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pzX3dpbmRv
dy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgor
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNs
dWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFk
ZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5j
bHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNp
bmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsK
K3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6
SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3Vz
aW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVx
dWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNl
bmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRS
ZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURh
dGEpCisgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQor
cHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAg
IEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5
RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBn
ZXN0dXJlCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRl
cnZhbCA9IDAuMDAxOworCitjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrIHsKK3B1Ymxp
YzoKKyAgICBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZp
ZXcpCisgICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgICAgICwgbV9iYWNr
KDApLCBtX2Zyb250KDApCisgICAgICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcih0aGlzLCAm
UGx1Z2luTWVzc2FnZVRocm90dGxlckd0azo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJlZCkKKyAg
ICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBpbmxpbmUg
bWVzc2FnZXMKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUlubGluZU1lc3Nh
Z2VzIC0gMTsgaSsrKQorICAgICAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0ID0gJm1f
aW5saW5lTWVzc2FnZXNbaSArIDFdOworICAgICAgICBtX2lubGluZU1lc3NhZ2VzW051bUlubGlu
ZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0g
Jm1faW5saW5lTWVzc2FnZXNbMF07CisgICAgfQorCisgICAgflBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICAKKyAgICAg
ICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsgbWVzc2FnZTsgbWVzc2Fn
ZSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OworICAgICAgICAg
ICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0KKyAgICAK
KyAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoWElEIGhXbmQsIGd1aW50IG1zZywgZ3VpbnQgd1BhcmFt
LCBnbG9uZyBsUGFyYW0pIAorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVzc2FnZSA9
IGFsbG9jYXRlTWVzc2FnZSgpOworCisgICAgICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25kOworICAg
ICAgICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgICAgIG1lc3NhZ2UtPndQYXJhbSA9IHdQYXJh
bTsKKyAgICAgICAgbWVzc2FnZS0+bFBhcmFtID0gbFBhcmFtOworICAgICAgICBtZXNzYWdlLT5u
ZXh0ID0gMDsKKworICAgICAgICBpZiAobV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrLT5uZXh0
ID0gbWVzc2FnZTsKKyAgICAgICAgbV9iYWNrID0gbWVzc2FnZTsKKyAgICAgICAgaWYgKCFtX2Zy
b250KQorICAgICAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7CisKKyAgICAgICAgaWYgKCFtX21l
c3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX21lc3NhZ2VUaHJv
dHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAgIFhJRCBo
V25kOworICAgICAgICBndWludCBtc2c7CisgICAgICAgIGd1aW50IHdQYXJhbTsKKyAgICAgICAg
Z2xvbmcgbFBhcmFtOworCisgICAgICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0OworICAg
IH07CisgICAgCisgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKFRpbWVyPFBsdWdp
bk1lc3NhZ2VUaHJvdHRsZXJHdGs+KikKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UqIG1l
c3NhZ2UgPSBtX2Zyb250OworICAgICAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsKKyAgICAg
ICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrID0gMDsKKworCS8v
ICAgICAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJvYygpLCBt
ZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2FnZS0+bFBh
cmFtKTsKKworICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICBpZiAobV9m
cm9udCkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1l
c3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCisgICAgUGx1Z2luTWVzc2FnZSog
YWxsb2NhdGVNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgKm1lc3NhZ2U7
CisKKyAgICAgICAgaWYgKG1fZnJlZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgICAgICBtZXNz
YWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxpbmVNZXNz
YWdlcyA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWVzc2Fn
ZSA9IG5ldyBQbHVnaW5NZXNzYWdlOworCisgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgIH0K
KworICAgIGJvb2wgaXNJbmxpbmVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UpIAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0gJiYgbWVz
c2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOworICAgIH0K
KworICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisgICAgewor
ICAgICAgICBpZiAoaXNJbmxpbmVNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBtZXNz
YWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxp
bmVNZXNzYWdlcyA9IG1lc3NhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGVsZXRl
IG1lc3NhZ2U7CisgICAgfQorCisgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAg
IFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2Zyb250OworCisg
ICAgc3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7CisgICAgUGx1Z2luTWVz
c2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICBQbHVnaW5NZXNz
YWdlKiBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKworICAgIFRpbWVyPFBsdWdpbk1lc3NhZ2VUaHJv
dHRsZXJHdGs+IG1fbWVzc2FnZVRocm90dGxlVGltZXI7Cit9OworCitzdGF0aWMgU3RyaW5nIHNj
cmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1
cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5n
CisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5t
aWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJyZW50UGx1
Z2luVmlldyA9IDA7CisKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3V2luZG93Q2xhc3NO
YW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3UHJv
cGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBN
b3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUu
MTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3ZvaWQg
UGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkp
OworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFy
ZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAg
IEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0g
SW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0
aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93
Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dp
bmRvd1JlY3QueSgpKTsKKworICAgIGlmIChtX3dpbmRvdyAmJiAobV93aW5kb3dSZWN0ICE9IG9s
ZFdpbmRvd1JlY3QgfHwgbV9jbGlwUmVjdCAhPSBvbGRDbGlwUmVjdCkpIHsKKyAgICAgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAg
ICAgIGlmIChtX3dpZGdldCkgeworICAgICAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkg
JiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgICAgIGlmICghbV9uZWVk
c1hFbWJlZCkgeworICAgICAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hU
QklOKG1fd2lkZ2V0KSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAg
ICAgICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRo
KCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAg
ICAgfQorICAgIH0KK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJ
bnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxl
bWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBm
cmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmll
dy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAgcmV0dXJuIGNs
aXBSZWN0OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5wcmludGlu
ZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVjdCAhPSBmcmFtZUdlb21ldHJ5KCkp
CisgICAgICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKKworICAgIGlmIChwYXJl
bnQoKSkKKyAgICAgICAgaW5pdCgpOworCisgICAgdXBkYXRlV2luZG93KCk7CisgICAgc2V0TlBX
aW5kb3dSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6Omdlb21ldHJ5Q2hhbmdl
ZCgpIGNvbnN0Cit7CisgICAgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKTsKKyAgICB1cGRhdGVX
aW5kb3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGb2N1cygpCit7CisgICAgLy9p
ZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAgIC8vU2V0Rm9jdXMod2luZG93KTsKKworICAg
IFdpZGdldDo6c2V0Rm9jdXMoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzaG93KCkKK3sK
KyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5k
b3cpCisgICAgLy9TaG93V2luZG93KHdpbmRvdywgU1dfU0hPV05BKTsKKworICAgIFdpZGdldDo6
c2hvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhpZGUoKQoreworICAgIG1faXNWaXNp
YmxlID0gZmFsc2U7CisKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9T
aG93V2luZG93KHdpbmRvdywgU1dfSElERSk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG51
bGxQbHVnaW5JbWFnZTsKKyAgICBpZiAoIW51bGxQbHVnaW5JbWFnZSkKKyAgICAgICAgbnVsbFBs
dWdpbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJudWxsUGx1Z2luIik7CisK
KyAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZUdlb21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5
KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQbHVnaW5JbWFnZS0+aGVpZ2h0
KCkpOworCisgICAgaW50IHhPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLndpZHRoKCkgLSBpbWFn
ZVJlY3Qud2lkdGgoKSkgLyAyOworICAgIGludCB5T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS5o
ZWlnaHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkgLyAyOworCisgICAgaW1hZ2VSZWN0Lm1vdmUo
eE9mZnNldCwgeU9mZnNldCk7CisKKyAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhpbWFnZVJlY3Qp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+
Y2xpcCh3aW5kb3dDbGlwUmVjdCgpKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobnVsbFBsdWdp
bkltYWdlLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAg
IC8vIERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgcGFpbnRNaXNzaW5n
UGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX2lzV2luZG93ZWQgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVz
aXplIFhldmVudHMgaGVyZSAqLworCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBl
RHJhd2FibGU7CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAg
aWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9CisKKyAgICBzZXROUFdp
bmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmbnBFdmVudCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50Owor
CisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgYW5kIHBhc3MgaXQgb24gKi8KKyAgICAvKgor
ICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsgICAgCisKKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X0tFWURPV047CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsKKyAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlKCkgPT0ga2V5dXBFdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01f
S0VZVVA7CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMHg4MDAwOworICAgIH0KKyAgICAqLwor
CisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAg
ICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKworLy9leHRlcm4gYm9vbCBpZ25v
cmVOZXh0U2V0Q3Vyc29yOworCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZU1vdXNlRXZlbnQo
TW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgLyogU3lu
dGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyBvbiAqLworICAgIEludFBvaW50IHAgPSBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZl
bnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CisKKyAgICAvKgorICAgIG5wRXZlbnQubFBh
cmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsK
KworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBN
S19DT05UUk9MOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfU0hJRlQ7CisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW1vdmVF
dmVudCB8fAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3V0RXZlbnQgfHwgCisgICAg
ICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdmVyRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCisg
ICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtf
TEJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBNaWRkbGVCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1L
X01CVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1L
X1JCVVRUT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAg
c3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047CisKKyAgICAgICAgICAgICAg
ICAvLyBGb2N1cyB0aGUgcGx1Z2luCisgICAgICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9j
dW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0g
V01fTUJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlw
ZSgpID09IG1vdXNldXBFdmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkg
eworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBX
TV9MQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01CVVRUT05VUDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKyAgICAqLworCisgICAgS0pTOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0
RGVmYXVsdEhhbmRsZWQoKTsKKworICAgIC8vIEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3Ig
aXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAK
KyAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0
Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCisgICAgLy9pZ25vcmVOZXh0U2V0
Q3Vyc29yID0gdHJ1ZTsgICAgIAorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUV2ZW50
KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAg
aGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBl
bHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUtleWJvYXJk
RXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50KSk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6
OnNldFBhcmVudChwYXJlbnQpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldE5QV2luZG93
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRz
VG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAg
ICBtX25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0Lndp
ZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9
IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBt
X25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAobV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisKKyAgICAgICAgaWYgKCFt
X2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKG1fd2lu
ZG93KTsKKyAgICB9CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRnZXRf
c2l6ZV9hbGxvY2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgaWYgKCFt
X25lZWRzWEVtYmVkKSB7CisgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklO
KG1fd2lkZ2V0KSwgYWxsb2NhdGlvbi54LCBhbGxvY2F0aW9uLnkpOworICAgICAgICBndGtfeHRi
aW5fcmVzaXplKG1fd2lkZ2V0LCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7
CisgICAgfQorI2VuZGlmCit9CisKK2Jvb2wgUGx1Z2luVmlld0d0azo6c3RhcnQoKQoreworICAg
IGlmIChtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1f
cGx1Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3ApOworCisg
ICAgTlBFcnJvciBucEVycjsKKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmll
dyh0aGlzKTsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKChO
UE1JTUVUeXBlKW1fbWltZVR5cGUuZGF0YSgpLCBtX2luc3RhbmNlLCBtX21vZGUsIG1fcGFyYW1D
b3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsKKyAgICB9CisgICAgUGx1
Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNTdGFydGVk
ID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFtX2xvYWRNYW51YWxseSkg
eworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisgICAgICAgIGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7Cisg
ICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1fdXJsKTsK
KyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c3RvcCgpCit7CisgICAgaWYg
KCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxSZWZQdHI8UGx1
Z2luU3RyZWFtR3RrPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNldDxSZWZQdHI8
UGx1Z2luU3RyZWFtR3RrPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOworICAgIGZv
ciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+OjppdGVyYXRvciBpdCA9IHN0cmVh
bXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7Cisg
ICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VS
VChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisKKyAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKworICAgIC8vIERlc3Ry
b3kgdGhlIHBsdWdpbgorICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95KG1faW5z
dGFuY2UsIDApOworCisgICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcp
Cit7CisgICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Cit9CisKK1BsdWdpblZp
ZXdHdGsqIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4g
c19jdXJyZW50UGx1Z2luVmlldzsKK30KKworc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0ZjgoKTsKKyAg
ICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9jKGNzdHIu
bGVuZ3RoKCkgKyAxKSk7CisKKyAgICBzdHJuY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCksIGNzdHIu
bGVuZ3RoKCkgKyAxKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGZy
ZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCit7CisgICAgaWYg
KCFzdHJpbmdBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykKKyAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAg
ZmFzdEZyZWUoc3RyaW5nQXJyYXkpOworfQorCitzdGF0aWMgYm9vbCBnZXRTdHJpbmcoS0pTUHJv
eHkqIHByb3h5LCBKU1ZhbHVlKiByZXN1bHQsIFN0cmluZyYgc3RyaW5nKQoreworICAgIGlmICgh
cHJveHkgfHwgIXJlc3VsdCB8fCByZXN1bHQtPmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBKU0xvY2sgbG9jazsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb3h5
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIFVTdHJpbmcgdXN0cmluZyA9IHJl
c3VsdC0+dG9TdHJpbmcoZXhlYyk7CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAK
KyAgICBzdHJpbmcgPSB1c3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7Cisg
ICAgS1VSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNl
UmVxdWVzdCgpLnVybCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2
YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwoKSkgewor
ICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQocmVxdWVzdC0+ZnJh
bWVMb2FkUmVxdWVzdCgpLCAwLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIGRvY3Vt
ZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5kTm90aWZp
Y2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzOworICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5vdGlmeSht
X2luc3RhbmNlLCByZXF1ZXN0VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIE5QUkVTX0RP
TkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUgb25seSBh
bGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBsdWdpbgor
ICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCisgICAgQVNTRVJU
KHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKS5pc0VtcHR5KCkgfHwgbV9w
YXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFt
ZU5hbWUoKSkgPT0gbV9wYXJlbnRGcmFtZSk7CisgICAgCisgICAgLy8gRXhlY3V0aW5nIGEgc2Ny
aXB0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3ZSBrZWVw
IGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZnJhbWUuCisgICAgUmVmUHRyPEZyYW1lPiBwYXJl
bnRGcmFtZSA9ICBtX3BhcmVudEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1fcGFyZW50
RnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJlY2F0ZWRTdHJpbmco
KSwgdHJ1ZSk7CisKKyAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFt
ZSgpLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CisKKyAgICAgICAg
aWYgKCFnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCksIHJlc3VsdCwgcmVzdWx0
U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU3RyaW5nIGNzdHIgPSBy
ZXN1bHRTdHJpbmcudXRmOCgpOworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBzdHJl
YW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIHBhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0
LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3Rp
ZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgbV9zdHJlYW1zLmFk
ZChzdHJlYW0pOworICAgICAgICBzdHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RV
UkwsIGNzdHIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJG
aXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09
ICZtX3JlcXVlc3RUaW1lcik7CisgICAgQVNTRVJUKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCk7CisK
KyAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbV9yZXF1ZXN0c1swXTsKKyAgICBtX3Jl
cXVlc3RzLnJlbW92ZSgwKTsKKyAgICAKKyAgICAvLyBTY2hlZHVsZSBhIG5ldyByZXF1ZXN0IGJl
Zm9yZSBjYWxsaW5nIHBlcmZvcm1SZXF1ZXN0IHNpbmNlIHRoZSBjYWxsIHRvCisgICAgLy8gcGVy
Zm9ybVJlcXVlc3QgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZWxldGVkLgorICAg
IGlmIChtX3JlcXVlc3RzLnNpemUoKSA+IDApCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKKworICAgIHBlcmZvcm1SZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OnNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQor
eworICAgIG1fcmVxdWVzdHMuYXBwZW5kKHJlcXVlc3QpOworICAgIG1fcmVxdWVzdFRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpsb2FkKGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIEtVUkwgdXJsID0g
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBpZiAo
dXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOworCisgICAg
U3RyaW5nIHRhcmdldCA9IGZyYW1lTG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisKKyAgICAvLyBk
b24ndCBsZXQgYSBwbHVnaW4gc3RhcnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0
IG9mIGEgZG9jdW1lbnQgdGhhdCBpcyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRo
ZSBsb2FkcyBhcmUgaW4gdGhlIHNhbWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBpZiAobV9w
YXJlbnRGcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCkgJiYKKyAgICAgICAgKHRhcmdldC5pc051
bGwoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZy
YW1lKSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBTdHJpbmcg
anNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwodXJsKTsKKyAgICBpZiAoIWpz
U3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFyZW50
RnJhbWUtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5p
c0phdmFTY3JpcHRFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SIGlmIEpTIGlzIGRpc2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0gZWxzZSBp
ZiAodGFyZ2V0LmlzTnVsbCgpICYmIG1fbW9kZSA9PSBOUF9GVUxMKSB7CisgICAgICAgICAgICAv
LyBEb24ndCBhbGxvdyBhIEphdmFTY3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVn
LWluIHRoYXQgaXMgc2VsZi10YXJnZXR0ZWQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBj
YW4gY2F1c2UgdGhlIHVzZXIgdG8gYmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQw
MzkpLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpIHx8ICF0YXJnZXQuaXNOdWxsKCkp
IHsKKyAgICAgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSAmJiAhdGFyZ2V0LmlzTnVsbCgpICYm
IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpIHsK
KyAgICAgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVl
c3RzIHRvIGJlIG1hZGUgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorCisgICAg
ICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBuZXcgUGx1Z2luUmVxdWVzdEd0ayhmcmFt
ZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgc2No
ZWR1bGVSZXF1ZXN0KHJlcXVlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIFBsdWdpblN0cmVh
bUd0ayogc3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCBzZW5kTm90aWZpY2F0aW9uLCBub3Rp
ZnlEYXRhKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisgICAgICAgIHN0cmVh
bS0+c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK3N0
YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRp
dmVVUkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSBEZXByZWNh
dGVkU3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAgIC8vIFN0cmlw
IHJldHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAg
IHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkws
IHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMTm90aWZ5KGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQorewor
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9hZFJl
cXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAgICBy
ZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwp
KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+
JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclswXSA9
PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xp
bmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMg
PSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAgICAg
IC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYgKGJ5
dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICByZXR1
cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRl
ciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAgIGlm
IChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAgICAg
ICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJldHVy
biBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAg
ICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAzODcp
LgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5
dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAgICAg
Ly8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgorICAg
ICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIq
IGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQ
IHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4gVW5m
b3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4gV29y
c2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9mIGJv
dGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAgLy8g
dG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgorICAg
IC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZv
dW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJt
aW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJu
IGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAgICAg
IC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAgICAv
LyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAgIC8v
IG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2FwaXRh
bGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYm9v
bCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBV
Q2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0g
J2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBwZXIobmFtZVtpXSk7
CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0En
ICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1l
W2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBj
aGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0
cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8g
TG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3Qg
ZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0
ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAg
ICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1v
dmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5l
ZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVv
bCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8g
U2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAg
ICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAw
KQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVh
ZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8
ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJl
dmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAg
ICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisg
ICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFz
dEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVjYXRlZFN0cmlu
Zzo6ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRl
ckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgor
ICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0g
bGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAg
ICAgICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29s
b24gPT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUg
aXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZp
ZWxkTmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9uIC0gbGluZSkp
OworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAo
Y29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9
PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21M
YXRpbjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRW
YWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFv
bGRWYWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xk
VmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAg
ICAgICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtl
eSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5kbGVQb3N0KGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFy
KiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9u
LCBib29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisg
ICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVz
dCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Cisg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBT
dHJpbmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1ZiwgbGVuKTsK
KworICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAg
ICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgICAgIC8vIEdldCBm
aWxlIGluZm8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0
YSgpLCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdV
TEFSKSkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJ
WE1FIC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisgICAgICAgIEZJTEUqIGZpbGVI
YW5kbGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7CisgICAgICAgIAor
ICAgICAgICBpZiAoZmlsZUhhbmRsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOworCisgICAgICAgIC8vYnVmZmVyLnJlc2l6ZSgpOworCisgICAgICAg
IGludCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsK
KworICAgICAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8
PSAwKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0dXJu
IE5QRVJSX05PX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobGVu
KTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3REYXRh
TGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFkZXJzKSB7Cisg
ICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIHBv
c3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5l
KGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0
aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAg
ICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCkg
LSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2Ug
dG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCisgICAgICAg
ICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3
aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1
bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAgICAgICAgICAg
U3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0aCIp
OworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGlu
dClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250
ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247Cisg
ICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAgIGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJGaWVs
ZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHko
UGFzc1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0
aCkpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAg
cmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1
cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUpOworfQor
CitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7
CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmll
ZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBv
c3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05Q
RXJyb3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hh
ciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisK
K2ludDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwg
dm9pZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0
ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6ZGVzdHJveVN0
cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgUGx1Z2luU3Ry
ZWFtR3RrKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtR3RrKj4oc3Ry
ZWFtLT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW1HdGs6Om93bmVy
Rm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lO
VkFMSURfSU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0
cm95U3RyZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitjb25z
dCBjaGFyKiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJrcyAm
IFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KQorICAgICAgICByZXR1cm4gTW96aWxs
YVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91
c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4
KCk7CisgICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgcyA9IERlcHJl
Y2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobWVzc2FnZSk7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9
IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0YXR1
c2JhclRleHQobV9wYXJlbnRGcmFtZSwgcyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5l
ZCAoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7
CisgICAgICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICAqKHZv
aWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1f
d2lkZ2V0KS0+eHRjbGllbnQueHRkaXNwbGF5KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNl
IE5QTlZUb29sa2l0OiB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgKigodW5zaWdu
ZWQgbG9uZyAqKXZhbHVlKSA9IDI7CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9u
ZyAqKXZhbHVlKSA9IDA7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogewor
I2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BM
VUdJTlMpCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gdHJ1ZTsKKyNl
bHNlCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gZmFsc2U7CisjZW5k
aWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVjdCogd2lu
ZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsK
KworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwor
CisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9
IHdpbmRvd1NjcmlwdE9iamVjdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVu
dE5QT2JqZWN0OiB7CisgICAgICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0g
MDsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8
IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1l
KG9iamVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisg
ICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFz
IGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4v
bnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAg
ICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAg
ICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1
Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAg
ICAgdm9pZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworICAgICAgICAg
ICAgKigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpLT53aW5kb3cpOworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOworICAgIH0KK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpzZXRWYWx1
ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJp
YWJsZSkgeworICAgICAgICBjYXNlIE5QUFZwbHVnaW5XaW5kb3dCb29sOgorICAgICAgICAgICAg
bV9pc1dpbmRvd2VkID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
CisgICAgICAgIGNhc2UgTlBQVnBsdWdpblRyYW5zcGFyZW50Qm9vbDoKKyAgICAgICAgICAgIG1f
aXNUcmFuc3BhcmVudCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjppbnZhbGlkYXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiogdGlt
ZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX2ludmFsaWRhdGVUaW1lcik7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbnZhbGlkUmVjdHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QobV9pbnZhbGlkUmVjdHNbaV0pOworICAgIG1faW52
YWxpZFJlY3RzLmNsZWFyKCk7Cit9CisKKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRl
UmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGludmFsaWRh
dGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0LT5sZWZ0
LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVj
dC0+dG9wKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgLyogRklYTUUgLSBJ
bnZhbGlkYXRlIHRoZSByZWN0YW5nbGUKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVjdChyKTsKKyAg
ICAgICAgSW52YWxpZGF0ZVJlY3QobV93aW5kb3csICZpbnZhbGlkUmVjdCwgRkFMU0UpOworICAg
ICAgICAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3F1aXJrcyAmIFBsdWdpblF1aXJr
VGhyb3R0bGVJbnZhbGlkYXRlKSB7CisgICAgICAgICAgICBtX2ludmFsaWRSZWN0cy5hcHBlbmQo
cik7CisgICAgICAgICAgICBpZiAoIW1faW52YWxpZGF0ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgICAgICAgICAgbV9pbnZhbGlkYXRlVGltZXIuc3RhcnRPbmVTaG90KDAuMDAxKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgIH0K
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lv
bikKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBG
SVhNRSAtIEludmFsaWRhdGUgdGhlIHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRS
Z25Cb3gocmVnaW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICov
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIC8qIEZJWE1F
IC0gRm9yY2UgYSByZWRyYXcKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICA6OlVwZGF0
ZVdpbmRvdyhtX3dpbmRvdyk7CisgICAgZWxzZQorICAgICAgICA6OlVwZGF0ZVdpbmRvdyhjb250
YWluaW5nV2luZG93KCkpOworICAgICovCit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBQ
bHVnaW5WaWV3R3RrOjpiaW5kaW5nSW5zdGFuY2UoKQoreworICAgIE5QT2JqZWN0KiBvYmplY3Qg
PSAwOworCisgICAgaWYgKCFtX3BsdWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdl
dHZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAgewor
ICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAg
bnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQ
VnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7CisgICAgfQorCisgICAgaWYgKG5w
RXJyICE9IE5QRVJSX05PX0VSUk9SIHx8ICFvYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3QgPSBtX3BhcmVudEZyYW1l
LT5jcmVhdGVSb290T2JqZWN0KHRoaXMsIG1fcGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCktPmds
b2JhbE9iamVjdCgpKTsKKyAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqaW5zdGFuY2UgPSBL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxhbmd1YWdlSW5zdGFuY2Uo
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OkNMYW5ndWFnZSwgb2JqZWN0LCByb290LnJlbGVhc2Uo
KSk7CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBpbnN0
YW5jZTsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdpblZpZXdHdGsoKQoreworICAgIHN0b3Ao
KTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJpbmdB
cnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5KG1f
cGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQgJiYg
bV93aWRnZXQpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX3dpZGdldCk7CisgICAgbV93
aW5kb3cgPSAwOworICAgIHNldEd0a1dpZGdldChOVUxMKTsKKworICAgIG1fcGFyZW50RnJhbWUt
PmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOworCisgICAgaWYgKG1fcGx1Z2lu
ICYmICEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQorICAgICAgICBt
X3BsdWdpbi0+dW5sb2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlzY29ubmVjdFN0
cmVhbShQbHVnaW5TdHJlYW1HdGsqIHN0cmVhbSkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1zLmNv
bnRhaW5zKHN0cmVhbSkpOworCisgICAgbV9zdHJlYW1zLnJlbW92ZShzdHJlYW0pOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworICAgIC8vIFRoZSBmbGFzaCBwbHVnaW4gb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBs
dWdpbnMgaWYgd2UgcmV0dXJuIGEgbW96aWxsYSB1c2VyIGFnZW50CisgICAgaWYgKG1pbWVUeXBl
ID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgbV9xdWlya3Mg
fD0gUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQ7CisgICAgICAgIG1fcXVpcmtzIHw9
IFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlOworICAgICAgICBtX3F1aXJrcyB8PSBQbHVn
aW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzOworICAgIH0KKworICAgIC8vIFRo
ZSBXTVAgcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2Fs
bCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3
aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobV9wbHVnaW4t
Pm5hbWUoKS5jb250YWlucygiTWljcm9zb2Z0IikgJiYgbV9wbHVnaW4tPm5hbWUoKS5jb250YWlu
cygiV2luZG93cyBNZWRpYSIpKSB7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRGVm
ZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMg
bm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBw
YXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgor
ICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFt
OworICAgIH0KKworICAgIC8vIFRoZSBEaXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBm
aXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisg
ICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBz
aXplCisgICAgaWYgKG1pbWVUeXBlID09ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWlya3Mg
fD0gUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGlu
Z3M7IGlmIGEgcGx1Zy1pbiBjcmVhdGVzIGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBp
dCB0byBhIGZ1bmN0aW9uIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0
IHRoYXQgTlBPYmplY3QgYmVsb25ncyB0by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRo
YXQgdGhlIG9iamVjdCBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0
YW5jZSBnb2VzIGF3YXkuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAg
ICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW47CisKKyAgICAvLyBQcmV2ZW50
IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5
LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0gImF1
ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1
aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1lc3NhZ2VSZWN1cnNpdmVseTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJUKHBh
cmFtTmFtZXMuc2l6ZSgpID09IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBz
aXplID0gcGFyYW1OYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7CisK
KyAgICBtX3BhcmFtTmFtZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhz
aXplb2YoY2hhciopICogc2l6ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9j
YXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBpZiAoKG1fcXVpcmtz
ICYgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UocGFyYW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0
cmluZyhwYXJhbU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9
IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291bnQr
KzsKKyAgICB9CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCitQbHVnaW5W
aWV3R3RrOjpQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KQorICAgIDogbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9wYXJlbnRGcmFtZShwYXJl
bnRGcmFtZSkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9pc1N0YXJ0ZWQoZmFs
c2UpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9h
ZGVyKCktPmNvbXBsZXRlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSkp
CisgICAgLCBtX3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgLCBt
X3JlcXVlc3RUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVyRmlyZWQpCisg
ICAgLCBtX2ludmFsaWRhdGVUaW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVRp
bWVyRmlyZWQpCisgICAgLCBtX3BhcmFtTmFtZXMoMCkKKyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkK
KyAgICAsIG1fcXVpcmtzKDApCisgICAgLCBtX3dpbmRvdygwKQorICAgICwgbV9pc1dpbmRvd2Vk
KHRydWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShm
YWxzZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9sYXN0TWVzc2Fn
ZSgwKQorICAgICwgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jKGZhbHNlKQorICAgICwgbV9sb2Fk
TWFudWFsbHkobG9hZE1hbnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAsIG1f
d2lkZ2V0KDApCisgICAgLCBtX25lZWRzWEVtYmVkKGZhbHNlKQoreworICAgIGlmICghbV9wbHVn
aW4pIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3Ry
dWN0OworICAgIG1faW5zdGFuY2UtPm5kYXRhID0gdGhpczsKKworICAgIG1fbWltZVR5cGUgPSBt
aW1lVHlwZS51dGY4KCk7CisgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVUeXBlKTsKKworICAgIHNl
dFBhcmFtZXRlcnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworCisgICAgbV9tb2RlID0gbV9s
b2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQ7CisKKyAgICByZXNpemUoc2l6ZSk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxp
emVkKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisg
ICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3Rh
dHVzQ2FuTm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1fcGx1Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1f
bmVlZHNYRW1iZWQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmlu
ZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAg
ICBtX3dpZGdldCA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRk
KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7Cisg
ICAgICAgIHNldEd0a1dpZGdldChtX3dpZGdldCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fd2lk
Z2V0ID0gZ3RrX3h0YmluX25ldyhHVEtfV0lER0VUKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29u
dGFpbmluZ1dpbmRvdygpKS0+d2luZG93LCBOVUxMKTsKKyNlbHNlCisgICAgbV93aWRnZXQgPSBn
ZGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7CisgICAgc2V0R3RrV2lkZ2V0KG1f
d2lkZ2V0KTsKKyNlbmRpZgorCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBmcmFt
ZUdlb21ldHJ5KCkueCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBmcmFtZUdlb21ldHJ5KCkud2lk
dGgoKSwgZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5H
X1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICBpZiAoIW1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRn
ZXQpLCBhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7CisgICAgICAgIGd0a194dGJpbl9yZXNp
emUobV93aWRnZXQsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKKyAgICB9
CisjZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworI2lmIGRlZmluZWQo
R0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAg
TlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFj
a1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9uZWVkc1hFbWJl
ZCkgeworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkobV93aWRnZXQt
PndpbmRvdyk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3dp
bmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAgd3MtPmRlcHRoID0g
Z2RrX3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpLT5kZXB0aDsKKyAgICAgICAg
d3MtPmNvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfd2luZG93X2dldF9jb2xv
cm1hcChtX3dpZGdldC0+d2luZG93KSk7CisgICAgICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19Y
V0lORE9XKG1fd2lkZ2V0LT53aW5kb3cpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdzLT5kaXNw
bGF5ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5OworICAgICAgICB3cy0+dmlzdWFs
ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgICAgIHdzLT5k
ZXB0aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgIHdz
LT5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7Cisg
ICAgICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisKKyAgICAg
ICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7CisgICAgfQorCisgICAgbV9ucFdpbmRvdy53c19pbmZv
ID0gd3M7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisgICAgbV93aW5kb3cg
PSBHREtfV0lORE9XX0hXTkQobV93aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKworICAgIGlmICht
X2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2lu
ZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsK
KyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcXVp
cmtzICYgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAgICAgIHNldE5Q
V2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VS
VCghbV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3Ry
ZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3Rp
dmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwKTsKKyAgICBtX21hbnVhbFN0
cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJl
Y2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
bV9tYW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0
YSgwLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZpbmlzaExv
YWRpbmcoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0
cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0
cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmll
d0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UGx1Z2luVmlld0d0a19ICisjZGVmaW5lIFBsdWdpblZpZXdHdGtfSAorCisjaW5jbHVkZSA8Z3Rr
L2d0a3dpZGdldC5oPgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJucHJ1bnRp
bWVfcHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFj
ZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAg
c3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBj
bGFzcyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luTWVzc2Fn
ZVRocm90dGxlckd0azsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBs
dWdpblJlcXVlc3RHdGs7CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrOworICAgIGNsYXNzIFJl
c291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICAKKyAgICBlbnVt
IFBsdWdpblF1aXJrcyB7CisgICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50
ID0gMSA8PCAwLAorICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0g
MSA8PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwg
CisgICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMs
CisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8
IDQsCisgICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAg
ICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0g
MSA8PCA2CisgICAgfTsKKworICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKKyAgICAgICAgUGx1Z2lu
U3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBs
dWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5CisgICAgfTsKKwor
ICAgIGNsYXNzIFBsdWdpblZpZXdHdGsgOiBwdWJsaWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwg
UGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAg
dmlydHVhbCB+UGx1Z2luVmlld0d0aygpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBs
dWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0
YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAgICAgICB2b2lkIHNldE5Q
V2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3Rr
KiBjdXJyZW50UGx1Z2luVmlldygpOworCisgICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAg
ICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3Rp
ZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVy
cm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0
cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJl
YW0pOworICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZv
aWQqIGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3Ry
ZWFtLCBOUFJlYXNvbiByZWFzb24pOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsK
KyAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJy
b3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAg
TlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAg
ICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2b2lkIGludmFsaWRh
dGVSZWdpb24oTlBSZWdpb24pOworICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAg
ICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayopOworCisgICAgICAgIC8v
IFdpZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnko
Y29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2hvdygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAg
ICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJl
bnQoU2Nyb2xsVmlldyopOworCisgICAgICAgIGdsb25nIHduZFByb2MoWElEIGhXbmQsIGd1aW50
IG1lc3NhZ2UsIGd1aW50IHdQYXJhbSwgZ2xvbmcgbFBhcmFtKTsKKworICAgICAgICAvLyBVc2Vk
IGZvciBtYW51YWwgbG9hZGluZworICAgICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciosIGludCk7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICB2
b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgdm9pZCBpbml0KCk7Cisg
ICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisgICAgICAgIHN0YXRp
YyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqKTsKKyAgICAgICAgTlBF
cnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+IG1fcGx1Z2lu
OworICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIEZyYW1lKiBtX3BhcmVudEZy
YW1lOworICAgICAgICBib29sIG1faXNTdGFydGVkOworICAgICAgICBLVVJMIG1fdXJsOworICAg
ICAgICBLVVJMIG1fYmFzZVVSTDsKKyAgICAgICAgUGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAg
ICAgICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlkUmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJm
b3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1
ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChU
aW1lcjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1f
cmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lcjxQbHVnaW5WaWV3R3RrPiBtX2ludmFsaWRhdGVU
aW1lcjsKKworICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNz
YWdlVGhyb3R0bGVyOworCisgICAgICAgIHZvaWQgdXBkYXRlV2luZG93KCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAg
ICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
Kik7CisgICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisKKyAgICAg
ICAgaW50IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioq
IG1fcGFyYW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisKKyAgICAgICAg
Q1N0cmluZyBtX21pbWVUeXBlOworICAgICAgICBDU3RyaW5nIG1fdXNlckFnZW50OworCisgICAg
ICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAg
ICAgICBOUFdpbmRvdyBtX25wV2luZG93OworCisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdp
blN0cmVhbUd0az4gPiBtX3N0cmVhbXM7CisgICAgICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0R3Rr
Kj4gbV9yZXF1ZXN0czsKKworICAgICAgICBpbnQgbV9xdWlya3M7CisgICAgICAgIGJvb2wgbV9p
c1dpbmRvd2VkOworICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKKyAgICAgICAgYm9vbCBt
X2lzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKKworICAgICAgICBY
SUQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworICAgICAgICBtdXRhYmxlIElu
dFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2Vk
IHBsdWctaW4KKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdp
bmRvdyByZWN0LgorCisgICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJv
b2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOworCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFs
bHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IG1fbWFudWFsU3RyZWFtOworCisg
ICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVnaW5WaWV3OworCisgICAg
ICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
bnBhcGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5k
YXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGlu
c3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29y
a2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxs
IHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlz
IG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6OnN0YXJ0LgorLy8gVGhp
cyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2Ug
Y2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5j
ZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3Rh
bmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICBy
ZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwordm9pZCogTlBO
X01lbUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisK
K3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUocHRyKTsKK30KKwordWlu
dDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2Vz
KQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBFcnJvciBOUE5f
UmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCkKK3sK
KyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBFcnJvciBOUE5fR2V0VVJM
Tm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7Cit9CisKK05Q
RXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5Q
UCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7Cisg
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkxOb3RpZnko
dXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBO
UE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQoreworICAgIHJl
dHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0
LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFu
Y2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVh
bSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3Ry
ZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBOX1dyaXRlKE5QUCBpbnN0
YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0cmVhbSwgbGVu
LCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsK
K30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1
Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAg
ICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFnZW50IHdpdGggYSBudWxs
IGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24hCisgICAgIC8vIFdlJ2Qg
bmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2aW5nIGEgZnJhbWUgYXJv
dW5kLgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsKKyAKKyAgICByZXR1cm4g
dmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5z
dGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOworfQorCit2b2lkIE5QTl9J
bnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKK3sK
KyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGlu
dmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7
CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30K
KworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0
YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZh
bHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQorewor
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlh
YmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1
cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGlu
c3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQK
K05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQp
Cit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQor
eworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVn
aW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyogLSotIE1v
ZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zm
c2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLwor
IAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEu
MS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUg
c3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRo
ZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJl
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNl
LgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCisg
KgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBT
dW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFs
IERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICog
QWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRl
ciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisg
KiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJl
IGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFs
bG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0
ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhl
cnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRv
IG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25l
IG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VO
U0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3NhZ2VzICovCisjZGVmaW5lIFhFTUJF
RF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElW
QVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFICAgICAgICAy
CisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAgICAgICAgMworI2RlZmluZSBYRU1C
RURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAg
ICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NVU19ORVhUICAgICAgICAgICAgICAg
NgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgWEVN
QkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZ
ICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT04gICAgICAgICAgICAg
IDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAgICAgICAgICAgMTEKKworLyogTm9u
IHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAg
ICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFCX0tFWSAgICAgICAgICAgMTA5CisK
Ky8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICovCisjZGVmaW5lIFhFTUJFRF9GT0NV
U19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAg
ICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1QgICAgICAgICAgICAgICAyCisKKy8q
IEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAg
ICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBMVUdJTl9E
RUJVR19IX18KKyNkZWZpbmUgUExVR0lOX0RFQlVHX0hfXworCisjaW5jbHVkZSAibnBydW50aW1l
X3Byb3h5LmgiCisKK3N0YXRpYyBjaGFyKiBlcnJvclN0cmluZ3NbXSA9IHsKKyAgICAiTm8gZXJy
b3JzIG9jY3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9SICovCisgICAgIkVycm9yIHdpdGggbm8g
c3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICov
CisgICAgIkludmFsaWQgaW5zdGFuY2UgcGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJS
X0lOVkFMSURfSU5TVEFOQ0VfRVJST1IgKi8KKyAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4i
LCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNUQUJMRV9FUlJPUiAqLworICAgICJMb2FkaW5nIG9mIHBs
dWctaW4gZmFpbGVkLiIsIC8qIE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLworICAg
ICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJP
UiAqLworICAgICJQbHVnLWluIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X1BMVUdJTl9FUlJPUiAqLworICAgICJQbHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFs
aWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRElSX0VSUk9SICovCisgICAgIlZlcnNpb25z
IG9mIHBsdWctaW4gYW5kIENvbW11bmljYXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5D
T01QQVRJQkxFX1ZFUlNJT05fRVJST1IgKi8KKyAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52
YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BBUkFNICovCisgICAgIlVSTCBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9VUkwgKi8KKyAgICAiRmlsZSBtaXNzaW5nIG9yIGlu
dmFsaWQuIiwgLyogTlBFUlJfRklMRV9OT1RfRk9VTkQgKi8KKyAgICAiU3RyZWFtIGNvbnRhaW5z
IG5vIGRhdGEuIiwgLyogTlBFUlJfTk9fREFUQSAqLworICAgICJTZWVrYWJsZSBzdHJlYW0gZXhw
ZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFNX05PVF9TRUVLQUJMRSAqLworICAgICJVbmtub3duIGVy
cm9yIGNvZGUiCit9OworCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBMT0dfTlBFUlJPUihlcnIp
IGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIF9SUFRGMihfQ1JUX1dBUk4sICIlczogJXNcbiIs
IF9fRlVOQ1RJT05fXywgZXJyb3JTdHJpbmdzW2Vycl0pCisjZGVmaW5lIExPR19QTFVHSU5fTkVU
X0VSUk9SKCkgX1JQVEYxKF9DUlRfV0FSTiwgIiVzOiBTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9i
bGVtcyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJv
YmxlbXMuXG4iLCBfX0ZVTkNUSU9OX18pCisjZWxzZQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9F
UlJPUigpICgodm9pZCkwKQorI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpICgodm9pZCkwKQorI2Vu
ZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBfTlBGVU5DVElPTlNfSF8KKyNk
ZWZpbmUgX05QRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJveHkuaCIKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChY
UF9XSU4pCisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKF9f
c3RkY2FsbCAqIF9uYW1lKQorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUs
IF9uYW1lKSBfdHlwZSAoKiBfbmFtZSkKKyNlbmRpZgorCit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
R2V0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0
IGNoYXIqIHdpbmRvdywgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
UG9zdFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25z
dCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUs
IHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1JlcXVlc3RSZWFkUHJv
Y1B0cikoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Cit0eXBlZGVm
IE5QRXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBl
IHR5cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0pOwordHlwZWRlZiBp
bnQzMiAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwg
aW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0Rlc3Ryb3lT
dHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJl
YXNvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fU3RhdHVzUHJvY1B0cikoTlBQIGluc3RhbmNlLCBj
b25zdCBjaGFyKiBtZXNzYWdlKTsKK3R5cGVkZWYgY29uc3QgY2hhciooKk5QTl9Vc2VyQWdlbnRQ
cm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQ
dHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVlUHJvY1B0cikodm9p
ZCogcHRyKTsKK3R5cGVkZWYgdWludDMyICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyIHNp
emUpOwordHlwZWRlZiB2b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyKShOUEJvb2wgcmVs
b2FkUGFnZXMpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFZhbHVlUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYg
TlBFcnJvciAoKk5QTl9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVj
dFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKK3R5cGVkZWYgdm9pZCAoKk5Q
Tl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24p
OwordHlwZWRlZiB2b2lkICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsK
K3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Q
b3N0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIq
IHdpbmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBl
ZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCog
KCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgq
TlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBl
bmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRy
KShOUFAgaW5zdGFuY2UpOworCit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1
ZVByb2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOworCit0eXBlZGVmIE5QSWRlbnRpZmllciAo
Kk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7Cit0
eXBlZGVmIHZvaWQgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyKSAoY29uc3QgTlBV
VEY4ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIgKmlkZW50aWZpZXJz
KTsKK3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyKSAo
aW50MzJfdCBpbnRpZCk7Cit0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQ
cm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBib29sICgqTlBOX0lk
ZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBl
ZGVmIE5QVVRGOCAqKCpOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmll
ciBpZGVudGlmaWVyKTsKKwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fQ3JlYXRlT2JqZWN0UHJv
Y1B0cikgKE5QUCwgTlBDbGFzcyAqYUNsYXNzKTsKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX1Jl
dGFpbk9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9S
ZWxlYXNlT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRlZiBib29sICgqTlBO
X0ludm9rZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbWV0
aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJp
YW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyKSAo
TlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBh
cmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRl
UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFy
aWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9HZXRQcm9wZXJ0eVByb2NQdHIpIChO
UFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgTlBWYXJp
YW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5Q
UCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBO
UFZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIp
IChOUFAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBl
ZGVmIGJvb2wgKCpOUE5fSGFzTWV0aG9kUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9i
aiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVBy
b3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9i
amVjdCAqb2JqLCBjb25zdCBOUFVURjggKm1lc3NhZ2UpOwordHlwZWRlZiBib29sICgqTlBOX0Vu
dW1lcmF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAq
KmlkZW50aWZpZXIsIHVpbnQzMl90ICpjb3VudCk7CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9O
ZXdQcm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1v
ZGUsIGludDE2IGFyZ2MsIGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSog
c2F2ZWQpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QUF9OZXdTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwg
TlBTdHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0eXBlKTsKK3R5cGVk
ZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBQX1N0cmVh
bUFzRmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hh
ciogZm5hbWUpOwordHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQz
Ml90IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBQcmludCogcGxhdGZvcm1QcmludCk7Cit0eXBlZGVmIGludDE2ICgq
TlBQX0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBl
ZGVmIHZvaWQgKCpOUFBfVVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBVUkwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJy
b3IgKCpOUFBfR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwor
dHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Qcm9jUHRyKSh2b2lk
KTsKKwordHlwZWRlZiB2b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKK3R5
cGVkZWYgdm9pZCogICBKUklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMgcmlnaHQgbm93CisK
K3R5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAg
IHVpbnQxNiB2ZXJzaW9uOworICAgIAorICAgIE5QTl9HZXRVUkxQcm9jUHRyIGdldHVybDsKKyAg
ICBOUE5fUG9zdFVSTFByb2NQdHIgcG9zdHVybDsKKyAgICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRy
IHJlcXVlc3RyZWFkOworICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBO
UE5fV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QTl9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0
cm95c3RyZWFtOworICAgIE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKKyAgICBOUE5fVXNlckFn
ZW50UHJvY1B0ciB1YWdlbnQ7CisgICAgTlBOX01lbUFsbG9jUHJvY1B0ciBtZW1hbGxvYzsKKyAg
ICBOUE5fTWVtRnJlZVByb2NQdHIgbWVtZnJlZTsKKyAgICBOUE5fTWVtRmx1c2hQcm9jUHRyIG1l
bWZsdXNoOworICAgIE5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxvYWRwbHVnaW5zOworICAg
IE5QTl9HZXRKYXZhRW52UHJvY1B0ciBnZXRKYXZhRW52OworICAgIE5QTl9HZXRKYXZhUGVlclBy
b2NQdHIgZ2V0SmF2YVBlZXI7CisgICAgTlBOX0dldFVSTE5vdGlmeVByb2NQdHIgZ2V0dXJsbm90
aWZ5OworICAgIE5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90aWZ5OworICAgIE5Q
Tl9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBOX1NldFZhbHVlUHJvY1B0ciBzZXR2
YWx1ZTsKKyAgICBOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRhdGVyZWN0OworICAg
IE5QTl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0ciBpbnZhbGlkYXRlcmVnaW9uOworICAgIE5QTl9G
b3JjZVJlZHJhd1Byb2NQdHIgZm9yY2VyZWRyYXc7CisgICAgCisgICAgTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXJQcm9jUHRyIGdldHN0cmluZ2lkZW50aWZpZXI7CisgICAgTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXJzUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKKyAgICBOUE5fR2V0SW50SWRl
bnRpZmllclByb2NQdHIgZ2V0aW50aWRlbnRpZmllcjsKKyAgICBOUE5fSWRlbnRpZmllcklzU3Ry
aW5nUHJvY1B0ciBpZGVudGlmaWVyaXNzdHJpbmc7CisgICAgTlBOX1VURjhGcm9tSWRlbnRpZmll
clByb2NQdHIgdXRmOGZyb21pZGVudGlmaWVyOworICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclBy
b2NQdHIgaW50ZnJvbWlkZW50aWZpZXI7CisgICAgTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIgY3Jl
YXRlb2JqZWN0OworICAgIE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFpbm9iamVjdDsKKyAg
ICBOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIgcmVsZWFzZW9iamVjdDsKKyAgICBOUE5fSW52b2tl
UHJvY1B0ciBpbnZva2U7CisgICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1
bHQ7CisgICAgTlBOX0V2YWx1YXRlUHJvY1B0ciBldmFsdWF0ZTsKKyAgICBOUE5fR2V0UHJvcGVy
dHlQcm9jUHRyIGdldHByb3BlcnR5OworICAgIE5QTl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJv
cGVydHk7CisgICAgTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKKyAg
ICBOUE5fSGFzUHJvcGVydHlQcm9jUHRyIGhhc3Byb3BlcnR5OworICAgIE5QTl9IYXNNZXRob2RQ
cm9jUHRyIGhhc21ldGhvZDsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVs
ZWFzZXZhcmlhbnR2YWx1ZTsKKyAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRp
b247CisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFi
bGVkc3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBz
ZW5hYmxlZHN0YXRlOworICAgIE5QTl9FbnVtZXJhdGVQcm9jUHRyIGVudW1lcmF0ZTsKK30gTlBO
ZXRzY2FwZUZ1bmNzOworCit0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7CisgICAgdWlu
dDE2IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgTlBQX05ld1Byb2NQdHIgbmV3cDsK
KyAgICBOUFBfRGVzdHJveVByb2NQdHIgZGVzdHJveTsKKyAgICBOUFBfU2V0V2luZG93UHJvY1B0
ciBzZXR3aW5kb3c7CisgICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5Q
UF9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QUF9TdHJlYW1Bc0Zp
bGVQcm9jUHRyIGFzZmlsZTsKKyAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsK
KyAgICBOUFBfV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7
CisgICAgTlBQX0hhbmRsZUV2ZW50UHJvY1B0ciBldmVudDsKKyAgICBOUFBfVVJMTm90aWZ5UHJv
Y1B0ciB1cmxub3RpZnk7CisgICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKKyAgICBOUFBfR2V0
VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7
Cit9IE5QUGx1Z2luRnVuY3M7CisKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwg
TlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsK
K3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dldE1JTUVEZXNjcmlw
dGlvbkZ1bmNQdHIpKHZvaWQpOworCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCit0eXBlZGVmIHZv
aWQgICAgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQp
OwordHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1
Z2luRnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7CisjZW5kaWYKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDkzOSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBp
bmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFu
ZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5T
RSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgor
ICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExp
Y2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJ
bml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lz
dGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2gg
Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxl
IGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2Yg
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0
aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwg
aW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRl
CisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBM
LCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoq
KioqICovCisgCisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xr
aXQgY29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLwor
CisjaW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8
Z3RrL2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdk
ay9nZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1
ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9Y
dCBzdHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+
CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2lu
Y2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50
IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0
cnVjdGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5U
UyAzMAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtY
dEJpbkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0
ICAgICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0
a194dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lk
ICAgICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdl
dCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmpl
Y3QgICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRk
b3duICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8K
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGll
bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZp
c3VhbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4
dGNvbG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4
dGRlcHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50
ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lu
ZG93IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lk
dGggKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4
dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVu
dCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lk
Z2V0IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5k
bGVyIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVu
dF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQg
KmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAg
ICAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEg
KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0
IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9y
ZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3Rh
dGljIHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAg
IGVycm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJv
ciB0cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7
CitzdGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAg
ICAoKm9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRp
YyBpbnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRD
bGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRk
aXNwbGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsK
K3N0YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0
aWMgZ2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAg
ICAgICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xs
aW5nX3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0
YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAor
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsK
KworICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsK
KyAgR0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkK
K3sKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2
ZW50cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRk
aXNwbGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFu
KW1hc2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOwor
fSAgIAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291
cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50
OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRv
QXBwbGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7
CisKKyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sg
Zm9yIGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMg
YW5kIG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9v
ayBmb3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBz
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQu
ICAqLworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNw
bGF5KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9
CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3Rh
dGljIEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwK
KyAgeHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChH
U291cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0
aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNl
cl9kYXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBp
bnQgZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9k
YXRhOworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisg
IC8qIFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHBy
b2Nlc3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25z
dW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUg
YXBwIGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8g
MjAgWHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMg
aXMgYSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBo
YXZlIG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nl
c3MtLSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElN
QWxsKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAo
dm9pZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJp
bl90eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9Cisg
ICAgICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAor
ICAgICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVu
YykgZ3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3Rr
X3h0YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyog
cmVzZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAg
ICAgfTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tF
VCwgJnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRp
YyB2b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7Cisg
IEd0a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3Rf
Y2xhc3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tF
VCk7CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRn
ZXRfY2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51
bnJlYWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19P
QkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0Ymlu
X2Rlc3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0
YmluKQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5k
b3cgPSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0
YmluLT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRn
ZXQgKndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAv
KiBnZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50Zigi
Z3RrX3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChH
VEtfSVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOwor
CisgIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193
aW5kb3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwg
JmQpOworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOwor
ICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRc
biIsIHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxv
Y2F0aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdo
dDsKKworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xB
U1MocGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0
IGNsaWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCks
IAorICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAg
eHRiaW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93
ID0gWHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNo
KCk7CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBp
dCB0byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdl
dCksIHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3
IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4
dGJpbjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9
IE5VTEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlm
ICgheHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAg
ZmFsbGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRi
aW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYo
eHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRf
dmlzdWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xv
cm1hcCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4
dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWls
ZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8K
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRp
c3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsK
KyAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRo
ZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAg
bWFpbmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAg
IGNudW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xp
YiBldmVudCBsb29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBn
dGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19z
b3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICgh
Z3MpIHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9z
ZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9j
YW5fcmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01h
aW5Db250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25O
dW1iZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIo
eHRkaXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOwor
ICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9s
bF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAg
IGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhh
dCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3Rp
bWVyX2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAg
ICAoR3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2Ug
Y291bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8K
KyAgeHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193
aWRnZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cp
OworICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2Vy
X2RhdGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lE
R0VUICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0Qmlu
ICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJp
bi0+eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtf
d2luZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9p
ZAorZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAg
ICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQp
Cit7CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdl
dCk7CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisg
IHByaW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdp
ZHRoLCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRi
aW4tPndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNl
dFZhbHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0g
MTsKKyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBo
ZWlnaHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRW
YWx1ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5l
ZWQgdG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUK
KyAgICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxv
Y2F0aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsK
KyAgYWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6
ZV9hbGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194
dGJpbl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47
CisgIEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJn
dGtfeHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0
cm95KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0
YmluID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsK
KworICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYg
KEdUS19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXpl
KCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVu
dF9jbGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJp
bl9kZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNl
bmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5f
aWZfZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAo
b2JqZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2
ZW50IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkp
OworICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1
Y2Ugb3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5p
bmcgd2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20g
dGhlIG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJV
R19YVEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRo
ZSBtYWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9s
bCgoR01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJj
ZV9yZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGlt
ZXJfaWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAg
R1RLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8q
CisqIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBj
bGllbnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4
dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlz
dWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAg
ICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4
dDsKKyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7
CisKKyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRv
cF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRj
bGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7
CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOwor
CisgIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHBy
aW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5p
dGlhbGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQo
KTsKKyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFw
cF9jb250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFw
cF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRk
aXNwbGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50
LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlz
dWFsOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54
dGRlcHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0
cworKiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xp
ZW50ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAg
ICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAor
eworICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0
ICAgICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lm
ZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5k
aWYKKyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBw
ZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdp
ZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0
ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4
dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQg
d2luZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVp
Z2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOwor
ICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBY
dFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBY
dE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAg
ICB3aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQt
Pnh0dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xp
ZW50LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0
Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVy
V2lkdGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisK
KyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2lu
ZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93
ID0gZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2gg
aW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2Ug
Pj0gNgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAg
ICAgICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdl
dCk7CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAg
ICAgICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93
aWRnZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1
dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRn
ZXQpLCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChj
aGlsZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRj
bGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50
IGhhbmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAg
ICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xp
ZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRf
d2lkZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1
dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAg
ICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAg
ICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXks
IEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVu
dCogeHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0
VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAg
ICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRV
bnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAg
ICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBm
bHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29y
ZS53aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMg
Z29uZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGll
bnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRV
bnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAg
ICAgICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQorewor
ICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0
Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50
KTsKKyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xp
ZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAor
eHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQor
eworICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVy
bkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1
ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVm
ZmVyWzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwg
WHRXaW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20s
IDMyLAorICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9j
bGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2Rh
dGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNs
aWVudF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBj
YXNlIFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJ
TkRPV19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50
IGdldCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBj
YXNlIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHBy
aW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlm
CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7Cisj
ZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERF
QlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZc
biIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNl
IFhFTUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1l
bXNldCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xp
ZW50LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgor
ICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAg
ICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRc
biIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAg
ICAgfQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hp
bGRfd2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBs
dWctPmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNo
aWxkX3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAg
ICAgICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2
ZW50ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFs
c2UpOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBF
bmQgb2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2Ns
aWVudF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZl
bnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0
YTsKKyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNz
YWdlOgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQt
PnhjbGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0
RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJl
ZF9tZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsK
KyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5n
Tm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2lu
Zm8gKHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94
ZW1iZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1C
RURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZv
Y3VzT3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2go
ZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChY
dENsaWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3Nh
Z2UsCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAg
ICAgIGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sK
KyAgWEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lk
Z2V0KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNv
ZGU7CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xp
ZW50LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOwor
ICB4ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQi
LEZhbHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50
LmRhdGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdl
OworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVu
dC5kYXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7
CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZl
bnRNYXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29k
ZSA9IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJz
ZW5kX3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisg
IH0KK30KKworc3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAq
ZGlzcGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBl
cnJvci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAg
IAordHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRf
ZXJyb3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0
YXRpYyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5k
bGVyKG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0
cmFwcGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3Jf
Y29kZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5l
ciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERp
c3BsYXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9k
YXRhOworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBl
KQorICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRl
d2luZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9X
aWRnZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNo
aWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2Rh
dGEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAg
ICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7
CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFy
ZW50ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAg
IFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5k
b3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVy
X3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+
eHJlcGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxk
ICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVu
dCAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lm
IDAKKyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dp
ZGdldCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAg
ICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQt
PnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdl
dCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOwor
ICBsb25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBp
bnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRl
cyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIu
eW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VN
YXNrOworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5k
b3codyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxl
cih3LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRv
blJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMg
dm9pZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9k
YXRhKQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92
ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1h
c2ssIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGll
bnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisK
K3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9v
dCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVl
cm9vdCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERp
c3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hp
bGRyZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4
dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRf
Zm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOwor
ICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5j
aGlsZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBp
Zih1bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVu
OyArK2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRy
ZW5baV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJl
ZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKwor
ICByZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3Rr
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdlR3RrOjp+UGx1Z2luUGFja2FnZUd0aygpCit7
CisgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKK30KKworUGx1Z2luUGFja2FnZUd0azo6UGx1Z2lu
UGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVk
KQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9k
aWZpZWQobGFzdE1vZGlmaWVkKQorICAgICwgbV9pc0xvYWRlZChmYWxzZSkKKyAgICAsIG1fbG9h
ZENvdW50KDApCit7CisgICAgaW50IHBvcyA9IG1fcGF0aC5kZXByZWNhdGVkU3RyaW5nKCkuZmlu
ZFJldignLycpOworCisgICAgbV9maWxlTmFtZSA9IG1fcGF0aC5yaWdodChtX3BhdGgubGVuZ3Ro
KCkgLSBwb3MgLSAxKTsKKworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmZldGNoSW5mbygp
Cit7CisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IGdjaGFyKiB0eXBlcyA9IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7CisgICAgZ2NoYXIqKiBt
aW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAgICBmb3IgKGludCBpID0g
MDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7CisgICAgICAgIGdjaGFy
KiogbWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWVEZXNjc1tpXSwgIjoiLCAzKTsKKworICAgICAg
ICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVEYXRhWzJdKTsKKyAg
ICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0YVsxXSwgIiwiLCAt
MSk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0VmVjdG9yOworICAgICAgICBmb3IgKGlu
dCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQorICAgICAgICAgICAgZXh0VmVjdG9yLmFwcGVu
ZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0pKTsKKworICAgICAgICBtX21pbWVUb0V4
dGVuc2lvbnMuYWRkKG1pbWVEYXRhWzBdLCBleHRWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rl
c2NyaXB0aW9ucy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgICBnX3N0
cmZyZWV2KGV4dGVuc2lvbnMpOworICAgICAgICBnX3N0cmZyZWV2KG1pbWVEYXRhKTsKKyAgICB9
CisgICAgZ19zdHJmcmVldihtaW1lRGVzY3MpOworCisgICAgY2hhciogYnVmZmVyID0gMDsKKyAg
ICBOUEVycm9yIGVyciA9IG1fTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAm
YnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX25hbWUg
PSBidWZmZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IG1fTlBQX0dldFZhbHVlKDAs
IE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBO
UEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHVu
bG9hZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6Omxv
YWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3Bl
bigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAo
IW1fbW9kdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1
ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJv
ciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUi
LCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUs
ICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZtX05QX0dldE1JTUVEZXNjcmlwdGlv
bik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iLCAodm9pZCoq
KSZtX05QUF9TaHV0ZG93bik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0
VmFsdWUiLCAodm9pZCoqKSZtX05QUF9HZXRWYWx1ZSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxp
emUgfHwgIW1fTlBfR2V0TUlNRURlc2NyaXB0aW9uIHx8ICFtX05QUF9TaHV0ZG93biB8fCAhbV9O
UFBfR2V0VmFsdWUpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2lu
RnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXpl
ID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNp
emVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9W
RVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7Cisg
ICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1
bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5l
d3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5f
V3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3Ry
ZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93
c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1h
bGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01l
bUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAg
bV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93
c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZh
bHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0g
TlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24g
PSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9
IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dl
dEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBl
ZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNo
UG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRz
dGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5y
ZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBO
X0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5n
ID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21p
ZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3Mu
Y3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0
YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFz
ZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2Ug
PSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9J
bnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7Cisg
ICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1f
YnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Mu
c2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51
bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1f
YnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05P
X0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZCgpCit7Cisg
ICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoLS1tX2xvYWRD
b3VudCA+IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fTlBQX1NodXRkb3duKCk7CisKKyAg
ICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1
bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENvdW50ID09IDApOworICAgIEFTU0VSVChtX21v
ZHVsZSk7CisKKyAgICBnX21vZHVsZV9jbG9zZSAobV9tb2R1bGUpOworCisgICAgbV9pc0xvYWRl
ZCA9IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5QYWNrYWdlR3RrOjpjcmVh
dGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQp
Cit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlR3Rr
KHBhdGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7
CisgICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2VHdGs6Omhh
c2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1f
cGF0aC5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIq
PihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQor
Citib29sIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGEs
IGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlv
biA9PSBiLm1fZGVzY3JpcHRpb247Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luU3RyZWFtR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1H
dGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRl
ICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
U3VicmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVj
YXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8v
IGFuZCB0aGlzIHdheSB3ZSB3b24ndCBjbGFzaCB3aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50
IFdlYlJlYXNvbk5vbmUgPSAtMjsKKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+
IFN0cmVhbU1hcDsKK3N0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBT
dHJlYW1NYXAgc3RhdGljU3RyZWFtczsKKyAgICByZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKwor
UGx1Z2luU3RyZWFtR3RrOjpQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmll
dywgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgIDogbV9yZXNvdXJj
ZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1f
cGx1Z2luVmlldyhwbHVnaW5WaWV3KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisg
ICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fbG9hZE1h
bnVhbGx5KGZhbHNlKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1CZWZvcmVTdGFydGVkKQor
ICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIodGhpcywgJlBsdWdpblN0cmVhbUd0azo6ZGVsYXlE
ZWxpdmVyeVRpbWVyRmlyZWQpCisgICAgLCBtX2RlbGl2ZXJ5RGF0YSgwKQorICAgICwgbV90ZW1w
RmlsZUhhbmRsZSgwKQorICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5WaWV3LT5wbHVnaW4oKS0+
cGx1Z2luRnVuY3MoKSkKKyAgICAsIG1faW5zdGFuY2UocGx1Z2luVmlldy0+aW5zdGFuY2UoKSkK
K3sKKyAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsKKworICAgIG1fc3RyZWFtLnVybCA9IDA7Cisg
ICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0
cmVhbS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOworICAgIG1fc3RyZWFt
Lmxhc3Rtb2RpZmllZCA9IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0
YW5jZSk7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6flBsdWdpblN0cmVhbUd0aygpCit7CisgICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xv
YWRlcik7CisKKyAgICBpZiAobV9zdHJlYW0udXJsKQorICAgICAgICBmcmVlKChjaGFyKiltX3N0
cmVhbS51cmwpOworCisgICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOworfQorCit2b2lk
IFBsdWdpblN0cmVhbUd0azo6c3RhcnQoKQoreworICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkp
OworCisgICAgbV9sb2FkZXIgPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKG1f
ZnJhbWUsIHRoaXMpOworCisgICAgbV9sb2FkZXItPnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2Up
OworICAgIG1fbG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5hZGRQbHVnSW5TdHJlYW1Mb2FkZXIo
bV9sb2FkZXIuZ2V0KCkpOworICAgIG1fbG9hZGVyLT5sb2FkKG1fcmVzb3VyY2VSZXF1ZXN0KTsK
K30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUg
PSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFT
U0VSVCghbV9sb2FkZXIpOworCisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRl
ciA9IG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBB
U1NFUlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNM
b2FkaW5nTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2Vs
TWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IobV9yZXNv
dXJjZVJlcXVlc3QpKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbG9h
ZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIgPSAw
OworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0U3RyZWFtKCkKK3sKKyAg
ICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGNv
bnN0IEtVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOworCisgICAg
Ly8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBw
YXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9ybWF0IHVzZWQgd2hl
biByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYgKHJlc3BvbnNlVVJMLnN0cmluZygpLnN0YXJ0
c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0
cmR1cChyZXNwb25zZVVSTC5kZWNvZGVfc3RyaW5nKHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJp
bmcoKSkudXRmOCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVw
KHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCkpOworICAgIAorICAgIENTdHJp
bmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7Cisg
ICAgCisgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNw
b25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9u
c2UuaXNIVFRQKCkpIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAg
ICAgICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCku
ZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJh
Y3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQt
PnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNo
YXIpJ1xuJyk7CisgICAgICAgIH0KKworICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0
KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKworICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBl
bmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5n
dGggdG8gdGhlIHBsdWdpbiwKKyAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGlu
IHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VS
TFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dp
Yy4KKyAgICAgICAgU3RyaW5nIGNvbnRlbnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRW5jb2RpbmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50
RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAg
ICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVh
bS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7Cisg
ICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3Rl
ZENvbnRlbnRMZW5ndGgsIDBMTCk7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmxhc3RNb2RpZmllZERhdGUoKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRh
ID0gbV9ub3RpZnlEYXRhOworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAg
bV9vZmZzZXQgPSAwOworICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFBy
b3RlY3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0
aGUgbmV3c3RyZWFtIGhhbmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0
KHRoaXMpOworCisgICAgTlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbSht
X2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFs
c2UsICZtX3RyYW5zZmVyTW9kZSk7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVz
dHJveWVkIGluIHRoZSBjYWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFz
b24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3N0
cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19F
UlJPUikKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisKKyAgICBpZiAo
bV90cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKChtX3RlbXBGaWxlSGFuZGxlID0gdG1wZmlsZSgpKSAhPSBOVUxMKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRp
bmcgdGhlIHN0cmVhbQorICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19F
UlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtR3RrOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSog
c3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQg
UGx1Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikK
K3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVz
dHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVhc29uID0gcmVh
c29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAgIC8vIFN0b3Ag
YW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2
ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBl
bHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgewor
ICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ry
b3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0
cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbSgpCit7Cisg
ICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFt
X2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgaWYg
KG1fdGVtcEZpbGVIYW5kbGUgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKG1fdGVtcEZpbGVIYW5k
bGUpOworCisgICAgaWYgKG1fc3RyZWFtLm5kYXRhICE9IDApIHsKKyAgICAgICAgaWYgKG1fcmVh
c29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3Ry
YW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX3Bh
dGguaXNOdWxsKCkpOworCisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0
YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGguZGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIE5Q
RXJyb3IgbnBFcnI7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVh
bShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICBtX3N0cmVhbS5u
ZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikKKyAgICAgICAg
bV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVy
bCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOwor
CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0
U3RyZWFtIGNhbiBjYXVzZSB1cyB0byBiZSBkZWxldGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IHByb3RlY3QodGhpcyk7CisgICAgaWYgKCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAg
bV9wbHVnaW5WaWV3LT5kaXNjb25uZWN0U3RyZWFtKHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3
ID0gMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblN0cmVhbUd0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAm
bV9kZWxheURlbGl2ZXJ5VGltZXIpOworCisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQ
bHVnaW5TdHJlYW1HdGs6OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURh
dGEpOworICAgIAorICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNl
TG9hZGVyIG9uIGVycm9yIHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsK
KworICAgIGlmICghbV9zdHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAw
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURh
dGEtPnNpemUoKTsKKyAgICBpbnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIHdo
aWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMiBk
ZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9z
dHJlYW0pOworCisgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAg
IG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxp
dmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAg
ICBpbnQzMiBkYXRhTGVuZ3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRh
dGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAg
ICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBt
X3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRh
TGVuZ3RoLCAodm9pZCopZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDAp
IHsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktf
RVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAgICAg
ICAgICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNE
ZWxpdmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0
b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJl
ZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRlcyA9IHRvdGFs
Qnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92ZShtX2RlbGl2
ZXJ5RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2
ZXJlZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6
ZShyZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2
ZXJ5RGF0YS0+cmVzaXplKDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNv
bk5vbmUpCisgICAgICAgICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9CisgICAg
fSAKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0
IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBk
aWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9w
bGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwgIiIsICIiKSk7CisKKyAgICBpZiAobV9zdHJl
YW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRSZWNl
aXZlRGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOwor
ICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpk
aWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBt
X2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRl
ZCk7CisKKyAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0YXJ0U3Ry
ZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlRGF0YShOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChsZW5ndGgg
PiAwKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKyAgICAK
KyAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQorICAgICAgICBtX2RlbGl2ZXJ5RGF0YS5zZXQobmV3
IFZlY3RvcjxjaGFyPik7CisKKyAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXpl
KCk7CisgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKKyAgICBt
ZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CisK
KyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEg
aXQgY291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgorICAgIFJl
ZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2Zl
ck1vZGUgIT0gTlBfQVNGSUxFT05MWSkKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKworICAgIGlm
IChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3BwZWQgJiYgbV90ZW1wRmlsZUhhbmRsZSAhPSBO
VUxMKSB7CisgICAgICAgIGludCB3cml0dGVuOworICAgICAgICBib29sIHJldHZhbCA9IGZhbHNl
OworCisgICAgICAgIGlmICghcmV0dmFsIHx8IGZwdXRzKGRhdGEsIG1fdGVtcEZpbGVIYW5kbGUp
IDw9IDApCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktf
RVJSKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRGYWlsKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAg
IEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgbV9sb2FkZXIgPSAwOworCisgICAg
ZGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIp
Cit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisKKyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0
cm95U3RyZWFtKE5QUkVTX0RPTkUpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAy
OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4
cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElD
RU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisg
KgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxs
YSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhl
IExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBh
bmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5h
bCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRo
ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jv
c3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0
aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNh
YmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2Yg
ZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisg
KiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1Q
TCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMg
YWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92
aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVs
ZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUg
TVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NL
ICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVmaW5lIF9fR1RLX1hU
QklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPFgxMS9JbnRy
aW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgor
I2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisjaWZkZWYgX0lNUExf
R1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19FWFBPUlRfKHR5cGUp
CisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0eXBlKQorI2Vu
ZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQorI2VuZGlmCisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8K
KwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRlZiBzdHJ1Y3QgX0d0
a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQRV9YVEJJTiAgICAg
ICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19YVEJJTihv
YmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW4p
KQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChHVEtfQ0hFQ0tfQ0xB
U1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5lIEdUS19JU19YVEJJ
TihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCisjZGVmaW5l
IEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgo
a2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVudDsKKworc3RydWN0
IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRvcF93aWRnZXQ7
ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dpZGdldDsgIC8q
IFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAgaW50CQl4dGRl
cHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2luZG93OworfTsKKwor
c3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0OworICBHZGtXaW5k
b3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRpc3BsYXk7ICAgICAg
ICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAgICB4dHdpbmRvdzsg
ICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAgICAgICAgeCwgeTsK
KyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJIHh0Y2xpZW50OyAg
ICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0cnVjdCBfR3RrWHRC
aW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9OworCitHVEtYVEJJ
Tl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7CitHVEtYVEJJTl9B
UEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywg
U3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0YmluX3NldF9wb3Np
dGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtYVEJJTl9BUEkodm9p
ZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCk7
CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0aW9ucyAgdHJhbnNs
YXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIgICAgKi8KKyAg
ICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9jZWR1cmUgYmluZGlu
Z3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3Rh
dGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8KKyAgICB1bnNpZ25l
ZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAgCisKK3R5cGVkZWYg
c3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7ICAgICAgICAgICAg
ICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisgICAgV2lkZ2V0Q2xh
c3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRnZXQncyBDbGFzc1Jl
YyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAgICAgICAgLyogcGFy
ZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFtZSAgICAgICAgIHhy
bV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVhcmtpZmllZCAgICov
CisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyogbWFya2VkIGZvciBk
ZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3QgIGRlc3Ryb3lfY2Fs
bGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVkICovCisgICAgWHRQ
b2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWludCByZWNvcmQgICAg
ICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAgICAgICAgICAgICAg
Lyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAg
ICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMgICAgICAgICAgICAg
ICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAgICAgLyogd2luZG93
IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIG1hbmFn
ZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAgICAgICovCisg
ICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMgd2lkZ2V0IHNlbnNp
dGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFuY2VzdG9yX3NlbnNp
dGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICovCisgICAgWHRFdmVu
dFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBldmVudCBkaXNwYXRj
aGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAgICAgICAgICAgLyog
dHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRUcmFuc2xhdGlvbnMg
IGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRpb25zICAgICAgICAg
ICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAgLyogd2luZG93IGJv
cmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJvcmRlcl9w
aXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAgICAgICovCisgICAg
V2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBvZiBwb3B1cHMgICAg
ICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9wb3B1cHM7ICAgICAg
ICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisgICAgU3RyaW5nICAg
ICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgICAgICAg
ICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAgICAgICAgLyogd2lu
ZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3JtYXAgICAgICAgIGNv
bG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICov
CisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyogd2luZG93IElEICAg
ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIGRlcHRoOyAgICAg
ICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAgICovCisgICAgUGl4
ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJhY2tncm91bmQgcGl4
ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91bmRfcGl4bWFwOyAg
Lyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAgQm9vbGVhbiAgICAg
ICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBhbmQgbm90IG9jY2x1
ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7LyogbWFwIHdp
bmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0OworCit0eXBlZGVmIHN0
cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0gV2lkZ2V0UmVjLCBD
b3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1
cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbUd0a19ICisjZGVmaW5lIFBsdWdpblN0
cmVhbUd0a19ICisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2lu
Y2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hh
c2guaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7CisKKyAgICBlbnVt
IFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3RyZWFtU3RhcnRlZCwg
U3RyZWFtU3RvcHBlZCB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGx1Z2luU3RyZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5TdHJlYW1HdGsoUGx1Z2lu
Vmlld0d0ayosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0cmVhbUd0aygpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKwor
ICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBzZXRMb2FkTWFudWFs
bHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2FkTWFudWFsbHk7IH0K
KworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudAorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIq
LCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAgICAgdm9pZCBzZW5k
SmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBDU3RyaW5nJiBy
ZXN1bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSZWFz
b24pOworCisgICAgICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAgICAgIHZvaWQgZGVz
dHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0cmVhbSgpOworCisg
ICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAgICAgICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7
CisgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbV9sb2FkZXI7Cisg
ICAgICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgdm9pZCogbV9ub3Rp
ZnlEYXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAgICAgUGx1Z2lu
U3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xvYWRNYW51YWxseTsK
KworICAgICAgICBUaW1lcjxQbHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxpdmVyeVRpbWVyOwor
ICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0
az4qKTsKKworICAgICAgICBPd25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVsaXZlcnlEYXRhOwor
CisgICAgICAgIEZJTEUqIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAgY29uc3QgTlBQbHVn
aW5GdW5jcyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAg
IHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzIgbV9vZmZzZXQ7CisgICAgICAg
IENTdHJpbmcgbV9oZWFkZXJzOworICAgICAgICBDU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgTlBS
ZWFzb24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVnaW5QYWNr
YWdlR3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNp
bmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGsgOiBw
dWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVibGljOgorICAgICAg
ICB+UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZUd0ayog
Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlm
aWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
Y3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
aWxlTmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRv
RGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAg
ICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0
ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7
CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRk
b3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25z
dCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdp
blBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVk
OworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRp
b247CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwor
ICAgICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBt
X21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVU
b0V4dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7CisgICAgICAgIHRpbWVf
dCBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRy
IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1f
TlBQX1NodXRkb3duOworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1fTlBQX0dldFZhbHVl
OworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0c2Nh
cGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2th
Z2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFzaCgp
OyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNr
YWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2lu
UGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYg
YikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsg
fQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6
IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3Nz
aWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0
cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdl
VHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2gs
IEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7CisgICAg
ICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
R3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1
Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5
cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdpbkRhdGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5j
bHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRh
dGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAg
c3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBs
dWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAg
ICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVn
aW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJl
dHVybiBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdp
blBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBh
dGgpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVz
aCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNl
dENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucwor
ICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdp
bnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOwor
CisgICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAg
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAg
ICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUo
Kml0KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8v
IFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2Fk
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUo
Kml0KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1
Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdp
bnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9Vbmxv
YWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5n
ZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1
Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0
eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9l
bmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRv
RGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3Rv
cjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAor
eworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhz
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0
aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdp
blNldCBwbHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsK
KyAgICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChp
dC0+dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwpOworICAgICAgICBpZiAoZGlyKSB7CisgICAgICAg
ICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgd2hpbGUgKChuYW1lID0gZ19kaXJf
cmVhZF9uYW1lKGRpcikpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgo
bmFtZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2NoYXIq
IGZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0YSgpLCBuYW1lLCBO
VUxMKTsKKyAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luUGFja2Fn
ZSA9IFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoZmlsZW5hbWUsIHRpbWUoTlVMTCkp
OworICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOworICAgICAgICAgICAgICAgICAg
ICBnX2ZyZWUoZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGdfZGlyX2Nsb3NlKGRpcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gcGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25T
dHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZl
cnNpb247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9z
OworICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsK
KyAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5s
ZW5ndGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3Nd
ID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5z
dWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2
ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVu
ZFBvcyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0
dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29u
c3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0g
PiB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlm
ICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIg
dGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4g
ZmFsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFi
YXNlR3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhz
OworCisgICAgZ2NoYXIqIGhvbWVQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2Rp
cigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChob21l
UGF0aCk7CisgICAgZ19mcmVlKGhvbWVQYXRoKTsKKworICAgIGNvbnN0IGdjaGFyKiBtb3pQYXRo
ID0gZ19nZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQYXRoKSB7CisgICAg
ICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgsICI6IiwgLTEpOwor
CisgICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKyAgICAgICAg
ICAgIHBhdGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAgZ19mcmVlKHBsdWdp
blBhdGhzKTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxh
L3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIp
OworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjppc01J
TUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAoreworICAgIHJl
dHVybiAhbWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5z
KG1pbWVUeXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBs
dWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgU3RyaW5nIGtl
eSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIHJl
dHVybiAoKml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFj
a2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIGV4dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVUb0V4dGVu
c2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lv
bnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVf
aXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6
OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreyAg
IAorICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBpZiAoIW1pbWVUeXBl
LmlzTnVsbCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSB1cmwucGF0
aCgpOworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJpbmcocGF0aC5yZXZl
cnNlRmluZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yRXh0ZW5zaW9u
KGV4dGVuc2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBm
b3VuZCwgcXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAgICAgLy8gY29ycmVz
cG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9
CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQbHVnaW5WaWV3KEZy
YW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSBmaW5kUGx1
Z2luKHVybCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRy
eSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgaWYgKCFw
bHVnaW4gJiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWlt
ZVR5cGUpOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdHdGsocGFyZW50RnJh
bWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywg
bWltZVR5cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbklu
Zm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5z
aWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRhdGFiYXNl
R3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVn
aW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ld
OworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0g
cGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRp
b24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRp
b25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7Cisg
ICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRv
RGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xh
c3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVzLmFw
cGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4gPSBp
bmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1l
VG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAg
IGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAg
ICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpw
bHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0
YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmluZyBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBl
KTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKK3sKKyAg
ICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CisKKyAg
ICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBw
YWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyODgyOCkKKysrIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTEgQEAgREVQRU5EUEFUSCAr
PSBlZGl0aW5nL3F0IGhpc3RvcnkvcXQgbG9hZAogfQogCiBndGstcG9ydCB7Cit4MTE6cGx1Z2lu
cyB7CisgICAgREVGSU5FUyArPSBYUF9VTklYCisgICAgTElCUyArPSAtbFh0Cit9CisKICAgICBJ
TkNMVURFUEFUSCArPSBcCiAgICAgJCRQV0QvcGxhdGZvcm0vZ3RrIFwKICAgICAkJFBXRC9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsgXApAQCAtMTY3LDYgKzE3Miw3IEBAIGd0ay1wb3J0IHsKICAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsgXAogICAgIHBhZ2Uv
Z3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dCBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiB9CkBAIC04NDMsMTMgKzg0OSwzOSBAQCBT
T1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKIAogZ3RrLXBvcnQgeworICAh
cGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9QTFVHSU5TPTEKKyAgfQorICBI
RUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oIFwKKyAgICBw
bHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdl
R3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oIFwKKyAgICBwbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
V2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCisgICAgcGx1Z2lu
cy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0
YWJhc2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luVmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNwcAorCisgIHgxMTpwbHVn
aW5zIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCisg
ICAgcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaCBcCisgICAgcGx1Z2lucy9ndGsveGVtYmVkLmgK
KworICAgIFNPVVJDRVMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0K
IAogcXQtcG9ydCB7CkBAIC05NDksNiArOTgxLDcgQEAgcXQtcG9ydCB7CiB9CiAKIGd0ay1wb3J0
IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3RrCiAgICAgSEVBREVS
UyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwK
ICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oIFwKSW5kZXg6IFdlYkNvcmUv
cGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJh
bWVHdGsuY3BwCShyZXZpc2lvbiAyODgyOCkKKysrIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNCArMjgsMTkgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKIAorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlw
dEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJh
bWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsq
Pih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKIH0KIAogdm9pZCBGcmFtZTo6Y2xlYXJQbGF0
Zm9ybVNjcmlwdE9iamVjdHMoKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJz
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkocmV2
aXNpb24gMjg4MjgpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJldmlzaW9uOwogbXkgJG9z
WFZlcnNpb247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFibGVHdGtQbHVnaW5zOwog
bXkgJGlzV3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0CkBAIC00ODAsNiArNDgy
LDIzIEBAIHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitzdWIgZW5hYmxlR3RrUGx1
Z2lucygpCit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpOworICAgIHJldHVybiAk
ZW5hYmxlR3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKQor
eworICAgIHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5zKTsKKworICAgIGlmIChj
aGVja0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAgICAgICRlbmFibGVHdGtQ
bHVnaW5zID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDE7
CisgICAgfQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5lSXNXeCgpOwpAQCAtNzc5
LDYgKzc5OCw3IEBAIHN1YiBidWlsZFFNYWtlR3RrUHJvamVjdCgkJCkKIAogICAgIG15IEBidWls
ZEFyZ3MgPSAoIkNPTkZJRys9Z3RrLXBvcnQiKTsKICAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05G
SUctPXF0IjsKKyAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUcrPXBsdWdpbnMiIGlmIGVuYWJs
ZUd0a1BsdWdpbnMoKTsKIAogICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xlYW4sIEBi
dWlsZEFyZ3MpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17974</attachid>
            <date>2007-12-18 09:26:32 -0800</date>
            <delta_ts>2007-12-18 09:26:32 -0800</delta_ts>
            <desc>NPAPI scriptability test</desc>
            <filename>npapitest.tar.gz</filename>
            <type>application/x-tar</type>
            <size>65770</size>
            <attacher name="Kai Hendry">hendry</attacher>
            
              <data encoding="base64">H4sIAGlBTEcAA+w8a3PayLL5iqrOf5iwLyAGjI2TPThOLcbYIYvBBTi5qd1TrJAGkC00unoYe1O5
v/12z4xeiJd3be/evVYlRprp6e6Z7unpbjVYtmobHnW98otHu3bhenNwgJ+VNwe78c/gelHZfbO3
v1vdPdh/82K3slfd33tBDh6PpejyXU91CHkxpZbu3K2G29T/f/SyQvnbpj8xrNL04WlskH+1+qYi
5Y8aUAH5V3ffvHlBdh+elfT1/1z+5QIpForknOm0RhqvXh0STx0V54buTWtk75AYlk4trwiNbnHG
gSzDPCRacaS6hlZk47FLPYDkWAplBfAV8CLHzbNWh7RbjWan3yTH7W7jZ9GjkAL5SB3XYFaNdC7a
pFKqlM/gc6+0W26LmwoAIdxgSonGLA9YcAkbE29quGRsmJSoDiWuP7qimkc8Bh2UdKjnaqpNyYU/
Mg2NtA2NWi6N0UNSJIewWdmZzR+SO+aTmXpHLOYR36UxIvRWo7YHa4A4NDazTUO1NErmhjflJCWW
EvkscbCRpxoWUQHavhMch1BE9RDP1PPsWrk8n89LM/a7YZpqiTmTMqxEWc66z8beHCeoG67nGCPf
ozrxQRBOAh1wGQeA6akWydb7pNXPEhSPu4PYPrUG77uXA/Kp3uvVO4PPpHtK6p3P5OdW52SHUJgK
4KW3tkNdWGOHGDhNqpdIn9I4PcQ1ZoIF16aaMYY1NlVr4qsTSibshjqWYU2IY0ymIC3V0olpzAxP
9WDl3Yh/xBOsW0zMXRhnWKpJGqBlOLfY4sBq6gnglmV4BsCe0BtqMhsQy6VOYcERoWI02GzmW4Ym
WWowx2YOf0Dk5II5okNzqIpLOrrjSNPUUDgNkDCfK8k18qTy73//iDiWwpdI3TRJTyxMj7rUuYEF
lvNpgH5zGTIn5+ZrsrVuerCewBuguNvhaJdvBNS6EUXFjesIDJ4hIKKSIsbms84lOaMWdYC75C4J
t8ge6oAJ03fkToEdmc3vYGswP8TSBm0BkE3IYL8toGsLfIgLNsp8amhToqmuUDXbYTeGy2UgBYr2
QCodtw248qoNGqqpI5i9YbkeVXXExgcw3GYj0MUSaY35zp4b7hQthGqabM73N+MdDrmRTCaWk1nm
HWJLL2ViHZNc7XBtR/sREmII68IzRwZUV5NcQoqbM8QL5hfVVQxHVDpsPI4CdFOnJvVwyy0sHV8A
zpJDbVPV+NrOIqsFjIKcEBvCcE7jwx36377hROq/MNlwZXXGp8y5oIFuLLIBSwMINcM2QHW5sm6x
GAGycD1UC4ypRRNLs4w1uXnECdTsnCw7f/CUUr4xxkBoTIbDi/YlHFTD98Oh8g20GEAl0YigRHTo
uW5/eFLvfWp18tBsaaYPRubtJzr62fDK3JMqTd8t6xn7lsZNC++nJljTECorB2YTTY5vecaM8mbw
PIyxorhoSjWYfAuPZDC/IDZDb+mHiqKZKhjvC+7BKV8U2zFuQGlqSqZz0RVnJFwFV3MM28N9IxoP
FWxOgDCBA1BmRoyZRF6GK22aAWYGOm2+3QG/AM91Li6IDYzBbsQDMn+oZP5HduURF/YH19CybdF2
LCkYgFvARTTBq/BtbMzcMEOXbVPf09mc44yBRsz9DiLCPsPyKq953xQ03KTNG1iwHEdUoHiPQNG8
C2fU6y+sDedH+Qp/xPKTcjmpF3+14/ZAV+T/n6vXFLfgw9NAJ/91tbrK/69U9yph/Fd5vcf9f/h4
9v+f4ApMDjgXY2NSml0rSr/XIEfk25w7peC1gOGDXUOKljqj5IdCSbPtH/JK9/gDwnwB2Bo2HZXY
V0WBo69GmC2cKG5tQvUquUxRZBfYjZ+oNmULIGTkG6ZOFoGyjdN2/awPmxkJioev2bC3fSK7sVc+
xLobDWl2+OAG9CjIb4mF+AHi27fwwLtJcXzRapCiFpHCXuXbLzDjr7WVqzKFNVFSMwZ4Pi4gJUnc
kKI7VfGELULbTxIoxn7EzWZQsP1UtcLZ8CfwCeDZmcFs0mIIcIBn7XuKgh4Uyi1A0L+bmYZ1jW4F
mFFGyr7rlE1jVAaXYU7BUTNlpsAtwxDXBy/AtIBL8ps9138rp8mtQZBWkfthlCHCGnxK6eJ9t/O5
hl5ZqJl8jXjsROTswe2Qd/8Uu77tFdl/jPRvS1NvZj40jQ32H2z9waL9r+5Vn+3/U1xvX550G4PP
F03yfnDefvcv5S1qAHz+izuHb6cQXb2T9zPqqUQDcwTO2VHW98bFH7OkHPR6hmfSd8LrI2Bhmo0B
QcV6WxY9IUrXu+OP+DBi+h35QsYQ2hZd8N9qZG9397tD8lXClgPg4FnyA3ziUHFnByww4dAZ+lFW
mARoyBLvzqZHWRk0ogUo3xZvLL2oQsNt8cq9zcrxkvfTeqvdPMFQzmSqHhAWuCNOIGD3MHiB89PQ
ro9+UE3qeLmQbGnMWC6f/+FdA82LaH5bFoME12VbfkYTKcu1f0L5R/u/16yfnDcfg8aG/b93UN2P
8v97mP/d3999zv8+ydVv9FoXg/pxu0lEcEMGzf5AEbP9iW8RjTl2SWMzni2wVV1faFeURvfic691
9n6gKAOM5Lk3h0G5CIDJ2eBnYjPHw4TcxeUxBOXkpHteb3VK5D2bQ0TmkJHhuZgQ4vpYxjSPIk93
Yoqkks5hSorS6vQH9XZbUWYQsfA/wTGunOnXpgqxNmY0ovNMUTpdmJWifBqcDi/7zeGH+se6mHij
22sOj1udk1YHfEigL0N2+Ggwh5alWzwlFqU6pnMw1yazATWFWwLMD1y064PTbu88BzPNi1aZSwhI
QrQpTGJlafcqjiS0zAAEi8UwCU0tjFZ1kQgRrvNYNUxXsjV59YoUP5k7RcdWvelOecpmtCzEWo4m
CR/HOLR8Qkf+BJ0qdDTPvOt2sIwz1bBKjLvQxfY9sJiiHVDBve1NHTDccDdDLNJ/g0dD843Kj5a4
8zXxqatwziwMMq9sOsFGC/9qquGw2OfYoRTNPNz+jo9wnAjJwcNEvy7eVirFvdKueBraxu3IH8sG
W7UmjOMpVqIGeR/gnwjrH+CYMd03qXzSTWyC6QS93gK92JMKfZUn4kPzHd7iurCjhtfO6IDrxdYi
xP+hDHkwg7k5rvnEoWPqUNRC2BG/yc1Sq506EA7VaiJ9LjIqQUrolDmfDH1CvVwILZ4L+R84Xxoz
TZjaXo2YiN/zHSRUIfQWDAimvnyXw+F+/6Xynxom88gvMU39D2k6DnNgyygXDhvB5rgjpqqJSGZm
m3RGLfkyQm6Rnz/0a7VjTLFaE7dWC1gNJiB7gPO2fMsRQEgzh/8CxMCr6jBYIcIX4VzVMMysva7s
/b0jiuj8X8yAPdyb4A3nf/V19bU8/8EVeAPtlde7+/vP5/9TXN/YjjqZqfxIeYxctzznuv0GHtnB
Y+ei7zmwtwb01iOXg9MfGxBVqJpHHTcF06YW4TBwM/Gmfzh9jnN7GRiwOAPLuYLw5kdtA1cIYwZc
CSrxTHyYmF/cWoTUiEihh9n3RNY+nnrHC4/Bu8Mg2x61F+wwWx/P4i9k8sNkfSrHjWl5y7Z5un5p
AjxTLiiZQvSKACLAKdNdaCvLxLxh3aimASc2jbLyU9U954C5xLsKzJWFMDCOXdM0wA5mIsF77Fx8
VB1DtTxSUJ2Ju0N8w/L294YemNlJAwyttxOHcajrm94C9hM6VqE19xAYYU5wqtgQ492tmRWcZ6uh
1qF31w9MzQAW3Y/IOnTGbuha/gJRTqmJL7ClIOH4BtTgUnpk7ICHHwoajvXGq1dCzuF7J9lXGMYP
+LQ64TwbXO8LQ2RRjufqMtQpvh/FV5q5CKFlg1+TAo2p1mpQPv9hXOMSkDtkqbASg0NV3DTyT+vm
ErKBjqaoPySppPIGhMjWK5RU683LtJkj954YV2+ABNrURthCGaId6Ns5aWG5YY02Z+y9o3iXKd5h
4tvBcHMIjbdsLWXsj8gXHDVstOv9/rA/6F02BsOPzV6/1e3skFXXr2l7Xaut2Hk7a8dEW24ZteVj
or23/ZhwEy6d1Eo6sAlWrcK6MXLjpIau5C3QiiXElo+Jaf3WY9w/MCaptOkxoGaP5/9F/j+o9HAC
Ase45WFprK//rBwcHFQX/P/qm+pz/u9Jruf6z+f6z39w/edz+eeDlX8+V38+V3/+Q6o/y3/iUvg/
0kpklJE1kYsh0OTcEZsZuFUxJB4W8jhgxlyP6+8VeByEzmxw9VzPH7nSqMIS2CoYIM03wR8RyJBW
lNUKvqATz3Slk7ZZRRHBEjCAuTx0kvseWLTZsT/GV+wQj+SqhcruXhXDGUxxFRRk84x6563z5gkV
ZaIwK14xmVe+KEQm5Mm6t+i1Ev7R6Q0+iDeEJY2VruwsREoKkBDpeSQV1WumSQBcrzfsdIfw0e3x
oTwdgOP6QSAWjPqKsiSgwdKACBEI+41HkHgxiEc2CAi1TsZ3slCA2x/EMIeTBs0ohHBMM7jxl/sF
xGLRuXkXHgqSRogYNlGIQef7X+wyqmlgJFXQhSs2Ssy+Q+egF7jWA3xlJRDi7Y6y6PxjrBlQSvf6
os4V3bJ0p+hTnYmW7uNCxz7rl/+s6b1Z1tu56KtwfJ2onlogLt6iIDLGOBcuydER6Vy223klk0kI
tdX5WG+3Tob8BW6n0QxEjNGxWB7nBrRzUQPCvGeB2PLuCIUihRnS5dE58BECrWADnKFh93R43jzv
9j5HRGDkSzm0+G6hpjiPIfwCBC9aFh0ZYQUD9g6xKUHyvHty2W4O2936yVCUlwR0M5mvCvzDmmUx
i+I7m7//hF0qCpbzEVaJ07k5jGs+vnDnyq+K93GivM23uX3XIbRzmDDlCeVPqOSJhMolFC4hayHs
p5N1JOowKZNfWKPDhLhfSk64REIxJWrGl8gpIrN7iIJIr7HuO+KUhXXWcHvPKbm24JCfQ0gYNztz
OK6h2XBFvh5dJhhu8KPQ98LaAb7SYEhchpg0rERk8DADH9o3Qs+aDw1UUJwxKM5gOgnp9an3SdBO
yU+0F7A4X9yiAB9ZgiiTgNxK7GfNTrPXaqzd42sEv9VGT9HgdpqzxQ9hadKTHBffSZCEPm02Dmus
wzLzsKB49zEYqKX8/4oTk5uTaKoThkfhXL3j81wy0WD5yPffk5VzXE0uTgtiSISPSyeFCsmsWe5N
lPg+dKfMN4XPPQWXhFo7eD/l+5TBftpmqqvluY6DpHmQ2V88McH3BL9nKGwB5g6HeuRJkZifQ/Cr
JLx+YDjDkHDIpwEDuHURjveJ6szRUjsEJrC/F4zqCd/cDZzn0pT3BM7ZW5VMHTo++jUb5BiMa6M0
p6ObWcmiXvnX7LsP/f96W1bfZQPjdrT2QoiX4dtLwzTAZ3Woyf0gDMnJy61wLPPR0Cy612K257LQ
C/M4WFxvjInBa8WiLyxxF4sGcpcTVglPUqOrQ50xnn7wgFZSFf43xlUMR1pu5CdfUF4bFowQIWiE
egqHXLyqA4cjSgEngaIaMIxiRXDuYP7EZrxkhBRKt7bHQxphx0WNlmGVMYkEoQzGBmNmYrAjjWlG
uuAf8b1GyoyL9x4Y8t7Imx3xkky+B1G+bLLKqCfxt/vDk+bx5ZmoVbPhgPPGuSxvIgETISnynU5y
393mf7WyO3H68i5/mKhRy7jgOcNS5cJ+bgR5kI8TEfLvqDMqXqTX0KIVcjmxhwp5MSGYQhZ0NUu4
wRuBob4+TGOJxSobkK3emsIxWEkiUpzgZVJNGvtlB+jWR2gmI06G6NTbxtsRhO3kqSfPmLVHX0ae
Grg40UsxuT5A1JaWcMUX4YLR4SLJuJIvRUzfFqmm3KmFMEjEpbn1UU4QdoQBk7c0VAqjE44TvFX+
uRruWLz0o9dcm1eAiQgLkQHNVbtslZQX5s5f3PKZf3IMj/a4j5h2uDnbpCDYF+42BPKc3O4mnJvQ
YUYJB4isffBk4vEprMnIH4+pk6R6r0kuCSokCxtZC1eWqi6z/gQPUbqAY667p5haWkE/VBT5ilkE
v2P+blgkGEJ0F2gm03h4c0EY0ZY1ZuKUX2ogosM6yehlr91hnjG+W0AeZ8l3TKTW46sjF0mIrcBT
euM7DNMkzwvRwfJDpbP5UNk4j02GjpC1x1KIJtLnymt+FL6PfXE3ybiYsvga71Ys7nI+RD4k2Efh
lz22jDeQCglcWokdUYU+ZPyLxsFXjBen91e/61t2ran/fLD3wBvqPw/231QXfv/n9f7Bc/3nk1zr
U8lrk89vXe5zYZmnki5rWFlsSGq8fCaH9194RIUHYfw6ImPVdCkYdrZY8Sh279dlBJdUMJIvAMlL
eNLgS+p90JOyQ4LCK+I/FNCJPPOhLHDrfBRDmyJQCJyqHfK95DkfixY9x6ec61W8hEkqwtNrJBcg
4c4dMtCjJn53Vs4sohHzsUIq4mBJk4nXaq5bmnX1m8iQkhH+tSgiRFeem/bOEKt0Tx02iwblgiIr
XFFZq4gFYWhtQX20mZ2LsOyQ7JixbB6t+K6steoMz+ns1KE0BhfgC4wrx7hufR+n2BSWgrPR6gwA
dtAdAki916p3Brnq3k6s9G1rPXi4slUUkyQq99Jaca8pHb0PpnuXvyLyj11wHBKrFysa3JbyH6uf
vc/cNtbYLkUWBVtbF/MtLaONIcc3H6kxoor768qtv67uFnHLDGUuVbxYyHOgtbjXFOoi7txKrHlM
lMbrx1cv//1KfGPLtZZ6hFTaqTUMPFGZ8LasS3YEQYE/QhtuoI3zeZT64/vNIWDhj0zivpXN91CM
EO9m1fjz9dHb8hWnJHBts0oPVG29LZNuismgWnsNj/cv3d6WnQXMkTj/at/773DF63/xm9ePQeP+
v/+7f1CtPP/+71Nci/K/cgzMdboP+TvA6+P/vd3q/v7C778cHBw8138/yZWs/05Uf1e3rv6uPld/
P1d//w2rv59//ff513+f67+f679T9d+Fh72Q6gf1RiU98bMDYANkfYlCHpZS7KeLP/Ra+Ltt/eH7
8McJYk2x1D24dMOZnkznX1nGYi5fByTJn3SANtMYpdogQuc5f2BE/ISyZpu+i/8Veot2i2QbWQjO
goqQx1htLARwH2Fx4UD1waeAhWxaN6EUDxUFnWKcLX/7mMkAQI+OD5c0n5lspJq8M+y9MiyPd54a
1NRbJ4fpHpGGwi50otw7i1l3M7eG6hrAxpFnrib8NkYEjjbYTgAkqncgOL7CWDuTyfx+iPd3HsUS
DrzH9D3ca3jvTuHcgwcXHzg3GQNvTWZN4N7E+7HJVOwY44POwNojKh2fHOAlk3Egng5Jx3iilj/D
diy2wKJkUf+GC4EZ0kzmiOzuBE0Dx0esR6QicMkxS7A1GH896+Ec4fHSMqLyPRhflAgCMLGk/HcO
LEP8aBFqDz+RwBrNsBR0JNwtUHP8sSGuAwIIfR7t1SuCDg7+HCAY3DyXChZT7WbK+PJ9jmcZ31Fx
cUk0XAgwj7rjqFgLAW2gKInWw/QYENbigKApDY3iXIAOm9LQXOAL4FFbGh50IgmdCZvSwKg1C7jD
pjQ016sF8KgtDf+/7P17Yxu3sTiA9l/xU6Bq7jGpUtTDjyRSnZqmKJuJROmKkuOctoddkSuJMcVl
uaRlNcnv+9xveecBYIFd7HKXpJyklc5pzMVjMBjMDAYDYMCsF6tgJCZr8Fn3WA0jcV9pqQSVaG8z
TqYoMdmUh8mxClEaBhKPtDSxJhYKJsd6W2tt/S/IyN+sP4zK7AyuwaKcke0qW0eFcez1JsFDqNKt
jdIG2esoY9QIHXZX1ipeVFB4iFDjxiQOMTDg2L+aDYdkhQzY5RciRLIBYXExneIaDRY6dMwTY6D4
t5dkSnl83jIEQFBEB/HBxHt5UhMPakKtGgI8DHAF5OGZzypC4uXNvYShEJPGB+9C7kE9+P81GcSH
zimBIVpGIRWXf/sHHa3CY1b8Y+jjVi1VIdupR6dI7+jIFp7855PLw8EHufwEddJQTfDpH4QOAyhe
IvfAD7lrwR/EYPL3a8CggvXknywPU5kzsRL9VAieXCF+kxCI0Q9GT6ZiPJvi8vfWC2Hwpne+vPXA
bqISqsKIsTU255W1tfW/rYvzWO5rnobWX6/HMho8J4HpEM/APTD22q6tH60TI4j1/XixQzlHrR/G
cw7khLV+EM+RVMSNB4BdXqd9FLFeiZdrB3XIAAjxjBbNl+utePoRT57r38YzOnK2Xe/Ec96BBYEZ
7+IZch6ErP99IM0Aps5gEozwHMNDKAJpFEJvuhz8s1s/bcndbbe9tbFRKWHxN/60MQNxHU0hl4/Q
7z+QclQujU7Pw/uXxMQPZmVq1YgdF21a5wtmxmjpANIH9geuscLZmKKnSptB0KwCKhIvESCgQRit
PGkZIqOfxcMeYimMgX6Lt0AtYAglhMnIu4al80WoVpVMDKYFejIkGFx/WqggBpcY/BDhQCMYh7SK
F5xUcClcwcWq4HUo1JYKwohRv/TB4vIRzhjEXiJyS/0T7BCRKpg0jykqeKD4tTKSyv7oY1VwbLaq
ukhF1ilI+t/JbKQDyFEH7RqRsqqKMtleG5WyDaZiNQ6sqhvnQHUMkLqnm6Tz1brJZLlUkPKYUTgf
qKtkgk6NG2ev89OpXOY6FZAdvPITXJXJ5qxUqoY+z087jdDqaKdBOmm3JigcT5nR3qjkI2SSkh1t
Oa+SlGSPR7SkRvITM8JpddSMYM4hJ6G+OD1bo9VTE0ywiJatUQFKKmxWR0cFcQ4V8Uj5wjQ8Uiuu
VRIRl3ERFbGJ/GTUCK2OjhrkHEIi2otT8lAvRldJSlriRrSkRvITM8JpddSMYM4hJ6G+OD0PorX6
KgnKLoCIotxMfpIaaK2OpgbQOURl9AtQdcUW8JY0SL89+E50prOrK7G5yTdUQ/qiHxjfAoPg+3QX
EtbVd/6TCa7llbEItRFI/x4WaLg3KB8RAgvfm/rX97Tgx+vzlhXHC8ikD7ML0Lrh1Ot96MIi+VY6
Drc2RBvy1eVOzAnR5YZ5qDKNc+IDvpXIDKtTr/ZdZYN9Bf3UBTl6gA7/Nm72XaljTp2N0GOA12Pp
hLTX70/2laO81em+eEaleMB15T7XRVVlYDXcX0P34suX4sUzfPngj+R1ZG/VLw4auVzBVATt6q86
04kkInX+0992/yFpIZGRSJDChLajPqquMSWv9o3GCfLqV2Rbrq2FX1Tf1Xt8G8Z2B589WDESv/bR
jM/yFz//Mxqv/PjPvPs/L1682I2f/3m2u/14/udz/GWc/3n46I/HKzz/o4IIuM8iILhFj//Ez/6o
/ekVHv85fjz+80DBHw1AS5/y2d3efraqUz645xncjEb3YHH5o0uYxMVffgynrwx8vxFl3SNvBtbS
pPLbPR70eDroc54OOn48HZR2Ouh4BaeDsNxbYB3oOzWMmg94VwUCAzO48fXX6hTB32b/0HdigGTo
5q7Q+2VIw4/eYIjMiK1v2e+rfN9qP92tiJ9/Nl5c2cWr5di+QN2NoX8I5klna1duxlHkMWid3Oty
wckYdKEwRtmpkZJENBgMBpac+CpeDYhBFTJhtHGTkaA3/vznGhXF5Y5aQuAiQXZr30jW6xvMn+kC
f/KHZmyZeuu91bFuN5yNYilBeNXtWmmts1i1t6cX702CAFhCuDMbnXREeDMYAwMBDtJiFTc8ZDRA
DCMU0ehUGQgoYWJNuoeCA9uIOh8dc4qgflOiDPVcfLQgwTWRSS0EiKTSyxSTJJdhf2D17fCs2Xzd
ObDH/7TZxjSjy/C5ddKpCrwBC79ZmZyM/RF8MAXC+3BLEcDouTB5kmHNujLN1WEDDPXYRoCaws0o
J40VH2AQrgkTtkyUrTAME9+5QAhh9irgk4AEjY4P0IRO/RiF3pVvdiKDzgZNNQ8rOhgMLMH8MeJP
PdCVeSONP/BJoohocrTcfcPaEfJpTGfnhNM+VaMMJ4O9bp50KqksnECQFGNAMyuMgRQlPC3V9yZ9
0m7QJECIpAoVIc45BF1qlmlNNDzUSn22wUPcmseR1/iyvoHR7PFJB2RX8q1gkwyFph7PqEIql3kj
8EMEjwY4JP7RxbcSzW8cQwi2SEPqGP0lvgEjBhLk93GrfXJGqV8/r2QTnSmoaIiYv2k0wIr5egfP
tSARfDB2ZG8Uu1xJgaiS3vHUu48Kwl0w+RDW5NeW9TKkfMdoag44/bPa9V98/X/sffBxAGre7cra
mPf+M6z7E/d/Xjy+//xZ/joXrw9aZx3xElavYUDWWqn5/vys3j1odc4h+e+lNT7ayD/oJDH9ngz0
DzNRzUXwJV9m45/6RTb+tIrNxmP+OZ70xrPe1bX6kqVKpT6+SrmnHqvf5E9B/zze41zmL3H/D8d6
xW1kyv/Ol0+fPd1OvP/+5aP8f5a/R4/do8duJR472gJ03oF5yIdb1HpQHA/whDEbl1VopreKO31P
N+E/L/7DL/Y9eu4ePXf/IZ47fTWu3TJvxdGXfYdtEKRea4MZUdu5KJswQbB2u/V6NwAPjM+xT/ti
apXHt4TorEmVt9dxJYejwLvpG1uiZN+9k/fxClyhoyuG7ZY+kmwdmjDOHOibRfvJfL7qRQcejesr
fCKdz+1FyfLKF5+fiJLV5S95aiB2x804vSB+xMM5+84uyleRu/Iijvjpl32dxP/q55GdZaY3k+CO
FEV2Ob5LMqcQHaqZU8a8rGUW5bpWSXVgN7uYvp6VXSy6lpVdTt3Hyi6lL2JlF4suYGWXM+5dZRc0
rlu5C2oe0sTfkD/2jSwGt8H/mhkRO2xEv80Ckg825A8zi5HY4H/NDGvIN1Ku65njveG6oWeO9Ibr
Up41xhvOe3jG8G44bt6Z47rhumxnjeiG836dPZgb7it19kBu2LfopIdR3Z/t6vGLX5PLGGKVEx9h
ne4YXJ0XH1qdERtZOeIpA6pzk0OpshyDqLJco6fykgOnchxDprJcY6XynGOkMuNjw7OIvrKK8bDo
Bp723Rj3VjXlJv7VPh6zImfxxINZBG3pzc1NtA9ufbyAy2/a4Ltl9AIaizYGhRf10xbO77fBxK9F
59ZiJ9R+/CivKtOEoS6I/FueRKPrIfB3Kb/pSB389eQ3kRt+hLFDfQPzJBv+iB0FvLIPvumTb7Lf
ePjtF4navsHRV/G72/EcFC5VJqp2qy92J+qpLKh4a17/xrleU6MnbzHLSd80ag7rR2AEbVtp52cX
TbGjoIyDMBxgJ2WcNOoUmytoTFzNRnQJNKwlgZ98F4PcPDsT5c2dioJNSxMw9mVkWsep1RL7tC0o
jZPj49Y5YGgm1l+fnJ2L3STka1gw+xO+IEVXhvjhBuA56xSpDFunL2tWlRWsOqiOjNZsy0mOBPMf
n9hESPvGt4Zpnoi8Gp1O+cp7u8XI8eWtfdNSS7nWJVFQF98UAJ3f3Tczm6OPXbcRpaMCcCH5775U
xCrXvmWXbExsRPXipmZr9DHgJXcG9i0K4ejE3vvovTuehz0Xkv/Owz7eGGCv6zH2GT39yRjAiVys
b+87Endcibsy5rCd+tRQPWVotFE/OhIbGCyaV0GVMpNXbPijjypssbRkovIHJAl0z7UiH6Iw65nv
ADCDVrWywpAE/kSVYJWJrzhUhXrRguxweQPZ2fohrEYLtF1xEuKZi2bPXYkv0qiAJ99nY3/SS8dF
1glnl6ozSktGYFphPSShBbWHsajnQTJ+jysuhL8EhF2jfI7WSAr0yCTFEJROJqHqbT8NAuME//33
v+0xuA2vFcColQhsk3ygwHonvR5ene274Jv9dFQ9kEp2gaoNGI1J/nqH3tQb0vsQ85kv6rg9Pl+5
Er9WXCblJGoSSK6jqKTQXsuWHrsY2gfkHMkJ5hrsqCwwR6Bk50Mx+MjF8x2QTA58OhfMjvW166Tp
jlsx7qRStY7BpTMRMBi6sp8+NnlhwJc2n9SPqqjVavOBv1sU+kevOxzQK77X4fxm6os2I63iDdlM
qrbkZjJUd07eacnHTk7ms2BiHBmq7oSFnwppVFTDmTGItRFWSWW9hjccMim4wTydKMg68SbSOGhe
G7kYKN5YGh/Na0yxkbD4KMkA2J6MMbEqAuZoZJUkzNHciomIZlasNUhaGfmywK+UcFkNLUsyW32h
HNst4f38VVEsE/wqKZbZ0Eopxt4Nuym6hL8qms1pYJVUm9PUSulmW9nYEqwBV0WzDOCrpFdGMyul
FXnI7IbwXv2qqJUJfpX0ymxopRRjH6LdFF2eXxXN5jSwSqrNaWqldJO+VrsxviG/KsrNbWKVtJvb
2CqpF1s2YlMYLWxFhMuEvkKaZbazWvvMaVO3AwxzNp15hVcLSy0705vORdu5bSs/X+61hRuZXAOQ
G5kia48In8KrkCIDU6jxlQxN1sgUwmYlYzNnaJIrAQOZQmubQoOSr9mHH458eDyMkMxbKEWYFFsy
FRmInM0++EDkxONBJGLu8ivCpOBCrMhI5G74wcciNyYPPxrJBVGESKHlXZGRyNXog49CLiwefgQc
S6wIj2KLxiJjkLPZBx+FnHh8hgnCtWqLUCm4Fi0yFLkbfvDByI3Jw4uFcx0Y4VJ0hVtkPAo0/eAj
UgCXBx8TxzozwqTYurnAcORs9aFHIican2FFoQ7FWVuC8v2TB94R1Huj1Fyeripk5b/pqzSMycyJ
S8O2lxwy2POyUGP2swyDvCzUuCWo4gEvCzdxbAoMmmVhxmZqGSp2WajxKUfFTF0WbkJx6sChS0B2
aYLOsjIRZYO4u7VNZ2nhqEYyl9nKEpJSlaKXBX8ZmalKIcyCv5TwVJU8ZrWwhCBVWS6zoC8jUVUp
olnwlxKtqpLWrBaWk7GqFlxug2VZz5C2osQbtb1jmfcZzsJwgzl83Eu7tZMtPezRKnebqz1n5XbM
cqt5/NPLu6Qdba2UrLlbXTFhky5W2eY87/KSDuV4K6sl5vz2VnwOMOkg5Qbn+oaXdAfHW1kpGXO0
t1oyOk+kUIvzXbvLenMT7ayUlLlaXC0xky5KbnCeZ3Y5Z2ysjZUScW5rqyWgw7vI7c11rC7pS423
slIi5mhvtWR0+QW5xflu0WU9oYl2VkrKXC2ulphOlx63mcOrubQjM9nSSgmas816hZsUK6Ssw0XH
Dc/1TarmwgWckfEm5lEzpY18Lsd4Y/M4M6WxAo5FKQyrdS9Scy7vorkIyVpD2vxRxMlomePLN5Hw
NUZG6tLAky7HyHRbGrjL8xgZM0uDTzgg9TS/NOikHzKa/JYG7nBHGtPB0uBdXklTOS7TQJpLbBUi
ZfkoZ366/20l0mU7K+c3t4ywGV7LuQ0tJXiG+3JuQ8vJoOnHnNvUMhIZOTTnNrOUcBqezbkNLSen
potzblNLiqzl65zp698qqE7UID7WRmnuVuQNdZ5fMZhf0Md77PHb6fQdUzwIlN9bS+mAxAX+kWCs
xhzQUETSLk1GwAwB3xiEGB3QTWoVAaMQaAvFHlVC4POIe3F+mEVfSd7p1Tx6ApxFSMqvkbvhPSBR
C0A38TTImkYN4zG/FOAcUoff3rMd7xwJyRqkkygjDVfJ8Am5kzMXPlWYZXsaLcg4K5kbGPUIe9U4
Pur0KVVprAh+NbZdaNm6DsK9NnLmUM60al2QVHJOMFGELguMfj44Jxgjjpcttjo9JyAd7csCo96N
zQkkiglmQdGvpuYEY0QOs+BE74XmBGTGF7MgGa9kzgdlL5hiesjkIBWBKAWkxYaKd91aSYZUiTUV
f5Y7rR3NoXMaYbVtN5J4vzpt9tb8O6cRtrbi2jvxrnPaMET8PacdNLZircRfPU5pQ7P+nBY4qqbd
ROJB4JQ2IsmY0whbWLFWkg/lpjRjSM6cdqR1FWvI8XpsSkumaKU3lTHFrkxwABwGXyYGwNcCMyf2
JWSIJLJQY4vLEktmocaWESkpo4XaW1S4SE4LtbS4jLHEFmpsGVGTsluoveUkTkmxo0lXm7H5CiPd
BaMiQkezIj5dMNVTpCmKl7OUmEPm7JXdakLuHE2SGauDjqW2qMUvs8Wk8KW1yEKZ1WIkg5lNuiQw
pU0pmVmNKkHMbDIhhmkNknhmNaelMbO9pCymNcgymtViJJKZTToEMq1NKahZjRpymdmqSyrTmlXS
yu2mrIR+HQHtfHYB7Xx2Ae38GgLa+bwC2vnsAtr5NQS089kENLZZEwsOm3/P71s7ZqvY4A3H0Lh3
hS3JQ3ApR0IuRpOi7af04zgYDabBpImBSuceRXUjo0B8GsyP/ocQXDBA0XIsVTcEzhMbGx9vAcIv
OtDt9/REiRiMhvS6qA4ozC9r/vnP+EopPeU3ngTXE+/2Fp/P6IECvJsMpj49hMyPIQtoZvMbHYu0
vP4jtLiF79VssQtwvSKfgcB3SwHwxJPvdngj9bgKYo3oVkxAhH42tERQ2yYG1P3JcHtmBdDVfTbk
Y06A2b+9+Me+82EEPTBRCNlyRWKCfzKMs25y8xujID63IRnkF+lWIO4zwsuWF4gkW1pbU3KhXTGZ
KJntIU5VGZ5ZtUDhaSPfkIVrNG6JuLOZbUb1ohZd8K0gs2Ujnuw8Ihu1uIUoCO0vtlsqHoDWaEUr
BIw1m9liAohutGoEqv3F4BiKJ1uORZ7NbINrMOBIt/yC/4mBbft35fTjExiYdX5DCIPbkiCieK6S
gBHqiSC2c4QgWT4hCySBiQi3FlwXQF1wDkCKezsXGpdyg4pC4ZYziGuyfFSB6WoSlCkqRdsMeVu2
ottmUtWqRk0YEXENzGPRcHULFPjWjXu8CkE3AuUmoKsguWVzKsuCrSsk+LsUF9codq4JPR4md464
GkCoRYIQRPF1Y0NixMu1JCu7GbMWtaIMC0OKojF3gK+mHhwz2jXPeO2X1hREmL1mwykkQD5ZbGUs
UNVwJBqMORYVL2PcxAi9M1CvaiTkES8E7o/6ZfUpaaDazujnuxwdjaYy6xzbPCnIgXcGYvVCiFkn
BvMhVp+PWGwK5Ho8X6YIlHMSNOspLk+bBKOowmX7LlVubrdgqOZiLM+taooaUYczJiw2R+iZksSp
v3kk0OANmhO86MhgTNTj8Xxj5Fi1PBriuOaSw0Qs44i0SwtjEvbcvuIo5BfGAsjPx66eDzv7FGoh
9Orz0LOFJhG12EaQGVbYHJ+ba1QjS7CNfSdtFXyT2vOcnFOQdfJ2IA+GObmnKPvE2kiiKFwMhIs1
O3rz0lqGYC7DLNGFu5VwSrKLOXmkyGSfG/FszHLyRjx0RgHUcmoWmtfsINVLMwbBXIIxjCuEq2AM
RxcfiDFyIZ6N2UMxhtlCLsZgZ3ksDvfSrMFQl+AN81LkKpjD2c3c7FGUQfJhPw+93DxSmEusRnKx
CXqArPDjS7MIQlyCQaLrnqtgj0T3HsRgzYNzFlIPY6ca4HOxAm0+2ZHVl2YGgrkENxgXV1fBDo4u
PtBUkgvxbMweaioxW8jFGLxDGAsevzRrMNQleMO8irsK5nB288GmknzYz0Pv4aYSq5FcbCJ3dONx
8pdmFAl3CU6xLhmvglVSuvogk0tO5Odj9zCzjN1CHkYhp7/9OMCyPJLOEjFsjevRufkgoqwD87z6
IW3MF8EvE6G8GiF1mFMxyqkGDF+c+yGCdG+xdKhIRH4Vx2nKQw4x73SV8IS/xVXIXDLFOStJp7W5
9/fnSm+x7jKkDM0zt1Nx7szZqYI6Ka3t4r1KughTXnCY369fyaWb9v5FGkcnCLGYrze12fl0mh+W
ogAD5Oq0mMvYObqWg7XdXVuYudM8yZl9y/Quu57EyKOufwXvs/MVkUISvoBr2t1onvlspTydq8NZ
3JzVn/l8nNafxRnZ5fXO2aGYJ9b1lsgDcfCybnLn8ysPxMGZ9Pn8HJyvwxkcnNmfX4GDne75Qhwc
eYqdL7DkM5p/DY++++maYjPtIv7+lHbzLS5Wycx5u53BznN6lcXQczq1MEe7txLy9sp2dDves5k/
Tp9/68H1+E+RrhfflnC2OJ+DV8m9ebqawbkZPcmjhlfKsq4Nj3xdifngXQ//5BDBX2F/xPlU0gPZ
EJnkyWLbBzEh8vU3g3Mzu/MrmBDObZlCJkS0Q+B8K+nBTIild3Lcj0w9lAkxh0y5ONlNJyN7UbbO
S4AMxp7Tv3ysPbeDC/O5e2OpmGFh7HC436DKN4a/zm5Uygteq3cxz6XSXFZ3OmM5Z1EGz9Nnt4QX
6dmCfmaZsyhrp+yFFfM26z0d17Ne8/n6ATfPnM+dxbs5h12jQczsZx4lnKWgcm63LdSjnF3Is2jL
6kLeDTp327n6IOcLGQ4yer0t182KovcqFOzc1yrsR95i1IyHnc13sYUhadrYQXFjrv7YQ3BLtm+B
moMAemfN1+KWbVrDyW6XhtJ8T27JdiM42e2y88N6cW7Jlg1A2U3Li9gq9uySzWow2Y3SwsN8tW7J
ZiM42e2yXWi9a7dkywag7KblfG0/fbdk4yak1NYjNd0poE2qVmhLt+rtZOuUavQ22S8WEvl1ijqo
Yb6Xl4pLpn5JRyafijGuL0ZP66WjkqpvUvHIqXJMPPQTfKl4pOufVDzyaiArZIJ+qi8Vkwx9lIpK
Pp0UUUQ/6ZeKRap6SsUhp4Yyh0W//JeKRrq6SsUjr8KyrtlGTwSmopKhv1Jxya3A5Gk64xnBVDyy
VJmFCGtTbTQmHh/MZbgVttxibRS6F5t8zS/fZWkexgc/7uV44HCll9fT2ihAg6JXVIr1KC/KOe+4
x5xDi6Kc+8K7eS7H8cBheYVezhWcxXI9/LgadptDhxjDrXQjtGin8mNdL4T1IjznOkGVg+nU8Zn4
Q5BJfEU6vg98PirxKOaKGC2t7y4WWxlz5etFHjTjeiwVz4XYKX6OaT4v6YMs8dcwV8lLy55USrwM
uhpeSu37Q/JSzl7kQdOln1bFSokDRfNZybhrGn8N1KVIf5Xbv4mHUVfDSRldd099q+KmvF3Jh6t7
wlsVSyVP9MznKXW8I/Y4aopy+vxHduJPxK6GnVJ67WCldJW8CDfl68d8RF2TXDqmi/BS/KjNfE7S
xy3iL8SucqJb9jhN4rXc1fBTat/jC8GVznQ5u5EHzwe1mhIHX3JsWekjDok3cp1Lvl/jUEvyveDV
MFNG353stDr1lLcv+ZB18tTqNFTymMl8tjKOFSRfCk7xJfwqR0gcbyevhrkyKZDCXqtjsNwdyotx
Co+tjsscJz7mspk+NRB/RDlCNuP95xWc40i8FK0QD+dxTkT31E68m9sLY4rPeUyjAMI5MKwXwTDv
KYxkI3NQlPoxOnvRMR+4zhnbEv8W8+bnOY1BGEaHMRIP+MZdwoW36RMADWzmnc1IvvC7GnSSG6lZ
+MijGrH3f1eEib2PmoGGOrkRex14NWjEtlEz0IgOcsQeD14NIvFd1AxM5LkO+2Xh1WBh76Jm4KCO
ecTeHV4NFrFN1Aw09KkPwyxaISLxLdQMTKJDIObcuUJcEtuobmSs7dyiSo0WqPYb5Bq52KZ/Du1W
NZ93/sWBWAH9xpjZ75VnojZH083HLae6k4hFj5tnY5Wh9eailFf1MUrGM+iZKGVpwLko5daCjJP5
YHomUpnacC5WOXUi4xS9rZ6JUYZmnItPXvXICBmPsGdilKUl56KUW1MyTuZz7ZlIZWrMuVjlV5rV
2PGTeXhla88YYnLC51e59dPl5XlPwGfq8QgMNa+qJ96RIWixZ+PL5nPm82cLoyK1FT2Czm1Y/bDf
lC9nv3Ser22GpJquWs/FGqOefHa+PO+FefcKxQFINx49oc5tu4f24vywHH+APt9oYk0e0OlV1kDq
9+oXGMuobsZw8ovxiffsVzKgGlixMXXjkHzgPseoJjGwB9YmOb3RpsjtRQ+2ze2uWZFa4mqu81/8
Dlz0iAV+lq03BJMuZWlYDUaD6Vz2MsESKgiVoVH9lGWsUU2+Alu2EE6+dJ/zcoEFMqJNlWG4VHpx
VGzfRP5Dypm4OY4YWg9eAq3NlzLL+fW5VU2NUXIJHTWjPoq0oeu4G4jetITC+hnMAg1EddwNGC9Y
otLTXwWaMCq529BPVkJh9cZlAfi6iht69EAllNVvWhaAH9VxN2A8RwmlozcsCzRhVHK3YT4+CeWN
NysLtGLWSjRj+6A2jBtC1pvS5TmPqOecWJygTdFNTjDyTT91eSiOVfKd9aIoJYDOwYdtBXWpKIZP
8rHZovgkgc7BR74gqy8bxTByvEVb2BxIgp2DEz0yK4zHpSN8Eg/VFsUmAXIOLvz+rLqcFMMm+Yxt
UXSSQOfgI9+m1ZeWYhg5XrktipID7Byc1MO10W2mGFauV3CLouUCnI5XwrrMr5aMI9EaR37h3sjR
T91n2qHzFBaDJThpVnEeraX2iVnXWbjmRTRLjeXAMo8uUxixBlwEy0zllgPLfApOb2NL1WiPfU5U
s5VeDlznqz55joOUpYljTgyzFGEO/PJoQzW6rEMXGfFM9ZgDy3wqUo+tVK4LjXi22syBa17NGe3Y
K70b0045EZ6jUB0YRyjHjDF+Aj1dnUocUl8+13oWnz53I+1u0cCXwSK86N32X2yMlZLT6LoUaTai
6oXoDCxjrRRCUWs4haJTi2aiyOo1E8V4K4VQjDSbwtGtQrNHXOrWTDQTLRXCU+k3haVLfWZhSHo1
E79YC4Ww04pNoedUnpkkZK2aiWG8lUIoRgpN4ejWnNkDLVVqJpqJlgrhaegxhWiK1pyjhZQ6zcQ1
2dpcZC0HV161mYalqU5zqE13i/np28mjNlNw1Rw8T2s6GimE4XytOY+ac7Wmo5VCKObRmnOHfL7W
dLVUCM95WjN7qOcpzWQDhZCbrzTnceI8nelopBCGeXTm/GGeqzNdLRXCM5/OnENNkUdlOhvLpzKJ
m7BGOPUnbW86+OiHzlOA37ZbnM0HDcUGny9kk5jByAutc06xxhtLnF4NqxpQwmN1MZpk4JrdcLJu
1LRqifcho/aOg9FgGkyaI6iV/0Vzq5aKrJDsjCr2aTAtDhsrJUBHsGEW/db76L07LvM/YmPj4+1c
/4+sQnChuLE7+yd/1B9cia0N0e32xsNZiP8TG1ulX/ZLJUg9v/FDZOPJrAdw/VDcDYZDcemLd8eb
4djvDa4GvRqWL03vx37fv5JlxbcH3+10d1rQqfrkOpQI8tkPfxICZvvcK548NsaTYOxPpgM/3I9K
9m783odOMJv0/H1j8EY0zJ2pB5kgV0aFH6GfrvTbweit743jqd4nRyqgN7i6P4a1276BIHHj2Jve
7BuDUQbhadSPjsTGx6vxBFKuKuXD1lFTbFyN7VO2V8Hk1pvGjrHvR2olguQDA1TK3P1o/Rgr5F3C
PFUpy8wIIX/kgbZoIK5vGvvx9Hf+5DIIfSunPwgxqx7ej3pWxkcuLFOUtdT3L2fX14PRtQkC004B
of3SL7Fh309hi/oUBunGYAzqH/Lg2Ov3ETxyZAMocDseDIFfRD8YPQGyDYfBnfBvx9N7gyeJ/35J
gGYGbo76SV5VyLRbrdHH4AP6c/zJldfzuxY+ANuffPT72/uOxB1X4q6bPQ58aDG4ZzGsaNElUXSV
5040ZpOJP5qe30x8r1+REm5UrmIHmqOPKD7+6GNV4iJ5y41HEq6NDYq9og6lK4owN2cQbkOrHBdh
CpHwT4MrZBlDIxm9sWhZzlZ9dllUf0lt7aB1OZ2umc25QJHOFQzHfePSMShzu+VuJ5ovWK3TaEJf
uqcXr49ajW79tFXGvlRwALu4IPOvvNlQTg9KaMvc3UqyLqLLdRvQ5tSPz0QGQyqiZUJBdwoB6jOI
0ARFNpMynRBOHMzEv2Iwx94H/yjoecMz/0oP3Zh/KDzGb/nkAuLjYK9fUN/4n4CZR2K9sY5KInVm
NHKw9beUVvrDf8nfaOyNB1OQqy36tRVchjA1TP2tFbaxDX9fPn+O/+58+Xzb/Ff9/WFn+8vdp9vP
tp8//fIP2zvPn0Jx8XyFOKT+zdDqFuIPN8AFk/v0cvPyf6d/qeOPUngFk3XNu122DRzgF8+epY7/
Doy5Gv+dF7sw/l8+2372B7G9ig7O+/svH//m+/Ozeveg1TkXL8XfS2vjiTf0Jre1G/4AdgBu0F9o
/YXqK/ShWKlE9uJeaQD2BNhzm/zJVuR/jxr93f6lyr9mhOXbyJb/3e1nu9tx+d95/ij/n+UPrJ7N
jU2B6+M90fjzn/fF1LvcvBv0pzd74tk+nSsdTTchMdy8pUKjwXBf9DYvvXDQ2wyurkJ/uid2CQpY
TgBvA//E6+abVluAdddsd5ri9dFJ4zvOKcHC8B37DPbE8emR2KntbL2Bf3dr21tH/GMHCmG58xsf
VypT3JAVwZVAq1jgrAS2ty/CGTtjpgFk+NCHfw+GQ0+czi6Hg544GvT8UeirthActCTKWHRdZq5X
9sV9MBO33r0YBVMxg/JRG/6nnj/G48a0cB0OvFHPF3eD6Q3CQjASSk38IGEEl1MPintQYXzPCOtS
wptivZvpdLy3tXV3d1e7ZYRrweR6CwixJTvdCa6md9g/WMxPJ4PLGRjUYgbjMLHAAZZmgQCaBWO3
3hGtzrrA0QmrCO371vnbk4tz8X397KzePv9BnByKevsH8V2rfVAVPvQG4PqfxrBeAxJPxAB76vdr
ouP7ZnsI6ypgFNTqWwy90fXMu/bFdfARbG08oz4ZXN/AYHmwTh8Obgd4eQQWORH+CEfRzRjlE6g3
GHlD0QAmw75hO21/Gva8sS/QHYF+DXE2G00Ht74otzunZxUTAC53BlD/wP/oD9H5pMgfh4wVNOBG
cHuLV0kklo1gMg4m9IGwqV3K6PG6RlzeE8xkYzheeOqKui/KjYrY+frrrzZ3QcEpbklUqon6cCjO
mGBncr2s+tQAtqexDSblsLInU+tDXNOQw2x4XyWwbvlAbrz0kaFN3oHKt1gQQcmhx+Q37Qvxxh/5
oPJTpAcEHMZ+CDSYSAkCQV2vVCFVdQ+BHAET+ZO5sEAMY9COGBzCAvm5uxn0bkTPC5kDwfD4OAhp
HOSYopaQvEgaA6nvjYFxe8QlaIvAIhqhUYUApe8SWLQmWlck8HeD8Ab1BnugUOwDypgod6ZNzWA0
vEdoSUpaZLSxqpIQoFrRDQVYFng7IGDQanqTjqZIySFcUMrIslwdQfVBHgkE8Gffh/kbJTFGOiIA
oTTxx0OvR7S9JX1GRQFRGCeEhmUIU7P6xP/XbDCJRCDWWU3ZfkBdJix8xRtxNIA0ALA3GA98ctze
5yGGAqbp4Y1Ax458izQu1KTs8LzUbB+4ZiVa9W9tlODXIbS4txZZwph24Ie9yWCMymBvrX7awiEF
CR4EMBCCyoU1KMf/D1KKCcSVfVhEjYBqUH5ALjYRBqC/ekPquVSkkK/cQTBLCAThCdJzIAzYjasZ
ekZrpOhwnK6kxlJi7hEdqAYol9EUIQQY1HHMaguAekDJT/BzgC6+j96QgakvLMFSR6zgfyIQVlNT
WBCGgjlHNgsGAWMveUL2Ch3dLDIAoz+bKGaEKQb6i7rLgiwJl+wcznD+EIpP5PwGUNA5Bv8AupA7
9iZTOfpEMyQ768NPoINPz2gcKtxTWZX2OwYjYO7BVLLmIIDfhKtkpDrDQZUfTBR2dWC20ez2kieW
2NjrxvA2uiSOmjJQwAYjBKG19SfC2hMhUAZtGWovhq9JCb1Ng1DC3o3fnw1xVHE/DXWbNID6fkgS
SnwAmeMgDAegD1UXzogdcDQ0+tyKz7wKVgAMDzPrZDYyuQbmRAIDqGHcK9Q9QH9pNjAqxNcRhTRk
nB25PeAwGEpFCZkGYG5nwHfQ9WtSeB4O9OlZS3LmOU33oU8jNSLOvYGJnxx3gyvxRylgZSmu3ZtK
6U+cJnQSFh31hjNgy/XxRC5i161EBXq9VCqdnnXJeu3C4rh51u42UDOs5G8rA5A4/+G02QHb7EA0
TtqdczDWOmIRQAUxim/pSDZU/+6n5LcOol/GvtDpGZ6xQWbu4h7F6zoq2NOzU8lwVOFwVCmTZzsC
tTHoK9cuK5EDb+pVocAFaKinu2QrVPY/yzjQnzi8aDfOWzAOqUOQD1B+jFYFiecwif4ek1k6+Ina
mH3Q7DTOWqdUAr8F5+MKwlKiJPKt9unFeWePdy9wjDARlhRRahtmH0w8a55fnLVlSTm4hA5NaZ3W
QVM0Dw+bDahHqec4wbOeDBNtV+WENKAsue9O9iwuQ2DtF4JFIuc6e94giKg2wSjBTcYwiBqxphC1
+U1QwSjD6YonHG0RRSqYasTV5KWe4VlrM/MioEFI811AGphQ7vPulZoN1UwASnGExuskAC2k1OxZ
s3N+1mIOZFohjWtEx+Pm8cnZD5LK2KikjZ5AyICLehoAscZjPC1ldYjaqR+9OTmDFeIxgmtv1Usr
4sGtEi7QaGNH8UElxoe8dbU6mXbyvdwxTGd8WSC0hsRY7cVwriQlwuTzPFKB8RRmYWmOVPRdeDHT
euFcBNEYRwOe/SRoJ3tsdyXNFTKZ77Uo9NDJMRziOhThnIxoncDmVh86xBa2JUSAjxQgS3q4KYKi
gP8YsKSUinA4c+Xn4VQem0qccxS5xAZ16qGZtuNP52lq1GRxI26iB0opJmU74/ozWmsQGHO9QZZb
bHVQSmFzSQJh/Z16uHNtq29qxSpkm3TS/OM/lSPQjWQuRKQRmQCW9cfLLtn3mgMPaVOQFWv/oTal
ZDbaCQe9RELqFkLE7IGWgUzMYmZSNEqiOZpO7sGixxMGZEYvTh83Jrkn9NaBo623MOUM9UJEM+SP
s1Br00I4wnTZvjg6EoMruXKEqR5AXXkDrZpKTuVZd4iFNjL6GUuriBwER65oiaWfhMwEI2IC0nyO
BTUMC67F1NpIrkmNFREVnMzGU14T6XpaMBm7q8EktKfqkqlDI6mmNRdKcLTSY5dTpNBRFgejGTpQ
poMhwbHGZxLMprhSUg4laeUQgPAmmA37oof3o9TK2FNqSU9J0VQFGJVjerNSzJY59m8DYHLlZdZY
sn2TtFe0tGrnhT2yliLgHYOpkxNZX64/QWBP7JXrEzVMT9Z5ePxPHm45oAoLrpKQHD4M3DwgF/2l
FypHhj8OAF0glXc5HIQ3DpzILLTIgBNt6E9rounFump5ShKQ0B3ne8OBWl0jUG6fjsCQf0kv8qln
EffG4EQtsvHdUyv+mujMEvS/8T76TkjjAD3W6AtnyuPqDiUOMQUW8BnPiPRbPDJJjYkD4t0GwN3I
oQhmRNsYV+QPi5MIPVgjlLsgAcjr9RjKSDvA0PeGa5LpFA8o0hxKC1Q6N48+SBEO/bsaKaKV/CVt
ZlC1FdMgsFbNciauuifWqj3PVWXNtAkmufh+aCMH9zsyzBzKppWf/2kQktOK3bGlFMOEnQixaaSF
m5eDK70Vp2TJNfc+WicL2QRsMrsaaPGkIp35tIXqK39v6vQdH2/yppIiGfC8icNCmxgevYBlrr4J
Ah44xlZwYh30QdNdXVHMqGhq01wA8zrrQVqrKzXN6LlnYmM6kQbCyL8b3kPtK1js3+AsQ0gPmCcM
5z/QNqHPxNUkuOX1FE8nykvuT1MmTloaaqOQdpxHQ/Y2e7hoU/sFes7gudSbGsITX1wl51Xc+TW1
TuWhlJyx3IrUQbm0FvML5lFwqK4ATLN9YHhto5OdDjex3PEx3MqY8mufx/jcfxnnf9Rpr6XbyD7/
s/P8+e6LxPm/nReP538+x9/j+Z/H8z+P538ez/88nv95PP/zeP5HahNo9gb4B+nP29qsjoJhXzxh
4XtCOaF2ePp3YI7+BdO+CWtSJYVyb3AQeaOisxu8JPBRRY7UER1yzHgTUL8hTRXKq0fLA/Y+odoT
eP4IUERNTbGKfF4R9YPeTH7O8GSJohciZyCC6MUPT5yendDpg+7b6PRElGbu7qPJPRIz/C9d7BvR
1av3p11QnX7XKNjCcrIY316T5G3xYmwy6H0gl1Qgl0kEFHl7+lWVfn9FHzsv+Av+Ze0AFj+n4L/w
z4tnLGgz+g1U7XnITLSpwZwR0jKZyEGDZp7LusSbp1Ddm/TVmCPHhTifEggQlSle9+VhPQEOhTkX
RuwalqXohuftFnWSBMQczBJQXjGgNOvQelK7aEeq3xpDiR4t6djxfU+4gjyxkGuUWaXF25Ajy2R+
7Z90ZJWQ0JLeAtnIpY/6CHQtLqtjgBhX4LsO7xsfgADUbhi6vGwHA/66edKJjtD8Re4xb1l1vomN
/cnYH707LowX2U3m4EB5vIZClORFioUdNGFgxoW/MVJknTh2nXdnz5TEI+sgR0kH7i0NylUwG5Gl
ddFuvQe11bvBXij9cjISdUh+VntaFeF9uAW11X2Zsj7KIHFgxoNCskQlGmDWNUwNSwoky2OnidXj
A4JImQMSQTc7StHQcLEL3Xh7unnxXjdrNSZbebpbMxp5e3phtiAhxck4Y2GL6xjJMhXxP/8TJcJI
VcTfyTlpJsveVMTPPyu2L7fPTypORRRXMKwIimAQAwtahGG4ID/dLQQ5Xuy43rBLdb9vtZ/uVuLd
P+nE0hzdf7orMUI8h2Ciq+zZKBxco6ogX3VUhvqS7NLOiyWItfNCwnAR66slAH/FEOJgCw+ug726
6IFqve++rb9rdl93Drqt9nmXJruKPYMBJzgZoTAfFEPCURpFL8ZNknFARCxm6oBNswsmQrci0POl
pRtXCHewQiTc16VUPwhvtog1nZxJDOnkxwSBi3HlighsdQJY28nZRRn7IXD7StjCEWVSNCRg3Cv+
d98Uq/F0AqVBQcgf3amVfReADTAbT/BfO+t7zIkyaCI58/cg6XIwZc+pshvPm53z7uvW+Rp0Uf3W
mZ0m52Gm/K3zGkfN+pmqqT+MpvCUiVe72fwGbDL+abZ7elbHRHF6RP/G00/xWKrMw9/xfPRFh6oA
fRgluvWzZrverR+13rShjPlplmq1W+cy7/Tk5AhLxpJcMGERUj9vmmA5JVn2zdnJ91E5/EqWOa6f
fReVwS+zDJP1on3RaR5gKfM7WY5gRMXoM9niWRNyO0YHZIIF7+SifW7Aiz6T8A5w2+PkhwieTLAo
TcEtomG1E8yShxPft0paCVZJWCGFN3ZZO8nqUXA79no2EvE0q2+YyPCoZ9FnolR9OAxoea/KqYRE
yTcTMJZVKfxIlJABbnUh+Z0o18Dtb9kOLr9V+Vi6u15rRA4FRGB6Y1e1sty1XdWyyse7ZCam1YAl
Gx5dP0omGvrlxgtvWL3wL1u7vIU0PoV1eqR/x/LPyf3E+fQ7lt/mw0BcgD9iJQ7V5h6XUZ+xUsRo
E7yeIstFCQmMZ7e+WTJKiJWkQT4Zh7Kc+jQp2vbvzF5a32Y5nSgPA2HZeJqz/Jl3dxQEH2Zjq4ZO
TatT7/fjFSAprfSZf4uesFgFTnXWiYNPhe0AnA5VDYSPjIR78Ga9eKYTgoNUGXQ6mN3aZTEhXpJf
i1LF+Cuh9SbyUalQ6zyd4ij7Dp+GM4tyAhtPMetTe5TOzy6aGMMbZPPY60UOClhBD4M7ECF2Dk/w
8eWt0pq2PaCa2NEmpQR2WD/q5IB25YGlaoGjimI7bqI6tpUNB9rvaxd5fvyXwWjZNubEf9h59uJZ
Yv939+nj/u/n+PuTMAZaXNPGjdzo8mbT4BYyxU7t69oLPqxiRAWqlf4kXvWC0dXgejbxu4PReDZ9
BcKR3AZ7VsX/Pqf/vqD/fkn//Yr++3VV4C4Z/XeH/rtbBSjw71P6ekb/fS4EGm7R5ugh+uI8PrvW
GvUQG3Lcm93B7QOsFMpK++RaS4MDEK4x3qiYjWjnEqgw9ie3g5D2I6YBb+qC6tjCyzx66xVW1ogv
7aNABv4bzKbybqzcWKziIV1a+3ohb2vwbgtdYp3onT/Vh/EkuJ54t/EtXnm45yYYqzsZ1hWmq9kQ
EYGyetMXN3rVxm9VbVZgXLTRlPs2lWM99O72FeoAAy8Rs2OWd4PFHUaoHU1pT/u4edZ4CxDrr1tH
rfMfsNOHrfN2s9MRhydnAix6cVo/O281Lo7qZ+L04uz0pNOEzr3CBd9x/bvmq1I46fUHE/FSvOJf
r0rTYNyNUqOvV6V3p/Xzt2bR8YdrGDCPi35Rlr8rW69O643v6m+aVGI4uFQF+GcsX/lhZZno0yyH
aFzOBsM+F6vVtmq1knfb7fb68Nk4QMxern/xxU//23nbfdc867RO2n+u/fJFGTNgfQtkqJ+fnFXW
cTXf65daeK3z6Ag7I3++UnGTuuFN96B+XpfYqLSK2OyJzVsB6tMsCdPNm7P6saOwWYqPVLoKyda7
b5v1g+YZlVBJiESlBKbxKMRtD8qT/NjVqd2Rd+tXSu2Ts+M6rnFVt/ZKp2dN+/ukc24lyDoX7Xit
WArWs5NoJACHAZ4jRBpSwqvSTRBOzWT8BhabSQaQQ6tnthIGu4IV6PHxSZt6x3xVMSOeuVIHo1K9
gSvzo+7xM6oYcWlly+vhEmlYu31GDCI/u7fPun0fbOp4ca03a16POUorUl3eAacCyY2T9mHrzQVQ
7KB52mwfNNuNFruN1r4oRxhWSrcf5KhDi2GSC/olhmQygcnwCsnajSqIXoB2FyPidsTLUufk4qxB
v4ig9qcsBCANalfUpyyL3+fN96324Qn9jmKRVRSpcTzlz1el+jH0uMtGGaZHnyqP7D+dhV+Yc14/
40T4Ad/8gb8uzk+wa/Qtf3OqJsmr6ItzUH+pdNZl9e+/o4Tvv3tVajTwZ6OBvwCD45ODJifID0g/
PKq/6VAi/YKU01P6PD2l31G+/A2p799Twvv39FtVoF+UYjalvygngiZ/Q+oPb0g9fU/J6uNV6aD5
+gLGWNcwvzH3UKYe0tcpDOkpJ9BPSjtonckk+PWq1Gy8PcFv/Je/ug313W3IlLZOacuUc51yDilv
zprUDv2A7/dNYBNKoF+vSodffomf8A/81tgfSrxVda5tKjlDC9N3lBtp11expKiM1q2v7BSjxDl8
u2BZGa9KRwcaafkT0lqvT15/y2n8k9JUAn+do4uRE/CnTkO90DEy6Bty211OhX/h69xs41y3gjyN
AonJ6verEuRJqvOvVyU5R2KSni7ljy7wDVD75OzcyI0So3Lt+rEJgL6jXCRT+42ZzylRCRDnOAiZ
FJWRs7JZRiZhGXOW5iJmCpT4DiSAlB/l6i/IObrACBGS46MvnXN08ubEyMLPVyUwxIDSmMy/XpWU
TYRpkX3UedtkM4F+wDeyDH3jj1el87dnoJMMYbUSdL5iGeMT7KmIIpoSoIOb3XoEzvyWubFMO0+T
yPiUeQoH/QHpx98dk9KlH/BtAo8gd3k+0ACMb8yN0lUKWhFRqvp6VfJ63d60y7pZ/daprFv1h0qX
WkV/vKJZ+soLpzAPNxrRLORIjpdVs1Iy1S75/r0brEpPlHYBlslcVm3VyzLyk/OGvoeh2bv9YKry
jSQu869ZMNW16YPTccksU+Enp81GRip9vCpd4kk1SuRfr9iIM4w3Nuq84cALdSp/qrzeeBblwIdK
D4wKgS4NC5d+MIly+PtVKVoxvJI/OW0SBFMjXX5CXqDWIvwLUj4OVAr9elXyP/m9LizfrgafMNn4
ZKM0MkbJRNWdjL5kjuyi+i1Tg6hwoEpG3TM+IW96O5TIyZ+4sDBWOK+iL8y5CnQy/TSXIZysvl6V
9ErqFf+iFOxrlCq/IAeNVdWk/pDpfPnSyFMJr0q3nuIT/gUpH+Cf7piS+OerUgAdszplJcCyrn8l
M/gXpOjBUePiXspwCVcO1AgV0JBghhFTh4qrwxtv4vfNDtopUOI+RHNa5eovWGRi4CODO8xvtHeW
jc8L47iHB602vdtSqda5ODxsvW929krOJc6eSFkQyfWIvUyplNZecWSTMTonvvjrPh7/hMYFe1Sf
OCs9wbJUSIiNL76AtI2K+oaK/fg6BBfPX5RxYsRFQv2Y5kiaJCrCu93clJevEMQaFMUXN8T2fgSR
Enb2ZYofej36idEs6IffuwnEk6hh2X1uVtn5sGDavB7NRGI5qan0hIC5oFC7RUCVajB5NVonF509
7c8qqR977sVp2uot5HAja6/kiPw1Iv+GVSQahIWHQNE4AhWnbQwimTcVUbORxQ7O2GfzxSvJeMAl
dPSve+vdX/qVJ/vzkF0YNHeC2KRUyiTqXtqiXq/SwWStn1907JW6wSRFCawQSrS4lyqgi7dleRN0
A3GPxFK9uYVJbHjfw7doNmEemQbBcK+0tjm5FZtXYqM2DEolZ+bkStQgKRRd/G+phF7SFCgyoTQb
qQjlOOeBMtwDzXsNY3gOaJXwP3vQGCc1KK0hEwk6dGtPui/It4Gqj0cB/bPjl/8kTl/XorkufhZ4
9+JJ+HMN/u/6yT+JrYBMzlrGoKbUxHeGXj4xMQAZQOVLJ3VR/r/AIjEN/MUXKluKS6Q7QEgxT+NA
JVXj6+HP//fFFwaqWz//vP7P/f0IjMmGOUDZHd/6OS5YBnStoQWdgsa4HzCOsic//yxT+jJlX56l
flnbF3jUDH7pPgKBBhISfLrR2wSlGFa3/vZ/W/+AyahaleSO2obyUHld/PFlVBX4O5FXW5eoSBJh
i+tbXMCgm7RmKjjqkrEqViHqhAHjidJ1ui+aKkiD/pZFB1nRLKJHXJJQIQ91EXGDWiYEYKCx2Byf
JevH8MYhkVOsqqsxjYBoPOdWN/uvB1/XUVBkAahMLbgbSBa2WpJooiFQorfJUCsoU4kS9oRKL3Gy
MR8bzlX9+sGeUEoGaqifaB1HGfhl5uKqI8rFL8zV2mpPRIoLDbjot8Z07VWaro21mWhFQZN9Nb9M
FElk99C97G4m5iR7uR7tJli+LlBtzL+JjYysKnY6NvlyM2RA/2T++DcampQNtiUMsml7rMeQ6zbb
715SWUx4GVVc/6fCy5qVaEd00NtTE1H0Hc05Om1tUyG0ri0Aw2mOqv1nwdOSMx8mRG8wwiuk/mQz
DvsV94djJga3t3RCnyMTjfoyKmJUnW6lzEJ/XVccqEtZobxEQVuIePdKXu3ia50UlCUYUv2JTwq6
ts6dB2kgnJBz1C+VJvEU1iwsTEpiLU2zPRGRD1lYTtZauMzcqFmRoLlIzPwlXKgD+I8DbpH+heHC
dfGewP9Kzr8KkOPJFOBPLheTESNFSpGRooBYdkWUDUO0Z8sYV48P8p5IDLuLJo5CNhmTYCSVLENr
LzEq9redr+jssNRKuODeE/AfgsL/QvfGYEGNQ04LOcnUYaZG0ySrnb49af9AKk2qNda8Wv8yD2Qy
G6pyRY08nCLkNIG8QpWJVYhFFJ8QgyguUQNt6HisZjJMXMNaGjihjo3Ksh2LKsLgI2HpYqMmUynG
Y+qbNv7iTIGV0xjFHGYnG2DdJCcgD0g+gJHnwY9G2ZrBEIJj/DNfEfqTOPcBjLwZGoq/Pa09/7r6
tPbiaQXPI+DFYzqnMuWrp/4nCnaKLX/0JgM86hbi8ZATvNJ6N8C7wHj1aurf8g11UUbV2bkP3+El
TDxGOtVBvDEEgN/Hsxm19knzPe5f7P2OTnfN/8uI/0H+o1W0Mef9rxdffvk0dv7rxYsXj+e/Psvf
Y/yPx/gfj/E/HuN/PMb/eIz/8V8f/0NdGCDbp3vT7XaNt0R0knwmCKNwoEKkwKFIbyjgjW8CesG8
o38Tb0Zl7ke9m0kwGvwbvxCMNlHN8LDDAIx6juIP4s0BDXXJGkUn5NAQQ1Qedz4pHYQmlQG9goAK
BGxzxNGjk80j0VOhUgExIHYPDWO6COx4HcX1DEriKRDdT/P3viKRelWCQpBo8kTxfO1ggCqfY562
/TtIKauL/h/x0khFQ1YXi3CMuWsO8BtWC/xSdhShmKFHHdgACFED33uDKY+FLkGBEksbMkCMCp1M
go3h2DECI4udenbhjmCQFOEqArdJ8eYIXskfy0CzCI42iRUTYzcIHbS+zYeLejC7K0BGhBAeUhBV
IhDBMyCNFSgKY8EPjEPVaxoXGQ54uyZfC5AgoHpUlfDj6viUBc47VTx2TgGHYVKU8WYuWRBlZBNN
G37qHCPV3Pp9fNsC2i7RQ01AM/0ORoJuKmp1FmISqe0qAXTAuUQZgnHBQVBNRdU5/M6ELw3ybYcR
qzwGhyDc443jIJ9wB17Cbb1W+w1e326enV2cnqthiZolbBDMjYfhTTgCMQcCp2CjaRExkQOzedTC
C0SYhyN0sEWcJYiygZy4EMGQxwWaILpJd6JVp8rbA5QmwxhN+PpB30eVjEjwxH3SbhpkjK4ojCTs
mlsuT4NwTofPJD9ZPGEP7MS/8icYmJojrMgJDi9keBQIFu+zSYZJyJ0kDUkdg4eZEm9nKKJGzXz0
oPulQ6QZx20yI7giJ1bpHoZaV1yyIeP1pjNvKGGrAN+ktjF6K4aEpwfSMFhDnDFICxKZ3vhTukGX
RqqMKKjRJKYvqWXF/5RnS5ZeY86L//nsaSL+59PH9f/n+Xtc/z+u/x/X/4/r/8f1/+P6/79+/S8X
9iBSYI71phEaGOsArUiUbV466NuEKgyUEQngdeeoeU6hNCn2lRFQU+bY75EOgrTlNuPzw8Af8rpK
ruDU+oQtVXw4EAMjqsAhvO+PYsSjzK/UAHSCU66gcsXoS0PfH8MXjT++czK5puih2GMKZQRIvKsf
ddsn3e/rrfOMhQrDXfVrfomnNflJhkAtHfux0Kr0KKSPw5Z8sXNlr3RuRFxiYwM0VRxB4mO8p+Eb
V7fpXRm56vyjhBKyMUMios5xoL0BSv5yMBxM73kpgWXeXNRxDm82DyQXhtC8et33BCRngi9ewJAc
1993O82jZuMcgyc1cFGKsjlC5wE9sBOOkTUkVpJs/OzElvaCJeGY0T3iTexs7z5TETISbqLuVb8L
4MVP8hkaGb2Q/m7Cwb/9fZmBb2/jW9t4NPwG75zf/y3Z1j/2HWBGJphWlC5GGWB+iXBTi8wV/ZWc
7/ohnUvJ524UP+EyUDtNjOe9Wlsn/EaJ10eNx0pvwiMplR9pyOG9XN6i0twKcbGNmpifLg8mZN/R
izpo1/IbKZF7EV087J6qkQqUnkLlpYreMWM0TLCEG2JNxsYQLUl+vxzX3UEP1FYYm9YR4r/9SWBW
reFzk/KrGtFLTVeh4eyLGhf0TBApMYRJz8JO8YAU8AM/I6MtABNj/Zgrd0YZtvKdOeiGpktNDc40
mAK9Mskw0gFtCQlpxUpvEa36lbDKF4xK9GCP4leAbT2gU9LP+ZCnR2voAZrTZNmhYuB4EZHuYGku
g1X7qcKupiugXgSLdYvHugVoXqcTLeOZKaeqKRm12h9ebXJHLyWD8R+RXQWWvPU+DW6hBxGF/KF0
SGk9M00+eJT4UzRRuGwgoa/6xitLdYQkIoQI+CCwxgIpwfwWjfCEr7eZpDCYX73QB+NfM2mfG8+7
yWDqrwRRhPSAiLL8L4GpViBKY+TFlMvVR3ptzEapHOGqUCRERaWxVGsZFn1Qh/QyJIOiBzHRpB7g
i/MWuh4rR4VA9BTS2INFXW829CaGlM8jnyGp0UtESsUZg1DXr9HROlW5A6VBQPs6yjWMCKFmp6m8
h7HGiQNqBrSWNIIJFizSBxM/jByaQEasT5Vp6Y3Vq1LnhLMhR4eJoAENUedqg8F43Ws1QsfcYatV
KXSLCP5iAuVCQgrUIkgsKCyMBT1cpjZ9tNSoAZAvqUn1z/Db0XOhMYBkp4cftIUoOZdkhadSFim1
EGB4yDmwmpvRRtTmDloP+IjqTDu6gUghJsoZUGayQUtHBGnFx8DUFgt7oZuTSTCRD06/f/+edkbu
/OhZAmZdgA0Wcj/4NxvGt17vr6uzsjZiqxIiZCWyHdSDiXp+rTp4vOriOfVgYpIPEu+RSS3Aix+h
zIVobSBD+KvtkNC74tXK9C7Quy+4hPPYXBnxupz3Fcim8WQjim9s8HIDKEyuIm690WAMeo7gWuxE
9gkNHMY9Pej+b/PspPw/0Dl/ijYD+anAnEYzzq4kqIx+9mKGzx3IWZ0hdZrn5at+VUTAaJ1L71VH
epcW9QbkK1ohURUDVuPozII1oWCKIb28m6hP4ckYAksxw2h1Ehhh8K2RkhgXJtjCra/kkOxprFpl
MSPPCB4jVcPBDbWxnSCc33f23iUaxqoIzUGHNhLCBh2RIgNcGk3aTJQYshZZsqAWoA+slmP7fPLP
YDtDxhCR/cwaiLexSty46lvSOx8AkjI/AK1RIgBMu6VwaDMEVko8CsXqcyfy1Xd0oa36kAlB+wHa
J12CtrPd7Vyc4hFo49GJ43rDfHNi6k35QQhyfFlvUUR5HEXTrbahUBkXb1PRg/W/2IClyk1VORIQ
hNi4nF1V9o1dzSR+5MzL2Ad1+Oqi1yD1lfrfVRzPRf/i+78/Tgbd2/5qzn2rv+z93xdPd57uxPZ/
n+88f/a4//s5/uz93wV3f58tuPvbXuHub7RXaG06Ge0tvP2LMGI7wKve/m0/bv/a278GcYCafX+h
rV7xOfd6/8O3ecXjPu/n3OdtP+7zpu3ztlewz7vaP2z1W++jp4+ntJTbXWxixHl8Jg70ATqCkA7n
eMS6lNymXOoPpg9tsX971uoeH3Tf6v06nWDY5B6K8NR6GM84/k2GNV19JLX/tt7pHp2039B/BFn/
oToyjy12u73xcBbi/0oYX3oCc1FjXfxkvJy02j+a297Wz590xMUpzXLi/G2rI/Ai/V8xs6Re8hyg
Mw5farxTrz4Sx9zehyAHoLyQNqcXr4FXcDWCDqpJwI7iu2DygRxYGBQA3+PUT0FKIXiCTsbZiCY+
kq93gxAPeDb+/Oeq6NzfesAGPdEg9fk6mMB02X/Ck1KfJwdyk/mjj4NJMOLNd94pOYU6Er4nXSww
ucltXEyV5YC3EBq1fexPJ/iYwYfQaBsaPj79ngt0Grr2B7zjXxOHkE1PGQ5gbXUTzIb90ROyUm69
KYyh8bAhleITECT9uEwCFXwPyntCOhf90bhpOB6SnLJaCe9vLymUAFXEyW2tBXzUOj8/auLirFVv
i1swwHmnnF+3RG4bDqbTob+JrANGDd/VRYFZo+eyIj6M1w10YR5Acr8+objr+J8ntBlwza9xMix6
wql5QODwf50EzAE/WraJ/wl17legHnGrf0jv7CXAHZwAQzWdwPrBjG57pEMCEr145urbi2ebl4Op
fndSlIeDD6hXemAvjG+8yupVChr0B0dHgt+94ZD2+NBorabWy6cN9ZJc7IG40p+E0F4CSOi+qzdO
T0t/wlg8kVKKBK98RlsWqBsrFL4j+hbdk/F0OBh9SKn9rn5WfudNqKrylMhvxEJYdRr1o6PX9cZ3
mMNeigUwWjki8n2RoU3H71tt6wlMTDg4+b5jJUbPAMae7QMktbInF/wdPwW6ZjTSPe40MCCuXb8L
Nl6j20UIZuGsltbW5tJQCIy11hvi8qHcHw75nn7FJqsLjknWNZOkaaW7zfen0UC4W50PpHWcCgRW
SVlA2vXz1juMV3zx2iJA0f5HLLK2RmGR8MkZpjlJ3ZqK9WQxyNFRzgFZM0Ws20Pc4F8ZPqHbHQZe
Hy+G5BiUtWJDspYCJ+dg5K2eMgzubnNv00YAUs0iejCY3nIwlqP4fwmd3Z216KyKOLZno5eXLMpH
yaZ0WOq02319cnZUbx+sXrFplAuqsqKjqZspprugHuurgupqTeTo13wVVVAqJJ8oLfSASiih8gqT
VdVfjLyOXs9XQoYOYpthTRoxaz5ux4uLkXyIHUxGsM1S1hm1NawoAchFY9wyR5gSCUdW9J44vqiG
I21KmyiDkQrGdoAvjYBYHasv/IB1Wvu7biNmiHSPv2+efdcB4VQvten1jGQkfGu32w3oCEXZH81u
Q294592HAJkFlSnwgzroOg2UufUEn9MLwUrG4rg4f0LLDPJDwEqGrwsbJDURO6+fvWmedxunF90X
X33Hj/vKtDMM19/oNg6PmT8tBK8AOFr2+Pp8hfMzEOzwBlcdVwE4QHvixVcfUrCM0IzU3ptmu3kG
fNZ+g9gwvfLoLW2PuI2ReRIXg21OEMVmp3y10yanjNppwpdOleTE0WlEXKlX1nLioRH9Xp0mxTW5
LsEAwr+KMr6e5Y9ejaQnutYLbnUzWlCQs9C36fck/8O63WzklF89nY2vJ17fV9se6FyFhSIWxi2K
AV4jLXcalVqmZkCZTVMNhmZw6XkU+YvR4BMd0ZMPJsrt3hwct2byl8i7hrJXUTk4K91ySa1v8Vbe
+mncZXXTPV2qtyT1G5VnNOoo8aNgtPn9YLTzwnyAFgo8lDONV/LkwOz0MLw8eyj1C+fbiNgouEOX
/Y+jAW+N6zP+N8BSwLE/4n79fjKZfkTp9Co5ptOPKJ3dIpjBv6KcH2cgHwSJDvhHNBB4BEYecmG0
NjdFZzZ6ElK8CU7qB344eiJdQeRo9kb3dHCe3RZx56VqtTf0wlB0f+RgEmLjx4l/FX/MXp5KSBay
n2SfjULy7dCJhrUfL4NgaNDJyoL5Yl9hxW6gLT5bF3zgOB7o5+H7IOh85w0odlAq75A36d0MQP1M
ZxMewgQaSE4iaoQFU3jtR0q0O6mroQMsXo/SonoP5+r9kZx4e0L78kRZ9jfqFHr2xJT0htR0tQfx
iJVwf5v8cOEH9PySxzisCVEeaa/dX16Kpzvyks5YXl6tlAxxRmXwunVeHuHEUi4TXSs74i9/ASiV
SrzYcb3zHRUtR/XEptipaAe87RnVySedwx2SFaIZRe248vBksKQe8A4WqYrNcNrfIWkhzuJtrIja
Bh/Rd+KPBmjfzTVRoRmXUr2jSngtp9U+j0Btf/ryyv47itdotWM1vtq2/+I18KSZie72Jygibdby
3GVgJRJm5SjO7P3B9ydnB4lSi/Z+8OJZ4f4n6zgogIWktNujmxjizNFVpRce3QWGN8/4HpWiWdYq
DJqVTh56FZA8ryJevhTblViZ5v+3jIoWRU4WKV9W4oXaTavQH52F3jTt1r5xtNYA4wMgBWOCRsWC
MQOLlay3D8qTqvBkwQmgJrD4/7iaPjlzlv3ZVfZ9SuH/cwPepcLUcy46IbhekkYn57Gi/49KJUj5
JlZs0wGsfuDu/Z9dSHbAKHMV3nQS9vjiyFl6wwX6oPXOWXjLVfj4xI30/8eJR+etGw+cGRx9fOse
tW++cZW+cBZnua2kV2s5cSr/qKpFyMUqHu22yoOqGNKgDqgWTnPlYaKJo92LVnnGZcvwA8qWTYPF
XeewfKWgXxF0V6GDcl8V6utC8R7uHpWHVTGgUkNGNEk9WQqw06VmyWKHXOrKgHWVZCAu1DcK9ZNo
XQCfIff8C/TCZCwHQIi/092E8gaky5GIRpA5sCrLiI3yJFmGGa8idb8gB0JsZxUtnZiZ+5NhmNre
IFb+MEowFVTFzUCZkFH6DY5soE3EX+ITyo/SkFxTc4g6RMB2nzmTVK1JQn2hht3P1PPw39rNgHU9
LrUpYRhwQpb2jyoC1eBXvDamDoPMuUGC+GMEAmwMBeKPqSCsmUPCAAl9uqOmLDRG8YTb671oHqFT
PZJ98BMPMXDAOLocOp0M6Ert0OMLwKEo/6UqvqFQKltzZqUyXbeuSExwgpIJUaf0Hz7GtbYm5pCP
Jznqe0LaEq1HzTraW6rleXMsjbSQNf9HVqxmNT7hpoXE4X8UCnMmaKuhnxdo6OeUhhKzu9XS/y3Q
0v+ldskyDWQ7E9UjL387E9Ujz9VOzK7gdv6fhL/masDdzP9T4LMNEoa/aYhASjcSDWzaYgPWhwT3
R5fmMS0c8VN6N9wt439ZZXYBQvdyvxiABKyuBx3w9gES/LswNDlfKSJ2Pfz3zwAU/i0KM4JFxAVY
8C/Bon8Vbf/C0CuZ4P9e+iVhfRk24380+TdXSP5NSX5gbQaei/pI/sU65IQl58Lj2XA6GMNspxwc
eLFy1McrazgxXqJP5trX/g95T5qOuolDfJ1M3CoI5F4P7sTTXXE54IPXMSBeDMxgJCGdY2xHr89R
e4IZnn+m53pGIz5s259hlEd8YQfo5pp6zdXIfxYf6v49pXmCGKaai1+SsCQf/lkx4gbDQX1AfLjB
jDkHLKkB6WftMnrDYOcFLfvJXsDlzc4LNL12XtBFyUsfj0fScUO8to8uV7Cj0G8GSbeDcVgxR9SG
KX0F/2O59gBuJV7+ZmCW58YTXP50tzCXX4Tokhzej4JbvKbgfxp7Iz5TruJPjyd4c4Pvf2LoKRnH
Q5R3mBJOY1GP6AI8KxcrvFboejvIFtvIFPjrEn/d03/w834X//M0dUwlLICC+skiJYGNUuWAZHCH
gnUZh3VZIcRisC7zwLqnWoAHMuf2YrKkYe0YsHaWhLVLsHZWgtdTA9ayeO2QfBvEBxI6Cb2FcXRx
r6fnTSb3wKFpsO5356KEu0u0uZIGC/3GCO8vCK5CXQbQUkD247AwRpt3jTc5DEgaVmQmm9wE0KXm
Qf+WneMggAGLp2bEKEa3nZwaVmpE1BYHA4wnoBSJdslIhQP65vI+NfOyiifX6Y7Kxr/GdK2DN63j
FfBlebwhwjdpNibjtIITH1+u6vPRdHE8GIGi+rcv/KsrPH8DYyKvifxrzBdgxnStfTYcujSW07uy
xnmz/uDjbdC387RXIrbBTVe0S3ZFdmRgv6tC/Z5Evz3967KS8FuY3sVff/KXWnnkX3NMgJfCXtD8
ReTRFgyLpEZBKty3CNZatEbDTmYq8blI/cLnGBZExkBKmUnLAmKkVvEXUd1y1eCYLcBZaxET/N9L
saBejw/fJXL5b2P4lrJu40it4s+0mJW2+h/Q8FV894ClOzfpnAK4MF5rlpNksuAAulbg5m7Jo/Jz
wXpUfkVgrUz5PeqsArBsnQXaitXWf4zOijZeLjkeEimKKp2dYf0TTKSFV43iJtwMrnCtHrqsUXOP
dTG9h3QqXjcJa00p0OXYSi5IROQ+WgUsEmfo5V8EHtVZpK/ydfCYP5R3sAvhaADiDQt2Qsm9cNy4
YNC4qf50Vx47cDUBgFamEKyuLbiMT3YtohHS/n9wCzLvSnJtlWplZWTSJyWW4vHV6k32QnqkT+iR
qKe7VVYv8vcEf/+ozuNlnNEoSKDfqPpYY65bdpgYELHxwvIgAalfq1dC0QmfgigmlJA6xpOpcdyA
fuNKSNGooAr6TSuhFTC4BLQ8g69cm6UfVXs0cJJILa9UJCD8x3Apa6Mk0gi2bXKZZpQoQCx9vIZi
cFztV1YsCYzyKoZ5XXua17X1G1Ysv0XrJuMw6n+GxaJ+/Tfog+KKIAL0MPqguCJIAlpuFn3UB/lh
JfSB47D4kA5ozj8qnlpSHxD/SV4wFN3+vnEyvEtHw/eFPD5OdxIrVMaBnjxIvsB4SHVF0Za1J2th
9xP+V2msy/CjN1x4VCONtfyfPClkesqHlaITqgXrQfzlRDAe9MKA8L8r9JcTKkCnxcfvITy38pIE
i0tFYsmHq57Vdr9+9vWLL3e/fuF/TYesONNxjHDFnltGahP+WW5STUh17OKHsgcrzLVVqVjy3QeR
k4dZKft6iKGUDJKLK6Wh5CWRLvY6gbm+QbKMPlpaGylYqiNKvrr97txzd2mwpG4bBqiHF/57YN2G
HIkbSQv2MZL+COpficHFnsjN5qvvYyQDfCNZaUyxZUv/vIPVCtZyHqAIljlld+k20SKawKb95ssF
2dSEhVy6tO/F0JYSt0X2KBWsNUaKNRAPo9gsbiroiRPPxOOUWeXeFib8qifOZO8WsIN07/DCxSp6
t4q/1cvzA+ydLmY9KUC/mO9wuG4drj62iRkhIRHv1Yq0gEGdWu3zF8/K3Wm16/X7sG4qg67vTiu1
T3/b/gdfpASW20DFiNkVSI1uW6b+KRA7ThA7CELSZw4cBDMUdnyIjom1IKDwz0dCncvjsv9jJXFd
KRe7OTpM8CRJ5vfdDWXHgAK/428lp47GBl87jiDlJEW8nqRJxYwn01JhaJ5E4XllXF48Fs95d8Gk
Ly6D2ajvTQb8KOkoiis9CI24Mq6QwIkecvqqGW5lHMdj1HewXIS4g+f6S/HciphuYa5LjgmwDw9/
BuOlECRZ1cF7K9Z5jsBGv6jWIvWrosKLVT6QrVD4tR+2efzL9Zd4/2n0ud9/2nm+u/Ms8f7Tsy8f
33/6HH+re/9pBY82GY8DLfhoE714o95tWuzRJvX8SPRu08M/2oQgonebij7aRK/ppLzblOfRJqw/
792mz/hok2IKfh4p9c0m4XyxSXMUDAYDiL/TlOtBKHyyCavne7VJcLJ+csTu0o2HN0bBSpTvJxCe
rdfHiReojilfoXOLUT5lSfnWMFTFl0yQWxO961X41ZmRDOwhXs9CDD8aqgdoQq6gm6yKXdC+Em27
aZDOYx5KGkY8y9oPevQiPJUghkPNwN3BwTw+PQLWo4eHxdPaUwn2AK+8qb9jo/v4dyDfFZWvAN0a
KGDd7adbu19uIY5QVpFLvdPd8afi23YLw2kitvJ9CGR2rJr9hwpjgHHvdksP9hqQ5jHjmSM1tWKY
yj49BkSPy6gXFx8gVqF+D6gdfw+onXgPKPb2zyh6+0cHCX4waq3oIZ/240M+aQ/5kOzfgOaHFSuI
X+jBXBneYOtfb+2+ECWppSc8S+PL1OrtHnpabsBYIiN4rD2U9gai6xfHQ/WomHw9mHQHDQAACVXx
PXotS8ruppqXZL56YRwsiI+oX6AhWbz5nl52NSvIsO34KuxMP5ymkBER78Dkdw+a6xNqCq5972go
5Nn56gqoMCLzgWPwQoeIRwcjOjCBbVxOwGII0TI4HgCTfQGTv5BsRgq6RsF00SaQlBvwHD26wre1
0RgJ+8EtvZ0Uyoi/mifl00lAthG3yZdiQzKY6HG6H9E1EQlAaI+XF+7BaBqCLgnnfHvEKkgD0u2G
0z4Sh1jiexxzkANpPaFtIlnhDiwnWD+qINc8uNa12CowGksI9hrvvEqRROjAU7a4wow7oiczMdp5
X9kIKPEBCwa/44e6m9gKqabHRxGqi16bLhWKKQN+iQ/9ObhNBYAk72jWpSva/mR4z7LSGZDR6LMf
yBsC+fHmMVmKaFUCg18OhoPpPZNGDXcVqvBrocBSo5lvhHgnG4zGKBqUmngLgg5TRFU9TYg0Zlah
qXw4vOegrWDq4UOA/aoICTOQ8zuYn4GWWBGf4w5JwRFJamrsuvxIX5fDzXsUFlniEA0CDjvoQX5K
UeI/8WNsIUednqKXQ69jWUNCqCKmUtMr/Zv3CFWBp6do9jdmwLRnivDPfJyhQ2+KpdZ3Rix3P/sk
qZn2F71zFavF7BI9WZWvJ2vCfrNqVfhnoUcupi2lLuPvQvxuH7VKp/GcJ50MheqGN/8Jk3Z6nPki
70nN4T0b0cVfm0qnVPHXplZEpbzvPTGF1tbWIpJEpfB7zrNPC3X9s3XY2Vyiw7/Rt5cy5G/OG0Ur
Iunct5CUapz7DFI+LsnxDNIDMEv6M0SaVX5jLxDh0xR6eUgmynR2hQ8agBE9mKrnIbQ5Lm0Go1uZ
5nHygaNb8yWjx2eNfsVnjbJUQsazRsINI/auUXvu20IZEpWO2uPbQom3haTeXJEc53qeKJ1z4s8T
FTCYUyxnq37au6DWn/PpoBVTacnXh8Qbf0rNT5A/pOOFUeHXeKRLk9dnysGoUtfNI0DKEyket4x/
lb/4/q/2Aq+wjez932fPn754Ht//fbb7uP/7Wf7s/d8//3nBHeBdgkLnSNj/I14337TaAtRls91p
itdHJ43vhHb4y83dPdo22qntbL2Bf3dr21tH/GNnkc1ktWXFe8nxjWQEV2wvOX0jObZFnL6XHNtI
xnope8nHK9tLNjaSyQ1YbC85dSMZYeXYS567kWzs8WfuJdvHA+QTWuJsNpoObn1RbndOzyoL7S9b
23MZW8BYzrXDPHU2huOV3GvelFus7kq0y5xzi1mm1odyixdA3Fd5y8QpH8iNlz7v3kS8A5VvQ3nG
QQ49Jr9pX8CUPvIngJ1bekDAYezRIJxICQJBXa9U5ekDBeQImAhKzIMFYhiDdsTg2PUt7m4GvRvR
80LmQFglfByENA5yTFFLSF4kjYHUR/sWBhK5ZMDObIRGFQKUvktgUbXfp/cT+J0z6XynJYmxYRtR
E9/PQGhJSlpktLHijRtUK7oh2tsJ5W4EtprepKMpUnIIF5QysixX5z2W3oBjON/D76FPMVdjpCMC
cFhUfzz0ekTb2+hgDCAK46S28HgXyqg+8f81G0wiEYh1VlOWtxwYC1/xRhwNIA0A7A3GGPWVeDUH
MRQwTQ8Pd4xGvkUaF2pSdnhearYPXLOSiN72O4QW9+JWvbaLsIRxcmEPPmhXT7EnKqYnISngHr1G
GEINrHQ6CaYBJRCB+dVAFtAp7i59wPUXqVi0uXtAmR7viuLOos8PWF7huWMEBkJSb3da5uIqrMmG
9N6VHIq7iTcWfwmn/eHgsnbzDbWOm9EUm56GGUwgPM6Mp0tg+TcJYXhmIDUTRB37pF4w5K032nhC
wB/km6DXUtwJVdyllH4A2pvsR+RBBPVGE4BllpKsiiLKjSI5oE5fbjnjQQnkEtpDVtuphAmCw85M
kXa09xuglCFAaGMc8rM3VAU1QIN4KcQ9Oq6iCgG1cNcWwfEjm0NVFjE2zlFIJujedLtdvTSyEtXJ
2+ODxulF4/BNtPyJUng1apy76I1nvatrXBhF6zK1xwHDBvBwi2NlJy+wn8f1xtlJR3L5Kb6ee948
a2OO9XdK7+IeNY+b7XNi/GancdY6PW+dtPd04XMevIkfPTPEcZJp+xLlHllnEsymtFOMI3Y9DC69
Ib6ZeQgTiAKkNj112SrvdaNuWGeQ62yDoB+nd+P36P1NYgFgPQ1HM6j0nmq4KHHhJmv0CUICM6u/
yacagGHlFnpNAzrgEVYb1yybWBibBZ3W8/v0yurEn84mI5b2Gm68ajsSNL0CFm2k077Vvw0zivpz
4/U++BOmH3rXTcHBoP0akB4uPA4zUvqVdYs20W59YPo+bx5z9xJA9MjqSmj7+fqUl9KrDEppl+Yn
D0vJ4R/gtQiYrm9ZMVrolQUGxhYVcRCgE6t17HsjlbYfr94zqmvEsiCInyTZ8W4soVZakXzYe8py
M0KLO3UPnSjlbpcfm5VBwZ0eZMGFkrW7B/Xz+qIggEAmAnY1GMTManbLmXVttGlMF8dYDqm74Sxy
YbvLkosbz+p6rLpZP3q0O5nWPWg2jsyMznn9vNXQ+dDapwodUQI5h9+l5Ib46+ZJ57fNYAvVLo7A
I7s9OLuBNqNnZNJARxvBtBVYslRhtN8/n1Wn6buYeRgtZ/VMVmcYakM7J3talfIwZP6OJjgydycz
WDKjk24mTO2gPs5l/iXPS+RmPYuV5VOjWxtsFqnblbXm+6a5zVCMoRZkpN8+Ay3AOL9bholzSrQ1
1I2OmSQnTVjAFJwzl50wl5gtl50ql5knF5wkl50hl5kefz1TTB8WrYhczFWIk/KyTSEeyc0QeUa/
0FDnHtd4Qa03ouOuyw9mymxDRwHiQSDetTqt162j1vkP3dOz+pvjutmOkXnQPKxfHOHZIG8q91m6
3XKZPBp0+Lu8DvW82XC6Tu8XW3fJnaAiB8883krDpADH5QXh5sNitYsjMJ9nC2AQ4+T8xEvl78KN
21DyVl+1PtPHOiKjHR3S3dcXraODbmS5UyKefjEQthnRLoqdc5e3+h2TAVcrNrfNb8XBXyuPm1By
eERp/7pLqSWHW7TZPogynW7RY/IZXgb9e7wv1PvgT0O+xeNNlfOfvIG4t4xufRpJfmjTcP1pcJc+
7QDQTaYeXXgb4mWIiS+Ggw++cZGFnIJ8vQN9div5syx0gzIY+E38ZImUogvi/Avu5A19Uea36lfz
V0odLCnOjVLKeJn5GUMW3oD1cUPPqaJjtBcAs8k7tY0//1kpiMth0PuA21y4yY3XUUor6p8zekeC
/KovsocSqfXGenI4YkVhWJJTVYyAKRA+j+C1aKshPoDyqdySY+xeD1CiQtoMYMmqCXrNd6QXmn95
KZ7u4MbSpa93s0or6oQtHK3z8kid6CuXT88uOLg4vQwKOZVYYXr+lyqUo9qbYueBBebs5KJ9cHFa
chD6uOXcBzquv3cl1193SmnihIcraEuINjmlzkORogdC5Y5pdJ8OL+bRDkppRR23Bkb2uPypel+B
gSmXP1X+XC7fVzZ3KpUt+Leygf8xawAhuDQP5afKX6DEX+HfvUTJ+nu75DdpJYFckKzZA2Bu/3WT
Cn6CgqWkJK7uvnUJhuX8h9Om4gLBvPlVKTmqLZmcGFU8aIN1hNzHhtkHN4FHUrK+4ofSfa93U5PX
ifH91YA3uKw9OkjH3d+P3hAnPDwggTdgB6DCejfeZL0mSqvqN2/nIGV/OG92uqdN/iVevhQ7JUQM
da1+YRZbV5TZlwcCOvjId+9qEoymm/xINs4D6kh0qPbZaR5+YsB5QneHcbc+DGe+vDbLp6TwvqZ3
7WtZkel7Yp3rrxNEvR8HAMuQDrN9v4JVDnnDji7DSiyq+pBAdP6eR1J4oaTtE8KK9jePaQN8NpEX
tM18fnGoj1v4sjP6LIrZIIBh0paVqfn29OI93SSIjrfrGaxihOzCuwZREXktD1ON8uIveIDqy+0v
j1TNn3+OWuo0TlbWEPLBUUVzgmSAFo0/z5Mqy2YRVUIG1aIJlU/Dt8GGmA34xITelOUKW0roVh76
i6J4xLR8q33+FSnueEwMnQe63pF3YVa0lICQSuDW+zS4nd3ySRZ8hhl+gyzPfD6Yozgv0LK0MqVO
i3lj/SUxFTu7XybTW21R3tzZ/crSwbp3Yvf584uH17A7L0pOFcvpaTp250WKkoUMQ8uWVoW8Q012
3uLNKJCP3aSeJCNZd3A/khGZ3uLknHKx82JL0+pzScbOiwzRwMx02YiqLi4cMIxaOvDK/qp6mxAP
RlY83f3yRVxCuJcgIpiZFBJZ88Xz508/h5w83S055YTT0+Tk6W6KnEDGZ5ITIBVKybOklGCIddW5
SEY4tcWJ9og83SXz8FN8KDj9k/jTn8SFdFtbKFD4XDcOFE09iYRMzsQCmzvKQuUor4A/3d3Sg/y5
BPzpboaAY2a6gEdVFxfwp7uRgD/dfUABZ2Sjodvdefbls6+evnj2ZcVRkuTdqkirzcQgK5hyyJ+p
4O/PV7gyTdMEL56VnJqA09M0wYtnKZoAMgxN0MBs5ReglSl6zHSD0QG/j/APsjKfvUZ2VtgJxdYv
ntXEgQ4ZBHZhHy9uaFjepHczmPq9KZ0SRG7xP2K0YF0jWkOQ5Q4t3tPpVb5MSeHMFCzuhGQzWl3x
ccvrmTfBO6EYh40cGxyWRh7X5nsUfL5dg6KD0UddtSIvhz6eIESFULuprJJRzU0XHeU7qT+V8vrK
oZxePNvPVGmY7zzioip1uzxk6dCiEqkAMUKBczGRaKZoO8bygnqVp+eJ7qsdczdV9RVYkRJzXdtu
fFv7JzVuiUv35lwNWFTFzUB1wsqiBxoCvTj6JdkhmeDsxYNGhS+5NU4k/5bCoWSnvuFsQ+HcBhgo
aoxhpEBtTHnu82bT4Jb2Z7QyIdG9F6aaMESYFRYsyPFC9lTZ+nitIZhd3xCUYBbGFMutd1+K1Bep
cbrawcDuBrh4L/u161pV8KREWkhqxUpNHuDWXdGwRhiaCjXOgAMBXg38YV9OccwrM4x1VlrV2KSY
Vt+YCxBtO40c0hGZW6PY0uNJOPi3H1zhS4+VJ+RbCWdXfMuC1GwUfm1GlVZtoSS57hDfGkuZ0OQd
EnqOjI6aB9gzmoLwcWiO9yDHb6X0VxSVz/kYwiDR3X9YonRglEouitQje3KCwdBCjNkn7zjh0FLk
OLoN+jAEwTa6U4nhfulhqXBCl2oxoJ36ncInaVTBAB2Cr+aGfCM/RBfmMOjJ6LalVWG/ZWt0UC8R
+i5tr7rzwHx0Op2gWVaaQzSSK1BxyiDrgTZ7Z1l9dIfjfqzuGw/UxhE3hDDCaTDh6IYKmgE4nF1O
J17vwYg+nk4Qd+LMU/79wJS9kE2Wfn3SPihlE7bm+LOQ93UQDEsu0l6Evswm0kRrE1xVjMF+uPWR
KryBJkt3D+tHnSaVgI/zs4tmySQvrXOmfE3dm1z7aoYZCS8MZcAehg90xmi4UGjGNw2tq0RP6B1e
wKzypCqeyB3/P+oEzhJ/FZ/Enrh/IvxpDwwRvLOPwUMw0/eMcw5048sL+ZYuRrIVDZzXN2nh0492
4x9Gz0uzjiltuUWQfGLHTGHqbj+wJsOTI/05bBEVoiMlMIJsnqmAyWAnSNsNZY2v54aDiSVwl7Op
9mXgmAOhwwFeDJ0KvNuPN0NlNOHVbdBahKdtAqsz++pGbocj/NLtU1qxYwhjnNH0pULaxKI1tIcR
Uq+HvjSagLmvvMEQN7qA5REY3boDbpZhg/kSGW1mKVwwCJf4iYe4dXRx1sS3J3dwNu52LhqNZqeD
z70JXNYwZvvRvc+T/+1etFuNk4Mm4i42RPM92LEtPCFWP9rj2D0kZvKC/sS/BfJShGVPXM3QooY0
CsdUK8n4piNeYAKJAPLb+plx+TSWmhlXT52aVt28w40smjouRgP8HV+QKue0XcJ4RMZYtBkdN65S
f18/a7fab/ZoyTQbqSDy0N++N/XkkuP07Ht8U4nV1AW9ryRXIdHhARl/9tqbXGK4iV4wHMpg86Sf
YILhUPU1IQ5oNxarz0g4EsABFgbC5QcKWOjqqhya1yO6MHrNQZinOtIShr4lUxOUk0eXEDf4QrOx
Txvqm/R8fdIT69jkusIfIzOJd4MJqtMS7cJSaH7AuozhNjp+ryae1p6JdUQmXK8S3cxKqgZJhbw+
KqP51/v9QYixm/xw6N9XAdh46t9eQjd2vv6aNhhU7JEfAWAtnI0wVtgWjEm4BVr4Q7j18RZlYwv3
fj/Vbqa3w1rFFAs5EyJqGT6ZO8q2WLF9wocQd7ZBfk7xOJ86KBhpTvHX2J84bL0Xx02pCOO5ZkGp
SVK0MO/eBzCPGKfqBIYRGYrx5OU3oBTBkIBe0JjhfVkMKZAJsT4MA9puJ8tlireN8a2Fa1q3iZ3a
dk28aTjCIG+pAAP4eBhdsx1yFXbEVZnVR743AbbHtfc9qW/STebEEwUvW1szj6AqqVvdycMFDx1u
2cc6rQOD0k1hHhukQtbBQf6LHR+MurbwCT3tkjTwig63zUapWVLdGZXtc3FGVeeBuYwjfY72qPfO
I32JFhSpXCdvUw71zcWSJworRAEHruAQBXb4guAyDDDUx5ZdKO5AsSVYNIHrDgefBIhmhmgb0h3N
NEltQhNOvE9GDTNCA5X9tYNu/Yb+4vHf8FwQBkioDUYrayM7/tvTZ7vPd+Px315sv3iM//Y5/v4k
jBGXkVxkoCt2XoOa36l9XXvBfiRd2Lutlf4kXoHqvRpcg9HaHYzGs+krELtkGKxnVfzvc/rvC/rv
l/Tfr+i/X/NDRPTfHfrvbhWgwL9P6esZ/fe5EIcTNJFUcLRDeoKTTZ/WqIfYkHFtdgfDB2GlUFba
JyMsDQ5AuB589NE44CmDXja6HYQUjwgWrBTUDWadLYwDokOvicEU8aUZFTLw3wDXUuaLSlU0GslC
8kL2fHC0JcSQ/HYc+Uv1AVTpNazo4yHepBF5E8jDlPoVCN7IvJoNERFcyKmgbxjoTQV+q6o4eTix
wFRPfZvKsR56d/sKdYBBGwQqIgg+2YRRZmEpSM6C4+YZrDdgPcO3W7DTh63zNi6LDk/ORB3qn9bP
zluNi6P6mTi9ODs96TShc6/wkczj+nfNV6Vw0usPJrCKesW/XpWmwbgbpUZfr0rvTuvnb82i4w/X
uHrgol+U5e/K1qvTeuO7+psmlRgOLlUB/hnLl/OXKhN9muUQjcvZYNjnYrVaybvFC67wu3GAaL1c
/+KLn/638xZfG+jAovzPtV++KGNGt9MEGtTPT84q67hz2OuXWu3OOQbgh57In69KGKgMjKZueEMX
XCQqKq0iNnti81aA7jRLnp6dvDmrHzsKm6XYUeAqJFvvvm3WD5pnVEIlIRKwQER7mDZDME8yY1en
dkdgvFZK7ZOz4/pRN+rWHszBTfv7pHNuJcg6sFCM1YqlYD07iYYBcBjASmuKNKSEV6WbIJyayfgN
/DWToy/HtXTQAoiNk+PjkzZ1inmpsmXoM1fqYFSqN45OGoDz8TOqGHFmZcvroUd9WLt9RnwhP7u3
z7p9DCwVL651Zc3rMSNp5anLO+BUILlx0j5svbkAQh00T8HMabYbrWYHj7qufVGOMKyUbj/IwYYW
w+Tg90sMyRx7k8kVkrUbVbBx1Ky3u/gYV0e8LHVOLs4a9IsIGn2eNRsXIAHvml0OIo4eEmh1c+L3
ZpOQHoPCcE3Gd//jwPiCjuCC00gZjK4C65O6sYnSbtdTOf4nv+eoEINjVEiUjaNokNKGMO5fGQlj
M3c2Sm84ytPJpeZ5/Q0Sy59612GpIb969MU0vnh90Drr0FDJ3xXKkWMCyQZzV9SnHBr8Pm++b7UP
T+g3mMdn9S6WqCjORqmRP1+V6sfAYNKzienRp8ojP6jOwi/MgVHnRPgB3/yBvy7OT5CT6Fv+5lTN
ga+iL87BKUKl83RR//47Svj+u1elRgN/Nhr4CzA4RocTJcgPSD88Yiq+4l+QcnpKn6en9DvKl78h
9f17Snj/nn6rCvSLUsym9BflRNDkb0j94Q1NAt9Tsvp4VTpovr4AkdI1zG/MPZSph/R1CkN6ygn0
k9Jg/GUS/HpVajbenuA3/stf3Yb67jZkSluntGXKuU45h5Q3Z01qh37A9/smsAkl0K9XpcMvv8RP
+Ad+a+wPJd6qOtc2pxJjrqPvKDeaw17FkqIyegZ7ZacYJc7h2wXLynhVOjrQSMufkNZ6ffL6W07j
n5SmEvjr/OTkSCbgT52GarhjZNA35La7nAr/wte52ca5bgV5GgUSk9XvVyXIk1TnX69K0gzBJG2R
yB9d4BugNh3P1rlRYlSuXT82AdB3lItkwkNCUT6nRCVAnOMgZFJURto+ZhmZhGVMW4iLmClQ4juQ
AJprKFd/Qc7RBfovJMdHXzrn6OTNiZGFn69KYOsCpTGZf70qKbMT0yITtPO2ycYY/YBvZBn6xh+v
Sudvz0AnGcJqJeh8xTLGJ5isEUU0JUAHN7v1CJz5LXNjmXaeJpHxKfMUDvoD0o+/OyalSz/g2wQe
Qe7yfKABGN+YG6WrFLTVolT19ark9bq9aZd1s/qtU1m36g+VLrWK/nhFRtGVF07B7Gk0olnIkRwv
q2alZKpd8v17N1iVnijtAiyTuaxyhMky8pPzhj6sTEbX3X4wVflGEpf51yyY6tr0wenolZCp8JPT
ZiMjlT5elS4xGDAl8q9XbCobJjKbzt5w4IU6lT9VXm88i3LgQ6UHRoVAl4a1YT+YRDn8/aoULcpe
yZ+cNgmCqZEuPyEvUMs9/gUpHwcqhX69KqFR14UV8tXgEyYbn2z6RyY/LQR0J6MvmSO7qH7L1CAq
HKiSUfeMT8gD81QiJ3/i8s1YRL6KvjDnKtDJ9NNc7HGy+npV0ovVV/yLUrCvUar8ghxcG6gm9YdM
J0e+macSXpVuPcUn/AtSPsA/3TEl8c9XpQA6ZnXKSoCVc/9KZvAvSNGDo8bFvWDkEq4cqBEqoCHB
DCOmDhVXhzcYxNTsoJ0CJe5DXL2oXP0F63g63hBxh/kNml9b2MqXXYrMZEgFy/3H0aB2I3/wyyb4
ezLQP8xE6QXHL/Kpqp8Tjl2vPq1is/GYf0bRgPlLliqVgFf27CVVqVTrXBwett43O3sl5+J1T6Qs
deVK016AVkprrzjE7RhdTV/8dR+3aQALwaHYnzgrPcGyVEiIjS++gLSNivqGiv34ChO9IV+UcQ7G
9Uj9mKZjmo8qwrvdhO5dTfBpYgCxBkX9T4Op2N6PIFLCzr5M8UOvRz9x145++L2bQDyJGpbd52bV
kgKWwpvXo5lQ/gFNnCcEw1WZmssBoVSDWbHROrno7GlfZEn92HM7GdJW4XxEAYZF0v+vEbE3rCIR
yRcmuKJoBCpOyRhEspsqomYjix2csb/ti1eSzYAnKJp299a7v/QrT/bnIbswaO4EMUWplEnUvTTn
jPa2ULidi47tcTF4oyiBFUKJFvdSxXHxtiyvkG4g7llaqjd44H1438PTW5swQU2DYLhXWtuc3IrN
K7FRGwalkjNzciVqkBSKLv63VEIPdwoUmVCKOVW82z3tKgeU/d40mNw/CQVzB30OjFP5FANex5Hn
B1963gh9sn/Cox4Bn5anlxFmI/FP3PN4ov341wGfM57QAfyptcWASAR4H3x0zdf7o0tgEoo+p7en
HqWgNyNwuxqgKkAh+u3LOxV8XJXBcC3cAAh9eoHmnxb3PqkSjHiqfHOszO9nGA9E8xPzsjF5L2Di
R7s9tH2PdIkIUNlHnHYr/ETA3SD0q2LshaGMyh/SWxCqv7xZIPvcC25v+fmXEZDoi3LCN1jZw5nG
Gwyh5MsnrNBZKdAtA+zuJ/HFF5rxYvPQF19cmXPOyw3xMyjjv/3xwz82Kvtat2x8AE2mG8EfL+/9
8En6xAEWeTf0/dHLUUDfbCS8/CepQVA4Pws8nRFuRRPw1tY/qeQQOPjlk8g9B32h46vshEb1/gUW
ibpBINdhQJAJvvhCnr6kglxpXWKJ/ICnJNd1Btgj67V12sjSJNCYQwd1/1nSZSfWVSMgOwo23QjK
LKxKXg3kjzKqC4lJlp6A/hoA5YTy88/CB37B4eNRsclvdFX1hzo7CqzepjVp9ZDaYjuBuArwJ9ib
/8Zy2Py6rb8MN3XsO9JOpitXvQXvTzZjmb8L1qa21r94ta4bi7qJTSa6B+0pJjed0mD8GWZDQgyE
MR3jj4n/8eWTucIxh+f39i3ORZi6JMCC7xjbairIovCPqK0XFPE4ygDkwcT5dyS5CCohWbh3YQlE
Yf2YJFKNwr/k7AQiUNE4lnq/OkK9GEal1gHan7zpQfsyxnbNUatzSts2UJU33ioGxlE5o7ajCisd
MJz+NfNf/hN7N3B1LOJJMLeggwPFiywSXwyktPGnXrtQhmYu4oSf9Qrp++8qsGyAv5/4EZ2/ffHF
9j+AZKCMf4nWcfQQ009E9zKhRmUrYjzBY9sA+pcnLHq3HwZ9wK51AOhwf4jD9gT2tlTC/+4Je4hT
aKsolNhDXbNIpwiK+uE6fElI4DnMl/8c3/X/qSar8hdl2rvDhSBt3m0qT+DmpnzDqiK+2er7H7dG
MzDEdr/5nx1TzmVp+a7yyxgQJem34+l992rw6WWNVamW/ET1tIp6BlzEUHEqrJpbE1PBPyIfqcJb
tJv588/RoBNBSUtdh8hddie++ALJvGVVT1PmWQLxny4RGkFUusyFXbCsOxUmrBIT54zJFUfYM1kK
B0hS5YsvNN/sK+Qlk8sfappABWcnGGioLulxZvCSE1kf7wna6+Yd7z3R+8wC/N/MPgbvNFJ5R8/8
slBF/TA5wE5oJDkgzgKl0hsabzUe0u/Rr7i8EDhYDIgOUMVccirjmhrYHED2GwMB1iWmd4G4TrsW
SDXBnEJ1xJsz/qfzwzH8lw6c0QkMqg7N7cljFWo6lmfR8GjeWJqP63ow16Ud+ST8uQb/d63IHoyd
tYxOpdQ0TW/NjHwhnx67TDChWkvIbCWOmttw+QB5GgcqqRpfD3/+P1DBEapbP/+8/s9o9WF7sXKA
sju+9XPcL2dA10sFS4xkT4AZOaUvU6Rk9XFyJKHqv9R9NKVpMHGjt4nhGqtbf/u/rX9sfPFFtSrJ
bU17NOf98WVUVVm8Zl5iQQ4trm9xAYNucpcFF6tlyVgVq5A5nSKMJ0/s2c+gCtKgv2XRIa5/+pZ+
IRIq5KEuIm5Qy4QADDQWm+OzZP0Y3rF1NtbUmEZANJ5zqyfMCRx8XUdBkQWgMrXgbiBZ2GrJMCds
+eo+nG0EA7JuIaiqRTi6ecRZNEZ3WdZWqQqA0qa6NAqgs4aRkawVX+5odklb90Rzk9XiOukE9blu
FjOKyJ/JzhvljCayRpgP9nm3vIHm3XLCXvxMYolzjX0b4wTgnvs4oFmEHNPyWxdPFqWTilG+fW6x
ZB50jArZxx4jh/iecB0q1ECMLq+9ShslCxE8dW62CTVL5vFIjVKcdqoWKfk9PJfqbi123AtGuuw8
tVVZVwud+MHnrCp2Ojb5cjNkQP9Udg+afZhdeWKsTXh+iCHXbbbfvaSymPAyqrj+T4WX5UYkh/qg
t6d2PqLvyAzRaWubpiGWOG1bIcOcjRVnfinphYxgv+L+0BaJ8sdTWN8p7oJwOJ+oOm0JzEJ/XVcc
qBec+QHmUF0e1IHF9DVq3KCh+hOfpvTaOnd+L+5KVURBnrTQFdbujzAJitynSbfncsZqg07LbFQo
agm4OjECIrHxRPrCshdLeCRlzz6rTGm8B4UHQfaEfXC5RGc/9mLnlzmVa8Xky0iREmikKFiuI8VR
KRjePVtMGUqcQfaSnt0MQibKIj1N6iahSdJazvU94fS02w54BO2QJOHYZCzhIZQ9YZ3BpjTu8xg0
tXkiG1M4J9KU2FpiT7EU22ZMFDEPXpy+PWn/gKuC5OYWL2zlwgLfkuYWebIRanTIDY/dypSFxO4E
LXawamy9rIelOJ+79jqoGTnHIvcLZnlidVpNI8vTVHEVCEk/xaUiorI1lZDnwmZ9a+pJnYeoEaNy
rD3kfmHNPtYUZdTUtDfvSNjzd4KlyQOZwuYZ0kTVIt7Ny9uxauYlg/6VYB4H7hbE0rREjXs+/25c
MxAmx7sYvtQHnX29F2kk+hT0D+5t+wBD+jJD8bentedfV5/WXjyt4B72m/YFP1o/Dcy3trHZKNYd
ADlR28cYmeM+nPq3gm7XiTLOQZ378J0Od1dRQTH8Tz3f7+ONuFr7hJ8Z2nu8tPsgf/H7v/LE2krb
yL7/+3z72dMX8fu/27tPH+//fo6/rQ2xubEpjoO+vycasHr1LjfvBv3pzZ54tk/nZkZTmA4uw81b
KjIaDPdFD5/BGPQ2OcTcntglGBTfgu/rCwo9II5ajWa70xSvj04a33EOhsR5xyoF1lmnR2KntrP1
Bv7drW1vHfGPHSiE5TD4SS9Ak3UahQyjVT2HDKN4f+pW63Hw78Fw6InT2eUQlOvRoOePQOnIthAc
tCTKWHRdZq5X+DAQah1UYXxSRrWBSmhM27gYJ2M48EY9n04FISwKoctQauIHCSO4xMlAeHxROLgy
S4GSw3oyAsvd3V3tlhGuBZPrLSDEluy0vphs3vzVD3BocLGrwRQIR6zXO6LVWRc4OmEVoamLwOoS
sDg5pEvB37XaB1XhD1A5o+qe+GGIF3nlfd+awHA0RnsI64ofHWHL/wpoPPRG1zMMx3ONEaLoXRO6
981Bw0jLeyrcisQf4Si6GaN8AvUGFL4DQzzhA8ERcWSgnqhwCwOUQNkD/6M/xKeEFKnjULBC25+G
PW/s02NEMAXKC9nwOYH5isMhYrlTmLwoozfx1QX4qbMxHJvEFfevFFMkytdEHabEM6bLmb7qzd1p
AHfTEAaTcljZk6n1IUb+ANwAxH2VwLrFQE6XFDYmYhGofIsFEZQcYUzGCfsNnfgapgiJoOCwQw8D
ybGggDyuV6qQqrqHQI6AV6DEPFggbTFoRwwOYYGY8CE1clVj7ngS4MOa9CYUDycqA8lypBiQ8N4Y
+LPHZ+P4PB1CowoBCtklcGJNtK44fNwgvKGnhYbD4E4GwcaMiTJqbGpitCmElqSkRUYbqyrxOmoP
3RAdmMMlMQGDVtObdDRFugzh4rn3HgYSxuoIqg9iRyCANWlxrgKgGqQjAvBRRn889HoyEjAFJ1Ch
qXokhViGMDWry8W95v5YZzVl5YtH7CJQvBFHA0gDAHuDMQXZRV7NQQwFTNPDG4EqHfkWaVyoSdnh
6Qe3whyTDwV/kXHZhDqb/8WZz2jv0QzxBWVqtdEbEvbj4ewa7GZRP22R/iupR2U5Nlv7FDK6b424
bDolCv2DjwtDifHEu771xNjrfSjvVIzYO1G0HR1HZwtVxBgDMFD0jU/jbi+Y4A0CnmtV8DjZBCro
m/Hskwq8hVK2NQsnW+qMOk7hQ66tUNexfmRP6NmPqBvyU4c/0oXwHQejUPSsgy50EQN14YZ1EQN2
YUPTgYQEafNk7B+YBTkQJoWrwI4SZ0m14IhOVAXNg7qCQttVxUz+y1qJou6iaMyip0UAM3Sija5A
80yVKCEEqcg0B9cwZUvoviWxjWIwObKsGFMn37YMlqCrJusi9gdEodhwZ3yxBOYekJorFHodMMkK
xCbKkgmFGRdQlCEN+HAt4ghIgO81iSsnYOzLNR1SSaZZgZkUcOO5ZXrC/eT7DkKXffnLHRqVV7Wb
b6wmoaDdJCQkmsQ0u0kJ32qze/x98+y7DsqagqffFjeeGafmscKt18NT4OENIhATizUTJUghlCyc
MBFxihI1PE5XWAFfN48IqTUZLezi6MhuUhLBQQUnGdYM0kvo8RFRpFAEigeDTMaHPOm8r5TWNOv9
5f87G/Q+9CfeHY6Ykd78SJFgcRgdrw4DrIt2631FmCOP7qRADbwuipEj3++gJlyLikLC1vvh4JJL
x9Jn08GQM+JKYnMlf6xcU/5OYSYAoVdmDlhwFCQ1dJcmUCvDKlIfp+qKNQzZtydnYtuZ1WpDFuhc
0p9kZ3e2ds3JV09zMDODddrgW/vRA4JksQtxi9qF1GdVrY3AGg05spE/7fHugEehS9mAqGG1C3L6
QHMUORBWJRMEHfoYrniqAcLgyUCgpFr/vk11D6EZRWMK3jkJ+rPeVCdN8IEnfBAFRA3DK4GNTdYM
1vXRqJYXQHCJNLrm2eH4onOO9jLaFrBOoIsP1KZHrZbqbdF8X8doinul0lmDaAHkxPv53Vj7P4md
6jb83071l0TR49Zx8xxDvAo8sbP+cdD3g61Pm/Tvz+vVkptT5J8ujrPNh79vr4tf4vCRNM1PvBwA
+N7HwXyoV8NeKqyTsT9qe7c+wDo+Rq1OKOCLCPf+pLxRgwYq81vgqofD3tbhcBBVhoYr3LKraUVO
/tNETeLZwDdiR/eIpi68nrK2S+3ogR/2JgM6aygBnNbftWCWbyp2FgdHR1A9XpkmVlhYRs1HlbG1
SrzCkX/tDaNFIleIvtMWpX/ffb5DQdIcOKjFLXaE7tMSDu/Ayny6WwO0HX2WPBsjmuzzwT1AoXXb
6AP853LiTe7lQEkrOdIHJJ0UdlyOF7nkN6Plghnx0y0w9LeTKGXKivrbTZQyuVSVeuospeRC/T3L
1xGOMYwWNIZDdfQmyT5CPE/rs4mmeJEPAz4CC1rS0XiS+YX40omiLU9CfJUolWRlIb5OlEryLwze
dqJYkieh2E60LoJet9rvTr5rHpRKn2d6PtDxa3F6e41eSnFONHf+rXp6jq19Ul7NnA3U45jacLLX
QoiaYSF1u95wfONZxhqk3fZfPMP3bK3UT1+96FKy+3WcmXwFkJrQb0LJBsy3oOy4zna1yLzU1SIT
jBxYrfcSpVC+Gowh6e9DWIhO1bV3FVVAvk8Cmeqqu7k8BUjxtan90mgaKR+CknSONif9iGw5qRZH
niKRaGHjeCUYAzm2dKYHHVQpilNi+BP0GpQWGUpu4QMgHUVeB+f712vtUw6/b3R85wWsS9qnTXxN
yZVx5nthYLzJhHA2KEep+P3PpQM66mkq9kObYb8/jw4wF5DS28PqHd9uAjK/hBXii68+xIQGtOop
xZ9XzqYnIVTz/jWTgehw+wFjXg/9kuPRti7ULv0ENhoFpl8b4w77PncQIyBL99V4MviIpjftxwMQ
VXxkFx8p+yRe/hdEsjvdjxiHvhl5HOAkVjAavncboSaExG0+WkKMdNFUlAS9VAFzFHGcmE2Ab4Vy
3wCBja+hF045LKtPyaqRYDq4uj/AlqiDjLG7N6/vp/4ZXvemDjFY+dKSRPOa/PYyTdzi2yas4ij0
KlsXEUb+6Hp6g7g4mkBon6aMk05MIbL30e9jDyK01gC27uTa5exKdk6VdAM683tTgjGTT1AH4/3o
a+hfTY3Py2A6DW6NBLIWuB0EtO9EFZ9QKP0kNPlot3E/+r7xCYpgdPG5LWFKFboVpMRcjAafot2o
MFXsS+pFCtxxgZXipdf7YGgJY28p5K1FMgdhqUr33b2+Di6vH4nTjaL1NrnV20hbJX47pIQC0e00
z9k/hXc1qpx2egYzU+mXBGkMfpqSssTe10f3Cl9GN6ua/OPaxnMk78EiA8NoEOKajHVmnz9w5N4N
wpk3lKr0I31gciMYYr/GlNyTHzTSpjXR98fIvfqZRxgvf/r9YNQP7vLjzQjDir911NwQV2Pu+ine
WkkA+ZPpBkNOsDz65OK4CnATBrdGbr3wQxjtGvEuac+f0CatGko6utg+bb8jpmEw0Po7EfpDiiQh
jz4yK0xofSCfoKKqjZNjOlVJftewBku7O38i4USvu0LD9F5N1Cpuh6j4C+LjVLmwpRsFN1ciGMBe
uOHFEaaHuGOkIdcwAMV4gvGapzJvTA4qqXQYCG1u4+4KTiN9flILn0C5nAR3oT+Biab+ulWVphqT
zQhqwTCi0Bbs/I7oQ9EfMEn3jrCa+Hg8SuD43XmTfujuj3ofDHSlPmkkt3okdlXdIwzawVBkTAuN
LXqseD1LL1T0fXbx8E6YCoDRCyYYHASfiGAo0GkmudEazsD+pzE+LjO6rskYI4FPAbuJj+6xMebx
UGLjheJ4gM9qBFdToCWyBIKm+Bv4TsaQjxcwSWty6yhaSkHZ7ptG4ykYDJ3vhNj+tMMHY7Y1X1/3
euJp7ZMRnl1xDNCexAD7edJ5T8wDlnWMyAwF2YReD424R9naoqw3A7Tn9n/+xzCG5XO3mKi/8GHO
p5WKuedFfTluvW+1u4cnZ9SrRA9jL1Wk1NrW1lGcVGBWvT1hWm1/2t6JkepkhHSoyognvZvNE4Hn
CWf8KDkrawqrAlqM4rOPprzrK4xnmfFtEdE4PK6J1kjrfxz3G+8jS48uy1Xx1RESoQGegAuxYEj/
i2A26HkUrA32CoqrOnkg+PwIPnuGnHoNYsYvXek3VehJR3965/uEFQ42V5QdbEQPsfAWlDWkZT6Y
2j3DyJcNJl/mqFGJJLXnjhvXyxo4GLJyynj/nAawotT70SCk57x0cBz0OLAvhY8SoCn6xp++Q0UF
q0OPA+Prt5n8vmU3GxP16TvWMOgT6ZC/OJqwVZ7h/OEidjYrBFw12ennGOlujO9TTc1MfIGpAeZo
WI2vRvCBk2BqYo1rZ3W4aae2zfZjvGW0k2ItD279CXl7QHNXS1Zeh7qCRGyplcVLWDxuwygYY1Wp
plVqHSCBdggqIAytkOPLxnW79nXt6whb7DKT8HQW3uDM7k/oxTqAtJsNydHr73x/LJ2WrdGxfxtM
7hHQUxvltu/3w/fN20uAp/6g1DPV3BufdX/79ITPktGNLx5ndbaCANVimB0OJv5V8Ald4huEXpn2
+/EBPcO1t/OsQnsZMdwjQup2Eavncay4NE+8ogzK5O/bm8bWxcX54eZXcn+DVkMVei+eUGIjdXap
Hq+QcaUkRHxhwptM+YEyLMrvOVJNMIW6QM86GFG9ckUdaqFzKLdMZn0MLGrZJA+DsUbvq8vdFAI9
jxEIkWH5fYn7VmQIqldD9wsognakCPDWiyFMl/cKsTRt0H73SRrLkRaAtGl9PMbjWrAkU2lqTcoi
qFIjRm+OEL1+JPjtd17Yd6QOwpOrKwyXxYnMBiCOdEbnozxzBmAHQ+pvEBGXrtyE+IDXhFiWpnuU
vGeKqO13eORs0POPvZGHj9qlS3r73cHJcZNJJWWlvLMTL8pKKsLGGurdqFmAxYQRGtZuSrPn0O0P
g2kkouWdpylFO7MxnjOXUq0USLpE303AaINeK65VZt4doVaL0GVcdT2XQKYCVQYqdFn4TD8DMu8Y
S7qaDTCDtxMMjssYeiMSmBxI8wFJg83ASvka33KbhX46876ZfgA6G5wLCbvckCSzdMYl2/KgkByy
TbRk5CpXnq1RpSj+Gzpf9IIb4fAzmtEjNUxffjK+loYtN4b4yGY12lHOwcS7o4dKf7GSnb4FzjZ8
TYzFPo3iaWLxLnFkpxqPV3I2xi3zPfEJKHIahHpngV0f5BDBdQWY5SIbwD1tlw3ZOQRaFY+cke5S
fi2JDAHhhfGn/QiI2fY0GFsNa7BG3XujLupww38GSqC2hn+mI0o6YeglT+8TPQIrEaInL82i0j9D
w4ReHjwiNyZ3D9ZuwMeYTgJDikcPseJqG131vSCY9GnyCp20otYv5POueKwGD2QiqkKZtInTJbAc
+aPj+AoPP3DlXdhFD82+Of6bOhQkm/bk2VHeRKeDwWZIdliQtSLfcvIUrUAdwNJAMuxflcOUq7r9
bYez4ZBcHSWWCFJorE4o2e/vQ0MdUEDk4AfU5BzOTNsHy384hNkGlwYU6ANJL1FmWJh4MvL3gYx4
CMSGEt7QC8scIgRPWdLJdT7/4c2GU84BHjOcsmqVT/jZlNWSpVGh3U1JB91Xp+ySPjdJIVWCFOHl
m48acLYfNS2dmXhYcj/JoDApHeI2Cow1/Gwev24eSPEY0T0DUm3C7C6NkUSXQAD9b+U5dwVNyoOJ
pfAjhJO1jIZ/4f4afrP9Ime9FCnoQBfIMQgpbvTgFz0IbAP6vtWuuEYPi5vU87l+pGBO8Y1y0xkv
E2hoUhqjg4nzGkM3/7KNud0e+mSaQuE91bVgGM8ls6d9zSRe8pzgAgNzdj16y1MUKtzrAW6zZY/L
27M37azC83vKVW0Ysa6KDTN3qZ5K582x19vM4c6XHrQYX6BvHWYZYovGm4l3dTqd0LxDwoMJNAkZ
cyR+f5IiOVbzK5hxgz77C2GexbuYjpkZa94zN1Gj+9EeXjDaJCerN+kzW8ojH+RnRAfmpU++ZN5g
4HFlfqZOkXEkGYgmG9aF+hvXNYdBbxYyJ4KlHMDPqfgzWJPSRo7KHgWhHxWO59b7P87CaWM2CYOJ
s8AxINPg2AHOfDXVN8iv6S4Da92AHFivfbSQFdbotUst2hz1uSBtk6jz0K87J0fN82jD+9oiBP6Z
pNDFhhYN7GJfRsW8ODGMYl9V7I36GJvzyL9j9zjFVUAtHY0xuqXa/t1eKXa0hzW4dSSKpgKx64AZ
0p4k2+AJ0LxhmWiAH9sj0litdJrN7+R8Zh21qndwC4bSnybTT9pHP+BxKiPjuP4eH735Ya1cLqt9
oUr5/21X/vKXnco334A6ybUbju9fTiOv4UqPCKxxdBg6tkB6hM8p8A0xQ6ewObzKcwDWEKLVjkMn
D1DEh6p5dtZ9Xe80Rdrfdqxw+6QL/5ycucqWDXh/FtuVWNU3zXbzrNVw1rer7sSrttrv6ketA37R
sd1omjDsqrtpVQ8v2o3z+usjs65d9Wm86vHJwQWUPzqpQ/U6cOJBVNeu+ixe9eTivHty2D1uHp+c
/RDrsV31eRrC8m0pq65d9cWcqgetszSEv0xWxYfe6uctpJA6xi0r21W/Sm21jm+hZY3r12lVL86O
5nDTToKdUDUAO553D08u2geZdRP8BFxMhyLnc/FOgqE656B6jqll1GfIUml1n1ZSpZG1QVwcz5qd
mDhux3IPTtpWc7pGTOAwvd08//7k7DscxnjZnXjZi04T8IaefZeAu6t7cRCMnkyNLVB1x0n4pOVw
7yika3O3eFcsOSsQIupXdxB2FYAuwOzaCsaasIhPol8pVS0FY9Wvv8YLW/qXo75NAz1s0l185Xto
EJqHLmK9Q5Hpvq13JHuA/J9enPMofeUqBuzTOmw1QOBO2lzsa1exo9a7ZuOk3W42JLBkMbC/d14k
CieKvfjqOwfEnR1Xq3x25AjfVZZ/7nLvTyUk+T4iPum38/QzXYc5lDuPeEFjylfs0oqKhzhrF+1R
y6tgtlMIEp9auoPmkQOgaHcYeP1+qHY1rUOidI/NVavboQgmsa1Qne840EmHUbu98XAW4v9KeHNm
MhLrjXUw7e0DgGjNbURbueT0pzu1/ehCrvTboCWDO8NRxsj7OLj2psFEnS+wD0zx4Ti5Q4onMo39
zDKu5ir7KYdrpMliEAGhyGvug3/7qjYtCYWIlevczKaweNJtuKGBDVuODorKTuLPqqBDkXKTMusK
iuG0qfKxVKDfda8qjwXC79Hf/pEFQJf7COWEcVBuQ4T4MxV5oOR0EtyXLUwtAAwhFYA+M5UAwcnK
jZ1FPl4CJABokqJgzrnBQ2PHcDbkeqOqvIih739An+Z8EDwOCABanEezFKxjSMxtk1GXlv2E/oGW
1ak4u+XvJ4OpD0X7jgGzms2GMA9n6SjgU6DZPdAnQavSw3k5wzMj6SJFLdRDvHSxCtLx8Vlm/yt6
2j2tZfItJpqk1JhflokHMhgHYTg8YoC47+QySUUADNQ2HdaN1TW7MJsM8zC6xS2q9egkcEUfocSL
2D9O4EcCG9Ck36pzHLYOTeF6tSedJKHaAtR72lXpYqPN/yzN4QbYngtQzzntuXOOnloc0448HkFz
jmvM2l1pvJUlk2Dx7q33YzAhGYmS8GDAvIGjCmony4ISJSKcFILRqYCV8VBMdPjFFCcnZeGyFBbJ
9lNbOw3ClXbd2ffoVHtxGKD19HSDd4zzQchNbdn/5Xq+XJ+zepuK95n/L1iyTnHGKjun5+i2wAT/
wcMxqcBWZii4CKGxmzODtgvNoK550d25QjaFw15wq68OvayXwTa3fhh61ziAZqoGsoZALkJ/Ur+O
z3myzY1Em/r8leQt3IJPRRAKH058NsNBm06RQLKeoyQsQW5ygT3zcX3ER1ew+8SpE06E7ob2BPnt
Was5+rghEhoOJ0jIUdOjayLV5U59fxInUMZ82k6fT+dPf26AqfPp/AnaTcXWCPIHfQ9Nzl7SdKLj
ExsDLoQfuQDhlpsD1DVvX0lY+JUK7TCY9AAQnlRwcWSyAh7ZPA3Gs7E8vIZSkaQS8YjPJdJBBeNs
SJV958L5F9qnwwtUxhLajHOjV6/RrWN5bqSfFn6p4qitIzdh5V87OuPD/yXjf9JT1CttIzP+586X
T5/tfpmI//ni2WP8z8/xt5L4n88e438+xv98jP/5GP/zMf7nY/zP30/8T7J03PE/lUeM3F2wxut5
N6A7QjGiuPRInuRdcH1zT27BmOFBL9D3aYUHlSkpO0+pQUIZIu2x1nGnr3F4rKFaqcZFPEeYUh1Z
UkZBXXfEIR2NJxxYErMTwSiRjg/2hw4IFRxCDwVf4bz18KZtSeinoHBa8j1QJbqg3CALZlPFNXLb
DG8g3clzP77TyWGGtTgMAhikEp2V11t9/p3MOp0EPTsP77TFMvmZnV7ViKcnACakXQPDYO7paWPr
xVffqXueJfFwRFVhvez9O+s2suTLi06zi/+K2N1RZCvcXZWpyEyUXD97fdLm015xEPqY5sVogFLv
DZE2eDbTRuOC4ofIuyFrIJl2NlZq4WHul+LD+c1g9KEBC8feh9cwe/SB0D+Lznm98V33DGydVrvJ
h2Ca582z8k5VdFr/2+w2Tg6a5e1KZW2Nip81OxdH513MKlv5fObQHm0bjTKeYQI4+OxoOdGJClY6
A9aD+mqPFSb3sux1hWtXRWoPq3jdqDGb4JXR+qR3A4szOgZbNu7sKk7LQIwcLljOonu5HB+G+QhV
AJzc8LbP/5Ztf0+cEHpLJDcxXdTkAoW6viHrlCsl81ShtR+tDygXYldV28msKvNXZVUTiQSjGugX
ZNN434owaSpKi7JoHJn8DGoSIIU9U7FNUjCNNVNBZDEmNL8YT0JFJztC+mo4Ed3EwZVxPqNSqWTW
3nXWPp1X7amjGp8mmFfzmaNmrorPHRXRfw+T8LyqLxav+qWTPvq4iNAA3JKva5AHu+LWA3L0EyqA
uaWg9BusVETwTRyqAkyGHfrvLv33Kf33Gf33Of33Bf33S37PW3dvAf1goft3ttHoFqEoIxJQEP/d
lf8+lf8+k/8+l/++kP9+iT2zlYvEbS2hXyR1c51lynliKc+5pBxjbw1+muJacMDi2m1RKid0otzR
S9WL2YpR1iblGNONMmvF+nGuhnMrRkPwF5H82OAbXUsIf0SRggogRq8iSiCOj8lXEW4Ly3oCM5v5
8ouuQZs8J/lyUj1B9jTRy0OmFAFzWbnqROGCoqPru4RHZ/42xEd1dHnRsTqWNJ4NmhS1nuMUK2Q+
J7BasQg5sHMwWD4psog0/zhr7gFwjECq9Z2LXvllSZ+ZWVCWdH2XLOnM34Ys5bXwXaa6OmIj5tq/
LnOdDw8sYq9LM2oF8m8Nhsty1uNY3H62R7mgFR3DKts0W4FGcOCbz6YrZClH1JxzGi3HsfTEsfPc
Q+sY2wzzuNhIiEXs4kqaGbyUFrJgZJjEvyVtlFefuLURH+9bmUGdoRnitF3MuF5cQ7gxrFJENVg3
RvIDjUcHH+uT69XZ3wl1wU1X6JdunD+j5gsYFgkaL3DAs9DApozsHPt98TGItER+0tlqIrrZsqCO
iAC4FESU+9vUDpkSTgde3fJt9ysh3BZRCkp2kmRFxNqBmJufFLrcyQWE2IVnChsmRZbPEicE1qbb
/LtW+UfFNSxpYlmYhvPEME3ulhG5VGn7bQpakWlYy90C7vv5FV3LAToGvxKdkK4OFtQECyuBufMJ
n8OsY/rQH9G/fFliZdohz9SuscAPxgN/RZgUUx65ZnnrmmXGlZFcAxwb4UylspIxyTHp5yNqzP1n
3BBd1ANogHA6AY3837+aim7uzLMntt2ewxg1ks5Dm5xF/YcOYhdyIbrQS65dl96Xd6LpXvUmVUHK
jn2McHMVgus2c5HRcg9XqrPRTdlU0s7xBSTX/hwJcjEZprou4aWM34bUyv4tInS6FwlpUx0vKGYW
WYrIl42JMSEgTxvqflHBiiFmTBaqgbzipCmT9xZ/LprHiJ4mLKlkkq3PXQ3rUo45zwgssKC4GBBc
QmNk/xZEh28f5jV0+ShMUoZinUpIkk2TgvLkoFgRqXLhli5b3MkFhMuJZS4R442HhIzFaJYZ5qLA
cDjHI03UitHOJW1Wt21R02EEFhQ0Xd8lZjrztyBkhjGxCid0kQVwjnWsNUG6pNuiZUK2zWEoKNmJ
QSoi10msHAYT76MsO3E68MzehMk7j1q0mxNTIu6JdgebyTtyjqFLUwILEDrnXpVDKej3VhbTCaq6
SyWovN+CRmhHoQAW0QgFZu3MTSmTJAnBNmhZUK7jlC4i1gmUHAvMpY92JhFMX0jl21gyiVUg7MPE
n3Zl5Ie8Q5McmzTBzUPKRReUneXktJMhp53flJy2fwty2smS087CchqndMHzZA8vp0kEl5XTTpac
psd7SZfT1KFJjk3GUbOHkFN+SEDdW4chndzzk7PyIWMW5fZyU247Y8pt/8am3N+AKLezptz2wlNu
ktL5RdmB0upF2YXgcqLczp5yi4tyxtAkx8YtyvlIudiU215uym1nTLnt39iU+xswjdtZU2574Sk3
SekicvoZplwXgsvKaeaUW9w0zhia5NikyekDTblKL11Mhku4tuz4oinz6n+Sg6tA9QV9XDln5ixP
V2JUis/QS/i7UtBLOzm8kvl6AbdXgbm7kO/LTOBrH/PdX3NG1D2kGRN7AeoXdYPFVQhFmV1Sh1iR
el1KxCrwqEVmC58VK9Cw67p3vjsrrtveK1J8CUZIaL44LxVUfU5OK6L73Bh+vsvgqV1Y7U3w+AaB
g/CLKEojtHR2qOwcKjWbV1KYJU2prmhYl74x7rbglrLd0q22/0xNu6zZlWFwLWpqLW5kPbQjxEJu
BW4QSaTiuiHNZMoylnKYSQ+xqpIm0XLGUIYZ9J8plr9DA2hpOybLglnYdlnCaik0sa3MUlnURils
mzy0VZJqg2RaH3nsjkUGZkFbI6nPjAc5FtRpBgSXXjOyV6zb8h6Rd3t39Usjq/DSxjqZEHubRgVF
30HBIuLvwq0q9AlzemZl6auzKViW5YU4+MXt5L4jm6BZucBzMQVGxzk8aQLrJqWTkpGAOklgC+Fy
QTnaWUE52v9JQTlcF1uKheVQZF6BzGfF12gvHl/DMWBFpN0V1WE0Hldl7Ak160mmXF7sXcE1oD1k
d4pdAf9KGz/SBpW1/FqgUGQN1/zuescp90g6hjJNNyxE+EhLzKVZUmssflO3nXZTt/1ff1N3BRdu
26kXbtuLXbhtL3rhNo6J5Eg1YZHNK++ULnetNoGh4udo8oPGopueLhXgvDzbLnx5du512bThiY1P
mpwXpWhCxFNJkpTw5UPltOeFymk/bKgc8fuNleOgTEKcl4qVk0L6IuKdFqfFYkoZMWb5uT4tOk6C
sWWL6fN8UsxXHhFn3vCljF+a2C9A6QzJVwRKijw/0Ljo2Sqq7DxZRTm/hXk9st4TcZ5NNJNnnVTf
ip50snpe6JyTjYwc69tQX+tc7B5PEiXFHwjaITOuOzsmPTK8XtFrnvkIHad06rmleaRJ8H7UN5vf
9Vui8nHDghyvq5tMr14/keTWZTLZP/50ykLCkASSOfvE17MOibCQZ6LaTfw90Wg5TpiCEpOgVxGh
SeLLXs0Y1i60Tff9AlLlQJudo0mfk9FScsVpUc6SraQYLTI6juFJE7MliBlzEDtmGvUs72KCp2q7
JhuVt9Lpxt4WyhSr6OytQ6BM5BKTjNGrgkIT73MRmUmgJEfZmGYWkogkTpIZ3HPMRnKSMekRe2c5
L1mTdE3j9jlkiHO0YzJRr0cvaD7J2iksjVkr5eh5bKoadHGpxLM4k5q9KMijFj5JFl2QQ22E0jS2
2wYyCGE9GJ6TlgliZnBmRudzMKZ6q3wJxsTqaZyJeb+Wsp2ZfjAX5RVyTjaWvVqAj80+F2VkCyV7
MGcLe8CSSKVq21mKr8ukyFx16yZskrJZTJ1BiCyujjaPh4HXP6U3YRZds1ow3BvIRoEVr2DnH/hw
PkzmQMqx5Wv3q/Cmr6PXxbZ9XRiuRm2nIJdpXSS5PUEhOSBiwhmwcA1dm7lZlE8hffqG7nwiZQhC
dE7zW++j1xx9XPyspgSQcl5T5s7l/kxN/e1ZC2CkGRx2K64zkBGKxc9BxjpQ8CxkGmKqR4sdf4zh
FPGtGisJPsm5NjGcT+9l4u2iaMZRxjQw0QN8DpND1jv1/clyXIkQMtgSsx/Kr5jJzj9O/KtsXlao
pTGz7Nli3Gz2ewF2tnCzFQ51bHGWthFL1cnYSipnK8rMcX9k0dlJ6DlMnkGU+Vq4NfroDQd9DyNk
9xaLmhcH4mJ7u8RvwaOOGyG9vFEn40OY7E5CWhI0KSgwbooVkZkUJF0vIS1q0qQhGXtQKa9tk6RZ
Yj+LB20C/00K1pxRSRuWNPEqQL+0l6QcM4wJ9RofKl9e5BDMPKHDMr8VsUNclhY71aFMwZOUWUL0
TLotKnwWqg8lfjaiKxBARTuHCBLfTngcM6XQOUjpo5RHEucSM4csSlE8DCY9gNifeIu9kWhBcAmg
kf2rGHvbKZZeDK+ECNndKig9jk4XERwXbqux9JyIFVx9xygzx9LLorOT0GkCMJ8oudbbnelkMLpu
9WEYBleDZZY4cUgpS514sZVKAe9HAubnh1/lPZkcoZK+CHIh7VoMOWhQfFGURqGCi6NUnFe2SEpH
NFWETHI7F00uCtrDKlzR+/ONUuYwZSypcpIyfas4Xd4W9fa6QOWUuNX6fq2xWegKEbnnu9PFjihG
3dowz40UtCLTqJRHxhfwSWcNypJSHne+uu7qrlDkE07rxMXfvNNoGmVjDEbSH1YT5zTm/kkuo/qN
YDaaLgDDYjcxiBDNpY5SnOypLFVAIeUZ9bk3tB3aqjWarsI0sMCkaCmrzEo1VEy/rMAcSODq0hPx
ThfXEU6SFNQPblRXZgKkoLj4/J+gmho+FOCU3YHs4UgfjwwBy0O2udN9BKEVssQu6tlJAHL6dhKl
VrzCNIZuYEnJXLG6lNvDLgeOE+ukC8dFgqJOnFQCFXLjpCO8GrHKQjNVsJDCDueNk2qpQ5l03Mwf
nKzRSXXe5CXhXBFDo+BwEtwuPUslAblELFnqwUQs53SlV7quI89ObBOi5ex60aPOqYQpdOY5HeHV
iFYWmhlzFq87kwecnYTLL105xidrgFIPO+el4vwJbDRdiXAl4Li3Jqa/JdEyrEbntoMDWce+Q7Lf
hTceUqhSbOchDdsVzVjpSKZKlTLrHBsODqIVmLLmjkzG0KTvNuQj4FyJakx8b+qfXP64+M66CcIl
R2b+b2N7rzH0wjCvO5YRT5vS4p1LiFyMOgWlzUW7IoLmRM+1I7WopLkRnLu1p8maFLc4wWj/gm6h
yYETGx79mxS1zMFwj0aagOUmXNpWXkLSzvypNxgtJWkmCPeB2ih/xZJmSMHSMhNH03HC1upn4QO2
SSoUO1/rQG8185IbtQxDL1VK4iTSRBcbweWPrsO1GTR3Ez39aO1c+sydds78oQ+cuKQ0GDBSzpdH
BX4NeUg/Ym7j5TpibnWt+BHzZMcLHjF3YLgqGXAiV+x+UIJA8/k/i+YpRM84XD6XPDnWMh+DD4te
aOPKKQeqIOe3YWfFhGTRjbRFov2oTRp6/WM0HwdX1NFZzo1Ad8jReMsL+yP1gLqOkTEXFD88ZvBI
wSNjJjK54louvZazkS0aFzOnY1KT0rQ31fQLKqVqbxXc+tOboN/2bnVcBj3iYJ9OrkMVfxRWlPDJ
G3xmmYkfzobuA6Ku4Y6Pd8YxtEUHaOHIo27NduBfedDDpRSchJGu52SB35W6+29QV8a4pGitaGgX
Ul6xgS+uw+IYZkvKapRYAul8klZMhxmETVVlD6Cx0kY8Zciz9ddig1NQgSUVV/OjN5x5C4deVNVd
6krl/a40ldsw4w2yBcO0rkrNmPRMaBhjIAoql/gwFdErCZTmvd60qDJJIjnv+ad8+sMkW1J10MJK
hmujkwNMzFwqInW0ksOVphgKU7f4E/HRMSNoZOxPpku8rqcgpBwuUtn/AepguXXa6jRCjKquE1DG
oBQ//BQfsoLnnhK4PZR2cKK6GgURI2GGjjBWSmNZg9dKOZRF1kA6RzLj2FRhqi+sNTpLa41Ottbo
PGqNuculRXVHZ47u6CyjOxwDV/BR3s+mO5yorkZ3dJbXHYlVy8fU53uzFUh8ONMUyCKkX1iBnPm3
wUd/SR1iA3Fvipgl/iM1yaJaIEkax8ZMjL6Fd2Zc1C+2NeNEcvWXK9JQzTitn0MNJAlYXBO4dncy
Ry5t6NL3dwrSuPBVhrdeuKSkGxBcYm5kP8q4wSkxuiQE3CZrQel2EL2IaLtwW71cO5FcTqhjRFuF
RGeNk3Og0mS5GFEXEeRj2gpaXIy5fooQc+ajCNusEVHFJcCaoMXF1yZ3QeGNYfUgohtHcGnBjYi1
IrFNGRvH4GSIbG5SFhZYeXZDriHe4QpiufNHJqS0I0hmmRXLcr4lcPZJpDh6aeeRzHILn0py0WKB
s0lOnFd6QsmNaPFQmC7Kla1VLP1IPbOUOTqZwzPn/FIOEs49xQRL5Oannj+eLh4mygSR4vjS+SsW
npwzWvpTyrkie6QIX7xfLq+TSZjibqcE2Qr6nZLorfLouBvBBaNCxWlVjs1h5nCJjfTXU7LGxD0o
Gc6jfPTLHwzqFIM6B+PZOGyOvMuh38fXWlDUF320PA1e8g1zZ8mHMEujgBkFX/1dNOBzetcSAplK
r6JPfmdSs9AL4NnIr1Jc5yHtuP+QwwJNJ6lpjlLwaJ8LOJ7rzjeC84YwTZAXoHHuSyEANwl6UWl2
wXIKs6vgQy0xi8liGmZJUUzpbFFJzCJFIUHMxHw1dukcZNNO0KcIXhoBldw55CzX6MwZnlQpK0DA
jCeQQLAe7K8kNsT5jS884AJvKMYUXF5czUY9sn6niLegbg0wIYTyD/fHKgLH9/1p97jeIIVxelZ/
c1zvds7PLhrn3fpR60279KfxxLu+9URAlkgovOHgevTy1uu9+OqDopsin2KZcDqZgekE+ocj6B9C
H0P5/hoeEtx5Qa9X7JsJyLrQAKdBRXw3GU2TkX83jhLla4uY0eefUR5YTN/T68iYG/pTfirZAqjf
c0Sw/OpiAnZURrYQL8cF6uHhYEjGkxdewa8onx6CxafgCc07/JrgV6yEzozSTycDevhLjPFHlP7W
G/WHfvOjz7k+/ohyL86O2sF0cEXNzSbDEX1w/rdnrTfD4NIbnmFkb+8jX32M6oKGUus9ce1PP7IX
wqCozg117i/CGtd917i3/WnY88b+AiNPBy+gTxIl6FCUcxqEKmsMP628M/9fMxgwJDzmT/gTKR+V
yWaBdsrAJJ8DdbOG8UIikAJ/RTnmu25i5l0bI2i9giVu/VsPf1u58iEizLyCn3aefNCFMvG3SRL7
vQv5gAZrntAiePTiABJdfiVKyHjtqgh+xoctYkUePJMbjSGMismBjJfL4sx2Cmeq3EQEbDHQKRhX
211Sxui1yl5bjGnHMhVX+DmhTwtvRzhG7EJIydFd/8w6YUole9TiMaCwBsWVSrbhDGljRB4YhNyU
wbKuMB1iNr366gpSnW04ghBgYIS08rHr1KJH3wF9m1xs3SwFJsbvZCn7+h3yOibEy+lLMDjO8Cue
E50ylwVkQlTOOG8Kqph/W6NibCzhgCiXt8W9ZpnQVSax3wwdwpRkSXsrS9x4obOM9pxjCb5/lKBe
zAWoaChdjEkZNF0Z2A1ffRvynup0GEPOmHLk0gx1pm9qCrcRCBpj7KqH85I17+wvZ+NMfOhR3MQh
GGx79ssMtiJ+/jmWdNJ5X3loU/LY64EN6U1BC91uhmO/B8LVU1blNe5LgF69unpoK3JLIgONgoBP
7mF0QOJFcCWmYOsyOjU2fQehmPDSStwNhkNx6YsezHV+X9zd+COjvICSOFH5/RpZzMpGRjBkJsMQ
TaAwmDJQGcqDfWRWB3tsGGI6ptlGKFVHOFgFsjo3sylYiSOpz4VioCehmIU+Ir7AYhp4AOjRRHIk
F9BG5ooXzRbzL+SVtmi14E4tmI0RTfNGfOCn53lVby0bY9SKLeRtQhdavDuGIf+C3YVVVYBFGQ1A
VTIj/w4jkkjsiyzgywrDc+C5Sjr6ZRMBrBehgF8mEsl1vhyE+FI/RuIEm1VtAeNvmwUKDKljTN0r
/hWMgPkWeTG66edOlB6WS5hyWEHF16Z11XHruKm4EPOsN72lLyBEDTgyFOE0QPNm4gMjCAQASgz1
u0ceAjSjTDXXvx95twOseQ/wECRY1f6eADNV9ILbMdS6HAwH03tQt9Mb8f+dDXofpgM8Cvv6tANc
FEymfh9bQRYIUel6YIXf+BNx5yFE6UoHnMCKEbdQk9BJ4BGMhvfwHwGzHqnVW+9eACDsVqiaERE8
cnpMULAU3TY3Qde6yUZPD8AajhUxKtISrCY/xDqAcoFWLaw+3wHI7g6281LskJMwvjp11UWgnRa9
qwl/oYaEpgxjvbWhAEikESHBK3OiEoBhuzqUNagO2Bl/EjyEQIQbKl4VtMKjlMt7ouLmIA4PKb00
vF/iI02d3S+ddEDWIY9WHon8squS2EAGYD1zwZS6GnrXGEbJPT9qmYdWmuc0rM1O46x1et46gZU4
zCFi3TnkZwfrWZOro0ZykjULaSWx2OuIltw6ZihnU7F5yo1zofnK2Uz+GWs+llY/l5ydnK1VSnLO
IUb+Y4xhSL4F7Wu41AC+Rb8oQ0XsFPUxERMpZYjK8dlrPiEzxts9l80HGT3oiDs/aXKLRFI9ZQm3
+phWjbrpEvkNJek2DdLgpFAjq1knQV5nEASm+EgNsf5JTOaqALImF4kmbf4H2QxWadq2V4u37vet
9sHJ950In5NOo350JCC9ftqSFpNVo3vS2e12ExW6nXuYtm5VDSszvqQ04QmFgjBXlSJqR61ou90e
6PkQ/1fyP039yUisN9ZB/xk7hHJ6hrW+h87BS5jY1UqKeMXZkVQn/oEHYH7iWag+xBZxrxFqiVO5
aBtB4pXXow1InK5Yl4yPYTzkvGOkove8CYiPpsn0k7E/OvdvcXXrW5nAB31ACg8PutINcZMe5lEI
K3kg4DAYXYv+nSwnZ/bjTp5SRx3T5Y1UgBlPGctyuFmGoxJli2gwEtEXzZdyjJxQmOFxER3G1mNi
TP9WnO23cNfIG8KclTDRM+spSx0VXYk045rbfq3sO5nvl4iPtWxpJgYWloyVlDUtOdL5MoYpGfSb
IRXSc3PRbr1fKd9ndlO+2SsJtZZN2fjix66oSWvDlONMTjbKEhtXM5y1CRq54HAn0FO/qnxmacN7
J++r5R0GSTsmfTQ4PO++pSH5w3/L32jsjcE6Cqdb9GtrPOmNZ72r69rN6trYhr8Xz57hvztfPt82
/4W/Z0+fPf/yDzvbX+4+3X62vfNi9w/bO8+fP939g9heHQrpf7NwCqpS/OEGGGFyn15uXv7v9A8Y
f3NjUxwHfVggN/785330BG7eDfrTmz3xbB8mL9yf2ITEcPOWCo0Gw33R27z0wkFvM7i6Cv3pntgl
KCA4AI88oOJ1802rLY5ajWa70xSvj04a3wnto5VTyJ44Pj0SO7WdrTfw725te+uIf+zIdTs6OcE2
pdmQXaewGMddZfJzhjM+iggLcVx1Hwf/HgyHnjidXQ4HPXE06PkjMKplWwgOWhJlLLouM9cr++I+
mOmVOS63ozbYa4/rcvQaDAf40h+5DMjfCmAklJr4QcIILnELRnhQYXyvfL0KEW+K9W6m0/He1tbd
3V3tlhGuBZPrLSDElux0J7ia3mH/+gPcerqc4fp1BuMwscABlmaBAL29Yr3eEa3OusDRwdeTNsBE
O397cnEuvq+fndXb5z+Ik0NRb/8gvoOpqCr8Afk1/E/jiR8CiSdigD1FB3PH9832EBY6gjFJe9WH
3ugaN23FdQBroBHGL5kMrm+mIfk7hoPbwdTj6UXjj3AU3YxRPoF6g5E3FA1gMuwbuajlpCJOwUQm
5X82G6GnRpTbndOziglAzkbiwP/oD3GbR5E/Dpn8QQpwI7i9nY0GPYllI5iANU4f5JvHdimDd+DI
jTB1Nobj1YBBp+6LcqMidr7++qvNXVBwilsSlWpgLw7FGRPszA/9yUcgvOxTA9iexhZWvmFlT6Yq
AxOWnMP7KoF1ywdy46WPDG3yDlS+xYIISg49Jr9pX8CCeeRPADu39ICAw9ij3TmREgSCug4riWCi
uodAjoCJoMQ8WCCGMWhHDA5hgfzc3Qx6N6LnhcyB40nwcRDSOMgxRS0heZE0BlLfGwPj9ohLIt8Y
VwhQ+i6BRWuidUUCfzcIb1BvoIPojsQ+oIyJ9mJZ1ERPHkJLUtIio41VlYQA1YpuiLyIwNsBAYNW
05t0NEVKDuGCUkaW5eoIqg/ySCCAP/v+EDe7r+OkIwIQShMfVhA9ou0tu0CxKB406OktIPZ3GtXx
3MhgEolArLOasv2AukxY+Io34mgAaQBgbzAeAOcSr+YghgKm6eGN0L3qW6RxoSZlh+elZvvANSsp
O3yEBuQoHE+6bAd1u129TI0l6+LKFlfl9HdkslO5o1b7Iiolv1QZmXp61q0fdlvt5vkLsbPN7lVY
1QkvFDrdOKTW7Y6DO38y7hE+M2oGJoDuUev8/KjZhc626m0NHDJet97IVFzh7VgNv/7hvNnpnjb5
F2U7cztvT87Ohdh157ba5wj6WWrui2dCfOXOPTppv0mve3h0Uj9PzT04uXh91EyD/P3J2UE65APO
/somR+vcokYMtMqV1BA7L5zZkhzi6W5aNtJDvHjmzJYESastKZKWLUmSBlzSBGun9hsweIO+/6fp
fZdF3G1A/xQI8TydArKMm4RIBAXEDYPoIIu4SzApuIi7FaRG1IolkHgYontyqId615mrRvqZM1eN
pDtXscFXzlw1zO66apTddU9PAHbzLKWuYoFnKYrAJEqKvB8YZZ6SJ9vyZnjD8Y1XicDHlRMqmUhv
RerJrPAiDb1fWU+l5K5AT6Xk/ub1VEr2avRUnA1+y3rKXWLVeurFw+kptzZ5eD3lzlUs8NV8PfU0
Q3S4iENLDTwY2+6jmnpUU49q6lFN/WbV1KevXnQfFdWjonpUVI+K6jetqG57L77a3t5mTVXMLfXo
k/qd6KZHn9TvxyflzlUjmVqX2MCdq4bZnatG2Z2rdJM7V7HA7oP5pMKxN+kZumktTTWtPaqmR9X0
qJoeVDU9usstR9RTWOIttL57VE2PqulRNf1mVJM7N59qcuf+2qrpdjAO7aP2x63TTvO1cUIibi6l
L/1isAnSkXlhIL9fi68S+HSEeP1i9GEU3I0EAhR4tsIbjfwwrK27Tlo8qslHNfmoJh8tuNUeeJjc
Phpwj5rpUTP9zjXTf54BdzMee4t45MXjQdFH7fSonX5T2uk/z24Kn369/SluOeVcTUYVHo82/F40
1ePRhsejDb/y0YYcZxvSNNViiuo3qZoejahHI+q/04j6j1jiYazCuPe7cXohPCPu1Xop7v5ee1t/
11Rj3X4jQ8AmuvnypSGHVIVKNA9kgY4O2hOrzyROr46N4v86iVuS7ZMuXu7u7mx3Oxenp8ADEbVs
nbm2llCjjpLMRnZRSnOURaaKQYUkd8EXz5IlDdG31WysKJM8UZI4L1aU0hxlmf52WU5zFEamicHF
JBdYR1FKMwbB1Fhc1ExJliNq2wVjA2BoJ7ucRX1LhyXKmbQ3dZld0Ka8pdHsgjG625rNLhonu6nj
7JIZhCSZThCTUlMomqwRJTuJlqygElNo7Kwgk93ETtbQqSlUT9aIktPIz/rPMQYptbTOTAwGV9A1
7LmHxs5OSpZULGsmJEtpRrRSnNAka9tJyZIRy9pJyZIGy8bSkmXl/GWVlWnJwpq/rRSXtrYHIJmc
pogcdQ6SlTDFVcmVbkZ8Ss40sZBQ9oX//8i4UPH4Tz9OBqsM/UR/mfGfdrZ3nz9/EYv/9Oz59s5j
/KfP8WfHf1ow+tOzBaM/tVcY/SmKFWQFnTHaWzj8E8KIRYBadfin9mP4Jzv8k0EcoGbfXyjUk/ic
sZ7+w8M8icc4T58zzlP7Mc5TWpyn9tJxnlb9Ag22iu9+6fB0LRXyd9WvzBhBqr49a3XfahuYvyBz
1BvOQPmtgyFHzxfUbtbzBomlKKhRkYcj1VmrOfr4AKTZ4vkB+62YhduKYjDXzGDgMpQzl9Fjthb7
3k8A9iKwYD2OYlA5mHoMyIaEuv+QJBUnMN14D/JI5lbJYrUD+kmPJpb90ceq6OHPI3ybaFIVl7Mr
+s+RP6pgFPJyubyBxSqVzW+MmhWuGoPXDcYZ4Co2HoegIg0sRt6tn2hRlzHa02nUGlWLQT6/mQR3
XCG4/DEBlLINgPRNwLC0C1bbv9Ok+ve/q0I9lu6EDIXjwCFJkcasHmtKvzx20uvh+wd9AhtvI1HK
aCyRB62mtsIRoi/97FZUKVcrKi+rlcbQ9ybZTVARF3zKcAAHcuoXQLkaPh8ch2+WMqCbyTQoWDfW
wMEgHINBEmvk2tVKvKgpGLEsau3a0dwbf5qnKbOY0YyZnNpEx9mEm3AddzsdVztO8rXCDkglP1vI
9T1QAol2zGJGO2YytUOVkywQwa+s2cMuQborvItJMj4a2IL1lDfBhxeSPCRr2Rykset+9LpDWMul
AUxBou5AYh4K9TQUvMnEu09HIM5qXNHQvC4daZezuc3ISNOarbAlp9eTK92IRNHBB1Fhiw+iZNWO
ApHs1bHstkVYnByqIhxcu/qnatidU6mmvo7AxNrFpz24QoINo6xKSpV3BmHmsKFRycA2SrUY0QUw
DYf6IjjUU3GQnOjGIAWF10EAan6UQUBZIq0PMnshcqq6zh7JzIWJK+svRGNVdx5iC1H8fupnkRuy
U7sEeYsRGiu6OwM5i5MYKi9GX6yYic8ilG3cKFvH2Shmp/UE8xaiLFV09gRzFqYsVl6IslQxE59F
KNu5CSbJuT6Wn9YXylyIuFzT2RvKWpi8VHsh+nLNbJQWoTAsdzPoC7lpXYGshWiL9ZzdgIyF6Qp1
F6Iq1stCZhGKHgWj6wySYnZaNzBvIaJSRWdHMGdhsmLlhehKFTPxWYSyh8PAy+JWyk/rC2UuRFyu
6ewNZS1MXqq9EH25ZjZKi1D4IJhdDrOsBC6Q1iHOXYjIsqqzS5y3MJm5+kJ0llXnYJWf0rDSOBz4
w0ILFlnBXq/IxFzLFVXcIMCVhJnWnKOxaC2mKqc0Y1j2OVtTln6y0cjkzdm2tHHzNow2r6NVtgXz
NamMv5xNkjGYbFIaSfma1FZRzjbZSko2qgyHfK1KSyFnm2g5ODh2lL89NY/mbJDm1WSLcr7J16Se
YHK2yRNOslGlg/O1GindnM1KJZxsV6uk7IY7qQqhKj7Sy3wO32BcL3TS9IKCkdJoqnqY13ZSS3Tm
aIl5mDiVxVw0bJ3RydIZcxBwq455CMQ0SCdLg8xBIEWRzMMgrk86mfpkDg5OtTIPA1u7dDK0y5zW
3UpmXvMxXdPJ0jVzEEhROfMwiGueTqbmmYNDmgKah0RCD3Wy9VAKGq2wM7uk7UPlNU7bN9DF7H0D
nZy6b4DPNuPBpl5xf7Fdz1a6dl5u37FZzWlrmwWSVq2ZW2hbI1E5ZteaeYU3OeIAXHsduTGLW9xx
zIrsfcTrZ3meHeWye2l7oRfrbIo32lFk6UGxfdNLoZs1RElP9WIjleaxjhea0+nIe71gjx1e7Hj+
8kMT+bQXxzJzUGwP90IjkurpjhfK7qvh9V6sry7vdzx/6RExfOGLY5k1IjHP+EIjku4hT5TK7q3p
LV+su06veaLA0sNi+tCXQDRrYOIe9YVGJs2zHiuT3dnIy75YVx3e9lj20uMR+d4XRjFrLGxP/EIj
keqRjxfK7qjhnV+spy4vfTx/6eEwfPaLY5k1IDEP/kIjku7JT5TK7q3p1V+su07vfqLA0sNi+vqX
QDRrYOKe/4VGJmMHIFksu8vWbsBifXbvCiRLLD081h7BMrhmDVBixyDv2S0GUnjnwKrmWrkW3EUw
KllIZPgrjSqpCJjNp7tKjQqWC7EQDs6dhmR+cYy0K7EYOon9h1hmYUQil2IhRJK7ErHMwogYrsVC
mDj2KuK5hXHRLsZCmCR2MOy8wlhErsZCaCT3NWKZhRExXI6FMHHsdsRzC+Niuh4LIePaA0lk50Cn
M1etZXhB3dqtM0+7pbtj8ym5fBg590ty6bp8+KWovJzIJXZR5mu+XGilKcB8aCX3VubrwVxoparD
fHg5dlxyaMVcmKUox3x4JfZh5urIXDilqcp8SCV3Z+ZrzFxopSrOfHg59mxy6M9cmKWr0XyouXZy
8mjTFOTa/l1nOhmoQcQr3EEfzMqh43aZLmvfc+A0atKq7ppNsOSRP7qe3jCIkOE5J5CobHzuiHKo
VQkkrT1UBmG+5qioqzXKyGhMk+Hi/FBScno1h4pQ1EVISGZaKgBp/YKCRUipi7v6pzPzEBQKF6Cp
Kp3SbB7K9ryhN6njQoxhDAnVqvCH/q0/mnYG13idmyIDNDnJeUvHgBMjfJRBmOSB7yBOBMUcF1pA
OskTLx+jUDybt0wJWmbjCsX8zetOpSGgCqSjEF2CSh0muo8UJ2TGbarkOBkZrnFyN5B2vyr/QCXK
u25b5R0oo7TE0GidohL4n+YgoXqWhoXMj9BQYJMTUx5sMualTKSc+QmkUualM/96EE79SdvDOB3R
PWjl+KiP+iCWdQbEwTxOJ0Gv7hzDGDADx1hO3L2S2UoM44vRJBXnBEaJwgZOibwIq9Rp53ToTa+C
ya2pkkk+QDhGMCXTp/olmTh1YlLAXLOTyjM09rx20qYRBSoxlxTA2Q3MNdVYBSzssxB/yHgCDxnH
QgZf+NFDV6sH1lkjuvO/n5LrSKe78RgNxpHHsu3IYHrvayS+tYM1iJ9Kax+DQX9jbSLD9Wzvx1N2
Eim7iZSnkOLuyMZaeeMwikvA7W8I4okfB6OpIHmiQBI94IYN4VUkdKgoYw+4K6UTyAGEwgzkhMN4
44EoE6/LiquPUZvQkiPYgKtJAzdH4IC8NWQcgLTiP17T7XOoYd/sd9OARtOiWvKmvrumbCeqi4Sw
797nrAj1OkXqKaxpYH68DALsrH1LPrOzVn2FeXQfvji3UJnLqqjVak6Q75aAKXdpRM8Jub4EZKj4
Dif9DYadLsXxS+5zOSkaE/PG+pwxScOYRxmKMybRwcLlhNr+tKgbXVmZi3TKyEcQUoc+AcI50BGg
1JFOAIqNqxqMCJR2dBbrXCqgBfuYCm+Jrt5PfRsiuU2L9tMFZeFOuoAt3kNkVwsce2AL9tAJZdEe
OoEt3sMQnbMWPOnMLdjHFDiL9jIF3OL9ZI1mXx0u2kcHjEX75wC1eN+GwejagsYu5oK9c0JZtH9O
YIv38Aq9zxY86a0u2McUOIv2MgXc4v3skyfbgqh83wV7mgpp0b6mAlxWJs07pA9mZEQ3R3Phak6Y
iWugBSDwbGTf58xfXap6+25m/upKh8buWeYHEBuf3BrT1AD2/cf81ZVoxe4y5geg+TV+LTE3iGix
VIR1VELPAaKoKUgs6IZUxNIiPnSCKWTOED86wRQzGZgxnYCKzMr0rwtIodmP+NQJptgMwwzrBFRQ
g0vOta12+3ZZYTWZc7VnHWx+6DWf2djqvACOS2SrdQY47oKtyidgLtFcV72WJtKcBlZGqzntrJRk
0YIvce1qBfRKh75CYqU3skpKGQvHxHWo5SmVAX11lMpoZJWUMhefyWtKy9MqE/7qqJXZzCrpFS1m
45eHlqdVKuzV0Sm1iVXSyFgQJ671LE+lDOiro1NGI6uklLmoTl63WZ5WmfBXR63MZlZJL2th7rgE
szzF5rSwOprNaWj1Oit5C+UhPRDWeewFexLzTLgOVC8FWXssEqehlwEbeTISp5mXAWt4OJKnkZcB
7OSOJeazmEckcRp4GbCGpyR5mncZwKYHxXEYdwnQ0QJ5FSKR4nFZoWikeGJWJSIpHppViUqK52Zl
EpPm0VmR7Lg9PasSoRQP0MokKc0ztDqBinmMUo4myXMM6iy7uy2evH6UB4TSNKJ5Rj0nzhIHPq9g
tmLClMfYFgGZp9N09Dyz3yiEc/ptHChfouvUUAzsEr03zqlYx71TDvbgjzTDRdIgbiMlT23nOJVi
dNJ17HouhOTxmzzdSnV1WtNE1DfHQefcmKUcUV5gh2FhMK7JL3H0t7hRi1wR0cwG7zjHW7CB7ANQ
B3RuNvP0U9ZRTyYO8zHNTYN/++ISn3rKqSiio8BFtEVcgmR6P0vsYwd4i8p+rElzpvyFngUrbWys
9JgtwmMko4fBROsgXHE7JTzNqx4/80ezW9lo9BgZnqf9lo6yy9O0eLjZTtpJJu0mk55GSYfmC16c
pN/gMj7lq1mc4nraKp5lvEcVz1JPScn0+CNQnOp6sIlz3sTePuLU+ItInBp/v0i3mJWkg1Y4svg+
g0Yk9vyOatR+LEeXVltMUWJ0qiAlLYaLnWcikzjg5gLoiFiXUSQFvLwHnJKeDtiKdBbPVdd4U9JT
odrRuuK5+g5uWkYq3FiwqXh2a+QE2xplAm2NMkCqO7Ap6alA7cg/8Vx9gTUtIxVuLHBNPDu6fZqa
kwo6HnJFC4j0R1lCo+/r2ykJLo/HCbdTbf5KxNqOYTByJNrjkwgqbSfHqdNJ9MMRJjmWYfUjHlDY
To31o+PqRzwerp0a60cyZqzWp1ZcV91rew/dZgszLzPHwTDxEnFmdOyzpjeRqf5SCmY2mFCFjtx5
TaWoxfhOX3o76SrSVSqrHYe6dGXPaSlVdcb2mdIbSlWjjkJZjSRVqiN3TjNp6jWxuZHeUIaqdRbL
asqldp35cxpLVcHWxoBDxJPq2B29xJkdV82OOB6uvKSaTka0cGUlVLYrsoMr06G+nb1Pjd3izI4r
9NTepwQScWXGVXxq71PiWrgy4723Aj8Y5LJjM8Qy9OXLGAwZ8yBW2gpKkMxzALPv8UdVXFfpXbnm
PfeYnZ+E6rz37co1rj5rymZlOy4lc4bzZrBcGUWOAgd9zVu7MULG78WWfkmsMPedb5z/gi+aGw+d
w0I1/aXzKAcbf4tpK75Zu1X6w2/ubzT2xoOpH0636Bf8d8Jv2NduVtbGNvy9ePYM/9358vm2+S/8
Pf3y6Ytnf9jZ/nL36faz7Z0Xu3/Y3nn+5bPdP4jtlWGQ8TeDFe9EiD/cwPBP7tPLzcv/nf4Bu29u
bIrjoO/vica+mHqXm3eD/vRmTzzbp/AHo+kmJIabt1RkNBjui97mpRcOepvB1VXoT6EkwSCBwcvj
jWB8Pxlc30zF/0/sbm8/q4r6eDz0If12PJvii+6tUa8mvFFfnN/40Pa/B8OhJw6D2ahP4lwTCKY+
HAoCEwp1obqG6fi/M78/wMvxlzNyaiGoWegDviIMZpOeTymXg5E3uReoOsKquBtMb0QwoX+D2RSh
QJcGV4MetYkhH3wBCuV2MJ36fTGeBB8HffgxvfGm8B8f4AyHwd0Ad58CUBXs2YJKBAnIoHDbqcXQ
C0VwpfDC2EPiFpgO+jT1AF+E7F0GHzFLkg2BjAKY1fwqZA9CQWcuAIbZ7qgfQwpahAUOSO6EqLSb
xAJaM0iisICO9meA2QMgIrh/CKYf9GY4hXhqvLZgKALInIhbD3hi4A3DiOY0VgjV7AB162lNtP0B
1cN8jIBB5HVyWHmdktcrOO4GqyGgiNugmEyHgqMgBhg+BhPsMOMRTEJA+F5c+shwfYQ0DQToBsjw
sRnow20w9QWTFXi3D50D1hVXkMFUDIOr6R1ym8GK4djvIS9CvQEy6QS5cMT8GIaq9/i/87etjuic
HJ5/Xz9rCvh9enbyrnXQPBCvfxD109OjZlUcn/xv6+ioLurtAyjfbJ2Jxkn7/Kz1+uL85Kwj1usd
hNTqrFOJevsH0Xx/etbsdMTJmWgdnx61ABzAP6u3z1vNDpCz3Ti6OGi131QFwBDtk3Nx1DpunTcP
CKWTKjbjqClODsVx86zxFj7rr1tHrfMfqMnD1nkbmzuE9uoI4rR+dt5qXBzVz8TpxdnpSacpsHsH
rU7jqN46bh7UAAdoVzTfNdvnovO2fnQU7+3JGdMn0d/XTcC2/vqoye1Bdw9aZ83GOfYr+tUAIgKW
R1WE0jltNlrwGwjThF7Vz36oIm0AbKf5/72AcpApDurH9TfQyfJ88sAgNS7OmseIPNCkc/G6c946
vzhvijcnJwdE907z7F2r0ezsi6OTDlHuogO9O6if16uybwAFKAcloPjri06LaNhqnzfPzi5Oz1sn
7Yp4e/I9kAgwrUPtAyL2SZv6DIQ5OfsB4CIkpAcNR1V8/7YJWWdIX6JaHcnRAeo1zs1i0CQQ89zo
LMJpN98ctd40240mFjhBQN+3Os0KjF4L8HuDULHx7+vQ8gX1HTkFcOOfLeJExc5VGl7ROhT1g3ct
xF+WB4botCT/EPkabyX1US54Rvg4QDkRO6J87E16NwLmHZx9KqSYWxxxCcVyHITeMFFtV1Xb2Tbr
4SQExvcQtScIOu4NjKfizgfpvfVAlXvh/ah3MwlGwSysCQAXzoZTPS1ohfZx4JFaaZ92CAKXO5yN
eqiBTqcTauTS631IIPbUjVgjmEzAPAfYveCWVgSoiEBbg0q/Qu0YCPJ3yXlma+LDGg9UlNFmmGjr
mW5rxyJCH/vg9VnnAxVBHX70RwN/1MMutXG1oHdJvgelBkufr8oVUllgtI+uoXb79K0XngL1/cn0
3uw4TiCUKb0JRhb0Yep9wCZo1UAUDQYYpQWHAxYZXh9VdPuUlyo6sxYh3T5the+84aDfQksGNKw/
YcSsfj/X/f4y2W/U/bCIEGNvApPClGk7oQHUoxayeufBldhcyZ4kyfxCNbf7tdncmY+zTj+qKAa3
Y155QerlPc44QK9r+EYUkPAbxHO3AU4wXcKBZqT7sZzBaibc9W+9jx6juE5liGXWZUoCyy9FuQ6z
0VDsWswAFNWkhGkQuA/geLzzDFaWR5LydLc7ZWCIG9TpJoahCjRkvDBXJx9CH5B9uIe4CIzyzGF9
54HNgGcIgH3YjrMoB7XRIKT5duTfUXcTPfxKlL+dDe+FNQoXYzAL0O4LxI/IT2xabCordQjW0ChU
sLZw2TmidScge3YB88Jxs/u2q8NJxZJdq1RjgfqTXIViuVFvOAMFsz4a01DVbtZpj1jA3zn2qn7a
EvAPWiGI65XXGwwHYF/5aOT12UyF+sqSAFOsIbQGIzAB8SmqLbSNCN6IKXbj49Y8GG0wtKhSQPjA
eiMNNkZbHOUeBM8jMBFXEiSwlgcY4g6FY6TsJGwZ0QIcCCuNCOBJQPzRxwFoUVZkYBOFoDal+aUF
EFs0W6OK9J+3wZ3/EVmKTDcwbkFH4fBLAFODXtLkNmESCI2OiYqAxfAI06CWJy4nwR22ri3XOC6t
ESoJsJdnQ1hTDqbm+ISz8RhP3WHjOOIjYmN/Gva8sW9gsOld4jjeE75XaFAOZ9eg7ES5fbrZqZ9W
gMj8C6EDhQkYsjOPKfdYAZa1ERjUq4PtOQO1c+eLGw/E0usHY2L1G1+Si2Dg53r7dB3H+mrwibBQ
JKyVJAeaFn/79Kf2z6e/kEheDoFnaH70SFJRhycRIiDYwzIgR56H2g2IHyWDXnv3PfBKcKcUu04+
pcrSGxXLPX3HoFmdIR66gEIZuvhR44gGuP8J9+qRAJNgdn1DKhU0Dh09L1dQtyjgZnIZRADMdXRv
De+pFAFTI+2H2PogvOG1D/zJcI9aMC/96Z3vjxTdlU5HQBzBj4REyuXBybEprYqBjXpSzvxP3i2o
nD6rRG80GAMb4vDOQiVlbIK0u6aiRIENyJEGDDDSkykuXPgkRF+pBQLBqkGxQRDxM06/sFLBk420
lESVMZZrxEuQaEq1hR7Px8ygD0w6mOCsIpYgEr9eItGgj4Pbwb/RGUBuO6loQc++br5ptbvH9cbZ
iQDdhdo0ymy2D1SWEL+Iu5sBIFrermilqrpdHgWjTZj3bgc0EjAZeBUQ65BQlAP3pPGEqCzNQUka
b3jn3QPzT7zxmKnmRfSUo/lkoILMPSHdExVQUCKyA0Eon4wf6q06ZSMPGemq6sd+sgRVVv/uRwd1
6Ixx+xSn2kQtmLTY8wokRJT43BIXFhuz6dVXWNvroa21z3OAnPMxJPBXHPN0v/SLUHD2YweEfpJi
JSfxc8jrvgMDoupIb8+GQ1c67lq40luIiSuDtwdcOYykK0cqkF/sZKM7EcWUQeLoG1kfklAjNDy4
DP7RQXX8DymXfZ2uCQr/xrLk8WH+J5anB44jRyZyJb9ssDIxsn/hGKf7Zlf3tWygzjjjBYTMo6o4
A6EFDLyKTh1YKj0BQX8SWcrM0bQgQZsBTY2OdHRA6Xs5RaJt4BuAPnITSjfdjZTuGkwYy6pAKzPk
iRwXNeQvwvZRdhW3Sky5B97kesbGhXeFJryHMyFgFF7NeIGHWHije/l8DqgBnxY0PPEFI78iNXl8
JqwTOITAM6GTUGyYkFkuJ2jZRwJxB4YlUiApDyT0aFmnAS5HfLchQVb2TaX4Dtbh9fZ5t9Xpvjtp
HZS7HyvYZBl/1Aihly8dDVfcINoXR0d5QKDMpoB4fXJy1Ky3CUoWCBTvFBCt9vnTXYlGFgjSBCkw
Dk4uXh81GUgWjPjTVBYQdJK038wHIo/xu4GcvP622TifD0QGYHQN7vmJg6wkKTWtWlytQ70kLbme
Ujsp1ZLk42qGUkqpmaQZ1zQUVkrNJKG4pqHLDOogt2MtDULxbaG/v5fidsVyf38ngTdG2SF7+4vB
SxADgYO8FgHH/dWmksFrAOj3R01UQ79FakphjRPUG1ZFAbJ+bmqiRl6KmloXAeg//pE6XCkAMI2a
pMKWpOXnpyZNToV6r+HZGhogY3cLMaZIpyZr9mXJ+bmpydN0fhokqGlMXIsQNI2aPNv97+9M0uWi
rSA8c+0BIH8S3E/4ggUhS7v4JRfQxOgYxgFAhq9i3J49Om49TA8G5Bqj3/XoYD9zjooDvwcdHbb3
fm+aSDpiFoHnsjmW1kS4hF8jJ8StNx7DOMHSNtoHkttAkXeNPHHo8IU16QyGkk5IEIrj2QSdpSG6
adcMCPwHq2fzryGMlSmf5oCG9iqltdmIh7efgn/SHi6tjcCOy+pz0uorrclDrTnrYOnSWnt2ewmL
+Zx1eM7B3QDHzF5ak+KWExiXLq1JB03OWsq/vZZGbyFHJhov6GWCwnYTeoTiRduJYRgRqZOktEvJ
oViLlyRC2b2jAYiXk4SeWy5JcUVVF9XMcpKO5kVG8rpsmJudpjtMOYtJcJTLCD3CY97hHpCv69iZ
wYcD4G+gQMsDT2ZjclcOz7RFaerk0cS/GtLev/JJsR+adoYMEHpjgM9LsZoOkWHRCX0NJaqidfI9
+z3dnVAgDFQv75MAJR4MVJQHNb8GSiT42/qlN1n/h/gY0tfOPyo1J4bSyXw7BsrI7Qrx8mWNNtTI
v0eecmh3MgkQaXSgTfx/zfxQ0cCEWg4rkUsNlmzkRLN2reU2D3OHUdH2c+PmdGU/cr85aoSxKlSH
3vdi5y1+NoLZaFoticw/C70NY8gBARfqIDoG3oaveIA3mMmpjCWjMq2QcS9b0KKGKvvG7rKvOjTx
p7PJSB1eQ4iYjFv0BpDO25OLowOk9tXEl9syiiDuKjmQgD7SMEumonOKuPEsT0JEdWqidWV8oluY
dqxHJk8aBZh7Ln2Q3EEwo/Ja4RHqiphEv9G0MObayS7boCbMgxzM3/aZydCfqt1XdaTEPD9ijIt2
98oTKMqxLR3LICzR3l75DsSUpQvm/uGghzufFRHeBLNhnxUJeZQVTmlO5oq1+RTtIpRhfOvQhZ43
9Y1zOxWg0qkYjcdVvf+04XGAgH1bvyKAA99zg1CtjMZgErlqtkYf8UhJ/pokF1jTddooUbFqS6VU
BwlYgEXwIRMDB6B5+oD/YjsZQMXJNWgXvTcEn7m0i9IxMd5J782Bf+XZ59OSncrVZmZHikBYsM9F
uu4+n7YoW4ACWxBagZ7l6lfnc2CSGGF+MtGBDh8Jy4VRkSF2jkrSYNMzGkwivYkPuqMqT0jirI28
XyUT6DoiGm3+sxKNtjKhwzM+hsebkMMhTkXR8SedSudgQnnIKF797mbQu+HDBWECVmsa7XFi0hO1
mxqOgdgDeUyIziLy0U42i2T/eBlZU0dqElpKTxNkVHI1sY3g8JAKqmN5qE81CtxlQktqXmM3OOso
B2953sjjL8Z5F6wf3sym/eBuhIeVwODzplP/dkxkBrsqxKMinj3JDmTECrmtyyaDQi6aS2+8kNa3
eoYlmxsvmPAsCjZ0tDBVE3dV+B/x5NxVHFM2LQDbKYNA9uE5HRbISdzQli/j7C2vVkWbviAccidc
DsDg9tbvDwD14b28sbJNC0wwY6tshIHBLKnCu+IB3pEYe1PgI9zB1q1XxeVM7l5rQ0RO/GgfSaO7
74/5JNoMeKpWwWnePjlS+sk+38G578AyhUHfl2PhsAGEmtRVGec0D+3Hy6Wwlk5V5ZwHhm9U4n4q
27OQ2/nJ6U4WkxlGm64TzDdRsirp1v6mVlEl3doZDcJ4yVTFCcxj5nA4IePoU+Oo3qHN6ovGefdd
86zTOmmLnVI00pJf1ckVabJ1e3xkyBp/rcFoEuZMqWT5cK46Ig482fPVglUNcl+gQUrqgfxOxuHt
UMLYUsGQ8KslD4ASQijD3kjD0gqsSnZrg5S5ljwcvVCeG/GmRlk6uXk3CH1DVugkpUZRnfpTqrTG
5215gcxyKw/0YagqVromUaAkuZGM05S6IRDRHblAUlNdHPks41nTZQRzF1n9JvQnYXyCcTR1RtpK
NxU3lVULB75sQR4PzWhDD5POkOt5pMV1wDPbv/1JUI0G8wkdL5xOgvtoHqLDuThuoHH5QCwfFfL7
5qghiECPGq04QQPiVYjhvfO4zNyuHpqHxj06FKQO9gXaarBWn/pMH8+HDbofEt0OUbXwUKh9PaSF
J5h1h5nBlG0gTzYNptp5gUeGhwPj9oicrLSVZZ1sqomOfaIpVDMczSwg6wD9yhvScSlqwOJynAIj
Xwu7WowT1txHuvJC05A8V2wf5uYrhZe+UY6PXwN7s0xBr9nmoaPkDIOvDCiBksc6IxcGsYQpFFlW
Kwtp22m75l5NOc3qGEJyZsjAq9iapygWTWQX0BmZhJEO0Q0eHVfbmW0Yk1he+kvP4b17BOY32XmQ
JlMXJ7pde25dpGkTmmEnrAAUWzTFJaBin98072ipeVlawrjymAyur/lcJIuyr8uiaWioCpZraG9y
zxeu5NU4PZHjMojtWjFDkz061m/jUJboS8se0DW1t1k0uVS13a4RBGcUiOhSDf/7a9+5/y39mfEf
ujSotd54vNo2MMrDl8+fp8R/2Pny6e6X8fgP29tPH+M/fI4/O/7Dn/9sRYDYzR0BYjeKAMGhRQVt
uYujVqPZ7jTF66OTxnecg3fs5PpxDyT4CAzina038O9ubXvriH/syJt65+qmFt0Ku+Ll7BXe3CDb
aqaNauuK0enscjjoiSO+qWe0h02JMl1vkpnrlX1xH8xIH+KyWN8ZpEbkEXC8rrRB+1PDAfkadHgC
CaUmfpAwgksK6uBRDAV11luWgnU7wrmZTsd7W1t3d3e1W75T+P9v71ib2zZyn61fsUnvMpRix0qc
Nm0cZ8b1I1Eqyx7ZPrdz19HIMaWotR5DSnZ819xvvwWwD+yD9COp2+twp51YJIDFgrvgAguAT6bZ
cFVKYlWN+lDXBzDVD8BAn5wp/4YmJ7nkAFhWAVL7Ma8fHk+OmewnraO3kHmtkvIxfxoysn9odbaX
9VFe+hE2uHQ2OMZNp9xOpinvD2gNVHUEU63AZPAM5eszQyeIKtkBTrRzSKJRJWAN/5h97iRR4mPe
l3gjMBy3lCuICYfSoRiwzubeTi/Sc3hxalEHVDBjVU+Mrel4vJiogh85pFDPphThgHmyB9OMbpBj
0Lixwt7g4dgqJ8lWXTz97rtvMfU2Bv8E08i7JJguq2VCidymtESSYwoq5Z1DUmifcsyWbcpisBBY
MQo2RyTyOEcLtCFYuYw3nWPxJp2kmeTOXSVmiTyDOQB5Y5laKXJFPqwvw1U9PqDSlrNFglxHTK43
j1yb6AGtkTYG3mvvJebL57pkCvYl9YGadKgbQPL2LEtngQM1RAD/GxYxwWNBWNmXmIg3Rfv+UieF
XsHJ34Vi0hHndHJ+BdRCUTpydLkilzHoD9MRGqxgFCIx2Wtxl5GuyOJuL1tfLKBjHRW58JCEnJtn
0sCd67NEJjqq4gIsSbv1vE+1XcZWa1FJF6AGMJTKytDhZH2U2envDdZI9ozKDSAXqZ4bPhvL6DR/
P5qNwFsBk/UGwtDEjDzg8H86SR3RxFhTi4feQDud7dj7B4t9rX5Wq+F/Yg9UvTJi2X7YHvZS8NTq
Km5LhXIvJ/uHve3N7kmr4+RyHPROuq2jnd7RTwc7EMwjf2dyYybtiPdwNlJz08Rtfvirk/T0h5Eq
3/Xkw+vYHXuSDPd1eN3h1ma7LffE51K3x/lwstCR/EPn0mI2w0smZ51S4d+2vv/paMfQpJ/JR0hM
SRIydOvyZ108Es2Pg0GzWRevX4tv64aQ3P8rlQ2+Gche7OAf644gxY+SV7nH+M1cMJIFEjvgwVCj
FFRJYAce0gHaLCBhfHJIuCFm+G+9JkUrrZXRIKELmIZz3G7XuQEkaXe7vVbnH5vt1nZv97izdQTF
ZXry6n533cFfeY317B9siKZ49Eg4F18J+Gc6cFmp37IrTVKvJmobMIW0r7e3t/luvytevZIyltLi
N1odIGOpTNLLmbWbN3A+dNJLDqL9dhxkm65xMLktvMQkbgYmbTpK7Pa6lMhpf+x2eYjXIh0rYKfj
ELifozpxuCSozXxX3uGwUCIhBRfVlYXFxdeFawGkJx62bA0ix5lloBNcnAO4xoHgoMkHeiu183m6
A3c46CI7BwU+uGKgx912B69xwGE6Rz8Hp6mz2L0nFcAdRuDgkwbkkFZwkA4DU9CZq519PTk/8ZqK
eq3+ZhcpVV2Utx+E6xezkxuK4z2o/5Sqw8TpJAE7nwBqnTgAnloZtoqIfGIKB7WFIkdBL/ShjsFC
EknBx3KgyxuYGgLLKkiQvEmRPokQKvO5aNQ1LYav/FCffIUFnLSMTzTxFKJWV9rbIYV73Gn96Dm/
kGlHx9kfeuQuxhdUf0rpe9pJKnrh66Uo7a39vYPNoxaQ1cDF2pUpUkdMt1KlMBGl2WneNU+QdKRt
OFp8naO4OjiGcmEPTg3WEPjjazrA4hAR1DIeCcJBmk3zaIcWyYGI4ZZ0qCAcLBWrCSq2AItBOJju
yyGGaSAcPFdRx/AutZ42OO77JYbjQDi4udzrLfKy/gjCQVpQ+Y4SJIJwkMbpGI8qi5E0hI8GZ2Ul
fSmIAOt8IQ2oUiyA8J73+bR/pgvXxJ83g/CnNASrw0drCrq0EDHEg9SL4A8QAcLHZC/AAswL/Tq0
z/xatDyGZkMZMicK3aK5EIXIQ6Zq4shDX9UMptl7ef0s618WsMwgfBlRuDcLtQ1k5ENcRyG/lkIw
NzDE2eHAJ+FAuMIzl0d5znIFmPACCHfBzgffwumHzwFbsAGE9/jmMXzn8c1L8MkxNQ3yFyw+h/DW
JHgmy1A5hL+c4SA9wHWWs4XwJyyc6AfNmbAqIMdDUkesJUgsPMfgpupgtLhDDeFPLX0EV4DGIHw1
cA1mXoBJYTshMpcrh3CQP/Tza7plED6mimUpkpCBiE0DVWbEqr5gGnAIX1T2WLFIVAZivcY9C+4+
l841G0LaKWIx49EEJroCS4BR9I9xAGPgA/r4p4SPlV8wNMPATNL0DKM5fp1I45VKV3F3FdZ9kjs/
IgC/qJaaOJ6MAKZ/jj4bKkWJHnMoTcfiXC4VqnETYZiFNIYE36E7Fn2xOf84bs5zOmwjuxF3OQQo
zA0gDYD0UtnkMLBE/R0iMceAQVL2uUFUv0Nk5i4wyMZdYNDNlSjLeufGWSabnzNOVwrZt+4FZwQe
HedqSIt5H+xomPfBDohdDMkwx4QhYx0Thoi9VEDCe5LGsWixQ0TmtjCI6LYwiPgrRGSmhUE0/gmD
bK6EBJgvRDsZPAi2YTNdaHPb9KAv1Ne1+th/1/IpMZ+GcZC809fAR6A1EBUBZCa5c6/YAxL6IQ9V
iLPvpQhQXWen9Y2M0JE+mvjmrmiQFvXsfnnZ/lgm745iQTmXRUOHXQNLS67rYaZVxFLoQ505OmTJ
kCF9FfRTZ6OXyn2pcOhM7ce85qurUHBdnGZwtAEKdgsLOWZzi/pHH6v/3zQb/0EP88tHf1wX/9H8
5uu1Z178x/Pnay+q+I/7aFX8RxX/8ReO/6jCP75Y+EcV/VFFf/xFoj9sDIPa9DhxDbaAuMry4Hdf
jdPxNLuCQIoabbJfvqR/dYB2XbwUPflvgn/L/fQo19vpXFW92aA8DPjAvdcX3Gvi7l8T/6+iLkmh
OYHlVfRNSJtIsBP53pUv4sVMu0HkMJdGg+QBXkzqCKM33LpzSc/i2XxNXFrK2YfpWkCLlw5GU8lL
WuphaPqjyey9Lz6wDCQn01PiQf4pksQHEo26BEA3gGQXJkRdEHwoog3J3DrccQW7gSkucOOTgJgW
wg4TgWQ/UWwtFSkW+E8nZHIofDCn/AEo8arUOWmYQIqfTUpF42VEEffpvA+1xE0svDkf7qmo/oLy
9lKqU7oB595L8AkN7jkrqmXycHT2EBHkE4ZD6lVWBUdctM7oqfhpHoKYUR1KDSR7kwxIeFE3zy9W
A1dCKIAllnfSAsE+itV/BXhbmBoaneifLgYSBb7YAb//KSmsvNYE2+lEPBZPf3bx5IJ8L/daicRc
Fg78Ufpx7l2SJLxuocOgm59pGXI49IcMkofbO98fv3mpJgBIVuquv+f/mjyEhNtB3UwgwGGpV2TR
Y7yAmTvGERBqCTsdpbz9FUByji6iAFQuKdMN8BauhwAFwCKLrokaA5eymo7IRmSBmdkq4f0FY4f5
b2nUI4nClSYF/vQbg/nBhsOo2Ax0FHESTeVy0eLQqPgFVXdASuhFwg0yJWNSslrCvwt8/NGW3c0a
z/+Y9IZSod93/sez5tcv1pT9jx4AsP9frDUr+/8+WmX/V/b/X9j+r/I/qvyPygNQeQC+ZP6Hyv5o
OVkeWMpE6xknORptrAacWhWdZ31GLgclb/wxWRqaUHvfIUQ/kxMgdELYu7sWS6WxlKR4mBRwpUWg
vKUOXu6N+79AYSbn0mhiLk0UUQfOXgRIOnZtcHrKkHYDLNY5FCAGUDraouH2KqGUMP3A4LoHjVQ3
tMQi0OwAWVnq5twc3U3a0aAT4smGXmTn7gW5wx2mcwpXpy96D6624btmcNwLx8mT/sUeMAMSJ5+C
G9BMD5FieYid7ALh3JNbis12qb3GAtlSZL23m4cS9qi129rahG8Vizq4pC54fzzQObGDwwHpQTD2
pQ2GC8CQuUHwuLLYsosC6d5erjShPME4A4oPBWdDMTsH0/wGT7shPK4aguJodGETgYXs+X10lChH
Iujce5gXS583LZx4dF+Yerg4ThwbDep3myfqwfyej6RsSilh3EwMwRwT7li6FHcPwUMJ+r/S/rgh
KAYKObqap134gHNDZPBPWxocZcyxOP5EU7GI5RPexGZ5ku0cQO6O+Y6eKzmtFQzzmvvoHIY5WzKN
bz+PAdudyodH3Z3NPWlwHUibK5zKJkyNPT8alR5JrmPKPnfO0lwDyWKIVyBVEpho6OfE5iblNclZ
NEizuwhSKGLIejP6Yri15DCSjUlNs60n/ACrMDtCW3l6zVJ2wvgKBMSXg5obaT+fTu4ml9u+P28t
JieMMSIuxfznTy9bqQczW0rem7o8j9IbTsoM49BW8ZHU+RrHIuLS2tyEZBinHyLJ+1KCVVGDrmgo
m8b0GFFH9CKE/vbSMVa1VDthjJul3mhtlPWjE3ASRIr3ojvZzVKdajibZ56IVEpOAncQc2HXNOBC
4k3I4IKtvSCT51qeupiZQ55zeKj4TqJ0nQMpv9xj0UnkSTgckn3Xbe1MLhp6f6XydnDARIgAXHmG
m0KNF2H8lwxLkhvykN0TmSMIBihx4ohVMjG8faL+9qarLzo3yRAt3CciDFsOYZZoGVOHRUzdKG01
zlR+F6bMRLKFXLu6qiXnq4snNCpbqYtftnQmlpsExVjgKMU9DqlsmN8n5kwZCvCrpNshGZ9Bx0Nj
nJmudyFtqotpU5HJF8u/4rMNn+Xdvk/hxhAXp1olqiI2Z/oWH7Qw5Qm/wBctbspynqjObZ/8Yyi3
kJv7fYyi/p3EsUR/S+NT7U6f04h2EqaXJc4nJHA8d/pwRrS7MBkt6O5uH7vgvTXXxepqcYJbZIC3
L3wbHR3PdEsQzZTJDbopKHoLdWCjtHkqXELVYr13ZLSybAk9lh9nCV5b5LQh7q/EaXzGEmMUFELF
Gk3vgohbmqacZzi0wnKpaoS/Q7HUkvFobuywbjSU4pqr5jndpeJqlFGdpMh4VDTjvJXWao1NoztV
ai1SnZoY49ahH+e5tNjrHXkuKPUaZTy/AeOsQseNi8Vex3qRjuC5ngUMeZyUFpq9Gxssa/TGPBRV
qC1XX4X9E0hU6cQVsfOxIufZ4x+hyeJnqSYa0rNsYzVoPY3lVqD1TFyWzZp4tW7/JAFCNv5HDmgw
Gj4Z//rF+8Akn+fPi/J/mmvP1vz8n2fPqvife2lfCXVSqCM2TvNardXZOgT3WeuJ/H91kWer+jhx
pYUTplZrt75HkDbelmi12lfiLD1dDIfwxcWt3fbmGwD423+A2CexMhyena6JlRNIuF45ST/Os75Y
2VYZ3fKvHgZWwh+sdHN729KBHiWdOXQEsTijcwjEQJ4nv6ZZbWtLgg0fP/5zrKuqVa1qVata1apW
tapVrWpVq1rVqla1qlWtalWrWtWqVrWqVa1qVata1apWtapV7T7a/wAaiLu+ABgGAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18017</attachid>
            <date>2007-12-20 15:07:15 -0800</date>
            <delta_ts>2007-12-24 13:02:20 -0800</delta_ts>
            <desc>Update patch against r28911</desc>
            <filename>webkit-plugin-bits.patch</filename>
            <type>text/plain</type>
            <size>170932</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShyZXZpc2lvbiAyODkxMSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksMTIgKzUwLDE3IEBACiAjaW5jbHVkZSA8c3lzL3V0
c25hbWUuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2Fk
ZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50
KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2MCw5ICsxNjYsMzAgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxv
YWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJh
bWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2Fk
ZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAg
ICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgor
ICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAg
ICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAo
IXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZy
YW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAg
ICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9u
c2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0
aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
IGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI1OCw4ICsy
ODUsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQog
Ci1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYs
IEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKIHsKKyAgICBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3ID0g
UGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+Y3JlYXRlUGx1Z2luVmlldyhj
b3JlKG1fZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5z
dGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
biBwbHVnaW5WaWV3OworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTMwMSw4ICszMzMsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6
Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdl
dCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwor
ICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihwbHVnaW5XaWRn
ZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTMy
NCw2ICszNTUsOSBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudDo6b2JqCiAg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSh0eXBlKSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRJbWFnZTsKIAorICAgIGlmIChQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJl
ZChtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50TmV0c2Nh
cGVQbHVnaW47CisKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEZy
YW1lOwogCkBAIC02MjMsMTQgKzY1NywxNCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6Omdl
bmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50TG9h
ZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUg
bG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUK
LSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgot
ICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7
Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNv
ZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9u
c2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVy
KCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9wbHVn
aW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAg
ICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4g
PSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzUzLDkgKzc4NywxMyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1h
aW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmll
dyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4OTExKQorKysgV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xODAsNiArMTgzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRX
ZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAg
Ly8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVn
aW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
dmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
Y3BwCShyZXZpc2lvbiAyODkxMSkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM4LDYgKzgzOCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19pbml0KFdlYktpdFcKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZh
bWlseSgiQXJpYWwiKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVy
IE5ldyIpOwogICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFyaWFsIik7Cisg
ICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwogCiAgICAgR1RLX1dJREdFVF9T
RVRfRkxBR1Mod2ViVmlldywgR1RLX0NBTl9GT0NVUyk7CiAgICAgd2ViVmlld0RhdGEtPm1haW5G
cmFtZSA9IFdFQktJVF9XRUJfRlJBTUUod2Via2l0X3dlYl9mcmFtZV9uZXcod2ViVmlldykpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZp
c2lvbiAyODkxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nyw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVz
b3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1
Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotU3Ry
aW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9IAotYm9vbCBX
ZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29y
ZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3Ig
V2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdl
YkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkocmV2aXNpb24gMjg5MTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUs
NSArMzA1LDIyIEBAIHZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib28KIAog
dm9pZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0CiB7CisgICAgaWYgKCFwYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAg
IEludFBvaW50IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFt
ZUdlb21ldHJ5KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYWxsb2Nh
dGlvbiBzaXplIHRvIGJlIG5lZ2F0aXZlCisgICAgSW50U2l6ZSBzeiA9IGZyYW1lR2VvbWV0cnko
KS5zaXplKCk7CisgICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWln
aHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9j
YXRpb24pOwogfQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBsdWdpbkRhdGFiYXNlR3RrX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VHdGtfSAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBF
bGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3Mg
S1VSTDsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblZpZXdH
dGs7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+LCBQbHVn
aW5QYWNrYWdlR3RrSGFzaD4gUGx1Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFz
ZUd0ayB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIGlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogY3JlYXRlUGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblBhY2thZ2VHdGsqPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1F
VHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIHZv
aWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1f
cGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0
aHMoKSBjb25zdDsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUd0ayogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbik7CisKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5Q
YXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7CisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CisgICAgICAgIFBsdWdpblNl
dCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJl
YW1HdGsuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNs
dWRlICJranNfd2luZG93LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRl
ICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8a2pzL0pT
TG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorCisjaWYgZGVmaW5lZChHREtfV0lORE9X
SU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyNpbmNsdWRlICJndGsy
eHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRP
V0lOR19XSU4zMgorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtK
Uzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2Nr
OwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6
VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrIHsKK3B1YmxpYzoK
KyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKKyAgICAgICAg
OiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAgICAgICAgLCBtX25vdGlm
eURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlm
aWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgIHZv
aWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KKyAgICBib29s
IHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247IH0K
K3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7CisgICAg
dm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgIC8v
IEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsID0gMC4wMDE7CisKK2NsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsgeworcHVibGljOgorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsoUGx1Z2luVmll
d0d0ayogcGx1Z2luVmlldykKKyAgICAgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAgICAgLCBtX2JhY2soMCksIG1fZnJvbnQoMCkKKyAgICAgICAgLCBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOjptZXNzYWdlVGhyb3R0bGVU
aW1lckZpcmVkKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdp
dGggb3VyIGlubGluZSBtZXNzYWdlcworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
TnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgICAgICBtX2lubGluZU1lc3NhZ2Vz
W2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAgICAgIG1faW5saW5lTWVz
c2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKKyAgICAgICAgbV9mcmVlSW5s
aW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKKyAgICB9CisKKyAgICB+UGx1Z2lu
TWVzc2FnZVRocm90dGxlckd0aygpCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlKiBuZXh0
OworICAgIAorICAgICAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBt
ZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPm5l
eHQ7CisgICAgICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgfSAgICAgICAg
CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTWVzc2FnZShYSUQgaFduZCwgZ3VpbnQgbXNn
LCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSkgCisgICAgeworICAgICAgICBQbHVnaW5NZXNz
YWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICAgICAgbWVzc2FnZS0+aFdu
ZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKKyAgICAgICAgbWVzc2FnZS0+
d1BhcmFtID0gd1BhcmFtOworICAgICAgICBtZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07CisgICAg
ICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisgICAgICAgIGlmIChtX2JhY2spCisgICAgICAgICAg
ICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgICAgICBtX2JhY2sgPSBtZXNzYWdlOworICAg
ICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICBtX2Zyb250ID0gbWVzc2FnZTsKKworICAg
ICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
IG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJ
bnRlcnZhbCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsK
KyAgICAgICAgWElEIGhXbmQ7CisgICAgICAgIGd1aW50IG1zZzsKKyAgICAgICAgZ3VpbnQgd1Bh
cmFtOworICAgICAgICBnbG9uZyBsUGFyYW07CisKKyAgICAgICAgc3RydWN0IFBsdWdpbk1lc3Nh
Z2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIG1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4qKQorICAgIHsKKyAgICAgICAgUGx1
Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7CisgICAgICAgIG1fZnJvbnQgPSBtX2Zyb250
LT5uZXh0OworICAgICAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisgICAgICAgICAgICBtX2Jh
Y2sgPSAwOworCisJLy8gICAgICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVn
aW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFt
LCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworCisg
ICAgICAgIGlmIChtX2Zyb250KQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5z
dGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKKyAgICB9CisKKyAgICBQ
bHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVz
c2FnZSAqbWVzc2FnZTsKKworICAgICAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgICAgIG1f
ZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAgICAgICAgcmV0dXJuIG1l
c3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBpc0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSog
bWVzc2FnZSkgCisgICAgeworICAgICAgICByZXR1cm4gbWVzc2FnZSA+PSAmbV9pbmxpbmVNZXNz
YWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2Vz
IC0gMV07CisgICAgfQorCisgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNz
YWdlKSAKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICB9CisKKyAgICBQbHVnaW5WaWV3R3RrKiBtX3Bs
dWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2FnZSogbV9iYWNrOworICAgIFBsdWdpbk1lc3NhZ2Uq
IG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsK
KyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXNdOwor
ICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOworCisgICAgVGltZXI8UGx1
Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKK307CisKK3N0
YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICBpZiAoIXVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVu
ZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VSTDo6ZGVjb2RlX3N0cmluZyh1cmwuZGVwcmVj
YXRlZFN0cmluZygpLm1pZCgxMSkpOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3Rr
OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKKworY29uc3Qgd2NoYXJfdCoga1dlYlBsdWdpblZp
ZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3Qgd2NoYXJfdCoga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7
IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gv
Mi4wIjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAg
IGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93ICYmIChtX3dp
bmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkg
eworICAgICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCks
IG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVp
Z2h0KCkgfTsKKyAgICAgICAgaWYgKG1fd2lkZ2V0KSB7CisgICAgICAgICAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNpZiBkZWZpbmVkKEdES19X
SU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgICAgICAg
ICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpKTsKKyAgICAgICAgICAgICAgICBndGtfeHRiaW5fcmVzaXplKG1fd2lkZ2V0LCBtX3dp
bmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCitJbnRSZWN0IFBsdWdpblZpZXdHdGs6Ondp
bmRvd0NsaXBSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byBvdXIg
Ym91bmRzLgorICAgIEludFJlY3QgY2xpcFJlY3QobV93aW5kb3dSZWN0KTsKKyAgICAKKyAgICAv
LyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNsb3Np
bmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9lbGVt
ZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIEZyYW1lVmlldyogcGFyZW50
VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGNsaXBSZWN0LmludGVy
c2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckxheWVyKGxheWVyLCB0cnVlKSk7CisK
KyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJhbWVH
ZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZy
YW1lR2VvbWV0cnkoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOwor
CisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3co
KTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgp
OworICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3Vz
KCkKK3sKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TZXRGb2N1cyh3
aW5kb3cpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OnNob3coKQoreworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIC8vaWYgKFhJRCB3
aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19TSE9XTkEpOwor
CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7
CisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dp
bmRvdykKKyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19ISURFKTsKKworICAgIFdpZGdldDo6
aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0
YXRpYyBJbWFnZSogbnVsbFBsdWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQor
ICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51
bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCks
IGZyYW1lR2VvbWV0cnkoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdp
bkltYWdlLT5oZWlnaHQoKSk7CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCku
d2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJh
bWVHZW9tZXRyeSgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBp
bWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNl
Y3RzKGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0
LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0
ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAg
ICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBO
ZWVkIHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAg
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0K
KworICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2
ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBpdCBv
biAqLworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAK
KworICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7Cisg
ICAgfQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
czsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAm
bnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisvL2V4
dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFu
ZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7
CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50UG9p
bnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRv
dyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8qCisg
ICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBFdmVu
dC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5wRXZl
bnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAg
ICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IG1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRF
dmVudCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgeworICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1
dHRvbkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVu
dC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVu
dC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVu
dCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2Fz
ZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKwor
ICAgICAgICAgICAgICAgIC8vIEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJV
VFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZl
bnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRP
TlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICovCisK
KyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRn
ZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZl
bnRIYW5kbGVyLmNwcAorICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0
IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICAv
L2lnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9p
c1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVu
dCgpKQorICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAg
aGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQor
eworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lz
U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVu
dCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cu
eCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53
aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0
KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53
aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsK
KworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKwor
ICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lO
UykKKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3Np
dGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7Cisg
ICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9j
YXRpb24uaGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpz
dGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1f
bW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwor
ICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAg
IGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1f
bG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVz
dDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0
aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRVUkwobV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9w
KCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNo
U2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBI
YXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJh
dG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCpp
dCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAg
fQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQg
PSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwor
CisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0
ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsK
K30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQor
eworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3Jl
YXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBz
dHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZh
c3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3Ry
LmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0
aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJh
eVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdl
dFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcp
Cit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRl
KiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgVVN0cmlu
ZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayog
cmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2Ny
aXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgaWYgKGpzU3RyaW5n
LmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51cmxTZWxlY3Rl
ZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAg
ICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQg
d2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRlZFN0cmluZygpLnV0
ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVl
c3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFT
Y3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9h
ZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlz
RW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAvLyBF
eGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95
ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBSZWZQ
dHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSogcmVz
dWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcuZGVw
cmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmlu
ZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKSwg
cmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
dHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW1HdGs+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgcGFyZW50RnJhbWUu
Z2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVx
dWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAg
ICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRT
dHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBB
U1NFUlQodGltZXIgPT0gJm1fcmVxdWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5z
aXplKCkgPiAwKTsKKworICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3Rz
WzBdOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEg
bmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwg
dG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJl
IGRlbGV0ZWQuCisgICAgaWYgKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1
ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RH
dGsqIHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9y
ZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisg
ICAgS1VSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwor
ICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJ
RF9VUkw7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUo
KTsKKworICAgIC8vIGRvbid0IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMg
bm8gbG9uZ2VyIHBhcnQgb2YgYSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3Bs
YXllZCB1bmxlc3MgdGhlIGxvYWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2lu
LgorICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBt
X3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAg
ICAodGFyZ2V0LmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQp
ICE9IG1fcGFyZW50RnJhbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwp
OworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9wYXJlbnRGcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8
fCAhc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBN
b3ppbGxhIGRvZXMuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAg
ICAgICAgfSBlbHNlIGlmICh0YXJnZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsK
KyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBz
dGFuZGFsb25lIHBsdWctaW4gdGhhdCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8g
YmVjYXVzZSB0aGlzIGNhbiBjYXVzZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxh
bmsgcGFnZSAoMzQyNDAzOSkuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJB
TTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRh
cmdldC5pc051bGwoKSkgeworICAgICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJn
ZXQuaXNOdWxsKCkgJiYgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9w
YXJlbnRGcmFtZSkgeworICAgICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkg
YWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0
aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAg
ICAgICB9CisKKyAgICAgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5S
ZXF1ZXN0R3RrKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEp
OworICAgICAgICBzY2hlZHVsZVJlcXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1f
cGFyZW50RnJhbWUsIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3Rp
ZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisK
KyAgICAgICAgc3RyZWFtLT5zdGFydCgpOworICAgIH0KKworICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKK30KKworc3RhdGljIEtVUkwgbWFrZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25z
dCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0
cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEocmVsYXRpdmVVUkxTdHJpbmcpOwor
CisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgn
XG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xyJywgIiIpOworCisgICAgcmV0dXJu
IEtVUkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpn
ZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1
cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTChjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTCht
X2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFs
c2UsIDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAg
JiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0
ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25z
dCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVm
ZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBp
KyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgor
ICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhl
IHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGlu
ZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicp
IHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4n
KQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJc
blxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAg
ICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAo
Mzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRF
T0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEg
Q1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAv
LyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9u
CisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wg
bmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENS
TEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYg
RU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8g
dGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAg
ICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykg
eworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMK
KyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgor
ICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0
aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsg
aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyBy
ZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIg
JiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG91
cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYg
bmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9sb3dl
cihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAg
ICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3Rl
ciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIg
PSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhl
YWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFy
KiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVs
ZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVy
LCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9s
ID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9
IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAK
KyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5h
dG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAg
ICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAg
ICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcg
Q1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChs
aW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUg
ZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgq
bGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0
aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFu
ZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2
aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVy
RmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUgPSBE
ZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAg
ICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFu
ZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAg
IGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24r
KykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBo
ZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXpl
UkZDODIySGVhZGVyRmllbGROYW1lKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwg
Y29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAg
ICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRGVwcmVjYXRl
ZFN0cmluZzo6ZnJvbUxhdGluMShjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAg
ICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0
cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7Cisg
ICAgICAgICAgICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmll
bGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNl
bmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFs
ZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBG
cmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhl
YWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxl
KSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8v
LyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAg
ICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklM
RV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworCS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAg
ICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIi
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IE5VTEwpCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXpl
KCk7CisKKyAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAs
IGZpbGVIYW5kbGUpOworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBp
ZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7CisKKwlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVm
ZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4p
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAg
ICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworICAgIAorICAgIGlmIChhbGxv
d0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewor
ICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVy
Rmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkg
eworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0
aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIK
KyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhi
dWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0g
YnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVz
IHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkg
cG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtl
IHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBh
bmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAg
ICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNv
bnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNO
dWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0
aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxk
cy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBwb3N0RGF0YSAr
PSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmll
bGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQQm9keShQYXNzUmVmUHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEocG9zdERhdGEs
IHBvc3REYXRhTGVuZ3RoKSkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRh
cmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0
aW9uLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMTm90
aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVy
biBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1
ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKK3sKKyAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMg
dG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KKyAgICBy
ZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBm
aWxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpuZXdTdHJlYW0oTlBNSU1FVHlwZSB0
eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKK30KKworaW50MzIgUGx1Z2luVmlld0d0azo6d3JpdGUoTlBTdHJlYW0qIHN0cmVh
bSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAtMTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
R3RrOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sK
KyAgICBQbHVnaW5TdHJlYW1HdGsqIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5T
dHJlYW1HdGsqPihzdHJlYW0tPm5kYXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0
cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQorICAgICAgICBy
ZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dzZXJTdHJlYW0t
PmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgpCit7CisgICAg
aWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpCisgICAgICAg
IHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0
cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlm
IChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJv
bWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
Cit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpICYmICFkZWZpbmVkIChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgICAgICBjYXNlIE5QTlZ4
dEFwcENvbnRleHQ6IHsKKyAgICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAg
ICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0
IChHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgor
CisgICAgICAgIGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAg
ICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMjsKKyNlbHNlCisgICAgICAgICAgICAq
KCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMDsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNY
RW1iZWRCb29sOiB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQo
R1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1
ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkg
PSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgICAg
IE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3Jp
cHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQg
dG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93
U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1Nj
cmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAg
ICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5Q
TlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5T
Y3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1l
KGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1l
bnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRP
YmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3Jp
cHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0
T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAg
ICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93
OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUp
OworCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhHVEtfV0lE
R0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdyk7CisKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZp
ZXdHdGs6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6
CisgICAgICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgor
ICAgICAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdp
blZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1faW52YWxpZGF0ZVRp
bWVyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXpl
KCk7IGkrKykKKyAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0c1tp
XSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZpZXdH
dGs6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAg
ICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVj
dCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0
LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAg
ICAvKiBGSVhNRSAtIEludmFsaWRhdGUgdGhlIHJlY3RhbmdsZQorICAgICAgICBSRUNUIGludmFs
aWRSZWN0KHIpOworICAgICAgICBJbnZhbGlkYXRlUmVjdChtX3dpbmRvdywgJmludmFsaWRSZWN0
LCBGQUxTRSk7CisgICAgICAgICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcXVpcmtz
ICYgUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpIHsKKyAgICAgICAgICAgIG1faW52YWxp
ZFJlY3RzLmFwcGVuZChyKTsKKyAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3Qo
MC4wMDEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdpZGdldDo6aW52YWxpZGF0ZVJl
Y3Qocik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWdpb24o
TlBSZWdpb24gcmVnaW9uKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8qIEZJWE1FIC0gSW52YWxpZGF0ZSB0aGUgcmVnaW9uCisgICAgUkVDVCByOwor
CisgICAgaWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7CisgICAgICAgIGludmFsaWRh
dGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJl
Y3Qocik7CisgICAgKi8KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpmb3JjZVJlZHJhdygpCit7
CisgICAgLyogRklYTUUgLSBGb3JjZSBhIHJlZHJhdworICAgIGlmIChtX2lzV2luZG93ZWQpCisg
ICAgICAgIDo6VXBkYXRlV2luZG93KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBk
YXRlV2luZG93KGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgKi8KK30KKworS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2UqIFBsdWdpblZpZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBP
YmplY3QqIG9iamVjdCA9IDA7CisKKyAgICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBu
cEVycjsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSht
X2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9
CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9
IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+c2Ny
aXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
ICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFu
Z3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3Qs
IHJvb3QucmVsZWFzZSgpKTsKKworICAgIF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOworCisg
ICAgcmV0dXJuIGluc3RhbmNlOworfQorCitQbHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0aygp
Cit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisg
ICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVl
U3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIGlmICghbV9u
ZWVkc1hFbWJlZCAmJiBtX3dpZGdldCkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lk
Z2V0KTsKKyAgICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAg
bV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAg
ICBpZiAobV9wbHVnaW4gJiYgIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdp
bikpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayogc3RyZWFtKQoreworICAgIEFTU0VS
VChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMucmVtb3ZlKHN0
cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3Rz
IHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAg
ICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAg
ICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudDsKKyAgICAg
ICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7CisgICAgICAgIG1f
cXVpcmtzIHw9IFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXM7CisgICAg
fQorCisgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQ
X1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNh
bGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAg
IGlmIChtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBtX3BsdWdpbi0+
bmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAvLyBXaW5kb3ds
ZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0
IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8g
dGhlIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVtb3ZlV2luZG93
bGVzc1ZpZGVvUGFyYW07CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRz
IHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBp
dHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBo
YXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAg
ICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gaW4gb3VyIE5Q
UnVudGltZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAvLyBOUE9iamVj
dCBhbmQgcGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUgdG8gc2VlIHdo
YXQgcm9vdCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8vIFRodXMsIHdl
IGRvbid0IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRlZCB3aGVuIHRo
ZSBwbHVnLWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzU0ODc3NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdo
dCIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbjsKKwor
ICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFBy
b2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgIGlmICht
aW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAgICAgbV9xdWly
a3MgfD0gUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5
OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sK
KyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJh
bUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioq
PihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXpl
KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGlmICgobV9xdWlya3MgJiBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSAm
JiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0g
PSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVz
W3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAg
ICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7
Cit9CisKK1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX3Bh
cmVudEZyYW1lKHBhcmVudEZyYW1lKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBt
X2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0
VGltZXJGaXJlZCkKKyAgICAsIG1faW52YWxpZGF0ZVRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3Rr
OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9w
YXJhbVZhbHVlcygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1fd2luZG93KDApCisgICAg
LCBtX2lzV2luZG93ZWQodHJ1ZSkKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAs
IG1faXNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9oYXZlSW5pdGlhbGl6ZWQoZmFsc2UpCisgICAg
LCBtX2xhc3RNZXNzYWdlKDApCisgICAgLCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MoZmFsc2Up
CisgICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21hbnVhbFN0cmVh
bSgwKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCit7Cisg
ICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5v
dEZpbmRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlID0g
Jm1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisgICAg
bV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5
cGUpOworCisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisKKyAg
ICBtX21vZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAgIHJl
c2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBpZiAo
bV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXpl
ZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1
cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7
CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5l
ZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
WDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgIGlmIChtX25lZWRzWEVt
YmVkKSB7CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCks
IG1fd2lkZ2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQobV9wYXJlbnRGcmFt
ZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwpOworI2Vsc2UKKyAg
ICBtX3dpZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9w
YXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICBz
ZXRHdGtXaWRnZXQobV93aWRnZXQpOworI2VuZGlmCisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9j
YXRpb24gPSB7IGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55KCksIGZyYW1l
R2VvbWV0cnkoKS53aWR0aCgpLCBmcmFtZUdlb21ldHJ5KCkuaGVpZ2h0KCkgfTsKKyAgICBndGtf
d2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAg
IGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdU
S19YVEJJTihtX3dpZGdldCksIGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsKKyAgICAgICAg
Z3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5o
ZWlnaHQpOworICAgIH0KKyNlbmRpZgorICAgIGd0a193aWRnZXRfc2hvdyAobV93aWRnZXQpOwor
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVf
UExVR0lOUykKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IGdfbmV3MChOUFNl
dFdpbmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0gMDsKKworICAgIGlm
IChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElT
UExBWShtX3dpZGdldC0+d2luZG93KTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxf
WFZJU1VBTChnZGtfd2luZG93X2dldF92aXN1YWwobV93aWRnZXQtPndpbmRvdykpOworICAgICAg
ICB3cy0+ZGVwdGggPSBnZGtfd2luZG93X2dldF92aXN1YWwobV93aWRnZXQtPndpbmRvdyktPmRl
cHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdka193
aW5kb3dfZ2V0X2NvbG9ybWFwKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAgbV93aW5kb3cg
PSBHREtfV0lORE9XX1hXSU5ET1cobV93aWRnZXQtPndpbmRvdyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGRpc3BsYXk7CisgICAg
ICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dHZpc3VhbDsK
KyAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRkZXB0
aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQu
eHRjb2xvcm1hcDsKKyAgICAgICAgbV93aW5kb3cgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dHdp
bmRvdzsKKworICAgICAgICBYRmx1c2ggKHdzLT5kaXNwbGF5KTsKKyAgICB9CisKKyAgICBtX25w
V2luZG93LndzX2luZm8gPSB3czsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIK
KyAgICBtX3dpbmRvdyA9IEdES19XSU5ET1dfSFdORChtX3dpZGdldC0+d2luZG93KTsKKyNlbmRp
ZgorCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBO
UFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKW1f
d2luZG93OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisgICAgfQorCisg
ICAgaWYgKCEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkK
KyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbSA9
IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDApOwor
ICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7CisKKyAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9tYW51YWxTdHJlYW0t
PmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKwor
ICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNT
RVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVy
cm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blZpZXdHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQbHVnaW5WaWV3R3RrX0gKKyNkZWZpbmUgUGx1Z2luVmlld0d0a19ICisK
KyNpbmNsdWRlIDxndGsvZ3Rrd2lkZ2V0Lmg+CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5o
IgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtK
UyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7Cisg
ICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBj
bGFzcyBGcmFtZTsKKyAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFzcyBLZXli
b2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAgICBj
bGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VH
dGs7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW1H
dGs7CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OworICAgIAorICAgIGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50
c01vemlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZh
bGlkYXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlk
ZW9QYXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNP
bmVNZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
ID0gMSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNz
YWdlUmVjdXJzaXZlbHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMg
eworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUs
IGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAgICAgUGx1
Z2luUGFja2FnZUd0ayogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0KCk7IH0K
KyAgICAgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorCisg
ICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3Rh
dGljIFBsdWdpblZpZXdHdGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAgS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0
YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAgIC8vIE5Q
TiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9y
IGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5Q
RXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7CisgICAg
ICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0
LCBOUFN0cmVhbSoqIHN0cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJl
YW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95U3Ry
ZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNvbnN0IGNo
YXIqIHVzZXJBZ2VudCgpOworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdl
KTsKKyAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7CisgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQgZm9yY2VS
ZWRyYXcoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3Rr
Kik7CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBn
ZW9tZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgZ2xvbmcgd25kUHJv
YyhYSUQgaFduZCwgZ3VpbnQgbWVzc2FnZSwgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0pOwor
CisgICAgICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAgICAg
ICB2b2lkIGluaXQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3Ao
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0
ayopOworICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wg
c2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgaGFu
ZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwg
Y29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5v
dGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2luUGFj
a2FnZUd0az4gbV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAg
RnJhbWUqIG1fcGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAg
IEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5TdGF0
dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKwor
ICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAg
dm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHJl
cXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIHZvaWQgaW52
YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8
UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdH
dGs+IG1faW52YWxpZGF0ZVRpbWVyOworCisgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyR3RrPiBtX21lc3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5k
b3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50
OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZh
bHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91
c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5z
dGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIGludCBtX3F1aXJrczsK
KyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50
OworICAgICAgICBib29sIG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxp
emVkOworCisgICAgICAgIFhJRCBtX3dpbmRvdzsgLy8gZm9yIHdpbmRvd2VkIHBsdWctaW5zCisg
ICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFw
cGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93aW5k
b3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVz
c2FnZTsKKyAgICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisKKyAgICAgICAg
Ym9vbCBtX2xvYWRNYW51YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gbV9t
YW51YWxTdHJlYW07CisKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3VycmVudFBs
dWdpblZpZXc7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICAgICAgYm9vbCBt
X25lZWRzWEVtYmVkOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IApJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9p
bnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhlIHBsdWdpbiB2
aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVn
LWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8vIHdpdGggYSBO
VUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2
aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgorLy8gQ3VycmVudGx5LCB0aGUgY3Vy
cmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmll
d0d0azo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxhc2ggYW5k
IFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNlcmFnZW50
IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNl
LT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihpbnN0
YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmll
dygpOworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyIHNpemUpCit7CisgICAgcmV0dXJu
IG1hbGxvYyhzaXplKTsKK30KKwordm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAg
ZnJlZShwdHIpOworfQorCit1aW50MzIgTlBOX01lbUZsdXNoKHVpbnQzMiBzaXplKQoreworICAg
IC8vIERvIG5vdGhpbmcKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lu
cyhOUEJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgcmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMp
OworfQorCitOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVS
YW5nZSogcmFuZ2VMaXN0KQoreworICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQor
CitOUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBu
b3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3Ig
TlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9p
ZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBC
b29sIGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnBvc3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5f
TmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQz
MiBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZv
aWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7
CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJl
YW0oc3RyZWFtLCByZWFzb24pOworfQorCitjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3R3RrKiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKTsKKworICAgICAvLyBGSVhNRTogU29tZSBwbHVnLWlucyBjYWxsIE5QTl9V
c2VyQWdlbnQgd2l0aCBhIG51bGwgaW5zdGFuY2UgaW4gdGhlaXIgTlBfaW5pdGlhbGl6ZSBmdW5j
dGlvbiEKKyAgICAgLy8gV2UnZCBuZWVkIGEgd2F5IHRvIGdldCBhIHVzZXIgYWdlbnQgd2l0aG91
dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQuCisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVy
biAwOworIAorICAgIHJldHVybiB2aWV3LT51c2VyQWdlbnQoKTsKK30KKwordm9pZCBOUE5fU3Rh
dHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMobWVzc2FnZSk7Cit9CisKK3ZvaWQgTlBOX0lu
dmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sKKyAgICBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVj
dCk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lv
biBpbnZhbGlkUmVnaW9uKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBOX0ZvcmNlUmVk
cmF3KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5mb3JjZVJlZHJhdygpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2Us
IE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30K
KworTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpCit7CisgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFF
bnYoKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5Q
Tl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZAorTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3Rh
bmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sKK30KKwordm9pZAorTlBOX1BvcFBvcHVwc0VuYWJsZWRT
dGF0ZShOUFAgaW5zdGFuY2UpCit7Cit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJl
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY0IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1v
ZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lk
dGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioq
CisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVu
dHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9N
UEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1
bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhF
TUJFRCBEZWNsYXJhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9y
aWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAq
IHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250
cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisg
KiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxh
dGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhl
IEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92
ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
b25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBh
bmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9u
IGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0
aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9y
IHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUs
IGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICog
dGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAq
CisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisvKiBYRU1CRUQgbWVzc2Fn
ZXMgKi8KKyNkZWZpbmUgWEVNQkVEX0VNQkVEREVEX05PVElGWSAgICAgICAgICAwCisjZGVmaW5l
IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfV0lORE9X
X0RFQUNUSVZBVEUgICAgICAgIDIKKyNkZWZpbmUgWEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAg
ICAgICAzCisjZGVmaW5lIFhFTUJFRF9GT0NVU19JTiAgICAgICAgICAgICAgICAgNAorI2RlZmlu
ZSBYRU1CRURfRk9DVVNfT1VUICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X05FWFQgICAgICAgICAgICAgICA2CisjZGVmaW5lIFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAg
ICAgICAgNworI2RlZmluZSBYRU1CRURfR1JBQl9LRVkgICAgICAgICAgICAgICAgIDgKKyNkZWZp
bmUgWEVNQkVEX1VOR1JBQl9LRVkgICAgICAgICAgICAgICA5CisjZGVmaW5lIFhFTUJFRF9NT0RB
TElUWV9PTiAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAg
ICAgICAgICAxMQorCisvKiBOb24gc3RhbmRhcmQgbWVzc2FnZXMqLworI2RlZmluZSBYRU1CRURf
R1RLX0dSQUJfS0VZICAgICAgICAgICAgIDEwOCAKKyNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJf
S0VZICAgICAgICAgICAxMDkKKworLyogRGV0YWlscyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8K
KyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQgICAgICAgICAgICAwCisjZGVmaW5lIFhFTUJF
RF9GT0NVU19GSVJTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAg
ICAgICAgICAgICAgIDIKKworLyogRmxhZ3MgZm9yIF9YRU1CRURfSU5GTyAqLworI2RlZmluZSBY
RU1CRURfTUFQUEVEICAgICAgICAgICAgICAgICAgICgxIDw8IDApCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgUExVR0lOX0RFQlVHX0hfXworI2RlZmluZSBQTFVHSU5fREVCVUdfSF9fCisK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKworc3RhdGljIGNoYXIqIGVycm9yU3Ry
aW5nc1tdID0geworICAgICJObyBlcnJvcnMgb2NjdXJyZWQuIiwgLyogTlBFUlJfTk9fRVJST1Ig
Ki8KKyAgICAiRXJyb3Igd2l0aCBubyBzcGVjaWZpYyBlcnJvciBjb2RlIG9jY3VycmVkLiIsIC8q
IE5QRVJSX0dFTkVSSUNfRVJST1IgKi8KKyAgICAiSW52YWxpZCBpbnN0YW5jZSBwYXNzZWQgdG8g
dGhlIHBsdWctaW4uIiwgLyogTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUiAqLworICAgICJG
dW5jdGlvbiB0YWJsZSBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfRlVOQ1RBQkxFX0VSUk9S
ICovCisgICAgIkxvYWRpbmcgb2YgcGx1Zy1pbiBmYWlsZWQuIiwgLyogTlBFUlJfTU9EVUxFX0xP
QURfRkFJTEVEX0VSUk9SICovCisgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4iLCAvKiBO
UEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SICovCisgICAgIlBsdWctaW4gbWlzc2luZyBvciBpbnZh
bGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0VSUk9SICovCisgICAgIlBsdWctaW4gZGly
ZWN0b3J5IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9ESVJf
RVJST1IgKi8KKyAgICAiVmVyc2lvbnMgb2YgcGx1Zy1pbiBhbmQgQ29tbXVuaWNhdG9yIGRvIG5v
dCBtYXRjaC4iLCAvKiBOUEVSUl9JTkNPTVBBVElCTEVfVkVSU0lPTl9FUlJPUiAqLworICAgICJQ
YXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUEFSQU0gKi8K
KyAgICAiVVJMIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1VSTCAqLwor
ICAgICJGaWxlIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9GSUxFX05PVF9GT1VORCAq
LworICAgICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iLCAvKiBOUEVSUl9OT19EQVRBICovCisg
ICAgIlNlZWthYmxlIHN0cmVhbSBleHBlY3RlZC4iLCAvKiBOUEVSUl9TVFJFQU1fTk9UX1NFRUtB
QkxFICovCisgICAgIlVua25vd24gZXJyb3IgY29kZSIKK307CisKKyNpZm5kZWYgTkRFQlVHCisj
ZGVmaW5lIExPR19OUEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgX1JQVEYy
KF9DUlRfV0FSTiwgIiVzOiAlc1xuIiwgX19GVU5DVElPTl9fLCBlcnJvclN0cmluZ3NbZXJyXSkK
KyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSBfUlBURjEoX0NSVF9XQVJOLCAiJXM6IFN0
cmVhbSBmYWlsZWQgZHVlIHRvIHByb2JsZW1zIHdpdGggbmV0d29yaywgZGlzayBJL08sIGxhY2sg
b2YgbWVtb3J5LCBvciBvdGhlciBwcm9ibGVtcy5cbiIsIF9fRlVOQ1RJT05fXykKKyNlbHNlCisj
ZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkgKCh2b2lkKTApCisjZGVmaW5lIExPR19OUEVS
Uk9SKGVycikgKCh2b2lkKTApCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9u
cGZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0
aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIF9OUEZVTkNUSU9OU19IXworI2RlZmluZSBfTlBGVU5DVElPTlNfSF8KKworI2luY2x1ZGUg
Im5wcnVudGltZV9pbnRlcm5hbC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1dJTikKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJB
Q0soX3R5cGUsIF9uYW1lKSBfdHlwZSAoX19zdGRjYWxsICogX25hbWUpCisjZWxzZQorI2RlZmlu
ZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlICgqIF9uYW1lKQorI2VuZGlm
CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB2b2lkKiBub3RpZnlEYXRh
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyIGxlbiwgY29u
c3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5Q
RXJyb3IgKCpOUE5fUmVxdWVzdFJlYWRQcm9jUHRyKShOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVS
YW5nZSogcmFuZ2VMaXN0KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9OZXdTdHJlYW1Qcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogd2luZG93LCBOUFN0
cmVhbSoqIHN0cmVhbSk7Cit0eXBlZGVmIGludDMyICgqTlBOX1dyaXRlUHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBT
dHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9TdGF0
dXNQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwordHlwZWRlZiBj
b25zdCBjaGFyKigqTlBOX1VzZXJBZ2VudFByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBlZGVm
IHZvaWQqICgqTlBOX01lbUFsbG9jUHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRlZiB2b2lk
ICgqTlBOX01lbUZyZWVQcm9jUHRyKSh2b2lkKiBwdHIpOwordHlwZWRlZiB1aW50MzIgKCpOUE5f
TWVtRmx1c2hQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsb2Fk
UGx1Z2luc1Byb2NQdHIpKE5QQm9vbCByZWxvYWRQYWdlcyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpO
UE5fR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVlUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwordHlwZWRl
ZiB2b2lkICgqTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlY3Qg
KnJlY3QpOwordHlwZWRlZiB2b2lkICgqTlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QUmVnaW9uIHJlZ2lvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fRm9yY2VSZWRy
YXdQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTFBy
b2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3cp
OwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNv
bnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YUVudlByb2NQ
dHIpKHZvaWQpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhUGVlclByb2NQdHIpKE5QUCBp
bnN0YW5jZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpOwordHlwZWRlZiB2b2lkICgqTlBOX1Bv
cFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSk7CisKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0cikgKE5QVmFyaWFudCAqdmFyaWFudCk7
CisKK3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQcm9jUHRy
KSAoY29uc3QgTlBVVEY4ICpuYW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9HZXRTdHJpbmdJZGVu
dGlmaWVyc1Byb2NQdHIpIChjb25zdCBOUFVURjggKipuYW1lcywgaW50MzJfdCBuYW1lQ291bnQs
IE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMpOwordHlwZWRlZiBOUElkZW50aWZpZXIgKCpOUE5f
R2V0SW50SWRlbnRpZmllclByb2NQdHIpIChpbnQzMl90IGludGlkKTsKK3R5cGVkZWYgaW50MzJf
dCAoKk5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmll
cik7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0cikgKE5QSWRl
bnRpZmllciBpZGVudGlmaWVyKTsKK3R5cGVkZWYgTlBVVEY4ICooKk5QTl9VVEY4RnJvbUlkZW50
aWZpZXJQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOworCit0eXBlZGVmIE5QT2Jq
ZWN0KiAoKk5QTl9DcmVhdGVPYmplY3RQcm9jUHRyKSAoTlBQLCBOUENsYXNzICphQ2xhc3MpOwor
dHlwZWRlZiBOUE9iamVjdCogKCpOUE5fUmV0YWluT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0ICpv
YmopOwordHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyKSAoTlBPYmplY3Qg
Km9iaik7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tlUHJvY1B0cikgKE5QUCBucHAsIE5QT2Jq
ZWN0ICpvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3Ms
IHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpO
UE5fSW52b2tlRGVmYXVsdFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBjb25zdCBO
UFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0
eXBlZGVmIGJvb2wgKCpOUE5fRXZhbHVhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9i
aiwgTlBTdHJpbmcgKnNjcmlwdCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgq
TlBOX0dldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRp
ZmllciAgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpO
UE5fU2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlm
aWVyICBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFudCAqdmFsdWUpOwordHlwZWRlZiBib29s
ICgqTlBOX0hhc1Byb3BlcnR5UHJvY1B0cikgKE5QUCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50
aWZpZXIgcHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNNZXRob2RQcm9jUHRy
KSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSk7Cit0
eXBlZGVmIGJvb2wgKCpOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmpl
Y3QgKm9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5f
U2V0RXhjZXB0aW9uUHJvY1B0cikgKE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVVRGOCAqbWVzc2Fn
ZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fRW51bWVyYXRlUHJvY1B0cikgKE5QUCBucHAsIE5QT2Jq
ZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoqaWRlbnRpZmllciwgdWludDMyX3QgKmNvdW50KTsK
KwordHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1Byb2NQdHIpKE5QTUlNRVR5cGUgcGx1Z2luVHlw
ZSwgTlBQIGluc3RhbmNlLCB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywgY2hhciogYXJnbltdLCBj
aGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBf
RGVzdHJveVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKTsKK3R5cGVk
ZWYgTlBFcnJvciAoKk5QUF9TZXRXaW5kb3dQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QV2luZG93
KiB3aW5kb3cpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1N0cmVhbVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wgc2Vla2Fi
bGUsIHVpbnQxNiogc3R5cGUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lTdHJlYW1Q
cm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7
Cit0eXBlZGVmIHZvaWQgKCpOUFBfU3RyZWFtQXNGaWxlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiBmbmFtZSk7Cit0eXBlZGVmIGludDMyICgqTlBQ
X1dyaXRlUmVhZHlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0pOwordHlw
ZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0
cmVhbSwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwordHlwZWRl
ZiB2b2lkICgqTlBQX1ByaW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBwbGF0Zm9y
bVByaW50KTsKK3R5cGVkZWYgaW50MTYgKCpOUFBfSGFuZGxlRXZlbnRQcm9jUHRyKShOUFAgaW5z
dGFuY2UsIHZvaWQqIGV2ZW50KTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9VUkxOb3RpZnlQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2b2lkKiBu
b3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9HZXRWYWx1ZVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0eXBlZGVm
IE5QRXJyb3IgKCpOUFBfU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxl
IHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKHZvaWQs
IE5QUF9TaHV0ZG93blByb2NQdHIpKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKigqTlBQX0dldEph
dmFDbGFzc1Byb2NQdHIpKHZvaWQpOwordHlwZWRlZiB2b2lkKiAgIEpSSUdsb2JhbFJlZjsgLy9u
b3QgdXNpbmcgdGhpcyByaWdodCBub3cKKwordHlwZWRlZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5j
cyB7CisgICAgdWludDE2IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgCisgICAgTlBO
X0dldFVSTFByb2NQdHIgZ2V0dXJsOworICAgIE5QTl9Qb3N0VVJMUHJvY1B0ciBwb3N0dXJsOwor
ICAgIE5QTl9SZXF1ZXN0UmVhZFByb2NQdHIgcmVxdWVzdHJlYWQ7CisgICAgTlBOX05ld1N0cmVh
bVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5QTl9Xcml0ZVByb2NQdHIgd3JpdGU7CisgICAgTlBO
X0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lzdHJlYW07CisgICAgTlBOX1N0YXR1c1Byb2NQ
dHIgc3RhdHVzOworICAgIE5QTl9Vc2VyQWdlbnRQcm9jUHRyIHVhZ2VudDsKKyAgICBOUE5fTWVt
QWxsb2NQcm9jUHRyIG1lbWFsbG9jOworICAgIE5QTl9NZW1GcmVlUHJvY1B0ciBtZW1mcmVlOwor
ICAgIE5QTl9NZW1GbHVzaFByb2NQdHIgbWVtZmx1c2g7CisgICAgTlBOX1JlbG9hZFBsdWdpbnNQ
cm9jUHRyIHJlbG9hZHBsdWdpbnM7CisgICAgTlBOX0dldEphdmFFbnZQcm9jUHRyIGdldEphdmFF
bnY7CisgICAgTlBOX0dldEphdmFQZWVyUHJvY1B0ciBnZXRKYXZhUGVlcjsKKyAgICBOUE5fR2V0
VVJMTm90aWZ5UHJvY1B0ciBnZXR1cmxub3RpZnk7CisgICAgTlBOX1Bvc3RVUkxOb3RpZnlQcm9j
UHRyIHBvc3R1cmxub3RpZnk7CisgICAgTlBOX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsKKyAg
ICBOUE5fU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOworICAgIE5QTl9JbnZhbGlkYXRlUmVjdFBy
b2NQdHIgaW52YWxpZGF0ZXJlY3Q7CisgICAgTlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRyIGlu
dmFsaWRhdGVyZWdpb247CisgICAgTlBOX0ZvcmNlUmVkcmF3UHJvY1B0ciBmb3JjZXJlZHJhdzsK
KyAgICAKKyAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIgZ2V0c3RyaW5naWRlbnRp
ZmllcjsKKyAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyIGdldHN0cmluZ2lkZW50
aWZpZXJzOworICAgIE5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0ciBnZXRpbnRpZGVudGlmaWVy
OworICAgIE5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyIGlkZW50aWZpZXJpc3N0cmluZzsK
KyAgICBOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0ciB1dGY4ZnJvbWlkZW50aWZpZXI7Cisg
ICAgTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0ciBpbnRmcm9taWRlbnRpZmllcjsKKyAgICBO
UE5fQ3JlYXRlT2JqZWN0UHJvY1B0ciBjcmVhdGVvYmplY3Q7CisgICAgTlBOX1JldGFpbk9iamVj
dFByb2NQdHIgcmV0YWlub2JqZWN0OworICAgIE5QTl9SZWxlYXNlT2JqZWN0UHJvY1B0ciByZWxl
YXNlb2JqZWN0OworICAgIE5QTl9JbnZva2VQcm9jUHRyIGludm9rZTsKKyAgICBOUE5fSW52b2tl
RGVmYXVsdFByb2NQdHIgaW52b2tlRGVmYXVsdDsKKyAgICBOUE5fRXZhbHVhdGVQcm9jUHRyIGV2
YWx1YXRlOworICAgIE5QTl9HZXRQcm9wZXJ0eVByb2NQdHIgZ2V0cHJvcGVydHk7CisgICAgTlBO
X1NldFByb3BlcnR5UHJvY1B0ciBzZXRwcm9wZXJ0eTsKKyAgICBOUE5fUmVtb3ZlUHJvcGVydHlQ
cm9jUHRyIHJlbW92ZXByb3BlcnR5OworICAgIE5QTl9IYXNQcm9wZXJ0eVByb2NQdHIgaGFzcHJv
cGVydHk7CisgICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFzbWV0aG9kOworICAgIE5QTl9SZWxl
YXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFudHZhbHVlOworICAgIE5QTl9TZXRF
eGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKKyAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRT
dGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFibGVkc3RhdGU7CisgICAgTlBOX0VudW1lcmF0
ZVByb2NQdHIgZW51bWVyYXRlOworfSBOUE5ldHNjYXBlRnVuY3M7CisKK3R5cGVkZWYgc3RydWN0
IF9OUFBsdWdpbkZ1bmNzIHsKKyAgICB1aW50MTYgc2l6ZTsKKyAgICB1aW50MTYgdmVyc2lvbjsK
KyAgICBOUFBfTmV3UHJvY1B0ciBuZXdwOworICAgIE5QUF9EZXN0cm95UHJvY1B0ciBkZXN0cm95
OworICAgIE5QUF9TZXRXaW5kb3dQcm9jUHRyIHNldHdpbmRvdzsKKyAgICBOUFBfTmV3U3RyZWFt
UHJvY1B0ciBuZXdzdHJlYW07CisgICAgTlBQX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lz
dHJlYW07CisgICAgTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIgYXNmaWxlOworICAgIE5QUF9Xcml0
ZVJlYWR5UHJvY1B0ciB3cml0ZXJlYWR5OworICAgIE5QUF9Xcml0ZVByb2NQdHIgd3JpdGU7Cisg
ICAgTlBQX1ByaW50UHJvY1B0ciBwcmludDsKKyAgICBOUFBfSGFuZGxlRXZlbnRQcm9jUHRyIGV2
ZW50OworICAgIE5QUF9VUkxOb3RpZnlQcm9jUHRyIHVybG5vdGlmeTsKKyAgICBKUklHbG9iYWxS
ZWYgamF2YUNsYXNzOworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7CisgICAgTlBQ
X1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1ZTsKK30gTlBQbHVnaW5GdW5jczsKKwordHlwZWRlZiBF
WFBPUlRFRF9DQUxMQkFDSyhOUEVycm9yLCBOUF9Jbml0aWFsaXplRnVuY1B0cikoTlBOZXRzY2Fw
ZUZ1bmNzKiwgTlBQbHVnaW5GdW5jcyopOwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhjb25z
dCBjaGFyKiwgTlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0cikodm9pZCk7CisKKyNpZiBkZWZp
bmVkKFhQX01BQ09TWCkKK3R5cGVkZWYgdm9pZCAgICAoKkJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBl
c1ByZWZlcmVuY2VzRnVuY1B0cikodm9pZCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpNYWluRnVuY1B0
cikoTlBOZXRzY2FwZUZ1bmNzKiwgTlBQbHVnaW5GdW5jcyosIE5QUF9TaHV0ZG93blByb2NQdHIq
KTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTM5IEBACisvKiAtKi0g
TW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1v
ZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICov
CisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwg
MS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFy
ZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAo
dGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdh
cmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vu
c2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQgSW1w
bGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5h
bCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0
b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBt
YXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAo
dGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwg
b3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElm
IHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkK
KyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBk
ZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5v
dGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUg
TEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0
ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICog
KioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKyAKKy8qCisgKiBUaGUgR3RrWHRCaW4g
d2lkZ2V0IGFsbG93cyBmb3IgWHQgdG9vbGtpdCBjb2RlIHRvIGJlIHVzZWQKKyAqIGluc2lkZSBh
IEdUSyBhcHBsaWNhdGlvbi4gIAorICovCisKKyNpbmNsdWRlICJ4ZW1iZWQuaCIKKyNpbmNsdWRl
ICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorI2luY2x1ZGUgPGd0ay9n
dGtwcml2YXRlLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgPHVuaXN0ZC5oPgorCisvKiBYbGliL1h0IHN0dWZmICovCisjaW5jbHVkZSA8WDExL1hsaWIu
aD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyNpbmNs
dWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KKworLyog
dW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHdp
ZGdldAorICAgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uICovCisjdW5kZWYgREVCVUdfWFRCSU4K
KworI2RlZmluZSBYVEJJTl9NQVhfRVZFTlRTIDMwCisKK3N0YXRpYyB2b2lkICAgICAgICAgICAg
Z3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKK3N0YXRpYyB2b2lk
ICAgICAgICAgICAgZ3RrX3h0YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0YmluKTsK
K3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dpZGdldCAg
ICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5yZWFsaXpl
ICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3Rr
X3h0YmluX2Rlc3Ryb3kgICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworc3RhdGljIHZvaWQg
ICAgICAgICAgICBndGtfeHRiaW5fc2h1dGRvd24gICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7
CisKKy8qIFh0IGF3YXJlIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2lu
aXQgICAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpOworc3RhdGljIHZvaWQgICAgICAgeHRf
Y2xpZW50X2NyZWF0ZSAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRlciwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xp
ZW50X3VucmVhbGl6ZSAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0
X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9jbGllbnRfc2V0X2luZm8gIChXaWRnZXQgeHRwbHVnLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQg
ICAgICAgeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOwor
c3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAoV2lkZ2V0
IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRf
Y2xpZW50X2ZvY3VzX2xpc3RlbmVyICAgICAgIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9kYXRhLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVu
dCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRn
ZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSApOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEp
OyAKK3N0YXRpYyB2b2lkICAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywg
WHRQb2ludGVyIHVzZXJfZGF0YSk7CitzdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJlZF9tZXNz
YWdlIChYdENsaWVudCAqeHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb25nIG1lc3NhZ2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBkZXRhaWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBkYXRhMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25nIGRhdGEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0
aW1lKTsgIAorc3RhdGljIGludCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlzcGxheSAq
ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXJyb3JF
dmVudCAqZXJyb3IpOworLyogRm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCitzdGF0aWMgdm9p
ZCAgICAgICB0cmFwX2Vycm9ycyh2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgIHVudHJhcF9lcnJv
cih2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChEaXNwbGF5
ICosIFhFcnJvckV2ZW50ICopOworc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJvcl9jb2Rl
ID0gMDsKKworc3RhdGljIEd0a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitz
dGF0aWMgRGlzcGxheSAgICAgICAgICp4dGRpc3BsYXkgPSBOVUxMOworc3RhdGljIFN0cmluZyAg
ICAgICAgICAqZmFsbGJhY2sgPSBOVUxMOworc3RhdGljIGdib29sZWFuICAgICAgICAgeHRfaXNf
aW5pdGlhbGl6ZWQgPSBGQUxTRTsKK3N0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93aWRnZXRz
ID0gMDsKKworc3RhdGljIEdQb2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsKK3N0YXRp
YyBnaW50ICAgICAgICAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworc3RhdGljIGd1aW50
ICAgICAgICAgICAgdGFnID0gMDsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wcmVwYXJl
IChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgKnRp
bWVvdXQpCit7ICAgCisgIGludCBtYXNrOworCisgIEdES19USFJFQURTX0VOVEVSKCk7CisgIG1h
c2sgPSBYUGVuZGluZyh4dGRpc3BsYXkpOworICBHREtfVEhSRUFEU19MRUFWRSgpOworCisgIHJl
dHVybiAoZ2Jvb2xlYW4pbWFzazsKK30KKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9jaGVj
ayAoR1NvdXJjZSogIHNvdXJjZV9kYXRhKQoreworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKwor
ICBpZiAoeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzICYgR19JT19JTikgeworICAgIGludCBtYXNr
OworICAgIG1hc2sgPSBYUGVuZGluZyh4dGRpc3BsYXkpOworICAgIEdES19USFJFQURTX0xFQVZF
ICgpOworICAgIHJldHVybiAoZ2Jvb2xlYW4pbWFzazsKKyAgfQorCisgIEdES19USFJFQURTX0xF
QVZFICgpOworICByZXR1cm4gRkFMU0U7Cit9ICAgCisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZl
bnRfZGlzcGF0Y2ggKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
R1NvdXJjZUZ1bmMgY2FsbF9iYWNrLAorICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgdXNl
cl9kYXRhKQoreworICBYRXZlbnQgZXZlbnQ7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGkg
PSAwOworCisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNwbGF5KTsK
KworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKworICAvKiBQcm9jZXNzIG9ubHkgcmVhbCBYIHRy
YWZmaWMgaGVyZS4gIFdlIG9ubHkgbG9vayBmb3IgZGF0YSBvbiB0aGUKKyAgICogcGlwZSwgbGlt
aXQgaXQgdG8gWFRCSU5fTUFYX0VWRU5UUyBhbmQgb25seSBjYWxsCisgICAqIFh0QXBwUHJvY2Vz
c0V2ZW50IHNvIHRoYXQgaXQgd2lsbCBsb29rIGZvciBYIGV2ZW50cy4gIFRoZXJlJ3Mgbm8KKyAg
ICogdGltZXIgcHJvY2Vzc2luZyBoZXJlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHRpbWVyIGNh
bGxiYWNrIHRoYXQKKyAgICogZG9lcyBpdC4gICovCisgIGZvciAoaT0wOyBpIDwgWFRCSU5fTUFY
X0VWRU5UUyAmJiBYUGVuZGluZyh4dGRpc3BsYXkpOyBpKyspIHsKKyAgICBYdEFwcFByb2Nlc3NF
dmVudChhYywgWHRJTVhFdmVudCk7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKwor
ICByZXR1cm4gVFJVRTsgIAorfQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50X2Z1bmNz
ID0geworICB4dF9ldmVudF9wcmVwYXJlLAorICB4dF9ldmVudF9jaGVjaywKKyAgeHRfZXZlbnRf
ZGlzcGF0Y2gsCisgIGdfZnJlZSwKKyAgKEdTb3VyY2VGdW5jKU5VTEwsCisgIChHU291cmNlRHVt
bXlNYXJzaGFsKU5VTEwKK307CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcG9sbGluZ190
aW1lcl9jYWxsYmFjayhncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIERpc3BsYXkgKiBkaXNwbGF5
OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsKKworICBk
aXNwbGF5ID0gKERpc3BsYXkgKil1c2VyX2RhdGE7CisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNh
dGlvbkNvbnRleHQoZGlzcGxheSk7CisKKyAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1hbnkgWHQg
ZXZlbnRzIGhlcmUuIElmIHdlIGp1c3QgcHJvY2VzcworICAgICBvbmUgZXZlbnQgd2UgbWlnaHQg
c3RhcnZlIG9uZSBvciBtb3JlIFh0IGNvbnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQKKyAgICAg
dGhpcyBjb3VsZCBoYW5nIHRoZSB3aG9sZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91cmluZyBp
bi4gU28gcHJvY2VzcworICAgICB1cCB0byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFuZCBzYXZl
IHRoZSByZXN0IGZvciBsYXRlci4gVGhpcyBpcyBhIGhhY2ssCisgICAgIGJ1dCBpdCBvdWdodGEg
d29yay4gV2UgKnJlYWxseSogc2hvdWxkIGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lucy4KKyAg
Ki8KKyAgd2hpbGUgKGV2ZW50c1RvUHJvY2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykpCisgICAg
WHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1BbGwpOworICByZXR1cm4gVFJVRTsKK30KKworR3Rr
VHlwZQorZ3RrX3h0YmluX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR3RrVHlwZSB4dGJp
bl90eXBlID0gMDsKKworICBpZiAoIXh0YmluX3R5cGUpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBH
dGtUeXBlSW5mbyB4dGJpbl9pbmZvID0KKyAgICAgIHsKKyAgICAgICAgIkd0a1h0QmluIiwKKyAg
ICAgICAgc2l6ZW9mIChHdGtYdEJpbiksCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW5DbGFzcyks
CisgICAgICAgIChHdGtDbGFzc0luaXRGdW5jKSBndGtfeHRiaW5fY2xhc3NfaW5pdCwKKyAgICAg
ICAgKEd0a09iamVjdEluaXRGdW5jKSBndGtfeHRiaW5faW5pdCwKKyAgICAgICAgLyogcmVzZXJ2
ZWRfMSAqLyBOVUxMLAorICAgICAgICAvKiByZXNlcnZlZF8yICovIE5VTEwsCisgICAgICAgIChH
dGtDbGFzc0luaXRGdW5jKSBOVUxMCisgICAgICB9OworICAgICAgeHRiaW5fdHlwZSA9IGd0a190
eXBlX3VuaXF1ZSAoR1RLX1RZUEVfU09DS0VULCAmeHRiaW5faW5mbyk7CisgICAgfQorICByZXR1
cm4geHRiaW5fdHlwZTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9jbGFzc19pbml0IChH
dGtYdEJpbkNsYXNzICprbGFzcykKK3sKKyAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9jbGFzczsK
KyAgR3RrT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBndGtf
dHlwZV9jbGFzcyAoR1RLX1RZUEVfU09DS0VUKTsKKworICB3aWRnZXRfY2xhc3MgPSBHVEtfV0lE
R0VUX0NMQVNTIChrbGFzcyk7CisgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194dGJpbl9y
ZWFsaXplOworICB3aWRnZXRfY2xhc3MtPnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJlYWxpemU7
CisKKyAgb2JqZWN0X2NsYXNzID0gR1RLX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBvYmplY3Rf
Y2xhc3MtPmRlc3Ryb3kgPSBndGtfeHRiaW5fZGVzdHJveTsKK30KKworc3RhdGljIHZvaWQKK2d0
a194dGJpbl9pbml0IChHdGtYdEJpbiAqeHRiaW4pCit7CisgIHh0YmluLT54dGRpc3BsYXkgPSBO
VUxMOworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IE5VTEw7CisgIHh0YmluLT54dHdpbmRvdyA9
IDA7CisgIHh0YmluLT54ID0gMDsKKyAgeHRiaW4tPnkgPSAwOworfQorCitzdGF0aWMgdm9pZAor
Z3RrX3h0YmluX3JlYWxpemUgKEd0a1dpZGdldCAqd2lkZ2V0KQoreworICBHdGtYdEJpbiAgICAg
Knh0YmluOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDIwMCwgMjAwIH07
CisgIGdpbnQgIHgsIHksIHcsIGgsIGQ7IC8qIGdlb21ldHJ5IG9mIHdpbmRvdyAqLworCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVhbGl6ZSgpXG4iKTsKKyNlbmRp
ZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAod2lkZ2V0KSk7CisKKyAgeHRi
aW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisKKyAgLyogY2FjdWxhdGUgdGhlIGFsbG9jYXRpb24g
YmVmb3JlIHJlYWxpemUgKi8KKyAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoeHRiaW4tPnBhcmVu
dF93aW5kb3csICZ4LCAmeSwgJncsICZoLCAmZCk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB3Owor
ICBhbGxvY2F0aW9uLmhlaWdodCA9IGg7CisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSAod2lk
Z2V0LCAmYWxsb2NhdGlvbik7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImluaXRp
YWwgYWxsb2NhdGlvbiAlZCAlZCAlZCAlZFxuIiwgeCwgeSwgdywgaCk7CisjZW5kaWYKKworICB4
dGJpbi0+d2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgIHh0YmluLT5oZWlnaHQg
PSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworCisgIC8qIHVzZSBHdGtTb2NrZXQncyByZWFs
aXplICovCisgICgqR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWFsaXplKSh3aWRn
ZXQpOworCisgIC8qIGNyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldCAqLworICB4dF9jbGllbnRf
Y3JlYXRlKCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICAgZ3RrX3NvY2tldF9nZXRfaWQoR1RL
X1NPQ0tFVCh4dGJpbikpLCAKKyAgICAgICB4dGJpbi0+aGVpZ2h0LCAKKyAgICAgICB4dGJpbi0+
d2lkdGgpOworICB4dGJpbi0+eHR3aW5kb3cgPSBYdFdpbmRvdyh4dGJpbi0+eHRjbGllbnQuY2hp
bGRfd2lkZ2V0KTsKKworICBnZGtfZmx1c2goKTsKKworICAvKiBub3cgdGhhdCB3ZSBoYXZlIGNy
ZWF0ZWQgdGhlIHh0IGNsaWVudCwgYWRkIGl0IHRvIHRoZSBzb2NrZXQuICovCisgIGd0a19zb2Nr
ZXRfYWRkX2lkKEdUS19TT0NLRVQod2lkZ2V0KSwgeHRiaW4tPnh0d2luZG93KTsKK30KKworCisK
K0d0a1dpZGdldCoKK2d0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3Ry
aW5nICogZikKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBncG9pbnRlciB1c2VyX2RhdGE7CisK
KyAgYXNzZXJ0KHBhcmVudF93aW5kb3cgIT0gTlVMTCk7CisgIHh0YmluID0gZ3RrX3R5cGVfbmV3
IChHVEtfVFlQRV9YVEJJTik7CisKKyAgaWYgKCF4dGJpbikKKyAgICByZXR1cm4gKEd0a1dpZGdl
dCopTlVMTDsKKworICBpZiAoZikKKyAgICBmYWxsYmFjayA9IGY7CisKKyAgLyogSW5pdGlhbGl6
ZSB0aGUgWHQgdG9vbGtpdCAqLworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IHBhcmVudF93aW5k
b3c7CisKKyAgeHRfY2xpZW50X2luaXQoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgIEdES19W
SVNVQUxfWFZJU1VBTChnZGtfcmdiX2dldF92aXN1YWwoKSksCisgICAgICBHREtfQ09MT1JNQVBf
WENPTE9STUFQKGdka19yZ2JfZ2V0X2NvbG9ybWFwKCkpLAorICAgICAgZ2RrX3JnYl9nZXRfdmlz
dWFsKCktPmRlcHRoKTsKKworICBpZiAoIXh0YmluLT54dGNsaWVudC54dGRpc3BsYXkpIHsKKyAg
ICAvKiBJZiBYdE9wZW5EaXNwbGF5IGZhaWxlZCwgd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIuCisg
ICAgICogIEJhaWwgb3V0LgorICAgICAqLworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRm
KCJndGtfeHRiaW5faW5pdDogWHRPcGVuRGlzcGxheSgpIHJldHVybmVkIE5VTEwuXG4iKTsKKyNl
bmRpZgorICAgIGdfZnJlZSAoeHRiaW4pOworICAgIHJldHVybiAoR3RrV2lkZ2V0ICopTlVMTDsK
KyAgfQorCisgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJ1bm5pbmcgd2lkZ2V0LCBob29rIHRo
aXMgZGlzcGxheSBpbnRvIHRoZQorICAgICBtYWlubG9vcCAqLworICBpZiAoMCA9PSBudW1fd2lk
Z2V0cykgeworICAgIGludCAgICAgICAgICAgY251bWJlcjsKKyAgICAvKgorICAgICAqIGhvb2sg
WHQgZXZlbnQgbG9vcCBpbnRvIHRoZSBnbGliIGV2ZW50IGxvb3AuCisgICAgICovCisKKyAgICAv
KiB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGd0a19pbml0IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVk
ICovCisgICAgR1NvdXJjZSogZ3MgPSBnX3NvdXJjZV9uZXcoJnh0X2V2ZW50X2Z1bmNzLCBzaXpl
b2YoR1NvdXJjZSkpOworICAgICAgaWYgKCFncykgeworICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgfQorICAgIAorICAgIGdfc291cmNlX3NldF9wcmlvcml0eShncywgR0RLX1BSSU9SSVRZX0VW
RU5UUyk7CisgICAgZ19zb3VyY2Vfc2V0X2Nhbl9yZWN1cnNlKGdzLCBUUlVFKTsKKyAgICB0YWcg
PSBnX3NvdXJjZV9hdHRhY2goZ3MsIChHTWFpbkNvbnRleHQqKU5VTEwpOworI2lmZGVmIFZNUwor
ICAgIGNudW1iZXIgPSBYQ29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2Vsc2UKKyAgICBj
bnVtYmVyID0gQ29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2VuZGlmCisgICAgeHRfZXZl
bnRfcG9sbF9mZC5mZCA9IGNudW1iZXI7CisgICAgeHRfZXZlbnRfcG9sbF9mZC5ldmVudHMgPSBH
X0lPX0lOOyAKKyAgICB4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgPSAwOyAgICAvKiBobW0uLi4g
aXMgdGhpcyBjb3JyZWN0PyAqLworCisgICAgZ19tYWluX2NvbnRleHRfYWRkX3BvbGwgKChHTWFp
bkNvbnRleHQqKU5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHRfZXZlbnRf
cG9sbF9mZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfTE9XKTsK
KyAgICAvKiBhZGQgYSB0aW1lciBzbyB0aGF0IHdlIGNhbiBwb2xsIGFuZCBwcm9jZXNzIFh0IHRp
bWVycyAqLworICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPQorICAgICAgZ3RrX3RpbWVvdXRfYWRk
KDI1LAorICAgICAgICAgICAgICAgICAgICAgIChHdGtGdW5jdGlvbil4dF9ldmVudF9wb2xsaW5n
X3RpbWVyX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgIHh0ZGlzcGxheSk7CisgIH0K
KworICAvKiBCdW1wIHVwIG91ciB1c2FnZSBjb3VudCAqLworICBudW1fd2lkZ2V0cysrOworCisg
IC8qIEJ1aWxkIHRoZSBoaWVyYWNoeSAqLworICB4dGJpbi0+eHRkaXNwbGF5ID0geHRiaW4tPnh0
Y2xpZW50Lnh0ZGlzcGxheTsKKyAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhHVEtfV0lE
R0VUKHh0YmluKSwgcGFyZW50X3dpbmRvdyk7CisgIGdka193aW5kb3dfZ2V0X3VzZXJfZGF0YSh4
dGJpbi0+cGFyZW50X3dpbmRvdywgJnVzZXJfZGF0YSk7CisgIGlmICh1c2VyX2RhdGEpCisgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih1c2VyX2RhdGEpLCBHVEtfV0lER0VUKHh0
YmluKSk7CisKKyAgcmV0dXJuIEdUS19XSURHRVQgKHh0YmluKTsKK30KKwordm9pZAorZ3RrX3h0
YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KQor
eworICB4dGJpbi0+eCA9IHg7CisgIHh0YmluLT55ID0geTsKKworICBpZiAoR1RLX1dJREdFVF9S
RUFMSVpFRCAoeHRiaW4pKQorICAgIGdka193aW5kb3dfbW92ZSAoR1RLX1dJREdFVCAoeHRiaW4p
LT53aW5kb3csIHgsIHkpOworfQorCit2b2lkCitndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQg
KndpZGdldCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICBnaW50ICAgICAgIGhlaWdodCkKK3sKKyAgQXJnIGFyZ3NbMl07CisgIEd0a1h0Qmlu
ICp4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVzaXplICVwICVk
ICVkXG4iLCAodm9pZCAqKXdpZGdldCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKworICB4dGJp
bi0+aGVpZ2h0ID0gaGVpZ2h0OworICB4dGJpbi0+d2lkdGggID0gd2lkdGg7CisKKyAgLy8gQXZv
aWQgQmFkVmFsdWUgZXJyb3JzIGluIFh0U2V0VmFsdWVzCisgIGlmIChoZWlnaHQgPD0gMCB8fCB3
aWR0aCA8PTApIHsKKyAgICBoZWlnaHQgPSAxOworICAgIHdpZHRoID0gMTsKKyAgfQorICBYdFNl
dEFyZyhhcmdzWzBdLCBYdE5oZWlnaHQsIGhlaWdodCk7CisgIFh0U2V0QXJnKGFyZ3NbMV0sIFh0
TndpZHRoLCAgd2lkdGgpOworICBYdFNldFZhbHVlcyh4dGJpbi0+eHRjbGllbnQudG9wX3dpZGdl
dCwgYXJncywgMik7CisKKyAgLyogd2UgbmVlZCB0byBzZW5kIGEgc2l6ZSBhbGxvY2F0ZSBzbyB0
aGUgc29ja2V0IGtub3dzIGFib3V0IHRoZQorICAgICBzaXplIGNoYW5nZXMgKi8KKyAgYWxsb2Nh
dGlvbi54ID0geHRiaW4tPng7CisgIGFsbG9jYXRpb24ueSA9IHh0YmluLT55OworICBhbGxvY2F0
aW9uLndpZHRoID0geHRiaW4tPndpZHRoOworICBhbGxvY2F0aW9uLmhlaWdodCA9IHh0YmluLT5o
ZWlnaHQ7CisKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHdpZGdldCwgJmFsbG9jYXRpb24p
OworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX3VucmVhbGl6ZSAoR3RrV2lkZ2V0ICpvYmpl
Y3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisKKyNpZmRl
ZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl91bnJlYWxpemUoKVxuIik7CisjZW5k
aWYKKworICAvKiBndGtfb2JqZWN0X2Rlc3Ryb3koKSB3aWxsIGFscmVhZHkgaG9sZCBhIHJlZmNv
dW50IG9uIG9iamVjdAorICAgKi8KKyAgeHRiaW4gPSBHVEtfWFRCSU4ob2JqZWN0KTsKKyAgd2lk
Z2V0ID0gR1RLX1dJREdFVChvYmplY3QpOworCisgIEdUS19XSURHRVRfVU5TRVRfRkxBR1MgKHdp
ZGdldCwgR1RLX1ZJU0lCTEUpOworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAod2lkZ2V0KSkg
eworICAgIHh0X2NsaWVudF91bnJlYWxpemUoJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgfQorCisg
ICgqR1RLX1dJREdFVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKSh3aWRnZXQpOwor
fQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2Rlc3Ryb3kgKEd0a09iamVjdCAqb2JqZWN0KQor
eworICBHdGtYdEJpbiAqeHRiaW47CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0
a194dGJpbl9kZXN0cm95KClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAob2Jq
ZWN0ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9iamVjdCkp
OworCisgIHh0YmluID0gR1RLX1hUQklOIChvYmplY3QpOworCisgIGlmKHh0YmluLT54dHdpbmRv
dykgeworICAgIC8qIHJlbW92ZSB0aGUgZXZlbnQgaGFuZGxlciAqLworICAgIHh0X2NsaWVudF9k
ZXN0cm95KCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgICAgeHRiaW4tPnh0d2luZG93ID0gMDsKKwor
ICAgIG51bV93aWRnZXRzLS07IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KKworICAgIC8q
IElmIHRoaXMgaXMgdGhlIGxhc3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQgZGlzcGxh
eQorICAgICAgIGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KKyAgICBpZiAoMCA9PSBu
dW1fd2lkZ2V0cykgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoInJlbW92aW5n
IHRoZSBYdCBjb25uZWN0aW9uIGZyb20gdGhlIG1haW4gbG9vcFxuIik7CisjZW5kaWYKKyAgICAg
IGdfbWFpbl9jb250ZXh0X3JlbW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4dF9ldmVu
dF9wb2xsX2ZkKTsKKyAgICAgIGdfc291cmNlX3JlbW92ZSh0YWcpOworCisgICAgICBndGtfdGlt
ZW91dF9yZW1vdmUoeHRfcG9sbGluZ190aW1lcl9pZCk7CisgICAgICB4dF9wb2xsaW5nX3RpbWVy
X2lkID0gMDsKKyAgICB9CisgIH0KKworICBHVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcykt
PmRlc3Ryb3kob2JqZWN0KTsKK30KKworLyoKKyogRm9sbG93aW5nIGlzIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBYdCBYRW1iZWRkZWQgZm9yIGNsaWVudCBzaWRlCisqLworCisvKiBJbml0aWFsIFh0
IHBsdWdpbiAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9pbml0KCBYdENsaWVudCAqIHh0Y2xp
ZW50LCAKKyAgICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAg
ICBDb2xvcm1hcCB4dGNvbG9ybWFwLAorICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKQorewor
ICBYdEFwcENvbnRleHQgIGFwcF9jb250ZXh0OworICBjaGFyICAgICAgICAgKm1Bcmd2WzFdOwor
ICBpbnQgICAgICAgICAgIG1BcmdjID0gMDsKKworICAvKgorICAgKiBJbml0aWFsaXplIFh0IHN0
dWZmCisgICAqLworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT5j
aGlsZF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IE5VTEw7CisgIHh0
Y2xpZW50LT54dHZpc3VhbCAgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSAwOwor
ICB4dGNsaWVudC0+eHRkZXB0aCA9IDA7CisKKyAgaWYgKCF4dF9pc19pbml0aWFsaXplZCkgewor
I2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzdGFydGluZyB1cCBYdCBzdHVmZlxuIik7
CisjZW5kaWYKKyAgICBYdFRvb2xraXRJbml0aWFsaXplKCk7CisgICAgYXBwX2NvbnRleHQgPSBY
dENyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgIGlmIChmYWxsYmFjaykKKyAgICAgIFh0
QXBwU2V0RmFsbGJhY2tSZXNvdXJjZXMoYXBwX2NvbnRleHQsIGZhbGxiYWNrKTsKKworICAgIHh0
ZGlzcGxheSA9IFh0T3BlbkRpc3BsYXkoYXBwX2NvbnRleHQsIGdka19nZXRfZGlzcGxheSgpLCBO
VUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JhcHBlciIsIE5VTEwsIDAsICZt
QXJnYywgbUFyZ3YpOworICAgIGlmICh4dGRpc3BsYXkpCisgICAgICB4dF9pc19pbml0aWFsaXpl
ZCA9IFRSVUU7CisgIH0KKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSB4dGRpc3BsYXk7CisgIHh0
Y2xpZW50LT54dHZpc3VhbCAgID0geHR2aXN1YWw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0g
eHRjb2xvcm1hcDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggICAgPSB4dGRlcHRoOworfQorCisvKiBD
cmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXRzCisqICAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVu
dF9jcmVhdGUgKCBYdENsaWVudCogeHRjbGllbnQgLCAKKyAgICAgICAgICAgICAgICAgICBXaW5k
b3cgZW1iZWRkZXJpZCwgCisgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAg
ICAgICAgICAgICAgaW50IHdpZHRoICkgCit7CisgIGludCAgICAgICAgICAgbjsKKyAgQXJnICAg
ICAgICAgICBhcmdzWzZdOworICBXaWRnZXQgICAgICAgIGNoaWxkX3dpZGdldDsKKyAgV2lkZ2V0
ICAgICAgICB0b3Bfd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJ4dF9j
bGllbnRfY3JlYXRlKCkgXG4iKTsKKyNlbmRpZgorICB0b3Bfd2lkZ2V0ID0gWHRBcHBDcmVhdGVT
aGVsbCgiZHJhd2luZ0FyZWEiLCAiV3JhcHBlciIsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCwgMCk7CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gdG9wX3dpZGdl
dDsKKworICAvKiBzZXQgc2l6ZSBvZiBYdCB3aW5kb3cgKi8KKyAgbiA9IDA7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwg
WHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0VmFsdWVzKHRvcF93aWRnZXQsIGFyZ3Ms
IG4pOworCisgIGNoaWxkX3dpZGdldCA9IFh0VmFDcmVhdGVXaWRnZXQoImZvcm0iLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVXaWRnZXRDbGFzcywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCwgTlVMTCk7CisKKyAgbiA9
IDA7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRT
ZXRBcmcoYXJnc1tuXSwgWHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nb
bl0sIFh0TnZpc3VhbCwgICB4dGNsaWVudC0+eHR2aXN1YWwgKTsgbisrOworICBYdFNldEFyZyhh
cmdzW25dLCBYdE5kZXB0aCwgICAgeHRjbGllbnQtPnh0ZGVwdGggKTsgbisrOworICBYdFNldEFy
ZyhhcmdzW25dLCBYdE5jb2xvcm1hcCwgeHRjbGllbnQtPnh0Y29sb3JtYXAgKTsgbisrOworICBY
dFNldEFyZyhhcmdzW25dLCBYdE5ib3JkZXJXaWR0aCwgMCk7IG4rKzsKKyAgWHRTZXRWYWx1ZXMo
Y2hpbGRfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBG
QUxTRSk7CisgIHh0Y2xpZW50LT5vbGR3aW5kb3cgPSB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdzsK
KyAgdG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSBlbWJlZGRlcmlkOworCisgIC8qIHRoaXMgbGl0
dGxlIHRyaWNrIHNlZW1zIHRvIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHdpZGdldCAqLworI2lm
IFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0UmVnaXN0ZXJEcmF3YWJsZSh4dGNs
aWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVyaWQsCisgICAg
ICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbHNlCisgIF9YdFJlZ2lzdGVyV2luZG93
KCBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZW5kaWYK
KyAgWHRSZWFsaXplV2lkZ2V0KGNoaWxkX3dpZGdldCk7CisKKyAgLyogbGlzdGVuIHRvIGFsbCBY
dCBldmVudHMgKi8KKyAgWFNlbGVjdElucHV0KHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAg
ICAgICAgICAgWHRXaW5kb3codG9wX3dpZGdldCksIAorICAgICAgICAgICAgICAgMHgwRkZGRkYp
OworICB4dF9jbGllbnRfc2V0X2luZm8gKGNoaWxkX3dpZGdldCwgMCk7CisKKyAgWHRNYW5hZ2VD
aGlsZChjaGlsZF93aWRnZXQpOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gY2hpbGRfd2lk
Z2V0OworCisgIC8qIHNldCB0aGUgZXZlbnQgaGFuZGxlciAqLworICBYdEFkZEV2ZW50SGFuZGxl
cihjaGlsZF93aWRnZXQsCisgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGICYgflJlc2l6ZVJl
ZGlyZWN0TWFzaywKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAg
ICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOwor
ICBYdEFkZEV2ZW50SGFuZGxlcihjaGlsZF93aWRnZXQsIAorICAgICAgICAgICAgICAgICAgICBT
dWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAg
ICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2Ns
aWVudF9mb2N1c19saXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAg
WFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAoreHRf
Y2xpZW50X3VucmVhbGl6ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCApCit7CisjaWYgWGxpYlNwZWNp
ZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRVbnJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0
ZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNv
cmUud2luZG93KTsKKyNlbHNlCisgIF9YdFVucmVnaXN0ZXJXaW5kb3coeHRjbGllbnQtPnRvcF93
aWRnZXQtPmNvcmUud2luZG93LAorICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bf
d2lkZ2V0KTsKKyNlbmRpZgorCisgIC8qIGZsdXNoIHRoZSBxdWV1ZSBiZWZvcmUgd2UgcmV0dXJu
aW5nIG9yaWdpbiB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdworICAgICBvciB3ZSBjYW4gZ2V0IFgg
ZXJyb3Igc2luY2UgdGhlIHdpbmRvdyBpcyBnb25lICovCisgIFhTeW5jKHh0Y2xpZW50LT54dGRp
c3BsYXksIEZhbHNlKTsKKworICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSB4
dGNsaWVudC0+b2xkd2luZG93OworICBYdFVucmVhbGl6ZVdpZGdldCh4dGNsaWVudC0+dG9wX3dp
ZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgCit4dF9jbGllbnRfZGVzdHJveSAg
IChYdENsaWVudCogeHRjbGllbnQpCit7CisgIGlmKHh0Y2xpZW50LT50b3Bfd2lkZ2V0KSB7Cisg
ICAgWHRSZW1vdmVFdmVudEhhbmRsZXIoeHRjbGllbnQtPmNoaWxkX3dpZGdldCwgMHgwRkZGRkYs
IFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGll
bnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOworICAgIFh0RGVzdHJveVdpZGdldCh4dGNsaWVu
dC0+dG9wX3dpZGdldCk7CisgICAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB9Cit9
CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfc2V0X2luZm8gKFdpZGdldCB4dHBs
dWcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisgIHVuc2lnbmVkIGxvbmcgYnVmZmVyWzJdOwor
CisgIEF0b20gaW5mb0F0b20gPSBYSW50ZXJuQXRvbShYdERpc3BsYXkoeHRwbHVnKSwgIl9YRU1C
RURfSU5GTyIsIEZhbHNlKTsgCisKKyAgYnVmZmVyWzFdID0gMDsgICAgICAgICAgICAgICAgLyog
UHJvdG9jb2wgdmVyc2lvbiAqLworICBidWZmZXJbMV0gPSBmbGFnczsKKworICBYQ2hhbmdlUHJv
cGVydHkgKFh0RGlzcGxheSh4dHBsdWcpLCBYdFdpbmRvdyh4dHBsdWcpLAorICAgICAgICAgICAg
ICAgICAgIGluZm9BdG9tLCBpbmZvQXRvbSwgMzIsCisgICAgICAgICAgICAgICAgICAgUHJvcE1v
ZGVSZXBsYWNlLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCAy
KTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UoV2lk
Z2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGll
bnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIHN3aXRjaCAoZXZlbnQtPnhj
bGllbnQuZGF0YS5sWzFdKQorICB7CisgIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElGWToKKyAg
ICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0FDVElWQVRFOgorI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEVcbiIp
OworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFOgor
I2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5E
T1dfREVBQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9E
QUxJVFlfT046CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQg
WEVNQkVEX01PREFMSVRZX09OXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJF
RF9NT0RBTElUWV9PRkY6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVu
dCBnZXQgWEVNQkVEX01PREFMSVRZX09GRlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2Fz
ZSBYRU1CRURfRk9DVVNfSU46CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKKyAgICB7CisgICAg
ICBYRXZlbnQgeGV2ZW50OworICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4ZXZlbnQp
KTsKKworICAgICAgaWYoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9GT0NVU19J
TikgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9j
dXMgaW5cbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzSW47
CisgICAgICB9CisgICAgICBlbHNlIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmlu
dGYoIlhURU1CRUQgZ290IGZvY3VzIG91dFxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhm
b2N1cy50eXBlID0gRm9jdXNPdXQ7CisgICAgICB9CisKKyAgICAgIHhldmVudC54Zm9jdXMud2lu
ZG93ID0gWHRXaW5kb3coeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgeGV2ZW50Lnhmb2N1
cy5kaXNwbGF5ID0gWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIFhTZW5k
RXZlbnQoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAg
IHhldmVudC54Zm9jdXMud2luZG93LAorICAgICAgICAgICAgICAgICBGYWxzZSwgTm9FdmVudE1h
c2ssCisgICAgICAgICAgICAgICAgICZ4ZXZlbnQgKTsKKyAgICAgIFhTeW5jKCBYdERpc3BsYXko
eHRwbHVnLT5jaGlsZF93aWRnZXQpLCBGYWxzZSk7CisgICAgfQorICAgIGJyZWFrOworICBkZWZh
dWx0OgorICAgIGJyZWFrOworICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLworfQorCitz
dGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdldCB3LCBY
dFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBs
dWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICAKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQor
ICAgIHsKKyAgICBjYXNlIENsaWVudE1lc3NhZ2U6CisgICAgICAvKiBIYW5kbGUgeGVtYmVkIG1l
c3NhZ2UgKi8KKyAgICAgIGlmIChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQorICAgICAg
ICAgICAgICAgICBYSW50ZXJuQXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7CisgICAg
ICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEsIGV2ZW50
KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAg
ICBicmVhazsKKyAgICBjYXNlIE1hcHBpbmdOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2lu
Zm8gKHcsIFhFTUJFRF9NQVBQRUQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm1hcE5vdGlm
eToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgMCk7CisgICAgICBicmVhazsKKyAgICBj
YXNlIEZvY3VzSW46CisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsK
KyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNPdXQ6CisgICAgICBicmVhazsKKyAgICBjYXNl
IEtleVByZXNzOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoIktleSBQcmVzcyBH
b3QhXG4iKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFr
OworICAgIH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZv
aWQKK3NlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCisgICAgICAgICAg
ICAgICAgICAgICBsb25nICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcg
ICAgICBkZXRhaWwsIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGExLCAgCisg
ICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTIsICAKKyAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgICAgICB0aW1lKSAgIAoreworICBYRXZlbnQgeGV2ZW50OyAKKyAgV2luZG93IHc9
WHRXaW5kb3coeHRjbGllbnQtPnRvcF93aWRnZXQpOworICBEaXNwbGF5KiBkcHk9eHRjbGllbnQt
Pnh0ZGlzcGxheTsKKyAgaW50IGVycm9yY29kZTsKKworICBtZW1zZXQoJnhldmVudCwwLHNpemVv
Zih4ZXZlbnQpKTsKKyAgeGV2ZW50LnhjbGllbnQud2luZG93ID0gdzsKKyAgeGV2ZW50LnhjbGll
bnQudHlwZSA9IENsaWVudE1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9
IFhJbnRlcm5BdG9tKGRweSwiX1hFTUJFRCIsRmFsc2UpOworICB4ZXZlbnQueGNsaWVudC5mb3Jt
YXQgPSAzMjsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCisgIHhldmVudC54
Y2xpZW50LmRhdGEubFsxXSA9IG1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFsyXSA9
IGRldGFpbDsgCisgIHhldmVudC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICB4ZXZlbnQu
eGNsaWVudC5kYXRhLmxbNF0gPSBkYXRhMjsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWFNlbmRF
dmVudCAoZHB5LCB3LCBGYWxzZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOworICBYU3luYyAoZHB5
LEZhbHNlKTsKKworICBpZigoZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3IoJWQpISEh
XG4iLGVycm9yY29kZSk7CisjZW5kaWYKKyAgfQorfQorCitzdGF0aWMgaW50ICAgICAgICAgICAg
IAorZXJyb3JfaGFuZGxlcihEaXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJyb3IpCit7
CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9IGVycm9yLT5lcnJvcl9jb2RlOworICByZXR1cm4gMDsK
K30KKworc3RhdGljIHZvaWQgICAgICAgICAgCit0cmFwX2Vycm9ycyh2b2lkKQoreworICB0cmFw
cGVkX2Vycm9yX2NvZGUgPTA7CisgIG9sZF9lcnJvcl9oYW5kbGVyID0gWFNldEVycm9ySGFuZGxl
cihlcnJvcl9oYW5kbGVyKTsKK30KKworc3RhdGljIGludCAgICAgICAgIAordW50cmFwX2Vycm9y
KHZvaWQpCit7CisgIFhTZXRFcnJvckhhbmRsZXIob2xkX2Vycm9yX2hhbmRsZXIpOworICBpZih0
cmFwcGVkX2Vycm9yX2NvZGUpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiR2V0
IFggV2luZG93IEVycm9yID0gJWRcbiIsIHRyYXBwZWRfZXJyb3JfY29kZSk7CisjZW5kaWYKKyAg
fQorICByZXR1cm4gdHJhcHBlZF9lcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCAgICAgICAg
IAoreHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0
YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHcpOworICBY
dENsaWVudCAqeHRjbGllbnQgPSB1c2VyX2RhdGE7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh3
KTsKKworICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ3JlYXRlTm90aWZ5
OgorICAgICAgaWYoZXZlbnQtPnhjcmVhdGV3aW5kb3cucGFyZW50ID09IHdpbikgeworICAgICAg
ICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldCggZHB5LCBldmVudC0+eGNyZWF0ZXdpbmRv
dy53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xp
c3RlbmVyX3RyZWUoY2hpbGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBjYXNlIERlc3Ryb3lOb3RpZnk6CisgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHcs
IHVzZXJfZGF0YSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAg
ICAgaWYoZXZlbnQtPnhyZXBhcmVudC5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0g
dGhlIG5ldyBwYXJlbnQgKi8KKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQo
ZHB5LCBldmVudC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAg
ICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgICAg
ICB9CisgICAgICBlbHNlIGlmKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IHdpbikgeworICAg
ICAgICAvKiBJIGFtIHRoZSBuZXcgY2hpbGQgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAg
ICAgICAvKiBJIGFtIHRoZSBvbGQgcGFyZW50ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBjYXNlIEJ1dHRvblJlbGVhc2U6CisjaWYgMAorICAgICAgWFNldElucHV0Rm9jdXMoZHB5LCBY
dFdpbmRvdyh4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2ZW50LT54
YnV0dG9uLnRpbWUpOworI2VuZGlmCisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRjbGll
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAs
IDAsIDAsIDApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAg
IH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3h0
X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7Cisg
IFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7CisgIGxvbmcgZXZlbnRtYXNrOworICBYdENsaWVudCAq
eHRjbGllbnQgPSB1c2VyX2RhdGE7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMg
KCk7CisgIFhHZXRXaW5kb3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3codyksICZh
dHRyKTsKKyAgZXZlbnRtYXNrID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBTdWJzdHJ1Y3R1cmVO
b3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2s7CisgIFhTZWxlY3RJbnB1dChYdERpc3BsYXko
dyksCisgICAgICAgICAgICAgICBYdFdpbmRvdyh3KSwgCisgICAgICAgICAgICAgICBldmVudG1h
c2spOworCisgIFh0QWRkRXZlbnRIYW5kbGVyKHcsIAorICAgICAgICAgICAgICAgICAgICBTdWJz
dHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAg
ICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVu
dF9mb2N1c19saXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgdW50
cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIo
V2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGludCBlcnJvcmNvZGU7CisKKyAg
dHJhcF9lcnJvcnMgKCk7CisgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIFN1YnN0cnVjdHVyZU5v
dGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgVFJVRSwgCisgICAgICAgICAgICAgICAgICAg
ICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgdXNlcl9kYXRhKTsK
KworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0
ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKSAKK3sKKyAg
V2luZG93IHdpbiA9IFh0V2luZG93KHRyZWVyb290KTsKKyAgV2luZG93ICpjaGlsZHJlbjsKKyAg
V2luZG93IHJvb3QsIHBhcmVudDsKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHRyZWVyb290
KTsKKyAgdW5zaWduZWQgaW50IGksIG5jaGlsZHJlbjsKKworICAvKiBlbnN1cmUgd2UgZG9uJ3Qg
YWRkIG1vcmUgdGhhbiBvbmNlICovCisgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdHJlZXJv
b3QsIHVzZXJfZGF0YSk7CisgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJf
ZGF0YSk7CisgIHRyYXBfZXJyb3JzKCk7CisgIGlmKCFYUXVlcnlUcmVlKGRweSwgd2luLCAmcm9v
dCwgJnBhcmVudCwgJmNoaWxkcmVuLCAmbmNoaWxkcmVuKSkgeworICAgIHVudHJhcF9lcnJvcigp
OworICAgIHJldHVybjsKKyAgfQorCisgIGlmKHVudHJhcF9lcnJvcigpKSAKKyAgICByZXR1cm47
CisKKyAgZm9yKGk9MDsgaTxuY2hpbGRyZW47ICsraSkgeworICAgIFdpZGdldCBjaGlsZCA9IFh0
V2luZG93VG9XaWRnZXQoZHB5LCBjaGlsZHJlbltpXSk7CisgICAgaWYgKGNoaWxkKSAKKyAgICAg
IHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgfQorICBY
RnJlZSgodm9pZCopY2hpbGRyZW4pOworCisgIHJldHVybjsKK30KKwpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJE
ZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBhY2thZ2VH
dGs6On5QbHVnaW5QYWNrYWdlR3RrKCkKK3sKKyAgICBBU1NFUlQoIW1faXNMb2FkZWQpOworfQor
CitQbHVnaW5QYWNrYWdlR3RrOjpQbHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1f
bW9kdWxlKDApCisgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCisgICAgLCBtX2lz
TG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkKK3sKKyAgICBpbnQgcG9zID0gbV9w
YXRoLmRlcHJlY2F0ZWRTdHJpbmcoKS5maW5kUmV2KCcvJyk7CisKKyAgICBtX2ZpbGVOYW1lID0g
bV9wYXRoLnJpZ2h0KG1fcGF0aC5sZW5ndGgoKSAtIHBvcyAtIDEpOworCit9CisKK2Jvb2wgUGx1
Z2luUGFja2FnZUd0azo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgZ2NoYXIqIHR5cGVzID0gbV9OUF9HZXRNSU1FRGVz
Y3JpcHRpb24oKTsKKyAgICBnY2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7
IiwgLTEpOworICAgIGZvciAoaW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ld
WzBdOyBpKyspIHsKKyAgICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURl
c2NzW2ldLCAiOiIsIDMpOworCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6
ZnJvbVVURjgobWltZURhdGFbMl0pOworICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMgPSBnX3N0
cnNwbGl0KG1pbWVEYXRhWzFdLCAiLCIsIC0xKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBl
eHRWZWN0b3I7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisg
ICAgICAgICAgICBleHRWZWN0b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5zaW9uc1tq
XSkpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZl
Y3Rvcik7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVz
Y3JpcHRpb24pOworCisgICAgICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7CisgICAgICAgIGdf
c3RyZnJlZXYobWltZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7CisK
KyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0gbV9OUFBfR2V0VmFsdWUo
MCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJf
Tk9fRVJST1IpCisgICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7Cisg
ICAgZXJyID0gbV9OUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAm
YnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX2Rlc2Ny
aXB0aW9uID0gYnVmZmVyOworCisgICAgdW5sb2FkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6bG9hZCgpCit7CisgICAgaWYgKG1faXNMb2FkZWQpIHsK
KyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgbV9tb2R1bGUgPSBnX21vZHVsZV9vcGVuKChtX3BhdGgudXRmOCgpKS5kYXRhKCksIEdfTU9E
VUxFX0JJTkRfTE9DQUwpOworICAgIGlmICghbV9tb2R1bGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIg
TlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVfc3ltYm9s
KG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUpOworICAg
IGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIsICh2b2lk
KiopJm1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1
bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKyAgICBnX21vZHVs
ZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJm1fTlBQX0dldFZhbHVl
KTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24g
fHwgIW1fTlBQX1NodXRkb3duIHx8ICFtX05QUF9HZXRWYWx1ZSkKKyAgICAgICAgZ290byBhYm9y
dDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3Mp
KTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9i
cm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBO
X1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJl
YWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0
cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVz
ID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50
OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1m
bHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0g
TlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBO
X0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bv
c3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7
CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93
c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93
c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1f
YnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5n
ZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9w
dXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93
c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0
ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVh
c2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdp
ZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRp
ZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVj
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1
bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVu
Y3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3Bl
cnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9
IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBf
TlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05Q
Tl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9w
ZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlv
bjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAg
IG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsK
KyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisK
KyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1bmxv
YWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2lu
UGFja2FnZUd0azo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9OUFBfU2h1dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQor
Cit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAg
aWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkQ291
bnQgPT0gMCk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAgIGdfbW9kdWxlX2Nsb3NlICht
X21vZHVsZSk7CisKKyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBhY2thZ2VH
dGsqIFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwYWNr
YWdlID0gbmV3IFBsdWdpblBhY2thZ2VHdGsocGF0aCwgbGFzdE1vZGlmaWVkKTsKKworICAgIGlm
ICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVsZXRlIHBhY2thZ2U7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGFja2FnZTsKK30KKwordW5z
aWduZWQgUGx1Z2luUGFja2FnZUd0azo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVkIGhh
c2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBt
X2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhh
c2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5zaWdu
ZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwo
Y29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYikKK3sK
KyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKworfQpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblN0cmVhbUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorCisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5o
PgorCisvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtlIHRvIHJldHVy
biAtMSB0byBpbmRpY2F0ZSBlcnJvcgorLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0IGNsYXNoIHdp
dGggdGhlbS4KK3N0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOworCit1c2luZyBz
dGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOworc3RhdGljIFN0cmVhbU1hcCYg
c3RyZWFtcygpCit7CisgICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1zOworICAgIHJl
dHVybiBzdGF0aWNTdHJlYW1zOworfQorCitQbHVnaW5TdHJlYW1HdGs6OlBsdWdpblN0cmVhbUd0
ayhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5v
dGlmeURhdGEpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3QpCisgICAg
LCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgLCBt
X25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90
aWZpY2F0aW9uKQorICAgICwgbV9sb2FkTWFudWFsbHkoZmFsc2UpCisgICAgLCBtX3N0cmVhbVN0
YXRlKFN0cmVhbUJlZm9yZVN0YXJ0ZWQpCisgICAgLCBtX2RlbGF5RGVsaXZlcnlUaW1lcih0aGlz
LCAmUGx1Z2luU3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCkKKyAgICAsIG1fZGVs
aXZlcnlEYXRhKDApCisgICAgLCBtX3RlbXBGaWxlSGFuZGxlKDApCisgICAgLCBtX3BsdWdpbkZ1
bmNzKHBsdWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5GdW5jcygpKQorICAgICwgbV9pbnN0YW5j
ZShwbHVnaW5WaWV3LT5pbnN0YW5jZSgpKQoreworICAgIEFTU0VSVChtX3BsdWdpblZpZXcpOwor
CisgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgbV9z
dHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0ubm90
aWZ5RGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKworICAgIHN0cmVh
bXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKworUGx1Z2luU3RyZWFtR3RrOjp+
UGx1Z2luU3RyZWFtR3RrKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1T
dGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGlmIChtX3N0cmVhbS51cmwp
CisgICAgICAgIGZyZWUoKGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJlYW1zKCkucmVt
b3ZlKCZtX3N0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFydCgpCit7Cisg
ICAgQVNTRVJUKCFtX2xvYWRNYW51YWxseSk7CisKKyAgICBtX2xvYWRlciA9IE5ldHNjYXBlUGx1
Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUobV9mcmFtZSwgdGhpcyk7CisKKyAgICBtX2xvYWRlci0+
c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7CisgICAgbV9sb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmFkZFBsdWdJblN0cmVhbUxvYWRlcihtX2xvYWRlci5nZXQoKSk7CisgICAgbV9sb2FkZXIt
PmxvYWQobV9yZXNvdXJjZVJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3Rv
cCgpCit7CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAobV9s
b2FkTWFudWFsbHkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICAgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURv
Y3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CisKKyAgICAg
ICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKKyAgICAgICAg
ICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJhbWUtPmxvYWRl
cigpLT5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNl
bCgpOworICAgICAgICBtX2xvYWRlciA9IDA7CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVh
bUd0azo6c3RhcnRTdHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVh
bUJlZm9yZVN0YXJ0ZWQpOworCisgICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBtX3Jlc291
cmNlUmVzcG9uc2UudXJsKCk7CisKKyAgICAvLyBTb21lIHBsdWdpbnMgKEZsYXNoKSBleHBlY3Qg
dGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNrIGRlY29kZWQgYXMgdGhpcyBpcyB0
aGUKKyAgICAvLyBmb3JtYXQgdXNlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAgICBpZiAo
cmVzcG9uc2VVUkwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisg
ICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRlY29kZV9zdHJpbmco
cmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0cmluZygpKS51dGY4KCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0cmluZygp
LnV0ZjgoKSk7CisgICAgCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1fcmVzb3VyY2VSZXNw
b25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKyAgICAKKyAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwor
CisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAgICBWZWN0b3I8
VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjogIik7CisK
KyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJjZVJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmll
bGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJhY3RlcnMoKSwg
c2VwYXJhdG9yLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGl0
LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1faGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgpOworCisgICAg
ICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNzZWQp
LCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAgICAvLyB3
aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0IGtu
b3duIGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5PiB0
cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
XSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVudEVuY29k
aW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1FbmNvZGlu
ZyIpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBjb250ZW50RW5j
b2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aCA9
IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMuZGF0YSgpOwor
ICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7CisgICAg
bV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsKKyAgICBtX3N0
cmVhbS5sYXN0bW9kaWZpZWQgPSBtX3Jlc291cmNlUmVzcG9uc2UubGFzdE1vZGlmaWVkRGF0ZSgp
OworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICBtX3RyYW5z
ZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9yZWFzb24gPSBX
ZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lzdHJl
YW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgorICAgIFJlZlB0
cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBOUEVycm9yIG5wRXJyID0g
bV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVUeXBl
U3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAgICAKKyAg
ICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3RyZWFt
IHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOworCisg
ICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBjYW5jZWxBbmREZXN0cm95
U3RyZWFtKG5wRXJyKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoKG1fdGVtcEZpbGVIYW5kbGUgPSB0bXBmaWxl
KCkpICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNvbWV0aGlu
ZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCisgICAgY2FuY2VsQW5kRGVz
dHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK05QUCBQbHVnaW5TdHJlYW1HdGs6
Om93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHN0cmVhbXMo
KS5nZXQoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmNhbmNlbEFuZERlc3Ry
b3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+
IHByb3RlY3QodGhpcyk7CisKKyAgICBkZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAgc3RvcCgp
OworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFz
b24pCit7CisgICAgbV9yZWFzb24gPSByZWFzb247CisgICAgaWYgKG1fcmVhc29uICE9IE5QUkVT
X0RPTkUpIHsKKyAgICAgICAgLy8gU3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20gYmVpbmcgc3Ry
ZWFtZWQKKyAgICAgICAgaWYgKG1fZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAgbV9kZWxpdmVy
eURhdGEtPnJlc2l6ZSgwKTsKKyAgICB9IGVsc2UgaWYgKG1fZGVsaXZlcnlEYXRhICYmIG1fZGVs
aXZlcnlEYXRhLT5zaXplKCkgPiAwKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG1vcmUgZGF0YSB0
byBiZSBzdHJlYW1lZCwgZG9uJ3QgZGVzdHJveSB0aGUgc3RyZWFtIG5vdy4KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBkZXN0cm95U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpkZXN0cm95U3RyZWFtKCkKK3sKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1T
dG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQgKG1fcmVhc29uICE9IFdlYlJl
YXNvbk5vbmUpOworICAgIEFTU0VSVCAoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZlcnlEYXRh
LT5zaXplKCkgPT0gMCk7CisKKyAgICBpZiAobV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxMKQorICAg
ICAgICBmY2xvc2UobV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICBpZiAobV9zdHJlYW0ubmRhdGEg
IT0gMCkgeworICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90cmFuc2Zl
ck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9OTFkpKSB7
CisgICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7CisKKyAgICAgICAgICAgIG1f
cGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC5kYXRhKCkp
OworICAgICAgICB9CisKKyAgICAgICAgTlBFcnJvciBucEVycjsKKyAgICAgICAgbnBFcnIgPSBt
X3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9yZWFz
b24pOworCisgICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9z
ZW5kTm90aWZpY2F0aW9uKQorICAgICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnkobV9pbnN0
YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLnV0ZjgoKSwg
bV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7CisKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3Rv
cHBlZDsKKworICAgIC8vIGRpc2Nvbm5lY3RTdHJlYW0gY2FuIGNhdXNlIHVzIHRvIGJlIGRlbGV0
ZWQuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKyAgICBpZiAo
IW1fbG9hZE1hbnVhbGx5KQorICAgICAgICBtX3BsdWdpblZpZXctPmRpc2Nvbm5lY3RTdHJlYW0o
dGhpcyk7CisKKyAgICBtX3BsdWdpblZpZXcgPSAwOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0
azo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luU3RyZWFtR3RrPiogdGltZXIp
Cit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX2RlbGF5RGVsaXZlcnlUaW1lcik7CisKKyAgICBk
ZWxpdmVyRGF0YSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVsaXZlckRhdGEoKQor
eworICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7CisgICAgCisgICAgaWYgKG1fc3RyZWFtU3Rh
dGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjYW5jZWwg
b3VyIGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24gZXJyb3Igc28gd2UgZG9uJ3QgcmVh
Y2ggdGhpcyBjYXNlCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRl
ICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgaWYgKCFtX3N0cmVhbS5uZGF0YSB8fCBt
X2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIGludDMy
IHRvdGFsQnl0ZXMgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIGludDMyIHRvdGFsQnl0
ZXNEZWxpdmVyZWQgPSAwOworCisgICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3Rh
bEJ5dGVzKSB7CisgICAgICAgIGludDMyIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53
cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7CisKKyAgICAgICAgaWYgKGRlbGl2ZXJ5
Qnl0ZXMgPD0gMCkgeworICAgICAgICAgICAgbV9kZWxheURlbGl2ZXJ5VGltZXIuc3RhcnRPbmVT
aG90KDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIHRvdGFsQnl0ZXMgLSB0b3RhbEJ5
dGVzRGVsaXZlcmVkKTsKKyAgICAgICAgICAgIGludDMyIGRhdGFMZW5ndGggPSBkZWxpdmVyeUJ5
dGVzOworICAgICAgICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRhKCkgKyB0
b3RhbEJ5dGVzRGVsaXZlcmVkOworCisgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YQorICAg
ICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1faW5zdGFuY2Us
ICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRhKTsKKyAgICAgICAg
ICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgeworICAgICAgICAgICAgICAgIGNhbmNlbEFuZERl
c3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlC
eXRlcywgZGF0YUxlbmd0aCk7CisgICAgICAgICAgICBtX29mZnNldCArPSBkZWxpdmVyeUJ5dGVz
OworICAgICAgICAgICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5dGVzOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAwKSB7CisgICAg
ICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICAgICAg
aW50IHJlbWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7Cisg
ICAgICAgICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVsaXZlcnlEYXRh
LT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7CisgICAgICAg
ICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgICAgICAg
ICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgICAgICAgICBkZXN0cm95
U3RyZWFtKCk7CisgICAgICAgIH0KKyAgICB9IAorfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6
c2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgQ1N0cmlu
ZyYgcmVzdWx0U3RyaW5nKQoreworICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCBSZXNvdXJjZVJl
c3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L3BsYWluIiwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpLCAi
IiwgIiIpKTsKKworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmluZy5kYXRhKCks
IHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlkRmluaXNoTG9hZGluZygwKTsKK30K
Kwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJ
blN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
K3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1T
dGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9
IHJlc3BvbnNlOworCisgICAgc3RhcnRTdHJlYW0oKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRl
ID09IFN0cmVhbVN0YXJ0ZWQpOworICAgIAorICAgIGlmICghbV9kZWxpdmVyeURhdGEpCisgICAg
ICAgIG1fZGVsaXZlcnlEYXRhLnNldChuZXcgVmVjdG9yPGNoYXI+KTsKKworICAgIGludCBvbGRT
aXplID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXpl
KG9sZFNpemUgKyBsZW5ndGgpOworICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsg
b2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWluIGNhbmNlbHMg
dGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKKyAgICAvLyBz
byBwcm90ZWN0IGl0IGhlcmUuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0
aGlzKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKQorICAgICAg
ICBkZWxpdmVyRGF0YSgpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFtU3RvcHBl
ZCAmJiBtX3RlbXBGaWxlSGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgaW50IHdyaXR0ZW47Cisg
ICAgICAgIGJvb2wgcmV0dmFsID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFyZXR2YWwgfHwgZnB1
dHMoZGF0YSwgbV90ZW1wRmlsZUhhbmRsZSkgPD0gMCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERl
c3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5T
dHJlYW1HdGs6OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisK
KyAgICBtX2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJS
KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9h
ZGVyKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKworICAg
IG1fbG9hZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvKiAt
Ki0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNp
Yy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6
ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBN
UEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxl
IGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEu
MSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29m
dHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExp
Y2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQg
SW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmln
aW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVh
dGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJp
YnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmls
ZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICog
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRl
ciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBH
UEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUu
IElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9u
bHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5k
IG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBi
eSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhl
IG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0
aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBh
IHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRo
ZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgor
ICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBfX0dUS19Y
VEJJTl9IX18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsvZ3Rrc29j
a2V0Lmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5o
PgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNpbmNsdWRl
ICJuc2NvcmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RLWFRCSU5f
QVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0
eXBlKSBOU19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQ
SSh0eXBlKSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsK
KyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW4gR3Rr
WHRCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNzOworCisj
ZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9nZXRfdHlw
ZSAoKSkKKyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RLX0NIRUNL
X0NBU1QgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFTUyhrbGFz
cykgICAgICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbkNs
YXNzKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RLX0NIRUNL
X1RZUEUgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdUS19UWVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAgICAg
ICAoR1RLX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1Y3QgX1h0
Q2xpZW50IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkqeHRkaXNw
bGF5OworICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAqLwor
ICBXaWRnZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLworICBWaXN1
YWwJKnh0dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3JtYXA7Cisg
IFdpbmRvdwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0a1NvY2tl
dCAgICAgIGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7CisgIERpc3Bs
YXkgICAgICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLworCisg
IFdpbmRvdyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRvdyAq
LworICBnaW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0
OworICBYdENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1iZWQg
Ki8KK307CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENsYXNzIHdp
ZGdldF9jbGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0YmluX2dl
dF90eXBlICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25ldyAo
R2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJKHZvaWQp
ICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgICB5KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChHdGtX
aWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMgewor
ICAgIFh0VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8gVHJh
bnNsYXRpb24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxlOyAg
ICAgICAgIC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAgIHN0cnVj
dCBfWHRTdGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIgc3Rh
dGUgcHRyICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOworfSBYdFRN
UmVjLCAqWHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBXaWRnZXQg
ICAgICAgICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNlbGYg
ICAgICAgICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAvKiBw
b2ludGVyIHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAgICAgICAg
cGFyZW50OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAgICAg
Ki8KKyAgICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQgcmVz
b3VyY2UgbmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVpbmdfZGVz
dHJveWVkOyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KKyAgICBY
dENhbGxiYWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVuIHdp
ZGdldCBkZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAgICAg
ICAvKiBjb25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3NpdGlvbiAg
ICAgICAgeCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAgICAg
ICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3aW5k
b3cgZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgYm9y
ZGVyX3dpZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAgKi8K
KyAgICBCb29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQgZ2Vv
bWV0cnkgbWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZlOyAg
ICAgICAgICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAgICBCb29s
ZWFuICAgICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBzZW5z
aXRpdmU/ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAgICAv
KiBwcml2YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVjICAgICAg
ICAgdG07ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAgICAg
ICAgKi8KKyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2NlbGVy
YXRvciB0cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYm9yZGVy
X3BpeGVsOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8KKyAg
ICBQaXhtYXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBp
eG1hcCBvciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsgICAg
ICAgICAvKiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5h
bCAgICAgICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAgICAg
ICAgICAgICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAvKiB3
aWRnZXQgcmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAgICAgICAg
KnNjcmVlbjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAgICAg
Ki8KKyAgICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1hcCAg
ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2luZG93OyAg
ICAgICAgICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBD
YXJkaW5hbCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVzIGlu
IHdpbmRvdyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhlbDsg
ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXhtYXAgICAg
ICAgICAgYmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAgb3Ig
TlVMTCAgKi8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBpcyB3
aW5kb3cgbWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAgICAgbWFw
cGVkX3doZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAgKi8K
K30gQ29yZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENvcmVQYXJ0
ICAgIGNvcmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2NwbHVzcGx1
cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRCSU5fSF9f
ICovCisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFi
b3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luU3Ry
ZWFtR3RrX0gKKyNkZWZpbmUgUGx1Z2luU3RyZWFtR3RrX0gKKworI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSAibnBmdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3Mg
UGx1Z2luVmlld0d0azsKKworICAgIGVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1CZWZv
cmVTdGFydGVkLCBTdHJlYW1TdGFydGVkLCBTdHJlYW1TdG9wcGVkIH07CisKKyAgICBjbGFzcyBQ
bHVnaW5TdHJlYW1HdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW1HdGs+LCBwcml2
YXRlIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFBsdWdpblN0cmVhbUd0ayhQbHVnaW5WaWV3R3RrKiwgRnJhbWUqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAg
ICAgICB+UGx1Z2luU3RyZWFtR3RrKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0YXJ0KCk7
CisgICAgICAgIHZvaWQgc3RvcCgpOworCisgICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKKwor
ICAgICAgICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRN
YW51YWxseSA9IGxvYWRNYW51YWxseTsgfQorCisgICAgICAgIC8vIE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXIqKTsKKworICAgICAgICB2b2lkIHNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJl
cXVlc3RVUkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZyk7CisgICAgICAgIHZvaWQgY2Fu
Y2VsQW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisKKyAgICAgICAgc3RhdGljIE5QUCBvd25l
ckZvclN0cmVhbShOUFN0cmVhbSopOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZGVsaXZl
ckRhdGEoKTsKKyAgICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKyAgICAgICAg
dm9pZCBkZXN0cm95U3RyZWFtKCk7CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3Vy
Y2VSZXF1ZXN0OworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsK
KworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyPiBtX2xvYWRlcjsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5W
aWV3OworICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90
aWZpY2F0aW9uOworICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOworICAg
ICAgICBib29sIG1fbG9hZE1hbnVhbGx5OworCisgICAgICAgIFRpbWVyPFBsdWdpblN0cmVhbUd0
az4gbV9kZWxheURlbGl2ZXJ5VGltZXI7CisgICAgICAgIHZvaWQgZGVsYXlEZWxpdmVyeVRpbWVy
RmlyZWQoVGltZXI8UGx1Z2luU3RyZWFtR3RrPiopOworCisgICAgICAgIE93blB0cjwgVmVjdG9y
PGNoYXI+ID4gbV9kZWxpdmVyeURhdGE7CisKKyAgICAgICAgRklMRSogbV90ZW1wRmlsZUhhbmRs
ZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBtX3BsdWdpbkZ1bmNzOworICAgICAg
ICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2IG1fdHJhbnNmZXJNb2RlOworICAgICAg
ICBpbnQzMiBtX29mZnNldDsKKyAgICAgICAgQ1N0cmluZyBtX2hlYWRlcnM7CisgICAgICAgIENT
dHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNvbiBtX3JlYXNvbjsKKyAgICAgICAgTlBTdHJl
YW0gbV9zdHJlYW07CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3Jh
LCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2Fn
ZUd0a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5o
PgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJu
cGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0
aWFsaXplRnVuY1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAg
Y2xhc3MgUGx1Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VH
dGs+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAg
IHN0YXRpYyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmls
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlN
RVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFw
JiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9
CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBi
KTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAg
ICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdp
bkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsK
KworICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKwor
ICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAg
ICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBN
SU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxl
KiBtX21vZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisgICAgICAgIE5Q
X0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAg
ICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAgICAgIE5QUF9HZXRW
YWx1ZVByb2NQdHIgbV9OUFBfR2V0VmFsdWU7CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVn
aW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworICAgIH07
CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFz
aCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGlu
dCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihh
KSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlR3RrOjpl
cXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVn
IGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0
aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRv
IGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3Bh
Y2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJD
b3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luUGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVm
UHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAg
ICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBIYXNoOworICAgICAg
ICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAgIH07Cit9CisKKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKworI2luY2x1ZGUg
IlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpp
bnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIHBsdWdp
bnMgPSAwOworICAgIAorICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3
IFBsdWdpbkRhdGFiYXNlR3RrOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVn
aW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5y
ZWZyZXNoKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2lu
RGF0YWJhc2VHdGs6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29s
IFBsdWdpbkRhdGFiYXNlR3RrOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1
Z2luczsKKworICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3Jl
YXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBh
dGhzKCk7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdp
c3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1Vu
bG9hZCA9IG1fcGx1Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9w
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMu
cmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0g
cGx1Z2luc1RvVW5sb2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1
Z2lucworICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5T
ZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNF
bXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7Cisg
ICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsK
KyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7
CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAg
ICB9CisKKyAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMo
KS5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQg
IT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5hZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1
Z2luU2V0Q2hhbmdlZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiBQbHVnaW5EYXRh
YmFzZUd0azo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsq
PiByZXN1bHQ7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQp
LmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRh
YmFzZUd0azo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1
bmlxdWVGaWxlbmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBQbHVnaW5QYWNr
YWdlR3RrKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VHdGsqIG5ld1dNUFBs
dWdpbiA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
bHVnaW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEdEaXIqIGRpciA9IGdfZGlyX29wZW4oKGl0LT51dGY4KCkpLmRhdGEoKSwgMCwgTlVMTCk7Cisg
ICAgICAgIGlmIChkaXIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAg
ICAgICB3aGlsZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChuYW1lLCAiLiIgR19NT0RVTEVfU1VGRklYKSkgewor
ICAgICAgICAgICAgICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChp
dC0+dXRmOCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFj
a2FnZShmaWxlbmFtZSwgdGltZShOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVn
aW5QYWNrYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFj
a2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGlyKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5l
IFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJp
bmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9z
ID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwg
dmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9z
OyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAg
IGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9z
XSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25D
b21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3Rh
cnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQp
OworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
dmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVy
IHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3Qg
VmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJl
LCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0
cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
VmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciogaG9tZVBhdGggPSBnX2J1
aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVM
TCk7CisgICAgcGF0aHMuYXBwZW5kKGhvbWVQYXRoKTsKKyAgICBnX2ZyZWUoaG9tZVBhdGgpOwor
CisgICAgY29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7
CisgICAgaWYgKG1velBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ry
c3BsaXQobW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVn
aW5QYXRoc1tpXTsgaSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ld
KTsKKworICAgICAgICBnX2ZyZWUocGx1Z2luUGF0aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBl
bmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgi
L3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jv
b2wgUGx1Z2luRGF0YWJhc2VHdGs6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3Jl
Z2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdl
R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKK3sKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250
YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1
Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9l
bmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlN
RVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9F
eHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7Cisg
ICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNl
Y29uZDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRl
bnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNr
YWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2lu
ID0gMDsKKworICAgIGlmICghbWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBs
dWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAg
ICAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24g
PSBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBw
bHVnaW4gPSBwbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhN
RTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWlt
ZSB0eXBlIAorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAg
fQorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJh
c2VHdGs6OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBh
Y2thZ2VHdGsqIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAg
Ly8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBz
ZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBs
dWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBu
ZXcgUGx1Z2luVmlld0d0ayhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmws
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVn
aW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJh
c2VHdGsgKmRiID0gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQ
bHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZUd0ayog
cGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+
bmFtZSgpOworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8t
PmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlv
bnMoKTsKKyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1p
bWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5m
bzsKKyAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAg
bWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7
CisgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1p
bWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0
ZW5zaW9uc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1
bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUo
KTsKK30KKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZCBvbiBHVEsrCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFBsdWdJbkluZm9T
dG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAK
K3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNN
SU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJv
b2wgcmVsb2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQ
bHVnaW5zKCktPnJlZnJlc2goKTsKKworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAg
ICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJD
b3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlz
aW9uIDI4OTExKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2
LDYgKzEzNiw3IEBAIERFUEVORFBBVEggKz0gZWRpdGluZy9xdCBoaXN0b3J5L3F0IGxvYWQKIGd0
ay1wb3J0IHsKICAgICB4MTE6cGx1Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAor
ICAgICAgICBMSUJTICs9IC1sWHQKICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0x
NzEsNiArMTcyLDcgQEAgZ3RrLXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hi
bSBcCiAgICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwK
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dl
YlZpZXcKIH0KQEAgLTg0NywxMyArODQ5LDM5IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xU
UHJvY2Vzc29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9
IEdUS19ESVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMv
Z3RrL1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmgg
XAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsv
UGx1Z2luU3RyZWFtR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAorCiAg
IFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5jcHAgXAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYWxsYmFja0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsu
Y3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdp
bnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5TdHJl
YW1HdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAgcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0gXAor
ICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICBwbHVnaW5zL2d0ay9ucGZ1bmN0aW9u
cy5oIFwKKyAgICBwbHVnaW5zL2d0ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAg
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk1Myw2ICs5
ODEsNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4u
L1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0LmggXApJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDI4OTEx
KQorKysgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDE0ICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
KwogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5o
IgogCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisj
aW5jbHVkZSAicnVudGltZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0
KikKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VG
b3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5j
ZSgpOwogfQogCiB2b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAyODkxMSkKKysrIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAK
ICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1Niw3IEBA
IG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NYVmVyc2lvbjsKIG15ICRpc1F0OwogbXkg
JGlzR3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBteSAkaXNXeDsKIAogIyBWYXJpYWJsZXMg
Zm9yIFdpbjMyIHN1cHBvcnQKQEAgLTQ4MCw2ICs0ODIsMjMgQEAgc3ViIGRldGVybWluZUlzR3Rr
KCkKICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICBkZXRlcm1pbmVF
bmFibGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRlbmFibGVHdGtQbHVnaW5zOworfQorCitz
dWIgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgcmV0dXJuIGlmIGRlZmluZWQo
JGVuYWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNoZWNrQXJndigiLS1kaXNhYmxlLWd0ay1w
bHVnaW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAwOworICAgIH0gZWxzZSB7
CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsKKyAgICB9Cit9CisKIHN1YiBpc1d4KCkK
IHsKICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC03NzksNiArNzk4LDcgQEAgc3ViIGJ1aWxkUU1h
a2VHdGtQcm9qZWN0KCQkKQogCiAgICAgbXkgQGJ1aWxkQXJncyA9ICgiQ09ORklHKz1ndGstcG9y
dCIpOwogICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRy09cXQiOworICAgIHB1c2ggQGJ1aWxk
QXJncywgIkNPTkZJRys9cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lucygpOwogCiAgICAgcmV0
dXJuIGJ1aWxkUU1ha2VQcm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18094</attachid>
            <date>2007-12-24 13:02:20 -0800</date>
            <delta_ts>2007-12-24 14:46:24 -0800</delta_ts>
            <desc>Updated plug-ins patch</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>170901</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShyZXZpc2lvbiAyODk3NSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksMTIgKzUwLDE3IEBACiAjaW5jbHVkZSA8c3lzL3V0
c25hbWUuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2Fk
ZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50
KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2MCw5ICsxNjYsMzAgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxv
YWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJh
bWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2Fk
ZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAg
ICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgor
ICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAg
ICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAo
IXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZy
YW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAg
ICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9u
c2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0
aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
IGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI1OCw4ICsy
ODUsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQog
Ci1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYs
IEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKIHsKKyAgICBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3ID0g
UGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+Y3JlYXRlUGx1Z2luVmlldyhj
b3JlKG1fZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5z
dGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
biBwbHVnaW5WaWV3OworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTMwMSw4ICszMzMsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6
Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdl
dCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwor
ICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihwbHVnaW5XaWRn
ZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTMy
NCw2ICszNTUsOSBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudDo6b2JqCiAg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSh0eXBlKSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRJbWFnZTsKIAorICAgIGlmIChQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJl
ZChtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50TmV0c2Nh
cGVQbHVnaW47CisKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEZy
YW1lOwogCkBAIC02MjMsMTQgKzY1NywxNCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6Omdl
bmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50TG9h
ZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUg
bG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUK
LSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgot
ICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7
Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNv
ZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9u
c2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVy
KCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9wbHVn
aW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAg
ICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4g
PSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzUzLDkgKzc4NywxMyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1h
aW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmll
dyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4OTc1KQorKysgV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xODAsNiArMTgzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRX
ZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAg
Ly8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVn
aW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
dmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
Y3BwCShyZXZpc2lvbiAyODk3NSkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgzLDYgKzg4Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19pbml0KFdlYktpdFcKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZh
bWlseSgiQXJpYWwiKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVy
IE5ldyIpOwogICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFyaWFsIik7Cisg
ICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwogCiAgICAgR1RLX1dJREdFVF9T
RVRfRkxBR1Mod2ViVmlldywgR1RLX0NBTl9GT0NVUyk7CiAgICAgd2ViVmlld0RhdGEtPm1haW5G
cmFtZSA9IFdFQktJVF9XRUJfRlJBTUUod2Via2l0X3dlYl9mcmFtZV9uZXcod2ViVmlldykpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZp
c2lvbiAyODk3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nyw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVz
b3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1
Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotU3Ry
aW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9IAotYm9vbCBX
ZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29y
ZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3Ig
V2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdl
YkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkocmV2aXNpb24gMjg5NzUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUs
NSArMzA1LDIyIEBAIHZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib28KIAog
dm9pZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0CiB7CisgICAgaWYgKCFwYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAg
IEludFBvaW50IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFt
ZUdlb21ldHJ5KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYWxsb2Nh
dGlvbiBzaXplIHRvIGJlIG5lZ2F0aXZlCisgICAgSW50U2l6ZSBzeiA9IGZyYW1lR2VvbWV0cnko
KS5zaXplKCk7CisgICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWln
aHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9j
YXRpb24pOwogfQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBsdWdpbkRhdGFiYXNlR3RrX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VHdGtfSAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBF
bGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3Mg
S1VSTDsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblZpZXdH
dGs7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+LCBQbHVn
aW5QYWNrYWdlR3RrSGFzaD4gUGx1Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFz
ZUd0ayB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIGlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogY3JlYXRlUGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblBhY2thZ2VHdGsqPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1F
VHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIHZv
aWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1f
cGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0
aHMoKSBjb25zdDsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUd0ayogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbik7CisKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5Q
YXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7CisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CisgICAgICAgIFBsdWdpblNl
dCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJl
YW1HdGsuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNs
dWRlICJranNfd2luZG93LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRl
ICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8a2pzL0pT
TG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorCisjaWYgZGVmaW5lZChHREtfV0lORE9X
SU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyNpbmNsdWRlICJndGsy
eHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRP
V0lOR19XSU4zMgorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtK
Uzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2Nr
OwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6
VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrIHsKK3B1YmxpYzoK
KyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKKyAgICAgICAg
OiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAgICAgICAgLCBtX25vdGlm
eURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlm
aWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgIHZv
aWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KKyAgICBib29s
IHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247IH0K
K3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7CisgICAg
dm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgIC8v
IEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsID0gMC4wMDE7CisKK2NsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsgeworcHVibGljOgorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsoUGx1Z2luVmll
d0d0ayogcGx1Z2luVmlldykKKyAgICAgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAgICAgLCBtX2JhY2soMCksIG1fZnJvbnQoMCkKKyAgICAgICAgLCBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOjptZXNzYWdlVGhyb3R0bGVU
aW1lckZpcmVkKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdp
dGggb3VyIGlubGluZSBtZXNzYWdlcworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
TnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgICAgICBtX2lubGluZU1lc3NhZ2Vz
W2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAgICAgIG1faW5saW5lTWVz
c2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKKyAgICAgICAgbV9mcmVlSW5s
aW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKKyAgICB9CisKKyAgICB+UGx1Z2lu
TWVzc2FnZVRocm90dGxlckd0aygpCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlKiBuZXh0
OworICAgIAorICAgICAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBt
ZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPm5l
eHQ7CisgICAgICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgfSAgICAgICAg
CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTWVzc2FnZShYSUQgaFduZCwgZ3VpbnQgbXNn
LCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSkgCisgICAgeworICAgICAgICBQbHVnaW5NZXNz
YWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICAgICAgbWVzc2FnZS0+aFdu
ZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKKyAgICAgICAgbWVzc2FnZS0+
d1BhcmFtID0gd1BhcmFtOworICAgICAgICBtZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07CisgICAg
ICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisgICAgICAgIGlmIChtX2JhY2spCisgICAgICAgICAg
ICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgICAgICBtX2JhY2sgPSBtZXNzYWdlOworICAg
ICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICBtX2Zyb250ID0gbWVzc2FnZTsKKworICAg
ICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
IG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJ
bnRlcnZhbCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsK
KyAgICAgICAgWElEIGhXbmQ7CisgICAgICAgIGd1aW50IG1zZzsKKyAgICAgICAgZ3VpbnQgd1Bh
cmFtOworICAgICAgICBnbG9uZyBsUGFyYW07CisKKyAgICAgICAgc3RydWN0IFBsdWdpbk1lc3Nh
Z2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIG1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4qKQorICAgIHsKKyAgICAgICAgUGx1
Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7CisgICAgICAgIG1fZnJvbnQgPSBtX2Zyb250
LT5uZXh0OworICAgICAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisgICAgICAgICAgICBtX2Jh
Y2sgPSAwOworCisJLy8gICAgICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVn
aW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFt
LCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworCisg
ICAgICAgIGlmIChtX2Zyb250KQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5z
dGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKKyAgICB9CisKKyAgICBQ
bHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVz
c2FnZSAqbWVzc2FnZTsKKworICAgICAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgICAgIG1f
ZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAgICAgICAgcmV0dXJuIG1l
c3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBpc0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSog
bWVzc2FnZSkgCisgICAgeworICAgICAgICByZXR1cm4gbWVzc2FnZSA+PSAmbV9pbmxpbmVNZXNz
YWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2Vz
IC0gMV07CisgICAgfQorCisgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNz
YWdlKSAKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICB9CisKKyAgICBQbHVnaW5WaWV3R3RrKiBtX3Bs
dWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2FnZSogbV9iYWNrOworICAgIFBsdWdpbk1lc3NhZ2Uq
IG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsK
KyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXNdOwor
ICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOworCisgICAgVGltZXI8UGx1
Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKK307CisKK3N0
YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICBpZiAoIXVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVu
ZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VSTDo6ZGVjb2RlX3N0cmluZyh1cmwuZGVwcmVj
YXRlZFN0cmluZygpLm1pZCgxMSkpOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3Rr
OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKKworY29uc3Qgd2NoYXJfdCoga1dlYlBsdWdpblZp
ZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3Qgd2NoYXJfdCoga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7
IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gv
Mi4wIjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAg
IGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYgKG1fd2luZG93ICYmIChtX3dp
bmRvd1JlY3QgIT0gb2xkV2luZG93UmVjdCB8fCBtX2NsaXBSZWN0ICE9IG9sZENsaXBSZWN0KSkg
eworICAgICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCks
IG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVp
Z2h0KCkgfTsKKyAgICAgICAgaWYgKG1fd2lkZ2V0KSB7CisgICAgICAgICAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNpZiBkZWZpbmVkKEdES19X
SU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgICAgICAg
ICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpKTsKKyAgICAgICAgICAgICAgICBndGtfeHRiaW5fcmVzaXplKG1fd2lkZ2V0LCBtX3dp
bmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCitJbnRSZWN0IFBsdWdpblZpZXdHdGs6Ondp
bmRvd0NsaXBSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byBvdXIg
Ym91bmRzLgorICAgIEludFJlY3QgY2xpcFJlY3QobV93aW5kb3dSZWN0KTsKKyAgICAKKyAgICAv
LyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNsb3Np
bmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9lbGVt
ZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIEZyYW1lVmlldyogcGFyZW50
VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGNsaXBSZWN0LmludGVy
c2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckxheWVyKGxheWVyLCB0cnVlKSk7CisK
KyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJhbWVH
ZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRvY3Vt
ZW50KCktPnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZy
YW1lR2VvbWV0cnkoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOwor
CisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3co
KTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgp
OworICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3Vz
KCkKK3sKKyAgICAvL2lmIChYSUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TZXRGb2N1cyh3
aW5kb3cpOworCisgICAgV2lkZ2V0OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OnNob3coKQoreworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIC8vaWYgKFhJRCB3
aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19TSE9XTkEpOwor
CisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7
CisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dp
bmRvdykKKyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19ISURFKTsKKworICAgIFdpZGdldDo6
aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24o
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0
YXRpYyBJbWFnZSogbnVsbFBsdWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQor
ICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51
bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCks
IGZyYW1lR2VvbWV0cnkoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdp
bkltYWdlLT5oZWlnaHQoKSk7CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCku
d2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJh
bWVHZW9tZXRyeSgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBp
bWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNl
Y3RzKGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJ
bWFnZShudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0
LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0
ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAg
ICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBO
ZWVkIHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAg
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0K
KworICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2
ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2
ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBpdCBv
biAqLworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAK
KworICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBucEV2
ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAg
IH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7Cisg
ICAgfQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
czsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAm
bnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisvL2V4
dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFu
ZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7
CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50UG9p
bnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRv
dyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8qCisg
ICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBFdmVu
dC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5wRXZl
bnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAg
ICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IG1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRF
dmVudCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgeworICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1
dHRvbkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50
LndQYXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVu
dC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVu
dC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVu
dCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2Fz
ZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKwor
ICAgICAgICAgICAgICAgIC8vIEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBtX3Bh
cmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJV
VFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZl
bnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBF
dmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRP
TlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICovCisK
KyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAg
ICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRn
ZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZl
bnRIYW5kbGVyLmNwcAorICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0
IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICAv
L2lnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9p
c1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVu
dCgpKQorICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihl
dmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAg
aGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQor
eworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lz
U3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVu
dCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cu
eCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53
aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0
KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53
aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsK
KworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKwor
ICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lO
UykKKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgZ3RrX3h0YmluX3NldF9wb3Np
dGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBhbGxvY2F0aW9uLngsIGFsbG9jYXRpb24ueSk7Cisg
ICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIGFsbG9jYXRpb24ud2lkdGgsIGFsbG9j
YXRpb24uaGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpz
dGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1f
bW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwor
ICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAg
IGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1f
bG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVz
dDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0
aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRVUkwobV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9w
KCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNo
U2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBI
YXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJh
dG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCpp
dCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAg
fQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQg
PSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwor
CisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0
ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsK
K30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQor
eworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3Jl
YXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBz
dHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZh
c3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3Ry
LmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0
aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJh
eVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdl
dFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcp
Cit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRl
KiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgVVN0cmlu
ZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayog
cmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2Ny
aXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgaWYgKGpzU3RyaW5n
LmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51cmxTZWxlY3Rl
ZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAg
ICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQg
d2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRlZFN0cmluZygpLnV0
ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVl
c3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFT
Y3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9h
ZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlz
RW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAvLyBF
eGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95
ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBSZWZQ
dHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSogcmVz
dWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcuZGVw
cmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmlu
ZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKSwg
cmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
dHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW1HdGs+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgcGFyZW50RnJhbWUu
Z2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVx
dWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAg
ICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRT
dHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBB
U1NFUlQodGltZXIgPT0gJm1fcmVxdWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5z
aXplKCkgPiAwKTsKKworICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3Rz
WzBdOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEg
bmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwg
dG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJl
IGRlbGV0ZWQuCisgICAgaWYgKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1
ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RH
dGsqIHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9y
ZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisg
ICAgS1VSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwor
ICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJ
RF9VUkw7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUo
KTsKKworICAgIC8vIGRvbid0IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMg
bm8gbG9uZ2VyIHBhcnQgb2YgYSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3Bs
YXllZCB1bmxlc3MgdGhlIGxvYWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2lu
LgorICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBt
X3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAg
ICAodGFyZ2V0LmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQp
ICE9IG1fcGFyZW50RnJhbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwp
OworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9wYXJlbnRGcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8
fCAhc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBN
b3ppbGxhIGRvZXMuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAg
ICAgICAgfSBlbHNlIGlmICh0YXJnZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsK
KyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBz
dGFuZGFsb25lIHBsdWctaW4gdGhhdCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8g
YmVjYXVzZSB0aGlzIGNhbiBjYXVzZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxh
bmsgcGFnZSAoMzQyNDAzOSkuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJB
TTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRh
cmdldC5pc051bGwoKSkgeworICAgICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJn
ZXQuaXNOdWxsKCkgJiYgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9w
YXJlbnRGcmFtZSkgeworICAgICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkg
YWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0
aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAg
ICAgICB9CisKKyAgICAgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5S
ZXF1ZXN0R3RrKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEp
OworICAgICAgICBzY2hlZHVsZVJlcXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1f
cGFyZW50RnJhbWUsIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3Rp
ZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisK
KyAgICAgICAgc3RyZWFtLT5zdGFydCgpOworICAgIH0KKworICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKK30KKworc3RhdGljIEtVUkwgbWFrZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25z
dCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0
cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEocmVsYXRpdmVVUkxTdHJpbmcpOwor
CisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgn
XG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xyJywgIiIpOworCisgICAgcmV0dXJu
IEtVUkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpn
ZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1
cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTChjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTCht
X2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFs
c2UsIDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAg
JiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0
ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25z
dCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVm
ZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBp
KyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgor
ICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhl
IHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGlu
ZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicp
IHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4n
KQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJc
blxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAg
ICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAo
Mzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRF
T0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEg
Q1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAv
LyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9u
CisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wg
bmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENS
TEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYg
RU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8g
dGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAg
ICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykg
eworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMK
KyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgor
ICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0
aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsg
aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyBy
ZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIg
JiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG91
cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYg
bmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9sb3dl
cihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAg
ICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3Rl
ciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIg
PSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhl
YWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFy
KiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVs
ZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVy
LCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9s
ID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9
IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAK
KyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5h
dG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAg
ICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAg
ICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcg
Q1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChs
aW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUg
ZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgq
bGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0
aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFu
ZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2
aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVy
RmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUgPSBE
ZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAg
ICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFu
ZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAg
IGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24r
KykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBo
ZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXpl
UkZDODIySGVhZGVyRmllbGROYW1lKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwg
Y29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAg
ICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRGVwcmVjYXRl
ZFN0cmluZzo6ZnJvbUxhdGluMShjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAg
ICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0
cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7Cisg
ICAgICAgICAgICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmll
bGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNl
bmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFs
ZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBG
cmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhl
YWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxl
KSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8v
LyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAg
ICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklM
RV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworCS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAg
ICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIi
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IE5VTEwpCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXpl
KCk7CisKKyAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAs
IGZpbGVIYW5kbGUpOworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBp
ZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7CisKKwlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVm
ZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4p
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAg
ICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworICAgIAorICAgIGlmIChhbGxv
d0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewor
ICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVy
Rmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkg
eworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0
aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIK
KyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhi
dWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0g
YnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVz
IHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkg
cG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtl
IHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBh
bmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAg
ICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNv
bnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNO
dWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0
aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxk
cy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBwb3N0RGF0YSAr
PSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmll
bGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQQm9keShQYXNzUmVmUHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEocG9zdERhdGEs
IHBvc3REYXRhTGVuZ3RoKSkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRh
cmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0
aW9uLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMTm90
aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVy
biBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1
ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKK3sKKyAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMg
dG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KKyAgICBy
ZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBm
aWxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpuZXdTdHJlYW0oTlBNSU1FVHlwZSB0
eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKK30KKworaW50MzIgUGx1Z2luVmlld0d0azo6d3JpdGUoTlBTdHJlYW0qIHN0cmVh
bSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAtMTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
R3RrOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sK
KyAgICBQbHVnaW5TdHJlYW1HdGsqIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5T
dHJlYW1HdGsqPihzdHJlYW0tPm5kYXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0
cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQorICAgICAgICBy
ZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dzZXJTdHJlYW0t
PmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgpCit7CisgICAg
aWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpCisgICAgICAg
IHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0
cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlm
IChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJv
bWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
Cit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpICYmICFkZWZpbmVkIChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgICAgICBjYXNlIE5QTlZ4
dEFwcENvbnRleHQ6IHsKKyAgICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAg
ICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0
IChHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgor
CisgICAgICAgIGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAg
ICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMjsKKyNlbHNlCisgICAgICAgICAgICAq
KCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMDsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNY
RW1iZWRCb29sOiB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQo
R1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1
ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkg
PSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgICAg
IE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3Jp
cHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQg
dG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93
U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1Nj
cmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAg
ICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5Q
TlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5T
Y3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1l
KGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1l
bnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRP
YmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3Jp
cHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0
T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAg
ICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93
OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUp
OworCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhHVEtfV0lE
R0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdyk7CisKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZp
ZXdHdGs6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6
CisgICAgICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgor
ICAgICAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdp
blZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1faW52YWxpZGF0ZVRp
bWVyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXpl
KCk7IGkrKykKKyAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0c1tp
XSk7CisgICAgbV9pbnZhbGlkUmVjdHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZpZXdH
dGs6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAg
ICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVj
dCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0
LT5ib3R0b20gLSByZWN0LT50b3ApOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAg
ICAvKiBGSVhNRSAtIEludmFsaWRhdGUgdGhlIHJlY3RhbmdsZQorICAgICAgICBSRUNUIGludmFs
aWRSZWN0KHIpOworICAgICAgICBJbnZhbGlkYXRlUmVjdChtX3dpbmRvdywgJmludmFsaWRSZWN0
LCBGQUxTRSk7CisgICAgICAgICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcXVpcmtz
ICYgUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpIHsKKyAgICAgICAgICAgIG1faW52YWxp
ZFJlY3RzLmFwcGVuZChyKTsKKyAgICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNB
Y3RpdmUoKSkKKyAgICAgICAgICAgICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3Qo
MC4wMDEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdpZGdldDo6aW52YWxpZGF0ZVJl
Y3Qocik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWdpb24o
TlBSZWdpb24gcmVnaW9uKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8qIEZJWE1FIC0gSW52YWxpZGF0ZSB0aGUgcmVnaW9uCisgICAgUkVDVCByOwor
CisgICAgaWYgKEdldFJnbkJveChyZWdpb24sICZyKSA9PSAwKSB7CisgICAgICAgIGludmFsaWRh
dGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJl
Y3Qocik7CisgICAgKi8KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpmb3JjZVJlZHJhdygpCit7
CisgICAgLyogRklYTUUgLSBGb3JjZSBhIHJlZHJhdworICAgIGlmIChtX2lzV2luZG93ZWQpCisg
ICAgICAgIDo6VXBkYXRlV2luZG93KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBk
YXRlV2luZG93KGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgKi8KK30KKworS0pTOjpCaW5kaW5n
czo6SW5zdGFuY2UqIFBsdWdpblZpZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBP
YmplY3QqIG9iamVjdCA9IDA7CisKKyAgICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBu
cEVycjsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSht
X2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9
CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9
IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+c2Ny
aXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
ICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFu
Z3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3Qs
IHJvb3QucmVsZWFzZSgpKTsKKworICAgIF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOworCisg
ICAgcmV0dXJuIGluc3RhbmNlOworfQorCitQbHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0aygp
Cit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisg
ICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVl
U3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIGlmICghbV9u
ZWVkc1hFbWJlZCAmJiBtX3dpZGdldCkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lk
Z2V0KTsKKyAgICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAg
bV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAg
ICBpZiAobV9wbHVnaW4gJiYgIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdp
bikpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
OjpkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayogc3RyZWFtKQoreworICAgIEFTU0VS
VChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMucmVtb3ZlKHN0
cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3Rz
IHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAg
ICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAg
ICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudDsKKyAgICAg
ICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7CisgICAgICAgIG1f
cXVpcmtzIHw9IFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXM7CisgICAg
fQorCisgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQ
X1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNh
bGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAg
IGlmIChtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBtX3BsdWdpbi0+
bmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAvLyBXaW5kb3ds
ZXNzIG1vZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0
IHJlbW92ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8g
dGhlIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVtb3ZlV2luZG93
bGVzc1ZpZGVvUGFyYW07CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRz
IHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBp
dHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBo
YXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAg
ICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gaW4gb3VyIE5Q
UnVudGltZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAvLyBOUE9iamVj
dCBhbmQgcGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUgdG8gc2VlIHdo
YXQgcm9vdCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8vIFRodXMsIHdl
IGRvbid0IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRlZCB3aGVuIHRo
ZSBwbHVnLWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzU0ODc3NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdo
dCIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbjsKKwor
ICAgIC8vIFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFBy
b2MgcmVjdXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgIGlmICht
aW1lVHlwZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAgICAgbV9xdWly
a3MgfD0gUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5
OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sK
KyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKwor
ICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJh
bUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioq
PihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXpl
KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGlmICgobV9xdWlya3MgJiBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSAm
JiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0g
PSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVz
W3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAg
ICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7
Cit9CisKK1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBt
X2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0
VGltZXJGaXJlZCkKKyAgICAsIG1faW52YWxpZGF0ZVRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3Rr
OjppbnZhbGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9w
YXJhbVZhbHVlcygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVl
KQorICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2Up
CisgICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fd2luZG93KDApCisgICAg
LCBtX2xhc3RNZXNzYWdlKDApCisgICAgLCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MoZmFsc2Up
CisgICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21hbnVhbFN0cmVh
bSgwKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCit7Cisg
ICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5v
dEZpbmRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlID0g
Jm1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisgICAg
bV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5
cGUpOworCisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisKKyAg
ICBtX21vZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAgIHJl
c2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBpZiAo
bV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXpl
ZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1
cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7
CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5l
ZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
WDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgIGlmIChtX25lZWRzWEVt
YmVkKSB7CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCks
IG1fd2lkZ2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQobV9wYXJlbnRGcmFt
ZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwpOworI2Vsc2UKKyAg
ICBtX3dpZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9w
YXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICBz
ZXRHdGtXaWRnZXQobV93aWRnZXQpOworI2VuZGlmCisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9j
YXRpb24gPSB7IGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55KCksIGZyYW1l
R2VvbWV0cnkoKS53aWR0aCgpLCBmcmFtZUdlb21ldHJ5KCkuaGVpZ2h0KCkgfTsKKyAgICBndGtf
d2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAg
IGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdU
S19YVEJJTihtX3dpZGdldCksIGFsbG9jYXRpb24ueCwgYWxsb2NhdGlvbi55KTsKKyAgICAgICAg
Z3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5o
ZWlnaHQpOworICAgIH0KKyNlbmRpZgorICAgIGd0a193aWRnZXRfc2hvdyAobV93aWRnZXQpOwor
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVf
UExVR0lOUykKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IGdfbmV3MChOUFNl
dFdpbmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0gMDsKKworICAgIGlm
IChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElT
UExBWShtX3dpZGdldC0+d2luZG93KTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxf
WFZJU1VBTChnZGtfd2luZG93X2dldF92aXN1YWwobV93aWRnZXQtPndpbmRvdykpOworICAgICAg
ICB3cy0+ZGVwdGggPSBnZGtfd2luZG93X2dldF92aXN1YWwobV93aWRnZXQtPndpbmRvdyktPmRl
cHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdka193
aW5kb3dfZ2V0X2NvbG9ybWFwKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAgbV93aW5kb3cg
PSBHREtfV0lORE9XX1hXSU5ET1cobV93aWRnZXQtPndpbmRvdyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGRpc3BsYXk7CisgICAg
ICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dHZpc3VhbDsK
KyAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRkZXB0
aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQu
eHRjb2xvcm1hcDsKKyAgICAgICAgbV93aW5kb3cgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dHdp
bmRvdzsKKworICAgICAgICBYRmx1c2ggKHdzLT5kaXNwbGF5KTsKKyAgICB9CisKKyAgICBtX25w
V2luZG93LndzX2luZm8gPSB3czsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIK
KyAgICBtX3dpbmRvdyA9IEdES19XSU5ET1dfSFdORChtX3dpZGdldC0+d2luZG93KTsKKyNlbmRp
ZgorCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBO
UFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKW1f
d2luZG93OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisgICAgfQorCisg
ICAgaWYgKCEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkK
KyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbSA9
IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDApOwor
ICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7CisKKyAgICBtX21hbnVh
bFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9tYW51YWxTdHJlYW0t
PmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKwor
ICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNT
RVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVy
cm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blZpZXdHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQbHVnaW5WaWV3R3RrX0gKKyNkZWZpbmUgUGx1Z2luVmlld0d0a19ICisK
KyNpbmNsdWRlIDxndGsvZ3Rrd2lkZ2V0Lmg+CisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5o
IgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtK
UyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5zdGFuY2U7Cisg
ICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBj
bGFzcyBGcmFtZTsKKyAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBjbGFzcyBLZXli
b2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAgICBj
bGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VH
dGs7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW1H
dGs7CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OworICAgIAorICAgIGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50
c01vemlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZh
bGlkYXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlk
ZW9QYXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNP
bmVNZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2lu
ID0gMSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNz
YWdlUmVjdXJzaXZlbHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMg
eworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNz
ZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUs
IGNvbnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAgICAgUGx1
Z2luUGFja2FnZUd0ayogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0KCk7IH0K
KyAgICAgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorCisg
ICAgICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3Rh
dGljIFBsdWdpblZpZXdHdGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAgS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0
YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAgIC8vIE5Q
TiBmdW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9y
IGdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5Q
RXJyb3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSk7CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIq
IHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7CisgICAg
ICAgIE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0
LCBOUFN0cmVhbSoqIHN0cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJl
YW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95U3Ry
ZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNvbnN0IGNo
YXIqIHVzZXJBZ2VudCgpOworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdl
KTsKKyAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7CisgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQgZm9yY2VS
ZWRyYXcoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3Rr
Kik7CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBn
ZW9tZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRl
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgZ2xvbmcgd25kUHJv
YyhYSUQgaFduZCwgZ3VpbnQgbWVzc2FnZSwgZ3VpbnQgd1BhcmFtLCBnbG9uZyBsUGFyYW0pOwor
CisgICAgICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKCk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAgICAg
ICB2b2lkIGluaXQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3Ao
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0
ayopOworICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wg
c2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgaGFu
ZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwg
Y29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5v
dGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2luUGFj
a2FnZUd0az4gbV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAg
RnJhbWUqIG1fcGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAg
IEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5TdGF0
dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKwor
ICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAg
dm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHJl
cXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIHZvaWQgaW52
YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8
UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdH
dGs+IG1faW52YWxpZGF0ZVRpbWVyOworCisgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhy
b3R0bGVyR3RrPiBtX21lc3NhZ2VUaHJvdHRsZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5k
b3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50
OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZh
bHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91
c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5z
dGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIGludCBtX3F1aXJrczsK
KyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50
OworICAgICAgICBib29sIG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxp
emVkOworCisgICAgICAgIFhJRCBtX3dpbmRvdzsgLy8gZm9yIHdpbmRvd2VkIHBsdWctaW5zCisg
ICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFw
cGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93aW5k
b3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVz
c2FnZTsKKyAgICAgICAgYm9vbCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2M7CisKKyAgICAgICAg
Ym9vbCBtX2xvYWRNYW51YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gbV9t
YW51YWxTdHJlYW07CisKKyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3VycmVudFBs
dWdpblZpZXc7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICAgICAgYm9vbCBt
X25lZWRzWEVtYmVkOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IApJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0
b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9p
bnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhlIHBsdWdpbiB2
aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVn
LWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8vIHdpdGggYSBO
VUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2
aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgorLy8gQ3VycmVudGx5LCB0aGUgY3Vy
cmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmll
d0d0azo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxhc2ggYW5k
IFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNlcmFnZW50
IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNl
LT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihpbnN0
YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmll
dygpOworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyIHNpemUpCit7CisgICAgcmV0dXJu
IG1hbGxvYyhzaXplKTsKK30KKwordm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAg
ZnJlZShwdHIpOworfQorCit1aW50MzIgTlBOX01lbUZsdXNoKHVpbnQzMiBzaXplKQoreworICAg
IC8vIERvIG5vdGhpbmcKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lu
cyhOUEJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgcmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMp
OworfQorCitOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVS
YW5nZSogcmFuZ2VMaXN0KQoreworICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQor
CitOUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBu
b3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3Ig
TlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNo
YXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9p
ZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBC
b29sIGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnBvc3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5f
TmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQz
MiBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZv
aWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lT
dHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7
CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJl
YW0oc3RyZWFtLCByZWFzb24pOworfQorCitjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBp
bnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3R3RrKiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKTsKKworICAgICAvLyBGSVhNRTogU29tZSBwbHVnLWlucyBjYWxsIE5QTl9V
c2VyQWdlbnQgd2l0aCBhIG51bGwgaW5zdGFuY2UgaW4gdGhlaXIgTlBfaW5pdGlhbGl6ZSBmdW5j
dGlvbiEKKyAgICAgLy8gV2UnZCBuZWVkIGEgd2F5IHRvIGdldCBhIHVzZXIgYWdlbnQgd2l0aG91
dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQuCisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVy
biAwOworIAorICAgIHJldHVybiB2aWV3LT51c2VyQWdlbnQoKTsKK30KKwordm9pZCBOUE5fU3Rh
dHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMobWVzc2FnZSk7Cit9CisKK3ZvaWQgTlBOX0lu
dmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sKKyAgICBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVj
dCk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lv
biBpbnZhbGlkUmVnaW9uKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBOX0ZvcmNlUmVk
cmF3KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5mb3JjZVJlZHJhdygpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2Us
IE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30K
KworTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJs
ZSwgdm9pZCogdmFsdWUpCit7CisgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFF
bnYoKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5Q
Tl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZAorTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3Rh
bmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sKK30KKwordm9pZAorTlBOX1BvcFBvcHVwc0VuYWJsZWRT
dGF0ZShOUFAgaW5zdGFuY2UpCit7Cit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJl
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY0IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1v
ZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lk
dGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioq
CisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVu
dHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9N
UEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9y
IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1
bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhF
TUJFRCBEZWNsYXJhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9y
aWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAq
IHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250
cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisg
KiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxh
dGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhl
IEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92
ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
b25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBh
bmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9u
IGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0
aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9y
IHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUs
IGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICog
dGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAq
CisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisvKiBYRU1CRUQgbWVzc2Fn
ZXMgKi8KKyNkZWZpbmUgWEVNQkVEX0VNQkVEREVEX05PVElGWSAgICAgICAgICAwCisjZGVmaW5l
IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfV0lORE9X
X0RFQUNUSVZBVEUgICAgICAgIDIKKyNkZWZpbmUgWEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAg
ICAgICAzCisjZGVmaW5lIFhFTUJFRF9GT0NVU19JTiAgICAgICAgICAgICAgICAgNAorI2RlZmlu
ZSBYRU1CRURfRk9DVVNfT1VUICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X05FWFQgICAgICAgICAgICAgICA2CisjZGVmaW5lIFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAg
ICAgICAgNworI2RlZmluZSBYRU1CRURfR1JBQl9LRVkgICAgICAgICAgICAgICAgIDgKKyNkZWZp
bmUgWEVNQkVEX1VOR1JBQl9LRVkgICAgICAgICAgICAgICA5CisjZGVmaW5lIFhFTUJFRF9NT0RB
TElUWV9PTiAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAg
ICAgICAgICAxMQorCisvKiBOb24gc3RhbmRhcmQgbWVzc2FnZXMqLworI2RlZmluZSBYRU1CRURf
R1RLX0dSQUJfS0VZICAgICAgICAgICAgIDEwOCAKKyNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJf
S0VZICAgICAgICAgICAxMDkKKworLyogRGV0YWlscyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8K
KyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQgICAgICAgICAgICAwCisjZGVmaW5lIFhFTUJF
RF9GT0NVU19GSVJTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAg
ICAgICAgICAgICAgIDIKKworLyogRmxhZ3MgZm9yIF9YRU1CRURfSU5GTyAqLworI2RlZmluZSBY
RU1CRURfTUFQUEVEICAgICAgICAgICAgICAgICAgICgxIDw8IDApCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5EZWJ1Zy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgUExVR0lOX0RFQlVHX0hfXworI2RlZmluZSBQTFVHSU5fREVCVUdfSF9fCisK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKworc3RhdGljIGNvbnN0IGNoYXIqIGVy
cm9yU3RyaW5nc1tdID0geworICAgICJObyBlcnJvcnMgb2NjdXJyZWQuIiwgLyogTlBFUlJfTk9f
RVJST1IgKi8KKyAgICAiRXJyb3Igd2l0aCBubyBzcGVjaWZpYyBlcnJvciBjb2RlIG9jY3VycmVk
LiIsIC8qIE5QRVJSX0dFTkVSSUNfRVJST1IgKi8KKyAgICAiSW52YWxpZCBpbnN0YW5jZSBwYXNz
ZWQgdG8gdGhlIHBsdWctaW4uIiwgLyogTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUiAqLwor
ICAgICJGdW5jdGlvbiB0YWJsZSBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfRlVOQ1RBQkxF
X0VSUk9SICovCisgICAgIkxvYWRpbmcgb2YgcGx1Zy1pbiBmYWlsZWQuIiwgLyogTlBFUlJfTU9E
VUxFX0xPQURfRkFJTEVEX0VSUk9SICovCisgICAgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4i
LCAvKiBOUEVSUl9PVVRfT0ZfTUVNT1JZX0VSUk9SICovCisgICAgIlBsdWctaW4gbWlzc2luZyBv
ciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExVR0lOX0VSUk9SICovCisgICAgIlBsdWct
aW4gZGlyZWN0b3J5IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJ
Tl9ESVJfRVJST1IgKi8KKyAgICAiVmVyc2lvbnMgb2YgcGx1Zy1pbiBhbmQgQ29tbXVuaWNhdG9y
IGRvIG5vdCBtYXRjaC4iLCAvKiBOUEVSUl9JTkNPTVBBVElCTEVfVkVSU0lPTl9FUlJPUiAqLwor
ICAgICJQYXJhbWV0ZXIgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUEFS
QU0gKi8KKyAgICAiVVJMIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1VS
TCAqLworICAgICJGaWxlIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9GSUxFX05PVF9G
T1VORCAqLworICAgICJTdHJlYW0gY29udGFpbnMgbm8gZGF0YS4iLCAvKiBOUEVSUl9OT19EQVRB
ICovCisgICAgIlNlZWthYmxlIHN0cmVhbSBleHBlY3RlZC4iLCAvKiBOUEVSUl9TVFJFQU1fTk9U
X1NFRUtBQkxFICovCisgICAgIlVua25vd24gZXJyb3IgY29kZSIKK307CisKKyNpZm5kZWYgTkRF
QlVHCisjZGVmaW5lIExPR19OUEVSUk9SKGVycikgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikg
X1JQVEYyKF9DUlRfV0FSTiwgIiVzOiAlc1xuIiwgX19GVU5DVElPTl9fLCBlcnJvclN0cmluZ3Nb
ZXJyXSkKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSBfUlBURjEoX0NSVF9XQVJOLCAi
JXM6IFN0cmVhbSBmYWlsZWQgZHVlIHRvIHByb2JsZW1zIHdpdGggbmV0d29yaywgZGlzayBJL08s
IGxhY2sgb2YgbWVtb3J5LCBvciBvdGhlciBwcm9ibGVtcy5cbiIsIF9fRlVOQ1RJT05fXykKKyNl
bHNlCisjZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkgKCh2b2lkKTApCisjZGVmaW5lIExP
R19OUEVSUk9SKGVycikgKCh2b2lkKTApCisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9ucGZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9u
cGZ1bmN0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIF9OUEZVTkNUSU9OU19IXworI2RlZmluZSBfTlBGVU5DVElPTlNfSF8KKworI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFhQX1dJTikKKyNkZWZpbmUgRVhQT1JURURf
Q0FMTEJBQ0soX3R5cGUsIF9uYW1lKSBfdHlwZSAoX19zdGRjYWxsICogX25hbWUpCisjZWxzZQor
I2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlICgqIF9uYW1lKQor
I2VuZGlmCisKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB2b2lkKiBub3Rp
ZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMTm90aWZ5UHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyIGxl
biwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fUmVxdWVzdFJlYWRQcm9jUHRyKShOUFN0cmVhbSogc3RyZWFtLCBO
UEJ5dGVSYW5nZSogcmFuZ2VMaXN0KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9OZXdTdHJlYW1Q
cm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogd2luZG93
LCBOUFN0cmVhbSoqIHN0cmVhbSk7Cit0eXBlZGVmIGludDMyICgqTlBOX1dyaXRlUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7
Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5Q
Tl9TdGF0dXNQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwordHlw
ZWRlZiBjb25zdCBjaGFyKigqTlBOX1VzZXJBZ2VudFByb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0
eXBlZGVmIHZvaWQqICgqTlBOX01lbUFsbG9jUHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRl
ZiB2b2lkICgqTlBOX01lbUZyZWVQcm9jUHRyKSh2b2lkKiBwdHIpOwordHlwZWRlZiB1aW50MzIg
KCpOUE5fTWVtRmx1c2hQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5f
UmVsb2FkUGx1Z2luc1Byb2NQdHIpKE5QQm9vbCByZWxvYWRQYWdlcyk7Cit0eXBlZGVmIE5QRXJy
b3IgKCpOUE5fR2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkICpyZXRfdmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1NldFZhbHVlUHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwor
dHlwZWRlZiB2b2lkICgqTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFJlY3QgKnJlY3QpOwordHlwZWRlZiB2b2lkICgqTlBOX0ludmFsaWRhdGVSZWdpb25Qcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIHJlZ2lvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fRm9y
Y2VSZWRyYXdQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dl
dFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3
aW5kb3cpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YUVu
dlByb2NQdHIpKHZvaWQpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhUGVlclByb2NQdHIp
KE5QUCBpbnN0YW5jZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0
ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpOwordHlwZWRlZiB2b2lkICgq
TlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSk7CisKK3R5cGVk
ZWYgdm9pZCAoKk5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0cikgKE5QVmFyaWFudCAqdmFy
aWFudCk7CisKK3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQ
cm9jUHRyKSAoY29uc3QgTlBVVEY4ICpuYW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9HZXRTdHJp
bmdJZGVudGlmaWVyc1Byb2NQdHIpIChjb25zdCBOUFVURjggKipuYW1lcywgaW50MzJfdCBuYW1l
Q291bnQsIE5QSWRlbnRpZmllciAqaWRlbnRpZmllcnMpOwordHlwZWRlZiBOUElkZW50aWZpZXIg
KCpOUE5fR2V0SW50SWRlbnRpZmllclByb2NQdHIpIChpbnQzMl90IGludGlkKTsKK3R5cGVkZWYg
aW50MzJfdCAoKk5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRl
bnRpZmllcik7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0cikg
KE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKK3R5cGVkZWYgTlBVVEY4ICooKk5QTl9VVEY4RnJv
bUlkZW50aWZpZXJQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOworCit0eXBlZGVm
IE5QT2JqZWN0KiAoKk5QTl9DcmVhdGVPYmplY3RQcm9jUHRyKSAoTlBQLCBOUENsYXNzICphQ2xh
c3MpOwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fUmV0YWluT2JqZWN0UHJvY1B0cikgKE5QT2Jq
ZWN0ICpvYmopOwordHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyKSAoTlBP
YmplY3QgKm9iaik7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSW52b2tlUHJvY1B0cikgKE5QUCBucHAs
IE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBtZXRob2ROYW1lLCBjb25zdCBOUFZhcmlhbnQg
KmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJv
b2wgKCpOUE5fSW52b2tlRGVmYXVsdFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBj
b25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVuc2lnbmVkIGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3Vs
dCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fRXZhbHVhdGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmpl
Y3QgKm9iaiwgTlBTdHJpbmcgKnNjcmlwdCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBi
b29sICgqTlBOX0dldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5Q
SWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVmIGJv
b2wgKCpOUE5fU2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJ
ZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIGNvbnN0IE5QVmFyaWFudCAqdmFsdWUpOwordHlwZWRl
ZiBib29sICgqTlBOX0hhc1Byb3BlcnR5UHJvY1B0cikgKE5QUCwgTlBPYmplY3QgKm5wb2JqLCBO
UElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNNZXRob2RQ
cm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFt
ZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwg
TlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVmIHZvaWQg
KCpOUE5fU2V0RXhjZXB0aW9uUHJvY1B0cikgKE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVVRGOCAq
bWVzc2FnZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fRW51bWVyYXRlUHJvY1B0cikgKE5QUCBucHAs
IE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyICoqaWRlbnRpZmllciwgdWludDMyX3QgKmNv
dW50KTsKKwordHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1Byb2NQdHIpKE5QTUlNRVR5cGUgcGx1
Z2luVHlwZSwgTlBQIGluc3RhbmNlLCB1aW50MTYgbW9kZSwgaW50MTYgYXJnYywgY2hhciogYXJn
bltdLCBjaGFyKiBhcmd2W10sIE5QU2F2ZWREYXRhKiBzYXZlZCk7Cit0eXBlZGVmIE5QRXJyb3Ig
KCpOUFBfRGVzdHJveVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTYXZlZERhdGEqKiBzYXZlKTsK
K3R5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRXaW5kb3dQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5Q
V2luZG93KiB3aW5kb3cpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX05ld1N0cmVhbVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSogc3RyZWFtLCBOUEJvb2wg
c2Vla2FibGUsIHVpbnQxNiogc3R5cGUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lT
dHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJl
YXNvbik7Cit0eXBlZGVmIHZvaWQgKCpOUFBfU3RyZWFtQXNGaWxlUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSogc3RyZWFtLCBjb25zdCBjaGFyKiBmbmFtZSk7Cit0eXBlZGVmIGludDMy
ICgqTlBQX1dyaXRlUmVhZHlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0p
OwordHlwZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJl
YW0qIHN0cmVhbSwgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuLCB2b2lkKiBidWZmZXIpOwor
dHlwZWRlZiB2b2lkICgqTlBQX1ByaW50UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFByaW50KiBw
bGF0Zm9ybVByaW50KTsKK3R5cGVkZWYgaW50MTYgKCpOUFBfSGFuZGxlRXZlbnRQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIHZvaWQqIGV2ZW50KTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9VUkxOb3RpZnlQ
cm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgTlBSZWFzb24gcmVhc29uLCB2
b2lkKiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9HZXRWYWx1ZVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0
eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTlZh
cmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNL
KHZvaWQsIE5QUF9TaHV0ZG93blByb2NQdHIpKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKigqTlBQ
X0dldEphdmFDbGFzc1Byb2NQdHIpKHZvaWQpOwordHlwZWRlZiB2b2lkKiAgIEpSSUdsb2JhbFJl
ZjsgLy9ub3QgdXNpbmcgdGhpcyByaWdodCBub3cKKwordHlwZWRlZiBzdHJ1Y3QgX05QTmV0c2Nh
cGVGdW5jcyB7CisgICAgdWludDE2IHNpemU7CisgICAgdWludDE2IHZlcnNpb247CisgICAgCisg
ICAgTlBOX0dldFVSTFByb2NQdHIgZ2V0dXJsOworICAgIE5QTl9Qb3N0VVJMUHJvY1B0ciBwb3N0
dXJsOworICAgIE5QTl9SZXF1ZXN0UmVhZFByb2NQdHIgcmVxdWVzdHJlYWQ7CisgICAgTlBOX05l
d1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5QTl9Xcml0ZVByb2NQdHIgd3JpdGU7Cisg
ICAgTlBOX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRlc3Ryb3lzdHJlYW07CisgICAgTlBOX1N0YXR1
c1Byb2NQdHIgc3RhdHVzOworICAgIE5QTl9Vc2VyQWdlbnRQcm9jUHRyIHVhZ2VudDsKKyAgICBO
UE5fTWVtQWxsb2NQcm9jUHRyIG1lbWFsbG9jOworICAgIE5QTl9NZW1GcmVlUHJvY1B0ciBtZW1m
cmVlOworICAgIE5QTl9NZW1GbHVzaFByb2NQdHIgbWVtZmx1c2g7CisgICAgTlBOX1JlbG9hZFBs
dWdpbnNQcm9jUHRyIHJlbG9hZHBsdWdpbnM7CisgICAgTlBOX0dldEphdmFFbnZQcm9jUHRyIGdl
dEphdmFFbnY7CisgICAgTlBOX0dldEphdmFQZWVyUHJvY1B0ciBnZXRKYXZhUGVlcjsKKyAgICBO
UE5fR2V0VVJMTm90aWZ5UHJvY1B0ciBnZXR1cmxub3RpZnk7CisgICAgTlBOX1Bvc3RVUkxOb3Rp
ZnlQcm9jUHRyIHBvc3R1cmxub3RpZnk7CisgICAgTlBOX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1
ZTsKKyAgICBOUE5fU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOworICAgIE5QTl9JbnZhbGlkYXRl
UmVjdFByb2NQdHIgaW52YWxpZGF0ZXJlY3Q7CisgICAgTlBOX0ludmFsaWRhdGVSZWdpb25Qcm9j
UHRyIGludmFsaWRhdGVyZWdpb247CisgICAgTlBOX0ZvcmNlUmVkcmF3UHJvY1B0ciBmb3JjZXJl
ZHJhdzsKKyAgICAKKyAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIgZ2V0c3RyaW5n
aWRlbnRpZmllcjsKKyAgICBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyIGdldHN0cmlu
Z2lkZW50aWZpZXJzOworICAgIE5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0ciBnZXRpbnRpZGVu
dGlmaWVyOworICAgIE5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRyIGlkZW50aWZpZXJpc3N0
cmluZzsKKyAgICBOUE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0ciB1dGY4ZnJvbWlkZW50aWZp
ZXI7CisgICAgTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0ciBpbnRmcm9taWRlbnRpZmllcjsK
KyAgICBOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0ciBjcmVhdGVvYmplY3Q7CisgICAgTlBOX1JldGFp
bk9iamVjdFByb2NQdHIgcmV0YWlub2JqZWN0OworICAgIE5QTl9SZWxlYXNlT2JqZWN0UHJvY1B0
ciByZWxlYXNlb2JqZWN0OworICAgIE5QTl9JbnZva2VQcm9jUHRyIGludm9rZTsKKyAgICBOUE5f
SW52b2tlRGVmYXVsdFByb2NQdHIgaW52b2tlRGVmYXVsdDsKKyAgICBOUE5fRXZhbHVhdGVQcm9j
UHRyIGV2YWx1YXRlOworICAgIE5QTl9HZXRQcm9wZXJ0eVByb2NQdHIgZ2V0cHJvcGVydHk7Cisg
ICAgTlBOX1NldFByb3BlcnR5UHJvY1B0ciBzZXRwcm9wZXJ0eTsKKyAgICBOUE5fUmVtb3ZlUHJv
cGVydHlQcm9jUHRyIHJlbW92ZXByb3BlcnR5OworICAgIE5QTl9IYXNQcm9wZXJ0eVByb2NQdHIg
aGFzcHJvcGVydHk7CisgICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFzbWV0aG9kOworICAgIE5Q
Tl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFudHZhbHVlOworICAgIE5Q
Tl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKKyAgICBOUE5fUHVzaFBvcHVwc0Vu
YWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5fUG9wUG9w
dXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFibGVkc3RhdGU7CisgICAgTlBOX0Vu
dW1lcmF0ZVByb2NQdHIgZW51bWVyYXRlOworfSBOUE5ldHNjYXBlRnVuY3M7CisKK3R5cGVkZWYg
c3RydWN0IF9OUFBsdWdpbkZ1bmNzIHsKKyAgICB1aW50MTYgc2l6ZTsKKyAgICB1aW50MTYgdmVy
c2lvbjsKKyAgICBOUFBfTmV3UHJvY1B0ciBuZXdwOworICAgIE5QUF9EZXN0cm95UHJvY1B0ciBk
ZXN0cm95OworICAgIE5QUF9TZXRXaW5kb3dQcm9jUHRyIHNldHdpbmRvdzsKKyAgICBOUFBfTmV3
U3RyZWFtUHJvY1B0ciBuZXdzdHJlYW07CisgICAgTlBQX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyIGRl
c3Ryb3lzdHJlYW07CisgICAgTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIgYXNmaWxlOworICAgIE5Q
UF9Xcml0ZVJlYWR5UHJvY1B0ciB3cml0ZXJlYWR5OworICAgIE5QUF9Xcml0ZVByb2NQdHIgd3Jp
dGU7CisgICAgTlBQX1ByaW50UHJvY1B0ciBwcmludDsKKyAgICBOUFBfSGFuZGxlRXZlbnRQcm9j
UHRyIGV2ZW50OworICAgIE5QUF9VUkxOb3RpZnlQcm9jUHRyIHVybG5vdGlmeTsKKyAgICBKUklH
bG9iYWxSZWYgamF2YUNsYXNzOworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7Cisg
ICAgTlBQX1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1ZTsKK30gTlBQbHVnaW5GdW5jczsKKwordHlw
ZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhOUEVycm9yLCBOUF9Jbml0aWFsaXplRnVuY1B0cikoTlBO
ZXRzY2FwZUZ1bmNzKiwgTlBQbHVnaW5GdW5jcyopOwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFD
Syhjb25zdCBjaGFyKiwgTlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0cikodm9pZCk7CisKKyNp
ZiBkZWZpbmVkKFhQX01BQ09TWCkKK3R5cGVkZWYgdm9pZCAgICAoKkJQX0NyZWF0ZVBsdWdpbk1J
TUVUeXBlc1ByZWZlcmVuY2VzRnVuY1B0cikodm9pZCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpNYWlu
RnVuY1B0cikoTlBOZXRzY2FwZUZ1bmNzKiwgTlBQbHVnaW5GdW5jcyosIE5QUF9TaHV0ZG93blBy
b2NQdHIqKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTM5IEBACisv
KiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1i
YXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9w
PTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9u
OiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAq
IDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICog
U29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAq
IExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRn
ZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgor
ICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBs
YXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJv
dmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwg
YW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lv
biBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
dGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBv
ciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAq
IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisg
KgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKyAKKy8qCisgKiBUaGUgR3Rr
WHRCaW4gd2lkZ2V0IGFsbG93cyBmb3IgWHQgdG9vbGtpdCBjb2RlIHRvIGJlIHVzZWQKKyAqIGlu
c2lkZSBhIEdUSyBhcHBsaWNhdGlvbi4gIAorICovCisKKyNpbmNsdWRlICJ4ZW1iZWQuaCIKKyNp
bmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorI2luY2x1ZGUg
PGd0ay9ndGtwcml2YXRlLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKiBYbGliL1h0IHN0dWZmICovCisjaW5jbHVkZSA8WDEx
L1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4K
KyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4K
KworLyogdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFi
b3V0IHdpZGdldAorICAgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uICovCisjdW5kZWYgREVCVUdf
WFRCSU4KKworI2RlZmluZSBYVEJJTl9NQVhfRVZFTlRTIDMwCisKK3N0YXRpYyB2b2lkICAgICAg
ICAgICAgZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKK3N0YXRp
YyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0
YmluKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dp
ZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5y
ZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAg
ICAgZ3RrX3h0YmluX2Rlc3Ryb3kgICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworc3RhdGlj
IHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fc2h1dGRvd24gICAoR3RrT2JqZWN0ICAgICAgKm9i
amVjdCk7CisKKy8qIFh0IGF3YXJlIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgeHRfY2xp
ZW50X2luaXQgICAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2NyZWF0ZSAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRlciwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApOworc3RhdGljIHZvaWQgICAgICAg
eHRfY2xpZW50X3VucmVhbGl6ZSAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9p
ZCAgICAgICB4dF9jbGllbnRfc2V0X2luZm8gIChXaWRnZXQgeHRwbHVnLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGlj
IHZvaWQgICAgICAgeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZl
bnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAo
V2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyICAgICAgIChXaWRnZXQgdywgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9k
YXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVy
KCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSApOworc3RhdGljIHZvaWQgICAgICAgeHRf
YWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2Vy
X2RhdGEpOyAKK3N0YXRpYyB2b2lkICAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRn
ZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSk7CitzdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJl
ZF9tZXNzYWdlIChYdENsaWVudCAqeHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIG1lc3NhZ2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBkZXRhaWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBkYXRhMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGRhdGEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9uZyB0aW1lKTsgIAorc3RhdGljIGludCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlz
cGxheSAqZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
RXJyb3JFdmVudCAqZXJyb3IpOworLyogRm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCitzdGF0
aWMgdm9pZCAgICAgICB0cmFwX2Vycm9ycyh2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgIHVudHJh
cF9lcnJvcih2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChE
aXNwbGF5ICosIFhFcnJvckV2ZW50ICopOworc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJv
cl9jb2RlID0gMDsKKworc3RhdGljIEd0a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxM
OworCitzdGF0aWMgRGlzcGxheSAgICAgICAgICp4dGRpc3BsYXkgPSBOVUxMOworc3RhdGljIFN0
cmluZyAgICAgICAgICAqZmFsbGJhY2sgPSBOVUxMOworc3RhdGljIGdib29sZWFuICAgICAgICAg
eHRfaXNfaW5pdGlhbGl6ZWQgPSBGQUxTRTsKK3N0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93
aWRnZXRzID0gMDsKKworc3RhdGljIEdQb2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsK
K3N0YXRpYyBnaW50ICAgICAgICAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworc3RhdGlj
IGd1aW50ICAgICAgICAgICAgdGFnID0gMDsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9w
cmVwYXJlIChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgKnRpbWVvdXQpCit7ICAgCisgIGludCBtYXNrOworCisgIEdES19USFJFQURTX0VOVEVSKCk7
CisgIG1hc2sgPSBYUGVuZGluZyh4dGRpc3BsYXkpOworICBHREtfVEhSRUFEU19MRUFWRSgpOwor
CisgIHJldHVybiAoZ2Jvb2xlYW4pbWFzazsKK30KKworc3RhdGljIGdib29sZWFuCit4dF9ldmVu
dF9jaGVjayAoR1NvdXJjZSogIHNvdXJjZV9kYXRhKQoreworICBHREtfVEhSRUFEU19FTlRFUiAo
KTsKKworICBpZiAoeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzICYgR19JT19JTikgeworICAgIGlu
dCBtYXNrOworICAgIG1hc2sgPSBYUGVuZGluZyh4dGRpc3BsYXkpOworICAgIEdES19USFJFQURT
X0xFQVZFICgpOworICAgIHJldHVybiAoZ2Jvb2xlYW4pbWFzazsKKyAgfQorCisgIEdES19USFJF
QURTX0xFQVZFICgpOworICByZXR1cm4gRkFMU0U7Cit9ICAgCisKK3N0YXRpYyBnYm9vbGVhbgor
eHRfZXZlbnRfZGlzcGF0Y2ggKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAg
ICAgICAgR1NvdXJjZUZ1bmMgY2FsbF9iYWNrLAorICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciAgdXNlcl9kYXRhKQoreworICBYRXZlbnQgZXZlbnQ7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAg
aW50IGkgPSAwOworCisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNw
bGF5KTsKKworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKworICAvKiBQcm9jZXNzIG9ubHkgcmVh
bCBYIHRyYWZmaWMgaGVyZS4gIFdlIG9ubHkgbG9vayBmb3IgZGF0YSBvbiB0aGUKKyAgICogcGlw
ZSwgbGltaXQgaXQgdG8gWFRCSU5fTUFYX0VWRU5UUyBhbmQgb25seSBjYWxsCisgICAqIFh0QXBw
UHJvY2Vzc0V2ZW50IHNvIHRoYXQgaXQgd2lsbCBsb29rIGZvciBYIGV2ZW50cy4gIFRoZXJlJ3Mg
bm8KKyAgICogdGltZXIgcHJvY2Vzc2luZyBoZXJlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHRp
bWVyIGNhbGxiYWNrIHRoYXQKKyAgICogZG9lcyBpdC4gICovCisgIGZvciAoaT0wOyBpIDwgWFRC
SU5fTUFYX0VWRU5UUyAmJiBYUGVuZGluZyh4dGRpc3BsYXkpOyBpKyspIHsKKyAgICBYdEFwcFBy
b2Nlc3NFdmVudChhYywgWHRJTVhFdmVudCk7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAo
KTsKKworICByZXR1cm4gVFJVRTsgIAorfQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50
X2Z1bmNzID0geworICB4dF9ldmVudF9wcmVwYXJlLAorICB4dF9ldmVudF9jaGVjaywKKyAgeHRf
ZXZlbnRfZGlzcGF0Y2gsCisgIGdfZnJlZSwKKyAgKEdTb3VyY2VGdW5jKU5VTEwsCisgIChHU291
cmNlRHVtbXlNYXJzaGFsKU5VTEwKK307CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcG9s
bGluZ190aW1lcl9jYWxsYmFjayhncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIERpc3BsYXkgKiBk
aXNwbGF5OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsK
KworICBkaXNwbGF5ID0gKERpc3BsYXkgKil1c2VyX2RhdGE7CisgIGFjID0gWHREaXNwbGF5VG9B
cHBsaWNhdGlvbkNvbnRleHQoZGlzcGxheSk7CisKKyAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1h
bnkgWHQgZXZlbnRzIGhlcmUuIElmIHdlIGp1c3QgcHJvY2VzcworICAgICBvbmUgZXZlbnQgd2Ug
bWlnaHQgc3RhcnZlIG9uZSBvciBtb3JlIFh0IGNvbnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQK
KyAgICAgdGhpcyBjb3VsZCBoYW5nIHRoZSB3aG9sZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91
cmluZyBpbi4gU28gcHJvY2VzcworICAgICB1cCB0byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFu
ZCBzYXZlIHRoZSByZXN0IGZvciBsYXRlci4gVGhpcyBpcyBhIGhhY2ssCisgICAgIGJ1dCBpdCBv
dWdodGEgd29yay4gV2UgKnJlYWxseSogc2hvdWxkIGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lu
cy4KKyAgKi8KKyAgd2hpbGUgKGV2ZW50c1RvUHJvY2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykp
CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1BbGwpOworICByZXR1cm4gVFJVRTsKK30K
KworR3RrVHlwZQorZ3RrX3h0YmluX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR3RrVHlw
ZSB4dGJpbl90eXBlID0gMDsKKworICBpZiAoIXh0YmluX3R5cGUpIHsKKyAgICAgIHN0YXRpYyBj
b25zdCBHdGtUeXBlSW5mbyB4dGJpbl9pbmZvID0KKyAgICAgIHsKKyAgICAgICAgIkd0a1h0Qmlu
IiwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbiksCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW5D
bGFzcyksCisgICAgICAgIChHdGtDbGFzc0luaXRGdW5jKSBndGtfeHRiaW5fY2xhc3NfaW5pdCwK
KyAgICAgICAgKEd0a09iamVjdEluaXRGdW5jKSBndGtfeHRiaW5faW5pdCwKKyAgICAgICAgLyog
cmVzZXJ2ZWRfMSAqLyBOVUxMLAorICAgICAgICAvKiByZXNlcnZlZF8yICovIE5VTEwsCisgICAg
ICAgIChHdGtDbGFzc0luaXRGdW5jKSBOVUxMCisgICAgICB9OworICAgICAgeHRiaW5fdHlwZSA9
IGd0a190eXBlX3VuaXF1ZSAoR1RLX1RZUEVfU09DS0VULCAmeHRiaW5faW5mbyk7CisgICAgfQor
ICByZXR1cm4geHRiaW5fdHlwZTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9jbGFzc19p
bml0IChHdGtYdEJpbkNsYXNzICprbGFzcykKK3sKKyAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9j
bGFzczsKKyAgR3RrT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzczsKKworICBwYXJlbnRfY2xhc3Mg
PSBndGtfdHlwZV9jbGFzcyAoR1RLX1RZUEVfU09DS0VUKTsKKworICB3aWRnZXRfY2xhc3MgPSBH
VEtfV0lER0VUX0NMQVNTIChrbGFzcyk7CisgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194
dGJpbl9yZWFsaXplOworICB3aWRnZXRfY2xhc3MtPnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJl
YWxpemU7CisKKyAgb2JqZWN0X2NsYXNzID0gR1RLX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBv
YmplY3RfY2xhc3MtPmRlc3Ryb3kgPSBndGtfeHRiaW5fZGVzdHJveTsKK30KKworc3RhdGljIHZv
aWQKK2d0a194dGJpbl9pbml0IChHdGtYdEJpbiAqeHRiaW4pCit7CisgIHh0YmluLT54dGRpc3Bs
YXkgPSBOVUxMOworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IE5VTEw7CisgIHh0YmluLT54dHdp
bmRvdyA9IDA7CisgIHh0YmluLT54ID0gMDsKKyAgeHRiaW4tPnkgPSAwOworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX3JlYWxpemUgKEd0a1dpZGdldCAqd2lkZ2V0KQoreworICBHdGtYdEJp
biAgICAgKnh0YmluOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDIwMCwg
MjAwIH07CisgIGdpbnQgIHgsIHksIHcsIGgsIGQ7IC8qIGdlb21ldHJ5IG9mIHdpbmRvdyAqLwor
CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVhbGl6ZSgpXG4iKTsK
KyNlbmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAod2lkZ2V0KSk7CisK
KyAgeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisKKyAgLyogY2FjdWxhdGUgdGhlIGFsbG9j
YXRpb24gYmVmb3JlIHJlYWxpemUgKi8KKyAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoeHRiaW4t
PnBhcmVudF93aW5kb3csICZ4LCAmeSwgJncsICZoLCAmZCk7CisgIGFsbG9jYXRpb24ud2lkdGgg
PSB3OworICBhbGxvY2F0aW9uLmhlaWdodCA9IGg7CisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZSAod2lkZ2V0LCAmYWxsb2NhdGlvbik7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYo
ImluaXRpYWwgYWxsb2NhdGlvbiAlZCAlZCAlZCAlZFxuIiwgeCwgeSwgdywgaCk7CisjZW5kaWYK
KworICB4dGJpbi0+d2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgIHh0YmluLT5o
ZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworCisgIC8qIHVzZSBHdGtTb2NrZXQn
cyByZWFsaXplICovCisgICgqR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWFsaXpl
KSh3aWRnZXQpOworCisgIC8qIGNyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldCAqLworICB4dF9j
bGllbnRfY3JlYXRlKCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICAgZ3RrX3NvY2tldF9nZXRf
aWQoR1RLX1NPQ0tFVCh4dGJpbikpLCAKKyAgICAgICB4dGJpbi0+aGVpZ2h0LCAKKyAgICAgICB4
dGJpbi0+d2lkdGgpOworICB4dGJpbi0+eHR3aW5kb3cgPSBYdFdpbmRvdyh4dGJpbi0+eHRjbGll
bnQuY2hpbGRfd2lkZ2V0KTsKKworICBnZGtfZmx1c2goKTsKKworICAvKiBub3cgdGhhdCB3ZSBo
YXZlIGNyZWF0ZWQgdGhlIHh0IGNsaWVudCwgYWRkIGl0IHRvIHRoZSBzb2NrZXQuICovCisgIGd0
a19zb2NrZXRfYWRkX2lkKEdUS19TT0NLRVQod2lkZ2V0KSwgeHRiaW4tPnh0d2luZG93KTsKK30K
KworCisKK0d0a1dpZGdldCoKK2d0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRv
dywgU3RyaW5nICogZikKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBncG9pbnRlciB1c2VyX2Rh
dGE7CisKKyAgYXNzZXJ0KHBhcmVudF93aW5kb3cgIT0gTlVMTCk7CisgIHh0YmluID0gZ3RrX3R5
cGVfbmV3IChHVEtfVFlQRV9YVEJJTik7CisKKyAgaWYgKCF4dGJpbikKKyAgICByZXR1cm4gKEd0
a1dpZGdldCopTlVMTDsKKworICBpZiAoZikKKyAgICBmYWxsYmFjayA9IGY7CisKKyAgLyogSW5p
dGlhbGl6ZSB0aGUgWHQgdG9vbGtpdCAqLworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IHBhcmVu
dF93aW5kb3c7CisKKyAgeHRfY2xpZW50X2luaXQoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAg
IEdES19WSVNVQUxfWFZJU1VBTChnZGtfcmdiX2dldF92aXN1YWwoKSksCisgICAgICBHREtfQ09M
T1JNQVBfWENPTE9STUFQKGdka19yZ2JfZ2V0X2NvbG9ybWFwKCkpLAorICAgICAgZ2RrX3JnYl9n
ZXRfdmlzdWFsKCktPmRlcHRoKTsKKworICBpZiAoIXh0YmluLT54dGNsaWVudC54dGRpc3BsYXkp
IHsKKyAgICAvKiBJZiBYdE9wZW5EaXNwbGF5IGZhaWxlZCwgd2UgY2FuJ3QgZ28gYW55IGZ1cnRo
ZXIuCisgICAgICogIEJhaWwgb3V0LgorICAgICAqLworI2lmZGVmIERFQlVHX1hUQklOCisgICAg
cHJpbnRmKCJndGtfeHRiaW5faW5pdDogWHRPcGVuRGlzcGxheSgpIHJldHVybmVkIE5VTEwuXG4i
KTsKKyNlbmRpZgorICAgIGdfZnJlZSAoeHRiaW4pOworICAgIHJldHVybiAoR3RrV2lkZ2V0ICop
TlVMTDsKKyAgfQorCisgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJ1bm5pbmcgd2lkZ2V0LCBo
b29rIHRoaXMgZGlzcGxheSBpbnRvIHRoZQorICAgICBtYWlubG9vcCAqLworICBpZiAoMCA9PSBu
dW1fd2lkZ2V0cykgeworICAgIGludCAgICAgICAgICAgY251bWJlcjsKKyAgICAvKgorICAgICAq
IGhvb2sgWHQgZXZlbnQgbG9vcCBpbnRvIHRoZSBnbGliIGV2ZW50IGxvb3AuCisgICAgICovCisK
KyAgICAvKiB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGd0a19pbml0IGhhcyBhbHJlYWR5IGJlZW4g
Y2FsbGVkICovCisgICAgR1NvdXJjZSogZ3MgPSBnX3NvdXJjZV9uZXcoJnh0X2V2ZW50X2Z1bmNz
LCBzaXplb2YoR1NvdXJjZSkpOworICAgICAgaWYgKCFncykgeworICAgICAgIHJldHVybiBOVUxM
OworICAgICAgfQorICAgIAorICAgIGdfc291cmNlX3NldF9wcmlvcml0eShncywgR0RLX1BSSU9S
SVRZX0VWRU5UUyk7CisgICAgZ19zb3VyY2Vfc2V0X2Nhbl9yZWN1cnNlKGdzLCBUUlVFKTsKKyAg
ICB0YWcgPSBnX3NvdXJjZV9hdHRhY2goZ3MsIChHTWFpbkNvbnRleHQqKU5VTEwpOworI2lmZGVm
IFZNUworICAgIGNudW1iZXIgPSBYQ29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2Vsc2UK
KyAgICBjbnVtYmVyID0gQ29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2VuZGlmCisgICAg
eHRfZXZlbnRfcG9sbF9mZC5mZCA9IGNudW1iZXI7CisgICAgeHRfZXZlbnRfcG9sbF9mZC5ldmVu
dHMgPSBHX0lPX0lOOyAKKyAgICB4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgPSAwOyAgICAvKiBo
bW0uLi4gaXMgdGhpcyBjb3JyZWN0PyAqLworCisgICAgZ19tYWluX2NvbnRleHRfYWRkX3BvbGwg
KChHTWFpbkNvbnRleHQqKU5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHRf
ZXZlbnRfcG9sbF9mZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlf
TE9XKTsKKyAgICAvKiBhZGQgYSB0aW1lciBzbyB0aGF0IHdlIGNhbiBwb2xsIGFuZCBwcm9jZXNz
IFh0IHRpbWVycyAqLworICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPQorICAgICAgZ3RrX3RpbWVv
dXRfYWRkKDI1LAorICAgICAgICAgICAgICAgICAgICAgIChHdGtGdW5jdGlvbil4dF9ldmVudF9w
b2xsaW5nX3RpbWVyX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgIHh0ZGlzcGxheSk7
CisgIH0KKworICAvKiBCdW1wIHVwIG91ciB1c2FnZSBjb3VudCAqLworICBudW1fd2lkZ2V0cysr
OworCisgIC8qIEJ1aWxkIHRoZSBoaWVyYWNoeSAqLworICB4dGJpbi0+eHRkaXNwbGF5ID0geHRi
aW4tPnh0Y2xpZW50Lnh0ZGlzcGxheTsKKyAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhH
VEtfV0lER0VUKHh0YmluKSwgcGFyZW50X3dpbmRvdyk7CisgIGdka193aW5kb3dfZ2V0X3VzZXJf
ZGF0YSh4dGJpbi0+cGFyZW50X3dpbmRvdywgJnVzZXJfZGF0YSk7CisgIGlmICh1c2VyX2RhdGEp
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih1c2VyX2RhdGEpLCBHVEtfV0lE
R0VUKHh0YmluKSk7CisKKyAgcmV0dXJuIEdUS19XSURHRVQgKHh0YmluKTsKK30KKwordm9pZAor
Z3RrX3h0YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg
ICB5KQoreworICB4dGJpbi0+eCA9IHg7CisgIHh0YmluLT55ID0geTsKKworICBpZiAoR1RLX1dJ
REdFVF9SRUFMSVpFRCAoeHRiaW4pKQorICAgIGdka193aW5kb3dfbW92ZSAoR1RLX1dJREdFVCAo
eHRiaW4pLT53aW5kb3csIHgsIHkpOworfQorCit2b2lkCitndGtfeHRiaW5fcmVzaXplIChHdGtX
aWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCkKK3sKKyAgQXJnIGFyZ3NbMl07CisgIEd0
a1h0QmluICp4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKyAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVzaXpl
ICVwICVkICVkXG4iLCAodm9pZCAqKXdpZGdldCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKwor
ICB4dGJpbi0+aGVpZ2h0ID0gaGVpZ2h0OworICB4dGJpbi0+d2lkdGggID0gd2lkdGg7CisKKyAg
Ly8gQXZvaWQgQmFkVmFsdWUgZXJyb3JzIGluIFh0U2V0VmFsdWVzCisgIGlmIChoZWlnaHQgPD0g
MCB8fCB3aWR0aCA8PTApIHsKKyAgICBoZWlnaHQgPSAxOworICAgIHdpZHRoID0gMTsKKyAgfQor
ICBYdFNldEFyZyhhcmdzWzBdLCBYdE5oZWlnaHQsIGhlaWdodCk7CisgIFh0U2V0QXJnKGFyZ3Nb
MV0sIFh0TndpZHRoLCAgd2lkdGgpOworICBYdFNldFZhbHVlcyh4dGJpbi0+eHRjbGllbnQudG9w
X3dpZGdldCwgYXJncywgMik7CisKKyAgLyogd2UgbmVlZCB0byBzZW5kIGEgc2l6ZSBhbGxvY2F0
ZSBzbyB0aGUgc29ja2V0IGtub3dzIGFib3V0IHRoZQorICAgICBzaXplIGNoYW5nZXMgKi8KKyAg
YWxsb2NhdGlvbi54ID0geHRiaW4tPng7CisgIGFsbG9jYXRpb24ueSA9IHh0YmluLT55OworICBh
bGxvY2F0aW9uLndpZHRoID0geHRiaW4tPndpZHRoOworICBhbGxvY2F0aW9uLmhlaWdodCA9IHh0
YmluLT5oZWlnaHQ7CisKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHdpZGdldCwgJmFsbG9j
YXRpb24pOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX3VucmVhbGl6ZSAoR3RrV2lkZ2V0
ICpvYmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisK
KyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl91bnJlYWxpemUoKVxuIik7
CisjZW5kaWYKKworICAvKiBndGtfb2JqZWN0X2Rlc3Ryb3koKSB3aWxsIGFscmVhZHkgaG9sZCBh
IHJlZmNvdW50IG9uIG9iamVjdAorICAgKi8KKyAgeHRiaW4gPSBHVEtfWFRCSU4ob2JqZWN0KTsK
KyAgd2lkZ2V0ID0gR1RLX1dJREdFVChvYmplY3QpOworCisgIEdUS19XSURHRVRfVU5TRVRfRkxB
R1MgKHdpZGdldCwgR1RLX1ZJU0lCTEUpOworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAod2lk
Z2V0KSkgeworICAgIHh0X2NsaWVudF91bnJlYWxpemUoJih4dGJpbi0+eHRjbGllbnQpKTsKKyAg
fQorCisgICgqR1RLX1dJREdFVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKSh3aWRn
ZXQpOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2Rlc3Ryb3kgKEd0a09iamVjdCAqb2Jq
ZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmlu
dGYoImd0a194dGJpbl9kZXN0cm95KClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFp
bCAob2JqZWN0ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9i
amVjdCkpOworCisgIHh0YmluID0gR1RLX1hUQklOIChvYmplY3QpOworCisgIGlmKHh0YmluLT54
dHdpbmRvdykgeworICAgIC8qIHJlbW92ZSB0aGUgZXZlbnQgaGFuZGxlciAqLworICAgIHh0X2Ns
aWVudF9kZXN0cm95KCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgICAgeHRiaW4tPnh0d2luZG93ID0g
MDsKKworICAgIG51bV93aWRnZXRzLS07IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KKwor
ICAgIC8qIElmIHRoaXMgaXMgdGhlIGxhc3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQg
ZGlzcGxheQorICAgICAgIGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KKyAgICBpZiAo
MCA9PSBudW1fd2lkZ2V0cykgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoInJl
bW92aW5nIHRoZSBYdCBjb25uZWN0aW9uIGZyb20gdGhlIG1haW4gbG9vcFxuIik7CisjZW5kaWYK
KyAgICAgIGdfbWFpbl9jb250ZXh0X3JlbW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4
dF9ldmVudF9wb2xsX2ZkKTsKKyAgICAgIGdfc291cmNlX3JlbW92ZSh0YWcpOworCisgICAgICBn
dGtfdGltZW91dF9yZW1vdmUoeHRfcG9sbGluZ190aW1lcl9pZCk7CisgICAgICB4dF9wb2xsaW5n
X3RpbWVyX2lkID0gMDsKKyAgICB9CisgIH0KKworICBHVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9j
bGFzcyktPmRlc3Ryb3kob2JqZWN0KTsKK30KKworLyoKKyogRm9sbG93aW5nIGlzIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBYdCBYRW1iZWRkZWQgZm9yIGNsaWVudCBzaWRlCisqLworCisvKiBJbml0
aWFsIFh0IHBsdWdpbiAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9pbml0KCBYdENsaWVudCAq
IHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAg
ICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLAorICAgICAgICAgICAgICAgIGludCB4dGRlcHRo
KQoreworICBYdEFwcENvbnRleHQgIGFwcF9jb250ZXh0OworICBjaGFyICAgICAgICAgKm1Bcmd2
WzFdOworICBpbnQgICAgICAgICAgIG1BcmdjID0gMDsKKworICAvKgorICAgKiBJbml0aWFsaXpl
IFh0IHN0dWZmCisgICAqLworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xp
ZW50LT5jaGlsZF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IE5VTEw7
CisgIHh0Y2xpZW50LT54dHZpc3VhbCAgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAg
PSAwOworICB4dGNsaWVudC0+eHRkZXB0aCA9IDA7CisKKyAgaWYgKCF4dF9pc19pbml0aWFsaXpl
ZCkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzdGFydGluZyB1cCBYdCBzdHVm
ZlxuIik7CisjZW5kaWYKKyAgICBYdFRvb2xraXRJbml0aWFsaXplKCk7CisgICAgYXBwX2NvbnRl
eHQgPSBYdENyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgIGlmIChmYWxsYmFjaykKKyAg
ICAgIFh0QXBwU2V0RmFsbGJhY2tSZXNvdXJjZXMoYXBwX2NvbnRleHQsIGZhbGxiYWNrKTsKKwor
ICAgIHh0ZGlzcGxheSA9IFh0T3BlbkRpc3BsYXkoYXBwX2NvbnRleHQsIGdka19nZXRfZGlzcGxh
eSgpLCBOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JhcHBlciIsIE5VTEws
IDAsICZtQXJnYywgbUFyZ3YpOworICAgIGlmICh4dGRpc3BsYXkpCisgICAgICB4dF9pc19pbml0
aWFsaXplZCA9IFRSVUU7CisgIH0KKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSB4dGRpc3BsYXk7
CisgIHh0Y2xpZW50LT54dHZpc3VhbCAgID0geHR2aXN1YWw7CisgIHh0Y2xpZW50LT54dGNvbG9y
bWFwID0geHRjb2xvcm1hcDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggICAgPSB4dGRlcHRoOworfQor
CisvKiBDcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXRzCisqICAqLworc3RhdGljIHZvaWQKK3h0
X2NsaWVudF9jcmVhdGUgKCBYdENsaWVudCogeHRjbGllbnQgLCAKKyAgICAgICAgICAgICAgICAg
ICBXaW5kb3cgZW1iZWRkZXJpZCwgCisgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisg
ICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICkgCit7CisgIGludCAgICAgICAgICAgbjsKKyAg
QXJnICAgICAgICAgICBhcmdzWzZdOworICBXaWRnZXQgICAgICAgIGNoaWxkX3dpZGdldDsKKyAg
V2lkZ2V0ICAgICAgICB0b3Bfd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRm
KCJ4dF9jbGllbnRfY3JlYXRlKCkgXG4iKTsKKyNlbmRpZgorICB0b3Bfd2lkZ2V0ID0gWHRBcHBD
cmVhdGVTaGVsbCgiZHJhd2luZ0FyZWEiLCAiV3JhcHBlciIsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gdG9w
X3dpZGdldDsKKworICAvKiBzZXQgc2l6ZSBvZiBYdCB3aW5kb3cgKi8KKyAgbiA9IDA7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJn
c1tuXSwgWHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0VmFsdWVzKHRvcF93aWRnZXQs
IGFyZ3MsIG4pOworCisgIGNoaWxkX3dpZGdldCA9IFh0VmFDcmVhdGVXaWRnZXQoImZvcm0iLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVXaWRnZXRDbGFzcywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCwgTlVMTCk7CisK
KyAgbiA9IDA7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsK
KyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TnZpc3VhbCwgICB4dGNsaWVudC0+eHR2aXN1YWwgKTsgbisrOworICBYdFNl
dEFyZyhhcmdzW25dLCBYdE5kZXB0aCwgICAgeHRjbGllbnQtPnh0ZGVwdGggKTsgbisrOworICBY
dFNldEFyZyhhcmdzW25dLCBYdE5jb2xvcm1hcCwgeHRjbGllbnQtPnh0Y29sb3JtYXAgKTsgbisr
OworICBYdFNldEFyZyhhcmdzW25dLCBYdE5ib3JkZXJXaWR0aCwgMCk7IG4rKzsKKyAgWHRTZXRW
YWx1ZXMoY2hpbGRfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBYU3luYyh4dGNsaWVudC0+eHRkaXNw
bGF5LCBGQUxTRSk7CisgIHh0Y2xpZW50LT5vbGR3aW5kb3cgPSB0b3Bfd2lkZ2V0LT5jb3JlLndp
bmRvdzsKKyAgdG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSBlbWJlZGRlcmlkOworCisgIC8qIHRo
aXMgbGl0dGxlIHRyaWNrIHNlZW1zIHRvIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHdpZGdldCAq
LworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0UmVnaXN0ZXJEcmF3YWJs
ZSh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVyaWQs
CisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbHNlCisgIF9YdFJlZ2lzdGVy
V2luZG93KCBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7Cisj
ZW5kaWYKKyAgWHRSZWFsaXplV2lkZ2V0KGNoaWxkX3dpZGdldCk7CisKKyAgLyogbGlzdGVuIHRv
IGFsbCBYdCBldmVudHMgKi8KKyAgWFNlbGVjdElucHV0KHh0Y2xpZW50LT54dGRpc3BsYXksIAor
ICAgICAgICAgICAgICAgWHRXaW5kb3codG9wX3dpZGdldCksIAorICAgICAgICAgICAgICAgMHgw
RkZGRkYpOworICB4dF9jbGllbnRfc2V0X2luZm8gKGNoaWxkX3dpZGdldCwgMCk7CisKKyAgWHRN
YW5hZ2VDaGlsZChjaGlsZF93aWRnZXQpOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gY2hp
bGRfd2lkZ2V0OworCisgIC8qIHNldCB0aGUgZXZlbnQgaGFuZGxlciAqLworICBYdEFkZEV2ZW50
SGFuZGxlcihjaGlsZF93aWRnZXQsCisgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGICYgflJl
c2l6ZVJlZGlyZWN0TWFzaywKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAg
ICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGll
bnQpOworICBYdEFkZEV2ZW50SGFuZGxlcihjaGlsZF93aWRnZXQsIAorICAgICAgICAgICAgICAg
ICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAg
ICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVy
KXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50
KTsKKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9p
ZAoreHRfY2xpZW50X3VucmVhbGl6ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCApCit7CisjaWYgWGxp
YlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRVbnJlZ2lzdGVyRHJhd2FibGUoeHRjbGll
bnQtPnh0ZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRn
ZXQtPmNvcmUud2luZG93KTsKKyNlbHNlCisgIF9YdFVucmVnaXN0ZXJXaW5kb3coeHRjbGllbnQt
PnRvcF93aWRnZXQtPmNvcmUud2luZG93LAorICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0KTsKKyNlbmRpZgorCisgIC8qIGZsdXNoIHRoZSBxdWV1ZSBiZWZvcmUgd2Ug
cmV0dXJuaW5nIG9yaWdpbiB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdworICAgICBvciB3ZSBjYW4g
Z2V0IFggZXJyb3Igc2luY2UgdGhlIHdpbmRvdyBpcyBnb25lICovCisgIFhTeW5jKHh0Y2xpZW50
LT54dGRpc3BsYXksIEZhbHNlKTsKKworICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5k
b3cgPSB4dGNsaWVudC0+b2xkd2luZG93OworICBYdFVucmVhbGl6ZVdpZGdldCh4dGNsaWVudC0+
dG9wX3dpZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgCit4dF9jbGllbnRfZGVz
dHJveSAgIChYdENsaWVudCogeHRjbGllbnQpCit7CisgIGlmKHh0Y2xpZW50LT50b3Bfd2lkZ2V0
KSB7CisgICAgWHRSZW1vdmVFdmVudEhhbmRsZXIoeHRjbGllbnQtPmNoaWxkX3dpZGdldCwgMHgw
RkZGRkYsIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4
dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOworICAgIFh0RGVzdHJveVdpZGdldCh4
dGNsaWVudC0+dG9wX3dpZGdldCk7CisgICAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOwor
ICB9Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfc2V0X2luZm8gKFdpZGdl
dCB4dHBsdWcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisgIHVuc2lnbmVkIGxvbmcgYnVmZmVy
WzJdOworCisgIEF0b20gaW5mb0F0b20gPSBYSW50ZXJuQXRvbShYdERpc3BsYXkoeHRwbHVnKSwg
Il9YRU1CRURfSU5GTyIsIEZhbHNlKTsgCisKKyAgYnVmZmVyWzFdID0gMDsgICAgICAgICAgICAg
ICAgLyogUHJvdG9jb2wgdmVyc2lvbiAqLworICBidWZmZXJbMV0gPSBmbGFnczsKKworICBYQ2hh
bmdlUHJvcGVydHkgKFh0RGlzcGxheSh4dHBsdWcpLCBYdFdpbmRvdyh4dHBsdWcpLAorICAgICAg
ICAgICAgICAgICAgIGluZm9BdG9tLCBpbmZvQXRvbSwgMzIsCisgICAgICAgICAgICAgICAgICAg
UHJvcE1vZGVSZXBsYWNlLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYnVm
ZmVyLCAyKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3Nh
Z2UoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAg
WHRDbGllbnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIHN3aXRjaCAoZXZl
bnQtPnhjbGllbnQuZGF0YS5sWzFdKQorICB7CisgIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElG
WToKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0FDVElWQVRFOgorI2lmZGVmIERF
QlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZB
VEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElW
QVRFOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJF
RF9XSU5ET1dfREVBQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1C
RURfTU9EQUxJVFlfT046CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVu
dCBnZXQgWEVNQkVEX01PREFMSVRZX09OXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNl
IFhFTUJFRF9NT0RBTElUWV9PRkY6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0
IGNsaWVudCBnZXQgWEVNQkVEX01PREFMSVRZX09GRlxuIik7CisjZW5kaWYKKyAgICBicmVhazsK
KyAgY2FzZSBYRU1CRURfRk9DVVNfSU46CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKKyAgICB7
CisgICAgICBYRXZlbnQgeGV2ZW50OworICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4
ZXZlbnQpKTsKKworICAgICAgaWYoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9G
T0NVU19JTikgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBn
b3QgZm9jdXMgaW5cbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZv
Y3VzSW47CisgICAgICB9CisgICAgICBlbHNlIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAg
ICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIG91dFxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2
ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNPdXQ7CisgICAgICB9CisKKyAgICAgIHhldmVudC54Zm9j
dXMud2luZG93ID0gWHRXaW5kb3coeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgeGV2ZW50
Lnhmb2N1cy5kaXNwbGF5ID0gWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAg
IFhTZW5kRXZlbnQoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCisgICAgICAgICAg
ICAgICAgIHhldmVudC54Zm9jdXMud2luZG93LAorICAgICAgICAgICAgICAgICBGYWxzZSwgTm9F
dmVudE1hc2ssCisgICAgICAgICAgICAgICAgICZ4ZXZlbnQgKTsKKyAgICAgIFhTeW5jKCBYdERp
c3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCBGYWxzZSk7CisgICAgfQorICAgIGJyZWFrOwor
ICBkZWZhdWx0OgorICAgIGJyZWFrOworICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLwor
fQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdl
dCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50
ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICAKKyAgc3dpdGNoKGV2ZW50LT50
eXBlKQorICAgIHsKKyAgICBjYXNlIENsaWVudE1lc3NhZ2U6CisgICAgICAvKiBIYW5kbGUgeGVt
YmVkIG1lc3NhZ2UgKi8KKyAgICAgIGlmIChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQor
ICAgICAgICAgICAgICAgICBYSW50ZXJuQXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lk
Z2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7
CisgICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEs
IGV2ZW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6
CisgICAgICBicmVhazsKKyAgICBjYXNlIE1hcHBpbmdOb3RpZnk6CisgICAgICB4dF9jbGllbnRf
c2V0X2luZm8gKHcsIFhFTUJFRF9NQVBQRUQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm1h
cE5vdGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgMCk7CisgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzSW46CisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAw
LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNPdXQ6CisgICAgICBicmVhazsKKyAg
ICBjYXNlIEtleVByZXNzOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoIktleSBQ
cmVzcyBHb3QhXG4iKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
IGJyZWFrOworICAgIH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3Rh
dGljIHZvaWQKK3NlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCisgICAg
ICAgICAgICAgICAgICAgICBsb25nICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAg
IGxvbmcgICAgICBkZXRhaWwsIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEx
LCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTIsICAKKyAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgICAgICB0aW1lKSAgIAoreworICBYRXZlbnQgeGV2ZW50OyAKKyAgV2lu
ZG93IHc9WHRXaW5kb3coeHRjbGllbnQtPnRvcF93aWRnZXQpOworICBEaXNwbGF5KiBkcHk9eHRj
bGllbnQtPnh0ZGlzcGxheTsKKyAgaW50IGVycm9yY29kZTsKKworICBtZW1zZXQoJnhldmVudCww
LHNpemVvZih4ZXZlbnQpKTsKKyAgeGV2ZW50LnhjbGllbnQud2luZG93ID0gdzsKKyAgeGV2ZW50
LnhjbGllbnQudHlwZSA9IENsaWVudE1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50Lm1lc3NhZ2Vf
dHlwZSA9IFhJbnRlcm5BdG9tKGRweSwiX1hFTUJFRCIsRmFsc2UpOworICB4ZXZlbnQueGNsaWVu
dC5mb3JtYXQgPSAzMjsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCisgIHhl
dmVudC54Y2xpZW50LmRhdGEubFsxXSA9IG1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50LmRhdGEu
bFsyXSA9IGRldGFpbDsgCisgIHhldmVudC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICB4
ZXZlbnQueGNsaWVudC5kYXRhLmxbNF0gPSBkYXRhMjsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAg
WFNlbmRFdmVudCAoZHB5LCB3LCBGYWxzZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOworICBYU3lu
YyAoZHB5LEZhbHNlKTsKKworICBpZigoZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3Io
JWQpISEhXG4iLGVycm9yY29kZSk7CisjZW5kaWYKKyAgfQorfQorCitzdGF0aWMgaW50ICAgICAg
ICAgICAgIAorZXJyb3JfaGFuZGxlcihEaXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJy
b3IpCit7CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9IGVycm9yLT5lcnJvcl9jb2RlOworICByZXR1
cm4gMDsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAgCit0cmFwX2Vycm9ycyh2b2lkKQorewor
ICB0cmFwcGVkX2Vycm9yX2NvZGUgPTA7CisgIG9sZF9lcnJvcl9oYW5kbGVyID0gWFNldEVycm9y
SGFuZGxlcihlcnJvcl9oYW5kbGVyKTsKK30KKworc3RhdGljIGludCAgICAgICAgIAordW50cmFw
X2Vycm9yKHZvaWQpCit7CisgIFhTZXRFcnJvckhhbmRsZXIob2xkX2Vycm9yX2hhbmRsZXIpOwor
ICBpZih0cmFwcGVkX2Vycm9yX2NvZGUpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
ZigiR2V0IFggV2luZG93IEVycm9yID0gJWRcbiIsIHRyYXBwZWRfZXJyb3JfY29kZSk7CisjZW5k
aWYKKyAgfQorICByZXR1cm4gdHJhcHBlZF9lcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCAg
ICAgICAgIAoreHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVz
ZXJfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHcp
OworICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2VyX2RhdGE7CisgIFdpbmRvdyB3aW4gPSBYdFdp
bmRvdyh3KTsKKworICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ3JlYXRl
Tm90aWZ5OgorICAgICAgaWYoZXZlbnQtPnhjcmVhdGV3aW5kb3cucGFyZW50ID09IHdpbikgewor
ICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldCggZHB5LCBldmVudC0+eGNyZWF0
ZXdpbmRvdy53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyX3RyZWUoY2hpbGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBicmVh
azsKKyAgICBjYXNlIERlc3Ryb3lOb3RpZnk6CisgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVu
ZXIoIHcsIHVzZXJfZGF0YSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5
OgorICAgICAgaWYoZXZlbnQtPnhyZXBhcmVudC5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIC8q
IEkgYW0gdGhlIG5ldyBwYXJlbnQgKi8KKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9X
aWRnZXQoZHB5LCBldmVudC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkK
KyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7
CisgICAgICB9CisgICAgICBlbHNlIGlmKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IHdpbikg
eworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgY2hpbGQgKi8KKyAgICAgIH0KKyAgICAgIGVsc2Ug
eworICAgICAgICAvKiBJIGFtIHRoZSBvbGQgcGFyZW50ICovCisgICAgICB9CisgICAgICBicmVh
azsKKyAgICBjYXNlIEJ1dHRvblJlbGVhc2U6CisjaWYgMAorICAgICAgWFNldElucHV0Rm9jdXMo
ZHB5LCBYdFdpbmRvdyh4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2
ZW50LT54YnV0dG9uLnRpbWUpOworI2VuZGlmCisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICgg
eHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9D
VVMsIDAsIDAsIDAsIDApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFr
OworICAgIH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZv
aWQKK3h0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEp
Cit7CisgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7CisgIGxvbmcgZXZlbnRtYXNrOworICBYdENs
aWVudCAqeHRjbGllbnQgPSB1c2VyX2RhdGE7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9l
cnJvcnMgKCk7CisgIFhHZXRXaW5kb3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3co
dyksICZhdHRyKTsKKyAgZXZlbnRtYXNrID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBTdWJzdHJ1
Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2s7CisgIFhTZWxlY3RJbnB1dChYdERp
c3BsYXkodyksCisgICAgICAgICAgICAgICBYdFdpbmRvdyh3KSwgCisgICAgICAgICAgICAgICBl
dmVudG1hc2spOworCisgIFh0QWRkRXZlbnRIYW5kbGVyKHcsIAorICAgICAgICAgICAgICAgICAg
ICBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAg
ICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0
X2NsaWVudF9mb2N1c19saXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsK
KyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9yZW1vdmVfZm9jdXNfbGlz
dGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGludCBlcnJvcmNvZGU7
CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIFN1YnN0cnVj
dHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgdXNlcl9k
YXRhKTsKKworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1
c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKSAK
K3sKKyAgV2luZG93IHdpbiA9IFh0V2luZG93KHRyZWVyb290KTsKKyAgV2luZG93ICpjaGlsZHJl
bjsKKyAgV2luZG93IHJvb3QsIHBhcmVudDsKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHRy
ZWVyb290KTsKKyAgdW5zaWduZWQgaW50IGksIG5jaGlsZHJlbjsKKworICAvKiBlbnN1cmUgd2Ug
ZG9uJ3QgYWRkIG1vcmUgdGhhbiBvbmNlICovCisgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcigg
dHJlZXJvb3QsIHVzZXJfZGF0YSk7CisgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggdHJlZXJvb3Qs
IHVzZXJfZGF0YSk7CisgIHRyYXBfZXJyb3JzKCk7CisgIGlmKCFYUXVlcnlUcmVlKGRweSwgd2lu
LCAmcm9vdCwgJnBhcmVudCwgJmNoaWxkcmVuLCAmbmNoaWxkcmVuKSkgeworICAgIHVudHJhcF9l
cnJvcigpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmKHVudHJhcF9lcnJvcigpKSAKKyAgICBy
ZXR1cm47CisKKyAgZm9yKGk9MDsgaTxuY2hpbGRyZW47ICsraSkgeworICAgIFdpZGdldCBjaGls
ZCA9IFh0V2luZG93VG9XaWRnZXQoZHB5LCBjaGlsZHJlbltpXSk7CisgICAgaWYgKGNoaWxkKSAK
KyAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAg
fQorICBYRnJlZSgodm9pZCopY2hpbGRyZW4pOworCisgIHJldHVybjsKK30KKwpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNp
bmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBh
Y2thZ2VHdGs6On5QbHVnaW5QYWNrYWdlR3RrKCkKK3sKKyAgICBBU1NFUlQoIW1faXNMb2FkZWQp
OworfQorCitQbHVnaW5QYWNrYWdlR3RrOjpQbHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX2lzTG9hZGVkKGZhbHNl
KQorICAgICwgbV9sb2FkQ291bnQoMCkKKyAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1
bGUoMCkKKyAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKK3sKKyAgICBpbnQgcG9z
ID0gbV9wYXRoLmRlcHJlY2F0ZWRTdHJpbmcoKS5maW5kUmV2KCcvJyk7CisKKyAgICBtX2ZpbGVO
YW1lID0gbV9wYXRoLnJpZ2h0KG1fcGF0aC5sZW5ndGgoKSAtIHBvcyAtIDEpOworCit9CisKK2Jv
b2wgUGx1Z2luUGFja2FnZUd0azo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgZ2NoYXIqIHR5cGVzID0gbV9OUF9HZXRN
SU1FRGVzY3JpcHRpb24oKTsKKyAgICBnY2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlw
ZXMsICI7IiwgLTEpOworICAgIGZvciAoaW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURl
c2NzW2ldWzBdOyBpKyspIHsKKyAgICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQo
bWltZURlc2NzW2ldLCAiOiIsIDMpOworCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0
cmluZzo6ZnJvbVVURjgobWltZURhdGFbMl0pOworICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMg
PSBnX3N0cnNwbGl0KG1pbWVEYXRhWzFdLCAiLCIsIC0xKTsKKworICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBleHRWZWN0b3I7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBq
KyspCisgICAgICAgICAgICBleHRWZWN0b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5z
aW9uc1tqXSkpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0s
IGV4dFZlY3Rvcik7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVsw
XSwgZGVzY3JpcHRpb24pOworCisgICAgICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7CisgICAg
ICAgIGdfc3RyZnJlZXYobWltZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNj
cyk7CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0gbV9OUFBfR2V0
VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0g
TlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9
IDA7CisgICAgZXJyID0gbV9OUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3Ry
aW5nLCAmYnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBt
X2Rlc2NyaXB0aW9uID0gYnVmZmVyOworCisgICAgdW5sb2FkKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6bG9hZCgpCit7CisgICAgaWYgKG1faXNMb2Fk
ZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgbV9tb2R1bGUgPSBnX21vZHVsZV9vcGVuKChtX3BhdGgudXRmOCgpKS5kYXRhKCks
IEdfTU9EVUxFX0JJTkRfTE9DQUwpOworICAgIGlmICghbV9tb2R1bGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1
bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVf
c3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUp
OworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIs
ICh2b2lkKiopJm1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wo
bV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKyAgICBn
X21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJm1fTlBQX0dl
dFZhbHVlKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUF9HZXRNSU1FRGVzY3Jp
cHRpb24gfHwgIW1fTlBQX1NodXRkb3duIHx8ICFtX05QUF9HZXRWYWx1ZSkKKyAgICAgICAgZ290
byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2lu
RnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7
CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7Cisg
ICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJs
ID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVx
dWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mu
c3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNl
ckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOworICAg
IG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVn
aW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5
ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0g
TlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0
VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7CisgICAg
bV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7CisgICAg
bV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAgIG1f
YnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5w
dXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAg
bV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJs
ZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBO
X1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRp
ZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRz
dHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmlu
ZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9t
SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0
ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9i
amVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2Jq
ZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJv
d3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93
c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9w
ZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVy
dHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5
ID0gX05QTl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9I
YXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4
Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsK
KworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1
bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJv
cnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAg
ICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
UGx1Z2luUGFja2FnZUd0azo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9OUFBfU2h1dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigp
OworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7
CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9s
b2FkQ291bnQgPT0gMCk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAgIGdfbW9kdWxlX2Ns
b3NlIChtX21vZHVsZSk7CisKKyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBh
Y2thZ2VHdGsqIFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBw
YXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3Rr
KiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VHdGsocGF0aCwgbGFzdE1vZGlmaWVkKTsKKwor
ICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVsZXRlIHBhY2thZ2U7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGFja2FnZTsKK30K
KwordW5zaWduZWQgUGx1Z2luUGFja2FnZUd0azo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2ln
bmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAg
ICAgICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29t
cHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2Yo
dW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6
ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYg
YikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblN0cmVhbUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorCisj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxm
Y250bC5oPgorCisvLyBXZSB1c2UgLTIgaGVyZSBiZWNhdXNlIHNvbWUgcGx1Z2lucyBsaWtlIHRv
IHJldHVybiAtMSB0byBpbmRpY2F0ZSBlcnJvcgorLy8gYW5kIHRoaXMgd2F5IHdlIHdvbid0IGNs
YXNoIHdpdGggdGhlbS4KK3N0YXRpYyBjb25zdCBpbnQgV2ViUmVhc29uTm9uZSA9IC0yOworCit1
c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3R5cGVkZWYgSGFzaE1hcDxOUFN0cmVhbSosIE5QUD4gU3RyZWFtTWFwOworc3RhdGljIFN0cmVh
bU1hcCYgc3RyZWFtcygpCit7CisgICAgc3RhdGljIFN0cmVhbU1hcCBzdGF0aWNTdHJlYW1zOwor
ICAgIHJldHVybiBzdGF0aWNTdHJlYW1zOworfQorCitQbHVnaW5TdHJlYW1HdGs6OlBsdWdpblN0
cmVhbUd0ayhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3LCBGcmFtZSogZnJhbWUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZv
aWQqIG5vdGlmeURhdGEpCisgICAgOiBtX3Jlc291cmNlUmVxdWVzdChyZXNvdXJjZVJlcXVlc3Qp
CisgICAgLCBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisg
ICAgLCBtX25vdGlmeURhdGEobm90aWZ5RGF0YSkKKyAgICAsIG1fc2VuZE5vdGlmaWNhdGlvbihz
ZW5kTm90aWZpY2F0aW9uKQorICAgICwgbV9zdHJlYW1TdGF0ZShTdHJlYW1CZWZvcmVTdGFydGVk
KQorICAgICwgbV9sb2FkTWFudWFsbHkoZmFsc2UpCisgICAgLCBtX2RlbGF5RGVsaXZlcnlUaW1l
cih0aGlzLCAmUGx1Z2luU3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZCkKKyAgICAs
IG1fZGVsaXZlcnlEYXRhKDApCisgICAgLCBtX3RlbXBGaWxlSGFuZGxlKDApCisgICAgLCBtX3Bs
dWdpbkZ1bmNzKHBsdWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5GdW5jcygpKQorICAgICwgbV9p
bnN0YW5jZShwbHVnaW5WaWV3LT5pbnN0YW5jZSgpKQoreworICAgIEFTU0VSVChtX3BsdWdpblZp
ZXcpOworCisgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7Cisg
ICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJl
YW0ubm90aWZ5RGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKworICAg
IHN0cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKworUGx1Z2luU3RyZWFt
R3RrOjp+UGx1Z2luU3RyZWFtR3RrKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBT
dHJlYW1TdGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGlmIChtX3N0cmVh
bS51cmwpCisgICAgICAgIGZyZWUoKGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJlYW1z
KCkucmVtb3ZlKCZtX3N0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFydCgp
Cit7CisgICAgQVNTRVJUKCFtX2xvYWRNYW51YWxseSk7CisKKyAgICBtX2xvYWRlciA9IE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUobV9mcmFtZSwgdGhpcyk7CisKKyAgICBtX2xv
YWRlci0+c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7CisgICAgbV9sb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPmFkZFBsdWdJblN0cmVhbUxvYWRlcihtX2xvYWRlci5nZXQoKSk7CisgICAgbV9s
b2FkZXItPmxvYWQobV9yZXNvdXJjZVJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0
azo6c3RvcCgpCit7CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBp
ZiAobV9sb2FkTWFudWFsbHkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICAg
ICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmFj
dGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CisK
KyAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJhbWUt
PmxvYWRlcigpLT5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9sb2FkZXIt
PmNhbmNlbCgpOworICAgICAgICBtX2xvYWRlciA9IDA7CisgICAgfQorfQorCit2b2lkIFBsdWdp
blN0cmVhbUd0azo6c3RhcnRTdHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBt
X3Jlc291cmNlUmVzcG9uc2UudXJsKCk7CisKKyAgICAvLyBTb21lIHBsdWdpbnMgKEZsYXNoKSBl
eHBlY3QgdGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNrIGRlY29kZWQgYXMgdGhp
cyBpcyB0aGUKKyAgICAvLyBmb3JtYXQgdXNlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAg
ICBpZiAocmVzcG9uc2VVUkwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxz
ZSkpCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRlY29kZV9z
dHJpbmcocmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0cmluZygpKS51dGY4KCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0
cmluZygpLnV0ZjgoKSk7CisgICAgCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1fcmVzb3Vy
Y2VSZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKyAgICAKKyAgICBsb25nIGxvbmcgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpOworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAgICBW
ZWN0b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjog
Iik7CisKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNv
dXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3Ro
KCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJhY3Rl
cnMoKSwgc2VwYXJhdG9yLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1faGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgpOwor
CisgICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXBy
ZXNzZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAg
ICAvLyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3Qg
eWV0IGtub3duIGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcw
NTk5PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVu
dEVuY29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1F
bmNvZGluZyIpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBjb250
ZW50RW5jb2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExl
bmd0aCA9IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMuZGF0
YSgpOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7
CisgICAgbV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsKKyAg
ICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSBtX3Jlc291cmNlUmVzcG9uc2UubGFzdE1vZGlmaWVk
RGF0ZSgpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICBt
X3RyYW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9yZWFz
b24gPSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ry
b3lzdHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgorICAg
IFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBOUEVycm9yIG5w
RXJyID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1p
bWVUeXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAg
ICAKKyAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3
c3RyZWFtIHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVk
OworCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBjYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKG5wRXJyKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JN
QUwpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoKG1fdGVtcEZpbGVIYW5kbGUgPSB0
bXBmaWxlKCkpICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNv
bWV0aGluZyB3ZW50IHdyb25nLCBjYW5jZWwgbG9hZGluZyB0aGUgc3RyZWFtCisgICAgY2FuY2Vs
QW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK05QUCBQbHVnaW5TdHJl
YW1HdGs6Om93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHN0
cmVhbXMoKS5nZXQoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBkZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAg
c3RvcCgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbShOUFJlYXNv
biByZWFzb24pCit7CisgICAgbV9yZWFzb24gPSByZWFzb247CisgICAgaWYgKG1fcmVhc29uICE9
IE5QUkVTX0RPTkUpIHsKKyAgICAgICAgLy8gU3RvcCBhbnkgcGVuZGluZyBkYXRhIGZyb20gYmVp
bmcgc3RyZWFtZWQKKyAgICAgICAgaWYgKG1fZGVsaXZlcnlEYXRhKQorICAgICAgICAgICAgbV9k
ZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICB9IGVsc2UgaWYgKG1fZGVsaXZlcnlEYXRhICYm
IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPiAwKSB7CisgICAgICAgIC8vIFRoZXJlIGlzIG1vcmUg
ZGF0YSB0byBiZSBzdHJlYW1lZCwgZG9uJ3QgZGVzdHJveSB0aGUgc3RyZWFtIG5vdy4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBkZXN0cm95U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
U3RyZWFtR3RrOjpkZXN0cm95U3RyZWFtKCkKK3sKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBT
dHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQgKG1fcmVhc29uICE9
IFdlYlJlYXNvbk5vbmUpOworICAgIEFTU0VSVCAoIW1fZGVsaXZlcnlEYXRhIHx8IG1fZGVsaXZl
cnlEYXRhLT5zaXplKCkgPT0gMCk7CisKKyAgICBpZiAobV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxM
KQorICAgICAgICBmY2xvc2UobV90ZW1wRmlsZUhhbmRsZSk7CisKKyAgICBpZiAobV9zdHJlYW0u
bmRhdGEgIT0gMCkgeworICAgICAgICBpZiAobV9yZWFzb24gPT0gTlBSRVNfRE9ORSAmJiAobV90
cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRU9O
TFkpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fcGF0aC5pc051bGwoKSk7CisKKyAgICAgICAg
ICAgIG1fcGx1Z2luRnVuY3MtPmFzZmlsZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcGF0aC5k
YXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgTlBFcnJvciBucEVycjsKKyAgICAgICAgbnBF
cnIgPSBtX3BsdWdpbkZ1bmNzLT5kZXN0cm95c3RyZWFtKG1faW5zdGFuY2UsICZtX3N0cmVhbSwg
bV9yZWFzb24pOworCisgICAgICAgIG1fc3RyZWFtLm5kYXRhID0gMDsKKyAgICB9CisKKyAgICBp
ZiAobV9zZW5kTm90aWZpY2F0aW9uKQorICAgICAgICBtX3BsdWdpbkZ1bmNzLT51cmxub3RpZnko
bV9pbnN0YW5jZSwgbV9yZXNvdXJjZVJlcXVlc3QudXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLnV0
ZjgoKSwgbV9yZWFzb24sIG1fbm90aWZ5RGF0YSk7CisKKyAgICBtX3N0cmVhbVN0YXRlID0gU3Ry
ZWFtU3RvcHBlZDsKKworICAgIC8vIGRpc2Nvbm5lY3RTdHJlYW0gY2FuIGNhdXNlIHVzIHRvIGJl
IGRlbGV0ZWQuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKyAg
ICBpZiAoIW1fbG9hZE1hbnVhbGx5KQorICAgICAgICBtX3BsdWdpblZpZXctPmRpc2Nvbm5lY3RT
dHJlYW0odGhpcyk7CisKKyAgICBtX3BsdWdpblZpZXcgPSAwOworfQorCit2b2lkIFBsdWdpblN0
cmVhbUd0azo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luU3RyZWFtR3RrPiog
dGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX2RlbGF5RGVsaXZlcnlUaW1lcik7CisK
KyAgICBkZWxpdmVyRGF0YSgpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVsaXZlckRh
dGEoKQoreworICAgIEFTU0VSVChtX2RlbGl2ZXJ5RGF0YSk7CisgICAgCisgICAgaWYgKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBj
YW5jZWwgb3VyIGpvYiBpbiB0aGUgU3VicmVzb3VyY2VMb2FkZXIgb24gZXJyb3Igc28gd2UgZG9u
J3QgcmVhY2ggdGhpcyBjYXNlCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlICE9IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgaWYgKCFtX3N0cmVhbS5uZGF0
YSB8fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApCisgICAgICAgIHJldHVybjsKKworICAg
IGludDMyIHRvdGFsQnl0ZXMgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIGludDMyIHRv
dGFsQnl0ZXNEZWxpdmVyZWQgPSAwOworCisgICAgd2hpbGUgKHRvdGFsQnl0ZXNEZWxpdmVyZWQg
PCB0b3RhbEJ5dGVzKSB7CisgICAgICAgIGludDMyIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1
bmNzLT53cml0ZXJlYWR5KG1faW5zdGFuY2UsICZtX3N0cmVhbSk7CisKKyAgICAgICAgaWYgKGRl
bGl2ZXJ5Qnl0ZXMgPD0gMCkgeworICAgICAgICAgICAgbV9kZWxheURlbGl2ZXJ5VGltZXIuc3Rh
cnRPbmVTaG90KDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIHRvdGFsQnl0ZXMgLSB0
b3RhbEJ5dGVzRGVsaXZlcmVkKTsKKyAgICAgICAgICAgIGludDMyIGRhdGFMZW5ndGggPSBkZWxp
dmVyeUJ5dGVzOworICAgICAgICAgICAgY2hhciogZGF0YSA9IG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkOworCisgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZGF0
YQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVuY3MtPndyaXRlKG1faW5z
dGFuY2UsICZtX3N0cmVhbSwgbV9vZmZzZXQsIGRhdGFMZW5ndGgsICh2b2lkKilkYXRhKTsKKyAg
ICAgICAgICAgIGlmIChkZWxpdmVyeUJ5dGVzIDwgMCkgeworICAgICAgICAgICAgICAgIGNhbmNl
bEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVs
aXZlcnlCeXRlcywgZGF0YUxlbmd0aCk7CisgICAgICAgICAgICBtX29mZnNldCArPSBkZWxpdmVy
eUJ5dGVzOworICAgICAgICAgICAgdG90YWxCeXRlc0RlbGl2ZXJlZCArPSBkZWxpdmVyeUJ5dGVz
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPiAwKSB7
CisgICAgICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAg
ICAgICAgaW50IHJlbWFpbmluZ0J5dGVzID0gdG90YWxCeXRlcyAtIHRvdGFsQnl0ZXNEZWxpdmVy
ZWQ7CisgICAgICAgICAgICBtZW1tb3ZlKG1fZGVsaXZlcnlEYXRhLT5kYXRhKCksIG1fZGVsaXZl
cnlEYXRhLT5kYXRhKCkgKyB0b3RhbEJ5dGVzRGVsaXZlcmVkLCByZW1haW5pbmdCeXRlcyk7Cisg
ICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKHJlbWFpbmluZ0J5dGVzKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAg
ICAgICAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAgICAgICAgICBk
ZXN0cm95U3RyZWFtKCk7CisgICAgICAgIH0KKyAgICB9IAorfQorCit2b2lkIFBsdWdpblN0cmVh
bUd0azo6c2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3Qg
Q1N0cmluZyYgcmVzdWx0U3RyaW5nKQoreworICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCBSZXNv
dXJjZVJlc3BvbnNlKHJlcXVlc3RVUkwsICJ0ZXh0L3BsYWluIiwgcmVzdWx0U3RyaW5nLmxlbmd0
aCgpLCAiIiwgIiIpKTsKKworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGRpZFJlY2VpdmVEYXRhKDAsIHJlc3VsdFN0cmluZy5k
YXRhKCksIHJlc3VsdFN0cmluZy5sZW5ndGgoKSk7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0g
U3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlkRmluaXNoTG9hZGluZygw
KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIG1fcmVzb3VyY2VSZXNw
b25zZSA9IHJlc3BvbnNlOworCisgICAgc3RhcnRTdHJlYW0oKTsKK30KKwordm9pZCBQbHVnaW5T
dHJlYW1HdGs6OmRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGxvYWRlciA9
PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworICAgIEFTU0VSVChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOworICAgIAorICAgIGlmICghbV9kZWxpdmVyeURhdGEp
CisgICAgICAgIG1fZGVsaXZlcnlEYXRhLnNldChuZXcgVmVjdG9yPGNoYXI+KTsKKworICAgIGlu
dCBvbGRTaXplID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAgICBtX2RlbGl2ZXJ5RGF0YS0+
cmVzaXplKG9sZFNpemUgKyBsZW5ndGgpOworICAgIG1lbWNweShtX2RlbGl2ZXJ5RGF0YS0+ZGF0
YSgpICsgb2xkU2l6ZSwgZGF0YSwgbGVuZ3RoKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWluIGNh
bmNlbHMgdGhlIHN0cmVhbSBpbiBkZWxpdmVyRGF0YSBpdCBjb3VsZCBiZSBkZWxldGVkLCAKKyAg
ICAvLyBzbyBwcm90ZWN0IGl0IGhlcmUuCisgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJv
dGVjdCh0aGlzKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSAhPSBOUF9BU0ZJTEVPTkxZKQor
ICAgICAgICBkZWxpdmVyRGF0YSgpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFt
U3RvcHBlZCAmJiBtX3RlbXBGaWxlSGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgYm9vbCByZXR2
YWwgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXJldHZhbCB8fCBmcHV0cyhkYXRhLCBtX3RlbXBG
aWxlSGFuZGxlKSA8PSAwKQorICAgICAgICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJF
U19ORVRXT1JLX0VSUik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkRmFp
bChOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKworICAgIG1fbG9hZGVyID0g
MDsKKworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCit2b2lkIFBs
dWdpblN0cmVhbUd0azo6ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ciogbG9hZGVyKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VS
VChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0YXJ0ZWQpOworCisgICAgbV9sb2FkZXIgPSAwOwor
CisgICAgZGVzdHJveVN0cmVhbShOUFJFU19ET05FKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL2d0ay9ndGsyeHRiaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L2d0azJ4dGJpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRi
aW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0K
KyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioq
IEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9M
R1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8g
dGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2Ui
KTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisg
KiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisg
KiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAor
ICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBU
aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4K
KyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAq
IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRp
YWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVs
b3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisg
KiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwK
KyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBh
cmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhl
IHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQg
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3Ug
ZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBv
bmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElD
RU5TRSBCTE9DSyAqKioqKiAqLyAgIAorCisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2RlZmlu
ZSBfX0dUS19YVEJJTl9IX18KKworI2luY2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNsdWRl
IDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDEx
L1hsaWIuaD4KKyNpZmRlZiBNT1pJTExBX0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgorI2lm
ZGVmIF9JTVBMX0dUS1hUQklOX0FQSQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQ
T1JUXyh0eXBlKQorI2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8o
dHlwZSkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKKyNl
bmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3Bs
dXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVkZWYg
c3RydWN0IF9HdGtYdEJpbkNsYXNzIEd0a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZUEVf
WFRCSU4gICAgICAgICAgICAgICAgICAoZ3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmluZSBH
VEtfWFRCSU4ob2JqKSAgICAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiksIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4s
IEd0a1h0QmluKSkKKyNkZWZpbmUgR1RLX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR1RL
X0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmluZSBH
VEtfSVNfWFRCSU4ob2JqKSAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4p
KQorI2RlZmluZSBHVEtfSVNfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tfQ0xB
U1NfVFlQRSAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfVFlQRV9YVEJJTikpCit0eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGllbnQ7
CisKK3N0cnVjdCBfWHRDbGllbnQgeworICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdldAl0
b3Bfd2lkZ2V0OyAgICAvKiBUaGUgdG9wbGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGlsZF93
aWRnZXQ7ICAvKiBUaGUgZW1iZWRkZWQgd2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7Cisg
IGludAkJeHRkZXB0aDsKKyAgQ29sb3JtYXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdpbmRv
dzsKK307CisKK3N0cnVjdCBfR3RrWHRCaW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tldDsK
KyAgR2RrV2luZG93ICAgICAqcGFyZW50X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRkaXNw
bGF5OyAgICAgICAgLyogWHQgVG9vbGtpdCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAgICAg
eHR3aW5kb3c7ICAgICAgICAgLyogWHQgVG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAgICAg
ICAgIHgsIHk7CisgIGdpbnQgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50CSB4
dGNsaWVudDsgICAgICAgICAvKiBYdCBDbGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitzdHJ1
Y3QgX0d0a1h0QmluQ2xhc3MKK3sKKyAgR3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOworfTsK
KworR1RLWFRCSU5fQVBJKEd0a1R5cGUpICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpOwor
R1RLWFRCSU5fQVBJKEd0a1dpZGdldCAqKSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVu
dF93aW5kb3csIFN0cmluZyAqZik7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194dGJp
bl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RLWFRC
SU5fQVBJKHZvaWQpICAgICAgIGd0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg
ICBoZWlnaHQpOworCit0eXBlZGVmIHN0cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xhdGlv
bnMgIHRyYW5zbGF0aW9uczsgICAgICAgLyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5hZ2Vy
ICAgICovCisgICAgWHRCb3VuZEFjdGlvbnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJvY2Vk
dXJlIGJpbmRpbmdzIGZvciBhY3Rpb25zICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVjICpj
dXJyZW50X3N0YXRlOyAgLyogVHJhbnNsYXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICovCisg
ICAgdW5zaWduZWQgbG9uZyAgIGxhc3RFdmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAgIAor
Cit0eXBlZGVmIHN0cnVjdCBfQ29yZVBhcnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxmOyAg
ICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLworICAg
IFdpZGdldENsYXNzICAgICB3aWRnZXRfY2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lkZ2V0
J3MgQ2xhc3NSZWMgICAgICAqLworICAgIFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAgICAg
ICAgIC8qIHBhcmVudCB3aWRnZXQgICAgICAgICAgICAgICAgICAgICAqLworICAgIFhybU5hbWUg
ICAgICAgICB4cm1fbmFtZTsgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1YXJr
aWZpZWQgICAqLworICAgIEJvb2xlYW4gICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8qIG1h
cmtlZCBmb3IgZGVzdHJveSAgICAgICAgICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0ICBk
ZXN0cm95X2NhbGxiYWNrczsgIC8qIHdobyB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3llZCAq
LworICAgIFh0UG9pbnRlciAgICAgICBjb25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFpbnQg
cmVjb3JkICAgICAgICAgICAgICAgICAqLworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAgICAg
ICAgICAgICAgIC8qIHdpbmRvdyBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIERp
bWVuc2lvbiAgICAgICB3aWR0aCwgaGVpZ2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25zICAg
ICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAgICAg
IC8qIHdpbmRvdyBib3JkZXIgd2lkdGggICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4gICAg
ICAgICBtYW5hZ2VkOyAgICAgICAgICAgIC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2VkPyAg
ICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlzIHdp
ZGdldCBzZW5zaXRpdmUgdG8gdXNlciBldmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBhbmNl
c3Rvcl9zZW5zaXRpdmU7IC8qIGFyZSBhbGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAqLwor
ICAgIFh0RXZlbnRUYWJsZSAgICBldmVudF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8gZXZl
bnQgZGlzcGF0Y2hlciAgICAgICAqLworICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAgICAg
ICAgICAgIC8qIHRyYW5zbGF0aW9uIG1hbmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0VHJh
bnNsYXRpb25zICBhY2NlbGVyYXRvcnM7ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0aW9u
cyAgICAgICAgICAqLworICAgIFBpeGVsICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAgIC8q
IHdpbmRvdyBib3JkZXIgcGl4ZWwgICAgICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAg
ICBib3JkZXJfcGl4bWFwOyAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwgICAg
ICAqLworICAgIFdpZGdldExpc3QgICAgICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qgb2Yg
cG9wdXBzICAgICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1fcG9w
dXBzOyAgICAgICAgIC8qIGhvdyBtYW55IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLworICAg
IFN0cmluZyAgICAgICAgICBuYW1lOyAgICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBu
YW1lICAgICAgICAgICAgICAqLworICAgIFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAgICAg
ICAgIC8qIHdpbmRvdydzIHNjcmVlbiAgICAgICAgICAgICAgICAgICAqLworICAgIENvbG9ybWFw
ICAgICAgICBjb2xvcm1hcDsgICAgICAgICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLworICAgIFdpbmRvdyAgICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8qIHdp
bmRvdyBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBk
ZXB0aDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAgICAq
LworICAgIFBpeGVsICAgICAgICAgICBiYWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBiYWNr
Z3JvdW5kIHBpeGVsICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3JvdW5k
X3BpeG1hcDsgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAgIEJv
b2xlYW4gICAgICAgICB2aXNpYmxlOyAgICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQgYW5k
IG5vdCBvY2NsdWRlZD8qLworICAgIEJvb2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5hZ2Vk
Oy8qIG1hcCB3aW5kb3cgaWYgaXQncyBtYW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJlYyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9IFdp
ZGdldFJlYywgQ29yZVJlYzsgICAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyog
X19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5TdHJlYW1HdGtfSAorI2RlZmlu
ZSBQbHVnaW5TdHJlYW1HdGtfSAorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9u
cy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOwor
CisgICAgZW51bSBQbHVnaW5TdHJlYW1TdGF0ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0ZWQsIFN0cmVh
bVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQgfTsKKworICAgIGNsYXNzIFBsdWdpblN0cmVhbUd0ayA6
IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblN0cmVhbUd0az4sIHByaXZhdGUgTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luU3RyZWFt
R3RrKFBsdWdpblZpZXdHdGsqLCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wg
c2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIH5QbHVnaW5TdHJl
YW1HdGsoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBz
dG9wKCk7CisKKyAgICAgICAgdm9pZCBzdGFydFN0cmVhbSgpOworCisgICAgICAgIHZvaWQgc2V0
TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1h
bnVhbGx5OyB9CisKKyAgICAgICAgLy8gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciopOworCisgICAgICAg
IHZvaWQgc2VuZEphdmFTY3JpcHRTdHJlYW0oY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3Qg
Q1N0cmluZyYgcmVzdWx0U3RyaW5nKTsKKyAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3Ry
ZWFtKE5QUmVhc29uKTsKKworICAgICAgICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3Ry
ZWFtKik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOworICAgICAg
ICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBSZWFzb24pOworICAgICAgICB2b2lkIGRlc3Ryb3lTdHJl
YW0oKTsKKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7CisgICAg
ICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlOworCisgICAgICAgIEZyYW1l
KiBtX2ZyYW1lOworICAgICAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1f
bG9hZGVyOworICAgICAgICBQbHVnaW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIHZv
aWQqIG1fbm90aWZ5RGF0YTsKKyAgICAgICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAg
ICAgIFBsdWdpblN0cmVhbVN0YXRlIG1fc3RyZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9sb2Fk
TWFudWFsbHk7CisKKyAgICAgICAgVGltZXI8UGx1Z2luU3RyZWFtR3RrPiBtX2RlbGF5RGVsaXZl
cnlUaW1lcjsKKyAgICAgICAgdm9pZCBkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVn
aW5TdHJlYW1HdGs+Kik7CisKKyAgICAgICAgT3duUHRyPCBWZWN0b3I8Y2hhcj4gPiBtX2RlbGl2
ZXJ5RGF0YTsKKworICAgICAgICBGSUxFKiBtX3RlbXBGaWxlSGFuZGxlOworCisgICAgICAgIGNv
bnN0IE5QUGx1Z2luRnVuY3MqIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QUCBtX2luc3RhbmNl
OworICAgICAgICB1aW50MTYgbV90cmFuc2Zlck1vZGU7CisgICAgICAgIGludDMyIG1fb2Zmc2V0
OworICAgICAgICBDU3RyaW5nIG1faGVhZGVyczsKKyAgICAgICAgQ1N0cmluZyBtX3BhdGg7Cisg
ICAgICAgIE5QUmVhc29uIG1fcmVhc29uOworICAgICAgICBOUFN0cmVhbSBtX3N0cmVhbTsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5QYWNrYWdlR3RrX0gKKyNkZWZpbmUg
UGx1Z2luUGFja2FnZUd0a19ICisKKyNpbmNsdWRlIDxnbW9kdWxlLmg+CisjaW5jbHVkZSA8dGlt
ZS5oPgorCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI3VuZGVmIE5QX0luaXRpYWxpemVGdW5jUHRyCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0
b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICBjbGFzcyBQbHVnaW5QYWNr
YWdlR3RrIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZUd0az4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgflBsdWdpblBhY2thZ2VHdGsoKTsKKyAgICAgICAgc3RhdGljIFBsdWdpblBh
Y2thZ2VHdGsqIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3Qm
IGxhc3RNb2RpZmllZCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsZU5hbWU7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNN
YXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRp
b25zOyB9CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lv
bnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKworICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBsdWdp
blBhY2thZ2VHdGsmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpOworCisgICAgICAgIGJv
b2wgbG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdpbkZ1
bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyAgICBwcml2YXRlOgorICAg
ICAgICBQbHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBs
YXN0TW9kaWZpZWQpOworICAgICAgICBib29sIGZldGNoSW5mbygpOworCisgICAgICAgIGJvb2wg
bV9pc0xvYWRlZDsKKyAgICAgICAgaW50IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmluZyBt
X2Rlc2NyaXB0aW9uOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcgbV9m
aWxlTmFtZTsKKyAgICAgICAgU3RyaW5nIG1fbmFtZTsKKworICAgICAgICBNSU1FVG9EZXNjcmlw
dGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNN
YXAgbV9taW1lVG9FeHRlbnNpb25zOworCisgICAgICAgIEdNb2R1bGUqIG1fbW9kdWxlOworICAg
ICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgTlBfR2V0TUlNRURlc2NyaXB0
aW9uRnVuY1B0ciBtX05QX0dldE1JTUVEZXNjcmlwdGlvbjsKKyAgICAgICAgTlBQX1NodXRkb3du
UHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKKyAgICAgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBtX05Q
UF9HZXRWYWx1ZTsKKyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOworICAgICAg
ICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CisgICAgfTsKKworICAgIHN0cnVjdCBQ
bHVnaW5QYWNrYWdlR3RrSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGtl
eSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8
UGx1Z2luUGFja2FnZUd0az4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKworICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJuIGVx
dWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGEpLCByZWludGVycHJldF9j
YXN0PFBsdWdpblBhY2thZ2VHdGsqPihiKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFj
a2FnZUd0az4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFsKCphLmdldCgpLCAq
Yi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
Ky8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVyZSBp
dCdzIGltcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGggZGVm
YXVsdCB0cmFpdHMuCisvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0
IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KK25hbWVzcGFjZSBXVEYgeworICAgIHRl
bXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBhY2th
Z2VHdGtIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrPiA+
ID4geworICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luUGFja2FnZUd0az4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVmIFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VHdGtIYXNoIEhhc2g7CisgICAgICAgIHR5cGVkZWYgSGFzaFRy
YWl0czxJbnRUeXBlPiBUcmFpdHM7CisgICAgfTsKK30KKworCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0
ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5EYXRhYmFzZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMo
KQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZUd0ayogcGx1Z2lucyA9IDA7CisgICAgCisg
ICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VH
dGs7CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlR3RrOjpk
ZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZUd0azo6YWRk
RXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhz
LmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VH
dGs6OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9v
bCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9m
IHBsdWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlm
ICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMu
Y2xlYXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5z
OworCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5l
bmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9Vbmxv
YWQucmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKwor
ICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQu
ZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdp
bnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdp
bnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVu
ZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1
Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVn
aW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJl
Z2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8g
R2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAg
ICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCpp
dCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21h
cF9pdCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZp
cnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOwor
fQorCitWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5z
KCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IHJlc3VsdDsKKworICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlR3RrOjpnZXRQbHVn
aW5zSW5QYXRocygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2Fz
ZSBpbnNlbnNpdGl2ZSBzZXQuCisgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsK
KyAgICBQbHVnaW5TZXQgcGx1Z2luczsKKworICAgIFBsdWdpblBhY2thZ2VHdGsqIG9sZFdNUFBs
dWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZUd0ayogbmV3V01QUGx1Z2luID0gMDsKKworICAg
IFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpblBhdGhzLmVuZCgp
OworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5Q
YXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgR0RpciogZGlyID0gZ19k
aXJfb3BlbigoaXQtPnV0ZjgoKSkuZGF0YSgpLCAwLCBOVUxMKTsKKyAgICAgICAgaWYgKGRpcikg
eworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIHdoaWxlICgobmFt
ZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSkgeworICAgICAgICAgICAgICAgIGlmIChnX3N0cl9o
YXNfc3VmZml4KG5hbWUsICIuIiBHX01PRFVMRV9TVUZGSVgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUoKGl0LT51dGY4KCkpLmRhdGEo
KSwgbmFtZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBs
dWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQYWNrYWdlKGZpbGVuYW1lLCB0
aW1lKE5VTEwpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChwbHVnaW5QYWNrYWdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBnX2Rpcl9jbG9zZShkaXIpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFy
c2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0
b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWduZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2ln
bmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAoc3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxl
bmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9zID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNp
b25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQorICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJp
bmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNp
b25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsK
KyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNvbXBvbmVudCk7CisKKyAgICAgICAgc3Rh
cnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKworICAgIHJldHVybiB2ZXJzaW9uOworfQorCisv
LyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgor
c3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVy
c2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVy
c2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZl
cnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBh
cmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1
c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5nPiBQ
bHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19n
ZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRocy5h
cHBlbmQoaG9tZVBhdGgpOworICAgIGdfZnJlZShob21lUGF0aCk7CisKKyAgICBjb25zdCBnY2hh
ciogbW96UGF0aCA9IGdfZ2V0ZW52KCJNT1pfUExVR0lOX1BBVEgiKTsKKyAgICBpZiAobW96UGF0
aCkgeworICAgICAgICBnY2hhcioqIHBsdWdpblBhdGhzID0gZ19zdHJzcGxpdChtb3pQYXRoLCAi
OiIsIC0xKTsKKworICAgICAgICBmb3IgKGdpbnQgaSA9IDA7IHBsdWdpblBhdGhzW2ldOyBpKysp
CisgICAgICAgICAgICBwYXRocy5hcHBlbmQocGx1Z2luUGF0aHNbaV0pOworCisgICAgICAgIGdf
ZnJlZShwbHVnaW5QYXRocyk7CisgICAgfQorICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9s
aWIvbW96aWxsYS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xpYi9tb3ppbGxh
L3BsdWdpbnMiKTsKKworICAgIHJldHVybiBwYXRoczsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFz
ZUd0azo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1pbWVUeXBlLmlzTnVsbCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jb250YWlucyhtaW1lVHlwZSk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFi
YXNlR3RrOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAg
IFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpCisgICAg
ICAgICAgICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5Gb3JFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBN
SU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1l
VG9FeHRlbnNpb25zKCkuZW5kKCk7CisKKyAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdp
bigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVfaXQpIHsKKyAgICAgICAgICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWltZV9pdC0+c2Vjb25kOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgewor
ICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ldID09IGV4dGVuc2lvbikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRh
dGFiYXNlR3RrOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sgICAKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSAwOworCisgICAgaWYg
KCFtaW1lVHlwZS5pc051bGwoKSkKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUo
bWltZVR5cGUpOworICAgIAorICAgIGlmICghcGx1Z2luKSB7CisgICAgICAgIFN0cmluZyBwYXRo
ID0gdXJsLnBhdGgoKTsKKyAgICAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5n
KHBhdGgucmV2ZXJzZUZpbmQoJy4nKSArIDEpOworCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZv
ckV4dGVuc2lvbihleHRlbnNpb24pOworCisgICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4g
Y291bGQgYmUgZm91bmQsIHF1ZXJ5IHhkZ21pbWUgZm9yIHRoZSBtaW1lIHR5cGUgCisgICAgICAg
IC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbi4KKyAgICB9CisKKyAgICByZXR1cm4g
cGx1Z2luOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6Y3JlYXRlUGx1
Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2lu
ID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlKTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2Fz
IGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2Fpbgor
ICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkKKyAgICAgICAgcGx1Z2luID0gZmluZFBsdWdp
bih1cmwsIG1pbWVUeXBlKTsKKyAgICAgICAgCisgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3R3Rr
KHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFy
YW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5o
IgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5B
dEluZGV4KHVuc2lnbmVkIGkpIAoreyAKKyAgICBQbHVnaW5EYXRhYmFzZUd0ayAqZGIgPSBQbHVn
aW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIFBsdWdpbkluZm8qIGluZm8g
PSBuZXcgUGx1Z2luSW5mbzsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwYWNrYWdlID0gZGItPnBs
dWdpbnMoKVtpXTsKKworICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgaW5m
by0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2Ut
PmRlc2NyaXB0aW9uKCk7CisKKyAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVU
b0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgIE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25z
LmVuZCgpOworICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICBpbmZv
LT5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAgIAorICAgICAgICBtaW1lLT50eXBlID0gaXQt
PmZpcnN0OworICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgbWltZS0+
cGx1Z2luID0gaW5mbzsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFj
a2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0g
IiwiOworCisgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGluZm87Cit9CisKK3Vuc2lnbmVkIFBsdWdJbklu
Zm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFz
ZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5zKCkuc2l6ZSgpOworfQorCitTdHJpbmcg
UGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uIEdUSysKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01J
TUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWltZVR5cGUpIAoreworICAgIHJldHVybiBQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJl
ZChtaW1lVHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFn
ZXMpCit7CisgICAgUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVz
aCgpOworCisgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykgeworICAgICAgICAvLyBGSVhNRTogcmVs
b2FkIG9wZW4gcGFnZXMKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjg5NzUpCisrKyBX
ZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNiArMTM2LDcgQEAgREVQ
RU5EUEFUSCArPSBlZGl0aW5nL3F0IGhpc3RvcnkvcXQgbG9hZAogZ3RrLXBvcnQgewogICAgIHgx
MTpwbHVnaW5zIHsKICAgICAgICAgREVGSU5FUyArPSBYUF9VTklYCisgICAgICAgIExJQlMgKz0g
LWxYdAogICAgIH0KIAogICAgIElOQ0xVREVQQVRIICs9IFwKQEAgLTE3MSw2ICsxNzIsNyBAQCBn
dGstcG9ydCB7CiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtIFwKICAgICBsb2FkZXIv
Z3RrIFwKICAgICBwYWdlL2d0ayBcCisgICAgcGx1Z2lucy9ndGsgXAogICAgIC4uL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQgXAogICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldwogfQpAQCAtODQ3
LDEzICs4NDksMzkgQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCiAK
IGd0ay1wb3J0IHsKKyAgIXBsdWdpbnMgeworICAgIERFRklORVMgKz0gR1RLX0RJU0FCTEVfUExV
R0lOUz0xCisgIH0KKyAgSEVBREVSUyArPSBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJh
c2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaCBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsu
aCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCisKICAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnREYXRhLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZh
bGxiYWNrTGlzdC5jcHAgCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5j
cHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorICAgIHBsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luUGFj
a2FnZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAgXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9ucGFwaS5j
cHAKKworICB4MTE6cGx1Z2lucyB7CisgICAgSEVBREVSUyArPSBcCisgICAgcGx1Z2lucy9ndGsv
Z3RrMnh0YmluLmggXAorICAgIHBsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmggXAorICAgIHBsdWdp
bnMvZ3RrL3hlbWJlZC5oCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9ndGsy
eHRiaW4uYworICB9CiB9CiAKIHF0LXBvcnQgewpAQCAtOTUzLDYgKzk4MSw3IEBAIHF0LXBvcnQg
ewogfQogCiBndGstcG9ydCB7CisgICAgSU5DTFVERVBBVEggKz0gLi4vV2ViQ29yZS9wbHVnaW5z
L2d0awogICAgIEhFQURFUlMgKz0gXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9D
bGlwYm9hcmRHdGsuaCBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRIZWxwZXIuaCBcCkluZGV4OiBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAkocmV2aXNpb24gMjg5NzUpCisr
KyBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQg
KzI4LDE5IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCiAK
KyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNs
dWRlICJydW50aW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotS0pTOjpCaW5kaW5nczo6
SW5zdGFuY2UqIEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQor
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldp
ZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4od2lkZ2V0KS0+YmluZGluZ0luc3RhbmNlKCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGly
cy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHJl
dmlzaW9uIDI4OTc1KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcg
Q29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU1LDYgKzU2LDcgQEAgbXkgJGN1cnJlbnRTVk5SZXZpc2lvbjsKIG15ICRv
c1hWZXJzaW9uOwogbXkgJGlzUXQ7CiBteSAkaXNHdGs7CitteSAkZW5hYmxlR3RrUGx1Z2luczsK
IG15ICRpc1d4OwogCiAjIFZhcmlhYmxlcyBmb3IgV2luMzIgc3VwcG9ydApAQCAtNDgwLDYgKzQ4
MiwyMyBAQCBzdWIgZGV0ZXJtaW5lSXNHdGsoKQogICAgIH0KIH0KIAorc3ViIGVuYWJsZUd0a1Bs
dWdpbnMoKQoreworICAgIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKTsKKyAgICByZXR1cm4g
JGVuYWJsZUd0a1BsdWdpbnM7Cit9CisKK3N1YiBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCkK
K3sKKyAgICByZXR1cm4gaWYgZGVmaW5lZCgkZW5hYmxlR3RrUGx1Z2lucyk7CisKKyAgICBpZiAo
Y2hlY2tBcmd2KCItLWRpc2FibGUtZ3RrLXBsdWdpbnMiKSkgeworICAgICAgICAkZW5hYmxlR3Rr
UGx1Z2lucyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAx
OworICAgIH0KK30KKwogc3ViIGlzV3goKQogewogICAgIGRldGVybWluZUlzV3goKTsKQEAgLTc4
OSw2ICs4MDgsNyBAQCBzdWIgYnVpbGRRTWFrZUd0a1Byb2plY3QoJCQpCiAKICAgICBteSBAYnVp
bGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0Iik7CiAgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09O
RklHLT1xdCI7CisgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBlbmFi
bGVHdGtQbHVnaW5zKCk7CiAKICAgICByZXR1cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFuLCBA
YnVpbGRBcmdzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18096</attachid>
            <date>2007-12-24 14:46:24 -0800</date>
            <delta_ts>2007-12-25 09:16:35 -0800</delta_ts>
            <desc>Updated patch to fix scrolling too</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>169927</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShyZXZpc2lvbiAyODk3NSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksMTIgKzUwLDE3IEBACiAjaW5jbHVkZSA8c3lzL3V0
c25hbWUuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2Fk
ZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50
KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2MCw5ICsxNjYsMzAgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxv
YWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJh
bWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2Fk
ZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAg
ICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgor
ICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAg
ICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAo
IXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZy
YW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAg
ICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9u
c2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0
aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
IGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI1OCw4ICsy
ODUsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQog
Ci1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYs
IEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKIHsKKyAgICBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3ID0g
UGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+Y3JlYXRlUGx1Z2luVmlldyhj
b3JlKG1fZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5z
dGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
biBwbHVnaW5WaWV3OworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTMwMSw4ICszMzMsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6
Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdl
dCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwor
ICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihwbHVnaW5XaWRn
ZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTMy
NCw2ICszNTUsOSBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudDo6b2JqCiAg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSh0eXBlKSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRJbWFnZTsKIAorICAgIGlmIChQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJl
ZChtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50TmV0c2Nh
cGVQbHVnaW47CisKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEZy
YW1lOwogCkBAIC02MjMsMTQgKzY1NywxNCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6Omdl
bmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50TG9h
ZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUg
bG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUK
LSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgot
ICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7
Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNv
ZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9u
c2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVy
KCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9wbHVn
aW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAg
ICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4g
PSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzUzLDkgKzc4NywxMyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1h
aW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmll
dyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4OTc1KQorKysgV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xODAsNiArMTgzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRX
ZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAg
Ly8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVn
aW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
dmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
Y3BwCShyZXZpc2lvbiAyODk3NSkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgzLDYgKzg4Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19pbml0KFdlYktpdFcKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZh
bWlseSgiQXJpYWwiKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVy
IE5ldyIpOwogICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFyaWFsIik7Cisg
ICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwogCiAgICAgR1RLX1dJREdFVF9T
RVRfRkxBR1Mod2ViVmlldywgR1RLX0NBTl9GT0NVUyk7CiAgICAgd2ViVmlld0RhdGEtPm1haW5G
cmFtZSA9IFdFQktJVF9XRUJfRlJBTUUod2Via2l0X3dlYl9mcmFtZV9uZXcod2ViVmlldykpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZp
c2lvbiAyODk3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nyw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVz
b3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1
Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotU3Ry
aW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9IAotYm9vbCBX
ZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29y
ZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3Ig
V2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdl
YkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkocmV2aXNpb24gMjg5NzUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUs
NSArMzA1LDIyIEBAIHZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib28KIAog
dm9pZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0CiB7CisgICAgaWYgKCFwYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAg
IEludFBvaW50IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFt
ZUdlb21ldHJ5KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYWxsb2Nh
dGlvbiBzaXplIHRvIGJlIG5lZ2F0aXZlCisgICAgSW50U2l6ZSBzeiA9IGZyYW1lR2VvbWV0cnko
KS5zaXplKCk7CisgICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWln
aHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9j
YXRpb24pOwogfQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBsdWdpbkRhdGFiYXNlR3RrX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VHdGtfSAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBF
bGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3Mg
S1VSTDsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblZpZXdH
dGs7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+LCBQbHVn
aW5QYWNrYWdlR3RrSGFzaD4gUGx1Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFz
ZUd0ayB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIGlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogY3JlYXRlUGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblBhY2thZ2VHdGsqPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1F
VHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIHZv
aWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1f
cGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0
aHMoKSBjb25zdDsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUd0ayogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbik7CisKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5Q
YXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7CisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CisgICAgICAgIFBsdWdpblNl
dCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQ1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJl
YW1HdGsuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNs
dWRlICJranNfd2luZG93LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRl
ICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8a2pzL0pT
TG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorCisjaWYgZGVmaW5lZChHREtfV0lORE9X
SU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyNpbmNsdWRlICJndGsy
eHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRP
V0lOR19XSU4zMgorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtK
Uzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2Nr
OwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6
VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrIHsKK3B1YmxpYzoK
KyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKKyAgICAgICAg
OiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAgICAgICAgLCBtX25vdGlm
eURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlm
aWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgIHZv
aWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KKyAgICBib29s
IHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247IH0K
K3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7CisgICAg
dm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgIC8v
IEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsID0gMC4wMDE7CisKK2NsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsgeworcHVibGljOgorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsoUGx1Z2luVmll
d0d0ayogcGx1Z2luVmlldykKKyAgICAgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAgICAgLCBtX2JhY2soMCksIG1fZnJvbnQoMCkKKyAgICAgICAgLCBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOjptZXNzYWdlVGhyb3R0bGVU
aW1lckZpcmVkKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdp
dGggb3VyIGlubGluZSBtZXNzYWdlcworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
TnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgICAgICBtX2lubGluZU1lc3NhZ2Vz
W2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAgICAgIG1faW5saW5lTWVz
c2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKKyAgICAgICAgbV9mcmVlSW5s
aW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKKyAgICB9CisKKyAgICB+UGx1Z2lu
TWVzc2FnZVRocm90dGxlckd0aygpCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlKiBuZXh0
OworICAgIAorICAgICAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBt
ZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPm5l
eHQ7CisgICAgICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgfSAgICAgICAg
CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTWVzc2FnZShYSUQgaFduZCwgZ3VpbnQgbXNn
LCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSkgCisgICAgeworICAgICAgICBQbHVnaW5NZXNz
YWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICAgICAgbWVzc2FnZS0+aFdu
ZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKKyAgICAgICAgbWVzc2FnZS0+
d1BhcmFtID0gd1BhcmFtOworICAgICAgICBtZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07CisgICAg
ICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisgICAgICAgIGlmIChtX2JhY2spCisgICAgICAgICAg
ICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgICAgICBtX2JhY2sgPSBtZXNzYWdlOworICAg
ICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICBtX2Zyb250ID0gbWVzc2FnZTsKKworICAg
ICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
IG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJ
bnRlcnZhbCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsK
KyAgICAgICAgWElEIGhXbmQ7CisgICAgICAgIGd1aW50IG1zZzsKKyAgICAgICAgZ3VpbnQgd1Bh
cmFtOworICAgICAgICBnbG9uZyBsUGFyYW07CisKKyAgICAgICAgc3RydWN0IFBsdWdpbk1lc3Nh
Z2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIG1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4qKQorICAgIHsKKyAgICAgICAgUGx1
Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7CisgICAgICAgIG1fZnJvbnQgPSBtX2Zyb250
LT5uZXh0OworICAgICAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisgICAgICAgICAgICBtX2Jh
Y2sgPSAwOworCisJLy8gICAgICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVn
aW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFt
LCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworCisg
ICAgICAgIGlmIChtX2Zyb250KQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5z
dGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKKyAgICB9CisKKyAgICBQ
bHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVz
c2FnZSAqbWVzc2FnZTsKKworICAgICAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgICAgIG1f
ZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAgICAgICAgcmV0dXJuIG1l
c3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBpc0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSog
bWVzc2FnZSkgCisgICAgeworICAgICAgICByZXR1cm4gbWVzc2FnZSA+PSAmbV9pbmxpbmVNZXNz
YWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2Vz
IC0gMV07CisgICAgfQorCisgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNz
YWdlKSAKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICB9CisKKyAgICBQbHVnaW5WaWV3R3RrKiBtX3Bs
dWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2FnZSogbV9iYWNrOworICAgIFBsdWdpbk1lc3NhZ2Uq
IG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsK
KyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXNdOwor
ICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOworCisgICAgVGltZXI8UGx1
Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKK307CisKK3N0
YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICBpZiAoIXVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVu
ZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VSTDo6ZGVjb2RlX3N0cmluZyh1cmwuZGVwcmVj
YXRlZFN0cmluZygpLm1pZCgxMSkpOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3Rr
OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKKworY29uc3Qgd2NoYXJfdCoga1dlYlBsdWdpblZp
ZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3Qgd2NoYXJfdCoga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7
IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gv
Mi4wIjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAg
IGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworfQorCitJbnRSZWN0IFBsdWdpblZpZXdHdGs6
OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byBv
dXIgYm91bmRzLgorICAgIEludFJlY3QgY2xpcFJlY3QobV93aW5kb3dSZWN0KTsKKyAgICAKKyAg
ICAvLyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNs
b3NpbmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9l
bGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIEZyYW1lVmlldyogcGFy
ZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGNsaXBSZWN0Lmlu
dGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckxheWVyKGxheWVyLCB0cnVlKSk7
CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCksIG1f
d2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCkgfTsKKyAgICBpZiAobV93aWRnZXQpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgaWYgKCFtX25lZWRz
WEVtYmVkKSB7CisgICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTiht
X3dpZGdldCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAg
ICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2lu
ZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHJldHVy
biBjbGlwUmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJhbWVHZW9tZXRy
eSgpKQorICAgICAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisKKyAgICBpZiAo
cGFyZW50KCkpCisgICAgICAgIGluaXQoKTsKKworICAgIHVwZGF0ZVdpbmRvdygpOworICAgIHNl
dE5QV2luZG93UmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpnZW9tZXRyeUNo
YW5nZWQoKSBjb25zdAoreworICAgIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCk7CisgICAgdXBk
YXRlV2luZG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Rm9jdXMoKQoreworICAg
IC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1NldEZvY3VzKHdpbmRvdyk7CisK
KyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2hvdygp
Cit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1f
d2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX1NIT1dOQSk7CisKKyAgICBXaWRn
ZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoaWRlKCkKK3sKKyAgICBtX2lz
VmlzaWJsZSA9IGZhbHNlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAg
IC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIEltYWdl
KiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCisgICAgICAgIG51
bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVsbFBsdWdpbiIp
OworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRyeSgpLngoKSwgZnJhbWVHZW9t
ZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhl
aWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS53aWR0aCgpIC0g
aW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNldCA9IChmcmFtZUdlb21ldHJ5
KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVjdC5t
b3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VS
ZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRl
eHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51bGxQ
bHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAg
ICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHBhaW50TWlz
c2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5lZWQgdG8gc3lu
dGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKwor
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorCisgICAgc2V0
TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVu
dDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBwYXNzIGl0IG9uICovCisgICAg
LyoKKyAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7ICAgIAorCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9
IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAgICB9CisgICAg
Ki8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlm
ICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkK
KyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKKy8vZXh0ZXJuIGJvb2wg
aWdub3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVNb3VzZUV2
ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIC8q
IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAgICBJbnRQb2ludCBwID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KEludFBvaW50
KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgLyoKKyAgICBucEV2ZW50
LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBucEV2ZW50LndQYXJhbSA9
IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0g
fD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG5wRXZl
bnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vt
b3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8IAor
ICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93bigp
KQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9
IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8
PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8
PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KSB7CisgICAg
ICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAg
ICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworCisgICAgICAgICAg
ICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAgIG1fcGFyZW50RnJhbWUt
PmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9XTjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9u
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgKi8KKworICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0Q3Vy
c29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIu
Y3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3JlTmV4
dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIC8vaWdub3JlTmV4
dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVF
dmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAg
ICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVLZXli
b2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lk
Z2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250
ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7
CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVj
dC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7Cisg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworCisgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pTOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworCisgICAgICAgIGlm
ICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVCht
X3dpbmRvdyk7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXdHdGs6OnN0YXJ0KCkKK3sKKyAg
ICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVCht
X3BsdWdpbik7CisgICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKTsKKwor
ICAgIE5QRXJyb3IgbnBFcnI7CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgo
TlBNSU1FVHlwZSltX21pbWVUeXBlLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFt
Q291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7CisgICAgfQorICAgIFBs
dWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzU3RhcnRl
ZCA9IHRydWU7CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkp
IHsKKyAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwor
ICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7
CisgICAgICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0b3AoKQoreworICAgIGlm
ICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBs
dWdpblN0cmVhbUd0az4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgaXQgPSBzdHJl
YW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOwor
ICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBEZXN0
cm95IHRoZSBwbHVnaW4KKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2lu
c3RhbmNlLCAwKTsKKworICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3
KQoreworICAgIHNfY3VycmVudFBsdWdpblZpZXcgPSBwbHVnaW5WaWV3OworfQorCitQbHVnaW5W
aWV3R3RrKiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygpCit7CisgICAgcmV0dXJu
IHNfY3VycmVudFBsdWdpblZpZXc7Cit9CisKK3N0YXRpYyBjaGFyKiBjcmVhdGVVVEY4U3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIENTdHJpbmcgY3N0ciA9IHN0ci51dGY4KCk7Cisg
ICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3Ry
Lmxlbmd0aCgpICsgMSkpOworCisgICAgc3RybmNweShyZXN1bHQsIGNzdHIuZGF0YSgpLCBjc3Ry
Lmxlbmd0aCgpICsgMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBm
cmVlU3RyaW5nQXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKQoreworICAgIGlm
ICghc3RyaW5nQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKKworICAg
IGZhc3RGcmVlKHN0cmluZ0FycmF5KTsKK30KKworc3RhdGljIGJvb2wgZ2V0U3RyaW5nKEtKU1By
b3h5KiBwcm94eSwgSlNWYWx1ZSogcmVzdWx0LCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAo
IXByb3h5IHx8ICFyZXN1bHQgfHwgcmVzdWx0LT5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSlNMb2NrIGxvY2s7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm94
eS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBVU3RyaW5nIHVzdHJpbmcgPSBy
ZXN1bHQtPnRvU3RyaW5nKGV4ZWMpOworICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
CisgICAgc3RyaW5nID0gdXN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQorewor
ICAgIEtVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsKKyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkph
dmFTY3JpcHRVUkwocmVxdWVzdFVSTCk7CisKKyAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsK
KyAgICAgICAgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKHJlcXVlc3QtPmZy
YW1lTG9hZFJlcXVlc3QoKSwgMCwgZmFsc2UsIHRydWUpOworCisgICAgICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1
bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZworICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlm
aWNhdGlvbigpKSB7CisgICAgICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnko
bV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5kZXByZWNhdGVkU3RyaW5nKCkudXRmOCgpLCBOUFJFU19E
T05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFRhcmdldGVkIEphdmFTY3JpcHQgcmVxdWVzdHMgYXJlIG9ubHkg
YWxsb3dlZCBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBwbHVnaW4K
KyAgICAvLyBhbmQgdGhpcyBoYXMgYmVlbiBtYWRlIHN1cmUgaW4gOjpsb2FkLgorICAgIEFTU0VS
VChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNFbXB0eSgpIHx8IG1f
cGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJh
bWVOYW1lKCkpID09IG1fcGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNj
cmlwdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2Vl
cCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGZyYW1lLgorICAgIFJlZlB0cjxGcmFtZT4gcGFy
ZW50RnJhbWUgPSAgbV9wYXJlbnRGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX3BhcmVu
dEZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChqc1N0cmluZy5kZXByZWNhdGVkU3RyaW5n
KCksIHRydWUpOworCisgICAgaWYgKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5h
bWUoKS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOworCisgICAgICAg
IGlmICghZ2V0U3RyaW5nKHBhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLCByZXN1bHQsIHJlc3Vs
dFN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1N0cmluZyBjc3RyID0g
cmVzdWx0U3RyaW5nLnV0ZjgoKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gc3Ry
ZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBwYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90
aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIG1fc3RyZWFtcy5h
ZGQoc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0
VVJMLCBjc3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVy
RmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9
PSAmbV9yZXF1ZXN0VGltZXIpOworICAgIEFTU0VSVChtX3JlcXVlc3RzLnNpemUoKSA+IDApOwor
CisgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG1fcmVxdWVzdHNbMF07CisgICAgbV9y
ZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBi
ZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bworICAgIC8vIHBl
cmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAg
ICBpZiAobV9yZXF1ZXN0cy5zaXplKCkgPiAwKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFy
dE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkK
K3sKKyAgICBtX3JlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3JlcXVlc3RUaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bG9hZChjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7CisKKyAgICBLVVJMIHVybCA9
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgCisgICAgaWYg
KHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1VSTDsKKworICAg
IFN0cmluZyB0YXJnZXQgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOworCisgICAgLy8g
ZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFy
dCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxheWVkIHVubGVzcyB0
aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCisgICAgaWYgKG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpICE9IG1fcGFyZW50RnJhbWUt
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmCisgICAgICAgICh0YXJnZXQuaXNO
dWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRG
cmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgU3RyaW5n
IGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7CisgICAgaWYgKCFq
c1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3BhcmVu
dEZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+
aXNKYXZhU2NyaXB0RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICB9IGVsc2Ug
aWYgKHRhcmdldC5pc051bGwoKSAmJiBtX21vZGUgPT0gTlBfRlVMTCkgeworICAgICAgICAgICAg
Ly8gRG9uJ3QgYWxsb3cgYSBKYXZhU2NyaXB0IHJlcXVlc3QgZnJvbSBhIHN0YW5kYWxvbmUgcGx1
Zy1pbiB0aGF0IGlzIHNlbGYtdGFyZ2V0dGVkCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoaXMg
Y2FuIGNhdXNlIHRoZSB1c2VyIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBibGFuayBwYWdlICgzNDI0
MDM5KS4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSB8fCAhdGFyZ2V0LmlzTnVsbCgp
KSB7CisgICAgICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgJiYgIXRhcmdldC5pc051bGwoKSAm
JiBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1lKSB7
CisgICAgICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyByZXF1
ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluLgor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKworICAg
ICAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbmV3IFBsdWdpblJlcXVlc3RHdGsoZnJh
bWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7CisgICAgICAgIHNj
aGVkdWxlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBQbHVnaW5TdHJl
YW1HdGsqIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9wYXJlbnRGcmFtZSwg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2VuZE5vdGlmaWNhdGlvbiwgbm90
aWZ5RGF0YSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKworICAgICAgICBzdHJl
YW0tPnN0YXJ0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitz
dGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0
aXZlVVJMU3RyaW5nKQoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsU3RyaW5nID0gRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbUxhdGluMShyZWxhdGl2ZVVSTFN0cmluZyk7CisKKyAgICAvLyBTdHJp
cCByZXR1cm4gY2hhcmFjdGVycworICAgIHVybFN0cmluZy5yZXBsYWNlKCdcbicsICIiKTsKKyAg
ICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisKKyAgICByZXR1cm4gS1VSTChiYXNlVVJM
LCB1cmxTdHJpbmcpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTE5vdGlmeShj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sK
KyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisgICAg
cmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0YSk7Cit9CisKK05Q
RXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dGFyZ2V0KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAg
IGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJs
KSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFy
PiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0g
PT0gJ1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtM
aW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVz
ID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAg
ICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChi
eXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0
dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0
ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBp
ZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAg
ICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3
KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChi
eXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFy
KiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRU
UCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVu
Zm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdv
cnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBi
b3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8v
IHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAg
ICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBm
b3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVy
bWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVy
biBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAg
Ly8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAv
LyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0
YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJv
b2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAg
VUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49
ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b3VwcGVyKG5hbWVbaV0p
OworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdB
JyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b2xvd2VyKG5hbWVbaV0pOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gbmFtZVtpXTsKKworICAgICAgICBpZiAobmFt
ZVtpXSA9PSAnLScpCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IGZhbHNlOworCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGNv
bnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3Qg
Y2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGVvbDsKKyAgICBT
dHJpbmcgbGFzdEtleTsKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKworICAgIC8v
IExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIsIG9yIHdlIGNhbid0
IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCisgICAgd2hpbGUgKChlb2wgPSBmaW5kRU9MKGJ5
dGVzLCBsZW5ndGgpKSkgeworICAgICAgICBjb25zdCBjaGFyKiBsaW5lID0gYnl0ZXM7CisgICAg
ICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBN
b3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0b3IgYXMgcmV0dXJu
ZWQgYnkgZmluZEVPTC4KKyAgICAgICAgYnl0ZXMgPSBlb2wgKyAxOworICAgICAgICBpZiAoKCpl
b2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkKKyAgICAgICAgICAgIGJ5dGVzKys7IC8v
IFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4gYSBzcGFubmluZyBDUkxGLgorCisgICAg
ICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVMZW5ndGggPT0g
MCkKKyAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGhl
YWRlcgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKCpsaW5lID09ICcgJyB8
fCAqbGluZSA9PSAnXHQnKSB7CisgICAgICAgICAgICAvLyBDb250aW51YXRpb24gb2YgdGhlIHBy
ZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgaWYgKGxhc3RLZXkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgor
ICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxh
c3RLZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZSA9IERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9
IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAg
ICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNv
bG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3Jl
IGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJG
aWVsZE5hbWUoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBjb2xvbiAtIGxpbmUp
KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29sb24g
PT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9t
TGF0aW4xKGNvbG9uLCBlb2wgLSBjb2xvbik7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgb2xk
VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIGlmICgh
b2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9s
ZFZhbHVlOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKKyAgICAgICAgICAgICAg
ICAgICAgdG1wICs9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RL
ZXksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBoZWFkZXJGaWVsZHM7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6aGFuZGxlUG9zdChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQor
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZyYW1lTG9hZFJlcXVl
c3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwor
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAg
U3RyaW5nIGZpbGVuYW1lID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShidWYsIGxlbik7
CisKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAg
ICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAgICAgICAvLyBHZXQg
ZmlsZSBpbmZvCisgICAgICAgIGlmICghZ19maWxlX3Rlc3QgKChmaWxlbmFtZS51dGY4KCkpLmRh
dGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVH
VUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJLy9G
SVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRvIGJ1ZmZlcgorICAgICAgICBGSUxFKiBmaWxl
SGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAiciIpOworICAgICAgICAK
KyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgICAgICAvL2J1ZmZlci5yZXNpemUoKTsKKworICAgICAg
ICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7
CisKKyAgICAgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisgICAgICAgIGlmIChieXRlc1JlYWQg
PD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCXJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZmZXIucmVzaXplKGxl
bik7CisgICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7CisgICAgfQorCisg
ICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0YSgpOworICAgIGludCBwb3N0RGF0
YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisgICAgCisgICAgaWYgKGFsbG93SGVhZGVycykgewor
ICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBw
b3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGlu
ZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2Yg
dGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAg
ICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRp
b24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgp
IC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtl
IHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAg
ICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ug
d2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRy
dW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAg
IFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgi
KTsKKworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChp
bnQpZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29u
dGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwor
ICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmll
bGRzKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5
KFBhc3NSZWZQdHI8Rm9ybURhdGE+KG5ldyBGb3JtRGF0YShwb3N0RGF0YSwgcG9zdERhdGFMZW5n
dGgpKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAg
IHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkxOb3RpZnkoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
TlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIGhhbmRsZVBvc3Qo
dXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhLCB0cnVlLCB0cnVlKTsKK30K
KworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQor
eworICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0byBiZSBzcGVjaWZp
ZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgorICAgIHJldHVybiBoYW5kbGVQ
b3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZpbGUpOworfQorCitO
UEVycm9yIFBsdWdpblZpZXdHdGs6Om5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNo
YXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQor
CitpbnQzMiBQbHVnaW5WaWV3R3RrOjp3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4s
IHZvaWQqIGJ1ZmZlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9y
dGVkCisgICAgcmV0dXJuIC0xOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmRlc3Ryb3lT
dHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIFBsdWdpblN0
cmVhbUd0ayogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0cmVhbUd0ayo+KHN0
cmVhbS0+bmRhdGEpOworCisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtR3RrOjpvd25l
ckZvclN0cmVhbShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9J
TlZBTElEX0lOU1RBTkNFX0VSUk9SOworCisgICAgYnJvd3NlclN0cmVhbS0+Y2FuY2VsQW5kRGVz
dHJveVN0cmVhbShyZWFzb24pOworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworY29u
c3QgY2hhciogUGx1Z2luVmlld0d0azo6dXNlckFnZW50KCkKK3sKKyAgICBpZiAobV9xdWlya3Mg
JiBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuIE1vemls
bGFVc2VyQWdlbnQ7CisKKyAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIG1f
dXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX3VybCkudXRm
OCgpOworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgU3RyaW5nIHMgPSBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKG1lc3NhZ2UpOworCisgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRTdGF0
dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUsIHMpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmlu
ZWQgKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDog
eworICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgKih2
b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTiht
X3dpZGdldCktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2Fz
ZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICooKHVuc2ln
bmVkIGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxv
bmcgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsK
KyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9Q
TFVHSU5TKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7Cisj
ZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOworI2Vu
ZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHdp
bmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7
CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5l
ZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3Bs
dWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3Qp
CisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsK
KworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYg
PSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1l
bnROUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9
IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKwor
ICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBh
cyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2lu
L25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAg
ICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisg
ICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBs
dWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAg
ICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyAgICAgICAg
ICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKEdUS19XSURHRVQoY29udGFpbmlu
Z1dpbmRvdygpKS0+d2luZG93KTsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFs
dWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFy
aWFibGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAg
IG1faXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBt
X2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRp
bWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9pbnZhbGlkYXRlVGltZXIpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAg
ICAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KG1faW52YWxpZFJlY3RzW2ldKTsKKyAgICBtX2lu
dmFsaWRSZWN0cy5jbGVhcigpOworfQorCisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0
ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVm
dCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJl
Y3QtPnRvcCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIC8qIEZJWE1FIC0g
SW52YWxpZGF0ZSB0aGUgcmVjdGFuZ2xlCisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3Qocik7Cisg
ICAgICAgIEludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKKyAg
ICAgICAgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9xdWlya3MgJiBQbHVnaW5RdWly
a1Rocm90dGxlSW52YWxpZGF0ZSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5k
KHIpOworICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdp
b24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyog
RklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWdpb24KKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0
UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICAq
LworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICAvKiBGSVhN
RSAtIEZvcmNlIGEgcmVkcmF3CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgOjpVcGRh
dGVXaW5kb3cobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVXaW5kb3coY29u
dGFpbmluZ1dpbmRvdygpKTsKKyAgICAqLworfQorCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSog
UGx1Z2luVmlld0d0azo6YmluZGluZ0luc3RhbmNlKCkKK3sKKyAgICBOUE9iamVjdCogb2JqZWN0
ID0gMDsKKworICAgIGlmICghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5n
ZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsK
KyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAg
IG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5Q
UFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3QpOworICAgIH0KKworICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUiB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFt
ZS0+Y3JlYXRlUm9vdE9iamVjdCh0aGlzLCBtX3BhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLT5n
bG9iYWxPYmplY3QoKSk7CisgICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmluc3RhbmNlID0g
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNl
KEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpDTGFuZ3VhZ2UsIG9iamVjdCwgcm9vdC5yZWxlYXNl
KCkpOworCisgICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICByZXR1cm4gaW5z
dGFuY2U7Cit9CisKK1BsdWdpblZpZXdHdGs6On5QbHVnaW5WaWV3R3RrKCkKK3sKKyAgICBzdG9w
KCk7CisKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5n
QXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheSht
X3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQpOworCisgICAgaWYgKCFtX25lZWRzWEVtYmVkICYm
IG1fd2lkZ2V0KQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93aWRnZXQpOworICAgIG1f
d2luZG93ID0gMDsKKyAgICBzZXRHdGtXaWRnZXQoTlVMTCk7CisKKyAgICBtX3BhcmVudEZyYW1l
LT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3BsdWdp
biAmJiAhKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkKKyAgICAgICAg
bV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpc2Nvbm5lY3RT
dHJlYW0oUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3RyZWFtcy5j
b250YWlucyhzdHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBw
bHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgIGlmIChtaW1lVHlw
ZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIG1fcXVpcmtz
IHw9IFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50OworICAgICAgICBtX3F1aXJrcyB8
PSBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZTsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1
Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlczsKKyAgICB9CisKKyAgICAvLyBU
aGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNh
bGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cg
d2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1fcGx1Z2lu
LT5uYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFp
bnMoIldpbmRvd3MgTWVkaWEiKSkgeworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya0Rl
ZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2Vz
IG5vdCB3b3JrIGF0IGFsbCB3aXRoIHRoZSBXTVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQg
cGFyYW1ldGVyIAorICAgICAgICAvLyBhbmQgZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4K
KyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJh
bTsKKyAgICB9CisKKyAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUg
Zmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbwor
ICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qg
c2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCisgICAgICAgIG1fcXVpcmtz
IHw9IFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7CisKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRp
bmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMg
aXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVj
dCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0
aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5z
dGFuY2UgZ29lcyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisg
ICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAg
bV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luOworCisgICAgLy8gUHJldmVu
dCB0aGUgUmVhbCBwbHVnaW4gZnJvbSBjYWxsaW5nIHRoZSBXaW5kb3cgUHJvYyByZWN1cnNpdmVs
eSwgY2F1c2luZyB0aGUgc3RhY2sgdG8gb3ZlcmZsb3cuCisgICAgaWYgKG1pbWVUeXBlID09ICJh
dWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKQorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5R
dWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlld0d0azo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1O
YW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQoreworICAgIEFTU0VSVChw
YXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOworCisgICAgdW5zaWduZWQg
c2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHBhcmFtQ291bnQgPSAwOwor
CisgICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Mo
c2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKyAgICBtX3BhcmFtVmFsdWVzID0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKChtX3F1aXJr
cyAmIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pICYmIGVxdWFsSWdub3Jp
bmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhT
dHJpbmcocGFyYW1OYW1lc1tpXSk7CisgICAgICAgIG1fcGFyYW1WYWx1ZXNbcGFyYW1Db3VudF0g
PSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKKworICAgICAgICBwYXJhbUNvdW50
Kys7CisgICAgfQorCisgICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3VudDsKK30KKworUGx1Z2lu
Vmlld0d0azo6UGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUm
IHNpemUsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKKyAgICA6IG1fcGx1Z2luKHBsdWdpbikKKyAgICAsIG1fZWxlbWVudChlbGVtZW50
KQorICAgICwgbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKKyAgICAsIG1faXNTdGFydGVkKGZh
bHNlKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9iYXNlVVJMKG1fcGFyZW50RnJhbWUtPmxv
YWRlcigpLT5jb21wbGV0ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkp
KQorICAgICwgbV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICwg
bV9yZXF1ZXN0VGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVkKQor
ICAgICwgbV9pbnZhbGlkYXRlVGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVU
aW1lckZpcmVkKQorICAgICwgbV9wYXJhbU5hbWVzKDApCisgICAgLCBtX3BhcmFtVmFsdWVzKDAp
CisgICAgLCBtX3F1aXJrcygwKQorICAgICwgbV9pc1dpbmRvd2VkKHRydWUpCisgICAgLCBtX2lz
VHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1faGF2
ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1fbGFzdE1lc3Nh
Z2UoMCkKKyAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxzZSkKKyAgICAsIG1fbG9h
ZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCisgICAgLCBt
X3dpZGdldCgwKQorICAgICwgbV9uZWVkc1hFbWJlZChmYWxzZSkKK3sKKyAgICBpZiAoIW1fcGx1
Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5zdGFuY2UgPSAmbV9pbnN0YW5jZVN0
cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CisKKyAgICBtX21pbWVUeXBlID0g
bWltZVR5cGUudXRmOCgpOworICAgIGRldGVybWluZVF1aXJrcyhtaW1lVHlwZSk7CisKKyAgICBz
ZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKworICAgIG1fbW9kZSA9IG1f
bG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVEOworCisgICAgcmVzaXplKHNpemUpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFs
aXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0
YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9z
dGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFzdGFydCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3Rh
dHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZt
X25lZWRzWEVtYmVkKTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZp
bmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAg
ICAgbV93aWRnZXQgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBndGtfY29udGFpbmVyX2Fk
ZChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSwgbV93aWRnZXQpOwor
ICAgICAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworICAgIH0gZWxzZQorICAgICAgICBtX3dp
ZGdldCA9IGd0a194dGJpbl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNv
bnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgTlVMTCk7CisjZWxzZQorICAgIG1fd2lkZ2V0ID0g
Z2RrX3NvY2tldF9uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZyYW1lLT52
aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSwgbV93aWRnZXQpOworICAgIHNldEd0a1dpZGdldCht
X3dpZGdldCk7CisjZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworI2lm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJ
TlMpCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9u
ZWVkc1hFbWJlZCkgeworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVko
bV93aWRnZXQtPndpbmRvdyk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNV
QUwoZ2RrX3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpKTsKKyAgICAgICAgd3Mt
PmRlcHRoID0gZ2RrX3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cpLT5kZXB0aDsK
KyAgICAgICAgd3MtPmNvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfd2luZG93
X2dldF9jb2xvcm1hcChtX3dpZGdldC0+d2luZG93KSk7CisgICAgICAgIG1fd2luZG93ID0gR0RL
X1dJTkRPV19YV0lORE9XKG1fd2lkZ2V0LT53aW5kb3cpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5OworICAgICAgICB3
cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAg
ICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7Cisg
ICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29s
b3JtYXA7CisgICAgICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7
CisKKyAgICAgICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7CisgICAgfQorCisgICAgbV9ucFdpbmRv
dy53c19pbmZvID0gd3M7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisgICAg
bV93aW5kb3cgPSBHREtfV0lORE9XX0hXTkQobV93aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKwor
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5k
b3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRv
dzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVE
cmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlm
ICghKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpCisgICAg
ICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcg
UGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwKTsKKyAgICBt
X21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUpOworCisgICAgbV9tYW51YWxTdHJl
YW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAg
ICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFudWFsU3RyZWFtLT5kaWRS
ZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRp
ZEZpbmlzaExvYWRpbmcoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBt
X21hbnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIEFTU0VSVCht
X21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmFpbCgwLCBlcnJvcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luVmlld0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3
R3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgUGx1Z2luVmlld0d0a19ICisjZGVmaW5lIFBsdWdpblZpZXdHdGtfSAorCisjaW5j
bHVkZSA8Z3RrL2d0a3dpZGdldC5oPgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKwor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgewor
ICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0K
K30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3Mg
RnJhbWU7CisgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgS2V5Ym9hcmRF
dmVudDsKKyAgICBjbGFzcyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3Mg
UGx1Z2luTWVzc2FnZVRocm90dGxlckd0azsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOwor
ICAgIGNsYXNzIFBsdWdpblJlcXVlc3RHdGs7CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3RrOwor
ICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAg
ICAKKyAgICBlbnVtIFBsdWdpblF1aXJrcyB7CisgICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3pp
bGxhVXNlckFnZW50ID0gMSA8PCAwLAorICAgICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRX
aW5kb3dDYWxsID0gMSA8PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0
ZSA9IDEgPDwgMiwgCisgICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFy
YW0gPSAxIDw8IDMsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVz
c2FnZXMgPSAxIDw8IDQsCisgICAgICAgIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEg
PDwgNSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJl
Y3Vyc2l2ZWx5ID0gMSA8PCA2CisgICAgfTsKKworICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKKyAg
ICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVz
Q2FuTm90TG9hZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5
CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblZpZXdHdGsgOiBwdWJsaWMgV2lkZ2V0IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25z
dCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5
KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld0d0aygpOworCisgICAgICAgIFBsdWdpblBh
Y2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAg
ICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAgICAg
ICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQ
bHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2luVmlldygpOworCisgICAgICAgIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgICAgICAvLyBOUE4gZnVu
Y3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRV
UkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9y
IHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
MiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwor
ICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAgICBO
UEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBT
dHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBp
bnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShO
UFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOworICAgICAgICBjb25zdCBjaGFyKiB1
c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7Cisg
ICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
KTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2
b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworICAgICAgICB2b2lkIGZvcmNlUmVkcmF3
KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayopOwor
CisgICAgICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZy
YW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0
cnlDaGFuZ2VkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOworICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworCisgICAgICAgIGdsb25nIHduZFByb2MoWElE
IGhXbmQsIGd1aW50IG1lc3NhZ2UsIGd1aW50IHdQYXJhbSwgZ2xvbmcgbFBhcmFtKTsKKworICAg
ICAgICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZworICAgICAgICB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZygp
OworICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIHByaXZh
dGU6CisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgdm9p
ZCBpbml0KCk7CisgICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqKTsK
KyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGhhbmRsZVBv
c3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0
IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmlj
YXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblBhY2thZ2VH
dGs+IG1fcGx1Z2luOworICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgICAgIEZyYW1l
KiBtX3BhcmVudEZyYW1lOworICAgICAgICBib29sIG1faXNTdGFydGVkOworICAgICAgICBLVVJM
IG1fdXJsOworICAgICAgICBLVVJMIG1fYmFzZVVSTDsKKyAgICAgICAgUGx1Z2luU3RhdHVzIG1f
c3RhdHVzOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlkUmVjdHM7CisKKyAgICAg
ICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQg
c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCByZXF1ZXN0
VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICB2b2lkIGludmFsaWRh
dGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIFRpbWVyPFBsdWdp
blZpZXdHdGs+IG1fcmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lcjxQbHVnaW5WaWV3R3RrPiBt
X2ludmFsaWRhdGVUaW1lcjsKKworICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxl
ckd0az4gbV9tZXNzYWdlVGhyb3R0bGVyOworCisgICAgICAgIHZvaWQgdXBkYXRlV2luZG93KCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOworICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50
Kik7CisKKyAgICAgICAgaW50IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAg
ICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7
CisKKyAgICAgICAgQ1N0cmluZyBtX21pbWVUeXBlOworICAgICAgICBDU3RyaW5nIG1fdXNlckFn
ZW50OworCisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICBOUFBfdCBtX2luc3RhbmNl
U3RydWN0OworICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93OworCisgICAgICAgIEhhc2hTZXQ8
UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPiBtX3N0cmVhbXM7CisgICAgICAgIFZlY3RvcjxQbHVn
aW5SZXF1ZXN0R3RrKj4gbV9yZXF1ZXN0czsKKworICAgICAgICBpbnQgbV9xdWlya3M7CisgICAg
ICAgIGJvb2wgbV9pc1dpbmRvd2VkOworICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsKKyAg
ICAgICAgYm9vbCBtX2lzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsK
KworICAgICAgICBYSUQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworICAgICAg
ICBtdXRhYmxlIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0
byBhIHdpbmRvd2VkIHBsdWctaW4KKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fd2luZG93UmVj
dDsgLy8gT3VyIHdpbmRvdyByZWN0LgorCisgICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7
CisgICAgICAgIGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOworCisgICAgICAgIGJvb2wg
bV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IG1fbWFudWFs
U3RyZWFtOworCisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVnaW5W
aWV3OworCisgICAgICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9uZWVk
c1hFbWJlZDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0
ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJu
YWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBp
cyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMg
d2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBp
bnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0
aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQg
cGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6
OnN0YXJ0LgorLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9j
a3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRo
IGEgTlVMTCBpbnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoTlBQIGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRh
dGEpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2Ut
Pm5kYXRhKTsKKyAgICByZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsK
K30KKwordm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxs
b2Moc2l6ZSk7Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUo
cHRyKTsKK30KKwordWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBE
byBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBC
b29sIHJlbG9hZFBhZ2VzKQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30K
KworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2Uq
IHJhbmdlTGlzdCkKK3sKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBF
cnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Q
b3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsK
K30KKworTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0
VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0
cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBO
UFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGlu
c3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBO
X1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBi
dWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndy
aXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFt
KE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAg
IHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0
cmVhbSwgcmVhc29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFu
Y2UpCit7CisgICAgUGx1Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSk7CisKKyAgICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFn
ZW50IHdpdGggYSBudWxsIGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24h
CisgICAgIC8vIFdlJ2QgbmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2
aW5nIGEgZnJhbWUgYXJvdW5kLgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsK
KyAKKyAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlk
YXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOwor
fQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52
YWxpZFJlZ2lvbikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZh
bGlkYXRlUmVnaW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhO
UFAgaW5zdGFuY2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9y
Y2VSZWRyYXcoKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05Q
RXJyb3IgTlBOX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQqIHZhbHVlKQoreworICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PnNldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkK
K3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0
SmF2YVBlZXIoTlBQIGluc3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQKK05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwg
TlBCb29sIGVuYWJsZWQpCit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUo
TlBQIGluc3RhbmNlKQoreworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6
dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
VmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBYRU1CRUQg
RGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5h
bCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0
b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBt
YXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAo
dGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwg
b3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElm
IHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkK
KyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBk
ZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5v
dGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUg
TEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0
ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICog
KioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3NhZ2VzICov
CisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmluZSBYRU1C
RURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19ERUFD
VElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAgICAgICAg
MworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWEVN
QkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NVU19ORVhU
ICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAgICAgICAg
IDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFhF
TUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlf
T04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAgICAgICAg
ICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVEX0dUS19H
UkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFCX0tFWSAg
ICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICovCisjZGVm
aW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfRk9D
VVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1QgICAgICAg
ICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUgWEVNQkVE
X01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luRGVidWcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVi
dWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFBMVUdJTl9ERUJVR19IX18KKyNkZWZpbmUgUExVR0lOX0RFQlVHX0hfXworCisjaW5j
bHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyKiBlcnJvclN0
cmluZ3NbXSA9IHsKKyAgICAiTm8gZXJyb3JzIG9jY3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9S
ICovCisgICAgIkVycm9yIHdpdGggbm8gc3BlY2lmaWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAv
KiBOUEVSUl9HRU5FUklDX0VSUk9SICovCisgICAgIkludmFsaWQgaW5zdGFuY2UgcGFzc2VkIHRv
IHRoZSBwbHVnLWluLiIsIC8qIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1IgKi8KKyAgICAi
RnVuY3Rpb24gdGFibGUgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX0ZVTkNUQUJMRV9FUlJP
UiAqLworICAgICJMb2FkaW5nIG9mIHBsdWctaW4gZmFpbGVkLiIsIC8qIE5QRVJSX01PRFVMRV9M
T0FEX0ZBSUxFRF9FUlJPUiAqLworICAgICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIiwgLyog
TlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUiAqLworICAgICJQbHVnLWluIG1pc3Npbmcgb3IgaW52
YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9FUlJPUiAqLworICAgICJQbHVnLWluIGRp
cmVjdG9yeSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRElS
X0VSUk9SICovCisgICAgIlZlcnNpb25zIG9mIHBsdWctaW4gYW5kIENvbW11bmljYXRvciBkbyBu
b3QgbWF0Y2guIiwgLyogTlBFUlJfSU5DT01QQVRJQkxFX1ZFUlNJT05fRVJST1IgKi8KKyAgICAi
UGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BBUkFNICov
CisgICAgIlVSTCBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9VUkwgKi8K
KyAgICAiRmlsZSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfRklMRV9OT1RfRk9VTkQg
Ki8KKyAgICAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIiwgLyogTlBFUlJfTk9fREFUQSAqLwor
ICAgICJTZWVrYWJsZSBzdHJlYW0gZXhwZWN0ZWQuIiwgLyogTlBFUlJfU1RSRUFNX05PVF9TRUVL
QUJMRSAqLworICAgICJVbmtub3duIGVycm9yIGNvZGUiCit9OworCisjaWZuZGVmIE5ERUJVRwor
I2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlmIChlcnIgIT0gTlBFUlJfTk9fRVJST1IpIF9SUFRG
MihfQ1JUX1dBUk4sICIlczogJXNcbiIsIF9fRlVOQ1RJT05fXywgZXJyb3JTdHJpbmdzW2Vycl0p
CisjZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkgX1JQVEYxKF9DUlRfV0FSTiwgIiVzOiBT
dHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRoIG5ldHdvcmssIGRpc2sgSS9PLCBsYWNr
IG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4iLCBfX0ZVTkNUSU9OX18pCisjZWxzZQor
I2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpICgodm9pZCkwKQorI2RlZmluZSBMT0dfTlBF
UlJPUihlcnIpICgodm9pZCkwKQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
bnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5j
dGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBfTlBGVU5DVElPTlNfSF8KKyNkZWZpbmUgX05QRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9XSU4pCisjZGVmaW5lIEVYUE9SVEVEX0NBTExC
QUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKF9fc3RkY2FsbCAqIF9uYW1lKQorI2Vsc2UKKyNkZWZp
bmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUsIF9uYW1lKSBfdHlwZSAoKiBfbmFtZSkKKyNlbmRp
ZgorCit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdm9pZCogbm90aWZ5RGF0
YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNv
bnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBO
UEVycm9yICgqTlBOX1JlcXVlc3RSZWFkUHJvY1B0cikoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRl
UmFuZ2UqIHJhbmdlTGlzdCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fTmV3U3RyZWFtUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHdpbmRvdywgTlBT
dHJlYW0qKiBzdHJlYW0pOwordHlwZWRlZiBpbnQzMiAoKk5QTl9Xcml0ZVByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOwordHlw
ZWRlZiBOUEVycm9yICgqTlBOX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fU3Rh
dHVzUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3R5cGVkZWYg
Y29uc3QgY2hhciooKk5QTl9Vc2VyQWdlbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRl
ZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQdHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9NZW1GcmVlUHJvY1B0cikodm9pZCogcHRyKTsKK3R5cGVkZWYgdWludDMyICgqTlBO
X01lbUZsdXNoUHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRlZiB2b2lkICgqTlBOX1JlbG9h
ZFBsdWdpbnNQcm9jUHRyKShOUEJvb2wgcmVsb2FkUGFnZXMpOwordHlwZWRlZiBOUEVycm9yICgq
TlBOX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9TZXRWYWx1ZVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVk
ZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWN0
ICpyZWN0KTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0cikoTlBQ
IGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24pOwordHlwZWRlZiB2b2lkICgqTlBOX0ZvcmNlUmVk
cmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQ
cm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBj
b25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9j
UHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAg
aW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UpOworCit0eXBlZGVmIHZv
aWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQp
OworCit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0
cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fR2V0U3RyaW5nSWRl
bnRpZmllcnNQcm9jUHRyKSAoY29uc3QgTlBVVEY4ICoqbmFtZXMsIGludDMyX3QgbmFtZUNvdW50
LCBOUElkZW50aWZpZXIgKmlkZW50aWZpZXJzKTsKK3R5cGVkZWYgTlBJZGVudGlmaWVyICgqTlBO
X0dldEludElkZW50aWZpZXJQcm9jUHRyKSAoaW50MzJfdCBpbnRpZCk7Cit0eXBlZGVmIGludDMy
X3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZp
ZXIpOwordHlwZWRlZiBib29sICgqTlBOX0lkZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIpIChOUElk
ZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBlZGVmIE5QVVRGOCAqKCpOUE5fVVRGOEZyb21JZGVu
dGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKKwordHlwZWRlZiBOUE9i
amVjdCogKCpOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0cikgKE5QUCwgTlBDbGFzcyAqYUNsYXNzKTsK
K3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX1JldGFpbk9iamVjdFByb2NQdHIpIChOUE9iamVjdCAq
b2JqKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlT2JqZWN0UHJvY1B0cikgKE5QT2JqZWN0
ICpvYmopOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZVByb2NQdHIpIChOUFAgbnBwLCBOUE9i
amVjdCAqb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3QgTlBWYXJpYW50ICphcmdz
LCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgq
TlBOX0ludm9rZURlZmF1bHRQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgY29uc3Qg
TlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwor
dHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRlUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpv
YmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAo
Kk5QTl9HZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50
aWZpZXIgIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgq
TlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRp
ZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgYm9v
bCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIpIChOUFAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSGFzTWV0aG9kUHJvY1B0
cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUpOwor
dHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2Jq
ZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBO
X1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9iamVjdCAqb2JqLCBjb25zdCBOUFVURjggKm1lc3Nh
Z2UpOwordHlwZWRlZiBib29sICgqTlBOX0VudW1lcmF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9i
amVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAqKmlkZW50aWZpZXIsIHVpbnQzMl90ICpjb3VudCk7
CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdQcm9jUHRyKShOUE1JTUVUeXBlIHBsdWdpblR5
cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1vZGUsIGludDE2IGFyZ2MsIGNoYXIqIGFyZ25bXSwg
Y2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2ZWQpOwordHlwZWRlZiBOUEVycm9yICgqTlBQ
X0Rlc3Ryb3lQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRhKiogc2F2ZSk7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFdpbmRv
dyogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdTdHJlYW1Qcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBCb29sIHNlZWth
YmxlLCB1aW50MTYqIHN0eXBlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95U3RyZWFt
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24p
OwordHlwZWRlZiB2b2lkICgqTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZm5hbWUpOwordHlwZWRlZiBpbnQzMiAoKk5Q
UF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtKTsKK3R5
cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBz
dHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVk
ZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQcmludCogcGxhdGZv
cm1QcmludCk7Cit0eXBlZGVmIGludDE2ICgqTlBQX0hhbmRsZUV2ZW50UHJvY1B0cikoTlBQIGlu
c3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBlZGVmIHZvaWQgKCpOUFBfVVJMTm90aWZ5UHJvY1B0
cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCog
bm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfR2V0VmFsdWVQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRfdmFsdWUpOwordHlwZWRl
ZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyh2b2lk
LCBOUFBfU2h1dGRvd25Qcm9jUHRyKSh2b2lkKTsKKwordHlwZWRlZiB2b2lkICooKk5QUF9HZXRK
YXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogICBKUklHbG9iYWxSZWY7IC8v
bm90IHVzaW5nIHRoaXMgcmlnaHQgbm93CisKK3R5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVu
Y3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIAorICAgIE5Q
Tl9HZXRVUkxQcm9jUHRyIGdldHVybDsKKyAgICBOUE5fUG9zdFVSTFByb2NQdHIgcG9zdHVybDsK
KyAgICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRyIHJlcXVlc3RyZWFkOworICAgIE5QTl9OZXdTdHJl
YW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUE5fV3JpdGVQcm9jUHRyIHdyaXRlOworICAgIE5Q
Tl9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QTl9TdGF0dXNQcm9j
UHRyIHN0YXR1czsKKyAgICBOUE5fVXNlckFnZW50UHJvY1B0ciB1YWdlbnQ7CisgICAgTlBOX01l
bUFsbG9jUHJvY1B0ciBtZW1hbGxvYzsKKyAgICBOUE5fTWVtRnJlZVByb2NQdHIgbWVtZnJlZTsK
KyAgICBOUE5fTWVtRmx1c2hQcm9jUHRyIG1lbWZsdXNoOworICAgIE5QTl9SZWxvYWRQbHVnaW5z
UHJvY1B0ciByZWxvYWRwbHVnaW5zOworICAgIE5QTl9HZXRKYXZhRW52UHJvY1B0ciBnZXRKYXZh
RW52OworICAgIE5QTl9HZXRKYXZhUGVlclByb2NQdHIgZ2V0SmF2YVBlZXI7CisgICAgTlBOX0dl
dFVSTE5vdGlmeVByb2NQdHIgZ2V0dXJsbm90aWZ5OworICAgIE5QTl9Qb3N0VVJMTm90aWZ5UHJv
Y1B0ciBwb3N0dXJsbm90aWZ5OworICAgIE5QTl9HZXRWYWx1ZVByb2NQdHIgZ2V0dmFsdWU7Cisg
ICAgTlBOX1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1ZTsKKyAgICBOUE5fSW52YWxpZGF0ZVJlY3RQ
cm9jUHRyIGludmFsaWRhdGVyZWN0OworICAgIE5QTl9JbnZhbGlkYXRlUmVnaW9uUHJvY1B0ciBp
bnZhbGlkYXRlcmVnaW9uOworICAgIE5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIgZm9yY2VyZWRyYXc7
CisgICAgCisgICAgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQcm9jUHRyIGdldHN0cmluZ2lkZW50
aWZpZXI7CisgICAgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0ciBnZXRzdHJpbmdpZGVu
dGlmaWVyczsKKyAgICBOUE5fR2V0SW50SWRlbnRpZmllclByb2NQdHIgZ2V0aW50aWRlbnRpZmll
cjsKKyAgICBOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0ciBpZGVudGlmaWVyaXNzdHJpbmc7
CisgICAgTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIgdXRmOGZyb21pZGVudGlmaWVyOwor
ICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIgaW50ZnJvbWlkZW50aWZpZXI7CisgICAg
TlBOX0NyZWF0ZU9iamVjdFByb2NQdHIgY3JlYXRlb2JqZWN0OworICAgIE5QTl9SZXRhaW5PYmpl
Y3RQcm9jUHRyIHJldGFpbm9iamVjdDsKKyAgICBOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIgcmVs
ZWFzZW9iamVjdDsKKyAgICBOUE5fSW52b2tlUHJvY1B0ciBpbnZva2U7CisgICAgTlBOX0ludm9r
ZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1bHQ7CisgICAgTlBOX0V2YWx1YXRlUHJvY1B0ciBl
dmFsdWF0ZTsKKyAgICBOUE5fR2V0UHJvcGVydHlQcm9jUHRyIGdldHByb3BlcnR5OworICAgIE5Q
Tl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJvcGVydHk7CisgICAgTlBOX1JlbW92ZVByb3BlcnR5
UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKKyAgICBOUE5fSGFzUHJvcGVydHlQcm9jUHRyIGhhc3By
b3BlcnR5OworICAgIE5QTl9IYXNNZXRob2RQcm9jUHRyIGhhc21ldGhvZDsKKyAgICBOUE5fUmVs
ZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFzZXZhcmlhbnR2YWx1ZTsKKyAgICBOUE5fU2V0
RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRpb247CisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVk
U3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFibGVkc3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0Vu
YWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBzZW5hYmxlZHN0YXRlOworICAgIE5QTl9FbnVtZXJh
dGVQcm9jUHRyIGVudW1lcmF0ZTsKK30gTlBOZXRzY2FwZUZ1bmNzOworCit0eXBlZGVmIHN0cnVj
dCBfTlBQbHVnaW5GdW5jcyB7CisgICAgdWludDE2IHNpemU7CisgICAgdWludDE2IHZlcnNpb247
CisgICAgTlBQX05ld1Byb2NQdHIgbmV3cDsKKyAgICBOUFBfRGVzdHJveVByb2NQdHIgZGVzdHJv
eTsKKyAgICBOUFBfU2V0V2luZG93UHJvY1B0ciBzZXR3aW5kb3c7CisgICAgTlBQX05ld1N0cmVh
bVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5QUF9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95
c3RyZWFtOworICAgIE5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyIGFzZmlsZTsKKyAgICBOUFBfV3Jp
dGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsKKyAgICBOUFBfV3JpdGVQcm9jUHRyIHdyaXRlOwor
ICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7CisgICAgTlBQX0hhbmRsZUV2ZW50UHJvY1B0ciBl
dmVudDsKKyAgICBOUFBfVVJMTm90aWZ5UHJvY1B0ciB1cmxub3RpZnk7CisgICAgSlJJR2xvYmFs
UmVmIGphdmFDbGFzczsKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5Q
UF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7Cit9IE5QUGx1Z2luRnVuY3M7CisKK3R5cGVkZWYg
RVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2Nh
cGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soY29u
c3QgY2hhciosIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIpKHZvaWQpOworCisjaWYgZGVm
aW5lZChYUF9NQUNPU1gpCit0eXBlZGVmIHZvaWQgICAgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlw
ZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOwordHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQ
dHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRy
Kik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzOSBAQAorLyogLSot
IE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAq
LworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBM
IDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBh
cmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEg
KHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3
YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNl
bnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IElt
cGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2lu
YWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRl
ZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhl
IEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1
dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIg
KHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BM
IG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkg
ZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhl
IExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUg
dGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAq
ICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisgCisvKgorICogVGhlIEd0a1h0Qmlu
IHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUg
YSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisjaW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVk
ZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsv
Z3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGli
Lmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5j
bHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8q
IHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3
aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklO
CisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitzdGF0aWMgdm9pZCAgICAgICAgICAg
IGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9p
ZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7
CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQg
ICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6
ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0
a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lk
ICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0a09iamVjdCAgICAgICpvYmplY3Qp
OworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9p
bml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0
X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZXIsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Ns
aWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1ZywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lk
ICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRnZXQgdywgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdl
dCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0
X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZl
bnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lk
Z2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9m
b2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRh
KTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcs
IFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVz
c2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg
dGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkg
KmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVycm9y
RXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZv
aWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJy
b3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxh
eSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29k
ZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKwor
c3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcg
ICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lz
X2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0
cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0
aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWlu
dCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFy
ZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICp0
aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtfVEhSRUFEU19FTlRFUigpOworICBt
YXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICBy
ZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hl
Y2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisK
KyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFz
azsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFW
RSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7CisgIH0KKworICBHREtfVEhSRUFEU19M
RUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2
ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAg
IEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVz
ZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBp
ID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7
CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0
cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxp
bWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nl
c3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisg
ICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBj
YWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBmb3IgKGk9MDsgaSA8IFhUQklOX01B
WF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNz
RXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisK
KyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5j
cyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50
X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1
bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdf
dGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBEaXNwbGF5ICogZGlzcGxh
eTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAg
ZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBhYyA9IFh0RGlzcGxheVRvQXBwbGlj
YXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0
IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0
IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAg
IHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcg
aW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2
ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRh
IHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisg
ICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAg
IFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0
a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRi
aW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3Qg
R3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7CisgICAgICAgICJHdGtYdEJpbiIsCisg
ICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3Mp
LAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAg
ICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2luaXQsCisgICAgICAgIC8qIHJlc2Vy
dmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAo
R3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtf
dHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0
dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAo
R3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7
CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3Rr
X3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJ
REdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5f
cmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXpl
OworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0
X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitn
dGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0g
TlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cg
PSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0gMDsKK30KKworc3RhdGljIHZvaWQK
K2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAg
ICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9
OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lm
ZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5k
aWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0
YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9u
IGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJl
bnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBhbGxvY2F0aW9uLndpZHRoID0gdzsK
KyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdp
ZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0
aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAg
eHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0
ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVh
bGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lk
Z2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50
X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdU
S19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4t
PndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNo
aWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBj
cmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29ja2V0LiAqLworICBndGtfc29j
a2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54dHdpbmRvdyk7Cit9CisKKwor
CitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0
cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOwor
CisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOworICB4dGJpbiA9IGd0a190eXBlX25l
dyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRn
ZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxp
emUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2lu
ZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtf
VklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQ
X1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zp
c3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7Cisg
ICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgor
ICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7Cisj
ZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7
CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0
aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dp
ZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7CisgICAgLyoKKyAgICAgKiBob29r
IFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBsb29wLgorICAgICAqLworCisgICAg
LyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxl
ZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6
ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9F
VkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJzZShncywgVFJVRSk7CisgICAgdGFn
ID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMK
KyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAg
Y251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2
ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0g
R19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4u
IGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01h
aW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50
X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7
CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0
aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0KKyAgICAgIGd0a190aW1lb3V0X2Fk
ZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGlu
Z190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICB4dGRpc3BsYXkpOworICB9
CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKwor
ICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54
dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJ
REdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEo
eHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOworICBpZiAodXNlcl9kYXRhKQorICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4
dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194
dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSkK
K3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRf
UkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21vdmUgKEdUS19XSURHRVQgKHh0Ymlu
KS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0
ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJp
biAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
bjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAl
ZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRi
aW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2
b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwg
d2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRT
ZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBY
dE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRn
ZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28g
dGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9j
YXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2Nh
dGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+
aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9u
KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2Jq
ZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fdW5yZWFsaXplKClcbiIpOworI2Vu
ZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZj
b3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdp
ZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3
aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkp
IHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKwor
ICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsK
K30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkK
K3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJn
dGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9i
amVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3Qp
KTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5k
b3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRf
ZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisK
KyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAv
KiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3Bs
YXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5sb29wICovCisgICAgaWYgKDAgPT0g
bnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmlu
ZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxvb3BcbiIpOworI2VuZGlmCisgICAg
ICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZl
bnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3Rp
bWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOworICAgICAgeHRfcG9sbGluZ190aW1l
cl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3Mp
LT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50
YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBY
dCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNs
aWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAg
ICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sK
KyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hhciAgICAgICAgICptQXJndlsxXTsK
KyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBz
dHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+
Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4
dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsK
KyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIp
OworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0g
WHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAoZmFsbGJhY2spCisgICAgICBY
dEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4
dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwg
TlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAm
bUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6
ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4
dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9
IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAgID0geHRkZXB0aDsKK30KKworLyog
Q3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGll
bnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisgICAgICAgICAgICAgICAgICAgV2lu
ZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAg
ICAgICAgICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQgICAgICAgICAgIG47CisgIEFyZyAg
ICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdl
dCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigieHRf
Y2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRl
U2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRn
ZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICovCisgIG4gPSAwOworICBYdFNldEFy
ZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0s
IFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdz
LCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4g
PSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdz
W25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmco
YXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRB
cmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAg
WHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVz
KGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwg
RkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7
CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxp
dHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNp
ZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRj
bGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlcmlkLAorICAg
ICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRv
dyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlm
CisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwg
WHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAg
ICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZG
KTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdl
Q2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dp
ZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRs
ZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVS
ZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAg
ICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsK
KyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAg
U3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAg
ICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9j
bGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7Cisg
IFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0
X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVj
aWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54
dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5j
b3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bf
d2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9w
X3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVy
bmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBY
IGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRk
aXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0g
eHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93
aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kg
ICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgewor
ICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZG
LCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xp
ZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGll
bnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQor
fQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRw
bHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsK
KworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVN
QkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8q
IFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVBy
b3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAg
ICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAgICAgICAgICAgICAgICAgIFByb3BN
b2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwg
Mik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdp
ZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xp
ZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54
Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6Cisg
ICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4i
KTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lO
RE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01P
REFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0
IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1C
RURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGll
bnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNh
c2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9GT0NVU19PVVQ6CisgICAgeworICAg
ICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50
KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNf
SU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZv
Y3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0lu
OworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJp
bnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54
Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisgICAgICB4ZXZlbnQueGZvY3VzLndp
bmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9j
dXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICBYU2Vu
ZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIAorICAgICAgICAgICAgICAg
ICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRN
YXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5
KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAgIH0KKyAgICBicmVhazsKKyAgZGVm
YXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKwor
c3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRw
bHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkK
KyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBt
ZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAg
ICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAg
ICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVu
dCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAg
ICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9p
bmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3Rp
Znk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDApOworICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7
CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0OgorICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3Mg
R290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVh
azsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2
b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAgKnh0Y2xpZW50LAorICAgICAgICAg
ICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICBsb25n
ICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAor
ICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEyLCAgCisgICAgICAgICAgICAgICAg
ICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3
PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50
LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXpl
b2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xp
ZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUg
PSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9y
bWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQu
eGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0g
PSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50
LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5k
RXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRw
eSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVm
IERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEh
IVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKworc3RhdGljIGludCAgICAgICAgICAg
ICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQor
eworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJh
cHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRs
ZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJv
cih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYo
dHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdl
dCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisg
IH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30KKworc3RhdGljIHZvaWQgICAgICAg
ICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2Rh
dGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAg
WHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBXaW5kb3cgd2luID0gWHRXaW5kb3co
dyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlm
eToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAg
ICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5k
b3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19s
aXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3
LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAg
ICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikgeworICAgICAgICAvKiBJIGFt
IHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0
KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAg
ICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAg
ICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAg
ICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAg
ICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAgICAgfQorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwg
WHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVydFRvUGFyZW50LCBldmVudC0+
eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xp
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAw
LCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAg
ICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4
dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQorewor
ICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQg
Knh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3Jz
ICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAm
YXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJl
Tm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5
KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAorICAgICAgICAgICAgICAgZXZlbnRt
YXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vi
c3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAg
ICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGll
bnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIHVu
dHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVy
KFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBpbnQgZXJyb3Jjb2RlOworCisg
IHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVO
b3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAorICAgICAgICAgICAgICAgICAg
ICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7
CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlz
dGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCit7Cisg
IFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7CisgIFdpbmRvdyAqY2hpbGRyZW47Cisg
IFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9v
dCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0
IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVy
b290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2Vy
X2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJv
b3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3Io
KTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJu
OworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBY
dFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOworICAgIGlmIChjaGlsZCkgCisgICAg
ICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAg
WEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
RGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5QYWNrYWdl
R3RrOjp+UGx1Z2luUGFja2FnZUd0aygpCit7CisgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKK30K
KworUGx1Z2luUGFja2FnZUd0azo6UGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQorICAgIDogbV9pc0xvYWRlZChmYWxzZSkKKyAg
ICAsIG1fbG9hZENvdW50KDApCisgICAgLCBtX3BhdGgocGF0aCkKKyAgICAsIG1fbW9kdWxlKDAp
CisgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCit7CisgICAgaW50IHBvcyA9IG1f
cGF0aC5kZXByZWNhdGVkU3RyaW5nKCkuZmluZFJldignLycpOworCisgICAgbV9maWxlTmFtZSA9
IG1fcGF0aC5yaWdodChtX3BhdGgubGVuZ3RoKCkgLSBwb3MgLSAxKTsKKworfQorCitib29sIFBs
dWdpblBhY2thZ2VHdGs6OmZldGNoSW5mbygpCit7CisgICAgaWYgKCFsb2FkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9IG1fTlBfR2V0TUlNRURl
c2NyaXB0aW9uKCk7CisgICAgZ2NoYXIqKiBtaW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAi
OyIsIC0xKTsKKyAgICBmb3IgKGludCBpID0gMDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tp
XVswXTsgaSsrKSB7CisgICAgICAgIGdjaGFyKiogbWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWVE
ZXNjc1tpXSwgIjoiLCAzKTsKKworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6
OmZyb21VVEY4KG1pbWVEYXRhWzJdKTsKKyAgICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19z
dHJzcGxpdChtaW1lRGF0YVsxXSwgIiwiLCAtMSk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
ZXh0VmVjdG9yOworICAgICAgICBmb3IgKGludCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQor
ICAgICAgICAgICAgZXh0VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNb
al0pKTsKKworICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVEYXRhWzBdLCBleHRW
ZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZURhdGFbMF0sIGRl
c2NyaXB0aW9uKTsKKworICAgICAgICBnX3N0cmZyZWV2KGV4dGVuc2lvbnMpOworICAgICAgICBn
X3N0cmZyZWV2KG1pbWVEYXRhKTsKKyAgICB9CisgICAgZ19zdHJmcmVldihtaW1lRGVzY3MpOwor
CisgICAgY2hhciogYnVmZmVyID0gMDsKKyAgICBOUEVycm9yIGVyciA9IG1fTlBQX0dldFZhbHVl
KDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJS
X05PX0VSUk9SKQorICAgICAgICBtX25hbWUgPSBidWZmZXI7CisKKyAgICBidWZmZXIgPSAwOwor
ICAgIGVyciA9IG1fTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywg
JmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9kZXNj
cmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHVubG9hZCgpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFBsdWdpblBhY2thZ2VHdGs6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7
CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3BlbigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01P
RFVMRV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fbW9kdWxlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRy
IE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJvciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJv
bChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAg
ICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9p
ZCoqKSZtX05QX0dldE1JTUVEZXNjcmlwdGlvbik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9k
dWxlLCAiTlBfU2h1dGRvd24iLCAodm9pZCoqKSZtX05QUF9TaHV0ZG93bik7CisgICAgZ19tb2R1
bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiLCAodm9pZCoqKSZtX05QUF9HZXRWYWx1
ZSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIW1fTlBfR2V0TUlNRURlc2NyaXB0aW9u
IHx8ICFtX05QUF9TaHV0ZG93biB8fCAhbV9OUFBfR2V0VmFsdWUpCisgICAgICAgIGdvdG8gYWJv
cnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNz
KSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisg
ICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1f
YnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5Q
Tl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RS
ZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAg
bV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVz
dHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1
cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2Vu
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVt
Zmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9
IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5Q
Tl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Q
b3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVl
OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJv
d3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJv
d3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJv
d3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3Rh
dGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxl
YXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIg
PSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5n
aWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93
c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7Cisg
ICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50
aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmpl
Y3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7
CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1
bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9w
ZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkg
PSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0g
X05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9O
UE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJv
cGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRp
b247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAg
ICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7
CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0Owor
CisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5s
b2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdp
blBhY2thZ2VHdGs6OnVubG9hZCgpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fTlBQX1NodXRkb3duKCk7CisKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKK30K
Kwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWRXaXRob3V0U2h1dGRvd24oKQoreworICAg
IGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbG9hZENv
dW50ID09IDApOworICAgIEFTU0VSVChtX21vZHVsZSk7CisKKyAgICBnX21vZHVsZV9jbG9zZSAo
bV9tb2R1bGUpOworCisgICAgbV9pc0xvYWRlZCA9IGZhbHNlOworfQorCitQbHVnaW5QYWNrYWdl
R3RrKiBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFj
a2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlR3RrKHBhdGgsIGxhc3RNb2RpZmllZCk7CisKKyAgICBp
ZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7CisgICAgICAgIGRlbGV0ZSBwYWNrYWdlOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHBhY2thZ2U7Cit9CisKK3Vu
c2lnbmVkIFBsdWdpblBhY2thZ2VHdGs6Omhhc2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBo
YXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1fcGF0aC5pbXBsKCktPmhhc2goKSwKKyAgICAgICAg
bV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVI
YXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2ln
bmVkKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFs
KGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpCit7
CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFi
b3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1HdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIKKworI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwu
aD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVjYXVzZSBzb21lIHBsdWdpbnMgbGlrZSB0byByZXR1
cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8vIGFuZCB0aGlzIHdheSB3ZSB3b24ndCBjbGFzaCB3
aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50IFdlYlJlYXNvbk5vbmUgPSAtMjsKKwordXNpbmcg
c3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBl
ZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+IFN0cmVhbU1hcDsKK3N0YXRpYyBTdHJlYW1NYXAm
IHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBTdHJlYW1NYXAgc3RhdGljU3RyZWFtczsKKyAgICBy
ZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKworUGx1Z2luU3RyZWFtR3RrOjpQbHVnaW5TdHJlYW1H
dGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldywgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKQorICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQorICAg
ICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldyhwbHVnaW5WaWV3KQorICAgICwg
bV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5v
dGlmaWNhdGlvbikKKyAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVmb3JlU3RhcnRlZCkKKyAg
ICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQorICAgICwgbV9kZWxheURlbGl2ZXJ5VGltZXIodGhp
cywgJlBsdWdpblN0cmVhbUd0azo6ZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQpCisgICAgLCBtX2Rl
bGl2ZXJ5RGF0YSgwKQorICAgICwgbV90ZW1wRmlsZUhhbmRsZSgwKQorICAgICwgbV9wbHVnaW5G
dW5jcyhwbHVnaW5WaWV3LT5wbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSkKKyAgICAsIG1faW5zdGFu
Y2UocGx1Z2luVmlldy0+aW5zdGFuY2UoKSkKK3sKKyAgICBBU1NFUlQobV9wbHVnaW5WaWV3KTsK
KworICAgIG1fc3RyZWFtLnVybCA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIG1f
c3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5lbmQgPSAwOworICAgIG1fc3RyZWFtLm5v
dGlmeURhdGEgPSAwOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IDA7CisKKyAgICBzdHJl
YW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5jZSk7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6
flBsdWdpblN0cmVhbUd0aygpCit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUgIT0gU3RyZWFt
U3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICBpZiAobV9zdHJlYW0udXJs
KQorICAgICAgICBmcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOworCisgICAgc3RyZWFtcygpLnJl
bW92ZSgmbV9zdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6c3RhcnQoKQorewor
ICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOworCisgICAgbV9sb2FkZXIgPSBOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKG1fZnJhbWUsIHRoaXMpOworCisgICAgbV9sb2FkZXIt
PnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2UpOworICAgIG1fbG9hZGVyLT5kb2N1bWVudExvYWRl
cigpLT5hZGRQbHVnSW5TdHJlYW1Mb2FkZXIobV9sb2FkZXIuZ2V0KCkpOworICAgIG1fbG9hZGVy
LT5sb2FkKG1fcmVzb3VyY2VSZXF1ZXN0KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0
b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVkOworCisgICAgaWYgKG1f
bG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgICAgIERv
Y3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpOworICAgICAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXIpOworCisgICAg
ICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291cmNlKCkpCisgICAgICAg
ICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9hZChtX2ZyYW1lLT5sb2Fk
ZXIoKS0+Y2FuY2VsbGVkRXJyb3IobV9yZXNvdXJjZVJlcXVlc3QpKTsKKworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fbG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5j
ZWwoKTsKKyAgICAgICAgbV9sb2FkZXIgPSAwOworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJl
YW1HdGs6OnN0YXJ0U3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJl
YW1CZWZvcmVTdGFydGVkKTsKKworICAgIGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMID0gbV9yZXNv
dXJjZVJlc3BvbnNlLnVybCgpOworCisgICAgLy8gU29tZSBwbHVnaW5zIChGbGFzaCkgZXhwZWN0
IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNvZGVkIGFzIHRoaXMgaXMg
dGhlCisgICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRoZSBVUkwuCisgICAgaWYg
KHJlc3BvbnNlVVJMLnN0cmluZygpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQor
ICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChyZXNwb25zZVVSTC5kZWNvZGVfc3RyaW5n
KHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSkudXRmOCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmco
KS51dGY4KCkpOworICAgIAorICAgIENTdHJpbmcgbWltZVR5cGVTdHIgPSBtX3Jlc291cmNlUmVz
cG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisgICAgCisgICAgbG9uZyBsb25nIGV4cGVjdGVkQ29u
dGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
KworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsKKyAgICAgICAgVmVjdG9y
PFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmcgc2VwYXJhdG9yKCI6ICIpOwor
CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVzb3VyY2VS
ZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZpcnN0Lmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRvci5jaGFyYWN0ZXJzKCks
IHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChp
dC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CisgICAgICAgIH0KKworICAgICAg
ICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIpLnV0ZjgoKTsKKworICAg
ICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxpa2VseSBjb21wcmVzc2Vk
KSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdpbiwKKyAgICAgICAgLy8g
d2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxlbmd0aCwgbm90IHlldCBr
bm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNDQ3MDU5OT4g
dHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVjdGVkQ29udGVudExlbmd0
aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KKyAgICAgICAgU3RyaW5nIGNvbnRlbnRFbmNv
ZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtRW5jb2Rp
bmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxsKCkgJiYgY29udGVudEVu
Y29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGgg
PSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9oZWFkZXJzLmRhdGEoKTsK
KyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRhdGEgPSB0aGlzOworICAg
IG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgsIDBMTCk7CisgICAgbV9z
dHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNvdXJjZVJlc3BvbnNlLmxhc3RNb2RpZmllZERhdGUo
KTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRhOworCisgICAgbV90cmFu
c2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9vZmZzZXQgPSAwOworICAgIG1fcmVhc29uID0g
V2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3RlY3QgdGhlIHN0cmVhbSBpZiBkZXN0cm95c3Ry
ZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhhbmRsZXIKKyAgICBSZWZQ
dHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgTlBFcnJvciBucEVyciA9
IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBNSU1FVHlwZSltaW1lVHlw
ZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVyTW9kZSk7CisgICAgCisg
ICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBjYWxsIHRvIG5ld3N0cmVh
bSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29uTm9uZSkKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RhcnRlZDsKKwor
ICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgY2FuY2VsQW5kRGVzdHJv
eVN0cmVhbShucEVycik7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUgPT0gTlBfTk9STUFMKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKChtX3RlbXBGaWxlSGFuZGxlID0gdG1wZmls
ZSgpKSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTb21ldGhp
bmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQorICAgIGNhbmNlbEFuZERl
c3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFtR3Rr
Ojpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW1z
KCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmREZXN0
cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3Rr
PiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHN0b3Ao
KTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24gcmVh
c29uKQoreworICAgIG1fcmVhc29uID0gcmVhc29uOworICAgIGlmIChtX3JlYXNvbiAhPSBOUFJF
U19ET05FKSB7CisgICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5nIHN0
cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVsaXZl
cnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBtX2Rl
bGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRhdGEg
dG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0cmVh
bUd0azo6ZGVzdHJveVN0cmVhbSgpCit7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFt
U3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUIChtX3JlYXNvbiAhPSBXZWJS
ZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFtX2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5RGF0
YS0+c2l6ZSgpID09IDApOworCisgICAgaWYgKG1fdGVtcEZpbGVIYW5kbGUgIT0gTlVMTCkKKyAg
ICAgICAgZmNsb3NlKG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgaWYgKG1fc3RyZWFtLm5kYXRh
ICE9IDApIHsKKyAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNm
ZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3BhdGguaXNOdWxsKCkpOworCisgICAgICAgICAgICBt
X3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGguZGF0YSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIE5QRXJyb3IgbnBFcnI7CisgICAgICAgIG5wRXJyID0g
bV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVh
c29uKTsKKworICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1f
c2VuZE5vdGlmaWNhdGlvbikKKyAgICAgICAgbV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1faW5z
dGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCks
IG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworCisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0
b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0U3RyZWFtIGNhbiBjYXVzZSB1cyB0byBiZSBkZWxl
dGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisgICAgaWYg
KCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaXNjb25uZWN0U3RyZWFt
KHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3ID0gMDsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0cmVhbUd0az4qIHRpbWVy
KQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9kZWxheURlbGl2ZXJ5VGltZXIpOworCisgICAg
ZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGl2ZXJEYXRhKCkK
K3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURhdGEpOworICAgIAorICAgIGlmIChtX3N0cmVhbVN0
YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2FuY2Vs
IG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNlTG9hZGVyIG9uIGVycm9yIHNvIHdlIGRvbid0IHJl
YWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0
ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGlmICghbV9zdHJlYW0ubmRhdGEgfHwg
bV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQz
MiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAgICBpbnQzMiB0b3RhbEJ5
dGVzRGVsaXZlcmVkID0gMDsKKworICAgIHdoaWxlICh0b3RhbEJ5dGVzRGVsaXZlcmVkIDwgdG90
YWxCeXRlcykgeworICAgICAgICBpbnQzMiBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+
d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOworCisgICAgICAgIGlmIChkZWxpdmVy
eUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVyeVRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3RhbEJ5dGVzIC0gdG90YWxC
eXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBpbnQzMiBkYXRhTGVuZ3RoID0gZGVsaXZlcnlC
eXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsg
dG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGRhdGEKKyAg
ICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53cml0ZShtX2luc3RhbmNl
LCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRhTGVuZ3RoLCAodm9pZCopZGF0YSk7CisgICAgICAg
ICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDApIHsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbWluKGRlbGl2ZXJ5
Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgbV9vZmZzZXQgKz0gZGVsaXZlcnlCeXRl
czsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWxpdmVyZWQgKz0gZGVsaXZlcnlCeXRlczsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZlcmVkID4gMCkgeworICAg
ICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgICAg
IGludCByZW1haW5pbmdCeXRlcyA9IHRvdGFsQnl0ZXMgLSB0b3RhbEJ5dGVzRGVsaXZlcmVkOwor
ICAgICAgICAgICAgbWVtbW92ZShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpLCBtX2RlbGl2ZXJ5RGF0
YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZCwgcmVtYWluaW5nQnl0ZXMpOworICAgICAg
ICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShyZW1haW5pbmdCeXRlcyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgICAgICAg
ICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAgICAgICAgICAgZGVzdHJv
eVN0cmVhbSgpOworICAgICAgICB9CisgICAgfSAKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6
OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJp
bmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgUmVzb3VyY2VS
ZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0cmluZy5sZW5ndGgoKSwg
IiIsICIiKSk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCByZXN1bHRTdHJpbmcuZGF0YSgp
LCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOworICAgIGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVh
bVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZEZpbmlzaExvYWRpbmcoMCk7Cit9
CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBtX3Jlc291cmNlUmVzcG9uc2Ug
PSByZXNwb25zZTsKKworICAgIHN0YXJ0U3RyZWFtKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9s
b2FkZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0
ZSA9PSBTdHJlYW1TdGFydGVkKTsKKyAgICAKKyAgICBpZiAoIW1fZGVsaXZlcnlEYXRhKQorICAg
ICAgICBtX2RlbGl2ZXJ5RGF0YS5zZXQobmV3IFZlY3RvcjxjaGFyPik7CisKKyAgICBpbnQgb2xk
U2l6ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6
ZShvbGRTaXplICsgbGVuZ3RoKTsKKyAgICBtZW1jcHkobV9kZWxpdmVyeURhdGEtPmRhdGEoKSAr
IG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CisKKyAgICAvLyBJZiB0aGUgcGx1Zy1pbiBjYW5jZWxz
IHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVsZXRlZCwgCisgICAgLy8g
c28gcHJvdGVjdCBpdCBoZXJlLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3Qo
dGhpcyk7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNGSUxFT05MWSkKKyAgICAg
ICAgZGVsaXZlckRhdGEoKTsKKworICAgIGlmIChtX3N0cmVhbVN0YXRlICE9IFN0cmVhbVN0b3Bw
ZWQgJiYgbV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxMKSB7CisgICAgICAgIGJvb2wgcmV0dmFsID0g
ZmFsc2U7CisKKyAgICAgICAgaWYgKCFyZXR2YWwgfHwgZnB1dHMoZGF0YSwgbV90ZW1wRmlsZUhh
bmRsZSkgPD0gMCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVU
V09SS19FUlIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZhaWwoTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7
CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAgICBtX2xvYWRlciA9IDA7CisK
KyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKwordm9pZCBQbHVnaW5T
dHJlYW1HdGs6OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxv
YWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKworICAgIG1fbG9hZGVyID0gMDsKKworICAg
IGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsy
eHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk
dGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2
aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJ
TiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAy
LjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBN
b3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhl
IExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNl
ZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmln
aHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9y
aWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQgSW1wbGVtZW50YXRpb24uCisgKgor
ICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4g
TWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERl
dmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0
ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0
aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBp
biB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFw
cGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93
IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJt
cyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlz
aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVy
IHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5v
dCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9m
IHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0Ug
QkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBfX0dUS19YVEJJTl9IX18KKyNkZWZpbmUgX19H
VEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsvZ3Rrc29ja2V0Lmg+CisjaW5jbHVkZSA8WDEx
L0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9YbGli
Lmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNpbmNsdWRlICJuc2NvcmUuaCIKKyNpZmRlZiBf
SU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8o
dHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19JTVBPUlRfKHR5cGUp
CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSB0eXBlCisjZW5kaWYK
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1
cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW4gR3RrWHRCaW47Cit0eXBlZGVmIHN0cnVj
dCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNzOworCisjZGVmaW5lIEdUS19UWVBFX1hUQklO
ICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1RLX1hU
QklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RLX0NIRUNLX0NBU1QgKChvYmopLCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtY
dEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgICAgKEdUS19DSEVD
S19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbkNsYXNzKSkKKyNkZWZpbmUgR1RLX0lT
X1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RLX0NIRUNLX1RZUEUgKChvYmopLCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKKyNk
ZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAoR1RLX0NIRUNLX0NMQVNTX1RZ
UEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1Y3QgX1h0Q2xpZW50IFh0Q2xpZW50OworCitz
dHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkqeHRkaXNwbGF5OworICBXaWRnZXQJdG9wX3dp
ZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAqLworICBXaWRnZXQJY2hpbGRfd2lkZ2V0
OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLworICBWaXN1YWwJKnh0dmlzdWFsOworICBpbnQJ
CXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3JtYXA7CisgIFdpbmRvdwlvbGR3aW5kb3c7Cit9
OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0a1NvY2tldCAgICAgIGdzb2NrZXQ7CisgIEdk
a1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7CisgIERpc3BsYXkgICAgICAgKnh0ZGlzcGxheTsg
ICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLworCisgIFdpbmRvdyAgICAgICAgIHh0d2lu
ZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRvdyAqLworICBnaW50ICAgICAgICAgICB4
LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OworICBYdENsaWVudAkgeHRjbGll
bnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1iZWQgKi8KK307CisgIAorc3RydWN0IF9H
dGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENsYXNzIHdpZGdldF9jbGFzczsKK307CisKK0dU
S1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0YmluX2dldF90eXBlICh2b2lkKTsKK0dUS1hU
QklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2lu
ZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJKHZvaWQpICAgICAgICBndGtfeHRiaW5fc2V0
X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KTsKK0dUS1hUQklOX0FQ
SSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVp
Z2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMgeworICAgIFh0VHJhbnNsYXRpb25zICB0
cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8gVHJhbnNsYXRpb24gTWFuYWdlciAgICAq
LworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxlOyAgICAgICAgIC8qIHByb2NlZHVyZSBi
aW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAgIHN0cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVu
dF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIgc3RhdGUgcHRyICAgICAqLworICAgIHVu
c2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOworfSBYdFRNUmVjLCAqWHRUTTsgICAKKwordHlw
ZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBXaWRnZXQgICAgICAgICAgc2VsZjsgICAgICAg
ICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNlbGYgICAgICAgICAgKi8KKyAgICBXaWRn
ZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAvKiBwb2ludGVyIHRvIFdpZGdldCdzIENs
YXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAgICAgICAgcGFyZW50OyAgICAgICAgICAgICAv
KiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBYcm1OYW1lICAgICAg
ICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSBxdWFya2lmaWVk
ICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVpbmdfZGVzdHJveWVkOyAgICAvKiBtYXJrZWQg
Zm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KKyAgICBYdENhbGxiYWNrTGlzdCAgZGVzdHJv
eV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVuIHdpZGdldCBkZXN0cm95ZWQgKi8KKyAg
ICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAgICAgICAvKiBjb25zdHJhaW50IHJlY29y
ZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3NpdGlvbiAgICAgICAgeCwgeTsgICAgICAgICAg
ICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNp
b24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3aW5kb3cgZGltZW5zaW9ucyAgICAgICAg
ICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgYm9yZGVyX3dpZHRoOyAgICAgICAvKiB3
aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAg
bWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQgZ2VvbWV0cnkgbWFuYWdlZD8gICAgICAg
Ki8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZlOyAgICAgICAgICAvKiBpcyB3aWRnZXQg
c2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAgICBCb29sZWFuICAgICAgICAgYW5jZXN0b3Jf
c2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBzZW5zaXRpdmU/ICAgICAgKi8KKyAgICBY
dEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAgICAvKiBwcml2YXRlIHRvIGV2ZW50IGRp
c3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVjICAgICAgICAgdG07ICAgICAgICAgICAgICAg
ICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAgICAgICAgKi8KKyAgICBYdFRyYW5zbGF0
aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2NlbGVyYXRvciB0cmFuc2xhdGlvbnMgICAg
ICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYm9yZGVyX3BpeGVsOyAgICAgICAvKiB3aW5k
b3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8KKyAgICBQaXhtYXAgICAgICAgICAgYm9y
ZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeG1hcCBvciBOVUxMICAgICAgKi8K
KyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsgICAgICAgICAvKiBsaXN0IG9mIHBvcHVw
cyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5hbCAgICAgICAgbnVtX3BvcHVwczsg
ICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTdHJp
bmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAg
ICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAgICAgICAgKnNjcmVlbjsgICAgICAgICAgICAv
KiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAgICAgKi8KKyAgICBDb2xvcm1hcCAgICAg
ICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1hcCAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2luZG93OyAgICAgICAgICAgICAvKiB3aW5kb3cg
SUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5hbCAgICAgICAgZGVwdGg7
ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVzIGluIHdpbmRvdyAgICAgICAgKi8KKyAg
ICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhlbDsgICAvKiB3aW5kb3cgYmFja2dyb3Vu
ZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXhtYXAgICAgICAgICAgYmFja2dyb3VuZF9waXht
YXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAgb3IgTlVMTCAgKi8KKyAgICBCb29sZWFu
ICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBpcyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qg
b2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAgICAgbWFwcGVkX3doZW5fbWFuYWdlZDsvKiBt
YXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAgKi8KK30gQ29yZVBhcnQ7CisKK3R5cGVk
ZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENvcmVQYXJ0ICAgIGNvcmU7CisgfSBXaWRnZXRS
ZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3Bs
dXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRCSU5fSF9fICovCisKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luU3RyZWFtR3RrX0gKKyNkZWZpbmUgUGx1
Z2luU3RyZWFtR3RrX0gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIK
KworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGx1Z2luVmlld0d0azsKKworICAg
IGVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1CZWZvcmVTdGFydGVkLCBTdHJlYW1TdGFy
dGVkLCBTdHJlYW1TdG9wcGVkIH07CisKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW1HdGsgOiBwdWJs
aWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW1HdGs+LCBwcml2YXRlIE5ldHNjYXBlUGx1Z0luU3Ry
ZWFtTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpblN0cmVhbUd0ayhQ
bHVnaW5WaWV3R3RrKiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNlbmRO
b3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICB+UGx1Z2luU3RyZWFtR3Rr
KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3RvcCgp
OworCisgICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKKworICAgICAgICB2b2lkIHNldExvYWRN
YW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxseSA9IGxvYWRNYW51YWxs
eTsgfQorCisgICAgICAgIC8vIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IGNoYXIqLCBp
bnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKTsKKworICAgICAgICB2b2lk
IHNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IENTdHJp
bmcmIHJlc3VsdFN0cmluZyk7CisgICAgICAgIHZvaWQgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShO
UFJlYXNvbik7CisKKyAgICAgICAgc3RhdGljIE5QUCBvd25lckZvclN0cmVhbShOUFN0cmVhbSop
OworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZGVsaXZlckRhdGEoKTsKKyAgICAgICAgdm9p
ZCBkZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKyAgICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKCk7
CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0OworICAgICAgICBS
ZXNvdXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKKworICAgICAgICBGcmFtZSogbV9m
cmFtZTsKKyAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBtX2xvYWRl
cjsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICB2b2lkKiBt
X25vdGlmeURhdGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgICAgICBQ
bHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOworICAgICAgICBib29sIG1fbG9hZE1hbnVh
bGx5OworCisgICAgICAgIFRpbWVyPFBsdWdpblN0cmVhbUd0az4gbV9kZWxheURlbGl2ZXJ5VGlt
ZXI7CisgICAgICAgIHZvaWQgZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luU3Ry
ZWFtR3RrPiopOworCisgICAgICAgIE93blB0cjwgVmVjdG9yPGNoYXI+ID4gbV9kZWxpdmVyeURh
dGE7CisKKyAgICAgICAgRklMRSogbV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBO
UFBsdWdpbkZ1bmNzKiBtX3BsdWdpbkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAg
ICAgICAgdWludDE2IG1fdHJhbnNmZXJNb2RlOworICAgICAgICBpbnQzMiBtX29mZnNldDsKKyAg
ICAgICAgQ1N0cmluZyBtX2hlYWRlcnM7CisgICAgICAgIENTdHJpbmcgbV9wYXRoOworICAgICAg
ICBOUFJlYXNvbiBtX3JlYXNvbjsKKyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZUd0a19ICisjZGVmaW5lIFBsdWdp
blBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4K
KworI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0aWFsaXplRnVuY1B0cgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1F
VG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0
cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0
ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VHdGs+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIH5QbHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdl
R3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0
TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVOYW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBt
aW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsg
fQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNr
YWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKTsKKworICAgICAgICBib29sIGxv
YWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygp
IGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAg
UGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1v
ZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKworICAgICAgICBib29sIG1faXNM
b2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBTdHJpbmcgbV9kZXNj
cmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5h
bWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25z
TWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1f
bWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxlKiBtX21vZHVsZTsKKyAgICAgICAg
dGltZV90IG1fbGFzdE1vZGlmaWVkOworCisgICAgICAgIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1
bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQ
dHIgbV9OUFBfU2h1dGRvd247CisgICAgICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgbV9OUFBfR2V0
VmFsdWU7CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBO
ZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2lu
UGFja2FnZUd0a0hhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQg
a2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihrZXkpLT5o
YXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdp
blBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisKKyAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChy
ZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQ
bHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VH
dGs+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlR3RrOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0
KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBG
SVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBp
bXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQg
dHJhaXRzLgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0
b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3Rr
SGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0az4gPiA+IHsK
KyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2VHdGs+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBIYXNoOworICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8
SW50VHlwZT4gVHJhaXRzOworICAgIH07Cit9CisKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKworI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIK
KyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1
Z2luRGF0YWJhc2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCkKK3sK
KyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIHBsdWdpbnMgPSAwOworICAgIAorICAgIGlm
ICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlR3RrOwor
ICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVs
dFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2VHdGs6OmFkZEV4dHJh
UGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9wbHVnaW5QYXRocy5hcHBl
bmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjpy
ZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKKworICAgIGJvb2wgcGx1
Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVn
aW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7CisKKyAgICBpZiAoIW1f
cGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFy
KCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKKwor
ICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7
CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJl
bW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAg
ICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgp
OworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9V
bmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLnJl
bW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucworICAgICAgICBlbmQgPSBu
ZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1f
cGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNU
b1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7CisgICAgICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0
Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3Rl
ciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEdldCBN
SU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
bWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAgICAgICAgZm9y
IChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQp
IHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKK30KKwor
VmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2lucygpIGNv
bnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiByZXN1bHQ7CisKKyAgICBQbHVn
aW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZUd0azo6Z2V0UGx1Z2luc0lu
UGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5z
ZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisgICAg
UGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBvbGRXTVBQbHVnaW4g
PSAwOworICAgIFBsdWdpblBhY2thZ2VHdGsqIG5ld1dNUFBsdWdpbiA9IDA7CisKKyAgICBWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKKyAg
ICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEdEaXIqIGRpciA9IGdfZGlyX29w
ZW4oKGl0LT51dGY4KCkpLmRhdGEoKSwgMCwgTlVMTCk7CisgICAgICAgIGlmIChkaXIpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICB3aGlsZSAoKG5hbWUgPSBn
X2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ19zdHJfaGFzX3N1
ZmZpeChuYW1lLCAiLiIgR19NT0RVTEVfU1VGRklYKSkgeworICAgICAgICAgICAgICAgICAgICBn
Y2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5kYXRhKCksIG5h
bWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Q
YWNrYWdlID0gUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShmaWxlbmFtZSwgdGltZShO
VUxMKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7CisgICAgICAgICAgICAg
ICAgICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGlyKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVy
c2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGlu
dD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBl
bmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgo
KSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3Ry
aW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2Vu
ZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3Ry
aW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAg
ICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9z
ID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhp
cyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRp
YyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25B
LCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25C
LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9u
QVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVs
c2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVp
dGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJl
dHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2lu
RGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
cGF0aHM7CisKKyAgICBnY2hhciogaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hv
bWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVMTCk7CisgICAgcGF0aHMuYXBwZW5k
KGhvbWVQYXRoKTsKKyAgICBnX2ZyZWUoaG9tZVBhdGgpOworCisgICAgY29uc3QgZ2NoYXIqIG1v
elBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7CisgICAgaWYgKG1velBhdGgpIHsK
KyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQobW96UGF0aCwgIjoiLCAt
MSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVnaW5QYXRoc1tpXTsgaSsrKQorICAg
ICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ldKTsKKworICAgICAgICBnX2ZyZWUo
cGx1Z2luUGF0aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21v
emlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVn
aW5zIik7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6
OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29u
dGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0
azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBTdHJp
bmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
aWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICAg
ICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVn
aW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRv
RXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0
ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsg
bWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFz
ZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsKKworICAgIGlmICghbWlt
ZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVU
eXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHVy
bC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhwYXRo
LnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JFeHRl
bnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxk
IGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBlIAorICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisgICAgcmV0dXJuIHBsdWdp
bjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNyZWF0ZVBsdWdpblZp
ZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IGZp
bmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3Vu
ZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBp
ZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJs
LCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmlld0d0ayhwYXJl
bnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1
Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRl
eCh1bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VHdGsgKmRiID0gUGx1Z2luRGF0
YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3
IFBsdWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IGRiLT5wbHVnaW5z
KClbaV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZp
bGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNj
cmlwdGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNj
cmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQo
KTsKKyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
aW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1p
bWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWlt
ZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJz
dDsKKyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdp
biA9IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsK
KworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3Rv
cmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6
Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworU3RyaW5nIFBsdWdJ
bkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBHVEsrCisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlw
ZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1cm4gUGx1Z2lu
RGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWlt
ZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKQor
eworICAgIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsK
KworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBv
cGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDI4OTc1KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBAIERFUEVORFBB
VEggKz0gZWRpdGluZy9xdCBoaXN0b3J5L3F0IGxvYWQKIGd0ay1wb3J0IHsKICAgICB4MTE6cGx1
Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICBMSUJTICs9IC1sWHQK
ICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0xNzEsNiArMTcyLDcgQEAgZ3RrLXBv
cnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBcCiAgICAgbG9hZGVyL2d0ayBc
CiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAgICAuLi9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcKIH0KQEAgLTg0NywxMyAr
ODQ5LDM5IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogCiBndGst
cG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdUS19ESVNBQkxFX1BMVUdJTlM9
MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3Rr
LmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmggXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmggXAor
ICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250RGF0YS5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFj
a0xpc3QuY3BwIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwK
KyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0
ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VH
dGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwIFwKKyAgICBwbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvbnBhcGkuY3BwCisK
KyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oIFwKKyAgICBwbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oIFwKKyAgICBwbHVnaW5zL2d0
ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk1Myw2ICs5ODEsNyBAQCBxdC1wb3J0IHsKIH0K
IAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsK
ICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmggXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVs
cGVyLmggXApJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDI4OTc1KQorKysgV2Vi
Q29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE0ICsyOCwx
OSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKwogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgogCisjaW5j
bHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSAi
cnVudGltZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikKK0tKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQo
V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwogICAg
IHJldHVybiAwOwogfQogCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lv
biAyODk3NSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NYVmVy
c2lvbjsKIG15ICRpc1F0OwogbXkgJGlzR3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBteSAk
aXNXeDsKIAogIyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBvcnQKQEAgLTQ4MCw2ICs0ODIsMjMg
QEAgc3ViIGRldGVybWluZUlzR3RrKCkKICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVnaW5z
KCkKK3sKKyAgICBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRlbmFi
bGVHdGtQbHVnaW5zOworfQorCitzdWIgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7Cisg
ICAgcmV0dXJuIGlmIGRlZmluZWQoJGVuYWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNoZWNr
QXJndigiLS1kaXNhYmxlLWd0ay1wbHVnaW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdp
bnMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsKKyAg
ICB9Cit9CisKIHN1YiBpc1d4KCkKIHsKICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC03ODksNiAr
ODA4LDcgQEAgc3ViIGJ1aWxkUU1ha2VHdGtQcm9qZWN0KCQkKQogCiAgICAgbXkgQGJ1aWxkQXJn
cyA9ICgiQ09ORklHKz1ndGstcG9ydCIpOwogICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRy09
cXQiOworICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRys9cGx1Z2lucyIgaWYgZW5hYmxlR3Rr
UGx1Z2lucygpOwogCiAgICAgcmV0dXJuIGJ1aWxkUU1ha2VQcm9qZWN0KCRjbGVhbiwgQGJ1aWxk
QXJncyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18108</attachid>
            <date>2007-12-25 09:16:35 -0800</date>
            <delta_ts>2008-01-02 09:13:48 -0800</delta_ts>
            <desc>Update to fix a Gtk-CRITICAL when destroying the widget</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>169942</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShyZXZpc2lvbiAyODk3OSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDksMTIgKzUwLDE3IEBACiAjaW5jbHVkZSA8c3lzL3V0
c25hbWUuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2Fk
ZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50
KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2MCw5ICsxNjYsMzAgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxv
YWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJh
bWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2Fk
ZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAg
ICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgor
ICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAg
ICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAo
IXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZy
YW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAg
ICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9u
c2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0
aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
IGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI1OCw4ICsy
ODUsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQog
Ci1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYs
IEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKIHsKKyAgICBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3ID0g
UGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+Y3JlYXRlUGx1Z2luVmlldyhj
b3JlKG1fZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5z
dGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVy
biBwbHVnaW5WaWV3OworCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0K
QEAgLTMwMSw4ICszMzMsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6
Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdl
dCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOwor
ICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihwbHVnaW5XaWRn
ZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lk
Z2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTMy
NCw2ICszNTUsOSBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudDo6b2JqCiAg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSh0eXBlKSkK
ICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRJbWFnZTsKIAorICAgIGlmIChQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJl
ZChtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50TmV0c2Nh
cGVQbHVnaW47CisKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEZy
YW1lOwogCkBAIC02MjMsMTQgKzY1NywxNCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6Omdl
bmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhE
b2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50TG9h
ZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUg
bG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUK
LSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgot
ICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7
Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNv
ZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9u
c2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVy
KCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9wbHVn
aW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAg
ICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4g
PSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzUzLDkgKzc4NywxMyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1h
aW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmll
dyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDI4OTc5KQorKysgV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xODAsNiArMTgzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRX
ZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAg
Ly8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVn
aW5WaWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
dmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
Y3BwCShyZXZpc2lvbiAyODk3OSkKKysrIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgzLDYgKzg4Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19pbml0KFdlYktpdFcKICAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZh
bWlseSgiQXJpYWwiKTsKICAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVy
IE5ldyIpOwogICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFyaWFsIik7Cisg
ICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwogCiAgICAgR1RLX1dJREdFVF9T
RVRfRkxBR1Mod2ViVmlldywgR1RLX0NBTl9GT0NVUyk7CiAgICAgd2ViVmlld0RhdGEtPm1haW5G
cmFtZSA9IFdFQktJVF9XRUJfRlJBTUUod2Via2l0X3dlYl9mcmFtZV9uZXcod2ViVmlldykpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZp
c2lvbiAyODk3OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nyw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVz
b3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAotUGx1Z2luSW5mbyogUGx1
Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6
OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotU3Ry
aW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9IAotYm9vbCBX
ZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29y
ZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3Ig
V2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdl
YkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkocmV2aXNpb24gMjg5NzkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUs
NSArMzA1LDIyIEBAIHZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib28KIAog
dm9pZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0CiB7CisgICAgaWYgKCFwYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAg
IEludFBvaW50IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFt
ZUdlb21ldHJ5KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYWxsb2Nh
dGlvbiBzaXplIHRvIGJlIG5lZ2F0aXZlCisgICAgSW50U2l6ZSBzeiA9IGZyYW1lR2VvbWV0cnko
KS5zaXplKCk7CisgICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgR3RrQWxsb2Nh
dGlvbiBhbGxvY2F0aW9uID0geyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWln
aHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9j
YXRpb24pOwogfQogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBsdWdpbkRhdGFiYXNlR3RrX0gKKyNkZWZpbmUgUGx1Z2luRGF0YWJhc2VHdGtfSAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBF
bGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIEludFNpemU7CisgICAgY2xhc3Mg
S1VSTDsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblZpZXdH
dGs7CisKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+LCBQbHVn
aW5QYWNrYWdlR3RrSGFzaD4gUGx1Z2luU2V0OworICAKKyAgICBjbGFzcyBQbHVnaW5EYXRhYmFz
ZUd0ayB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIGlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogY3JlYXRlUGx1Z2luVmll
dyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wg
bG9hZE1hbnVhbGx5KTsKKworICAgICAgICBib29sIHJlZnJlc2goKTsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblBhY2thZ2VHdGsqPiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNNSU1F
VHlwZVJlZ2lzdGVyZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIHZv
aWQgYWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgc2V0UGx1Z2luUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSB7IG1f
cGx1Z2luUGF0aHMgPSBwYXRoczsgfQorICAgICAgICBQbHVnaW5TZXQgZ2V0UGx1Z2luc0luUGF0
aHMoKSBjb25zdDsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUd0ayogcGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbik7CisKKyAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGRlZmF1bHRQbHVnaW5Q
YXRocygpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fcGx1Z2luUGF0aHM7CisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXM7CisgICAgICAgIFBsdWdpblNl
dCBtX3BsdWdpbnM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQ1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQ
bHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJl
YW1HdGsuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNs
dWRlICJranNfd2luZG93LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRl
ICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8a2pzL0pT
TG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorCisjaWYgZGVmaW5lZChHREtfV0lORE9X
SU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyNpbmNsdWRlICJndGsy
eHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRP
V0lOR19XSU4zMgorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtK
Uzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2Nr
OwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6
VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCitjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrIHsKK3B1YmxpYzoK
KyAgICBQbHVnaW5SZXF1ZXN0R3RrKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJl
cXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKKyAgICAgICAg
OiBtX2ZyYW1lTG9hZFJlcXVlc3QoZnJhbWVMb2FkUmVxdWVzdCkKKyAgICAgICAgLCBtX25vdGlm
eURhdGEobm90aWZ5RGF0YSkKKyAgICAgICAgLCBtX3NlbmROb3RpZmljYXRpb24oc2VuZE5vdGlm
aWNhdGlvbikgeyB9CitwdWJsaWM6CisgICAgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVM
b2FkUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVMb2FkUmVxdWVzdDsgfQorICAgIHZv
aWQqIG5vdGlmeURhdGEoKSBjb25zdCB7IHJldHVybiBtX25vdGlmeURhdGE7IH0KKyAgICBib29s
IHNlbmROb3RpZmljYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbmROb3RpZmljYXRpb247IH0K
K3ByaXZhdGU6CisgICAgRnJhbWVMb2FkUmVxdWVzdCBtX2ZyYW1lTG9hZFJlcXVlc3Q7CisgICAg
dm9pZCogbV9ub3RpZnlEYXRhOworICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0aW9uOworICAgIC8v
IEZJWE1FOiB1c2VyIGdlc3R1cmUKK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgTWVzc2FnZVRo
cm90dGxlVGltZUludGVydmFsID0gMC4wMDE7CisKK2NsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJHdGsgeworcHVibGljOgorICAgIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGsoUGx1Z2luVmll
d0d0ayogcGx1Z2luVmlldykKKyAgICAgICAgOiBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAg
ICAgICAgLCBtX2JhY2soMCksIG1fZnJvbnQoMCkKKyAgICAgICAgLCBtX21lc3NhZ2VUaHJvdHRs
ZVRpbWVyKHRoaXMsICZQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrOjptZXNzYWdlVGhyb3R0bGVU
aW1lckZpcmVkKQorICAgIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJlZSBsaXN0IHdp
dGggb3VyIGlubGluZSBtZXNzYWdlcworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
TnVtSW5saW5lTWVzc2FnZXMgLSAxOyBpKyspCisgICAgICAgICAgICBtX2lubGluZU1lc3NhZ2Vz
W2ldLm5leHQgPSAmbV9pbmxpbmVNZXNzYWdlc1tpICsgMV07CisgICAgICAgIG1faW5saW5lTWVz
c2FnZXNbTnVtSW5saW5lTWVzc2FnZXMgLSAxXS5uZXh0ID0gMDsKKyAgICAgICAgbV9mcmVlSW5s
aW5lTWVzc2FnZXMgPSAmbV9pbmxpbmVNZXNzYWdlc1swXTsKKyAgICB9CisKKyAgICB+UGx1Z2lu
TWVzc2FnZVRocm90dGxlckd0aygpCisgICAgeworICAgICAgICBQbHVnaW5NZXNzYWdlKiBuZXh0
OworICAgIAorICAgICAgICBmb3IgKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2UgPSBtX2Zyb250OyBt
ZXNzYWdlOyBtZXNzYWdlID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IG1lc3NhZ2UtPm5l
eHQ7CisgICAgICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgfSAgICAgICAg
CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kTWVzc2FnZShYSUQgaFduZCwgZ3VpbnQgbXNn
LCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSkgCisgICAgeworICAgICAgICBQbHVnaW5NZXNz
YWdlKiBtZXNzYWdlID0gYWxsb2NhdGVNZXNzYWdlKCk7CisKKyAgICAgICAgbWVzc2FnZS0+aFdu
ZCA9IGhXbmQ7CisgICAgICAgIG1lc3NhZ2UtPm1zZyA9IG1zZzsKKyAgICAgICAgbWVzc2FnZS0+
d1BhcmFtID0gd1BhcmFtOworICAgICAgICBtZXNzYWdlLT5sUGFyYW0gPSBsUGFyYW07CisgICAg
ICAgIG1lc3NhZ2UtPm5leHQgPSAwOworCisgICAgICAgIGlmIChtX2JhY2spCisgICAgICAgICAg
ICBtX2JhY2stPm5leHQgPSBtZXNzYWdlOworICAgICAgICBtX2JhY2sgPSBtZXNzYWdlOworICAg
ICAgICBpZiAoIW1fZnJvbnQpCisgICAgICAgICAgICBtX2Zyb250ID0gbWVzc2FnZTsKKworICAg
ICAgICBpZiAoIW1fbWVzc2FnZVRocm90dGxlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
IG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVTaG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJ
bnRlcnZhbCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlIHsK
KyAgICAgICAgWElEIGhXbmQ7CisgICAgICAgIGd1aW50IG1zZzsKKyAgICAgICAgZ3VpbnQgd1Bh
cmFtOworICAgICAgICBnbG9uZyBsUGFyYW07CisKKyAgICAgICAgc3RydWN0IFBsdWdpbk1lc3Nh
Z2UqIG5leHQ7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIG1lc3NhZ2VUaHJvdHRsZVRpbWVyRmly
ZWQoVGltZXI8UGx1Z2luTWVzc2FnZVRocm90dGxlckd0az4qKQorICAgIHsKKyAgICAgICAgUGx1
Z2luTWVzc2FnZSogbWVzc2FnZSA9IG1fZnJvbnQ7CisgICAgICAgIG1fZnJvbnQgPSBtX2Zyb250
LT5uZXh0OworICAgICAgICBpZiAobWVzc2FnZSA9PSBtX2JhY2spCisgICAgICAgICAgICBtX2Jh
Y2sgPSAwOworCisJLy8gICAgICAgIDo6Q2FsbFdpbmRvd1Byb2MobV9wbHVnaW5WaWV3LT5wbHVn
aW5XbmRQcm9jKCksIG1lc3NhZ2UtPmhXbmQsIG1lc3NhZ2UtPm1zZywgbWVzc2FnZS0+d1BhcmFt
LCBtZXNzYWdlLT5sUGFyYW0pOworCisgICAgICAgIGZyZWVNZXNzYWdlKG1lc3NhZ2UpOworCisg
ICAgICAgIGlmIChtX2Zyb250KQorICAgICAgICAgICAgbV9tZXNzYWdlVGhyb3R0bGVUaW1lci5z
dGFydE9uZVNob3QoTWVzc2FnZVRocm90dGxlVGltZUludGVydmFsKTsKKyAgICB9CisKKyAgICBQ
bHVnaW5NZXNzYWdlKiBhbGxvY2F0ZU1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVz
c2FnZSAqbWVzc2FnZTsKKworICAgICAgICBpZiAobV9mcmVlSW5saW5lTWVzc2FnZXMpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAgICAgIG1f
ZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZS0+bmV4dDsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtZXNzYWdlID0gbmV3IFBsdWdpbk1lc3NhZ2U7CisKKyAgICAgICAgcmV0dXJuIG1l
c3NhZ2U7CisgICAgfQorCisgICAgYm9vbCBpc0lubGluZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSog
bWVzc2FnZSkgCisgICAgeworICAgICAgICByZXR1cm4gbWVzc2FnZSA+PSAmbV9pbmxpbmVNZXNz
YWdlc1swXSAmJiBtZXNzYWdlIDw9ICZtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2Vz
IC0gMV07CisgICAgfQorCisgICAgdm9pZCBmcmVlTWVzc2FnZShQbHVnaW5NZXNzYWdlKiBtZXNz
YWdlKSAKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU1lc3NhZ2UobWVzc2FnZSkpIHsKKyAg
ICAgICAgICAgIG1lc3NhZ2UtPm5leHQgPSBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKyAgICAgICAg
ICAgIG1fZnJlZUlubGluZU1lc3NhZ2VzID0gbWVzc2FnZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICB9CisKKyAgICBQbHVnaW5WaWV3R3RrKiBtX3Bs
dWdpblZpZXc7CisgICAgUGx1Z2luTWVzc2FnZSogbV9iYWNrOworICAgIFBsdWdpbk1lc3NhZ2Uq
IG1fZnJvbnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IE51bUlubGluZU1lc3NhZ2VzID0gNDsK
KyAgICBQbHVnaW5NZXNzYWdlIG1faW5saW5lTWVzc2FnZXNbTnVtSW5saW5lTWVzc2FnZXNdOwor
ICAgIFBsdWdpbk1lc3NhZ2UqIG1fZnJlZUlubGluZU1lc3NhZ2VzOworCisgICAgVGltZXI8UGx1
Z2luTWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVUaW1lcjsKK307CisKK3N0
YXRpYyBTdHJpbmcgc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKGNvbnN0IEtVUkwmIHVybCkK
K3sKKyAgICBpZiAoIXVybC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gVGhpcyByZXR1cm5zIGFuIHVu
ZXNjYXBlZCBzdHJpbmcKKyAgICByZXR1cm4gS1VSTDo6ZGVjb2RlX3N0cmluZyh1cmwuZGVwcmVj
YXRlZFN0cmluZygpLm1pZCgxMSkpOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVnaW5WaWV3R3Rr
OjpzX2N1cnJlbnRQbHVnaW5WaWV3ID0gMDsKKworY29uc3Qgd2NoYXJfdCoga1dlYlBsdWdpblZp
ZXdXaW5kb3dDbGFzc05hbWUgPSBMIldlYlBsdWdpblZpZXciOworY29uc3Qgd2NoYXJfdCoga1dl
YlBsdWdpblZpZXdQcm9wZXJ0eSA9IEwiV2ViUGx1Z2luVmlld1Byb3BlcnR5IjsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7
IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gv
Mi4wIjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAg
IGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+
aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dp
bmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1fY2xpcFJlY3Q7CisKKyAgICBt
X3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworICAgIG1fY2xp
cFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJlY3QubW92ZSgtbV93aW5kb3dS
ZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworfQorCitJbnRSZWN0IFBsdWdpblZpZXdHdGs6
OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK3sKKyAgICAvLyBTdGFydCBieSBjbGlwcGluZyB0byBv
dXIgYm91bmRzLgorICAgIEludFJlY3QgY2xpcFJlY3QobV93aW5kb3dSZWN0KTsKKyAgICAKKyAg
ICAvLyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhlIGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNs
b3NpbmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9l
bGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIEZyYW1lVmlldyogcGFy
ZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+dmlldygpOworICAgIGNsaXBSZWN0Lmlu
dGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVjdEZvckxheWVyKGxheWVyLCB0cnVlKSk7
CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCksIG1f
d2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCkgfTsKKyAgICBpZiAobV93aWRnZXQpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykKKyAgICAgICAgaWYgKCFtX25lZWRz
WEVtYmVkKSB7CisgICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTiht
X3dpZGdldCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAg
ICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2lu
ZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHJldHVy
biBjbGlwUmVjdDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJhbWVHZW9tZXRy
eSgpKQorICAgICAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisKKyAgICBpZiAo
cGFyZW50KCkpCisgICAgICAgIGluaXQoKTsKKworICAgIHVwZGF0ZVdpbmRvdygpOworICAgIHNl
dE5QV2luZG93UmVjdChyZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpnZW9tZXRyeUNo
YW5nZWQoKSBjb25zdAoreworICAgIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCk7CisgICAgdXBk
YXRlV2luZG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Rm9jdXMoKQoreworICAg
IC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1NldEZvY3VzKHdpbmRvdyk7CisK
KyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2hvdygp
Cit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1f
d2luZG93KQorICAgIC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX1NIT1dOQSk7CisKKyAgICBXaWRn
ZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoaWRlKCkKK3sKKyAgICBtX2lz
VmlzaWJsZSA9IGZhbHNlOworCisgICAgLy9pZiAoWElEIHdpbmRvdyA9IG1fd2luZG93KQorICAg
IC8vU2hvd1dpbmRvdyh3aW5kb3csIFNXX0hJREUpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc3RhdGljIEltYWdl
KiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2luSW1hZ2UpCisgICAgICAgIG51
bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibnVsbFBsdWdpbiIp
OworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRyeSgpLngoKSwgZnJhbWVHZW9t
ZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxsUGx1Z2luSW1hZ2UtPmhl
aWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0cnkoKS53aWR0aCgpIC0g
aW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNldCA9IChmcmFtZUdlb21ldHJ5
KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKworICAgIGltYWdlUmVjdC5t
b3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0LmludGVyc2VjdHMoaW1hZ2VS
ZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRl
eHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG51bGxQ
bHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAg
ICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIHBhaW50TWlz
c2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5lZWQgdG8gc3lu
dGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKwor
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorCisgICAgc2V0
TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVu
dDsKKworICAgIC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBwYXNzIGl0IG9uICovCisgICAg
LyoKKyAgICBucEV2ZW50LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7ICAgIAorCisgICAgaWYg
KGV2ZW50LT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQg
PSBXTV9LRVlET1dOOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNlIGlm
IChldmVudC0+dHlwZSgpID09IGtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9
IFdNX0tFWVVQOworICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAgICB9CisgICAg
Ki8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlm
ICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkK
KyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKKy8vZXh0ZXJuIGJvb2wg
aWdub3JlTmV4dFNldEN1cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVNb3VzZUV2
ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIC8q
IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAgICBJbnRQb2ludCBwID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KEludFBvaW50
KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgLyoKKyAgICBucEV2ZW50
LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBucEV2ZW50LndQYXJhbSA9
IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0g
fD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG5wRXZl
bnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vt
b3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8IAor
ICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93bigp
KQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9
IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8
PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8
PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KSB7CisgICAg
ICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAg
ICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworCisgICAgICAgICAg
ICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAgIG1fcGFyZW50RnJhbWUt
PmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVu
dCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9XTjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9u
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgKi8KKworICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0Q3Vy
c29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIu
Y3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3JlTmV4
dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIC8vaWdub3JlTmV4
dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVF
dmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93ZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAg
ICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVLZXli
b2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lk
Z2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250
ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7
CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVj
dC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAg
IG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50
b3AgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7Cisg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworCisgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pTOjpKU0xv
Y2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworCisgICAgICAgIGlm
ICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVCht
X3dpbmRvdyk7CisgICAgfQorfQorCitib29sIFBsdWdpblZpZXdHdGs6OnN0YXJ0KCkKK3sKKyAg
ICBpZiAobV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVCht
X3BsdWdpbik7CisgICAgQVNTRVJUKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5uZXdwKTsKKwor
ICAgIE5QRXJyb3IgbnBFcnI7CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZp
ZXcodGhpcyk7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCgo
TlBNSU1FVHlwZSltX21pbWVUeXBlLmRhdGEoKSwgbV9pbnN0YW5jZSwgbV9tb2RlLCBtX3BhcmFt
Q291bnQsIG1fcGFyYW1OYW1lcywgbV9wYXJhbVZhbHVlcywgTlVMTCk7CisgICAgfQorICAgIFBs
dWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KDApOworCisgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzU3RhcnRl
ZCA9IHRydWU7CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV9sb2FkTWFudWFsbHkp
IHsKKyAgICAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworICAgICAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOwor
ICAgICAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtX3VybCk7
CisgICAgICAgIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0b3AoKQoreworICAgIGlm
ICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBs
dWdpblN0cmVhbUd0az4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRy
PFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPjo6aXRlcmF0b3IgaXQgPSBzdHJl
YW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOwor
ICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBEZXN0
cm95IHRoZSBwbHVnaW4KKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2lu
c3RhbmNlLCAwKTsKKworICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3
KQoreworICAgIHNfY3VycmVudFBsdWdpblZpZXcgPSBwbHVnaW5WaWV3OworfQorCitQbHVnaW5W
aWV3R3RrKiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygpCit7CisgICAgcmV0dXJu
IHNfY3VycmVudFBsdWdpblZpZXc7Cit9CisKK3N0YXRpYyBjaGFyKiBjcmVhdGVVVEY4U3RyaW5n
KGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIENTdHJpbmcgY3N0ciA9IHN0ci51dGY4KCk7Cisg
ICAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjc3Ry
Lmxlbmd0aCgpICsgMSkpOworCisgICAgc3RybmNweShyZXN1bHQsIGNzdHIuZGF0YSgpLCBjc3Ry
Lmxlbmd0aCgpICsgMSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBm
cmVlU3RyaW5nQXJyYXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKQoreworICAgIGlm
ICghc3RyaW5nQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKKworICAg
IGZhc3RGcmVlKHN0cmluZ0FycmF5KTsKK30KKworc3RhdGljIGJvb2wgZ2V0U3RyaW5nKEtKU1By
b3h5KiBwcm94eSwgSlNWYWx1ZSogcmVzdWx0LCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAo
IXByb3h5IHx8ICFyZXN1bHQgfHwgcmVzdWx0LT5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSlNMb2NrIGxvY2s7CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm94
eS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBVU3RyaW5nIHVzdHJpbmcgPSBy
ZXN1bHQtPnRvU3RyaW5nKGV4ZWMpOworICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
CisgICAgc3RyaW5nID0gdXN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQorewor
ICAgIEtVUkwgcmVxdWVzdFVSTCA9IHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJj
ZVJlcXVlc3QoKS51cmwoKTsKKyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJpbmdJZkph
dmFTY3JpcHRVUkwocmVxdWVzdFVSTCk7CisKKyAgICBpZiAoanNTdHJpbmcuaXNOdWxsKCkpIHsK
KyAgICAgICAgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVybFNlbGVjdGVkKHJlcXVlc3QtPmZy
YW1lTG9hZFJlcXVlc3QoKSwgMCwgZmFsc2UsIHRydWUpOworCisgICAgICAgIC8vIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vNDgwNzQ2OT4gVGhpcyBzaG91bGQgYmUgc2VudCB3aGVuIHRoZSBkb2N1
bWVudCBoYXMgZmluaXNoZWQgbG9hZGluZworICAgICAgICBpZiAocmVxdWVzdC0+c2VuZE5vdGlm
aWNhdGlvbigpKSB7CisgICAgICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICAgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT51cmxub3RpZnko
bV9pbnN0YW5jZSwgcmVxdWVzdFVSTC5kZXByZWNhdGVkU3RyaW5nKCkudXRmOCgpLCBOUFJFU19E
T05FLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFRhcmdldGVkIEphdmFTY3JpcHQgcmVxdWVzdHMgYXJlIG9ubHkg
YWxsb3dlZCBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBwbHVnaW4K
KyAgICAvLyBhbmQgdGhpcyBoYXMgYmVlbiBtYWRlIHN1cmUgaW4gOjpsb2FkLgorICAgIEFTU0VS
VChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNFbXB0eSgpIHx8IG1f
cGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJh
bWVOYW1lKCkpID09IG1fcGFyZW50RnJhbWUpOworICAgIAorICAgIC8vIEV4ZWN1dGluZyBhIHNj
cmlwdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlc3Ryb3llZCwgc28gd2Uga2Vl
cCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGZyYW1lLgorICAgIFJlZlB0cjxGcmFtZT4gcGFy
ZW50RnJhbWUgPSAgbV9wYXJlbnRGcmFtZTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBtX3BhcmVu
dEZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChqc1N0cmluZy5kZXByZWNhdGVkU3RyaW5n
KCksIHRydWUpOworCisgICAgaWYgKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5h
bWUoKS5pc051bGwoKSkgeworICAgICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOworCisgICAgICAg
IGlmICghZ2V0U3RyaW5nKHBhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLCByZXN1bHQsIHJlc3Vs
dFN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1N0cmluZyBjc3RyID0g
cmVzdWx0U3RyaW5nLnV0ZjgoKTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gc3Ry
ZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBwYXJlbnRGcmFtZS5nZXQoKSwgcmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LT5zZW5kTm90
aWZpY2F0aW9uKCksIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIG1fc3RyZWFtcy5h
ZGQoc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0
VVJMLCBjc3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVy
RmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9
PSAmbV9yZXF1ZXN0VGltZXIpOworICAgIEFTU0VSVChtX3JlcXVlc3RzLnNpemUoKSA+IDApOwor
CisgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG1fcmVxdWVzdHNbMF07CisgICAgbV9y
ZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBi
ZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bworICAgIC8vIHBl
cmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAg
ICBpZiAobV9yZXF1ZXN0cy5zaXplKCkgPiAwKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFy
dE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkK
K3sKKyAgICBtX3JlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3JlcXVlc3RUaW1lci5z
dGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bG9hZChjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24s
IHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7CisKKyAgICBLVVJMIHVybCA9
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgCisgICAgaWYg
KHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1VSTDsKKworICAg
IFN0cmluZyB0YXJnZXQgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOworCisgICAgLy8g
ZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFy
dCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxheWVkIHVubGVzcyB0
aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCisgICAgaWYgKG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpICE9IG1fcGFyZW50RnJhbWUt
PmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmCisgICAgICAgICh0YXJnZXQuaXNO
dWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRG
cmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgU3RyaW5n
IGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7CisgICAgaWYgKCFq
c1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3BhcmVu
dEZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+
aXNKYXZhU2NyaXB0RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4K
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICB9IGVsc2Ug
aWYgKHRhcmdldC5pc051bGwoKSAmJiBtX21vZGUgPT0gTlBfRlVMTCkgeworICAgICAgICAgICAg
Ly8gRG9uJ3QgYWxsb3cgYSBKYXZhU2NyaXB0IHJlcXVlc3QgZnJvbSBhIHN0YW5kYWxvbmUgcGx1
Zy1pbiB0aGF0IGlzIHNlbGYtdGFyZ2V0dGVkCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoaXMg
Y2FuIGNhdXNlIHRoZSB1c2VyIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBibGFuayBwYWdlICgzNDI0
MDM5KS4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSB8fCAhdGFyZ2V0LmlzTnVsbCgp
KSB7CisgICAgICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgJiYgIXRhcmdldC5pc051bGwoKSAm
JiBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1lKSB7
CisgICAgICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyByZXF1
ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluLgor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKworICAg
ICAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbmV3IFBsdWdpblJlcXVlc3RHdGsoZnJh
bWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7CisgICAgICAgIHNj
aGVkdWxlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBQbHVnaW5TdHJl
YW1HdGsqIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgbV9wYXJlbnRGcmFtZSwg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2VuZE5vdGlmaWNhdGlvbiwgbm90
aWZ5RGF0YSk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKworICAgICAgICBzdHJl
YW0tPnN0YXJ0KCk7CisgICAgfQorCisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitz
dGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0
aXZlVVJMU3RyaW5nKQoreworICAgIERlcHJlY2F0ZWRTdHJpbmcgdXJsU3RyaW5nID0gRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbUxhdGluMShyZWxhdGl2ZVVSTFN0cmluZyk7CisKKyAgICAvLyBTdHJp
cCByZXR1cm4gY2hhcmFjdGVycworICAgIHVybFN0cmluZy5yZXBsYWNlKCdcbicsICIiKTsKKyAg
ICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisKKyAgICByZXR1cm4gS1VSTChiYXNlVVJM
LCB1cmxTdHJpbmcpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTE5vdGlmeShj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sK
KyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisgICAg
cmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0YSk7Cit9CisKK05Q
RXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciog
dGFyZ2V0KQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAg
IGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJs
KSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFy
PiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0g
PT0gJ1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtM
aW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVz
ID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAg
ICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChi
eXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0
dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0
ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBp
ZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAg
ICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3
KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChi
eXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAg
IC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAg
ICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFy
KiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRU
UCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVu
Zm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdv
cnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBi
b3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8v
IHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAg
ICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBm
b3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVy
bWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVy
biBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAg
Ly8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAv
LyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0
YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJv
b2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAg
VUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49
ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b3VwcGVyKG5hbWVbaV0p
OworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdB
JyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b2xvd2VyKG5hbWVbaV0pOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gbmFtZVtpXTsKKworICAgICAgICBpZiAobmFt
ZVtpXSA9PSAnLScpCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IGZhbHNlOworCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGNv
bnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3Qg
Y2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGVvbDsKKyAgICBT
dHJpbmcgbGFzdEtleTsKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKworICAgIC8v
IExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIsIG9yIHdlIGNhbid0
IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCisgICAgd2hpbGUgKChlb2wgPSBmaW5kRU9MKGJ5
dGVzLCBsZW5ndGgpKSkgeworICAgICAgICBjb25zdCBjaGFyKiBsaW5lID0gYnl0ZXM7CisgICAg
ICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBN
b3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0b3IgYXMgcmV0dXJu
ZWQgYnkgZmluZEVPTC4KKyAgICAgICAgYnl0ZXMgPSBlb2wgKyAxOworICAgICAgICBpZiAoKCpl
b2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkKKyAgICAgICAgICAgIGJ5dGVzKys7IC8v
IFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4gYSBzcGFubmluZyBDUkxGLgorCisgICAg
ICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVMZW5ndGggPT0g
MCkKKyAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGhl
YWRlcgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKCpsaW5lID09ICcgJyB8
fCAqbGluZSA9PSAnXHQnKSB7CisgICAgICAgICAgICAvLyBDb250aW51YXRpb24gb2YgdGhlIHBy
ZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgaWYgKGxhc3RLZXkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgor
ICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxh
c3RLZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZSA9IERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9
IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAg
ICAgICAgICAgLy8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNv
bG9uID09IGVvbCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3Jl
IGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJG
aWVsZE5hbWUoRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBjb2xvbiAtIGxpbmUp
KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29sb24g
PT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9t
TGF0aW4xKGNvbG9uLCBlb2wgLSBjb2xvbik7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgb2xk
VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIGlmICgh
b2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9s
ZFZhbHVlOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKKyAgICAgICAgICAgICAg
ICAgICAgdG1wICs9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RL
ZXksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBoZWFkZXJGaWVsZHM7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6aGFuZGxlUG9zdChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlv
biwgYm9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQor
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZyYW1lTG9hZFJlcXVl
c3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwor
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAg
U3RyaW5nIGZpbGVuYW1lID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShidWYsIGxlbik7
CisKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAg
ICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAgICAgICAvLyBHZXQg
ZmlsZSBpbmZvCisgICAgICAgIGlmICghZ19maWxlX3Rlc3QgKChmaWxlbmFtZS51dGY4KCkpLmRh
dGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVH
VUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJLy9G
SVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRvIGJ1ZmZlcgorICAgICAgICBGSUxFKiBmaWxl
SGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAiciIpOworICAgICAgICAK
KyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9GSUxFX05PVF9GT1VORDsKKworICAgICAgICAvL2J1ZmZlci5yZXNpemUoKTsKKworICAgICAg
ICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7
CisKKyAgICAgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisgICAgICAgIGlmIChieXRlc1JlYWQg
PD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCXJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZmZXIucmVzaXplKGxl
bik7CisgICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7CisgICAgfQorCisg
ICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0YSgpOworICAgIGludCBwb3N0RGF0
YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisgICAgCisgICAgaWYgKGFsbG93SGVhZGVycykgewor
ICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBw
b3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGlu
ZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2Yg
dGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAg
ICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRp
b24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgp
IC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtl
IHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAg
ICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ug
d2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRy
dW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAg
IFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgi
KTsKKworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChp
bnQpZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29u
dGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwor
ICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmll
bGRzKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5
KFBhc3NSZWZQdHI8Rm9ybURhdGE+KG5ldyBGb3JtRGF0YShwb3N0RGF0YSwgcG9zdERhdGFMZW5n
dGgpKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAg
IHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkxOb3RpZnkoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
TlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIGhhbmRsZVBvc3Qo
dXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhLCB0cnVlLCB0cnVlKTsKK30K
KworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQor
eworICAgIC8vIEFzIGRvY3VtZW50ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0byBiZSBzcGVjaWZp
ZWQgdmlhIE5QUF9Qb3N0VVJMIHdoZW4gdXNpbmcgYSBmaWxlLgorICAgIHJldHVybiBoYW5kbGVQ
b3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZpbGUpOworfQorCitO
UEVycm9yIFBsdWdpblZpZXdHdGs6Om5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNo
YXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQor
CitpbnQzMiBQbHVnaW5WaWV3R3RrOjp3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4s
IHZvaWQqIGJ1ZmZlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9y
dGVkCisgICAgcmV0dXJuIC0xOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmRlc3Ryb3lT
dHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIFBsdWdpblN0
cmVhbUd0ayogYnJvd3NlclN0cmVhbSA9IHN0YXRpY19jYXN0PFBsdWdpblN0cmVhbUd0ayo+KHN0
cmVhbS0+bmRhdGEpOworCisgICAgaWYgKCFzdHJlYW0gfHwgUGx1Z2luU3RyZWFtR3RrOjpvd25l
ckZvclN0cmVhbShzdHJlYW0pICE9IG1faW5zdGFuY2UpCisgICAgICAgIHJldHVybiBOUEVSUl9J
TlZBTElEX0lOU1RBTkNFX0VSUk9SOworCisgICAgYnJvd3NlclN0cmVhbS0+Y2FuY2VsQW5kRGVz
dHJveVN0cmVhbShyZWFzb24pOworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworY29u
c3QgY2hhciogUGx1Z2luVmlld0d0azo6dXNlckFnZW50KCkKK3sKKyAgICBpZiAobV9xdWlya3Mg
JiBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkKKyAgICAgICAgcmV0dXJuIE1vemls
bGFVc2VyQWdlbnQ7CisKKyAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIG1f
dXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX3VybCkudXRm
OCgpOworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgU3RyaW5nIHMgPSBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKG1lc3NhZ2UpOworCisgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX3BhcmVudEZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRTdGF0
dXNiYXJUZXh0KG1fcGFyZW50RnJhbWUsIHMpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmlu
ZWQgKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDog
eworICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgKih2
b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTiht
X3dpZGdldCktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2Fz
ZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICooKHVuc2ln
bmVkIGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxv
bmcgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsK
KyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJMRV9Q
TFVHSU5TKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7Cisj
ZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOworI2Vu
ZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHdp
bmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7
CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5l
ZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3Bs
dWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3Qp
CisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsK
KworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYg
PSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1l
bnROUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9
IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKwor
ICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBh
cyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2lu
L25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAg
ICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisg
ICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBs
dWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAg
ICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyAgICAgICAg
ICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKEdUS19XSURHRVQoY29udGFpbmlu
Z1dpbmRvdygpKS0+d2luZG93KTsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFs
dWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFy
aWFibGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAg
IG1faXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBt
X2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6aW52YWxpZGF0ZVRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRp
bWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9pbnZhbGlkYXRlVGltZXIpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW52YWxpZFJlY3RzLnNpemUoKTsgaSsrKQorICAg
ICAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KG1faW52YWxpZFJlY3RzW2ldKTsKKyAgICBtX2lu
dmFsaWRSZWN0cy5jbGVhcigpOworfQorCisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0
ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVm
dCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJl
Y3QtPnRvcCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIC8qIEZJWE1FIC0g
SW52YWxpZGF0ZSB0aGUgcmVjdGFuZ2xlCisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3Qocik7Cisg
ICAgICAgIEludmFsaWRhdGVSZWN0KG1fd2luZG93LCAmaW52YWxpZFJlY3QsIEZBTFNFKTsKKyAg
ICAgICAgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9xdWlya3MgJiBQbHVnaW5RdWly
a1Rocm90dGxlSW52YWxpZGF0ZSkgeworICAgICAgICAgICAgbV9pbnZhbGlkUmVjdHMuYXBwZW5k
KHIpOworICAgICAgICAgICAgaWYgKCFtX2ludmFsaWRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICAgICAgICAgIG1faW52YWxpZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgwLjAwMSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdp
b24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyog
RklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWdpb24KKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0
UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICAq
LworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICAvKiBGSVhN
RSAtIEZvcmNlIGEgcmVkcmF3CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgOjpVcGRh
dGVXaW5kb3cobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAgOjpVcGRhdGVXaW5kb3coY29u
dGFpbmluZ1dpbmRvdygpKTsKKyAgICAqLworfQorCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSog
UGx1Z2luVmlld0d0azo6YmluZGluZ0luc3RhbmNlKCkKK3sKKyAgICBOUE9iamVjdCogb2JqZWN0
ID0gMDsKKworICAgIGlmICghbV9wbHVnaW4gfHwgIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5n
ZXR2YWx1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIHsK
KyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAg
IG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5Q
UFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZvYmplY3QpOworICAgIH0KKworICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUiB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFJlZlB0cjxLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0PiByb290ID0gbV9wYXJlbnRGcmFt
ZS0+Y3JlYXRlUm9vdE9iamVjdCh0aGlzLCBtX3BhcmVudEZyYW1lLT5zY3JpcHRQcm94eSgpLT5n
bG9iYWxPYmplY3QoKSk7CisgICAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKmluc3RhbmNlID0g
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OmNyZWF0ZUJpbmRpbmdGb3JMYW5ndWFnZUluc3RhbmNl
KEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpDTGFuZ3VhZ2UsIG9iamVjdCwgcm9vdC5yZWxlYXNl
KCkpOworCisgICAgX05QTl9SZWxlYXNlT2JqZWN0KG9iamVjdCk7CisKKyAgICByZXR1cm4gaW5z
dGFuY2U7Cit9CisKK1BsdWdpblZpZXdHdGs6On5QbHVnaW5WaWV3R3RrKCkKK3sKKyAgICBzdG9w
KCk7CisKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5n
QXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheSht
X3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQpOworCisgICAgaWYgKCFtX25lZWRzWEVtYmVkICYm
IEdUS19JU19XSURHRVQobV93aWRnZXQpKQorICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV93
aWRnZXQpOworICAgIG1fd2luZG93ID0gMDsKKyAgICBzZXRHdGtXaWRnZXQoTlVMTCk7CisKKyAg
ICBtX3BhcmVudEZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKwor
ICAgIGlmIChtX3BsdWdpbiAmJiAhKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1
Z2luKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0pCit7CisgICAgQVNT
RVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUo
c3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkZXRlcm1pbmVRdWlya3MoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVz
dHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAor
ICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7Cisg
ICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50OworICAg
ICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZTsKKyAgICAgICAg
bV9xdWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlczsKKyAg
ICB9CisKKyAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBO
UFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8g
Y2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisg
ICAgaWYgKG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2lu
LT5uYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgeworICAgICAgICBtX3F1aXJrcyB8
PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgICAgIC8vIFdpbmRv
d2xlc3MgbW9kZSBkb2VzIG5vdCB3b3JrIGF0IGFsbCB3aXRoIHRoZSBXTVAgcGx1Z2luIHNvIGp1
c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVyIAorICAgICAgICAvLyBhbmQgZG9uJ3QgcGFzcyBpdCB0
byB0aGUgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtSZW1vdmVXaW5k
b3dsZXNzVmlkZW9QYXJhbTsKKyAgICB9CisKKyAgICAvLyBUaGUgRGl2WCBwbHVnaW4gc2V0cyBp
dHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVz
IGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3
IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtaW1lVHlwZSA9PSAidmlkZW8vZGl2eCIpCisg
ICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7CisK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIg
TlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2Jq
ZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUg
d2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywg
d2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4g
dGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxp
Z2h0IikKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luOwor
CisgICAgLy8gUHJldmVudCB0aGUgUmVhbCBwbHVnaW4gZnJvbSBjYWxsaW5nIHRoZSBXaW5kb3cg
UHJvYyByZWN1cnNpdmVseSwgY2F1c2luZyB0aGUgc3RhY2sgdG8gb3ZlcmZsb3cuCisgICAgaWYg
KG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4iKQorICAgICAgICBtX3F1
aXJrcyB8PSBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZl
bHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyYW1ldGVycyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQor
eworICAgIEFTU0VSVChwYXJhbU5hbWVzLnNpemUoKSA9PSBwYXJhbVZhbHVlcy5zaXplKCkpOwor
CisgICAgdW5zaWduZWQgc2l6ZSA9IHBhcmFtTmFtZXMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHBh
cmFtQ291bnQgPSAwOworCisgICAgbV9wYXJhbU5hbWVzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNpemUpKTsKKyAgICBtX3BhcmFtVmFsdWVz
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGZhc3RNYWxsb2Moc2l6ZW9mKGNoYXIqKSAqIHNp
emUpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAg
ICAgaWYgKChtX3F1aXJrcyAmIFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0p
ICYmIGVxdWFsSWdub3JpbmdDYXNlKHBhcmFtTmFtZXNbaV0sICJ3aW5kb3dsZXNzdmlkZW8iKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fcGFyYW1OYW1lc1twYXJhbUNvdW50
XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFyYW1OYW1lc1tpXSk7CisgICAgICAgIG1fcGFyYW1WYWx1
ZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtVmFsdWVzW2ldKTsKKworICAg
ICAgICBwYXJhbUNvdW50Kys7CisgICAgfQorCisgICAgbV9wYXJhbUNvdW50ID0gcGFyYW1Db3Vu
dDsKK30KKworUGx1Z2luVmlld0d0azo6UGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUs
IGNvbnN0IEludFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1l
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBib29sIGxvYWRNYW51YWxseSkKKyAgICA6IG1fcGx1Z2luKHBsdWdpbikKKyAgICAsIG1f
ZWxlbWVudChlbGVtZW50KQorICAgICwgbV9wYXJlbnRGcmFtZShwYXJlbnRGcmFtZSkKKyAgICAs
IG1faXNTdGFydGVkKGZhbHNlKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9iYXNlVVJMKG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTChtX3BhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5iYXNlVVJMKCkpKQorICAgICwgbV9zdGF0dXMoUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5KQorICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJlBsdWdpblZpZXdHdGs6OnJlcXVl
c3RUaW1lckZpcmVkKQorICAgICwgbV9pbnZhbGlkYXRlVGltZXIodGhpcywgJlBsdWdpblZpZXdH
dGs6OmludmFsaWRhdGVUaW1lckZpcmVkKQorICAgICwgbV9wYXJhbU5hbWVzKDApCisgICAgLCBt
X3BhcmFtVmFsdWVzKDApCisgICAgLCBtX3F1aXJrcygwKQorICAgICwgbV9pc1dpbmRvd2VkKHRy
dWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShmYWxz
ZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV93aW5kb3coMCkKKyAg
ICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYyhmYWxz
ZSkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3Ry
ZWFtKDApCisgICAgLCBtX3dpZGdldCgwKQorICAgICwgbV9uZWVkc1hFbWJlZChmYWxzZSkKK3sK
KyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90RmluZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5zdGFuY2Ug
PSAmbV9pbnN0YW5jZVN0cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CisKKyAg
ICBtX21pbWVUeXBlID0gbWltZVR5cGUudXRmOCgpOworICAgIGRldGVybWluZVF1aXJrcyhtaW1l
VHlwZSk7CisKKyAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKwor
ICAgIG1fbW9kZSA9IG1fbG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVEOworCisgICAg
cmVzaXplKHNpemUpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmluaXQoKQoreworICAgIGlm
IChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZUluaXRpYWxp
emVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3Rh
dHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0g
MDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFydCgpKSB7CisgICAgICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAg
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2lu
TmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgaWYgKG1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgbV93aWRnZXQgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBn
dGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3co
KSwgbV93aWRnZXQpOworICAgICAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3dpZGdldCA9IGd0a194dGJpbl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZy
YW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgTlVMTCk7CisjZWxzZQor
ICAgIG1fd2lkZ2V0ID0gZ2RrX3NvY2tldF9uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZCht
X3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSwgbV93aWRnZXQpOworICAg
IHNldEd0a1dpZGdldChtX3dpZGdldCk7CisjZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1f
d2lkZ2V0KTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkKEdU
S19ESVNBQkxFX1BMVUdJTlMpCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBn
X25ldzAoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7
CisKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19X
SU5ET1dfWERJU1BMQVkobV93aWRnZXQtPndpbmRvdyk7CisgICAgICAgIHdzLT52aXN1YWwgPSBH
REtfVklTVUFMX1hWSVNVQUwoZ2RrX3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53aW5kb3cp
KTsKKyAgICAgICAgd3MtPmRlcHRoID0gZ2RrX3dpbmRvd19nZXRfdmlzdWFsKG1fd2lkZ2V0LT53
aW5kb3cpLT5kZXB0aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hDT0xP
Uk1BUChnZGtfd2luZG93X2dldF9jb2xvcm1hcChtX3dpZGdldC0+d2luZG93KSk7CisgICAgICAg
IG1fd2luZG93ID0gR0RLX1dJTkRPV19YV0lORE9XKG1fd2lkZ2V0LT53aW5kb3cpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNw
bGF5OworICAgICAgICB3cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQu
eHR2aXN1YWw7CisgICAgICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xp
ZW50Lnh0ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCkt
Pnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisgICAgICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lk
Z2V0KS0+eHR3aW5kb3c7CisKKyAgICAgICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7CisgICAgfQor
CisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9X
SU5HX1dJTjMyCisgICAgbV93aW5kb3cgPSBHREtfV0lORE9XX0hXTkQobV93aWRnZXQtPndpbmRv
dyk7CisjZW5kaWYKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRv
dy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9
ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUg
PSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOwor
ICAgIH0KKworICAgIGlmICghKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2lu
ZG93Q2FsbCkpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisg
ICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIEFTU0VSVCghbV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51
YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIG1fcGFy
ZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCksIGZh
bHNlLCAwKTsKKyAgICBtX21hbnVhbFN0cmVhbS0+c2V0TG9hZE1hbnVhbGx5KHRydWUpOworCisg
ICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworICAgIAorICAgIG1fbWFu
dWFsU3RyZWFtLT5kaWRSZWNlaXZlRGF0YSgwLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0
cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkRmluaXNoTG9hZGluZygwKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQor
eworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlk
RmFpbCgwLCBlcnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luVmlld0d0a19ICisjZGVmaW5lIFBsdWdpblZp
ZXdHdGtfSAorCisjaW5jbHVkZSA8Z3RrL2d0a3dpZGdldC5oPgorI2luY2x1ZGUgIlBsdWdpblBh
Y2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRn
ZXQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIElu
c3RhbmNlOworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1l
bnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAg
Y2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtV
Ukw7CisgICAgY2xhc3MgUGx1Z2luTWVzc2FnZVRocm90dGxlckd0azsKKyAgICBjbGFzcyBQbHVn
aW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblJlcXVlc3RHdGs7CisgICAgY2xhc3MgUGx1
Z2luU3RyZWFtR3RrOworICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CisgICAgY2xhc3MgUmVzb3Vy
Y2VSZXNwb25zZTsKKyAgICAKKyAgICBlbnVtIFBsdWdpblF1aXJrcyB7CisgICAgICAgIFBsdWdp
blF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAorICAgICAgICBQbHVnaW5RdWly
a0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAorICAgICAgICBQbHVnaW5RdWlya1Ro
cm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCisgICAgICAgIFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVX
TVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCisgICAgICAgIFBsdWdpblF1aXJrRG9udFVu
bG9hZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NG
b3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2CisgICAgfTsKKworICAgIGVudW0gUGx1
Z2luU3RhdHVzIHsKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKKyAgICAg
ICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblZpZXdHdGsgOiBwdWJs
aWMgV2lkZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBh
cmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld0d0aygpOworCisg
ICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2lu
LmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFu
Y2U7IH0KKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7Cisg
ICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2luVmlldygpOworCisgICAg
ICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAg
ICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAg
ICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAg
ICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOwor
ICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQq
IG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZp
bGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNo
YXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMiB3cml0ZShOUFN0
cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3Ig
ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOworICAgICAg
ICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hh
ciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVj
dCopOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworICAgICAgICB2
b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdp
blN0cmVhbUd0ayopOworCisgICAgICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmly
dHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRGb2N1cygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgaGlkZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJl
Y3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworCisgICAgICAgIGds
b25nIHduZFByb2MoWElEIGhXbmQsIGd1aW50IG1lc3NhZ2UsIGd1aW50IHdQYXJhbSwgZ2xvbmcg
bFBhcmFtKTsKKworICAgICAgICAvLyBVc2VkIGZvciBtYW51YWwgbG9hZGluZworICAgICAgICB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAg
IHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgZGlk
RmluaXNoTG9hZGluZygpOworICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYpOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
KTsKKyAgICAgICAgdm9pZCBpbml0KCk7CisgICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAg
dm9pZCBzdG9wKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJlbnRQbHVnaW5WaWV3KFBs
dWdpblZpZXdHdGsqKTsKKyAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBO
UEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBi
b29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAgICAgICAgUmVmUHRy
PFBsdWdpblBhY2thZ2VHdGs+IG1fcGx1Z2luOworICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7
CisgICAgICAgIEZyYW1lKiBtX3BhcmVudEZyYW1lOworICAgICAgICBib29sIG1faXNTdGFydGVk
OworICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBLVVJMIG1fYmFzZVVSTDsKKyAgICAgICAg
UGx1Z2luU3RhdHVzIG1fc3RhdHVzOworICAgICAgICBWZWN0b3I8SW50UmVjdD4gbV9pbnZhbGlk
UmVjdHM7CisKKyAgICAgICAgdm9pZCBwZXJmb3JtUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7
CisgICAgICAgIHZvaWQgc2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAg
ICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiopOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAg
ICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1fcmVxdWVzdFRpbWVyOworICAgICAgICBUaW1lcjxQ
bHVnaW5WaWV3R3RrPiBtX2ludmFsaWRhdGVUaW1lcjsKKworICAgICAgICBPd25QdHI8UGx1Z2lu
TWVzc2FnZVRocm90dGxlckd0az4gbV9tZXNzYWdlVGhyb3R0bGVyOworCisgICAgICAgIHZvaWQg
dXBkYXRlV2luZG93KCkgY29uc3Q7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZvaWQgaGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZvaWQgaGFuZGxlTW91c2VF
dmVudChNb3VzZUV2ZW50Kik7CisKKyAgICAgICAgaW50IG1fbW9kZTsKKyAgICAgICAgaW50IG1f
cGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKKyAgICAgICAgY2hhcioq
IG1fcGFyYW1WYWx1ZXM7CisKKyAgICAgICAgQ1N0cmluZyBtX21pbWVUeXBlOworICAgICAgICBD
U3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICBO
UFBfdCBtX2luc3RhbmNlU3RydWN0OworICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93OworCisg
ICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbUd0az4gPiBtX3N0cmVhbXM7CisgICAg
ICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0R3RrKj4gbV9yZXF1ZXN0czsKKworICAgICAgICBpbnQg
bV9xdWlya3M7CisgICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOworICAgICAgICBib29sIG1faXNU
cmFuc3BhcmVudDsKKyAgICAgICAgYm9vbCBtX2lzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2hh
dmVJbml0aWFsaXplZDsKKworICAgICAgICBYSUQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBw
bHVnLWlucworICAgICAgICBtdXRhYmxlIEludFJlY3QgbV9jbGlwUmVjdDsgLy8gVGhlIGNsaXAg
cmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KKyAgICAgICAgbXV0YWJsZSBJbnRS
ZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdpbmRvdyByZWN0LgorCisgICAgICAgIHVuc2lnbmVk
IG1fbGFzdE1lc3NhZ2U7CisgICAgICAgIGJvb2wgbV9pc0NhbGxpbmdQbHVnaW5XbmRQcm9jOwor
CisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IG1fbWFudWFsU3RyZWFtOworCisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBz
X2N1cnJlbnRQbHVnaW5WaWV3OworCisgICAgICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAg
ICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBs
dWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJu
cHJ1bnRpbWVfaW50ZXJuYWwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRo
ZSBwbHVnaW4gdmlldyBpcyBhbHdheXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0
aW1lcywgcGx1Zy1pbnMgd2lsbCBjYWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisv
LyB3aXRoIGEgTlVMTCBpbnN0YW5jZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0
IHBsdWctaW4gdmlldyB0aGF0IG1hZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRs
eSwgdGhlIGN1cnJlbnQgcGx1Zy1pbiB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGlu
IFBsdWdpblZpZXdHdGs6OnN0YXJ0LgorLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5k
IEZsYXNoIGFuZCBTaG9ja3dhdmUuIFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBO
X1VzZXJhZ2VudCB3aXRoIGEgTlVMTCBpbnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoTlBQIGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAm
JiBpbnN0YW5jZS0+bmRhdGEpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
R3RrKj4oaW5zdGFuY2UtPm5kYXRhKTsKKyAgICByZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVu
dFBsdWdpblZpZXcoKTsKK30KKwordm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMiBzaXplKQorewor
ICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRy
KQoreworICAgIGZyZWUocHRyKTsKK30KKwordWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6
ZSkKK3sKKyAgICAvLyBEbyBub3RoaW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1Jl
bG9hZFBsdWdpbnMoTlBCb29sIHJlbG9hZFBhZ2VzKQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJl
bG9hZFBhZ2VzKTsKK30KKworTlBFcnJvciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVh
bSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCkKK3sKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAg
cmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmws
IHRhcmdldCwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQor
CitOUEVycm9yIE5QTl9Qb3N0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPnBvc3RVUkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxl
LCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNv
bnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFy
KiBidWYsIE5QQm9vbCBmaWxlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5wb3N0VVJMKHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05Q
RXJyb3IgTlBOX05ld1N0cmVhbShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsK
K30KKworaW50MzIgTlBOX1dyaXRlKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50
MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSktPndyaXRlKHN0cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5Q
Tl9EZXN0cm95U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24g
cmVhc29uKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5k
ZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJB
Z2VudChOUFAgaW5zdGFuY2UpCit7CisgICAgUGx1Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMg
Y2FsbCBOUE5fVXNlckFnZW50IHdpdGggYSBudWxsIGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRp
YWxpemUgZnVuY3Rpb24hCisgICAgIC8vIFdlJ2QgbmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFn
ZW50IHdpdGhvdXQgaGF2aW5nIGEgZnJhbWUgYXJvdW5kLgorICAgICBpZiAoIXZpZXcpCisgICAg
ICAgICByZXR1cm4gMDsKKyAKKyAgICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Cit9CisKK3Zv
aWQgTlBOX1N0YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAg
cGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2
b2lkIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3Qp
Cit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3Qo
aW52YWxpZFJlY3QpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5j
ZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVnaW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5Q
Tl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+Zm9yY2VSZWRyYXcoKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQ
IGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0
dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2
YWx1ZSk7Cit9CisKK05QRXJyb3IgTlBOX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPnNldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5Q
Tl9HZXRKYXZhRW52KCkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQor
Cit2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGluc3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9y
dGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
KE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpCit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1
cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlKQoreworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay94ZW1iZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRl
bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRh
YjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBC
TE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICog
VGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96
aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJB
TlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vu
c2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGlt
aXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2Rl
IGlzIHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVy
IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQ
TCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2Yg
dGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0
aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisg
KiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkg
dGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhl
IExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVN
QkVEIG1lc3NhZ2VzICovCisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAg
MAorI2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVN
QkVEX1dJTkRPV19ERUFDVElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZP
Q1VTICAgICAgICAgICAgMworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAg
IDQKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhF
TUJFRF9GT0NVU19ORVhUICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJF
ViAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAg
ICA4CisjZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBY
RU1CRURfTU9EQUxJVFlfT04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElU
WV9PRkYgICAgICAgICAgICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZp
bmUgWEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9H
VEtfVU5HUkFCX0tFWSAgICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9D
VVNfSU46ICovCisjZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2Rl
ZmluZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZP
Q1VTX0xBU1QgICAgICAgICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8K
KyNkZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luRGVidWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFBMVUdJTl9ERUJVR19IX18KKyNkZWZpbmUgUExVR0lOX0RF
QlVHX0hfXworCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKK3N0YXRpYyBjb25z
dCBjaGFyKiBlcnJvclN0cmluZ3NbXSA9IHsKKyAgICAiTm8gZXJyb3JzIG9jY3VycmVkLiIsIC8q
IE5QRVJSX05PX0VSUk9SICovCisgICAgIkVycm9yIHdpdGggbm8gc3BlY2lmaWMgZXJyb3IgY29k
ZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICovCisgICAgIkludmFsaWQgaW5z
dGFuY2UgcGFzc2VkIHRvIHRoZSBwbHVnLWluLiIsIC8qIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0Vf
RVJST1IgKi8KKyAgICAiRnVuY3Rpb24gdGFibGUgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElE
X0ZVTkNUQUJMRV9FUlJPUiAqLworICAgICJMb2FkaW5nIG9mIHBsdWctaW4gZmFpbGVkLiIsIC8q
IE5QRVJSX01PRFVMRV9MT0FEX0ZBSUxFRF9FUlJPUiAqLworICAgICJNZW1vcnkgYWxsb2NhdGlv
biBmYWlsZWQuIiwgLyogTlBFUlJfT1VUX09GX01FTU9SWV9FUlJPUiAqLworICAgICJQbHVnLWlu
IG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9JTlZBTElEX1BMVUdJTl9FUlJPUiAqLwor
ICAgICJQbHVnLWluIGRpcmVjdG9yeSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5W
QUxJRF9QTFVHSU5fRElSX0VSUk9SICovCisgICAgIlZlcnNpb25zIG9mIHBsdWctaW4gYW5kIENv
bW11bmljYXRvciBkbyBub3QgbWF0Y2guIiwgLyogTlBFUlJfSU5DT01QQVRJQkxFX1ZFUlNJT05f
RVJST1IgKi8KKyAgICAiUGFyYW1ldGVyIG1pc3Npbmcgb3IgaW52YWxpZC4iLCAvKiBOUEVSUl9J
TlZBTElEX1BBUkFNICovCisgICAgIlVSTCBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJf
SU5WQUxJRF9VUkwgKi8KKyAgICAiRmlsZSBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJf
RklMRV9OT1RfRk9VTkQgKi8KKyAgICAiU3RyZWFtIGNvbnRhaW5zIG5vIGRhdGEuIiwgLyogTlBF
UlJfTk9fREFUQSAqLworICAgICJTZWVrYWJsZSBzdHJlYW0gZXhwZWN0ZWQuIiwgLyogTlBFUlJf
U1RSRUFNX05PVF9TRUVLQUJMRSAqLworICAgICJVbmtub3duIGVycm9yIGNvZGUiCit9OworCisj
aWZuZGVmIE5ERUJVRworI2RlZmluZSBMT0dfTlBFUlJPUihlcnIpIGlmIChlcnIgIT0gTlBFUlJf
Tk9fRVJST1IpIF9SUFRGMihfQ1JUX1dBUk4sICIlczogJXNcbiIsIF9fRlVOQ1RJT05fXywgZXJy
b3JTdHJpbmdzW2Vycl0pCisjZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkgX1JQVEYxKF9D
UlRfV0FSTiwgIiVzOiBTdHJlYW0gZmFpbGVkIGR1ZSB0byBwcm9ibGVtcyB3aXRoIG5ldHdvcmss
IGRpc2sgSS9PLCBsYWNrIG9mIG1lbW9yeSwgb3Igb3RoZXIgcHJvYmxlbXMuXG4iLCBfX0ZVTkNU
SU9OX18pCisjZWxzZQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpICgodm9pZCkwKQor
I2RlZmluZSBMT0dfTlBFUlJPUihlcnIpICgodm9pZCkwKQorI2VuZGlmCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBfTlBGVU5DVElPTlNfSF8KKyNkZWZpbmUgX05QRlVOQ1RJT05T
X0hfCisKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChYUF9XSU4pCisjZGVmaW5l
IEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKF9fc3RkY2FsbCAqIF9uYW1l
KQorI2Vsc2UKKyNkZWZpbmUgRVhQT1JURURfQ0FMTEJBQ0soX3R5cGUsIF9uYW1lKSBfdHlwZSAo
KiBfbmFtZSkKKyNlbmRpZgorCit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMTm90aWZ5UHJv
Y1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywg
dm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTE5vdGlmeVBy
b2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3cs
IHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1JlcXVlc3RSZWFkUHJvY1B0cikoTlBTdHJlYW0q
IHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdlTGlzdCk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
TmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNo
YXIqIHdpbmRvdywgTlBTdHJlYW0qKiBzdHJlYW0pOwordHlwZWRlZiBpbnQzMiAoKk5QTl9Xcml0
ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lk
KiBidWZmZXIpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX0Rlc3Ryb3lTdHJlYW1Qcm9jUHRyKShO
UFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7Cit0eXBlZGVm
IHZvaWQgKCpOUE5fU3RhdHVzUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNz
YWdlKTsKK3R5cGVkZWYgY29uc3QgY2hhciooKk5QTl9Vc2VyQWdlbnRQcm9jUHRyKShOUFAgaW5z
dGFuY2UpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9NZW1BbGxvY1Byb2NQdHIpKHVpbnQzMiBzaXpl
KTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9NZW1GcmVlUHJvY1B0cikodm9pZCogcHRyKTsKK3R5cGVk
ZWYgdWludDMyICgqTlBOX01lbUZsdXNoUHJvY1B0cikodWludDMyIHNpemUpOwordHlwZWRlZiB2
b2lkICgqTlBOX1JlbG9hZFBsdWdpbnNQcm9jUHRyKShOUEJvb2wgcmVsb2FkUGFnZXMpOwordHlw
ZWRlZiBOUEVycm9yICgqTlBOX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9T
ZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQg
KnZhbHVlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVjdFByb2NQdHIpKE5QUCBp
bnN0YW5jZSwgTlBSZWN0ICpyZWN0KTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9JbnZhbGlkYXRlUmVn
aW9uUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiByZWdpb24pOwordHlwZWRlZiB2b2lk
ICgqTlBOX0ZvcmNlUmVkcmF3UHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29u
c3QgY2hhciogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWludDMy
IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7Cit0eXBlZGVmIHZvaWQqICgqTlBO
X0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2YVBl
ZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBOX1B1c2hQb3B1cHNF
bmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsKK3R5cGVk
ZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2Up
OworCit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIpIChOUFZh
cmlhbnQgKnZhcmlhbnQpOworCit0eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRTdHJpbmdJ
ZGVudGlmaWVyUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqbmFtZSk7Cit0eXBlZGVmIHZvaWQgKCpO
UE5fR2V0U3RyaW5nSWRlbnRpZmllcnNQcm9jUHRyKSAoY29uc3QgTlBVVEY4ICoqbmFtZXMsIGlu
dDMyX3QgbmFtZUNvdW50LCBOUElkZW50aWZpZXIgKmlkZW50aWZpZXJzKTsKK3R5cGVkZWYgTlBJ
ZGVudGlmaWVyICgqTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyKSAoaW50MzJfdCBpbnRpZCk7
Cit0eXBlZGVmIGludDMyX3QgKCpOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9jUHRyKSAoTlBJZGVu
dGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBib29sICgqTlBOX0lkZW50aWZpZXJJc1N0cmlu
Z1Byb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7Cit0eXBlZGVmIE5QVVRGOCAqKCpO
UE5fVVRGOEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsK
KwordHlwZWRlZiBOUE9iamVjdCogKCpOUE5fQ3JlYXRlT2JqZWN0UHJvY1B0cikgKE5QUCwgTlBD
bGFzcyAqYUNsYXNzKTsKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX1JldGFpbk9iamVjdFByb2NQ
dHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxlYXNlT2JqZWN0UHJv
Y1B0cikgKE5QT2JqZWN0ICpvYmopOwordHlwZWRlZiBib29sICgqTlBOX0ludm9rZVByb2NQdHIp
IChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSwgY29uc3Qg
TlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwor
dHlwZWRlZiBib29sICgqTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmpl
Y3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1bnNpZ25lZCBhcmdDb3VudCwgTlBWYXJp
YW50ICpyZXN1bHQpOwordHlwZWRlZiBib29sICgqTlBOX0V2YWx1YXRlUHJvY1B0cikgKE5QUCBu
cHAsIE5QT2JqZWN0ICpvYmosIE5QU3RyaW5nICpzY3JpcHQsIE5QVmFyaWFudCAqcmVzdWx0KTsK
K3R5cGVkZWYgYm9vbCAoKk5QTl9HZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVj
dCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgTlBWYXJpYW50ICpyZXN1bHQpOwor
dHlwZWRlZiBib29sICgqTlBOX1NldFByb3BlcnR5UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0
ICpvYmosIE5QSWRlbnRpZmllciAgcHJvcGVydHlOYW1lLCBjb25zdCBOUFZhcmlhbnQgKnZhbHVl
KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9IYXNQcm9wZXJ0eVByb2NQdHIpIChOUFAsIE5QT2JqZWN0
ICpucG9iaiwgTlBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5f
SGFzTWV0aG9kUHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpucG9iaiwgTlBJZGVudGlmaWVy
IG1ldGhvZE5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX1JlbW92ZVByb3BlcnR5UHJvY1B0cikg
KE5QUCBucHAsIE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwordHlw
ZWRlZiB2b2lkICgqTlBOX1NldEV4Y2VwdGlvblByb2NQdHIpIChOUE9iamVjdCAqb2JqLCBjb25z
dCBOUFVURjggKm1lc3NhZ2UpOwordHlwZWRlZiBib29sICgqTlBOX0VudW1lcmF0ZVByb2NQdHIp
IChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciAqKmlkZW50aWZpZXIsIHVp
bnQzMl90ICpjb3VudCk7CisKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdQcm9jUHRyKShOUE1J
TUVUeXBlIHBsdWdpblR5cGUsIE5QUCBpbnN0YW5jZSwgdWludDE2IG1vZGUsIGludDE2IGFyZ2Ms
IGNoYXIqIGFyZ25bXSwgY2hhciogYXJndltdLCBOUFNhdmVkRGF0YSogc2F2ZWQpOwordHlwZWRl
ZiBOUEVycm9yICgqTlBQX0Rlc3Ryb3lQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU2F2ZWREYXRh
Kiogc2F2ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfU2V0V2luZG93UHJvY1B0cikoTlBQIGlu
c3RhbmNlLCBOUFdpbmRvdyogd2luZG93KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9OZXdTdHJl
YW1Qcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgTlBTdHJlYW0qIHN0cmVh
bSwgTlBCb29sIHNlZWthYmxlLCB1aW50MTYqIHN0eXBlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5Q
UF9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBO
UFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgqTlBQX1N0cmVhbUFzRmlsZVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgY29uc3QgY2hhciogZm5hbWUpOwordHlw
ZWRlZiBpbnQzMiAoKk5QUF9Xcml0ZVJlYWR5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVh
bSogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFu
Y2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbiwgdm9pZCog
YnVmZmVyKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9QcmludFByb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBQcmludCogcGxhdGZvcm1QcmludCk7Cit0eXBlZGVmIGludDE2ICgqTlBQX0hhbmRsZUV2ZW50
UHJvY1B0cikoTlBQIGluc3RhbmNlLCB2b2lkKiBldmVudCk7Cit0eXBlZGVmIHZvaWQgKCpOUFBf
VVJMTm90aWZ5UHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIE5QUmVhc29u
IHJlYXNvbiwgdm9pZCogbm90aWZ5RGF0YSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfR2V0VmFs
dWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICpyZXRf
dmFsdWUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFZhbHVlUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqdmFsdWUpOwordHlwZWRlZiBFWFBPUlRF
RF9DQUxMQkFDSyh2b2lkLCBOUFBfU2h1dGRvd25Qcm9jUHRyKSh2b2lkKTsKKwordHlwZWRlZiB2
b2lkICooKk5QUF9HZXRKYXZhQ2xhc3NQcm9jUHRyKSh2b2lkKTsKK3R5cGVkZWYgdm9pZCogICBK
UklHbG9iYWxSZWY7IC8vbm90IHVzaW5nIHRoaXMgcmlnaHQgbm93CisKK3R5cGVkZWYgc3RydWN0
IF9OUE5ldHNjYXBlRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2ZXJzaW9u
OworICAgIAorICAgIE5QTl9HZXRVUkxQcm9jUHRyIGdldHVybDsKKyAgICBOUE5fUG9zdFVSTFBy
b2NQdHIgcG9zdHVybDsKKyAgICBOUE5fUmVxdWVzdFJlYWRQcm9jUHRyIHJlcXVlc3RyZWFkOwor
ICAgIE5QTl9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUE5fV3JpdGVQcm9jUHRy
IHdyaXRlOworICAgIE5QTl9EZXN0cm95U3RyZWFtUHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAg
IE5QTl9TdGF0dXNQcm9jUHRyIHN0YXR1czsKKyAgICBOUE5fVXNlckFnZW50UHJvY1B0ciB1YWdl
bnQ7CisgICAgTlBOX01lbUFsbG9jUHJvY1B0ciBtZW1hbGxvYzsKKyAgICBOUE5fTWVtRnJlZVBy
b2NQdHIgbWVtZnJlZTsKKyAgICBOUE5fTWVtRmx1c2hQcm9jUHRyIG1lbWZsdXNoOworICAgIE5Q
Tl9SZWxvYWRQbHVnaW5zUHJvY1B0ciByZWxvYWRwbHVnaW5zOworICAgIE5QTl9HZXRKYXZhRW52
UHJvY1B0ciBnZXRKYXZhRW52OworICAgIE5QTl9HZXRKYXZhUGVlclByb2NQdHIgZ2V0SmF2YVBl
ZXI7CisgICAgTlBOX0dldFVSTE5vdGlmeVByb2NQdHIgZ2V0dXJsbm90aWZ5OworICAgIE5QTl9Q
b3N0VVJMTm90aWZ5UHJvY1B0ciBwb3N0dXJsbm90aWZ5OworICAgIE5QTl9HZXRWYWx1ZVByb2NQ
dHIgZ2V0dmFsdWU7CisgICAgTlBOX1NldFZhbHVlUHJvY1B0ciBzZXR2YWx1ZTsKKyAgICBOUE5f
SW52YWxpZGF0ZVJlY3RQcm9jUHRyIGludmFsaWRhdGVyZWN0OworICAgIE5QTl9JbnZhbGlkYXRl
UmVnaW9uUHJvY1B0ciBpbnZhbGlkYXRlcmVnaW9uOworICAgIE5QTl9Gb3JjZVJlZHJhd1Byb2NQ
dHIgZm9yY2VyZWRyYXc7CisgICAgCisgICAgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJQcm9jUHRy
IGdldHN0cmluZ2lkZW50aWZpZXI7CisgICAgTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0
ciBnZXRzdHJpbmdpZGVudGlmaWVyczsKKyAgICBOUE5fR2V0SW50SWRlbnRpZmllclByb2NQdHIg
Z2V0aW50aWRlbnRpZmllcjsKKyAgICBOUE5fSWRlbnRpZmllcklzU3RyaW5nUHJvY1B0ciBpZGVu
dGlmaWVyaXNzdHJpbmc7CisgICAgTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIgdXRmOGZy
b21pZGVudGlmaWVyOworICAgIE5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIgaW50ZnJvbWlk
ZW50aWZpZXI7CisgICAgTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIgY3JlYXRlb2JqZWN0OworICAg
IE5QTl9SZXRhaW5PYmplY3RQcm9jUHRyIHJldGFpbm9iamVjdDsKKyAgICBOUE5fUmVsZWFzZU9i
amVjdFByb2NQdHIgcmVsZWFzZW9iamVjdDsKKyAgICBOUE5fSW52b2tlUHJvY1B0ciBpbnZva2U7
CisgICAgTlBOX0ludm9rZURlZmF1bHRQcm9jUHRyIGludm9rZURlZmF1bHQ7CisgICAgTlBOX0V2
YWx1YXRlUHJvY1B0ciBldmFsdWF0ZTsKKyAgICBOUE5fR2V0UHJvcGVydHlQcm9jUHRyIGdldHBy
b3BlcnR5OworICAgIE5QTl9TZXRQcm9wZXJ0eVByb2NQdHIgc2V0cHJvcGVydHk7CisgICAgTlBO
X1JlbW92ZVByb3BlcnR5UHJvY1B0ciByZW1vdmVwcm9wZXJ0eTsKKyAgICBOUE5fSGFzUHJvcGVy
dHlQcm9jUHRyIGhhc3Byb3BlcnR5OworICAgIE5QTl9IYXNNZXRob2RQcm9jUHRyIGhhc21ldGhv
ZDsKKyAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFzZXZhcmlhbnR2YWx1
ZTsKKyAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRpb247CisgICAgTlBOX1B1
c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNlbmFibGVkc3RhdGU7CisgICAg
TlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9wdXBzZW5hYmxlZHN0YXRlOwor
ICAgIE5QTl9FbnVtZXJhdGVQcm9jUHRyIGVudW1lcmF0ZTsKK30gTlBOZXRzY2FwZUZ1bmNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7CisgICAgdWludDE2IHNpemU7CisgICAg
dWludDE2IHZlcnNpb247CisgICAgTlBQX05ld1Byb2NQdHIgbmV3cDsKKyAgICBOUFBfRGVzdHJv
eVByb2NQdHIgZGVzdHJveTsKKyAgICBOUFBfU2V0V2luZG93UHJvY1B0ciBzZXR3aW5kb3c7Cisg
ICAgTlBQX05ld1N0cmVhbVByb2NQdHIgbmV3c3RyZWFtOworICAgIE5QUF9EZXN0cm95U3RyZWFt
UHJvY1B0ciBkZXN0cm95c3RyZWFtOworICAgIE5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyIGFzZmls
ZTsKKyAgICBOUFBfV3JpdGVSZWFkeVByb2NQdHIgd3JpdGVyZWFkeTsKKyAgICBOUFBfV3JpdGVQ
cm9jUHRyIHdyaXRlOworICAgIE5QUF9QcmludFByb2NQdHIgcHJpbnQ7CisgICAgTlBQX0hhbmRs
ZUV2ZW50UHJvY1B0ciBldmVudDsKKyAgICBOUFBfVVJMTm90aWZ5UHJvY1B0ciB1cmxub3RpZnk7
CisgICAgSlJJR2xvYmFsUmVmIGphdmFDbGFzczsKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIGdl
dHZhbHVlOworICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7Cit9IE5QUGx1Z2luRnVu
Y3M7CisKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfSW5pdGlhbGl6ZUZ1
bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsKK3R5cGVkZWYgRVhQT1JU
RURfQ0FMTEJBQ0soY29uc3QgY2hhciosIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIpKHZv
aWQpOworCisjaWYgZGVmaW5lZChYUF9NQUNPU1gpCit0eXBlZGVmIHZvaWQgICAgKCpCUF9DcmVh
dGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQpOwordHlwZWRlZiBOUEVy
cm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqLCBOUFBf
U2h1dGRvd25Qcm9jUHRyKik7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5k
aWYKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkzOSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2Rl
OiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRo
PTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgor
ICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBM
LworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL
SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsy
WHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3Bl
ciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICog
UG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAo
QykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJH
UEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3Ig
dGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgor
ICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2Ug
dGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5
IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRo
ZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisgCisvKgor
ICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1
c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisjaW5jbHVkZSAieGVt
YmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21haW4uaD4K
KyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+
CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAqLworI2lu
Y2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDEx
L1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9TdHJp
bmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZv
cm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLworI3Vu
ZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitzdGF0aWMg
dm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFz
cyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChHdGtYdEJp
biAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9yZWFsaXpl
ICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3Rr
X3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9p
ZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0
KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0a09iamVj
dCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsKK3N0YXRp
YyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZXIsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0YXRpYyB2
b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0
aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGllbnQpOwor
c3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1ZywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdz
KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRnZXQgdywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNs
aWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
RXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVk
X21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRp
YyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0IHcsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2lu
dGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1
c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRpYyB2b2lk
ICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBv
aW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlz
dGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgICAgICAg
c2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hhbmRsZXIg
ICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9mIFhFbWJl
ZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMgaW50ICAg
ICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9lcnJvcl9o
YW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAgICAgIHRy
YXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50X2Ns
YXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0gTlVMTDsK
K3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVh
biAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAgICAgICAg
ICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0X2V2ZW50
X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0g
MDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9vbGVhbgor
eHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAg
ICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtfVEhSRUFE
U19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RIUkVBRFNf
TEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RLX1RIUkVB
RFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdfSU9fSU4p
IHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgICBH
REtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7CisgIH0KKwor
ICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitzdGF0aWMg
Z2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAg
ICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFwcENvbnRl
eHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250
ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyogUHJvY2Vz
cyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24gdGhl
CisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2FsbAor
ICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVudHMu
ICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJlYWR5
IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBmb3IgKGk9
MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7Cisg
ICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RLX1RIUkVB
RFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3VyY2VGdW5j
cyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZlbnRfY2hl
Y2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVuYylOVUxM
LAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0
X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBE
aXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRzVG9Qcm9j
ZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBhYyA9IFh0
RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5lZWQgdG8g
cHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAgICAgb25l
IGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRoZSBv
dGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2ZW50
cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZlbnRzIHJp
Z2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAorICAg
ICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBwcm9j
ZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFwcFBl
bmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAgcmV0dXJu
IFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3Rh
dGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7CisgICAg
ICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7CisgICAgICAg
ICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBzaXplb2Yg
KEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0YmluX2Ns
YXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2luaXQsCisg
ICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMiAqLyBO
VUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAgICAgIHh0
YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0YmluX2luZm8p
OworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRi
aW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdldENsYXNz
ICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisKKyAgcGFy
ZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAgd2lkZ2V0
X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3MtPnJlYWxp
emUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtf
eHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xBU1MgKGts
YXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7Cit9CisK
K3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQoreworICB4dGJp
bi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxMOworICB4
dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0gMDsKK30K
Kworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkKK3sK
KyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAw
LCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRyeSBvZiB3
aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3JlYWxp
emUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKHdp
ZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNhY3VsYXRl
IHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0X2dlb21l
dHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBhbGxvY2F0
aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdfWFRCSU4K
KyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHksIHcsIGgp
OworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOwor
ICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAvKiB1c2Ug
R3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2NsYXNz
KS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXQg
Ki8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgIGd0a19z
b2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhlaWdodCwg
CisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3coeHRi
aW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAgLyogbm93
IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29ja2V0
LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54dHdp
bmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBh
cmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgZ3BvaW50
ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOworICB4dGJp
biA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4pCisgICAg
cmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sgPSBmOwor
CisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVudF93aW5k
b3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xpZW50
KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkpLAorICAg
ICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwKKyAgICAg
IGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRjbGllbnQu
eHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNhbid0IGdv
IGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSByZXR1cm5l
ZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1cm4gKEd0
a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydW5uaW5n
IHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3AgKi8KKyAg
aWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7CisgICAg
LyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBsb29wLgor
ICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBoYXMgYWxy
ZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3KCZ4dF9l
dmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZ3Ms
IEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJzZShncywg
VFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0KilOVUxM
KTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5
KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNl
bmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2ZW50X3Bv
bGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzID0g
MDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9jb250ZXh0
X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
X1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4gcG9sbCBh
bmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0KKyAgICAg
IGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVuY3Rpb24p
eHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICB4
dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KKyAgbnVt
X3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4tPnh0ZGlz
cGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0X3BhcmVu
dF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtfd2luZG93
X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOworICBpZiAo
dXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9kYXRh
KSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7Cit9
CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7CisKKyAg
aWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21vdmUgKEdU
S19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0YmluX3Jl
c2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdp
ZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFyZyBhcmdz
WzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0
YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWlnaHQpOwor
I2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRoICA9IHdp
ZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcworICBpZiAo
aGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3aWR0aCA9
IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOworICBYdFNl
dEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRiaW4tPnh0
Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2VuZCBhIHNp
emUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6ZSBjaGFu
Z2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkgPSB4dGJp
bi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2NhdGlvbi5o
ZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSh3aWRn
ZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJlYWxpemUg
KEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dpZGdldCAq
d2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fdW5yZWFs
aXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2lsbCBhbHJl
YWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RLX1hUQklO
KG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtfV0lER0VU
X1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURHRVRfUkVB
TElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4tPnh0Y2xp
ZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnVucmVh
bGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95IChHdGtP
YmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0
dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lT
X1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsKKworICBp
Zih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIgKi8K
KyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0YmluLT54
dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVzYWdlIGNv
dW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0LCByZW1v
dmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5sb29wICov
CisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAg
cHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxvb3BcbiIp
OworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5Db250ZXh0
KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUodGFnKTsK
KworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOworICAgICAg
eHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVDVF9DTEFT
UyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxvd2luZyBp
cyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lkZQorKi8K
KworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaW5pdCgg
WHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwg
CisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAgICAgICBp
bnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hhciAgICAg
ICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoKKyAgICog
SW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxM
OworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0ZGlzcGxh
eSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xpZW50LT54
dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgheHRfaXNf
aW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3RhcnRpbmcg
dXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgpOworICAg
IGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAoZmFs
bGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0LCBmYWxs
YmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0LCBnZGtf
Z2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyYXBw
ZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQorICAgICAg
eHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0g
eHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4dGNsaWVu
dC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAgID0geHRk
ZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8KK3N0YXRp
YyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisgICAgICAg
ICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAgIGludCBo
ZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQgICAgICAg
ICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBjaGlsZF93
aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklO
CisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9wX3dpZGdl
dCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+dG9wX3dp
ZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICovCisgIG4g
PSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZhbHVlcyh0
b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRlV2lkZ2V0
KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlV2lk
Z2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQs
IE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVp
Z2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOwor
ICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFsICk7IG4r
KzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRlcHRoICk7
IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54dGNvbG9y
bWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBuKys7
CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMoeHRjbGll
bnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9wX3dpZGdl
dC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRkZXJpZDsK
KworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6aW5nIHRo
ZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFJlZ2lz
dGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICBl
bWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxzZQorICBf
WHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93
aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOworCisgIC8q
IGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVudC0+eHRk
aXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAgICAgICAg
ICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRnZXQsIDAp
OworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNoaWxkX3dp
ZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAg
WHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAweDBG
RkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAor
ICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRs
ZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAKKyAgICAg
ICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNr
LCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2
ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAg
ICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKK30KKwor
c3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGllbnQgKQor
eworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3RlckRyYXdh
YmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVyV2luZG93
KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAg
ICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUgcXVldWUg
YmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cKKyAgICAg
b3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLworICBYU3lu
Yyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQt
PmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVXaWRnZXQo
eHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIAoreHRf
Y2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNsaWVudC0+
dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5jaGlsZF93
aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVu
dEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBYdERlc3Ry
b3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0
ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X3NldF9p
bmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNpZ25lZCBs
b25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHREaXNwbGF5
KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9IDA7ICAg
ICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0gZmxhZ3M7
CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3coeHRwbHVn
KSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAgICAgICAg
ICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg
Y2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFuZGxlX3hl
bWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZl
bnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICBz
d2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJFRF9FTUJF
RERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJVkFURToK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lO
RE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5E
T1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50
IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7Cisg
IGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRm
KCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAgICBicmVh
azsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAg
cHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2VuZGlmCisg
ICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9GT0NVU19P
VVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2ZW50LCAw
LCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSA9
PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYo
IlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3Vz
LnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2VuZGlmCisg
ICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisgICAgICB4
ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAg
ICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdl
dCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIAor
ICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAgICAgICAg
RmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7CisgICAgICBY
U3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAgIH0KKyAg
ICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVtYmVkIE1l
c3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVudF9oYW5k
bGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQorewor
ICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisgIHN3aXRj
aChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAgLyog
SGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2Fn
ZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4dHBsdWct
PmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hFTUJFRCIs
IEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKHcsIGNs
aWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFy
ZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5OgorICAgICAg
eHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDApOworICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAo
IHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NV
UywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0OgorICAgICAg
YnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJp
bnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICov
Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAgKnh0Y2xp
ZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAgICAgICAg
ICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcg
ICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEyLCAgCisg
ICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50IHhldmVu
dDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgRGlzcGxh
eSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAgbWVtc2V0
KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRvdyA9IHc7
CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQueGNsaWVu
dC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsKKyAgeGV2
ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFswXSA9IHRp
bWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZlbnQueGNs
aWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbM10gPSBk
YXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJhcF9lcnJv
cnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAmeGV2ZW50
KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJhcF9lcnJv
cigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJlZF9tZXNz
YWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKworc3RhdGlj
IGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwgWEVycm9y
RXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3JfY29k
ZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9lcnJvcnMo
dm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFuZGxlciA9
IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgICAgICAg
ICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJvcl9o
YW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdfWFRCSU4K
KyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9yX2Nv
ZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30KKworc3Rh
dGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0
UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRweSA9IFh0
RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBXaW5kb3cg
d2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBj
YXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVudCA9
PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwgZXZl
bnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAg
IHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVtb3ZlX2Zv
Y3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBh
cmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikgewor
ICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBjaGlsZD1Y
dFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICBp
ZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1
c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50LndpbmRv
dyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAgICB9Cisg
ICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAgICAgfQor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAgIFhTZXRJ
bnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVydFRv
UGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94ZW1iZWRf
bWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9S
RVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisK
K3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIg
dXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2ZW50bWFz
azsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jjb2RlOwor
CisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXkodyks
IFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9tYXNr
IHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBYU2VsZWN0
SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAorICAgICAg
ICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAgICAgICAg
ICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAK
KyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50
SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4
dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfcmVtb3Zl
X2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBpbnQg
ZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFuZGxlcih3
LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAorICAg
ICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVu
ZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4
dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVz
ZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7CisgIFdpbmRv
dyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRweSA9IFh0
RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisKKyAgLyog
ZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVfZm9jdXNf
bGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIo
IHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1ZXJ5VHJl
ZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsKKyAg
ICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBfZXJyb3Io
KSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKKyAgICBX
aWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOworICAgIGlm
IChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJf
ZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47Cit9CisK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9p
bXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5QYWNrYWdlR3RrOjp+UGx1Z2luUGFja2FnZUd0aygpCit7CisgICAgQVNTRVJUKCFt
X2lzTG9hZGVkKTsKK30KKworUGx1Z2luUGFja2FnZUd0azo6UGx1Z2luUGFja2FnZUd0ayhjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQorICAgIDogbV9pc0xv
YWRlZChmYWxzZSkKKyAgICAsIG1fbG9hZENvdW50KDApCisgICAgLCBtX3BhdGgocGF0aCkKKyAg
ICAsIG1fbW9kdWxlKDApCisgICAgLCBtX2xhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpCit7Cisg
ICAgaW50IHBvcyA9IG1fcGF0aC5kZXByZWNhdGVkU3RyaW5nKCkuZmluZFJldignLycpOworCisg
ICAgbV9maWxlTmFtZSA9IG1fcGF0aC5yaWdodChtX3BhdGgubGVuZ3RoKCkgLSBwb3MgLSAxKTsK
KworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmZldGNoSW5mbygpCit7CisgICAgaWYgKCFs
b2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9
IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7CisgICAgZ2NoYXIqKiBtaW1lRGVzY3MgPSBnX3N0
cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAgICBmb3IgKGludCBpID0gMDsgbWltZURlc2NzW2ld
ICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7CisgICAgICAgIGdjaGFyKiogbWltZURhdGEgPSBn
X3N0cnNwbGl0KG1pbWVEZXNjc1tpXSwgIjoiLCAzKTsKKworICAgICAgICBTdHJpbmcgZGVzY3Jp
cHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1pbWVEYXRhWzJdKTsKKyAgICAgICAgZ2NoYXIqKiBl
eHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1lRGF0YVsxXSwgIiwiLCAtMSk7CisKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0VmVjdG9yOworICAgICAgICBmb3IgKGludCBqID0gMDsgZXh0ZW5z
aW9uc1tqXTsgaisrKQorICAgICAgICAgICAgZXh0VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZyb21V
VEY4KGV4dGVuc2lvbnNbal0pKTsKKworICAgICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1p
bWVEYXRhWzBdLCBleHRWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQo
bWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgICBnX3N0cmZyZWV2KGV4dGVuc2lv
bnMpOworICAgICAgICBnX3N0cmZyZWV2KG1pbWVEYXRhKTsKKyAgICB9CisgICAgZ19zdHJmcmVl
dihtaW1lRGVzY3MpOworCisgICAgY2hhciogYnVmZmVyID0gMDsKKyAgICBOUEVycm9yIGVyciA9
IG1fTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBp
ZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX25hbWUgPSBidWZmZXI7CisKKyAg
ICBidWZmZXIgPSAwOworICAgIGVyciA9IG1fTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNj
cmlwdGlvblN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikK
KyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHVubG9hZCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2VHdGs6OmxvYWQoKQoreworICAgIGlm
IChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3BlbigobV9wYXRoLnV0Zjgo
KSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fbW9kdWxlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0lu
aXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJvciBucEVycjsKKworICAg
IGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9J
bml0aWFsaXplKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRNSU1FRGVz
Y3JpcHRpb24iLCAodm9pZCoqKSZtX05QX0dldE1JTUVEZXNjcmlwdGlvbik7CisgICAgZ19tb2R1
bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfU2h1dGRvd24iLCAodm9pZCoqKSZtX05QUF9TaHV0ZG93
bik7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiLCAodm9pZCoq
KSZtX05QUF9HZXRWYWx1ZSk7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIW1fTlBfR2V0
TUlNRURlc2NyaXB0aW9uIHx8ICFtX05QUF9TaHV0ZG93biB8fCAhbV9OUFBfR2V0VmFsdWUpCisg
ICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2Vy
RnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVu
Y3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFk
ID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9O
ZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9i
cm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJv
d3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50
ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1B
bGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9i
cm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVy
bG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVl
ID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZh
bHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVS
ZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0
ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJh
dzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93
c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQ
b3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZh
bHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0
cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZp
ZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlm
aWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05Q
Tl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0g
X05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05Q
Tl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5f
UmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVu
Y3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJl
bW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5o
YXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhv
ZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0g
X05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9F
bnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAm
bV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAg
ICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKwor
YWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZCgpCit7CisgICAgaWYgKCFtX2lzTG9h
ZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoLS1tX2xvYWRDb3VudCA+IDApCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fTlBQX1NodXRkb3duKCk7CisKKyAgICB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWRXaXRob3V0U2h1
dGRvd24oKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKG1fbG9hZENvdW50ID09IDApOworICAgIEFTU0VSVChtX21vZHVsZSk7CisKKyAgICBn
X21vZHVsZV9jbG9zZSAobV9tb2R1bGUpOworCisgICAgbV9pc0xvYWRlZCA9IGZhbHNlOworfQor
CitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5QYWNrYWdlR3RrOjpjcmVhdGVQYWNrYWdlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCit7CisgICAgUGx1Z2lu
UGFja2FnZUd0ayogcGFja2FnZSA9IG5ldyBQbHVnaW5QYWNrYWdlR3RrKHBhdGgsIGxhc3RNb2Rp
ZmllZCk7CisKKyAgICBpZiAoIXBhY2thZ2UtPmZldGNoSW5mbygpKSB7CisgICAgICAgIGRlbGV0
ZSBwYWNrYWdlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHBh
Y2thZ2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2VHdGs6Omhhc2goKSBjb25zdAoreyAK
KyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1fcGF0aC5pbXBsKCktPmhh
c2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAy
ICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIFBsdWdpblBh
Y2thZ2VHdGs6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGEsIGNvbnN0IFBsdWdpblBh
Y2thZ2VHdGsmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3Jp
cHRpb247Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW1HdGsuaCIKKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5o
IgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3Rr
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2Fk
ZXIuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj
aW5jbHVkZSA8ZmNudGwuaD4KKworLy8gV2UgdXNlIC0yIGhlcmUgYmVjYXVzZSBzb21lIHBsdWdp
bnMgbGlrZSB0byByZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3IKKy8vIGFuZCB0aGlzIHdheSB3
ZSB3b24ndCBjbGFzaCB3aXRoIHRoZW0uCitzdGF0aWMgY29uc3QgaW50IFdlYlJlYXNvbk5vbmUg
PSAtMjsKKwordXNpbmcgc3RkOjptYXg7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0eXBlZGVmIEhhc2hNYXA8TlBTdHJlYW0qLCBOUFA+IFN0cmVhbU1hcDsKK3N0
YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQoreworICAgIHN0YXRpYyBTdHJlYW1NYXAgc3RhdGlj
U3RyZWFtczsKKyAgICByZXR1cm4gc3RhdGljU3RyZWFtczsKK30KKworUGx1Z2luU3RyZWFtR3Rr
OjpQbHVnaW5TdHJlYW1HdGsoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldywgRnJhbWUqIGZyYW1l
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZp
Y2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgIDogbV9yZXNvdXJjZVJlcXVlc3QocmVzb3Vy
Y2VSZXF1ZXN0KQorICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldyhwbHVn
aW5WaWV3KQorICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgLCBtX3NlbmROb3Rp
ZmljYXRpb24oc2VuZE5vdGlmaWNhdGlvbikKKyAgICAsIG1fc3RyZWFtU3RhdGUoU3RyZWFtQmVm
b3JlU3RhcnRlZCkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGZhbHNlKQorICAgICwgbV9kZWxheURl
bGl2ZXJ5VGltZXIodGhpcywgJlBsdWdpblN0cmVhbUd0azo6ZGVsYXlEZWxpdmVyeVRpbWVyRmly
ZWQpCisgICAgLCBtX2RlbGl2ZXJ5RGF0YSgwKQorICAgICwgbV90ZW1wRmlsZUhhbmRsZSgwKQor
ICAgICwgbV9wbHVnaW5GdW5jcyhwbHVnaW5WaWV3LT5wbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSkK
KyAgICAsIG1faW5zdGFuY2UocGx1Z2luVmlldy0+aW5zdGFuY2UoKSkKK3sKKyAgICBBU1NFUlQo
bV9wbHVnaW5WaWV3KTsKKworICAgIG1fc3RyZWFtLnVybCA9IDA7CisgICAgbV9zdHJlYW0ubmRh
dGEgPSAwOworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5lbmQgPSAwOwor
ICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSAwOworICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9
IDA7CisKKyAgICBzdHJlYW1zKCkuYWRkKCZtX3N0cmVhbSwgbV9pbnN0YW5jZSk7Cit9CisKK1Bs
dWdpblN0cmVhbUd0azo6flBsdWdpblN0cmVhbUd0aygpCit7CisgICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgIT0gU3RyZWFtU3RhcnRlZCk7CisgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICBp
ZiAobV9zdHJlYW0udXJsKQorICAgICAgICBmcmVlKChjaGFyKiltX3N0cmVhbS51cmwpOworCisg
ICAgc3RyZWFtcygpLnJlbW92ZSgmbV9zdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0
azo6c3RhcnQoKQoreworICAgIEFTU0VSVCghbV9sb2FkTWFudWFsbHkpOworCisgICAgbV9sb2Fk
ZXIgPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6Y3JlYXRlKG1fZnJhbWUsIHRoaXMpOwor
CisgICAgbV9sb2FkZXItPnNldFNob3VsZEJ1ZmZlckRhdGEoZmFsc2UpOworICAgIG1fbG9hZGVy
LT5kb2N1bWVudExvYWRlcigpLT5hZGRQbHVnSW5TdHJlYW1Mb2FkZXIobV9sb2FkZXIuZ2V0KCkp
OworICAgIG1fbG9hZGVyLT5sb2FkKG1fcmVzb3VyY2VSZXF1ZXN0KTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OnN0b3AoKQoreworICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdG9wcGVk
OworCisgICAgaWYgKG1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEFTU0VSVCghbV9sb2FkZXIp
OworCisgICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IG1fZnJhbWUtPmxv
YWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpOworICAgICAgICBBU1NFUlQoZG9jdW1lbnRM
b2FkZXIpOworCisgICAgICAgIGlmIChkb2N1bWVudExvYWRlci0+aXNMb2FkaW5nTWFpblJlc291
cmNlKCkpCisgICAgICAgICAgICBkb2N1bWVudExvYWRlci0+Y2FuY2VsTWFpblJlc291cmNlTG9h
ZChtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsbGVkRXJyb3IobV9yZXNvdXJjZVJlcXVlc3QpKTsK
KworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbG9hZGVyKSB7CisgICAgICAg
IG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgbV9sb2FkZXIgPSAwOworICAgIH0KK30KKwor
dm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0U3RyZWFtKCkKK3sKKyAgICBBU1NFUlQobV9zdHJl
YW1TdGF0ZSA9PSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGNvbnN0IEtVUkwmIHJlc3Bv
bnNlVVJMID0gbV9yZXNvdXJjZVJlc3BvbnNlLnVybCgpOworCisgICAgLy8gU29tZSBwbHVnaW5z
IChGbGFzaCkgZXhwZWN0IHRoYXQgamF2YXNjcmlwdCBVUkxzIGFyZSBwYXNzZWQgYmFjayBkZWNv
ZGVkIGFzIHRoaXMgaXMgdGhlCisgICAgLy8gZm9ybWF0IHVzZWQgd2hlbiByZXF1ZXN0aW5nIHRo
ZSBVUkwuCisgICAgaWYgKHJlc3BvbnNlVVJMLnN0cmluZygpLnN0YXJ0c1dpdGgoImphdmFzY3Jp
cHQ6IiwgZmFsc2UpKQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChyZXNwb25zZVVS
TC5kZWNvZGVfc3RyaW5nKHJlc3BvbnNlVVJMLmRlcHJlY2F0ZWRTdHJpbmcoKSkudXRmOCgpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRl
cHJlY2F0ZWRTdHJpbmcoKS51dGY4KCkpOworICAgIAorICAgIENTdHJpbmcgbWltZVR5cGVTdHIg
PSBtX3Jlc291cmNlUmVzcG9uc2UubWltZVR5cGUoKS51dGY4KCk7CisgICAgCisgICAgbG9uZyBs
b25nIGV4cGVjdGVkQ29udGVudExlbmd0aCA9IG1fcmVzb3VyY2VSZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChtX3Jlc291cmNlUmVzcG9uc2UuaXNIVFRQKCkpIHsK
KyAgICAgICAgVmVjdG9yPFVDaGFyPiBzdHJpbmdCdWlsZGVyOworICAgICAgICBTdHJpbmcgc2Vw
YXJhdG9yKCI6ICIpOworCisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuZW5kKCk7CisgICAgICAg
IGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlUmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaXQtPmZpcnN0LmNoYXJhY3RlcnMoKSwgaXQtPmZp
cnN0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlcGFyYXRv
ci5jaGFyYWN0ZXJzKCksIHNlcGFyYXRvci5sZW5ndGgoKSk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+c2Vjb25kLmNoYXJhY3RlcnMoKSwgaXQtPnNlY29uZC5sZW5ndGgo
KSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgoVUNoYXIpJ1xuJyk7CisgICAg
ICAgIH0KKworICAgICAgICBtX2hlYWRlcnMgPSBTdHJpbmc6OmFkb3B0KHN0cmluZ0J1aWxkZXIp
LnV0ZjgoKTsKKworICAgICAgICAvLyBJZiB0aGUgY29udGVudCBpcyBlbmNvZGVkIChtb3N0IGxp
a2VseSBjb21wcmVzc2VkKSwgdGhlbiBkb24ndCBzZW5kIGl0cyBsZW5ndGggdG8gdGhlIHBsdWdp
biwKKyAgICAgICAgLy8gd2hpY2ggaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWNvZGVkIGxl
bmd0aCwgbm90IHlldCBrbm93biBhdCB0aGUgbW9tZW50LgorICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNDQ3MDU5OT4gdHJhY2tzIGEgcmVxdWVzdCBmb3IgLVtOU1VSTFJlc3BvbnNlIGV4cGVj
dGVkQ29udGVudExlbmd0aF0gdG8gaW5jb3Jwb3JhdGUgdGhpcyBsb2dpYy4KKyAgICAgICAgU3Ry
aW5nIGNvbnRlbnRFbmNvZGluZyA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
IkNvbnRlbnQtRW5jb2RpbmciKTsKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcuaXNOdWxs
KCkgJiYgY29udGVudEVuY29kaW5nICE9ICJpZGVudGl0eSIpCisgICAgICAgICAgICBleHBlY3Rl
ZENvbnRlbnRMZW5ndGggPSAtMTsKKyAgICB9CisKKyAgICBtX3N0cmVhbS5oZWFkZXJzID0gbV9o
ZWFkZXJzLmRhdGEoKTsKKyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubmRh
dGEgPSB0aGlzOworICAgIG1fc3RyZWFtLmVuZCA9IG1heChleHBlY3RlZENvbnRlbnRMZW5ndGgs
IDBMTCk7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gbV9yZXNvdXJjZVJlc3BvbnNlLmxh
c3RNb2RpZmllZERhdGUoKTsKKyAgICBtX3N0cmVhbS5ub3RpZnlEYXRhID0gbV9ub3RpZnlEYXRh
OworCisgICAgbV90cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7CisgICAgbV9vZmZzZXQgPSAwOwor
ICAgIG1fcmVhc29uID0gV2ViUmVhc29uTm9uZTsKKworICAgIC8vIFByb3RlY3QgdGhlIHN0cmVh
bSBpZiBkZXN0cm95c3RyZWFtIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgbmV3c3RyZWFtIGhh
bmRsZXIKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAg
TlBFcnJvciBucEVyciA9IG1fcGx1Z2luRnVuY3MtPm5ld3N0cmVhbShtX2luc3RhbmNlLCAoTlBN
SU1FVHlwZSltaW1lVHlwZVN0ci5kYXRhKCksICZtX3N0cmVhbSwgZmFsc2UsICZtX3RyYW5zZmVy
TW9kZSk7CisgICAgCisgICAgLy8gSWYgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIGluIHRoZSBj
YWxsIHRvIG5ld3N0cmVhbSB3ZSByZXR1cm4KKyAgICBpZiAobV9yZWFzb24gIT0gV2ViUmVhc29u
Tm9uZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX3N0cmVhbVN0YXRlID0gU3Ry
ZWFtU3RhcnRlZDsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAg
Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShucEVycik7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUg
PT0gTlBfTk9STUFMKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKChtX3RlbXBGaWxl
SGFuZGxlID0gdG1wZmlsZSgpKSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQor
ICAgIGNhbmNlbEFuZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAg
UGx1Z2luU3RyZWFtR3RrOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAg
IHJldHVybiBzdHJlYW1zKCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3Rr
OjpjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8
UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVzdHJveVN0cmVhbShyZWFz
b24pOworICAgIHN0b3AoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJl
YW0oTlBSZWFzb24gcmVhc29uKQoreworICAgIG1fcmVhc29uID0gcmVhc29uOworICAgIGlmICht
X3JlYXNvbiAhPSBOUFJFU19ET05FKSB7CisgICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0
YSBmcm9tIGJlaW5nIHN0cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAg
ICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBlbHNlIGlmIChtX2RlbGl2
ZXJ5RGF0YSAmJiBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgeworICAgICAgICAvLyBUaGVy
ZSBpcyBtb3JlIGRhdGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBu
b3cuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0cmVhbSgpOworfQorCit2
b2lkIFBsdWdpblN0cmVhbUd0azo6ZGVzdHJveVN0cmVhbSgpCit7CisgICAgaWYgKG1fc3RyZWFt
U3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUICht
X3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFtX2RlbGl2ZXJ5RGF0YSB8
fCBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgaWYgKG1fdGVtcEZpbGVIYW5k
bGUgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgaWYg
KG1fc3RyZWFtLm5kYXRhICE9IDApIHsKKyAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RP
TkUgJiYgKG1fdHJhbnNmZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBO
UF9BU0ZJTEVPTkxZKSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX3BhdGguaXNOdWxsKCkpOwor
CisgICAgICAgICAgICBtX3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFt
LCBtX3BhdGguZGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIE5QRXJyb3IgbnBFcnI7Cisg
ICAgICAgIG5wRXJyID0gbV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAm
bV9zdHJlYW0sIG1fcmVhc29uKTsKKworICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAg
fQorCisgICAgaWYgKG1fc2VuZE5vdGlmaWNhdGlvbikKKyAgICAgICAgbV9wbHVnaW5GdW5jcy0+
dXJsbm90aWZ5KG1faW5zdGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRT
dHJpbmcoKS51dGY4KCksIG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworCisgICAgbV9zdHJlYW1T
dGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0U3RyZWFtIGNhbiBjYXVz
ZSB1cyB0byBiZSBkZWxldGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3Qo
dGhpcyk7CisgICAgaWYgKCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5k
aXNjb25uZWN0U3RyZWFtKHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3ID0gMDsKK30KKwordm9p
ZCBQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBsdWdpblN0
cmVhbUd0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9kZWxheURlbGl2ZXJ5
VGltZXIpOworCisgICAgZGVsaXZlckRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6
OmRlbGl2ZXJEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9kZWxpdmVyeURhdGEpOworICAgIAorICAg
IGlmIChtX3N0cmVhbVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgY2FuY2VsIG91ciBqb2IgaW4gdGhlIFN1YnJlc291cmNlTG9hZGVyIG9uIGVycm9y
IHNvIHdlIGRvbid0IHJlYWNoIHRoaXMgY2FzZQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1CZWZvcmVTdGFydGVkKTsKKworICAgIGlmICghbV9z
dHJlYW0ubmRhdGEgfHwgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA9PSAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnQzMiB0b3RhbEJ5dGVzID0gbV9kZWxpdmVyeURhdGEtPnNpemUoKTsKKyAg
ICBpbnQzMiB0b3RhbEJ5dGVzRGVsaXZlcmVkID0gMDsKKworICAgIHdoaWxlICh0b3RhbEJ5dGVz
RGVsaXZlcmVkIDwgdG90YWxCeXRlcykgeworICAgICAgICBpbnQzMiBkZWxpdmVyeUJ5dGVzID0g
bV9wbHVnaW5GdW5jcy0+d3JpdGVyZWFkeShtX2luc3RhbmNlLCAmbV9zdHJlYW0pOworCisgICAg
ICAgIGlmIChkZWxpdmVyeUJ5dGVzIDw9IDApIHsKKyAgICAgICAgICAgIG1fZGVsYXlEZWxpdmVy
eVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxpdmVyeUJ5dGVzLCB0b3Rh
bEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJlZCk7CisgICAgICAgICAgICBpbnQzMiBkYXRhTGVu
Z3RoID0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIGNoYXIqIGRhdGEgPSBtX2RlbGl2ZXJ5
RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZDsKKworICAgICAgICAgICAgLy8gV3Jp
dGUgdGhlIGRhdGEKKyAgICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtX3BsdWdpbkZ1bmNzLT53
cml0ZShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fb2Zmc2V0LCBkYXRhTGVuZ3RoLCAodm9pZCop
ZGF0YSk7CisgICAgICAgICAgICBpZiAoZGVsaXZlcnlCeXRlcyA8IDApIHsKKyAgICAgICAgICAg
ICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVz
ID0gbWluKGRlbGl2ZXJ5Qnl0ZXMsIGRhdGFMZW5ndGgpOworICAgICAgICAgICAgbV9vZmZzZXQg
Kz0gZGVsaXZlcnlCeXRlczsKKyAgICAgICAgICAgIHRvdGFsQnl0ZXNEZWxpdmVyZWQgKz0gZGVs
aXZlcnlCeXRlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0b3RhbEJ5dGVzRGVsaXZl
cmVkID4gMCkgeworICAgICAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA8IHRvdGFsQnl0ZXMp
IHsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdCeXRlcyA9IHRvdGFsQnl0ZXMgLSB0b3RhbEJ5
dGVzRGVsaXZlcmVkOworICAgICAgICAgICAgbWVtbW92ZShtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgp
LCBtX2RlbGl2ZXJ5RGF0YS0+ZGF0YSgpICsgdG90YWxCeXRlc0RlbGl2ZXJlZCwgcmVtYWluaW5n
Qnl0ZXMpOworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZShyZW1haW5pbmdCeXRl
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RlbGl2ZXJ5RGF0YS0+cmVzaXpl
KDApOworICAgICAgICAgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisgICAgICAg
ICAgICAgICAgZGVzdHJveVN0cmVhbSgpOworICAgICAgICB9CisgICAgfSAKK30KKwordm9pZCBQ
bHVnaW5TdHJlYW1HdGs6OnNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZykKK3sKKyAgICBkaWRSZWNlaXZlUmVzcG9u
c2UoMCwgUmVzb3VyY2VSZXNwb25zZShyZXF1ZXN0VVJMLCAidGV4dC9wbGFpbiIsIHJlc3VsdFN0
cmluZy5sZW5ndGgoKSwgIiIsICIiKSk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBTdHJl
YW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCByZXN1
bHRTdHJpbmcuZGF0YSgpLCByZXN1bHRTdHJpbmcubGVuZ3RoKCkpOworICAgIGlmIChtX3N0cmVh
bVN0YXRlID09IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGRpZEZpbmlz
aExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlUmVzcG9u
c2UoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAg
QVNTRVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBtX3Jl
c291cmNlUmVzcG9uc2UgPSByZXNwb25zZTsKKworICAgIHN0YXJ0U3RyZWFtKCk7Cit9CisKK3Zv
aWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VS
VChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKyAgICBBU1NF
UlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKyAgICAKKyAgICBpZiAoIW1fZGVs
aXZlcnlEYXRhKQorICAgICAgICBtX2RlbGl2ZXJ5RGF0YS5zZXQobmV3IFZlY3RvcjxjaGFyPik7
CisKKyAgICBpbnQgb2xkU2l6ZSA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgbV9kZWxp
dmVyeURhdGEtPnJlc2l6ZShvbGRTaXplICsgbGVuZ3RoKTsKKyAgICBtZW1jcHkobV9kZWxpdmVy
eURhdGEtPmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbmd0aCk7CisKKyAgICAvLyBJZiB0aGUg
cGx1Zy1pbiBjYW5jZWxzIHRoZSBzdHJlYW0gaW4gZGVsaXZlckRhdGEgaXQgY291bGQgYmUgZGVs
ZXRlZCwgCisgICAgLy8gc28gcHJvdGVjdCBpdCBoZXJlLgorICAgIFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBpZiAobV90cmFuc2Zlck1vZGUgIT0gTlBfQVNG
SUxFT05MWSkKKyAgICAgICAgZGVsaXZlckRhdGEoKTsKKworICAgIGlmIChtX3N0cmVhbVN0YXRl
ICE9IFN0cmVhbVN0b3BwZWQgJiYgbV90ZW1wRmlsZUhhbmRsZSAhPSBOVUxMKSB7CisgICAgICAg
IGJvb2wgcmV0dmFsID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFyZXR2YWwgfHwgZnB1dHMoZGF0
YSwgbV90ZW1wRmlsZUhhbmRsZSkgPD0gMCkKKyAgICAgICAgICAgIGNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5TdHJlYW1H
dGs6OmRpZEZhaWwoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRlciwgY29uc3QgUmVz
b3VyY2VFcnJvciYpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAgICBt
X2xvYWRlciA9IDA7CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30K
Kwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsK
KyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSA9PSBTdHJlYW1TdGFydGVkKTsKKworICAgIG1fbG9h
ZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0oTlBSRVNfRE9ORSk7Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisvKiAtKi0gTW9k
ZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZz
ZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisg
CisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4x
L0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBz
dWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhl
ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2Uu
CisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQgSW1wbGVt
ZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBD
b2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5
IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Io
cyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkg
YmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhl
ICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3Ig
dGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlv
dSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAq
IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0
byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxl
dGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGlj
ZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQ
TC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioq
KiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBfX0dUS19YVEJJTl9I
X18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsvZ3Rrc29ja2V0Lmg+
CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2lu
Y2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNpbmNsdWRlICJuc2Nv
cmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5
cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBO
U19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBl
KSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW4gR3RrWHRCaW47
Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNzOworCisjZGVmaW5l
IEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9nZXRfdHlwZSAoKSkK
KyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RLX0NIRUNLX0NBU1Qg
KChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFTUyhrbGFzcykgICAg
ICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbkNsYXNzKSkK
KyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RLX0NIRUNLX1RZUEUg
KChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19U
WVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAoR1RL
X0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1Y3QgX1h0Q2xpZW50
IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkqeHRkaXNwbGF5Owor
ICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAqLworICBXaWRn
ZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLworICBWaXN1YWwJKnh0
dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3JtYXA7CisgIFdpbmRv
dwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0a1NvY2tldCAgICAg
IGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7CisgIERpc3BsYXkgICAg
ICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLworCisgIFdpbmRv
dyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRvdyAqLworICBn
aW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVpZ2h0OworICBY
dENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1iZWQgKi8KK307
CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENsYXNzIHdpZGdldF9j
bGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0YmluX2dldF90eXBl
ICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25ldyAoR2RrV2lu
ZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJKHZvaWQpICAgICAg
ICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5
KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQg
KndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50
ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMgeworICAgIFh0
VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8gVHJhbnNsYXRp
b24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxlOyAgICAgICAg
IC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAgIHN0cnVjdCBfWHRT
dGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIgc3RhdGUgcHRy
ICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOworfSBYdFRNUmVjLCAq
WHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBXaWRnZXQgICAgICAg
ICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNlbGYgICAgICAg
ICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAvKiBwb2ludGVy
IHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAgICAgICAgcGFyZW50
OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAgICAgKi8KKyAg
ICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2Ug
bmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVpbmdfZGVzdHJveWVk
OyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KKyAgICBYdENhbGxi
YWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVuIHdpZGdldCBk
ZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAgICAgICAvKiBj
b25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3NpdGlvbiAgICAgICAg
eCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAgICAgICAgICAg
Ki8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3aW5kb3cgZGlt
ZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgYm9yZGVyX3dp
ZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAgKi8KKyAgICBC
b29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQgZ2VvbWV0cnkg
bWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZlOyAgICAgICAg
ICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAgICBCb29sZWFuICAg
ICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBzZW5zaXRpdmU/
ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAgICAvKiBwcml2
YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVjICAgICAgICAgdG07
ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAgICAgICAgKi8K
KyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2NlbGVyYXRvciB0
cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYm9yZGVyX3BpeGVs
OyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8KKyAgICBQaXht
YXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeG1hcCBv
ciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsgICAgICAgICAv
KiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5hbCAgICAg
ICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAvKiB3aWRnZXQg
cmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAgICAgICAgKnNjcmVl
bjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAgICAgKi8KKyAg
ICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1hcCAgICAgICAg
ICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2luZG93OyAgICAgICAg
ICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJkaW5h
bCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVzIGluIHdpbmRv
dyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhlbDsgICAvKiB3
aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXhtYXAgICAgICAgICAg
YmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAgb3IgTlVMTCAg
Ki8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBpcyB3aW5kb3cg
bWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAgICAgbWFwcGVkX3do
ZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAgKi8KK30gQ29y
ZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENvcmVQYXJ0ICAgIGNv
cmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQor
I2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRCSU5fSF9fICovCisK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luU3RyZWFtR3Rr
X0gKKyNkZWZpbmUgUGx1Z2luU3RyZWFtR3RrX0gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAi
bnBmdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGx1Z2lu
Vmlld0d0azsKKworICAgIGVudW0gUGx1Z2luU3RyZWFtU3RhdGUgeyBTdHJlYW1CZWZvcmVTdGFy
dGVkLCBTdHJlYW1TdGFydGVkLCBTdHJlYW1TdG9wcGVkIH07CisKKyAgICBjbGFzcyBQbHVnaW5T
dHJlYW1HdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5TdHJlYW1HdGs+LCBwcml2YXRlIE5l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBs
dWdpblN0cmVhbUd0ayhQbHVnaW5WaWV3R3RrKiwgRnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICB+
UGx1Z2luU3RyZWFtR3RrKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0YXJ0KCk7CisgICAg
ICAgIHZvaWQgc3RvcCgpOworCisgICAgICAgIHZvaWQgc3RhcnRTdHJlYW0oKTsKKworICAgICAg
ICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2xvYWRNYW51YWxs
eSA9IGxvYWRNYW51YWxseTsgfQorCisgICAgICAgIC8vIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyQ2xpZW50CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcios
IGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqKTsK
KworICAgICAgICB2b2lkIHNlbmRKYXZhU2NyaXB0U3RyZWFtKGNvbnN0IEtVUkwmIHJlcXVlc3RV
UkwsIGNvbnN0IENTdHJpbmcmIHJlc3VsdFN0cmluZyk7CisgICAgICAgIHZvaWQgY2FuY2VsQW5k
RGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisKKyAgICAgICAgc3RhdGljIE5QUCBvd25lckZvclN0
cmVhbShOUFN0cmVhbSopOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZGVsaXZlckRhdGEo
KTsKKyAgICAgICAgdm9pZCBkZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKyAgICAgICAgdm9pZCBk
ZXN0cm95U3RyZWFtKCk7CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1
ZXN0OworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzb3VyY2VSZXNwb25zZTsKKworICAg
ICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyPiBtX2xvYWRlcjsKKyAgICAgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3Owor
ICAgICAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgICAgIGJvb2wgbV9zZW5kTm90aWZpY2F0
aW9uOworICAgICAgICBQbHVnaW5TdHJlYW1TdGF0ZSBtX3N0cmVhbVN0YXRlOworICAgICAgICBi
b29sIG1fbG9hZE1hbnVhbGx5OworCisgICAgICAgIFRpbWVyPFBsdWdpblN0cmVhbUd0az4gbV9k
ZWxheURlbGl2ZXJ5VGltZXI7CisgICAgICAgIHZvaWQgZGVsYXlEZWxpdmVyeVRpbWVyRmlyZWQo
VGltZXI8UGx1Z2luU3RyZWFtR3RrPiopOworCisgICAgICAgIE93blB0cjwgVmVjdG9yPGNoYXI+
ID4gbV9kZWxpdmVyeURhdGE7CisKKyAgICAgICAgRklMRSogbV90ZW1wRmlsZUhhbmRsZTsKKwor
ICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBtX3BsdWdpbkZ1bmNzOworICAgICAgICBOUFAg
bV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2IG1fdHJhbnNmZXJNb2RlOworICAgICAgICBpbnQz
MiBtX29mZnNldDsKKyAgICAgICAgQ1N0cmluZyBtX2hlYWRlcnM7CisgICAgICAgIENTdHJpbmcg
bV9wYXRoOworICAgICAgICBOUFJlYXNvbiBtX3JlYXNvbjsKKyAgICAgICAgTlBTdHJlYW0gbV9z
dHJlYW07CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZUd0a19I
CisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5oPgorI2lu
Y2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0
aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0aWFsaXpl
RnVuY1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3Mg
UGx1Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VHdGs+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAgIHN0YXRp
YyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVU
b0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1l
VG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAg
ICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKTsKKwor
ICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9p
ZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNz
KiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKworICAg
ICAgICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAg
ICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAg
U3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9F
eHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxlKiBtX21v
ZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisgICAgICAgIE5QX0dldE1J
TUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAgICAgIE5Q
UF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAgICAgIE5QUF9HZXRWYWx1ZVBy
b2NQdHIgbV9OUFBfR2V0VmFsdWU7CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5j
czsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2th
Z2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9
CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7
IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihhKSwgcmVp
bnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYSwgY29uc3QgUmVmUHRy
PFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlR3RrOjplcXVhbCgq
YS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIFdU
Riwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1
dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRo
aXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3BhY2UgV1RG
IHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFj
a2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdl
YkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAgICAgICAg
dHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBIYXNoOworICAgICAgICB0eXBl
ZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAgIH07Cit9CisKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKworI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxs
ZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIHBsdWdpbnMgPSAw
OworICAgIAorICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdp
bkRhdGFiYXNlR3RrOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRh
YmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5yZWZyZXNo
KCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJh
c2VHdGs6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9w
bHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29sIFBsdWdp
bkRhdGFiYXNlR3RrOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsK
KworICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEg
bmV3IHNldCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7
CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdpc3RlcmVk
TUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9
IG1fcGx1Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5l
d1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcGx1
Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQo
KTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3Zl
KCppdCk7CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0gcGx1Z2lu
c1RvVW5sb2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucwor
ICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFu
Z2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7CisgICAgICAg
IFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAg
ICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9CisK
KyAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQo
KTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1h
cF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFw
X2VuZDsgKyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQo
bWFwX2l0LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luU2V0
Q2hhbmdlZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiBQbHVnaW5EYXRhYmFzZUd0
azo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiByZXN1
bHQ7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQo
KTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgp
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZUd0
azo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVG
aWxlbmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBQbHVnaW5QYWNrYWdlR3Rr
KiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VHdGsqIG5ld1dNUFBsdWdpbiA9
IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5Q
YXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEdEaXIq
IGRpciA9IGdfZGlyX29wZW4oKGl0LT51dGY4KCkpLmRhdGEoKSwgMCwgTlVMTCk7CisgICAgICAg
IGlmIChkaXIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICB3
aGlsZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZ19zdHJfaGFzX3N1ZmZpeChuYW1lLCAiLiIgR19NT0RVTEVfU1VGRklYKSkgeworICAgICAg
ICAgICAgICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChpdC0+dXRm
OCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBQbHVnaW5QYWNr
YWdlR3RrKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShm
aWxlbmFtZSwgdGltZShOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5QYWNr
YWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7
CisgICAgICAgICAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGlyKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZlY3Rv
cjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7
CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsK
KyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lv
blN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQ
b3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2
ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAn
XycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25l
bnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3Mp
LnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisg
ICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lv
bjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4g
dmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9y
PGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlm
IChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUg
dmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29t
cG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9y
PFN0cmluZz4gUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7CisgICAg
VmVjdG9yPFN0cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciogaG9tZVBhdGggPSBnX2J1aWxkX2Zp
bGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVMTCk7Cisg
ICAgcGF0aHMuYXBwZW5kKGhvbWVQYXRoKTsKKyAgICBnX2ZyZWUoaG9tZVBhdGgpOworCisgICAg
Y29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7CisgICAg
aWYgKG1velBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQo
bW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVnaW5QYXRo
c1tpXTsgaSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ldKTsKKwor
ICAgICAgICBnX2ZyZWUocGx1Z2luUGF0aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBlbmQoIi91
c3IvbG9jYWwvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9s
aWIvbW96aWxsYS9wbHVnaW5zIik7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1
Z2luRGF0YWJhc2VHdGs6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVy
ZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQ
bHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhr
ZXkpKQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9y
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAo
Kml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0
ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNp
b25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAg
ICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3Rr
KiBQbHVnaW5EYXRhYmFzZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsK
KworICAgIGlmICghbWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZv
ck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBT
dHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRo
LnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4g
PSBwbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYg
bm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBl
IAorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisg
ICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6
OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VH
dGsqIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8g
cGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hp
bmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9
IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1
Z2luVmlld0d0ayhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0
YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZv
Rm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VHdGsg
KmRiID0gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5J
bmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2Fn
ZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgp
OworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2Mg
PSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25z
TWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsK
KyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAg
ICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+
dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5z
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1
ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9u
c1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25l
ZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1
Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30K
KworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBv
biBHVEsrCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFBsdWdJbkluZm9TdG9yZTo6
c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAg
ICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlw
ZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVs
b2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5z
KCktPnJlZnJlc2goKTsKKworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8g
RklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDI4
OTc5KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEz
Niw3IEBAIERFUEVORFBBVEggKz0gZWRpdGluZy9xdCBoaXN0b3J5L3F0IGxvYWQKIGd0ay1wb3J0
IHsKICAgICB4MTE6cGx1Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAg
ICBMSUJTICs9IC1sWHQKICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0xNzEsNiAr
MTcyLDcgQEAgZ3RrLXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBcCiAg
ICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAgICAu
Li9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcK
IH0KQEAgLTg0NywxMyArODQ5LDM5IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vz
c29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdUS19E
SVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmggXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2lu
U3RyZWFtR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAorCiAgIFNPVVJD
RVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RGF0YS5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxs
YmFja0xpc3QuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwK
KyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3Rr
L1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsu
Y3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAgcGx1Z2lucy9n
dGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0gXAorICAgIHBs
dWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICBwbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oIFwK
KyAgICBwbHVnaW5zL2d0ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk1Myw2ICs5ODEsNyBA
QCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNv
cmUvcGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkSGVscGVyLmggXApJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9u
IDI4OTc5KQorKysgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDE0ICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKwogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
d0d0ay5oIgogCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290
LmgiCisjaW5jbHVkZSAicnVudGltZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQo
V2lkZ2V0KikKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5z
dGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHdpZGdldCktPmJpbmRpbmdJ
bnN0YW5jZSgpOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRk
aXJzLnBtCShyZXZpc2lvbiAyODk3OSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGly
cy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZOUmV2aXNp
b247CiBteSAkb3NYVmVyc2lvbjsKIG15ICRpc1F0OwogbXkgJGlzR3RrOworbXkgJGVuYWJsZUd0
a1BsdWdpbnM7CiBteSAkaXNXeDsKIAogIyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBvcnQKQEAg
LTQ4MCw2ICs0ODIsMjMgQEAgc3ViIGRldGVybWluZUlzR3RrKCkKICAgICB9CiB9CiAKK3N1YiBl
bmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCk7Cisg
ICAgcmV0dXJuICRlbmFibGVHdGtQbHVnaW5zOworfQorCitzdWIgZGV0ZXJtaW5lRW5hYmxlR3Rr
UGx1Z2lucygpCit7CisgICAgcmV0dXJuIGlmIGRlZmluZWQoJGVuYWJsZUd0a1BsdWdpbnMpOwor
CisgICAgaWYgKGNoZWNrQXJndigiLS1kaXNhYmxlLWd0ay1wbHVnaW5zIikpIHsKKyAgICAgICAg
JGVuYWJsZUd0a1BsdWdpbnMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRlbmFibGVHdGtQ
bHVnaW5zID0gMTsKKyAgICB9Cit9CisKIHN1YiBpc1d4KCkKIHsKICAgICBkZXRlcm1pbmVJc1d4
KCk7CkBAIC03ODksNiArODA4LDcgQEAgc3ViIGJ1aWxkUU1ha2VHdGtQcm9qZWN0KCQkKQogCiAg
ICAgbXkgQGJ1aWxkQXJncyA9ICgiQ09ORklHKz1ndGstcG9ydCIpOwogICAgIHB1c2ggQGJ1aWxk
QXJncywgIkNPTkZJRy09cXQiOworICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRys9cGx1Z2lu
cyIgaWYgZW5hYmxlR3RrUGx1Z2lucygpOwogCiAgICAgcmV0dXJuIGJ1aWxkUU1ha2VQcm9qZWN0
KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18239</attachid>
            <date>2008-01-02 09:13:48 -0800</date>
            <delta_ts>2008-01-08 11:55:38 -0800</delta_ts>
            <desc>Updated patch to build with autotools also, against r29084</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>171986</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTA4NCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSAkKHRvcF9zcmNkaXIpL1dlYkNvcmUgXAogCS1JICQoc3JjZGlyKS9KYXZh
U2NyaXB0Q29yZSBcCiAJLUkgJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzIFwKIAktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvd3RmIFwKQEAgLTE3MCw2ICsxNzEs
NyBAQCBnbG9iYWxfY3BwZmxhZ3MgKz0gXAogCiBpZiBUQVJHRVRfWDExCiBnbG9iYWxfY3BwZmxh
Z3MgKz0gLURYUF9VTklYCit3ZWJraXRndGtfbGRmbGFncyArPSAtbFh0CiBlbmRpZgogCiBpZiAh
RU5BQkxFX0RFQlVHCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMjkwODQpCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9h
c3RzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDEyICs1MCwxNyBAQAogI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9y
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
d0d0ay5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAg
LCBtX3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjAsOSArMTY2
LDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxv
YWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwor
ICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFTU0VS
VChsb2FkZXItPmZyYW1lKCkpOworICAgICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0
aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1h
bGx5IGRvbmUKKyAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2
ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFi
b3V0OmJsYW5rKS4KKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlkZUVu
Y29kaW5nKCk7CisgICAgICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsK
KyAgICAgICAgaWYgKCF1c2VyQ2hvc2VuKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXIt
PnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBm
cmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2FkZXIt
PnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEpCisg
ICAgICAgICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KKwor
ICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRv
UGx1Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShs
b2FkZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdp
biA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0
YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
CkBAIC0yNTgsOCArMjg1LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVj
aWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9s
aWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNv
bnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0KiBG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisgICAgUGx1Z2luVmlld0d0ayog
cGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0
ZVBsdWdpblZpZXcoY29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAo
cGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQor
ICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIDA7CiB9CkBAIC0zMDEsOCArMzMzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFU
b1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3Rr
Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
SmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJh
c2VVUkwsCkBAIC0zMjQsNiArMzU1LDkgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJD
bGllbnQ6Om9iagogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50SW1hZ2U7
CiAKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1F
VHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0
Q29udGVudE5ldHNjYXBlUGx1Z2luOworCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9i
amVjdENvbnRlbnRGcmFtZTsKIApAQCAtNjIzLDE0ICs2NTcsMTQgQEAgU3RyaW5nIEZyYW1lTG9h
ZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5p
c2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIEFTU0VS
VChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcg
b24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBu
b3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2
ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFi
b3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+b3ZlcnJp
ZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsK
LSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9jdW1lbnRM
b2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50TG9hZGVy
LT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisKKyAg
ICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVudExvYWRl
ciwgMCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9h
ZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNw
b25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiAKQEAgLTc1Myw5ICs3ODcsMTMgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9y
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAg
ICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0g
ZmFsc2U7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2Fk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyOTA4NCkKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8
emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgor
CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTgwLDYgKzE4MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFnZW50
OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAgICAg
V2ViQ29yZTo6UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMjkwODQpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3Nyw2ICs5NzcsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXCiAgICAgc2V0dGluZ3MtPnNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZh
bWlseSgiQ291cmllciBOZXciKTsKICAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5
KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKIAogICAg
IEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOwogICAgIHdlYlZp
ZXdEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVfbmV3
KHdlYlZpZXcpKTsKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjkwODQpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAgd2ViY29yZV9jcHBm
bGFncyArPSBcCiAJLUkgJCh0b3BfYnVpbGRkaXIpL1dlYkNvcmUvYmluZGluZ3MvanMKIAogd2Vi
a2l0Z3RrX2NwcGZsYWdzICs9IFwKKwktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MgXAogCS1JICQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCiAJLUkgJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKIAktSSAk
KHNyY2RpcikvV2ViQ29yZS9wYWdlL2d0ayBcCisJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGx1Z2lu
cy9ndGsgXAogCS1JICQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKIAktSSAk
KHNyY2RpcikvV2ViS2l0L2d0ay9XZWJWaWV3CiAKQEAgLTg0Miw2ICs4NDQsMTIgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5TdHJlYW1HdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05MDEsNiArOTA5LDExIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlX
ZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJraXRndGtf
c291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworZW5kaWYKKwog
d2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0
ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjkw
ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50
b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9T
dG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6
UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJl
c2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi0KIENvbG9yIFdlYkNvcmU6
OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpz
ZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlzaW9uIDI5MDg0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDUgKzMwNSwy
MiBAQCB2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vCiAKIHZvaWQgV2lk
Z2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmICghcGFyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICBJbnRQb2lu
dCBsb2MgPSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRy
eSgpLmxvY2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6
ZSB0byBiZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3ogPSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgp
OworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsK
IH0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVn
aW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsK
KyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7Cisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2Fn
ZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQ
bHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5Q
YWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdp
c3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4
dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBh
dGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29u
c3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsq
IHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
OworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsK
KworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0
PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVn
aW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxl
bWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pz
X3dpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGlt
ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4K
KyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEp
ICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgi
CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lO
MzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNT
dGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5n
IEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7
CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1
Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBi
b29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFt
ZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5v
dGlmeURhdGEpCisgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24p
IHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVl
c3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3Rp
ZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90
aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRl
OgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1f
bm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTog
dXNlciBnZXN0dXJlCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRp
bWVJbnRlcnZhbCA9IDAuMDAxOworCitjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrIHsK
K3B1YmxpYzoKKyAgICBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrKFBsdWdpblZpZXdHdGsqIHBs
dWdpblZpZXcpCisgICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgICAgICwg
bV9iYWNrKDApLCBtX2Zyb250KDApCisgICAgICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcih0
aGlzLCAmUGx1Z2luTWVzc2FnZVRocm90dGxlckd0azo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJl
ZCkKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBp
bmxpbmUgbWVzc2FnZXMKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUlubGlu
ZU1lc3NhZ2VzIC0gMTsgaSsrKQorICAgICAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0
ID0gJm1faW5saW5lTWVzc2FnZXNbaSArIDFdOworICAgICAgICBtX2lubGluZU1lc3NhZ2VzW051
bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgICAgIG1fZnJlZUlubGluZU1lc3Nh
Z2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07CisgICAgfQorCisgICAgflBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJHdGsoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICAK
KyAgICAgICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsgbWVzc2FnZTsg
bWVzc2FnZSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OworICAg
ICAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoWElEIGhXbmQsIGd1aW50IG1zZywgZ3VpbnQg
d1BhcmFtLCBnbG9uZyBsUGFyYW0pIAorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVz
c2FnZSA9IGFsbG9jYXRlTWVzc2FnZSgpOworCisgICAgICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25k
OworICAgICAgICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgICAgIG1lc3NhZ2UtPndQYXJhbSA9
IHdQYXJhbTsKKyAgICAgICAgbWVzc2FnZS0+bFBhcmFtID0gbFBhcmFtOworICAgICAgICBtZXNz
YWdlLT5uZXh0ID0gMDsKKworICAgICAgICBpZiAobV9iYWNrKQorICAgICAgICAgICAgbV9iYWNr
LT5uZXh0ID0gbWVzc2FnZTsKKyAgICAgICAgbV9iYWNrID0gbWVzc2FnZTsKKyAgICAgICAgaWYg
KCFtX2Zyb250KQorICAgICAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7CisKKyAgICAgICAgaWYg
KCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX21lc3Nh
Z2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAg
IFhJRCBoV25kOworICAgICAgICBndWludCBtc2c7CisgICAgICAgIGd1aW50IHdQYXJhbTsKKyAg
ICAgICAgZ2xvbmcgbFBhcmFtOworCisgICAgICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0
OworICAgIH07CisgICAgCisgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKFRpbWVy
PFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+KikKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3Nh
Z2UqIG1lc3NhZ2UgPSBtX2Zyb250OworICAgICAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsK
KyAgICAgICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrID0gMDsK
KworCS8vICAgICAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJv
YygpLCBtZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2Fn
ZS0+bFBhcmFtKTsKKworICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICBp
ZiAobV9mcm9udCkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVT
aG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCisgICAgUGx1Z2luTWVz
c2FnZSogYWxsb2NhdGVNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgKm1l
c3NhZ2U7CisKKyAgICAgICAgaWYgKG1fZnJlZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgICAg
ICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxp
bmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdlOworCisgICAgICAgIHJldHVybiBtZXNzYWdlOwor
ICAgIH0KKworICAgIGJvb2wgaXNJbmxpbmVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2Up
IAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0g
JiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOwor
ICAgIH0KKworICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisg
ICAgeworICAgICAgICBpZiAoaXNJbmxpbmVNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgICAg
ICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2Zy
ZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ZGVsZXRlIG1lc3NhZ2U7CisgICAgfQorCisgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3
OworICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2Zyb250
OworCisgICAgc3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7CisgICAgUGx1
Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICBQbHVn
aW5NZXNzYWdlKiBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKworICAgIFRpbWVyPFBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRocm90dGxlVGltZXI7Cit9OworCitzdGF0aWMgU3Ry
aW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
aWYgKCF1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQg
c3RyaW5nCisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJp
bmcoKS5taWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJy
ZW50UGx1Z2luVmlldyA9IDA7CisKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3V2luZG93
Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5W
aWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dz
IE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBh
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0
OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dS
ZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgp
LmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0g
d2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCks
IC1tX3dpbmRvd1JlY3QueSgpKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dD
bGlwUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5k
cy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFr
ZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxh
eWVyIGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3Qo
cGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07Cisg
ICAgaWYgKG1fd2lkZ2V0KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dp
ZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFk
ZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
eworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQp
LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGd0a194
dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3Qu
aGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gY2xpcFJl
Y3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPnByaW50aW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lR2VvbWV0cnkoKSkKKyAg
ICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworCisgICAgaWYgKHBhcmVudCgp
KQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3coKTsKKyAgICBzZXROUFdpbmRv
d1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Z2VvbWV0cnlDaGFuZ2VkKCkg
Y29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpOworICAgIHVwZGF0ZVdpbmRv
dygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3VzKCkKK3sKKyAgICAvL2lmIChY
SUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TZXRGb2N1cyh3aW5kb3cpOworCisgICAgV2lk
Z2V0OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNob3coKQoreworICAg
IG1faXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykK
KyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19TSE9XTkEpOworCisgICAgV2lkZ2V0OjpzaG93
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUg
PSBmYWxzZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1Nob3dX
aW5kb3cod2luZG93LCBTV19ISURFKTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogbnVsbFBs
dWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2lu
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAg
IEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55
KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7
CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSAtIGltYWdlUmVj
dC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLmhlaWdo
dCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFnZVJlY3QubW92ZSh4T2Zm
c2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlw
KHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1h
Z2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8g
RHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVn
aW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUg
WGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3
YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIHNldE5QV2luZG93
UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
czsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZu
cEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAg
ICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBpdCBvbiAqLworICAgIC8qCisgICAg
bnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAKKworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZ
RE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlV
UDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7CisgICAgfQorICAgICovCisKKyAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisvL2V4dGVybiBib29sIGlnbm9yZU5l
eHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVz
aXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+
cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8qCisgICAgbnBFdmVudC5sUGFyYW0g
PSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisg
ICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NP
TlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlbW92ZUV2ZW50
IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVudCB8fCAKKyAgICAgICAg
ZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbkRvd24oKSkKKyAgICAg
ICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBM
ZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19MQlVU
VE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1p
ZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTUJV
VFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBS
aWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJV
VFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkgeworICAgICAgICBzd2l0
Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKworICAgICAgICAgICAgICAgIC8v
IEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9N
QlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7Cisg
ICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xC
VVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQu
ZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBh
bHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAorICAg
IC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJz
b3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICAvL2lnbm9yZU5leHRTZXRDdXJz
b3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlRXZlbnQoRXZl
bnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICBoYW5k
bGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIGVsc2Ug
aWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVu
dChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0
UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0TlBXaW5kb3dSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50
UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dp
bmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1f
bnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgo
KTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsK
KyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNX
aW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cp
OworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpzdGFydCgpCit7CisgICAgaWYgKG1f
aXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV9wbHVnaW4p
OworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVy
cm9yIG5wRXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5
cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBt
X3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOworICAgIH0KKyAgICBQbHVnaW5WaWV3
R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9O
T19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVl
OworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7CisgICAg
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKyAgICAgICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOworICAgICAg
ICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNT
dGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5T
dHJlYW1HdGs+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNo
U2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAg
ZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3Ry
ZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUg
cGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwg
MCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAg
ICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayog
UGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJl
bnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgo
KSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgo
KSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmlu
Z0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmlu
Z0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJv
eHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8
fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LT50
b1N0cmluZyhleGVjKTsKKyAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIAorICAgIHN0
cmluZyA9IHVzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBLVVJM
IHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0
KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0
VVJMKHJlcXVlc3RVUkwpOworCisgICAgaWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAg
IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFtZUxvYWRS
ZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9w
cm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFz
IGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24o
KSkgeworICAgICAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
CisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFu
Y2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRlZFN0cmluZygpLnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVx
dWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQg
b24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8g
YW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQocmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3BhcmVudEZy
YW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgp
KSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2Fu
IGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZl
cmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1l
ID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVl
KTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNO
dWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAgICAgICBpZiAoIWdl
dFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0
cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHN0cmVhbSA9IG5l
dyBQbHVnaW5TdHJlYW1HdGsodGhpcywgcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1l
TG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlv
bigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVh
bSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0
cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVkKFRp
bWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fcmVx
dWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5zaXplKCkgPiAwKTsKKworICAgIFBs
dWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3RzWzBdOworICAgIG1fcmVxdWVzdHMu
cmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNh
bGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KKyAgICAvLyBwZXJmb3JtUmVx
dWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCisgICAgaWYgKG1f
cmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90
KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAg
bV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmxvYWQoY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisgICAgS1VSTCB1cmwgPSBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICBTdHJpbmcg
dGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKKworICAgIC8vIGRvbid0IGxl
dCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgYSBk
b2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhlIGxvYWRz
IGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgorICAgIGlmIChtX3BhcmVudEZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIo
KS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAgICAodGFyZ2V0LmlzTnVsbCgpIHx8
IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpKQor
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgIFN0cmluZyBqc1N0cmlu
ZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOworICAgIGlmICghanNTdHJpbmcu
aXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9wYXJlbnRGcmFtZS0+
c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmlzSmF2YVNj
cmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfSBlbHNlIGlmICh0YXJn
ZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsKKyAgICAgICAgICAgIC8vIERvbid0
IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBzdGFuZGFsb25lIHBsdWctaW4gdGhh
dCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbiBjYXVz
ZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxhbmsgcGFnZSAoMzQyNDAzOSkuCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRhcmdldC5pc051bGwoKSkgeworICAg
ICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJnZXQuaXNOdWxsKCkgJiYgbV9wYXJl
bnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRGcmFtZSkgeworICAgICAg
ICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMgdG8g
YmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9CisKKyAgICAgICAgUGx1
Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0R3RrKGZyYW1lTG9hZFJl
cXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBzY2hlZHVsZVJl
cXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUGx1Z2luU3RyZWFtR3RrKiBz
dHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEp
OworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisKKyAgICAgICAgc3RyZWFtLT5zdGFy
dCgpOworICAgIH0KKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIEtV
UkwgbWFrZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0
cmluZykKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0cmluZyA9IERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEocmVsYXRpdmVVUkxTdHJpbmcpOworCisgICAgLy8gU3RyaXAgcmV0dXJu
IGNoYXJhY3RlcnMKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXG4nLCAiIik7CisgICAgdXJsU3Ry
aW5nLnJlcGxhY2UoJ1xyJywgIiIpOworCisgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJsU3Ry
aW5nKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkxOb3RpZnkoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgRnJh
bWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5z
ZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBs
b2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBs
dWdpblZpZXdHdGs6OmdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkK
K3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisg
ICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZl
cikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZl
ci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3Vw
cG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0g
PT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsg
MjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JM
RidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVz
W2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0g
MjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0g
PT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBw
b3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOwor
fQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lm
aWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0
ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQs
IHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5n
LiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBt
b3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1Iu
CisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3Ig
aXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5n
IGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMg
KyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxG
IGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCBy
ZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZD
ODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0
YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7
CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYg
bmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG91cHBlcihuYW1lW2ldKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFt
ZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9sb3dlcihuYW1lW2ldKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0g
Jy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5
dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxh
c3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92
ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFu
eSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVu
Z3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQg
bGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRl
cyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZp
bmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdc
cicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNp
bmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5n
dGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAg
ICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUg
PT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBo
ZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9t
TGF0aW4xKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRz
LnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAq
Y29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAg
IC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBl
b2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQg
Y29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1l
KERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwgY29sb24gLSBsaW5lKSk7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgICAgICAgICAgZm9yIChjb2xvbisr
OyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xv
biAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShj
b2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0g
aGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVl
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBvbGRWYWx1ZTsK
KyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIHRt
cCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXA7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVy
RmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1l
TG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIFN0cmluZyBm
aWxlbmFtZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoYnVmLCBsZW4pOworCisgICAg
ICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICAgICAgZmls
ZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAgICAgLy8gR2V0IGZpbGUgaW5m
bworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksIChH
RmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCS8vRklYTUUgLSBy
ZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAgICAgRklMRSogZmlsZUhhbmRsZSA9
IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIiKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChmaWxlSGFuZGxlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9O
T1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXplKCk7CisKKyAgICAgICAgaW50IGJ5
dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAg
ICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0
IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpOworICAgIAorICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAg
aWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGEr
KzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVy
KTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZm
ZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0
aW9uOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQg
Q29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAg
ICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVt
b3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0
aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcg
Y29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFM
ZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVu
Z3RoIik7CisKKyAgICAgICAgICAgICAgICBwb3N0RGF0YSArPSBsb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmllbGRzKGhlYWRlckZpZWxkcyk7Cisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShQYXNzUmVm
UHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSkpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4g
bG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30K
KworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICAv
LyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVkIHZpYSBO
UFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmws
IHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBmaWxlKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
VW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworaW50MzIg
UGx1Z2luVmlld0d0azo6d3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBi
dWZmZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAg
IHJldHVybiAtMTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpkZXN0cm95U3RyZWFtKE5Q
U3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBQbHVnaW5TdHJlYW1HdGsq
IGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5TdHJlYW1HdGsqPihzdHJlYW0tPm5k
YXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbUd0azo6b3duZXJGb3JTdHJl
YW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9J
TlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIq
IFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2lu
UXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2Vu
dCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAg
ICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0
YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJl
bnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4
dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJp
YWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkIChHVEtf
RElTQUJMRV9QTFVHSU5TKQorICAgICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsKKyAgICAg
ICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgICAgICoodm9pZCAqKil2
YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4obV93aWRnZXQp
LT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBOVlRv
b2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25n
ICopdmFsdWUpID0gMjsKKyNlbHNlCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFs
dWUpID0gMDsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYgZGVm
aW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykK
KyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAg
ICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAg
ICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRl
c2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBy
dW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAg
ICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAg
ICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93
U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmpl
Y3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisg
ICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVt
ZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxI
VE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAg
ICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3Jp
YmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRp
bWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAg
ICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAg
ICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3Jp
cHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lk
KiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworCisgICAgICAgICAgICAqKChY
SUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3co
KSktPndpbmRvdyk7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnNldFZhbHVlKE5QUFZh
cmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7
CisgICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6CisgICAgICAgICAgICBtX2lzV2lu
ZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgorICAgICAgICAgICAgbV9pc1RyYW5z
cGFyZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sK
KyAgICBBU1NFUlQodGltZXIgPT0gJm1faW52YWxpZGF0ZVRpbWVyKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXplKCk7IGkrKykKKyAgICAgICAgV2lk
Z2V0OjppbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0c1tpXSk7CisgICAgbV9pbnZhbGlkUmVj
dHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3Qt
PnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3Ap
OworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICAvKiBGSVhNRSAtIEludmFsaWRh
dGUgdGhlIHJlY3RhbmdsZQorICAgICAgICBSRUNUIGludmFsaWRSZWN0KHIpOworICAgICAgICBJ
bnZhbGlkYXRlUmVjdChtX3dpbmRvdywgJmludmFsaWRSZWN0LCBGQUxTRSk7CisgICAgICAgICov
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtUaHJvdHRs
ZUludmFsaWRhdGUpIHsKKyAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsKKyAg
ICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
ICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7CisgICAgfQorfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQorewor
ICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIEZJWE1FIC0g
SW52YWxpZGF0ZSB0aGUgcmVnaW9uCisgICAgUkVDVCByOworCisgICAgaWYgKEdldFJnbkJveChy
ZWdpb24sICZyKSA9PSAwKSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7CisgICAgKi8KK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpmb3JjZVJlZHJhdygpCit7CisgICAgLyogRklYTUUgLSBGb3Jj
ZSBhIHJlZHJhdworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIDo6VXBkYXRlV2luZG93
KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBkYXRlV2luZG93KGNvbnRhaW5pbmdX
aW5kb3coKSk7CisgICAgKi8KK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIFBsdWdpblZp
ZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBPYmplY3QqIG9iamVjdCA9IDA7CisK
KyAgICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2lu
U2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQ
dHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0
ZVJvb3RPYmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2Jq
ZWN0KCkpOworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKwor
ICAgIF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOworCisgICAgcmV0dXJuIGluc3RhbmNlOwor
fQorCitQbHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1f
cGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZh
bHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIGlmICghbV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNf
V0lER0VUKG1fd2lkZ2V0KSkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsK
KyAgICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAgbV9wYXJl
bnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAo
bV9wbHVnaW4gJiYgIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpCisg
ICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaXNj
b25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayogc3RyZWFtKQoreworICAgIEFTU0VSVChtX3N0
cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRv
d2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudDsKKyAgICAgICAgbV9x
dWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7CisgICAgICAgIG1fcXVpcmtz
IHw9IFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXM7CisgICAgfQorCisg
ICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdp
bmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0
V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmICht
X3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBtX3BsdWdpbi0+bmFtZSgp
LmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1v
ZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92
ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBs
dWctaW4uCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1Zp
ZGVvUGFyYW07CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUg
b24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6
ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBj
b3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gaW4gb3VyIE5QUnVudGlt
ZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAvLyBOUE9iamVjdCBhbmQg
cGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUgdG8gc2VlIHdoYXQgcm9v
dCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8vIFRodXMsIHdlIGRvbid0
IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBwbHVn
LWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU0ODc3
NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodCIpCisg
ICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbjsKKworICAgIC8v
IFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVj
dXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgIGlmIChtaW1lVHlw
ZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5OworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBB
U1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKworICAgIHVu
c2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJhbUNvdW50
ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0
TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICgo
bV9xdWlya3MgJiBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSAmJiBlcXVh
bElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVh
dGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFt
Q291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFy
YW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisK
K1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQo
ZWxlbWVudCkKKyAgICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX2lzU3Rh
cnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3BhcmVudEZy
YW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFz
ZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkK
KyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJG
aXJlZCkKKyAgICAsIG1faW52YWxpZGF0ZVRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjppbnZh
bGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZh
bHVlcygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorICAg
ICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAg
LCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fd2luZG93KDApCisgICAgLCBtX2xh
c3RNZXNzYWdlKDApCisgICAgLCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MoZmFsc2UpCisgICAg
LCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21hbnVhbFN0cmVhbSgwKQor
ICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCit7CisgICAgaWYg
KCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQ
bHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlID0gJm1faW5z
dGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisgICAgbV9taW1l
VHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOwor
CisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisKKyAgICBtX21v
ZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAgIHJlc2l6ZShz
aXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBpZiAobV9oYXZl
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRy
dWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAg
ICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAm
JiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgIGlmIChtX25lZWRzWEVtYmVkKSB7
CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRh
aW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lk
Z2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQobV9wYXJlbnRGcmFtZS0+dmll
dygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwpOworI2Vsc2UKKyAgICBtX3dp
ZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICBzZXRHdGtX
aWRnZXQobV93aWRnZXQpOworI2VuZGlmCisgICAgZ3RrX3dpZGdldF9zaG93IChtX3dpZGdldCk7
CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJM
RV9QTFVHSU5TKQorICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gZ19uZXcwKE5Q
U2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QsIDEpOworCisgICAgd3MtPnR5cGUgPSAwOworCisgICAg
aWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hE
SVNQTEFZKG1fd2lkZ2V0LT53aW5kb3cpOworICAgICAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VB
TF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbChtX3dpZGdldC0+d2luZG93KSk7CisgICAg
ICAgIHdzLT5kZXB0aCA9IGdka193aW5kb3dfZ2V0X3Zpc3VhbChtX3dpZGdldC0+d2luZG93KS0+
ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2Rr
X3dpbmRvd19nZXRfY29sb3JtYXAobV93aWRnZXQtPndpbmRvdykpOworICAgICAgICBtX3dpbmRv
dyA9IEdES19XSU5ET1dfWFdJTkRPVyhtX3dpZGdldC0+d2luZG93KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKyAg
ICAgICAgd3MtPnZpc3VhbCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0dmlzdWFs
OworICAgICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRl
cHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVu
dC54dGNvbG9ybWFwOworICAgICAgICBtX3dpbmRvdyA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0
d2luZG93OworCisgICAgICAgIFhGbHVzaCAod3MtPmRpc3BsYXkpOworICAgIH0KKworICAgIG1f
bnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4z
MgorICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19IV05EKG1fd2lkZ2V0LT53aW5kb3cpOworI2Vu
ZGlmCisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCop
bV93aW5kb3c7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5k
b3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisK
KyAgICBpZiAoIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwp
KQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFt
ID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1l
LT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCk7
CisgICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFu
dWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Cit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVh
bS0+ZGlkUmVjZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBB
U1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwg
ZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gK
KworI2luY2x1ZGUgPGd0ay9ndGt3aWRnZXQuaD4KKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3Rr
LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisj
aW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
S0pTIHsKKyAgICBuYW1lc3BhY2UgQmluZGluZ3MgeworICAgICAgICBjbGFzcyBJbnN0YW5jZTsK
KyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAg
IGNsYXNzIEZyYW1lOworICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OworICAgIGNsYXNzIEtl
eWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVudDsKKyAgICBjbGFzcyBLVVJMOworICAg
IGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs7CisgICAgY2xhc3MgUGx1Z2luUGFja2Fn
ZUd0azsKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrOworICAgIGNsYXNzIFBsdWdpblN0cmVh
bUd0azsKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7CisgICAgCisgICAgZW51bSBQbHVnaW5RdWlya3MgeworICAgICAgICBQbHVnaW5RdWlya1dh
bnRzTW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEZWZlckZp
cnN0U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZUlu
dmFsaWRhdGUgPSAxIDw8IDIsIAorICAgICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NW
aWRlb1BhcmFtID0gMSA8PCAzLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1
c09uZU1lc3NhZ2VzID0gMSA8PCA0LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVn
aW4gPSAxIDw8IDUsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1l
c3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwgNgorICAgIH07CisKKyAgICBlbnVtIFBsdWdpblN0YXR1
cyB7CisgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAgIFBsdWdp
blN0YXR1c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrIDogcHVibGljIFdpZGdl
dCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFt
ZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXdHdGsoKTsKKworICAgICAgICBQ
bHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsg
fQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisK
KyAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICBz
dGF0aWMgUGx1Z2luVmlld0d0ayogY3VycmVudFBsdWdpblZpZXcoKTsKKworICAgICAgICBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogYmluZGluZ0luc3RhbmNlKCk7CisKKyAgICAgICAgUGx1Z2lu
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICAgICAgLy8g
TlBOIGZ1bmN0aW9ucworICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJy
b3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKKyAgICAgICAg
TlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAg
ICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKKyAgICAgICAgaW50MzIgd3JpdGUoTlBTdHJlYW0qIHN0
cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBOUEVycm9yIGRlc3Ryb3lT
dHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKKyAgICAgICAgY29uc3Qg
Y2hhciogdXNlckFnZW50KCk7CisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgICAgICBOUEVycm9yIGdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKKyAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKKyAgICAgICAgdm9pZCBmb3Jj
ZVJlZHJhdygpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW1H
dGsqKTsKKworICAgICAgICAvLyBXaWRnZXQgZnVuY3Rpb25zCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhp
ZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKworICAgICAgICBnbG9uZyB3bmRQ
cm9jKFhJRCBoV25kLCBndWludCBtZXNzYWdlLCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSk7
CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAg
ICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3Rv
cCgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3
R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVu
LCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OworICAgICAg
ICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAg
ICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VSTCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdpblN0
YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOwor
CisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAg
ICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQg
cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgdm9pZCBp
bnZhbGlkYXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICBUaW1l
cjxQbHVnaW5WaWV3R3RrPiBtX3JlcXVlc3RUaW1lcjsKKyAgICAgICAgVGltZXI8UGx1Z2luVmll
d0d0az4gbV9pbnZhbGlkYXRlVGltZXI7CisKKyAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRocm90dGxlcjsKKworICAgICAgICB2b2lkIHVwZGF0ZVdp
bmRvdygpIGNvbnN0OworICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCopOworCisgICAgICAgIGludCBtX21vZGU7CisgICAgICAgIGludCBtX3BhcmFtQ291
bnQ7CisgICAgICAgIGNoYXIqKiBtX3BhcmFtTmFtZXM7CisgICAgICAgIGNoYXIqKiBtX3BhcmFt
VmFsdWVzOworCisgICAgICAgIENTdHJpbmcgbV9taW1lVHlwZTsKKyAgICAgICAgQ1N0cmluZyBt
X3VzZXJBZ2VudDsKKworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgTlBQX3QgbV9p
bnN0YW5jZVN0cnVjdDsKKyAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKKworICAgICAgICBI
YXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID4gbV9zdHJlYW1zOworICAgICAgICBWZWN0
b3I8UGx1Z2luUmVxdWVzdEd0ayo+IG1fcmVxdWVzdHM7CisKKyAgICAgICAgaW50IG1fcXVpcmtz
OworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lzVHJhbnNwYXJl
bnQ7CisgICAgICAgIGJvb2wgbV9pc1Zpc2libGU7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlh
bGl6ZWQ7CisKKyAgICAgICAgWElEIG1fd2luZG93OyAvLyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMK
KyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8g
YXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX3dp
bmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KKworICAgICAgICB1bnNpZ25lZCBtX2xhc3RN
ZXNzYWdlOworICAgICAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYzsKKworICAgICAg
ICBib29sIG1fbG9hZE1hbnVhbGx5OworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBt
X21hbnVhbFN0cmVhbTsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlld0d0ayogc19jdXJyZW50
UGx1Z2luVmlldzsKKworICAgICAgICBHdGtXaWRnZXQqIG1fd2lkZ2V0OworICAgICAgICBib29s
IG1fbmVlZHNYRW1iZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2lu
IHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBs
dWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBh
IE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWlu
IHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBj
dXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5W
aWV3R3RrOjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBh
bmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdl
bnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlld0d0ayogcGx1Z2luVmll
d0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFu
Y2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5W
aWV3KCk7Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1
cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAg
ICBmcmVlKHB0cik7Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2godWludDMyIHNpemUpCit7Cisg
ICAgLy8gRG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVn
aW5zKE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdl
cyk7Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0
ZVJhbmdlKiByYW5nZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9
CisKK05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQs
IG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJv
ciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5Q
Tl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2lu
dDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwg
dm9pZCogYnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJv
eVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikK
K3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0
cmVhbShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQ
IGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXdHdGsqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBO
X1VzZXJBZ2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1
bmN0aW9uIQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRo
b3V0IGhhdmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0
dXJuIDA7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9T
dGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5f
SW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQoreworICAg
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRS
ZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVn
aW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VS
ZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5j
ZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHJldHVybiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwor
fQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2
YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCog
TlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAg
IHJldHVybiAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5z
dGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworfQorCit2b2lkCitOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVt
YmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3
aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioq
KioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vu
c2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25z
IHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUg
WEVNQkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUg
T3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENv
bnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IK
KyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3Ig
bGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFi
b3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEws
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNp
b24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwg
b3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisg
KiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgor
ICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNz
YWdlcyAqLworI2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZp
bmUgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5E
T1dfREVBQ1RJVkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAg
ICAgICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVm
aW5lIFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9D
VVNfTkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAg
ICAgICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2Rl
ZmluZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01P
REFMSVRZX09OICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAg
ICAgICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJF
RF9HVEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JB
Ql9LRVkgICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAq
LworI2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVN
QkVEX0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNU
ICAgICAgICAgICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5l
IFhFTUJFRF9NQVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQTFVHSU5fREVCVUdfSF9fCisjZGVmaW5lIFBMVUdJTl9ERUJVR19IX18K
KworI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciog
ZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAvKiBOUEVSUl9O
T19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNvZGUgb2NjdXJy
ZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJbnZhbGlkIGluc3RhbmNlIHBh
c3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SICov
CisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9GVU5DVEFC
TEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAvKiBOUEVSUl9N
T0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVk
LiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAgICAiUGx1Zy1pbiBtaXNzaW5n
IG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8KKyAgICAiUGx1
Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExV
R0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBDb21tdW5pY2F0
b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9OX0VSUk9SICov
CisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9Q
QVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURf
VVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0ZJTEVfTk9U
X0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5QRVJSX05PX0RB
VEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJSX1NUUkVBTV9O
T1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2RlIgorfTsKKworI2lmbmRlZiBO
REVCVUcKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9S
KSBfUlBURjIoX0NSVF9XQVJOLCAiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGVycm9yU3RyaW5n
c1tlcnJdKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpIF9SUFRGMShfQ1JUX1dBUk4s
ICIlczogU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3b3JrLCBkaXNrIEkv
TywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIiwgX19GVU5DVElPTl9fKQor
I2Vsc2UKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSAoKHZvaWQpMCkKKyNkZWZpbmUg
TE9HX05QRVJST1IoZXJyKSAoKHZvaWQpMCkKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgX05QRlVOQ1RJT05TX0hfCisjZGVmaW5lIF9OUEZVTkNUSU9OU19IXworCisj
aW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoWFBfV0lOKQorI2RlZmluZSBFWFBPUlRF
RF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlIChfX3N0ZGNhbGwgKiBfbmFtZSkKKyNlbHNl
CisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKCogX25hbWUp
CisjZW5kaWYKKwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5v
dGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5
cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0s
IE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVh
bVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5k
b3csIE5QU3RyZWFtKiogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUE5fV3JpdGVQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVy
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgq
TlBOX1N0YXR1c1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit0
eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5fVXNlckFnZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsK
K3R5cGVkZWYgdm9pZCogKCpOUE5fTWVtQWxsb2NQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBl
ZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIpKHZvaWQqIHB0cik7Cit0eXBlZGVmIHVpbnQz
MiAoKk5QTl9NZW1GbHVzaFByb2NQdHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5Q
Tl9SZWxvYWRQbHVnaW5zUHJvY1B0cikoTlBCb29sIHJlbG9hZFBhZ2VzKTsKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9HZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQ
cm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7
Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QUmVjdCAqcmVjdCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gcmVnaW9uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9G
b3JjZVJlZHJhd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
R2V0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIq
IHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNv
bnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZh
RW52UHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0
cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQg
KCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKKwordHlw
ZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2
YXJpYW50KTsKKwordHlwZWRlZiBOUElkZW50aWZpZXIgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmll
clByb2NQdHIpIChjb25zdCBOUFVURjggKm5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX0dldFN0
cmluZ0lkZW50aWZpZXJzUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5h
bWVDb3VudCwgTlBJZGVudGlmaWVyICppZGVudGlmaWVycyk7Cit0eXBlZGVmIE5QSWRlbnRpZmll
ciAoKk5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0cikgKGludDMyX3QgaW50aWQpOwordHlwZWRl
ZiBpbnQzMl90ICgqTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBp
ZGVudGlmaWVyKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRy
KSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBOUFVURjggKigqTlBOX1VURjhG
cm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7CisKK3R5cGVk
ZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFD
bGFzcyk7Cit0eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9SZXRhaW5PYmplY3RQcm9jUHRyKSAoTlBP
YmplY3QgKm9iaik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIpIChO
UE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5w
cCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFu
dCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9JbnZva2VEZWZhdWx0UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmos
IGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVz
dWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FdmFsdWF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9i
amVjdCAqb2JqLCBOUFN0cmluZyAqc2NyaXB0LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVm
IGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwg
TlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9TZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBO
UElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50ICp2YWx1ZSk7Cit0eXBl
ZGVmIGJvb2wgKCpOUE5fSGFzUHJvcGVydHlQcm9jUHRyKSAoTlBQLCBOUE9iamVjdCAqbnBvYmos
IE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX0hhc01ldGhv
ZFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2RO
YW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBw
LCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyKSAoTlBPYmplY3QgKm9iaiwgY29uc3QgTlBVVEY4
ICptZXNzYWdlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FbnVtZXJhdGVQcm9jUHRyKSAoTlBQIG5w
cCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgKippZGVudGlmaWVyLCB1aW50MzJfdCAq
Y291bnQpOworCit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBw
bHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBh
cmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QUF9EZXN0cm95UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUp
OwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFdpbmRvd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBXaW5kb3cqIHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9v
bCBzZWVrYWJsZSwgdWludDE2KiBzdHlwZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJv
eVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24g
cmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5z
dGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZuYW1lKTsKK3R5cGVkZWYgaW50
MzIgKCpOUFBfV3JpdGVSZWFkeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVh
bSk7Cit0eXBlZGVmIGludDMyICgqTlBQX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7
Cit0eXBlZGVmIHZvaWQgKCpOUFBfUHJpbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUHJpbnQq
IHBsYXRmb3JtUHJpbnQpOwordHlwZWRlZiBpbnQxNiAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwordHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlm
eVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24s
IHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsK
K3R5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJB
Q0sodm9pZCwgTlBQX1NodXRkb3duUHJvY1B0cikodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAqKCpO
UFBfR2V0SmF2YUNsYXNzUHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZvaWQqICAgSlJJR2xvYmFs
UmVmOyAvL25vdCB1c2luZyB0aGlzIHJpZ2h0IG5vdworCit0eXBlZGVmIHN0cnVjdCBfTlBOZXRz
Y2FwZUZ1bmNzIHsKKyAgICB1aW50MTYgc2l6ZTsKKyAgICB1aW50MTYgdmVyc2lvbjsKKyAgICAK
KyAgICBOUE5fR2V0VVJMUHJvY1B0ciBnZXR1cmw7CisgICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBv
c3R1cmw7CisgICAgTlBOX1JlcXVlc3RSZWFkUHJvY1B0ciByZXF1ZXN0cmVhZDsKKyAgICBOUE5f
TmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJlYW07CisgICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsK
KyAgICBOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUE5fU3Rh
dHVzUHJvY1B0ciBzdGF0dXM7CisgICAgTlBOX1VzZXJBZ2VudFByb2NQdHIgdWFnZW50OworICAg
IE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVtYWxsb2M7CisgICAgTlBOX01lbUZyZWVQcm9jUHRyIG1l
bWZyZWU7CisgICAgTlBOX01lbUZsdXNoUHJvY1B0ciBtZW1mbHVzaDsKKyAgICBOUE5fUmVsb2Fk
UGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1Z2luczsKKyAgICBOUE5fR2V0SmF2YUVudlByb2NQdHIg
Z2V0SmF2YUVudjsKKyAgICBOUE5fR2V0SmF2YVBlZXJQcm9jUHRyIGdldEphdmFQZWVyOworICAg
IE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyIGdldHVybG5vdGlmeTsKKyAgICBOUE5fUG9zdFVSTE5v
dGlmeVByb2NQdHIgcG9zdHVybG5vdGlmeTsKKyAgICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZh
bHVlOworICAgIE5QTl9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7CisgICAgTlBOX0ludmFsaWRh
dGVSZWN0UHJvY1B0ciBpbnZhbGlkYXRlcmVjdDsKKyAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblBy
b2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsKKyAgICBOUE5fRm9yY2VSZWRyYXdQcm9jUHRyIGZvcmNl
cmVkcmF3OworICAgIAorICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJp
bmdpZGVudGlmaWVyOworICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIgZ2V0c3Ry
aW5naWRlbnRpZmllcnM7CisgICAgTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyIGdldGludGlk
ZW50aWZpZXI7CisgICAgTlBOX0lkZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlz
c3RyaW5nOworICAgIE5QTl9VVEY4RnJvbUlkZW50aWZpZXJQcm9jUHRyIHV0Zjhmcm9taWRlbnRp
ZmllcjsKKyAgICBOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9jUHRyIGludGZyb21pZGVudGlmaWVy
OworICAgIE5QTl9DcmVhdGVPYmplY3RQcm9jUHRyIGNyZWF0ZW9iamVjdDsKKyAgICBOUE5fUmV0
YWluT2JqZWN0UHJvY1B0ciByZXRhaW5vYmplY3Q7CisgICAgTlBOX1JlbGVhc2VPYmplY3RQcm9j
UHRyIHJlbGVhc2VvYmplY3Q7CisgICAgTlBOX0ludm9rZVByb2NQdHIgaW52b2tlOworICAgIE5Q
Tl9JbnZva2VEZWZhdWx0UHJvY1B0ciBpbnZva2VEZWZhdWx0OworICAgIE5QTl9FdmFsdWF0ZVBy
b2NQdHIgZXZhbHVhdGU7CisgICAgTlBOX0dldFByb3BlcnR5UHJvY1B0ciBnZXRwcm9wZXJ0eTsK
KyAgICBOUE5fU2V0UHJvcGVydHlQcm9jUHRyIHNldHByb3BlcnR5OworICAgIE5QTl9SZW1vdmVQ
cm9wZXJ0eVByb2NQdHIgcmVtb3ZlcHJvcGVydHk7CisgICAgTlBOX0hhc1Byb3BlcnR5UHJvY1B0
ciBoYXNwcm9wZXJ0eTsKKyAgICBOUE5fSGFzTWV0aG9kUHJvY1B0ciBoYXNtZXRob2Q7CisgICAg
TlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyIHJlbGVhc2V2YXJpYW50dmFsdWU7CisgICAg
TlBOX1NldEV4Y2VwdGlvblByb2NQdHIgc2V0ZXhjZXB0aW9uOworICAgIE5QTl9QdXNoUG9wdXBz
RW5hYmxlZFN0YXRlUHJvY1B0ciBwdXNocG9wdXBzZW5hYmxlZHN0YXRlOworICAgIE5QTl9Qb3BQ
b3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHBvcHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5f
RW51bWVyYXRlUHJvY1B0ciBlbnVtZXJhdGU7Cit9IE5QTmV0c2NhcGVGdW5jczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2
ZXJzaW9uOworICAgIE5QUF9OZXdQcm9jUHRyIG5ld3A7CisgICAgTlBQX0Rlc3Ryb3lQcm9jUHRy
IGRlc3Ryb3k7CisgICAgTlBQX1NldFdpbmRvd1Byb2NQdHIgc2V0d2luZG93OworICAgIE5QUF9O
ZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIg
ZGVzdHJveXN0cmVhbTsKKyAgICBOUFBfU3RyZWFtQXNGaWxlUHJvY1B0ciBhc2ZpbGU7CisgICAg
TlBQX1dyaXRlUmVhZHlQcm9jUHRyIHdyaXRlcmVhZHk7CisgICAgTlBQX1dyaXRlUHJvY1B0ciB3
cml0ZTsKKyAgICBOUFBfUHJpbnRQcm9jUHRyIHByaW50OworICAgIE5QUF9IYW5kbGVFdmVudFBy
b2NQdHIgZXZlbnQ7CisgICAgTlBQX1VSTE5vdGlmeVByb2NQdHIgdXJsbm90aWZ5OworICAgIEpS
SUdsb2JhbFJlZiBqYXZhQ2xhc3M7CisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsK
KyAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOworfSBOUFBsdWdpbkZ1bmNzOworCit0
eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShO
UE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKik7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExC
QUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyKSh2b2lkKTsKKwor
I2lmIGRlZmluZWQoWFBfTUFDT1NYKQordHlwZWRlZiB2b2lkICAgICgqQlBfQ3JlYXRlUGx1Z2lu
TUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk1h
aW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKiwgTlBQX1NodXRkb3du
UHJvY1B0ciopOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MzkgQEAK
Ky8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBj
LWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0
b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNp
b246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgor
ICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisg
KiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQor
ICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdp
ZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhl
IE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9y
CisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9y
IGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBh
Ym92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BM
LCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lz
aW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0
aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BM
IG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgor
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
KyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBH
dGtYdEJpbiB3aWRnZXQgYWxsb3dzIGZvciBYdCB0b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICog
aW5zaWRlIGEgR1RLIGFwcGxpY2F0aW9uLiAgCisgKi8KKworI2luY2x1ZGUgInhlbWJlZC5oIgor
I2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGds
aWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5o
PgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5o
PgorCisvKiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24g
YWJvdXQgd2lkZ2V0CisgICBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJV
R19YVEJJTgorCisjZGVmaW5lIFhUQklOX01BWF9FVkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAg
ICAgICAgICBndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3Rh
dGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5faW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAq
eHRiaW4pOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3Rr
V2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl91
bnJlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAg
ICAgICBndGtfeHRiaW5fZGVzdHJveSAgICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9zaHV0ZG93biAgIChHdGtPYmplY3QgICAgICAq
b2JqZWN0KTsKKworLyogWHQgYXdhcmUgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9j
bGllbnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAg
ICAgICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQg
ICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2
b2lkICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdldCB4dHBsdWcsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0
aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0
YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpl
dmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdl
IChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAg
ICAgICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB1c2Vy
X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVu
ZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVz
ZXJfZGF0YSk7IAorc3RhdGljIHZvaWQgICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdp
ZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVt
YmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGRhdGExLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb25nIHRpbWUpOyAgCitzdGF0aWMgaW50ICAgICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChE
aXNwbGF5ICpkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhFcnJvckV2ZW50ICplcnJvcik7CisvKiBGb3IgZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0
YXRpYyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOworc3RhdGljIGludCAgICAgICAgdW50
cmFwX2Vycm9yKHZvaWQpOworc3RhdGljIGludCAgICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikg
KERpc3BsYXkgKiwgWEVycm9yRXZlbnQgKik7CitzdGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vy
cm9yX2NvZGUgPSAwOworCitzdGF0aWMgR3RrV2lkZ2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5V
TEw7CisKK3N0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMg
U3RyaW5nICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAg
ICB4dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOworc3RhdGljIGdpbnQgICAgICAgICAgICAgbnVt
X3dpZGdldHMgPSAwOworCitzdGF0aWMgR1BvbGxGRCAgICAgICAgICB4dF9ldmVudF9wb2xsX2Zk
Oworc3RhdGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0
aWMgZ3VpbnQgICAgICAgICAgICB0YWcgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50
X3ByZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBnaW50
ICAgICAqdGltZW91dCkKK3sgICAKKyAgaW50IG1hc2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIo
KTsKKyAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7
CisKKyAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2
ZW50X2NoZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCit7CisgIEdES19USFJFQURTX0VOVEVS
ICgpOworCisgIGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAg
aW50IG1hc2s7CisgICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVB
RFNfTEVBVkUgKCk7CisgICAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworICB9CisKKyAgR0RLX1RI
UkVBRFNfTEVBVkUgKCk7CisgIHJldHVybiBGQUxTRTsKK30gICAKKworc3RhdGljIGdib29sZWFu
Cit4dF9ldmVudF9kaXNwYXRjaCAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAg
ICAgICAgICBHU291cmNlRnVuYyBjYWxsX2JhY2ssCisgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyICB1c2VyX2RhdGEpCit7CisgIFhFdmVudCBldmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOwor
ICBpbnQgaSA9IDA7CisKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRp
c3BsYXkpOworCisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIC8qIFByb2Nlc3Mgb25seSBy
ZWFsIFggdHJhZmZpYyBoZXJlLiAgV2Ugb25seSBsb29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBw
aXBlLCBsaW1pdCBpdCB0byBYVEJJTl9NQVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRB
cHBQcm9jZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUn
cyBubworICAgKiB0aW1lciBwcm9jZXNzaW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEg
dGltZXIgY2FsbGJhY2sgdGhhdAorICAgKiBkb2VzIGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBY
VEJJTl9NQVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBw
UHJvY2Vzc0V2ZW50KGFjLCBYdElNWEV2ZW50KTsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZF
ICgpOworCisgIHJldHVybiBUUlVFOyAgCit9CisKK3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZl
bnRfZnVuY3MgPSB7CisgIHh0X2V2ZW50X3ByZXBhcmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4
dF9ldmVudF9kaXNwYXRjaCwKKyAgZ19mcmVlLAorICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdT
b3VyY2VEdW1teU1hcnNoYWwpTlVMTAorfTsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9w
b2xsaW5nX3RpbWVyX2NhbGxiYWNrKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAq
IGRpc3BsYXk7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIw
OworCisgIGRpc3BsYXkgPSAoRGlzcGxheSAqKXVzZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlU
b0FwcGxpY2F0aW9uQ29udGV4dChkaXNwbGF5KTsKKworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3Mg
bWFueSBYdCBldmVudHMgaGVyZS4gSWYgd2UganVzdCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3
ZSBtaWdodCBzdGFydmUgb25lIG9yIG1vcmUgWHQgY29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFu
ZAorICAgICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdob2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBw
b3VyaW5nIGluLiBTbyBwcm9jZXNzCisgICAgIHVwIHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cg
YW5kIHNhdmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBUaGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0
IG91Z2h0YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVn
aW5zLgorICAqLworICB3aGlsZSAoZXZlbnRzVG9Qcm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFj
KSkKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTUFsbCk7CisgIHJldHVybiBUUlVFOwor
fQorCitHdGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtU
eXBlIHh0YmluX3R5cGUgPSAwOworCisgIGlmICgheHRiaW5fdHlwZSkgeworICAgICAgc3RhdGlj
IGNvbnN0IEd0a1R5cGVJbmZvIHh0YmluX2luZm8gPQorICAgICAgeworICAgICAgICAiR3RrWHRC
aW4iLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluKSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJp
bkNsYXNzKSwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0
LAorICAgICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMpIGd0a194dGJpbl9pbml0LAorICAgICAgICAv
KiByZXNlcnZlZF8xICovIE5VTEwsCisgICAgICAgIC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAg
ICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwKKyAgICAgIH07CisgICAgICB4dGJpbl90eXBl
ID0gZ3RrX3R5cGVfdW5pcXVlIChHVEtfVFlQRV9TT0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9
CisgIHJldHVybiB4dGJpbl90eXBlOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNz
X2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKQoreworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0
X2NsYXNzOworICBHdGtPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFz
cyA9IGd0a190eXBlX2NsYXNzIChHVEtfVFlQRV9TT0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9
IEdUS19XSURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3Rr
X3h0YmluX3JlYWxpemU7CisgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3Vu
cmVhbGl6ZTsKKworICBvYmplY3RfY2xhc3MgPSBHVEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7Cisg
IG9iamVjdF9jbGFzcy0+ZGVzdHJveSA9IGd0a194dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlz
cGxheSA9IE5VTEw7CisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0
d2luZG93ID0gMDsKKyAgeHRiaW4tPnggPSAwOworICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRp
YyB2b2lkCitndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0
QmluICAgICAqeHRiaW47CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAw
LCAyMDAgfTsKKyAgZ2ludCAgeCwgeSwgdywgaCwgZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICov
CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZWFsaXplKClcbiIp
OworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsK
KworICB4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxs
b2NhdGlvbiBiZWZvcmUgcmVhbGl6ZSAqLworICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJp
bi0+cGFyZW50X3dpbmRvdywgJngsICZ5LCAmdywgJmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0
aCA9IHc7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50
ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRp
ZgorCisgIHh0YmluLT53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4t
PmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tl
dCdzIHJlYWxpemUgKi8KKyAgKCpHVEtfV0lER0VUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxp
emUpKHdpZGdldCk7CisKKyAgLyogY3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0
X2NsaWVudF9jcmVhdGUoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dl
dF9pZChHVEtfU09DS0VUKHh0YmluKSksIAorICAgICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAg
IHh0YmluLT53aWR0aCk7CisgIHh0YmluLT54dHdpbmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNs
aWVudC5jaGlsZF93aWRnZXQpOworCisgIGdka19mbHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdl
IGhhdmUgY3JlYXRlZCB0aGUgeHQgY2xpZW50LCBhZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAg
Z3RrX3NvY2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOwor
fQorCisKKworR3RrV2lkZ2V0KgorZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2lu
ZG93LCBTdHJpbmcgKiBmKQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJf
ZGF0YTsKKworICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtf
dHlwZV9uZXcgKEdUS19UWVBFX1hUQklOKTsKKworICBpZiAoIXh0YmluKQorICAgIHJldHVybiAo
R3RrV2lkZ2V0KilOVUxMOworCisgIGlmIChmKQorICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJ
bml0aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFy
ZW50X3dpbmRvdzsKKworICB4dF9jbGllbnRfaW5pdCgmKHh0YmluLT54dGNsaWVudCksIAorICAg
ICAgR0RLX1ZJU1VBTF9YVklTVUFMKGdka19yZ2JfZ2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19D
T0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRfY29sb3JtYXAoKSksCisgICAgICBnZGtfcmdi
X2dldF92aXN1YWwoKS0+ZGVwdGgpOworCisgIGlmICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxh
eSkgeworICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVy
dGhlci4KKyAgICAgKiAgQmFpbCBvdXQuCisgICAgICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5c
biIpOworI2VuZGlmCisgICAgZ19mcmVlICh4dGJpbik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQg
KilOVUxMOworICB9CisKKyAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQs
IGhvb2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCisgICAgIG1haW5sb29wICovCisgIGlmICgwID09
IG51bV93aWRnZXRzKSB7CisgICAgaW50ICAgICAgICAgICBjbnVtYmVyOworICAgIC8qCisgICAg
ICogaG9vayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8K
KworICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVl
biBjYWxsZWQgKi8KKyAgICBHU291cmNlKiBncyA9IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVu
Y3MsIHNpemVvZihHU291cmNlKSk7CisgICAgICBpZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICB9CisgICAgCisgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJ
T1JJVFlfRVZFTlRTKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOwor
ICAgIHRhZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZk
ZWYgVk1TCisgICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxz
ZQorICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAg
ICB4dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2
ZW50cyA9IEdfSU9fSU47IAorICAgIHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8q
IGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCisKKyAgICBnX21haW5fY29udGV4dF9hZGRfcG9s
bCAoKEdNYWluQ29udGV4dCopTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4
dF9ldmVudF9wb2xsX2ZkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9MT1cpOworICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nl
c3MgWHQgdGltZXJzICovCisgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9CisgICAgICBndGtfdGlt
ZW91dF9hZGQoMjUsCisgICAgICAgICAgICAgICAgICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50
X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5
KTsKKyAgfQorCisgIC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50ICovCisgIG51bV93aWRnZXRz
Kys7CisKKyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4
dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5OworICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93
KEdUS19XSURHRVQoeHRiaW4pLCBwYXJlbnRfd2luZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNl
cl9kYXRhKHh0YmluLT5wYXJlbnRfd2luZG93LCAmdXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0
YSkKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19X
SURHRVQoeHRiaW4pKTsKKworICByZXR1cm4gR1RLX1dJREdFVCAoeHRiaW4pOworfQorCit2b2lk
CitndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIHkpCit7CisgIHh0YmluLT54ID0geDsKKyAgeHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtf
V0lER0VUX1JFQUxJWkVEICh4dGJpbikpCisgICAgZ2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VU
ICh4dGJpbiktPndpbmRvdywgeCwgeSk7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0
a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KQoreworICBBcmcgYXJnc1syXTsKKyAg
R3RrWHRCaW4gKnh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb247CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZXNp
emUgJXAgJWQgJWRcbiIsICh2b2lkICopd2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgor
CisgIHh0YmluLT5oZWlnaHQgPSBoZWlnaHQ7CisgIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKwor
ICAvLyBBdm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4gWHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8
PSAwIHx8IHdpZHRoIDw9MCkgeworICAgIGhlaWdodCA9IDE7CisgICAgd2lkdGggPSAxOworICB9
CisgIFh0U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdodCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJn
c1sxXSwgWHROd2lkdGgsICB3aWR0aCk7CisgIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50
b3Bfd2lkZ2V0LCBhcmdzLCAyKTsKKworICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9j
YXRlIHNvIHRoZSBzb2NrZXQga25vd3MgYWJvdXQgdGhlCisgICAgIHNpemUgY2hhbmdlcyAqLwor
ICBhbGxvY2F0aW9uLnggPSB4dGJpbi0+eDsKKyAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7Cisg
IGFsbG9jYXRpb24ud2lkdGggPSB4dGJpbi0+d2lkdGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0g
eHRiaW4tPmhlaWdodDsKKworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxs
b2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRn
ZXQgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBHdGtXaWRnZXQgKndpZGdldDsK
KworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4i
KTsKKyNlbmRpZgorCisgIC8qIGd0a19vYmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xk
IGEgcmVmY291bnQgb24gb2JqZWN0CisgICAqLworICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3Qp
OworICB3aWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9G
TEFHUyAod2lkZ2V0LCBHVEtfVklTSUJMRSk7CisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3
aWRnZXQpKSB7CisgICAgeHRfY2xpZW50X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOwor
ICB9CisKKyAgKCpHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdp
ZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpv
YmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHBy
aW50ZigiZ3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9m
YWlsIChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAo
b2JqZWN0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4t
Pnh0d2luZG93KSB7CisgICAgLyogcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyICovCisgICAgeHRf
Y2xpZW50X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cg
PSAwOworCisgICAgbnVtX3dpZGdldHMtLTsgLyogcmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLwor
CisgICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBydW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBY
dCBkaXNwbGF5CisgICAgICAgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlm
ICgwID09IG51bV93aWRnZXRzKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50Zigi
cmVtb3ZpbmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRp
ZgorICAgICAgZ19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwg
Jnh0X2V2ZW50X3BvbGxfZmQpOworICAgICAgZ19zb3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAg
IGd0a190aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5nX3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxp
bmdfdGltZXJfaWQgPSAwOworICAgIH0KKyAgfQorCisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50
X2NsYXNzKS0+ZGVzdHJveShvYmplY3QpOworfQorCisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50IHNpZGUKKyovCisKKy8qIElu
aXRpYWwgWHQgcGx1Z2luICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50
ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAg
ICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCisgICAgICAgICAgICAgICAgaW50IHh0ZGVw
dGgpCit7CisgIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFy
Z3ZbMV07CisgIGludCAgICAgICAgICAgbUFyZ2MgPSAwOworCisgIC8qCisgICAqIEluaXRpYWxp
emUgWHQgc3R1ZmYKKyAgICovCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRj
bGllbnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVM
TDsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1h
cCA9IDA7CisgIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxp
emVkKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0
dWZmXG4iKTsKKyNlbmRpZgorICAgIFh0VG9vbGtpdEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29u
dGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQor
ICAgICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBfY29udGV4dCwgZmFsbGJhY2spOwor
CisgICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNw
bGF5KCksIE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVM
TCwgMCwgJm1BcmdjLCBtQXJndik7CisgICAgaWYgKHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2lu
aXRpYWxpemVkID0gVFJVRTsKKyAgfQorICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxh
eTsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29s
b3JtYXAgPSB4dGNvbG9ybWFwOworICB4dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9
CisKKy8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMKKyogICovCitzdGF0aWMgdm9pZAor
eHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAsIAorICAgICAgICAgICAgICAg
ICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAKKyAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAK
KyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKK3sKKyAgaW50ICAgICAgICAgICBuOwor
ICBBcmcgICAgICAgICAgIGFyZ3NbNl07CisgIFdpZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0Owor
ICBXaWRnZXQgICAgICAgIHRvcF93aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmlu
dGYoInh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOworI2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFw
cENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVyIiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzcywgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0
b3Bfd2lkZ2V0OworCisgIC8qIHNldCBzaXplIG9mIFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAg
WHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhh
cmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdl
dCwgYXJncywgbik7CisKKyAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNz
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsK
KworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisr
OworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRB
cmcoYXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVudC0+eHRkZXB0aCApOyBuKys7Cisg
IFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBu
Kys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRoLCAwKTsgbisrOworICBYdFNl
dFZhbHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRp
c3BsYXksIEZBTFNFKTsKKyAgeHRjbGllbnQtPm9sZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUu
d2luZG93OworICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyog
dGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0
ICovCisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdh
YmxlKHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZXJp
ZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0
ZXJXaW5kb3coIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsK
KyNlbmRpZgorICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4g
dG8gYWxsIFh0IGV2ZW50cyAqLworICBYU2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwg
CisgICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAw
eDBGRkZGRik7CisgIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBY
dE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBj
aGlsZF93aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBldmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZl
bnRIYW5kbGVyKGNoaWxkX3dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+
UmVzaXplUmVkaXJlY3RNYXNrLAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAg
ICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNs
aWVudCk7CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwgCisgICAgICAgICAgICAg
ICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAg
ICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRs
ZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGll
bnQpOworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2
b2lkCit4dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBY
bGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNs
aWVudC0+eHRkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dp
ZGdldC0+Y29yZS53aW5kb3cpOworI2Vsc2UKKyAgX1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVu
dC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgeHRjbGll
bnQtPnRvcF93aWRnZXQpOworI2VuZGlmCisKKyAgLyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3
ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUud2luZG93CisgICAgIG9yIHdlIGNh
biBnZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGll
bnQtPnh0ZGlzcGxheSwgRmFsc2UpOworCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndp
bmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7CisgIFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50
LT50b3Bfd2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAgICAKK3h0X2NsaWVudF9k
ZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKK3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRn
ZXQpIHsKKyAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAw
eDBGRkZGRiwgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVy
KXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0
KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7
CisgIH0KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lk
Z2V0IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZm
ZXJbMl07CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcp
LCAiX1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKKworICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAg
ICAgICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCisgIGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhD
aGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAg
ICAgICAgICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAzMiwKKyAgICAgICAgICAgICAgICAg
ICBQcm9wTW9kZVJlcGxhY2UsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKili
dWZmZXIsIDIpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVz
c2FnZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQorewor
ICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChl
dmVudC0+eGNsaWVudC5kYXRhLmxbMV0pCisgIHsKKyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9U
SUZZOgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJ
VkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNU
SVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVN
QkVEX1dJTkRPV19ERUFDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhF
TUJFRF9NT0RBTElUWV9PTjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xp
ZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNh
c2UgWEVNQkVEX01PREFMSVRZX09GRjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigi
WHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFr
OworICBjYXNlIFhFTUJFRF9GT0NVU19JTjoKKyAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAg
IHsKKyAgICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9m
KHhldmVudCkpOworCisgICAgICBpZihldmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVE
X0ZPQ1VTX0lOKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVE
IGdvdCBmb2N1cyBpblxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0g
Rm9jdXNJbjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAg
ICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4
ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c091dDsKKyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhm
b2N1cy53aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZl
bnQueGZvY3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAg
ICAgWFNlbmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAg
ICAgICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCisgICAgICAgICAgICAgICAgIEZhbHNlLCBO
b0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgJnhldmVudCApOworICAgICAgWFN5bmMoIFh0
RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7
CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICov
Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lk
Z2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGll
bnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQt
PnR5cGUpCisgICAgeworICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4
ZW1iZWQgbWVzc2FnZSAqLworICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09
CisgICAgICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93
aWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkp
IHsKKyAgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0
YSwgZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlm
eToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwcGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVu
dF9zZXRfaW5mbyAodywgWEVNQkVEX01BUFBFRCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVu
bWFwTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAs
IDAsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgS2V5UHJlc3M6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5
IFByZXNzIEdvdCFcbiIpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitz
dGF0aWMgdm9pZAorc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgbG9uZyAgICAgIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0
YTEsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMiwgIAorICAgICAgICAg
ICAgICAgICAgICAgbG9uZyAgICAgIHRpbWUpICAgCit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBX
aW5kb3cgdz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14
dGNsaWVudC0+eHRkaXNwbGF5OworICBpbnQgZXJyb3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50
LDAsc2l6ZW9mKHhldmVudCkpOworICB4ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZl
bnQueGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2Fn
ZV90eXBlID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xp
ZW50LmZvcm1hdCA9IDMyOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAg
eGV2ZW50LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0
YS5sWzJdID0gZGV0YWlsOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7Cisg
IHhldmVudC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOworCisgIHRyYXBfZXJyb3JzICgpOwor
ICBYU2VuZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhT
eW5jIChkcHksRmFsc2UpOworCisgIGlmKChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJv
ciglZCkhISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAg
ICAgICAgICAgCitlcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICpl
cnJvcikKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJl
dHVybiAwOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7
CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9MDsKKyAgb2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJy
b3JIYW5kbGVyKGVycm9yX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50ICAgICAgICAgCit1bnRy
YXBfZXJyb3Iodm9pZCkKK3sKKyAgWFNldEVycm9ySGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7
CisgIGlmKHRyYXBwZWRfZXJyb3JfY29kZSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJp
bnRmKCJHZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxuIiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNl
bmRpZgorICB9CisgIHJldHVybiB0cmFwcGVkX2Vycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lk
ICAgICAgICAgCit4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIg
dXNlcl9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXko
dyk7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0
V2luZG93KHcpOworCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVh
dGVOb3RpZnk6CisgICAgICBpZihldmVudC0+eGNyZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7
CisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3Jl
YXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRf
Zm9jdXNfbGlzdGVuZXJfdHJlZShjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0
ZW5lciggdywgdXNlcl9kYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3Rp
Znk6CisgICAgICBpZihldmVudC0+eHJlcGFyZW50LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAg
LyogSSBhbSB0aGUgbmV3IHBhcmVudCAqLworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dU
b1dpZGdldChkcHksIGV2ZW50LT54cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxk
KQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRh
KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2lu
KSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBjaGlsZCAqLworICAgICAgfQorICAgICAgZWxz
ZSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG9sZCBwYXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1
cyhkcHksIFh0V2luZG93KHh0Y2xpZW50LT5jaGlsZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwg
ZXZlbnQtPnhidXR0b24udGltZSk7CisjZW5kaWYKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2Ug
KCB4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9G
T0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJl
YWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMg
dm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0
YSkKK3sKKyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0
Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFw
X2Vycm9ycyAoKTsKKyAgWEdldFdpbmRvd0F0dHJpYnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRv
dyh3KSwgJmF0dHIpOworICBldmVudG1hc2sgPSBhdHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0
cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0
RGlzcGxheSh3KSwKKyAgICAgICAgICAgICAgIFh0V2luZG93KHcpLCAKKyAgICAgICAgICAgICAg
IGV2ZW50bWFzayk7CisKKyAgWHRBZGRFdmVudEhhbmRsZXIodywgCisgICAgICAgICAgICAgICAg
ICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAg
ICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIp
eHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQp
OworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19s
aXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29k
ZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRSZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3Ry
dWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2Vy
X2RhdGEpOworCisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEp
IAoreworICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxk
cmVuOworICBXaW5kb3cgcm9vdCwgcGFyZW50OworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXko
dHJlZXJvb3QpOworICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3
ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KKyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVy
KCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9v
dCwgdXNlcl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMoKTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3
aW4sICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFw
X2Vycm9yKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAg
IHJldHVybjsKKworICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNo
aWxkID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQp
IAorICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOwor
ICB9CisgIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2lu
UGFja2FnZUd0azo6flBsdWdpblBhY2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRl
ZCk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFs
c2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21v
ZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQoreworICAgIGludCBw
b3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmls
ZU5hbWUgPSBtX3BhdGgucmlnaHQobV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlR3RrOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dl
dE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0
eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1l
RGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxp
dChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0g
U3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9u
cyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07
IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRl
bnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVsw
XSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRh
WzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAg
ICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURl
c2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9H
ZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9
PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVy
ID0gMDsKKyAgICBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25T
dHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xv
YWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEo
KSwgR19NT0RVTEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXpl
RnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVs
ZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6
ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9u
IiwgKHZvaWQqKikmbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJv
bChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworICAg
IGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmbV9OUFBf
R2V0VmFsdWUpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVEZXNj
cmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRvd24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAgICAgICBn
b3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVn
aW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNz
KTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1
cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9S
ZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFt
OworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1
bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9V
c2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7Cisg
ICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1
bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBs
dWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3Rp
ZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkg
PSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9H
ZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247
CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNz
LnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9O
UE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVu
dGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAg
IG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZy
b21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3Jl
YXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWlu
T2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VP
YmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9i
cm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHBy
b3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9w
ZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVy
dHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBO
X0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0
RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRl
OworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2lu
RnVuY3MpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBh
Ym9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0Ogor
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkK
K3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVf
Y2xvc2UgKG1fbW9kdWxlKTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2lu
UGFja2FnZUd0ayogUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VH
dGsqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOwor
CisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2Fn
ZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOwor
fQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5z
aWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisg
ICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVv
Zih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3Rr
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3Rr
JiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOwor
fQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisK
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PGZjbnRsLmg+CisKKy8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2Ug
dG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3Qg
Y2xhc2ggd2l0aCB0aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisK
K3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3Ry
ZWFtTWFwJiBzdHJlYW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7
CisgICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6UGx1Z2lu
U3RyZWFtR3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSkKKyAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVz
dCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykK
KyAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90aWZpY2F0aW9u
KHNlbmROb3RpZmljYXRpb24pCisgICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0
ZWQpCisgICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fZGVsYXlEZWxpdmVyeVRp
bWVyKHRoaXMsICZQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAg
ICwgbV9kZWxpdmVyeURhdGEoMCkKKyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoMCkKKyAgICAsIG1f
cGx1Z2luRnVuY3MocGx1Z2luVmlldy0+cGx1Z2luKCktPnBsdWdpbkZ1bmNzKCkpCisgICAgLCBt
X2luc3RhbmNlKHBsdWdpblZpZXctPmluc3RhbmNlKCkpCit7CisgICAgQVNTRVJUKG1fcGx1Z2lu
Vmlldyk7CisKKyAgICBtX3N0cmVhbS51cmwgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gMDsK
KyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0uZW5kID0gMDsKKyAgICBtX3N0
cmVhbS5ub3RpZnlEYXRhID0gMDsKKyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAwOworCisg
ICAgc3RyZWFtcygpLmFkZCgmbV9zdHJlYW0sIG1faW5zdGFuY2UpOworfQorCitQbHVnaW5TdHJl
YW1HdGs6On5QbHVnaW5TdHJlYW1HdGsoKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9
IFN0cmVhbVN0YXJ0ZWQpOworICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgaWYgKG1fc3Ry
ZWFtLnVybCkKKyAgICAgICAgZnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKKworICAgIHN0cmVh
bXMoKS5yZW1vdmUoJm1fc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0
KCkKK3sKKyAgICBBU1NFUlQoIW1fbG9hZE1hbnVhbGx5KTsKKworICAgIG1fbG9hZGVyID0gTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShtX2ZyYW1lLCB0aGlzKTsKKworICAgIG1f
bG9hZGVyLT5zZXRTaG91bGRCdWZmZXJEYXRhKGZhbHNlKTsKKyAgICBtX2xvYWRlci0+ZG9jdW1l
bnRMb2FkZXIoKS0+YWRkUGx1Z0luU3RyZWFtTG9hZGVyKG1fbG9hZGVyLmdldCgpKTsKKyAgICBt
X2xvYWRlci0+bG9hZChtX3Jlc291cmNlUmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpzdG9wKCkKK3sKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKKworICAg
IGlmIChtX2xvYWRNYW51YWxseSkgeworICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAg
ICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsK
KworICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQor
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxvYWQobV9mcmFt
ZS0+bG9hZGVyKCktPmNhbmNlbGxlZEVycm9yKG1fcmVzb3VyY2VSZXF1ZXN0KSk7CisKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xvYWRlcikgeworICAgICAgICBtX2xvYWRl
ci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpzdGFydFN0cmVhbSgpCit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUg
PT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBjb25zdCBLVVJMJiByZXNwb25zZVVSTCA9
IG1fcmVzb3VyY2VSZXNwb25zZS51cmwoKTsKKworICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gp
IGV4cGVjdCB0aGF0IGphdmFzY3JpcHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0
aGlzIGlzIHRoZQorICAgIC8vIGZvcm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgor
ICAgIGlmIChyZXNwb25zZVVSTC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZh
bHNlKSkKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVjb2Rl
X3N0cmluZyhyZXNwb25zZVVSTC5kZXByZWNhdGVkU3RyaW5nKCkpLnV0ZjgoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChyZXNwb25zZVVSTC5kZXByZWNhdGVk
U3RyaW5nKCkudXRmOCgpKTsKKyAgICAKKyAgICBDU3RyaW5nIG1pbWVUeXBlU3RyID0gbV9yZXNv
dXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOworICAgIAorICAgIGxvbmcgbG9uZyBleHBl
Y3RlZENvbnRlbnRMZW5ndGggPSBtX3Jlc291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCk7CisKKyAgICBpZiAobV9yZXNvdXJjZVJlc3BvbnNlLmlzSFRUUCgpKSB7CisgICAgICAg
IFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgU3RyaW5nIHNlcGFyYXRvcigi
OiAiKTsKKworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jl
c291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOworICAgICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5n
dGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFj
dGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicpOworICAgICAgICB9CisK
KyAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKS51dGY4KCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29t
cHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4sCisgICAg
ICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5v
dCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0
NzA1OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1bTlNVUkxSZXNwb25zZSBleHBlY3RlZENvbnRl
bnRMZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMgbG9naWMuCisgICAgICAgIFN0cmluZyBjb250
ZW50RW5jb2RpbmcgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LUVuY29kaW5nIik7CisgICAgICAgIGlmICghY29udGVudEVuY29kaW5nLmlzTnVsbCgpICYmIGNv
bnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQorICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID0gLTE7CisgICAgfQorCisgICAgbV9zdHJlYW0uaGVhZGVycyA9IG1faGVhZGVycy5k
YXRhKCk7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gdGhp
czsKKyAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCAwTEwpOwor
ICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5sYXN0TW9kaWZp
ZWREYXRlKCk7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0YTsKKworICAg
IG1fdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOworICAgIG1fb2Zmc2V0ID0gMDsKKyAgICBtX3Jl
YXNvbiA9IFdlYlJlYXNvbk5vbmU7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBzdHJlYW0gaWYgZGVz
dHJveXN0cmVhbSBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG5ld3N0cmVhbSBoYW5kbGVyCisg
ICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKworICAgIE5QRXJyb3Ig
bnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0obV9pbnN0YW5jZSwgKE5QTUlNRVR5cGUp
bWltZVR5cGVTdHIuZGF0YSgpLCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zlck1vZGUpOwor
ICAgIAorICAgIC8vIElmIHRoZSBzdHJlYW0gd2FzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbCB0byBu
ZXdzdHJlYW0gd2UgcmV0dXJuCisgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0YXJ0
ZWQ7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0obnBFcnIpOworCisgICAgaWYgKG1fdHJhbnNmZXJNb2RlID09IE5QX05P
Uk1BTCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICgobV90ZW1wRmlsZUhhbmRsZSA9
IHRtcGZpbGUoKSkgIT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
U29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKworTlBQIFBsdWdpblN0
cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4g
c3RyZWFtcygpLmdldChzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6Y2FuY2Vs
QW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCit7CisgICAgUmVmUHRyPFBsdWdpblN0
cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAg
ICBzdG9wKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZXN0cm95U3RyZWFtKE5QUmVh
c29uIHJlYXNvbikKK3sKKyAgICBtX3JlYXNvbiA9IHJlYXNvbjsKKyAgICBpZiAobV9yZWFzb24g
IT0gTlBSRVNfRE9ORSkgeworICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBi
ZWluZyBzdHJlYW1lZAorICAgICAgICBpZiAobV9kZWxpdmVyeURhdGEpCisgICAgICAgICAgICBt
X2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEg
JiYgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbW9y
ZSBkYXRhIHRvIGJlIHN0cmVhbWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGRlc3Ryb3lTdHJlYW0oKTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJlYW0oKQoreworICAgIGlmIChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCAobV9yZWFzb24g
IT0gV2ViUmVhc29uTm9uZSk7CisgICAgQVNTRVJUICghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxp
dmVyeURhdGEtPnNpemUoKSA9PSAwKTsKKworICAgIGlmIChtX3RlbXBGaWxlSGFuZGxlICE9IE5V
TEwpCisgICAgICAgIGZjbG9zZShtX3RlbXBGaWxlSGFuZGxlKTsKKworICAgIGlmIChtX3N0cmVh
bS5uZGF0YSAhPSAwKSB7CisgICAgICAgIGlmIChtX3JlYXNvbiA9PSBOUFJFU19ET05FICYmICht
X3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxF
T05MWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wYXRoLmlzTnVsbCgpKTsKKworICAgICAg
ICAgICAgbV9wbHVnaW5GdW5jcy0+YXNmaWxlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9wYXRo
LmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBOUEVycm9yIG5wRXJyOworICAgICAgICBu
cEVyciA9IG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9pbnN0YW5jZSwgJm1fc3RyZWFt
LCBtX3JlYXNvbik7CisKKyAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIH0KKworICAg
IGlmIChtX3NlbmROb3RpZmljYXRpb24pCisgICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5vdGlm
eShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCku
dXRmOCgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKworICAgIG1fc3RyZWFtU3RhdGUgPSBT
dHJlYW1TdG9wcGVkOworCisgICAgLy8gZGlzY29ubmVjdFN0cmVhbSBjYW4gY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOwor
ICAgIGlmICghbV9sb2FkTWFudWFsbHkpCisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlzY29ubmVj
dFN0cmVhbSh0aGlzKTsKKworICAgIG1fcGx1Z2luVmlldyA9IDA7Cit9CisKK3ZvaWQgUGx1Z2lu
U3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+
KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fZGVsYXlEZWxpdmVyeVRpbWVyKTsK
KworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxpdmVy
RGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBk
b24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFtLm5k
YXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50MzIgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgaW50MzIg
dG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJl
ZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzIgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2lu
RnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3RyZWFtKTsKKworICAgICAgICBpZiAo
ZGVsaXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5z
dGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAt
IHRvdGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAgaW50MzIgZGF0YUxlbmd0aCA9IGRl
bGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBkYXRhID0gbV9kZWxpdmVyeURhdGEtPmRh
dGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBk
YXRhCisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGUobV9p
bnN0YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0YUxlbmd0aCwgKHZvaWQqKWRhdGEpOwor
ICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgY2Fu
Y2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihk
ZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2
ZXJ5Qnl0ZXM7CisgICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0
ZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDAp
IHsKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAg
ICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2
ZXJlZDsKKyAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsK
KyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAg
ICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAg
IGRlc3Ryb3lTdHJlYW0oKTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3Ry
ZWFtR3RrOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJl
c291cmNlUmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVu
Z3RoKCksICIiLCAiIikpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlkUmVjZWl2ZURhdGEoMCwgcmVzdWx0U3RyaW5n
LmRhdGEoKSwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9
PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRGaW5pc2hMb2FkaW5n
KDApOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVCht
X3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJl
c3BvbnNlID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdp
blN0cmVhbUd0azo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxv
YWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobG9hZGVy
ID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisgICAgCisgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0
YSkKKyAgICAgICAgbV9kZWxpdmVyeURhdGEuc2V0KG5ldyBWZWN0b3I8Y2hhcj4pOworCisgICAg
aW50IG9sZFNpemUgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIG1fZGVsaXZlcnlEYXRh
LT5yZXNpemUob2xkU2l6ZSArIGxlbmd0aCk7CisgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5k
YXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4g
Y2FuY2VscyB0aGUgc3RyZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAor
ICAgIC8vIHNvIHByb3RlY3QgaXQgaGVyZS4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBw
cm90ZWN0KHRoaXMpOworCisgICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkp
CisgICAgICAgIGRlbGl2ZXJEYXRhKCk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJl
YW1TdG9wcGVkICYmIG1fdGVtcEZpbGVIYW5kbGUgIT0gTlVMTCkgeworICAgICAgICBib29sIHJl
dHZhbCA9IGZhbHNlOworCisgICAgICAgIGlmICghcmV0dmFsIHx8IGZwdXRzKGRhdGEsIG1fdGVt
cEZpbGVIYW5kbGUpIDw9IDApCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5Q
UkVTX05FVFdPUktfRVJSKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRG
YWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJy
b3ImKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgbV9sb2FkZXIg
PSAwOworCisgICAgZGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK3ZvaWQg
UGx1Z2luU3RyZWFtR3RrOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyKiBsb2FkZXIpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNT
RVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisKKyAgICBtX2xvYWRlciA9IDA7
CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX0RPTkUpOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsg
dGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q
LQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioq
KiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4w
L0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0
byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5z
ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgK
KyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
CisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAq
IFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9u
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVm
aW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1
ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisj
aWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19F
WFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JU
Xyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQor
I2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19j
cGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRl
ZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQ
RV9YVEJJTiAgICAgICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IEdUS19YVEJJTihvYmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChH
VEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5l
IEdUS19JU19YVEJJTihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19D
TEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVu
dDsKKworc3RydWN0IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0
CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxk
X3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsK
KyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2lu
ZG93OworfTsKKworc3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0
OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRp
c3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAg
ICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAg
ICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJ
IHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0
cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9
OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7
CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFy
ZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0
YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtY
VEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3
aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0
aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFn
ZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9j
ZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMg
KmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8K
KyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAg
CisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7
ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisg
ICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRn
ZXQncyBDbGFzc1JlYyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAg
ICAgICAgLyogcGFyZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFt
ZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVh
cmtpZmllZCAgICovCisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyog
bWFya2VkIGZvciBkZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3Qg
IGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVk
ICovCisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWlu
dCByZWNvcmQgICAgICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAg
ICAgICAgICAgICAgLyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAg
RGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMg
ICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAg
ICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAg
ICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/
ICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMg
d2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFu
Y2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICov
CisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBl
dmVudCBkaXNwYXRjaGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAg
ICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRU
cmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRp
b25zICAgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAg
Lyogd2luZG93IGJvcmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAg
ICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAg
ICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBv
ZiBwb3B1cHMgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9w
b3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisg
ICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNl
IG5hbWUgICAgICAgICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAg
ICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3Jt
YXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyog
d2luZG93IElEICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAg
IGRlcHRoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAg
ICovCisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJh
Y2tncm91bmQgcGl4ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91
bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAg
Qm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBh
bmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFn
ZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0Owor
Cit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0g
V2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAv
KiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbUd0a19ICisjZGVm
aW5lIFBsdWdpblN0cmVhbUd0a19ICisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wZnVuY3Rp
b25zLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7
CisKKyAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3Ry
ZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3Rr
IDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3RyZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5TdHJl
YW1HdGsoUGx1Z2luVmlld0d0ayosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0
cmVhbUd0aygpOworICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lk
IHN0b3AoKTsKKworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBz
ZXRMb2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2Fk
TWFudWFsbHk7IH0KKworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVu
dAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBj
aGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAg
ICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBT
dHJlYW0qKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAg
ICAgIHZvaWQgZGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0
cmVhbSgpOworCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJh
bWUqIG1fZnJhbWU7CisgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4g
bV9sb2FkZXI7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAg
dm9pZCogbV9ub3RpZnlEYXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAg
ICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xv
YWRNYW51YWxseTsKKworICAgICAgICBUaW1lcjxQbHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxp
dmVyeVRpbWVyOworICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBs
dWdpblN0cmVhbUd0az4qKTsKKworICAgICAgICBPd25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVs
aXZlcnlEYXRhOworCisgICAgICAgIEZJTEUqIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAg
Y29uc3QgTlBQbHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFu
Y2U7CisgICAgICAgIHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzIgbV9vZmZz
ZXQ7CisgICAgICAgIENTdHJpbmcgbV9oZWFkZXJzOworICAgICAgICBDU3RyaW5nIG1fcGF0aDsK
KyAgICAgICAgTlBSZWFzb24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmlu
ZSBQbHVnaW5QYWNrYWdlR3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0
aW1lLmg+CisKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBh
Y2thZ2VHdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVi
bGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2lu
UGFja2FnZUd0ayogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVf
dCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlTmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlw
dGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5z
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1
Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAg
Ym9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2Fk
V2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2lu
RnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6Cisg
ICAgICAgIFBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3Qm
IGxhc3RNb2RpZmllZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9v
bCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5n
IG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBt
X2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7Cisg
ICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3Jp
cHRpb25GdW5jUHRyIG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRv
d25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1f
TlBQX0dldFZhbHVlOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAg
ICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0
IFBsdWdpblBhY2thZ2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4o
a2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0
cjxQbHVnaW5QYWNrYWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4g
ZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCks
ICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJl
IGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBk
ZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhv
dXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFj
a2FnZUd0a0hhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+
ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlR3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYg
V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNo
VHJhaXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
R3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkRhdGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lu
cygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAK
KyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFz
ZUd0azsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6
OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAg
IH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjph
ZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0
aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFz
ZUd0azo6cmVmcmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQg
b2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAg
aWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jbGVhcigpOworCisgICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdp
bnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5z
LmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQ
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1Vu
bG9hZC5yZW1vdmUoKml0KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAg
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOwor
CisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9h
ZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1
Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1
Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAg
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFw
bHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBs
dWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8g
UmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAv
LyBHZXQgTUlNRSB0eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsr
bWFwX2l0KSB7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+
Zmlyc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7
Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdp
bnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisg
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBs
dWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBj
YXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVz
OworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01Q
UGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisg
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5k
KCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
blBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBn
X2Rpcl9vcGVuKChpdC0+dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwpOworICAgICAgICBpZiAoZGly
KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgd2hpbGUgKChu
YW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcikpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfc3Ry
X2hhc19zdWZmaXgobmFtZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0
YSgpLCBuYW1lLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZUd0ayog
cGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoZmlsZW5hbWUs
IHRpbWUoTlVMTCkpOworICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOworICAgICAg
ICAgICAgICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGdfZGlyX2Nsb3NlKGRpcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBw
YXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZl
Y3RvcjxpbnQ+IHZlcnNpb247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5z
aWduZWQgZW5kUG9zOworICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcu
bGVuZ3RoKCkpIHsKKyAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVy
c2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0
cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVy
c2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgp
OworICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBz
dGFydFBvcyA9IGVuZFBvcyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisK
Ky8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25C
CitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2
ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2
ZXJzaW9uQi5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAo
dmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25z
IGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwg
anVzdCByZXR1cm4gZmFsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+
IFBsdWdpbkRhdGFiYXNlR3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IHBhdGhzOworCisgICAgZ2NoYXIqIGhvbWVQYXRoID0gZ19idWlsZF9maWxlbmFtZShn
X2dldF9ob21lX2RpcigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhz
LmFwcGVuZChob21lUGF0aCk7CisgICAgZ19mcmVlKGhvbWVQYXRoKTsKKworICAgIGNvbnN0IGdj
aGFyKiBtb3pQYXRoID0gZ19nZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQ
YXRoKSB7CisgICAgICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgs
ICI6IiwgLTEpOworCisgICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkr
KykKKyAgICAgICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAg
Z19mcmVlKHBsdWdpblBhdGhzKTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2Fs
L2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemls
bGEvcGx1Z2lucyIpOworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFi
YXNlR3RrOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25z
dAoreworICAgIHJldHVybiAhbWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNvbnRhaW5zKG1pbWVUeXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0
YWJhc2VHdGs6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAg
ICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1p
bWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJl
Z2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2lu
RGF0YWJhc2VHdGs6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQoreyAgIAorICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBp
ZiAoIW1pbWVUeXBlLmlzTnVsbCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlw
ZShtaW1lVHlwZSk7CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSB1cmwucGF0aCgpOworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJp
bmcocGF0aC5yZXZlcnNlRmluZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2lu
Rm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdp
biBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAg
ICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVy
biBwbHVnaW47Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQ
bHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1O
YW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVn
aW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3
YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWlu
CisgICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1
Z2luKHVybCwgbWltZVR5cGUpOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdH
dGsocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3Rr
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgodW5zaWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBs
dWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5m
byA9IG5ldyBQbHVnaW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+
cGx1Z2lucygpW2ldOworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBp
bmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2Fn
ZS0+ZGVzY3JpcHRpb24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWlt
ZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlv
bnMuZW5kKCk7CisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGlu
Zm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBp
dC0+Zmlyc3Q7CisgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1l
LT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBw
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyAr
PSAiLCI7CisKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0lu
SW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmlu
ZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRz
TUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJu
IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3Rl
cmVkKG1pbWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5Q
YWdlcykKK3sKKyAgICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZy
ZXNoKCk7CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
ZWxvYWQgb3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTA4NCkKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsNyBAQCBE
RVBFTkRQQVRIICs9IGVkaXRpbmcvcXQgaGlzdG9yeS9xdCBsb2FkCiBndGstcG9ydCB7CiAgICAg
eDExOnBsdWdpbnMgewogICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgTElCUyAr
PSAtbFh0CiAgICAgfQogCiAgICAgSU5DTFVERVBBVEggKz0gXApAQCAtMTcxLDYgKzE3Miw3IEBA
IGd0ay1wb3J0IHsKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRl
ci9ndGsgXAogICAgIHBhZ2UvZ3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiB9CkBAIC04
NTQsMTMgKzg1NiwzOSBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAK
IAogZ3RrLXBvcnQgeworICAhcGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9Q
TFVHSU5TPTEKKyAgfQorICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRh
YmFzZUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oIFwKKyAgICBwbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0
ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
RmFsbGJhY2tMaXN0LmNwcCAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0
LmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5Q
YWNrYWdlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcCBcCisg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBp
LmNwcAorCisgIHgxMTpwbHVnaW5zIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0
ay9ndGsyeHRiaW4uaCBcCisgICAgcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaCBcCisgICAgcGx1
Z2lucy9ndGsveGVtYmVkLmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5jCisgIH0KIH0KIAogcXQtcG9ydCB7CkBAIC05NjAsNiArOTg4LDcgQEAgcXQtcG9y
dCB7CiB9CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdp
bnMvZ3RrCiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVi
b2FyZEhlbHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAyOTA4NCkK
KysrIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
NCArMjgsMTkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIK
IAorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCop
CitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2Uo
KTsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRk
aXJzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQko
cmV2aXNpb24gMjkwODQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAw
NyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJldmlzaW9uOwogbXkg
JG9zWFZlcnNpb247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFibGVHdGtQbHVnaW5z
OwogbXkgJGlzV3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0CkBAIC00ODAsNiAr
NDgyLDIzIEBAIHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitzdWIgZW5hYmxlR3Rr
UGx1Z2lucygpCit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpOworICAgIHJldHVy
biAkZW5hYmxlR3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMo
KQoreworICAgIHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5zKTsKKworICAgIGlm
IChjaGVja0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAgICAgICRlbmFibGVH
dGtQbHVnaW5zID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9
IDE7CisgICAgfQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5lSXNXeCgpOwpAQCAt
Nzg5LDYgKzgwOCw3IEBAIHN1YiBidWlsZFFNYWtlR3RrUHJvamVjdCgkJCkKIAogICAgIG15IEBi
dWlsZEFyZ3MgPSAoIkNPTkZJRys9Z3RrLXBvcnQiKTsKICAgICBwdXNoIEBidWlsZEFyZ3MsICJD
T05GSUctPXF0IjsKKyAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUcrPXBsdWdpbnMiIGlmIGVu
YWJsZUd0a1BsdWdpbnMoKTsKIAogICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xlYW4s
IEBidWlsZEFyZ3MpOwogfQo=
</data>
<flag name="review"
          id="7940"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18331</attachid>
            <date>2008-01-08 11:55:38 -0800</date>
            <delta_ts>2008-01-09 16:14:52 -0800</delta_ts>
            <desc>Updated patch against r29305</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>171998</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTMwNSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSAkKHRvcF9zcmNkaXIpL1dlYkNvcmUgXAogCS1JICQoc3JjZGlyKS9KYXZh
U2NyaXB0Q29yZSBcCiAJLUkgJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzIFwKIAktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvd3RmIFwKQEAgLTE3MCw2ICsxNzEs
NyBAQCBnbG9iYWxfY3BwZmxhZ3MgKz0gXAogCiBpZiBUQVJHRVRfWDExCiBnbG9iYWxfY3BwZmxh
Z3MgKz0gLURYUF9VTklYCit3ZWJraXRndGtfbGRmbGFncyArPSAtbFh0CiBlbmRpZgogCiBpZiAh
RU5BQkxFX0RFQlVHCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMjkzMDUpCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9h
c3RzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDEyICs1MCwxNyBAQAogI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9y
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
d0d0ay5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAg
LCBtX3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjAsOSArMTY2
LDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxv
YWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwor
ICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFTU0VS
VChsb2FkZXItPmZyYW1lKCkpOworICAgICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0
aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1h
bGx5IGRvbmUKKyAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2
ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFi
b3V0OmJsYW5rKS4KKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlkZUVu
Y29kaW5nKCk7CisgICAgICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsK
KyAgICAgICAgaWYgKCF1c2VyQ2hvc2VuKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXIt
PnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBm
cmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2FkZXIt
PnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEpCisg
ICAgICAgICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KKwor
ICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRv
UGx1Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShs
b2FkZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdp
biA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0
YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
CkBAIC0yNTgsOCArMjg1LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVj
aWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9s
aWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNv
bnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0KiBG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisgICAgUGx1Z2luVmlld0d0ayog
cGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0
ZVBsdWdpblZpZXcoY29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAo
cGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQor
ICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIDA7CiB9CkBAIC0zMDEsOCArMzMzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFU
b1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3Rr
Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
SmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJh
c2VVUkwsCkBAIC0zMjQsNiArMzU1LDkgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJD
bGllbnQ6Om9iagogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50SW1hZ2U7
CiAKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1F
VHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0
Q29udGVudE5ldHNjYXBlUGx1Z2luOworCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9i
amVjdENvbnRlbnRGcmFtZTsKIApAQCAtNjIzLDE0ICs2NTcsMTQgQEAgU3RyaW5nIEZyYW1lTG9h
ZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5p
c2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIEFTU0VS
VChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcg
b24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBu
b3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2
ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFi
b3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+b3ZlcnJp
ZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsK
LSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9jdW1lbnRM
b2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50TG9hZGVy
LT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisKKyAg
ICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVudExvYWRl
ciwgMCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9h
ZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNw
b25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiAKQEAgLTc1Myw5ICs3ODcsMTMgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9y
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAg
ICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0g
ZmFsc2U7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2Fk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyOTMwNSkKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8
emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgor
CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTgwLDYgKzE4MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFnZW50
OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAgICAg
V2ViQ29yZTo6UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMjkzMDUpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4OSw2ICs5ODksNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXCiAgICAgc2V0dGluZ3MtPnNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZh
bWlseSgiQ291cmllciBOZXciKTsKICAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5
KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKIAogICAg
IEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOwogICAgIHdlYlZp
ZXdEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVfbmV3
KHdlYlZpZXcpKTsKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjkzMDUpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAgd2ViY29yZV9jcHBm
bGFncyArPSBcCiAJLUkgJCh0b3BfYnVpbGRkaXIpL1dlYkNvcmUvYmluZGluZ3MvanMKIAogd2Vi
a2l0Z3RrX2NwcGZsYWdzICs9IFwKKwktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MgXAogCS1JICQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCiAJLUkgJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKIAktSSAk
KHNyY2RpcikvV2ViQ29yZS9wYWdlL2d0ayBcCisJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGx1Z2lu
cy9ndGsgXAogCS1JICQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKIAktSSAk
KHNyY2RpcikvV2ViS2l0L2d0ay9XZWJWaWV3CiAKQEAgLTg0NSw2ICs4NDcsMTIgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5TdHJlYW1HdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05MDQsNiArOTEyLDExIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlX
ZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJraXRndGtf
c291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworZW5kaWYKKwog
d2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0
ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjkz
MDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50
b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9T
dG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6
UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJl
c2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi0KIENvbG9yIFdlYkNvcmU6
OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpz
ZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlzaW9uIDI5MzA1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDUgKzMwNSwy
MiBAQCB2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vCiAKIHZvaWQgV2lk
Z2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmICghcGFyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICBJbnRQb2lu
dCBsb2MgPSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRy
eSgpLmxvY2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6
ZSB0byBiZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3ogPSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgp
OworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsK
IH0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVn
aW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsK
KyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7Cisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2Fn
ZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQ
bHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5Q
YWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdp
c3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4
dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBh
dGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29u
c3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsq
IHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
OworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsK
KworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0
PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVn
aW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxl
bWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pz
X3dpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGlt
ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4K
KyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEp
ICYmICFkZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgi
CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lO
MzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNT
dGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5n
IEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7
CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1
Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBi
b29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFt
ZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5v
dGlmeURhdGEpCisgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24p
IHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVl
c3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3Rp
ZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90
aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRl
OgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1f
bm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTog
dXNlciBnZXN0dXJlCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIE1lc3NhZ2VUaHJvdHRsZVRp
bWVJbnRlcnZhbCA9IDAuMDAxOworCitjbGFzcyBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrIHsK
K3B1YmxpYzoKKyAgICBQbHVnaW5NZXNzYWdlVGhyb3R0bGVyR3RrKFBsdWdpblZpZXdHdGsqIHBs
dWdpblZpZXcpCisgICAgICAgIDogbV9wbHVnaW5WaWV3KHBsdWdpblZpZXcpCisgICAgICAgICwg
bV9iYWNrKDApLCBtX2Zyb250KDApCisgICAgICAgICwgbV9tZXNzYWdlVGhyb3R0bGVUaW1lcih0
aGlzLCAmUGx1Z2luTWVzc2FnZVRocm90dGxlckd0azo6bWVzc2FnZVRocm90dGxlVGltZXJGaXJl
ZCkKKyAgICB7CisgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGZyZWUgbGlzdCB3aXRoIG91ciBp
bmxpbmUgbWVzc2FnZXMKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bUlubGlu
ZU1lc3NhZ2VzIC0gMTsgaSsrKQorICAgICAgICAgICAgbV9pbmxpbmVNZXNzYWdlc1tpXS5uZXh0
ID0gJm1faW5saW5lTWVzc2FnZXNbaSArIDFdOworICAgICAgICBtX2lubGluZU1lc3NhZ2VzW051
bUlubGluZU1lc3NhZ2VzIC0gMV0ubmV4dCA9IDA7CisgICAgICAgIG1fZnJlZUlubGluZU1lc3Nh
Z2VzID0gJm1faW5saW5lTWVzc2FnZXNbMF07CisgICAgfQorCisgICAgflBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJHdGsoKQorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbmV4dDsKKyAgICAK
KyAgICAgICAgZm9yIChQbHVnaW5NZXNzYWdlKiBtZXNzYWdlID0gbV9mcm9udDsgbWVzc2FnZTsg
bWVzc2FnZSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBtZXNzYWdlLT5uZXh0OworICAg
ICAgICAgICAgZnJlZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIH0gICAgICAgIAorICAgIH0K
KyAgICAKKyAgICB2b2lkIGFwcGVuZE1lc3NhZ2UoWElEIGhXbmQsIGd1aW50IG1zZywgZ3VpbnQg
d1BhcmFtLCBnbG9uZyBsUGFyYW0pIAorICAgIHsKKyAgICAgICAgUGx1Z2luTWVzc2FnZSogbWVz
c2FnZSA9IGFsbG9jYXRlTWVzc2FnZSgpOworCisgICAgICAgIG1lc3NhZ2UtPmhXbmQgPSBoV25k
OworICAgICAgICBtZXNzYWdlLT5tc2cgPSBtc2c7CisgICAgICAgIG1lc3NhZ2UtPndQYXJhbSA9
IHdQYXJhbTsKKyAgICAgICAgbWVzc2FnZS0+bFBhcmFtID0gbFBhcmFtOworICAgICAgICBtZXNz
YWdlLT5uZXh0ID0gMDsKKworICAgICAgICBpZiAobV9iYWNrKQorICAgICAgICAgICAgbV9iYWNr
LT5uZXh0ID0gbWVzc2FnZTsKKyAgICAgICAgbV9iYWNrID0gbWVzc2FnZTsKKyAgICAgICAgaWYg
KCFtX2Zyb250KQorICAgICAgICAgICAgbV9mcm9udCA9IG1lc3NhZ2U7CisKKyAgICAgICAgaWYg
KCFtX21lc3NhZ2VUaHJvdHRsZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX21lc3Nh
Z2VUaHJvdHRsZVRpbWVyLnN0YXJ0T25lU2hvdChNZXNzYWdlVGhyb3R0bGVUaW1lSW50ZXJ2YWwp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUGx1Z2luTWVzc2FnZSB7CisgICAgICAg
IFhJRCBoV25kOworICAgICAgICBndWludCBtc2c7CisgICAgICAgIGd1aW50IHdQYXJhbTsKKyAg
ICAgICAgZ2xvbmcgbFBhcmFtOworCisgICAgICAgIHN0cnVjdCBQbHVnaW5NZXNzYWdlKiBuZXh0
OworICAgIH07CisgICAgCisgICAgdm9pZCBtZXNzYWdlVGhyb3R0bGVUaW1lckZpcmVkKFRpbWVy
PFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs+KikKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3Nh
Z2UqIG1lc3NhZ2UgPSBtX2Zyb250OworICAgICAgICBtX2Zyb250ID0gbV9mcm9udC0+bmV4dDsK
KyAgICAgICAgaWYgKG1lc3NhZ2UgPT0gbV9iYWNrKQorICAgICAgICAgICAgbV9iYWNrID0gMDsK
KworCS8vICAgICAgICA6OkNhbGxXaW5kb3dQcm9jKG1fcGx1Z2luVmlldy0+cGx1Z2luV25kUHJv
YygpLCBtZXNzYWdlLT5oV25kLCBtZXNzYWdlLT5tc2csIG1lc3NhZ2UtPndQYXJhbSwgbWVzc2Fn
ZS0+bFBhcmFtKTsKKworICAgICAgICBmcmVlTWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICBp
ZiAobV9mcm9udCkKKyAgICAgICAgICAgIG1fbWVzc2FnZVRocm90dGxlVGltZXIuc3RhcnRPbmVT
aG90KE1lc3NhZ2VUaHJvdHRsZVRpbWVJbnRlcnZhbCk7CisgICAgfQorCisgICAgUGx1Z2luTWVz
c2FnZSogYWxsb2NhdGVNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIFBsdWdpbk1lc3NhZ2UgKm1l
c3NhZ2U7CisKKyAgICAgICAgaWYgKG1fZnJlZUlubGluZU1lc3NhZ2VzKSB7CisgICAgICAgICAg
ICBtZXNzYWdlID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2ZyZWVJbmxp
bmVNZXNzYWdlcyA9IG1lc3NhZ2UtPm5leHQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bWVzc2FnZSA9IG5ldyBQbHVnaW5NZXNzYWdlOworCisgICAgICAgIHJldHVybiBtZXNzYWdlOwor
ICAgIH0KKworICAgIGJvb2wgaXNJbmxpbmVNZXNzYWdlKFBsdWdpbk1lc3NhZ2UqIG1lc3NhZ2Up
IAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UgPj0gJm1faW5saW5lTWVzc2FnZXNbMF0g
JiYgbWVzc2FnZSA8PSAmbV9pbmxpbmVNZXNzYWdlc1tOdW1JbmxpbmVNZXNzYWdlcyAtIDFdOwor
ICAgIH0KKworICAgIHZvaWQgZnJlZU1lc3NhZ2UoUGx1Z2luTWVzc2FnZSogbWVzc2FnZSkgCisg
ICAgeworICAgICAgICBpZiAoaXNJbmxpbmVNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgICAg
ICBtZXNzYWdlLT5uZXh0ID0gbV9mcmVlSW5saW5lTWVzc2FnZXM7CisgICAgICAgICAgICBtX2Zy
ZWVJbmxpbmVNZXNzYWdlcyA9IG1lc3NhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ZGVsZXRlIG1lc3NhZ2U7CisgICAgfQorCisgICAgUGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3
OworICAgIFBsdWdpbk1lc3NhZ2UqIG1fYmFjazsKKyAgICBQbHVnaW5NZXNzYWdlKiBtX2Zyb250
OworCisgICAgc3RhdGljIGNvbnN0IGludCBOdW1JbmxpbmVNZXNzYWdlcyA9IDQ7CisgICAgUGx1
Z2luTWVzc2FnZSBtX2lubGluZU1lc3NhZ2VzW051bUlubGluZU1lc3NhZ2VzXTsKKyAgICBQbHVn
aW5NZXNzYWdlKiBtX2ZyZWVJbmxpbmVNZXNzYWdlczsKKworICAgIFRpbWVyPFBsdWdpbk1lc3Nh
Z2VUaHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRocm90dGxlVGltZXI7Cit9OworCitzdGF0aWMgU3Ry
aW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
aWYgKCF1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQg
c3RyaW5nCisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJp
bmcoKS5taWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJy
ZW50UGx1Z2luVmlldyA9IDA7CisKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5WaWV3V2luZG93
Q2xhc3NOYW1lID0gTCJXZWJQbHVnaW5WaWV3IjsKK2NvbnN0IHdjaGFyX3QqIGtXZWJQbHVnaW5W
aWV3UHJvcGVydHkgPSBMIldlYlBsdWdpblZpZXdQcm9wZXJ0eSI7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dz
IE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBh
cmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0
OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dS
ZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgp
LmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0g
d2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCks
IC1tX3dpbmRvd1JlY3QueSgpKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dD
bGlwUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5k
cy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFr
ZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxh
eWVyIGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcg
PSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3Qo
cGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07Cisg
ICAgaWYgKG1fd2lkZ2V0KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dp
ZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFk
ZWZpbmVkKEdUS19ESVNBQkxFX1BMVUdJTlMpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
eworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQp
LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGd0a194
dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3Qu
aGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gY2xpcFJl
Y3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPnByaW50aW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lR2VvbWV0cnkoKSkKKyAg
ICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworCisgICAgaWYgKHBhcmVudCgp
KQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3coKTsKKyAgICBzZXROUFdpbmRv
d1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Z2VvbWV0cnlDaGFuZ2VkKCkg
Y29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpOworICAgIHVwZGF0ZVdpbmRv
dygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3VzKCkKK3sKKyAgICAvL2lmIChY
SUQgd2luZG93ID0gbV93aW5kb3cpCisgICAgLy9TZXRGb2N1cyh3aW5kb3cpOworCisgICAgV2lk
Z2V0OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNob3coKQoreworICAg
IG1faXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykK
KyAgICAvL1Nob3dXaW5kb3cod2luZG93LCBTV19TSE9XTkEpOworCisgICAgV2lkZ2V0OjpzaG93
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUg
PSBmYWxzZTsKKworICAgIC8vaWYgKFhJRCB3aW5kb3cgPSBtX3dpbmRvdykKKyAgICAvL1Nob3dX
aW5kb3cod2luZG93LCBTV19ISURFKTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogbnVsbFBs
dWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2lu
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAg
IEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55
KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7
CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSAtIGltYWdlUmVj
dC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLmhlaWdo
dCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFnZVJlY3QubW92ZSh4T2Zm
c2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlw
KHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1h
Z2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8g
RHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVn
aW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUg
WGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3
YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIHNldE5QV2luZG93
UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
czsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZu
cEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAg
ICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBpdCBvbiAqLworICAgIC8qCisgICAg
bnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAKKworICAgIGlmIChldmVudC0+
dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZ
RE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlV
UDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7CisgICAgfQorICAgICovCisKKyAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisvL2V4dGVybiBib29sIGlnbm9yZU5l
eHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVz
aXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+
cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8qCisgICAgbnBFdmVudC5sUGFyYW0g
PSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisg
ICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NP
TlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlbW92ZUV2ZW50
IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVudCB8fCAKKyAgICAgICAg
ZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50
ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbkRvd24oKSkKKyAgICAg
ICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBM
ZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19MQlVU
VE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1p
ZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTUJV
VFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBS
aWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJV
VFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkgeworICAgICAgICBzd2l0
Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKworICAgICAgICAgICAgICAgIC8v
IEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVu
dCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9N
QlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7Cisg
ICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xC
VVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQu
ZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBh
bHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAorICAg
IC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJz
b3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICAvL2lnbm9yZU5leHRTZXRDdXJz
b3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlRXZlbnQoRXZl
bnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICBoYW5k
bGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIGVsc2Ug
aWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVu
dChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0
UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0TlBXaW5kb3dSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50
UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dp
bmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1f
bnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgo
KTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsK
KyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNX
aW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cp
OworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpzdGFydCgpCit7CisgICAgaWYgKG1f
aXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV9wbHVnaW4p
OworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVy
cm9yIG5wRXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMp
OworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5
cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBt
X3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOworICAgIH0KKyAgICBQbHVnaW5WaWV3
R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9O
T19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVl
OworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7CisgICAg
ICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKyAgICAgICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOworICAgICAg
ICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNT
dGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW1HdGs+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5T
dHJlYW1HdGs+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNo
U2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAg
ZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3Ry
ZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUg
cGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwg
MCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAg
ICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayog
UGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJl
bnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgo
KSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgo
KSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmlu
Z0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmlu
Z0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJv
eHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8
fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LT50
b1N0cmluZyhleGVjKTsKKyAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIAorICAgIHN0
cmluZyA9IHVzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBLVVJM
IHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0
KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0
VVJMKHJlcXVlc3RVUkwpOworCisgICAgaWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAg
IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFtZUxvYWRS
ZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9w
cm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFz
IGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24o
KSkgeworICAgICAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7
CisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFu
Y2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRlZFN0cmluZygpLnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVx
dWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQg
b24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8g
YW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQocmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3BhcmVudEZy
YW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgp
KSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2Fu
IGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZl
cmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1l
ID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVl
KTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNO
dWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAgICAgICBpZiAoIWdl
dFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0
cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHN0cmVhbSA9IG5l
dyBQbHVnaW5TdHJlYW1HdGsodGhpcywgcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1l
TG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlv
bigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVh
bSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwgY3N0
cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVkKFRp
bWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fcmVx
dWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5zaXplKCkgPiAwKTsKKworICAgIFBs
dWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3RzWzBdOworICAgIG1fcmVxdWVzdHMu
cmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3JlIGNh
bGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KKyAgICAvLyBwZXJmb3JtUmVx
dWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCisgICAgaWYgKG1f
cmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90
KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7CisgICAg
bV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmxvYWQoY29uc3QgRnJhbWVMb2Fk
UmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisgICAgS1VSTCB1cmwgPSBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICBTdHJpbmcg
dGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKKworICAgIC8vIGRvbid0IGxl
dCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgYSBk
b2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhlIGxvYWRz
IGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgorICAgIGlmIChtX3BhcmVudEZy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIo
KS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAgICAodGFyZ2V0LmlzTnVsbCgpIHx8
IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpKQor
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgIFN0cmluZyBqc1N0cmlu
ZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOworICAgIGlmICghanNTdHJpbmcu
aXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9wYXJlbnRGcmFtZS0+
c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmlzSmF2YVNj
cmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfSBlbHNlIGlmICh0YXJn
ZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsKKyAgICAgICAgICAgIC8vIERvbid0
IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBzdGFuZGFsb25lIHBsdWctaW4gdGhh
dCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbiBjYXVz
ZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxhbmsgcGFnZSAoMzQyNDAzOSkuCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRhcmdldC5pc051bGwoKSkgeworICAg
ICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJnZXQuaXNOdWxsKCkgJiYgbV9wYXJl
bnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRGcmFtZSkgeworICAgICAg
ICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMgdG8g
YmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9CisKKyAgICAgICAgUGx1
Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0R3RrKGZyYW1lTG9hZFJl
cXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBzY2hlZHVsZVJl
cXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUGx1Z2luU3RyZWFtR3RrKiBz
dHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1fcGFyZW50RnJhbWUsIGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEp
OworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisKKyAgICAgICAgc3RyZWFtLT5zdGFy
dCgpOworICAgIH0KKworICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIEtV
UkwgbWFrZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0
cmluZykKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0cmluZyA9IERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEocmVsYXRpdmVVUkxTdHJpbmcpOworCisgICAgLy8gU3RyaXAgcmV0dXJu
IGNoYXJhY3RlcnMKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXG4nLCAiIik7CisgICAgdXJsU3Ry
aW5nLnJlcGxhY2UoJ1xyJywgIiIpOworCisgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJsU3Ry
aW5nKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkxOb3RpZnkoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgRnJh
bWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5z
ZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBs
b2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBs
dWdpblZpZXdHdGs6OmdldFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkK
K3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVz
b3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisg
ICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFsc2UsIDApOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZl
cikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZl
ci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3Vw
cG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0g
PT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsg
MjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JM
RidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVz
W2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0g
MjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0g
PT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBw
b3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOwor
fQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lm
aWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0
ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQs
IHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5n
LiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBt
b3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1Iu
CisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3Ig
aXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5n
IGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMg
KyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxG
IGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCBy
ZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZD
ODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0
YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7
CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYg
bmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG91cHBlcihuYW1lW2ldKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFt
ZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9sb3dlcihuYW1lW2ldKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0g
Jy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5
dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxh
c3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92
ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFu
eSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVu
Z3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQg
bGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRl
cyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZp
bmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdc
cicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNp
bmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5n
dGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAg
ICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUg
PT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBo
ZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9t
TGF0aW4xKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRz
LnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAq
Y29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAg
IC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBl
b2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQg
Y29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1l
KERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwgY29sb24gLSBsaW5lKSk7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAgICAgICAgICAgZm9yIChjb2xvbisr
OyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xv
biAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShj
b2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0g
aGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVl
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBvbGRWYWx1ZTsK
KyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIHRt
cCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXA7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVy
RmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1l
TG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIFN0cmluZyBm
aWxlbmFtZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoYnVmLCBsZW4pOworCisgICAg
ICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICAgICAgZmls
ZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAgICAgLy8gR2V0IGZpbGUgaW5m
bworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksIChH
RmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCS8vRklYTUUgLSBy
ZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAgICAgRklMRSogZmlsZUhhbmRsZSA9
IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIiKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChmaWxlSGFuZGxlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9O
T1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXplKCk7CisKKyAgICAgICAgaW50IGJ5
dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAg
ICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0
IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpOworICAgIAorICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAg
aWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGEr
KzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVy
KTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZm
ZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0
aW9uOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQg
Q29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAg
ICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVt
b3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0
aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcg
Y29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAg
ICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFM
ZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVu
Z3RoIik7CisKKyAgICAgICAgICAgICAgICBwb3N0RGF0YSArPSBsb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNl
dEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVz
dCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmllbGRzKGhlYWRlckZpZWxkcyk7Cisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShQYXNzUmVm
UHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSkpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4g
bG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30K
KworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICAv
LyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVkIHZpYSBO
UFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmws
IHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBmaWxlKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
VW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworaW50MzIg
UGx1Z2luVmlld0d0azo6d3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBi
dWZmZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAg
IHJldHVybiAtMTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpkZXN0cm95U3RyZWFtKE5Q
U3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBQbHVnaW5TdHJlYW1HdGsq
IGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5TdHJlYW1HdGsqPihzdHJlYW0tPm5k
YXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0cmVhbUd0azo6b3duZXJGb3JTdHJl
YW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9J
TlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dzZXJTdHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJl
YW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIq
IFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2lu
UXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2Vu
dCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAg
ICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0
YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJl
bnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4
dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJp
YWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpICYmICFkZWZpbmVkIChHVEtf
RElTQUJMRV9QTFVHSU5TKQorICAgICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsKKyAgICAg
ICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgICAgICoodm9pZCAqKil2
YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4obV93aWRnZXQp
LT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBOVlRv
b2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25n
ICopdmFsdWUpID0gMjsKKyNlbHNlCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFs
dWUpID0gMDsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYgZGVm
aW5lZChHREtfV0lORE9XSU5HX1gxMSkgJiYgIWRlZmluZWQoR1RLX0RJU0FCTEVfUExVR0lOUykK
KyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAg
ICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAg
ICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRl
c2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBy
dW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAg
ICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAg
ICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93
U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmpl
Y3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisg
ICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVt
ZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxI
VE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAg
ICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3Jp
YmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRp
bWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAg
ICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAg
ICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3Jp
cHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lk
KiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworCisgICAgICAgICAgICAqKChY
SUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3co
KSktPndpbmRvdyk7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnNldFZhbHVlKE5QUFZh
cmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7
CisgICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6CisgICAgICAgICAgICBtX2lzV2lu
ZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgorICAgICAgICAgICAgbV9pc1RyYW5z
cGFyZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmludmFsaWRhdGVUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sK
KyAgICBBU1NFUlQodGltZXIgPT0gJm1faW52YWxpZGF0ZVRpbWVyKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2ludmFsaWRSZWN0cy5zaXplKCk7IGkrKykKKyAgICAgICAgV2lk
Z2V0OjppbnZhbGlkYXRlUmVjdChtX2ludmFsaWRSZWN0c1tpXSk7CisgICAgbV9pbnZhbGlkUmVj
dHMuY2xlYXIoKTsKK30KKworCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWN0KE5Q
UmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3Qt
PnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3Ap
OworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICAvKiBGSVhNRSAtIEludmFsaWRh
dGUgdGhlIHJlY3RhbmdsZQorICAgICAgICBSRUNUIGludmFsaWRSZWN0KHIpOworICAgICAgICBJ
bnZhbGlkYXRlUmVjdChtX3dpbmRvdywgJmludmFsaWRSZWN0LCBGQUxTRSk7CisgICAgICAgICov
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtUaHJvdHRs
ZUludmFsaWRhdGUpIHsKKyAgICAgICAgICAgIG1faW52YWxpZFJlY3RzLmFwcGVuZChyKTsKKyAg
ICAgICAgICAgIGlmICghbV9pbnZhbGlkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
ICAgICBtX2ludmFsaWRhdGVUaW1lci5zdGFydE9uZVNob3QoMC4wMDEpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7CisgICAgfQorfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQorewor
ICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIEZJWE1FIC0g
SW52YWxpZGF0ZSB0aGUgcmVnaW9uCisgICAgUkVDVCByOworCisgICAgaWYgKEdldFJnbkJveChy
ZWdpb24sICZyKSA9PSAwKSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7CisgICAgKi8KK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjpmb3JjZVJlZHJhdygpCit7CisgICAgLyogRklYTUUgLSBGb3Jj
ZSBhIHJlZHJhdworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIDo6VXBkYXRlV2luZG93
KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIDo6VXBkYXRlV2luZG93KGNvbnRhaW5pbmdX
aW5kb3coKSk7CisgICAgKi8KK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIFBsdWdpblZp
ZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBPYmplY3QqIG9iamVjdCA9IDA7CisK
KyAgICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2lu
U2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0g
TlBFUlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQ
dHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0
ZVJvb3RPYmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2Jq
ZWN0KCkpOworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6Qmlu
ZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKwor
ICAgIF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOworCisgICAgcmV0dXJuIGluc3RhbmNlOwor
fQorCitQbHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1f
cGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZh
bHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIGlmICghbV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNf
V0lER0VUKG1fd2lkZ2V0KSkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsK
KyAgICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAgbV9wYXJl
bnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAo
bV9wbHVnaW4gJiYgIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpCisg
ICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaXNj
b25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbUd0ayogc3RyZWFtKQoreworICAgIEFTU0VSVChtX3N0
cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRv
d2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudDsKKyAgICAgICAgbV9x
dWlya3MgfD0gUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7CisgICAgICAgIG1fcXVpcmtz
IHw9IFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXM7CisgICAgfQorCisg
ICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdp
bmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0
V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmICht
X3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBtX3BsdWdpbi0+bmFtZSgp
LmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1v
ZGUgZG9lcyBub3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92
ZSB0aGF0IHBhcmFtZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBs
dWctaW4uCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1Zp
ZGVvUGFyYW07CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUg
b24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6
ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBj
b3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBt
X3F1aXJrcyB8PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gaW4gb3VyIE5QUnVudGlt
ZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAvLyBOUE9iamVjdCBhbmQg
cGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUgdG8gc2VlIHdoYXQgcm9v
dCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8vIFRodXMsIHdlIGRvbid0
IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBwbHVn
LWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU0ODc3
NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodCIpCisg
ICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbjsKKworICAgIC8v
IFByZXZlbnQgdGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVj
dXJzaXZlbHksIGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgIGlmIChtaW1lVHlw
ZSA9PSAiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5OworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBB
U1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKworICAgIHVu
c2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJhbUNvdW50
ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0
TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICgo
bV9xdWlya3MgJiBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSAmJiBlcXVh
bElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVh
dGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFt
Q291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFy
YW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisK
K1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQo
ZWxlbWVudCkKKyAgICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX2lzU3Rh
cnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3BhcmVudEZy
YW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFz
ZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkK
KyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJG
aXJlZCkKKyAgICAsIG1faW52YWxpZGF0ZVRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjppbnZh
bGlkYXRlVGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZh
bHVlcygwKQorICAgICwgbV9xdWlya3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorICAg
ICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAg
LCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fd2luZG93KDApCisgICAgLCBtX2xh
c3RNZXNzYWdlKDApCisgICAgLCBtX2lzQ2FsbGluZ1BsdWdpblduZFByb2MoZmFsc2UpCisgICAg
LCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21hbnVhbFN0cmVhbSgwKQor
ICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCit7CisgICAgaWYg
KCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQ
bHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlID0gJm1faW5z
dGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisgICAgbV9taW1l
VHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOwor
CisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisKKyAgICBtX21v
ZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAgIHJlc2l6ZShz
aXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBpZiAobV9oYXZl
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRy
dWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAg
ICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVt
YmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAm
JiAhZGVmaW5lZChHVEtfRElTQUJMRV9QTFVHSU5TKQorICAgIGlmIChtX25lZWRzWEVtYmVkKSB7
CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRh
aW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lk
Z2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQobV9wYXJlbnRGcmFtZS0+dmll
dygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwpOworI2Vsc2UKKyAgICBtX3dp
ZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9wYXJlbnRG
cmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICBzZXRHdGtX
aWRnZXQobV93aWRnZXQpOworI2VuZGlmCisgICAgZ3RrX3dpZGdldF9zaG93IChtX3dpZGdldCk7
CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKSAmJiAhZGVmaW5lZChHVEtfRElTQUJM
RV9QTFVHSU5TKQorICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gZ19uZXcwKE5Q
U2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QsIDEpOworCisgICAgd3MtPnR5cGUgPSAwOworCisgICAg
aWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hE
SVNQTEFZKG1fd2lkZ2V0LT53aW5kb3cpOworICAgICAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VB
TF9YVklTVUFMKGdka193aW5kb3dfZ2V0X3Zpc3VhbChtX3dpZGdldC0+d2luZG93KSk7CisgICAg
ICAgIHdzLT5kZXB0aCA9IGdka193aW5kb3dfZ2V0X3Zpc3VhbChtX3dpZGdldC0+d2luZG93KS0+
ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2Rr
X3dpbmRvd19nZXRfY29sb3JtYXAobV93aWRnZXQtPndpbmRvdykpOworICAgICAgICBtX3dpbmRv
dyA9IEdES19XSU5ET1dfWFdJTkRPVyhtX3dpZGdldC0+d2luZG93KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB3cy0+ZGlzcGxheSA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKyAg
ICAgICAgd3MtPnZpc3VhbCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0dmlzdWFs
OworICAgICAgICB3cy0+ZGVwdGggPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRl
cHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVu
dC54dGNvbG9ybWFwOworICAgICAgICBtX3dpbmRvdyA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0
d2luZG93OworCisgICAgICAgIFhGbHVzaCAod3MtPmRpc3BsYXkpOworICAgIH0KKworICAgIG1f
bnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4z
MgorICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19IV05EKG1fd2lkZ2V0LT53aW5kb3cpOworI2Vu
ZGlmCisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCop
bV93aW5kb3c7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5k
b3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisK
KyAgICBpZiAoIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwp
KQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3Rh
dHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKK3sKKyAgICBBU1NFUlQoIW1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFt
ID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1l
LT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCk7
CisgICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFu
dWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Cit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVh
bS0+ZGlkUmVjZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBB
U1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwg
ZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gK
KworI2luY2x1ZGUgPGd0ay9ndGt3aWRnZXQuaD4KKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3Rr
LmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisj
aW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
S0pTIHsKKyAgICBuYW1lc3BhY2UgQmluZGluZ3MgeworICAgICAgICBjbGFzcyBJbnN0YW5jZTsK
KyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAg
IGNsYXNzIEZyYW1lOworICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OworICAgIGNsYXNzIEtl
eWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVudDsKKyAgICBjbGFzcyBLVVJMOworICAg
IGNsYXNzIFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJHdGs7CisgICAgY2xhc3MgUGx1Z2luUGFja2Fn
ZUd0azsKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrOworICAgIGNsYXNzIFBsdWdpblN0cmVh
bUd0azsKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7CisgICAgCisgICAgZW51bSBQbHVnaW5RdWlya3MgeworICAgICAgICBQbHVnaW5RdWlya1dh
bnRzTW96aWxsYVVzZXJBZ2VudCA9IDEgPDwgMCwKKyAgICAgICAgUGx1Z2luUXVpcmtEZWZlckZp
cnN0U2V0V2luZG93Q2FsbCA9IDEgPDwgMSwKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZUlu
dmFsaWRhdGUgPSAxIDw8IDIsIAorICAgICAgICBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NW
aWRlb1BhcmFtID0gMSA8PCAzLAorICAgICAgICBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1
c09uZU1lc3NhZ2VzID0gMSA8PCA0LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVn
aW4gPSAxIDw8IDUsCisgICAgICAgIFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9yU2FtZU1l
c3NhZ2VSZWN1cnNpdmVseSA9IDEgPDwgNgorICAgIH07CisKKyAgICBlbnVtIFBsdWdpblN0YXR1
cyB7CisgICAgICAgIFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4sCisgICAgICAgIFBsdWdp
blN0YXR1c0Nhbk5vdExvYWRQbHVnaW4sCisgICAgICAgIFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseQorICAgIH07CisKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrIDogcHVibGljIFdpZGdl
dCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFt
ZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXdHdGsoKTsKKworICAgICAgICBQ
bHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsg
fQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisK
KyAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICBz
dGF0aWMgUGx1Z2luVmlld0d0ayogY3VycmVudFBsdWdpblZpZXcoKTsKKworICAgICAgICBLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogYmluZGluZ0luc3RhbmNlKCk7CisKKyAgICAgICAgUGx1Z2lu
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICAgICAgLy8g
TlBOIGZ1bmN0aW9ucworICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJy
b3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKKyAgICAgICAg
TlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlE
YXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAg
ICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKKyAgICAgICAgaW50MzIgd3JpdGUoTlBTdHJlYW0qIHN0
cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBOUEVycm9yIGRlc3Ryb3lT
dHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKKyAgICAgICAgY29uc3Qg
Y2hhciogdXNlckFnZW50KCk7CisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworICAgICAgICBOUEVycm9yIGdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKKyAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKKyAgICAgICAgdm9pZCBmb3Jj
ZVJlZHJhdygpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW1H
dGsqKTsKKworICAgICAgICAvLyBXaWRnZXQgZnVuY3Rpb25zCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNob3coKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhp
ZGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKworICAgICAgICBnbG9uZyB3bmRQ
cm9jKFhJRCBoV25kLCBndWludCBtZXNzYWdlLCBndWludCB3UGFyYW0sIGdsb25nIGxQYXJhbSk7
CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAg
ICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3Rv
cCgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3
R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVu
LCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OworICAgICAg
ICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAg
ICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VSTCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdpblN0
YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOwor
CisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAg
ICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQg
cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgdm9pZCBp
bnZhbGlkYXRlVGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3R3RrPiopOworICAgICAgICBUaW1l
cjxQbHVnaW5WaWV3R3RrPiBtX3JlcXVlc3RUaW1lcjsKKyAgICAgICAgVGltZXI8UGx1Z2luVmll
d0d0az4gbV9pbnZhbGlkYXRlVGltZXI7CisKKyAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJHdGs+IG1fbWVzc2FnZVRocm90dGxlcjsKKworICAgICAgICB2b2lkIHVwZGF0ZVdp
bmRvdygpIGNvbnN0OworICAgICAgICB2b2lkIGRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKKyAgICAgICAgdm9pZCBwYWludE1pc3NpbmdQbHVnaW5JY29uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2b2lkIGhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCopOworICAgICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCopOworCisgICAgICAgIGludCBtX21vZGU7CisgICAgICAgIGludCBtX3BhcmFtQ291
bnQ7CisgICAgICAgIGNoYXIqKiBtX3BhcmFtTmFtZXM7CisgICAgICAgIGNoYXIqKiBtX3BhcmFt
VmFsdWVzOworCisgICAgICAgIENTdHJpbmcgbV9taW1lVHlwZTsKKyAgICAgICAgQ1N0cmluZyBt
X3VzZXJBZ2VudDsKKworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgTlBQX3QgbV9p
bnN0YW5jZVN0cnVjdDsKKyAgICAgICAgTlBXaW5kb3cgbV9ucFdpbmRvdzsKKworICAgICAgICBI
YXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID4gbV9zdHJlYW1zOworICAgICAgICBWZWN0
b3I8UGx1Z2luUmVxdWVzdEd0ayo+IG1fcmVxdWVzdHM7CisKKyAgICAgICAgaW50IG1fcXVpcmtz
OworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lzVHJhbnNwYXJl
bnQ7CisgICAgICAgIGJvb2wgbV9pc1Zpc2libGU7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlh
bGl6ZWQ7CisKKyAgICAgICAgWElEIG1fd2luZG93OyAvLyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMK
KyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8g
YXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX3dp
bmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KKworICAgICAgICB1bnNpZ25lZCBtX2xhc3RN
ZXNzYWdlOworICAgICAgICBib29sIG1faXNDYWxsaW5nUGx1Z2luV25kUHJvYzsKKworICAgICAg
ICBib29sIG1fbG9hZE1hbnVhbGx5OworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBt
X21hbnVhbFN0cmVhbTsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlld0d0ayogc19jdXJyZW50
UGx1Z2luVmlldzsKKworICAgICAgICBHdGtXaWRnZXQqIG1fd2lkZ2V0OworICAgICAgICBib29s
IG1fbmVlZHNYRW1iZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2lu
IHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBs
dWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBh
IE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWlu
IHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBj
dXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5W
aWV3R3RrOjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBh
bmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdl
bnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlld0d0ayogcGx1Z2luVmll
d0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFu
Y2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5W
aWV3KCk7Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1
cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAg
ICBmcmVlKHB0cik7Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2godWludDMyIHNpemUpCit7Cisg
ICAgLy8gRG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVn
aW5zKE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdl
cyk7Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0
ZVJhbmdlKiByYW5nZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9
CisKK05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQs
IG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJv
ciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5Q
Tl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2lu
dDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwg
dm9pZCogYnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJv
eVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikK
K3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0
cmVhbShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQ
IGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXdHdGsqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBO
X1VzZXJBZ2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1
bmN0aW9uIQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRo
b3V0IGhhdmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0
dXJuIDA7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9T
dGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5f
SW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQoreworICAg
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRS
ZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVn
aW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VS
ZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5j
ZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHJldHVybiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwor
fQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2
YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCog
TlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAg
IHJldHVybiAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5z
dGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworfQorCit2b2lkCitOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVt
YmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3
aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioq
KioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vu
c2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25z
IHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUg
WEVNQkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUg
T3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENv
bnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IK
KyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3Ig
bGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFi
b3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEws
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNp
b24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwg
b3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisg
KiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgor
ICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNz
YWdlcyAqLworI2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZp
bmUgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5E
T1dfREVBQ1RJVkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAg
ICAgICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVm
aW5lIFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9D
VVNfTkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAg
ICAgICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2Rl
ZmluZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01P
REFMSVRZX09OICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAg
ICAgICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJF
RF9HVEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JB
Ql9LRVkgICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAq
LworI2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVN
QkVEX0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNU
ICAgICAgICAgICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5l
IFhFTUJFRF9NQVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQTFVHSU5fREVCVUdfSF9fCisjZGVmaW5lIFBMVUdJTl9ERUJVR19IX18K
KworI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorCitzdGF0aWMgY29uc3QgY2hhciog
ZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1cnJlZC4iLCAvKiBOUEVSUl9O
T19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmljIGVycm9yIGNvZGUgb2NjdXJy
ZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJbnZhbGlkIGluc3RhbmNlIHBh
c3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SICov
CisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9GVU5DVEFC
TEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZhaWxlZC4iLCAvKiBOUEVSUl9N
T0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVk
LiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAgICAiUGx1Zy1pbiBtaXNzaW5n
IG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5fRVJST1IgKi8KKyAgICAiUGx1
Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURfUExV
R0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVnLWluIGFuZCBDb21tdW5pY2F0
b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJMRV9WRVJTSU9OX0VSUk9SICov
CisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9Q
QVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0lOVkFMSURf
VVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8qIE5QRVJSX0ZJTEVfTk9U
X0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRhLiIsIC8qIE5QRVJSX05PX0RB
VEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIsIC8qIE5QRVJSX1NUUkVBTV9O
T1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2RlIgorfTsKKworI2lmbmRlZiBO
REVCVUcKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9S
KSBfUlBURjIoX0NSVF9XQVJOLCAiJXM6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIGVycm9yU3RyaW5n
c1tlcnJdKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigpIF9SUFRGMShfQ1JUX1dBUk4s
ICIlczogU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3b3JrLCBkaXNrIEkv
TywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIiwgX19GVU5DVElPTl9fKQor
I2Vsc2UKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSAoKHZvaWQpMCkKKyNkZWZpbmUg
TE9HX05QRVJST1IoZXJyKSAoKHZvaWQpMCkKKyNlbmRpZgorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgX05QRlVOQ1RJT05TX0hfCisjZGVmaW5lIF9OUEZVTkNUSU9OU19IXworCisj
aW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0
ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoWFBfV0lOKQorI2RlZmluZSBFWFBPUlRF
RF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlIChfX3N0ZGNhbGwgKiBfbmFtZSkKKyNlbHNl
CisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFtZSkgX3R5cGUgKCogX25hbWUp
CisjZW5kaWYKKwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVSTE5vdGlmeVByb2NQdHIpKE5Q
UCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHZvaWQqIG5v
dGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RVUkxOb3RpZnlQcm9jUHRyKShO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hhciogd2luZG93LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKK3R5
cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIpKE5QU3RyZWFtKiBzdHJlYW0s
IE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX05ld1N0cmVh
bVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB3aW5k
b3csIE5QU3RyZWFtKiogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIgKCpOUE5fV3JpdGVQcm9jUHRy
KShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVy
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9EZXN0cm95U3RyZWFtUHJvY1B0cikoTlBQIGluc3Rh
bmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwordHlwZWRlZiB2b2lkICgq
TlBOX1N0YXR1c1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit0
eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5fVXNlckFnZW50UHJvY1B0cikoTlBQIGluc3RhbmNlKTsK
K3R5cGVkZWYgdm9pZCogKCpOUE5fTWVtQWxsb2NQcm9jUHRyKSh1aW50MzIgc2l6ZSk7Cit0eXBl
ZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIpKHZvaWQqIHB0cik7Cit0eXBlZGVmIHVpbnQz
MiAoKk5QTl9NZW1GbHVzaFByb2NQdHIpKHVpbnQzMiBzaXplKTsKK3R5cGVkZWYgdm9pZCAoKk5Q
Tl9SZWxvYWRQbHVnaW5zUHJvY1B0cikoTlBCb29sIHJlbG9hZFBhZ2VzKTsKK3R5cGVkZWYgTlBF
cnJvciAoKk5QTl9HZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fU2V0VmFsdWVQ
cm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSk7
Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlY3RQcm9jUHRyKShOUFAgaW5zdGFuY2Us
IE5QUmVjdCAqcmVjdCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlZ2lvblByb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gcmVnaW9uKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9G
b3JjZVJlZHJhd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5f
R2V0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIq
IHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0
YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNv
bnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwordHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZh
RW52UHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0
cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQg
KCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKKwordHlw
ZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2
YXJpYW50KTsKKwordHlwZWRlZiBOUElkZW50aWZpZXIgKCpOUE5fR2V0U3RyaW5nSWRlbnRpZmll
clByb2NQdHIpIChjb25zdCBOUFVURjggKm5hbWUpOwordHlwZWRlZiB2b2lkICgqTlBOX0dldFN0
cmluZ0lkZW50aWZpZXJzUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAqKm5hbWVzLCBpbnQzMl90IG5h
bWVDb3VudCwgTlBJZGVudGlmaWVyICppZGVudGlmaWVycyk7Cit0eXBlZGVmIE5QSWRlbnRpZmll
ciAoKk5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0cikgKGludDMyX3QgaW50aWQpOwordHlwZWRl
ZiBpbnQzMl90ICgqTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0cikgKE5QSWRlbnRpZmllciBp
ZGVudGlmaWVyKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRy
KSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBOUFVURjggKigqTlBOX1VURjhG
cm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRlbnRpZmllcik7CisKK3R5cGVk
ZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIpIChOUFAsIE5QQ2xhc3MgKmFD
bGFzcyk7Cit0eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9SZXRhaW5PYmplY3RQcm9jUHRyKSAoTlBP
YmplY3QgKm9iaik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZU9iamVjdFByb2NQdHIpIChO
UE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VQcm9jUHRyKSAoTlBQIG5w
cCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG1ldGhvZE5hbWUsIGNvbnN0IE5QVmFyaWFu
dCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9JbnZva2VEZWZhdWx0UHJvY1B0cikgKE5QUCBucHAsIE5QT2JqZWN0ICpvYmos
IGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAqcmVz
dWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FdmFsdWF0ZVByb2NQdHIpIChOUFAgbnBwLCBOUE9i
amVjdCAqb2JqLCBOUFN0cmluZyAqc2NyaXB0LCBOUFZhcmlhbnQgKnJlc3VsdCk7Cit0eXBlZGVm
IGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwg
TlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYg
Ym9vbCAoKk5QTl9TZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBO
UElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJpYW50ICp2YWx1ZSk7Cit0eXBl
ZGVmIGJvb2wgKCpOUE5fSGFzUHJvcGVydHlQcm9jUHRyKSAoTlBQLCBOUE9iamVjdCAqbnBvYmos
IE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwordHlwZWRlZiBib29sICgqTlBOX0hhc01ldGhv
ZFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBtZXRob2RO
YW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBw
LCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlOYW1lKTsKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyKSAoTlBPYmplY3QgKm9iaiwgY29uc3QgTlBVVEY4
ICptZXNzYWdlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FbnVtZXJhdGVQcm9jUHRyKSAoTlBQIG5w
cCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgKippZGVudGlmaWVyLCB1aW50MzJfdCAq
Y291bnQpOworCit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3UHJvY1B0cikoTlBNSU1FVHlwZSBw
bHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBpbnQxNiBhcmdjLCBjaGFyKiBh
cmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVkKTsKK3R5cGVkZWYgTlBFcnJv
ciAoKk5QUF9EZXN0cm95UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFNhdmVkRGF0YSoqIHNhdmUp
OwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFdpbmRvd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwg
TlBXaW5kb3cqIHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3U3RyZWFtUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtKiBzdHJlYW0sIE5QQm9v
bCBzZWVrYWJsZSwgdWludDE2KiBzdHlwZSk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfRGVzdHJv
eVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24g
cmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9TdHJlYW1Bc0ZpbGVQcm9jUHRyKShOUFAgaW5z
dGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZuYW1lKTsKK3R5cGVkZWYgaW50
MzIgKCpOUFBfV3JpdGVSZWFkeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVh
bSk7Cit0eXBlZGVmIGludDMyICgqTlBQX1dyaXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBsZW4sIHZvaWQqIGJ1ZmZlcik7
Cit0eXBlZGVmIHZvaWQgKCpOUFBfUHJpbnRQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUHJpbnQq
IHBsYXRmb3JtUHJpbnQpOwordHlwZWRlZiBpbnQxNiAoKk5QUF9IYW5kbGVFdmVudFByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwordHlwZWRlZiB2b2lkICgqTlBQX1VSTE5vdGlm
eVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBOUFJlYXNvbiByZWFzb24s
IHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX0dldFZhbHVlUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqcmV0X3ZhbHVlKTsK
K3R5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJB
Q0sodm9pZCwgTlBQX1NodXRkb3duUHJvY1B0cikodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAqKCpO
UFBfR2V0SmF2YUNsYXNzUHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZvaWQqICAgSlJJR2xvYmFs
UmVmOyAvL25vdCB1c2luZyB0aGlzIHJpZ2h0IG5vdworCit0eXBlZGVmIHN0cnVjdCBfTlBOZXRz
Y2FwZUZ1bmNzIHsKKyAgICB1aW50MTYgc2l6ZTsKKyAgICB1aW50MTYgdmVyc2lvbjsKKyAgICAK
KyAgICBOUE5fR2V0VVJMUHJvY1B0ciBnZXR1cmw7CisgICAgTlBOX1Bvc3RVUkxQcm9jUHRyIHBv
c3R1cmw7CisgICAgTlBOX1JlcXVlc3RSZWFkUHJvY1B0ciByZXF1ZXN0cmVhZDsKKyAgICBOUE5f
TmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJlYW07CisgICAgTlBOX1dyaXRlUHJvY1B0ciB3cml0ZTsK
KyAgICBOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUE5fU3Rh
dHVzUHJvY1B0ciBzdGF0dXM7CisgICAgTlBOX1VzZXJBZ2VudFByb2NQdHIgdWFnZW50OworICAg
IE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVtYWxsb2M7CisgICAgTlBOX01lbUZyZWVQcm9jUHRyIG1l
bWZyZWU7CisgICAgTlBOX01lbUZsdXNoUHJvY1B0ciBtZW1mbHVzaDsKKyAgICBOUE5fUmVsb2Fk
UGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1Z2luczsKKyAgICBOUE5fR2V0SmF2YUVudlByb2NQdHIg
Z2V0SmF2YUVudjsKKyAgICBOUE5fR2V0SmF2YVBlZXJQcm9jUHRyIGdldEphdmFQZWVyOworICAg
IE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyIGdldHVybG5vdGlmeTsKKyAgICBOUE5fUG9zdFVSTE5v
dGlmeVByb2NQdHIgcG9zdHVybG5vdGlmeTsKKyAgICBOUE5fR2V0VmFsdWVQcm9jUHRyIGdldHZh
bHVlOworICAgIE5QTl9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7CisgICAgTlBOX0ludmFsaWRh
dGVSZWN0UHJvY1B0ciBpbnZhbGlkYXRlcmVjdDsKKyAgICBOUE5fSW52YWxpZGF0ZVJlZ2lvblBy
b2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsKKyAgICBOUE5fRm9yY2VSZWRyYXdQcm9jUHRyIGZvcmNl
cmVkcmF3OworICAgIAorICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyUHJvY1B0ciBnZXRzdHJp
bmdpZGVudGlmaWVyOworICAgIE5QTl9HZXRTdHJpbmdJZGVudGlmaWVyc1Byb2NQdHIgZ2V0c3Ry
aW5naWRlbnRpZmllcnM7CisgICAgTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyIGdldGludGlk
ZW50aWZpZXI7CisgICAgTlBOX0lkZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIgaWRlbnRpZmllcmlz
c3RyaW5nOworICAgIE5QTl9VVEY4RnJvbUlkZW50aWZpZXJQcm9jUHRyIHV0Zjhmcm9taWRlbnRp
ZmllcjsKKyAgICBOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9jUHRyIGludGZyb21pZGVudGlmaWVy
OworICAgIE5QTl9DcmVhdGVPYmplY3RQcm9jUHRyIGNyZWF0ZW9iamVjdDsKKyAgICBOUE5fUmV0
YWluT2JqZWN0UHJvY1B0ciByZXRhaW5vYmplY3Q7CisgICAgTlBOX1JlbGVhc2VPYmplY3RQcm9j
UHRyIHJlbGVhc2VvYmplY3Q7CisgICAgTlBOX0ludm9rZVByb2NQdHIgaW52b2tlOworICAgIE5Q
Tl9JbnZva2VEZWZhdWx0UHJvY1B0ciBpbnZva2VEZWZhdWx0OworICAgIE5QTl9FdmFsdWF0ZVBy
b2NQdHIgZXZhbHVhdGU7CisgICAgTlBOX0dldFByb3BlcnR5UHJvY1B0ciBnZXRwcm9wZXJ0eTsK
KyAgICBOUE5fU2V0UHJvcGVydHlQcm9jUHRyIHNldHByb3BlcnR5OworICAgIE5QTl9SZW1vdmVQ
cm9wZXJ0eVByb2NQdHIgcmVtb3ZlcHJvcGVydHk7CisgICAgTlBOX0hhc1Byb3BlcnR5UHJvY1B0
ciBoYXNwcm9wZXJ0eTsKKyAgICBOUE5fSGFzTWV0aG9kUHJvY1B0ciBoYXNtZXRob2Q7CisgICAg
TlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyIHJlbGVhc2V2YXJpYW50dmFsdWU7CisgICAg
TlBOX1NldEV4Y2VwdGlvblByb2NQdHIgc2V0ZXhjZXB0aW9uOworICAgIE5QTl9QdXNoUG9wdXBz
RW5hYmxlZFN0YXRlUHJvY1B0ciBwdXNocG9wdXBzZW5hYmxlZHN0YXRlOworICAgIE5QTl9Qb3BQ
b3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHBvcHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAgICBOUE5f
RW51bWVyYXRlUHJvY1B0ciBlbnVtZXJhdGU7Cit9IE5QTmV0c2NhcGVGdW5jczsKKwordHlwZWRl
ZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3MgeworICAgIHVpbnQxNiBzaXplOworICAgIHVpbnQxNiB2
ZXJzaW9uOworICAgIE5QUF9OZXdQcm9jUHRyIG5ld3A7CisgICAgTlBQX0Rlc3Ryb3lQcm9jUHRy
IGRlc3Ryb3k7CisgICAgTlBQX1NldFdpbmRvd1Byb2NQdHIgc2V0d2luZG93OworICAgIE5QUF9O
ZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIg
ZGVzdHJveXN0cmVhbTsKKyAgICBOUFBfU3RyZWFtQXNGaWxlUHJvY1B0ciBhc2ZpbGU7CisgICAg
TlBQX1dyaXRlUmVhZHlQcm9jUHRyIHdyaXRlcmVhZHk7CisgICAgTlBQX1dyaXRlUHJvY1B0ciB3
cml0ZTsKKyAgICBOUFBfUHJpbnRQcm9jUHRyIHByaW50OworICAgIE5QUF9IYW5kbGVFdmVudFBy
b2NQdHIgZXZlbnQ7CisgICAgTlBQX1VSTE5vdGlmeVByb2NQdHIgdXJsbm90aWZ5OworICAgIEpS
SUdsb2JhbFJlZiBqYXZhQ2xhc3M7CisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBnZXR2YWx1ZTsK
KyAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOworfSBOUFBsdWdpbkZ1bmNzOworCit0
eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShO
UE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKik7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExC
QUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyKSh2b2lkKTsKKwor
I2lmIGRlZmluZWQoWFBfTUFDT1NYKQordHlwZWRlZiB2b2lkICAgICgqQlBfQ3JlYXRlUGx1Z2lu
TUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKK3R5cGVkZWYgTlBFcnJvciAoKk1h
aW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKiwgTlBQX1NodXRkb3du
UHJvY1B0ciopOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MzkgQEAK
Ky8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBj
LWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0
b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNp
b246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgor
ICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisg
KiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQor
ICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdp
ZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhl
IE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIK
KyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBD
b250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9y
CisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9y
IGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBh
Ym92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BM
LCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lz
aW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0
aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BM
IG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgor
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
KyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBH
dGtYdEJpbiB3aWRnZXQgYWxsb3dzIGZvciBYdCB0b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICog
aW5zaWRlIGEgR1RLIGFwcGxpY2F0aW9uLiAgCisgKi8KKworI2luY2x1ZGUgInhlbWJlZC5oIgor
I2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGds
aWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5o
PgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5o
PgorCisvKiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24g
YWJvdXQgd2lkZ2V0CisgICBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJV
R19YVEJJTgorCisjZGVmaW5lIFhUQklOX01BWF9FVkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAg
ICAgICAgICBndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3Rh
dGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5faW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAq
eHRiaW4pOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3Rr
V2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl91
bnJlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAg
ICAgICBndGtfeHRiaW5fZGVzdHJveSAgICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9zaHV0ZG93biAgIChHdGtPYmplY3QgICAgICAq
b2JqZWN0KTsKKworLyogWHQgYXdhcmUgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9j
bGllbnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAg
ICAgICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQg
ICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2
b2lkICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdldCB4dHBsdWcsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0
aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0
YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpl
dmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdl
IChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAg
ICAgICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB1c2Vy
X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVu
ZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVz
ZXJfZGF0YSk7IAorc3RhdGljIHZvaWQgICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdp
ZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVt
YmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGRhdGExLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb25nIHRpbWUpOyAgCitzdGF0aWMgaW50ICAgICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChE
aXNwbGF5ICpkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhFcnJvckV2ZW50ICplcnJvcik7CisvKiBGb3IgZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0
YXRpYyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOworc3RhdGljIGludCAgICAgICAgdW50
cmFwX2Vycm9yKHZvaWQpOworc3RhdGljIGludCAgICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikg
KERpc3BsYXkgKiwgWEVycm9yRXZlbnQgKik7CitzdGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vy
cm9yX2NvZGUgPSAwOworCitzdGF0aWMgR3RrV2lkZ2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5V
TEw7CisKK3N0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMg
U3RyaW5nICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAg
ICB4dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOworc3RhdGljIGdpbnQgICAgICAgICAgICAgbnVt
X3dpZGdldHMgPSAwOworCitzdGF0aWMgR1BvbGxGRCAgICAgICAgICB4dF9ldmVudF9wb2xsX2Zk
Oworc3RhdGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0
aWMgZ3VpbnQgICAgICAgICAgICB0YWcgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50
X3ByZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBnaW50
ICAgICAqdGltZW91dCkKK3sgICAKKyAgaW50IG1hc2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIo
KTsKKyAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7
CisKKyAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2
ZW50X2NoZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCit7CisgIEdES19USFJFQURTX0VOVEVS
ICgpOworCisgIGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAg
aW50IG1hc2s7CisgICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVB
RFNfTEVBVkUgKCk7CisgICAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworICB9CisKKyAgR0RLX1RI
UkVBRFNfTEVBVkUgKCk7CisgIHJldHVybiBGQUxTRTsKK30gICAKKworc3RhdGljIGdib29sZWFu
Cit4dF9ldmVudF9kaXNwYXRjaCAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAg
ICAgICAgICBHU291cmNlRnVuYyBjYWxsX2JhY2ssCisgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyICB1c2VyX2RhdGEpCit7CisgIFhFdmVudCBldmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOwor
ICBpbnQgaSA9IDA7CisKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRp
c3BsYXkpOworCisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIC8qIFByb2Nlc3Mgb25seSBy
ZWFsIFggdHJhZmZpYyBoZXJlLiAgV2Ugb25seSBsb29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBw
aXBlLCBsaW1pdCBpdCB0byBYVEJJTl9NQVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRB
cHBQcm9jZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUn
cyBubworICAgKiB0aW1lciBwcm9jZXNzaW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEg
dGltZXIgY2FsbGJhY2sgdGhhdAorICAgKiBkb2VzIGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBY
VEJJTl9NQVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBw
UHJvY2Vzc0V2ZW50KGFjLCBYdElNWEV2ZW50KTsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZF
ICgpOworCisgIHJldHVybiBUUlVFOyAgCit9CisKK3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZl
bnRfZnVuY3MgPSB7CisgIHh0X2V2ZW50X3ByZXBhcmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4
dF9ldmVudF9kaXNwYXRjaCwKKyAgZ19mcmVlLAorICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdT
b3VyY2VEdW1teU1hcnNoYWwpTlVMTAorfTsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9w
b2xsaW5nX3RpbWVyX2NhbGxiYWNrKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAq
IGRpc3BsYXk7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIw
OworCisgIGRpc3BsYXkgPSAoRGlzcGxheSAqKXVzZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlU
b0FwcGxpY2F0aW9uQ29udGV4dChkaXNwbGF5KTsKKworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3Mg
bWFueSBYdCBldmVudHMgaGVyZS4gSWYgd2UganVzdCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3
ZSBtaWdodCBzdGFydmUgb25lIG9yIG1vcmUgWHQgY29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFu
ZAorICAgICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdob2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBw
b3VyaW5nIGluLiBTbyBwcm9jZXNzCisgICAgIHVwIHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cg
YW5kIHNhdmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBUaGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0
IG91Z2h0YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVn
aW5zLgorICAqLworICB3aGlsZSAoZXZlbnRzVG9Qcm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFj
KSkKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTUFsbCk7CisgIHJldHVybiBUUlVFOwor
fQorCitHdGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtU
eXBlIHh0YmluX3R5cGUgPSAwOworCisgIGlmICgheHRiaW5fdHlwZSkgeworICAgICAgc3RhdGlj
IGNvbnN0IEd0a1R5cGVJbmZvIHh0YmluX2luZm8gPQorICAgICAgeworICAgICAgICAiR3RrWHRC
aW4iLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluKSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJp
bkNsYXNzKSwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0
LAorICAgICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMpIGd0a194dGJpbl9pbml0LAorICAgICAgICAv
KiByZXNlcnZlZF8xICovIE5VTEwsCisgICAgICAgIC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAg
ICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwKKyAgICAgIH07CisgICAgICB4dGJpbl90eXBl
ID0gZ3RrX3R5cGVfdW5pcXVlIChHVEtfVFlQRV9TT0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9
CisgIHJldHVybiB4dGJpbl90eXBlOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNz
X2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKQoreworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0
X2NsYXNzOworICBHdGtPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFz
cyA9IGd0a190eXBlX2NsYXNzIChHVEtfVFlQRV9TT0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9
IEdUS19XSURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3Rr
X3h0YmluX3JlYWxpemU7CisgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3Vu
cmVhbGl6ZTsKKworICBvYmplY3RfY2xhc3MgPSBHVEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7Cisg
IG9iamVjdF9jbGFzcy0+ZGVzdHJveSA9IGd0a194dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlz
cGxheSA9IE5VTEw7CisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0
d2luZG93ID0gMDsKKyAgeHRiaW4tPnggPSAwOworICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRp
YyB2b2lkCitndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0
QmluICAgICAqeHRiaW47CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAw
LCAyMDAgfTsKKyAgZ2ludCAgeCwgeSwgdywgaCwgZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICov
CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZWFsaXplKClcbiIp
OworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsK
KworICB4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxs
b2NhdGlvbiBiZWZvcmUgcmVhbGl6ZSAqLworICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJp
bi0+cGFyZW50X3dpbmRvdywgJngsICZ5LCAmdywgJmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0
aCA9IHc7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50
ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRp
ZgorCisgIHh0YmluLT53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4t
PmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tl
dCdzIHJlYWxpemUgKi8KKyAgKCpHVEtfV0lER0VUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxp
emUpKHdpZGdldCk7CisKKyAgLyogY3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0
X2NsaWVudF9jcmVhdGUoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dl
dF9pZChHVEtfU09DS0VUKHh0YmluKSksIAorICAgICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAg
IHh0YmluLT53aWR0aCk7CisgIHh0YmluLT54dHdpbmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNs
aWVudC5jaGlsZF93aWRnZXQpOworCisgIGdka19mbHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdl
IGhhdmUgY3JlYXRlZCB0aGUgeHQgY2xpZW50LCBhZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAg
Z3RrX3NvY2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOwor
fQorCisKKworR3RrV2lkZ2V0KgorZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2lu
ZG93LCBTdHJpbmcgKiBmKQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJf
ZGF0YTsKKworICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtf
dHlwZV9uZXcgKEdUS19UWVBFX1hUQklOKTsKKworICBpZiAoIXh0YmluKQorICAgIHJldHVybiAo
R3RrV2lkZ2V0KilOVUxMOworCisgIGlmIChmKQorICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJ
bml0aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFy
ZW50X3dpbmRvdzsKKworICB4dF9jbGllbnRfaW5pdCgmKHh0YmluLT54dGNsaWVudCksIAorICAg
ICAgR0RLX1ZJU1VBTF9YVklTVUFMKGdka19yZ2JfZ2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19D
T0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRfY29sb3JtYXAoKSksCisgICAgICBnZGtfcmdi
X2dldF92aXN1YWwoKS0+ZGVwdGgpOworCisgIGlmICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxh
eSkgeworICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVy
dGhlci4KKyAgICAgKiAgQmFpbCBvdXQuCisgICAgICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5c
biIpOworI2VuZGlmCisgICAgZ19mcmVlICh4dGJpbik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQg
KilOVUxMOworICB9CisKKyAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQs
IGhvb2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCisgICAgIG1haW5sb29wICovCisgIGlmICgwID09
IG51bV93aWRnZXRzKSB7CisgICAgaW50ICAgICAgICAgICBjbnVtYmVyOworICAgIC8qCisgICAg
ICogaG9vayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8K
KworICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVl
biBjYWxsZWQgKi8KKyAgICBHU291cmNlKiBncyA9IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVu
Y3MsIHNpemVvZihHU291cmNlKSk7CisgICAgICBpZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICB9CisgICAgCisgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJ
T1JJVFlfRVZFTlRTKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOwor
ICAgIHRhZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZk
ZWYgVk1TCisgICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxz
ZQorICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAg
ICB4dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2
ZW50cyA9IEdfSU9fSU47IAorICAgIHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8q
IGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCisKKyAgICBnX21haW5fY29udGV4dF9hZGRfcG9s
bCAoKEdNYWluQ29udGV4dCopTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4
dF9ldmVudF9wb2xsX2ZkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9MT1cpOworICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nl
c3MgWHQgdGltZXJzICovCisgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9CisgICAgICBndGtfdGlt
ZW91dF9hZGQoMjUsCisgICAgICAgICAgICAgICAgICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50
X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5
KTsKKyAgfQorCisgIC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50ICovCisgIG51bV93aWRnZXRz
Kys7CisKKyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4
dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5OworICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93
KEdUS19XSURHRVQoeHRiaW4pLCBwYXJlbnRfd2luZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNl
cl9kYXRhKHh0YmluLT5wYXJlbnRfd2luZG93LCAmdXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0
YSkKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19X
SURHRVQoeHRiaW4pKTsKKworICByZXR1cm4gR1RLX1dJREdFVCAoeHRiaW4pOworfQorCit2b2lk
CitndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIHkpCit7CisgIHh0YmluLT54ID0geDsKKyAgeHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtf
V0lER0VUX1JFQUxJWkVEICh4dGJpbikpCisgICAgZ2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VU
ICh4dGJpbiktPndpbmRvdywgeCwgeSk7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0
a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KQoreworICBBcmcgYXJnc1syXTsKKyAg
R3RrWHRCaW4gKnh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb247CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZXNp
emUgJXAgJWQgJWRcbiIsICh2b2lkICopd2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgor
CisgIHh0YmluLT5oZWlnaHQgPSBoZWlnaHQ7CisgIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKwor
ICAvLyBBdm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4gWHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8
PSAwIHx8IHdpZHRoIDw9MCkgeworICAgIGhlaWdodCA9IDE7CisgICAgd2lkdGggPSAxOworICB9
CisgIFh0U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdodCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJn
c1sxXSwgWHROd2lkdGgsICB3aWR0aCk7CisgIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50
b3Bfd2lkZ2V0LCBhcmdzLCAyKTsKKworICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9j
YXRlIHNvIHRoZSBzb2NrZXQga25vd3MgYWJvdXQgdGhlCisgICAgIHNpemUgY2hhbmdlcyAqLwor
ICBhbGxvY2F0aW9uLnggPSB4dGJpbi0+eDsKKyAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7Cisg
IGFsbG9jYXRpb24ud2lkdGggPSB4dGJpbi0+d2lkdGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0g
eHRiaW4tPmhlaWdodDsKKworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxs
b2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRn
ZXQgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBHdGtXaWRnZXQgKndpZGdldDsK
KworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4i
KTsKKyNlbmRpZgorCisgIC8qIGd0a19vYmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xk
IGEgcmVmY291bnQgb24gb2JqZWN0CisgICAqLworICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3Qp
OworICB3aWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9G
TEFHUyAod2lkZ2V0LCBHVEtfVklTSUJMRSk7CisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3
aWRnZXQpKSB7CisgICAgeHRfY2xpZW50X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOwor
ICB9CisKKyAgKCpHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdp
ZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpv
YmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHBy
aW50ZigiZ3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9m
YWlsIChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAo
b2JqZWN0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4t
Pnh0d2luZG93KSB7CisgICAgLyogcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyICovCisgICAgeHRf
Y2xpZW50X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cg
PSAwOworCisgICAgbnVtX3dpZGdldHMtLTsgLyogcmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLwor
CisgICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBydW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBY
dCBkaXNwbGF5CisgICAgICAgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlm
ICgwID09IG51bV93aWRnZXRzKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50Zigi
cmVtb3ZpbmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRp
ZgorICAgICAgZ19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwg
Jnh0X2V2ZW50X3BvbGxfZmQpOworICAgICAgZ19zb3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAg
IGd0a190aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5nX3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxp
bmdfdGltZXJfaWQgPSAwOworICAgIH0KKyAgfQorCisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50
X2NsYXNzKS0+ZGVzdHJveShvYmplY3QpOworfQorCisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGlt
cGxlbWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50IHNpZGUKKyovCisKKy8qIElu
aXRpYWwgWHQgcGx1Z2luICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50
ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAg
ICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCisgICAgICAgICAgICAgICAgaW50IHh0ZGVw
dGgpCit7CisgIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFy
Z3ZbMV07CisgIGludCAgICAgICAgICAgbUFyZ2MgPSAwOworCisgIC8qCisgICAqIEluaXRpYWxp
emUgWHQgc3R1ZmYKKyAgICovCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRj
bGllbnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVM
TDsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1h
cCA9IDA7CisgIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxp
emVkKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0
dWZmXG4iKTsKKyNlbmRpZgorICAgIFh0VG9vbGtpdEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29u
dGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQor
ICAgICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBfY29udGV4dCwgZmFsbGJhY2spOwor
CisgICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNw
bGF5KCksIE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVM
TCwgMCwgJm1BcmdjLCBtQXJndik7CisgICAgaWYgKHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2lu
aXRpYWxpemVkID0gVFJVRTsKKyAgfQorICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxh
eTsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29s
b3JtYXAgPSB4dGNvbG9ybWFwOworICB4dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9
CisKKy8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMKKyogICovCitzdGF0aWMgdm9pZAor
eHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAsIAorICAgICAgICAgICAgICAg
ICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAKKyAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAK
KyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKK3sKKyAgaW50ICAgICAgICAgICBuOwor
ICBBcmcgICAgICAgICAgIGFyZ3NbNl07CisgIFdpZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0Owor
ICBXaWRnZXQgICAgICAgIHRvcF93aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmlu
dGYoInh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOworI2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFw
cENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVyIiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzcywgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0
b3Bfd2lkZ2V0OworCisgIC8qIHNldCBzaXplIG9mIFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAg
WHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhh
cmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdl
dCwgYXJncywgbik7CisKKyAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNz
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsK
KworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisr
OworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRB
cmcoYXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVudC0+eHRkZXB0aCApOyBuKys7Cisg
IFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBu
Kys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRoLCAwKTsgbisrOworICBYdFNl
dFZhbHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRp
c3BsYXksIEZBTFNFKTsKKyAgeHRjbGllbnQtPm9sZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUu
d2luZG93OworICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyog
dGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0
ICovCisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdh
YmxlKHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZXJp
ZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0
ZXJXaW5kb3coIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsK
KyNlbmRpZgorICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4g
dG8gYWxsIFh0IGV2ZW50cyAqLworICBYU2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwg
CisgICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAw
eDBGRkZGRik7CisgIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBY
dE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBj
aGlsZF93aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBldmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZl
bnRIYW5kbGVyKGNoaWxkX3dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+
UmVzaXplUmVkaXJlY3RNYXNrLAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAg
ICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNs
aWVudCk7CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwgCisgICAgICAgICAgICAg
ICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAg
ICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRs
ZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGll
bnQpOworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2
b2lkCit4dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBY
bGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNs
aWVudC0+eHRkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dp
ZGdldC0+Y29yZS53aW5kb3cpOworI2Vsc2UKKyAgX1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVu
dC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgeHRjbGll
bnQtPnRvcF93aWRnZXQpOworI2VuZGlmCisKKyAgLyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3
ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUud2luZG93CisgICAgIG9yIHdlIGNh
biBnZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGll
bnQtPnh0ZGlzcGxheSwgRmFsc2UpOworCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndp
bmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7CisgIFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50
LT50b3Bfd2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAgICAKK3h0X2NsaWVudF9k
ZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKK3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRn
ZXQpIHsKKyAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAw
eDBGRkZGRiwgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVy
KXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0
KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7
CisgIH0KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lk
Z2V0IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZm
ZXJbMl07CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcp
LCAiX1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKKworICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAg
ICAgICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCisgIGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhD
aGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAg
ICAgICAgICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAzMiwKKyAgICAgICAgICAgICAgICAg
ICBQcm9wTW9kZVJlcGxhY2UsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKili
dWZmZXIsIDIpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVz
c2FnZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQorewor
ICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChl
dmVudC0+eGNsaWVudC5kYXRhLmxbMV0pCisgIHsKKyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9U
SUZZOgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJ
VkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNU
SVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVN
QkVEX1dJTkRPV19ERUFDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhF
TUJFRF9NT0RBTElUWV9PTjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xp
ZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNh
c2UgWEVNQkVEX01PREFMSVRZX09GRjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigi
WHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFr
OworICBjYXNlIFhFTUJFRF9GT0NVU19JTjoKKyAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAg
IHsKKyAgICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9m
KHhldmVudCkpOworCisgICAgICBpZihldmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVE
X0ZPQ1VTX0lOKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVE
IGdvdCBmb2N1cyBpblxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0g
Rm9jdXNJbjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAg
ICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4
ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c091dDsKKyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhm
b2N1cy53aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZl
bnQueGZvY3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAg
ICAgWFNlbmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAg
ICAgICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCisgICAgICAgICAgICAgICAgIEZhbHNlLCBO
b0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgJnhldmVudCApOworICAgICAgWFN5bmMoIFh0
RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7
CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICov
Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lk
Z2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGll
bnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQt
PnR5cGUpCisgICAgeworICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4
ZW1iZWQgbWVzc2FnZSAqLworICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09
CisgICAgICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93
aWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkp
IHsKKyAgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0
YSwgZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlm
eToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwcGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVu
dF9zZXRfaW5mbyAodywgWEVNQkVEX01BUFBFRCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVu
bWFwTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAs
IDAsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgS2V5UHJlc3M6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5
IFByZXNzIEdvdCFcbiIpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitz
dGF0aWMgdm9pZAorc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgbG9uZyAgICAgIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0
YTEsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMiwgIAorICAgICAgICAg
ICAgICAgICAgICAgbG9uZyAgICAgIHRpbWUpICAgCit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBX
aW5kb3cgdz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14
dGNsaWVudC0+eHRkaXNwbGF5OworICBpbnQgZXJyb3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50
LDAsc2l6ZW9mKHhldmVudCkpOworICB4ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZl
bnQueGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2Fn
ZV90eXBlID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xp
ZW50LmZvcm1hdCA9IDMyOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAg
eGV2ZW50LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0
YS5sWzJdID0gZGV0YWlsOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7Cisg
IHhldmVudC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOworCisgIHRyYXBfZXJyb3JzICgpOwor
ICBYU2VuZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhT
eW5jIChkcHksRmFsc2UpOworCisgIGlmKChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJv
ciglZCkhISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAg
ICAgICAgICAgCitlcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICpl
cnJvcikKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJl
dHVybiAwOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7
CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9MDsKKyAgb2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJy
b3JIYW5kbGVyKGVycm9yX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50ICAgICAgICAgCit1bnRy
YXBfZXJyb3Iodm9pZCkKK3sKKyAgWFNldEVycm9ySGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7
CisgIGlmKHRyYXBwZWRfZXJyb3JfY29kZSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJp
bnRmKCJHZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxuIiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNl
bmRpZgorICB9CisgIHJldHVybiB0cmFwcGVkX2Vycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lk
ICAgICAgICAgCit4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIg
dXNlcl9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXko
dyk7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0
V2luZG93KHcpOworCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVh
dGVOb3RpZnk6CisgICAgICBpZihldmVudC0+eGNyZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7
CisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3Jl
YXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRf
Zm9jdXNfbGlzdGVuZXJfdHJlZShjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0
ZW5lciggdywgdXNlcl9kYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3Rp
Znk6CisgICAgICBpZihldmVudC0+eHJlcGFyZW50LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAg
LyogSSBhbSB0aGUgbmV3IHBhcmVudCAqLworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dU
b1dpZGdldChkcHksIGV2ZW50LT54cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxk
KQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRh
KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2lu
KSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBjaGlsZCAqLworICAgICAgfQorICAgICAgZWxz
ZSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG9sZCBwYXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJy
ZWFrOworICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1
cyhkcHksIFh0V2luZG93KHh0Y2xpZW50LT5jaGlsZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwg
ZXZlbnQtPnhidXR0b24udGltZSk7CisjZW5kaWYKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2Ug
KCB4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9G
T0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJl
YWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMg
dm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0
YSkKK3sKKyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0
Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFw
X2Vycm9ycyAoKTsKKyAgWEdldFdpbmRvd0F0dHJpYnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRv
dyh3KSwgJmF0dHIpOworICBldmVudG1hc2sgPSBhdHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0
cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0
RGlzcGxheSh3KSwKKyAgICAgICAgICAgICAgIFh0V2luZG93KHcpLCAKKyAgICAgICAgICAgICAg
IGV2ZW50bWFzayk7CisKKyAgWHRBZGRFdmVudEhhbmRsZXIodywgCisgICAgICAgICAgICAgICAg
ICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAg
ICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIp
eHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQp
OworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19s
aXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29k
ZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRSZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3Ry
dWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2Vy
X2RhdGEpOworCisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEp
IAoreworICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxk
cmVuOworICBXaW5kb3cgcm9vdCwgcGFyZW50OworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXko
dHJlZXJvb3QpOworICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3
ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KKyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVy
KCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9v
dCwgdXNlcl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMoKTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3
aW4sICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFw
X2Vycm9yKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAg
IHJldHVybjsKKworICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNo
aWxkID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQp
IAorICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOwor
ICB9CisgIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2lu
UGFja2FnZUd0azo6flBsdWdpblBhY2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRl
ZCk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFs
c2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21v
ZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQoreworICAgIGludCBw
b3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmls
ZU5hbWUgPSBtX3BhdGgucmlnaHQobV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlR3RrOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dl
dE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0
eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1l
RGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxp
dChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0g
U3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9u
cyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07
IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRl
bnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVsw
XSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRh
WzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAg
ICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURl
c2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9H
ZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9
PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVy
ID0gMDsKKyAgICBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25T
dHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xv
YWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEo
KSwgR19NT0RVTEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXpl
RnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVs
ZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6
ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9u
IiwgKHZvaWQqKikmbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJv
bChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworICAg
IGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmbV9OUFBf
R2V0VmFsdWUpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVEZXNj
cmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRvd24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAgICAgICBn
b3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVn
aW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNz
KTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1
cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9S
ZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFt
OworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1
bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9V
c2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7Cisg
ICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1
bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBs
dWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3Rp
ZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkg
PSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9H
ZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247
CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNz
LnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9O
UE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVu
dGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAg
IG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZy
b21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3Jl
YXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWlu
T2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VP
YmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9i
cm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHBy
b3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9w
ZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVy
dHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBO
X0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0
RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRl
OworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2lu
RnVuY3MpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBh
Ym9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0Ogor
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkK
K3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVf
Y2xvc2UgKG1fbW9kdWxlKTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2lu
UGFja2FnZUd0ayogUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VH
dGsqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOwor
CisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2Fn
ZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOwor
fQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5z
aWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisg
ICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVv
Zih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3Rr
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3Rr
JiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOwor
fQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisK
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUg
PGZjbnRsLmg+CisKKy8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2Ug
dG8gcmV0dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3Qg
Y2xhc2ggd2l0aCB0aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisK
K3VzaW5nIHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3Ry
ZWFtTWFwJiBzdHJlYW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7
CisgICAgcmV0dXJuIHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6UGx1Z2lu
U3RyZWFtR3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
dm9pZCogbm90aWZ5RGF0YSkKKyAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVz
dCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykK
KyAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90aWZpY2F0aW9u
KHNlbmROb3RpZmljYXRpb24pCisgICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0
ZWQpCisgICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fZGVsYXlEZWxpdmVyeVRp
bWVyKHRoaXMsICZQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAg
ICwgbV9kZWxpdmVyeURhdGEoMCkKKyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoMCkKKyAgICAsIG1f
cGx1Z2luRnVuY3MocGx1Z2luVmlldy0+cGx1Z2luKCktPnBsdWdpbkZ1bmNzKCkpCisgICAgLCBt
X2luc3RhbmNlKHBsdWdpblZpZXctPmluc3RhbmNlKCkpCit7CisgICAgQVNTRVJUKG1fcGx1Z2lu
Vmlldyk7CisKKyAgICBtX3N0cmVhbS51cmwgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gMDsK
KyAgICBtX3N0cmVhbS5wZGF0YSA9IDA7CisgICAgbV9zdHJlYW0uZW5kID0gMDsKKyAgICBtX3N0
cmVhbS5ub3RpZnlEYXRhID0gMDsKKyAgICBtX3N0cmVhbS5sYXN0bW9kaWZpZWQgPSAwOworCisg
ICAgc3RyZWFtcygpLmFkZCgmbV9zdHJlYW0sIG1faW5zdGFuY2UpOworfQorCitQbHVnaW5TdHJl
YW1HdGs6On5QbHVnaW5TdHJlYW1HdGsoKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlICE9
IFN0cmVhbVN0YXJ0ZWQpOworICAgIEFTU0VSVCghbV9sb2FkZXIpOworCisgICAgaWYgKG1fc3Ry
ZWFtLnVybCkKKyAgICAgICAgZnJlZSgoY2hhciopbV9zdHJlYW0udXJsKTsKKworICAgIHN0cmVh
bXMoKS5yZW1vdmUoJm1fc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OnN0YXJ0
KCkKK3sKKyAgICBBU1NFUlQoIW1fbG9hZE1hbnVhbGx5KTsKKworICAgIG1fbG9hZGVyID0gTmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShtX2ZyYW1lLCB0aGlzKTsKKworICAgIG1f
bG9hZGVyLT5zZXRTaG91bGRCdWZmZXJEYXRhKGZhbHNlKTsKKyAgICBtX2xvYWRlci0+ZG9jdW1l
bnRMb2FkZXIoKS0+YWRkUGx1Z0luU3RyZWFtTG9hZGVyKG1fbG9hZGVyLmdldCgpKTsKKyAgICBt
X2xvYWRlci0+bG9hZChtX3Jlc291cmNlUmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpzdG9wKCkKK3sKKyAgICBtX3N0cmVhbVN0YXRlID0gU3RyZWFtU3RvcHBlZDsKKworICAg
IGlmIChtX2xvYWRNYW51YWxseSkgeworICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAg
ICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+
YWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyKTsK
KworICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKQor
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmNhbmNlbE1haW5SZXNvdXJjZUxvYWQobV9mcmFt
ZS0+bG9hZGVyKCktPmNhbmNlbGxlZEVycm9yKG1fcmVzb3VyY2VSZXF1ZXN0KSk7CisKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xvYWRlcikgeworICAgICAgICBtX2xvYWRl
ci0+Y2FuY2VsKCk7CisgICAgICAgIG1fbG9hZGVyID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luU3RyZWFtR3RrOjpzdGFydFN0cmVhbSgpCit7CisgICAgQVNTRVJUKG1fc3RyZWFtU3RhdGUg
PT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBjb25zdCBLVVJMJiByZXNwb25zZVVSTCA9
IG1fcmVzb3VyY2VSZXNwb25zZS51cmwoKTsKKworICAgIC8vIFNvbWUgcGx1Z2lucyAoRmxhc2gp
IGV4cGVjdCB0aGF0IGphdmFzY3JpcHQgVVJMcyBhcmUgcGFzc2VkIGJhY2sgZGVjb2RlZCBhcyB0
aGlzIGlzIHRoZQorICAgIC8vIGZvcm1hdCB1c2VkIHdoZW4gcmVxdWVzdGluZyB0aGUgVVJMLgor
ICAgIGlmIChyZXNwb25zZVVSTC5zdHJpbmcoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZh
bHNlKSkKKyAgICAgICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVjb2Rl
X3N0cmluZyhyZXNwb25zZVVSTC5kZXByZWNhdGVkU3RyaW5nKCkpLnV0ZjgoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX3N0cmVhbS51cmwgPSBnX3N0cmR1cChyZXNwb25zZVVSTC5kZXByZWNhdGVk
U3RyaW5nKCkudXRmOCgpKTsKKyAgICAKKyAgICBDU3RyaW5nIG1pbWVUeXBlU3RyID0gbV9yZXNv
dXJjZVJlc3BvbnNlLm1pbWVUeXBlKCkudXRmOCgpOworICAgIAorICAgIGxvbmcgbG9uZyBleHBl
Y3RlZENvbnRlbnRMZW5ndGggPSBtX3Jlc291cmNlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCk7CisKKyAgICBpZiAobV9yZXNvdXJjZVJlc3BvbnNlLmlzSFRUUCgpKSB7CisgICAgICAg
IFZlY3RvcjxVQ2hhcj4gc3RyaW5nQnVpbGRlcjsKKyAgICAgICAgU3RyaW5nIHNlcGFyYXRvcigi
OiAiKTsKKworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jl
c291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmVuZCgpOworICAgICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKGl0LT5maXJzdC5jaGFyYWN0ZXJzKCksIGl0LT5maXJzdC5sZW5n
dGgoKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZXBhcmF0b3IuY2hhcmFj
dGVycygpLCBzZXBhcmF0b3IubGVuZ3RoKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoaXQtPnNlY29uZC5jaGFyYWN0ZXJzKCksIGl0LT5zZWNvbmQubGVuZ3RoKCkpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoKFVDaGFyKSdcbicpOworICAgICAgICB9CisK
KyAgICAgICAgbV9oZWFkZXJzID0gU3RyaW5nOjphZG9wdChzdHJpbmdCdWlsZGVyKS51dGY4KCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgZW5jb2RlZCAobW9zdCBsaWtlbHkgY29t
cHJlc3NlZCksIHRoZW4gZG9uJ3Qgc2VuZCBpdHMgbGVuZ3RoIHRvIHRoZSBwbHVnaW4sCisgICAg
ICAgIC8vIHdoaWNoIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgZGVjb2RlZCBsZW5ndGgsIG5v
dCB5ZXQga25vd24gYXQgdGhlIG1vbWVudC4KKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzQ0
NzA1OTk+IHRyYWNrcyBhIHJlcXVlc3QgZm9yIC1bTlNVUkxSZXNwb25zZSBleHBlY3RlZENvbnRl
bnRMZW5ndGhdIHRvIGluY29ycG9yYXRlIHRoaXMgbG9naWMuCisgICAgICAgIFN0cmluZyBjb250
ZW50RW5jb2RpbmcgPSBtX3Jlc291cmNlUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LUVuY29kaW5nIik7CisgICAgICAgIGlmICghY29udGVudEVuY29kaW5nLmlzTnVsbCgpICYmIGNv
bnRlbnRFbmNvZGluZyAhPSAiaWRlbnRpdHkiKQorICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID0gLTE7CisgICAgfQorCisgICAgbV9zdHJlYW0uaGVhZGVycyA9IG1faGVhZGVycy5k
YXRhKCk7CisgICAgbV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLm5kYXRhID0gdGhp
czsKKyAgICBtX3N0cmVhbS5lbmQgPSBtYXgoZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCAwTEwpOwor
ICAgIG1fc3RyZWFtLmxhc3Rtb2RpZmllZCA9IG1fcmVzb3VyY2VSZXNwb25zZS5sYXN0TW9kaWZp
ZWREYXRlKCk7CisgICAgbV9zdHJlYW0ubm90aWZ5RGF0YSA9IG1fbm90aWZ5RGF0YTsKKworICAg
IG1fdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOworICAgIG1fb2Zmc2V0ID0gMDsKKyAgICBtX3Jl
YXNvbiA9IFdlYlJlYXNvbk5vbmU7CisKKyAgICAvLyBQcm90ZWN0IHRoZSBzdHJlYW0gaWYgZGVz
dHJveXN0cmVhbSBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG5ld3N0cmVhbSBoYW5kbGVyCisg
ICAgUmVmUHRyPFBsdWdpblN0cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKworICAgIE5QRXJyb3Ig
bnBFcnIgPSBtX3BsdWdpbkZ1bmNzLT5uZXdzdHJlYW0obV9pbnN0YW5jZSwgKE5QTUlNRVR5cGUp
bWltZVR5cGVTdHIuZGF0YSgpLCAmbV9zdHJlYW0sIGZhbHNlLCAmbV90cmFuc2Zlck1vZGUpOwor
ICAgIAorICAgIC8vIElmIHRoZSBzdHJlYW0gd2FzIGRlc3Ryb3llZCBpbiB0aGUgY2FsbCB0byBu
ZXdzdHJlYW0gd2UgcmV0dXJuCisgICAgaWYgKG1fcmVhc29uICE9IFdlYlJlYXNvbk5vbmUpCisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0YXJ0
ZWQ7CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0obnBFcnIpOworCisgICAgaWYgKG1fdHJhbnNmZXJNb2RlID09IE5QX05P
Uk1BTCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICgobV90ZW1wRmlsZUhhbmRsZSA9
IHRtcGZpbGUoKSkgIT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
U29tZXRoaW5nIHdlbnQgd3JvbmcsIGNhbmNlbCBsb2FkaW5nIHRoZSBzdHJlYW0KKyAgICBjYW5j
ZWxBbmREZXN0cm95U3RyZWFtKE5QUkVTX05FVFdPUktfRVJSKTsKK30KKworTlBQIFBsdWdpblN0
cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4g
c3RyZWFtcygpLmdldChzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6Y2FuY2Vs
QW5kRGVzdHJveVN0cmVhbShOUFJlYXNvbiByZWFzb24pCit7CisgICAgUmVmUHRyPFBsdWdpblN0
cmVhbUd0az4gcHJvdGVjdCh0aGlzKTsKKworICAgIGRlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAg
ICBzdG9wKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZXN0cm95U3RyZWFtKE5QUmVh
c29uIHJlYXNvbikKK3sKKyAgICBtX3JlYXNvbiA9IHJlYXNvbjsKKyAgICBpZiAobV9yZWFzb24g
IT0gTlBSRVNfRE9ORSkgeworICAgICAgICAvLyBTdG9wIGFueSBwZW5kaW5nIGRhdGEgZnJvbSBi
ZWluZyBzdHJlYW1lZAorICAgICAgICBpZiAobV9kZWxpdmVyeURhdGEpCisgICAgICAgICAgICBt
X2RlbGl2ZXJ5RGF0YS0+cmVzaXplKDApOworICAgIH0gZWxzZSBpZiAobV9kZWxpdmVyeURhdGEg
JiYgbV9kZWxpdmVyeURhdGEtPnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gVGhlcmUgaXMgbW9y
ZSBkYXRhIHRvIGJlIHN0cmVhbWVkLCBkb24ndCBkZXN0cm95IHRoZSBzdHJlYW0gbm93LgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGRlc3Ryb3lTdHJlYW0oKTsKK30KKwordm9pZCBQbHVn
aW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJlYW0oKQoreworICAgIGlmIChtX3N0cmVhbVN0YXRlID09
IFN0cmVhbVN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCAobV9yZWFzb24g
IT0gV2ViUmVhc29uTm9uZSk7CisgICAgQVNTRVJUICghbV9kZWxpdmVyeURhdGEgfHwgbV9kZWxp
dmVyeURhdGEtPnNpemUoKSA9PSAwKTsKKworICAgIGlmIChtX3RlbXBGaWxlSGFuZGxlICE9IE5V
TEwpCisgICAgICAgIGZjbG9zZShtX3RlbXBGaWxlSGFuZGxlKTsKKworICAgIGlmIChtX3N0cmVh
bS5uZGF0YSAhPSAwKSB7CisgICAgICAgIGlmIChtX3JlYXNvbiA9PSBOUFJFU19ET05FICYmICht
X3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEUgfHwgbV90cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxF
T05MWSkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9wYXRoLmlzTnVsbCgpKTsKKworICAgICAg
ICAgICAgbV9wbHVnaW5GdW5jcy0+YXNmaWxlKG1faW5zdGFuY2UsICZtX3N0cmVhbSwgbV9wYXRo
LmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBOUEVycm9yIG5wRXJyOworICAgICAgICBu
cEVyciA9IG1fcGx1Z2luRnVuY3MtPmRlc3Ryb3lzdHJlYW0obV9pbnN0YW5jZSwgJm1fc3RyZWFt
LCBtX3JlYXNvbik7CisKKyAgICAgICAgbV9zdHJlYW0ubmRhdGEgPSAwOworICAgIH0KKworICAg
IGlmIChtX3NlbmROb3RpZmljYXRpb24pCisgICAgICAgIG1fcGx1Z2luRnVuY3MtPnVybG5vdGlm
eShtX2luc3RhbmNlLCBtX3Jlc291cmNlUmVxdWVzdC51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCku
dXRmOCgpLCBtX3JlYXNvbiwgbV9ub3RpZnlEYXRhKTsKKworICAgIG1fc3RyZWFtU3RhdGUgPSBT
dHJlYW1TdG9wcGVkOworCisgICAgLy8gZGlzY29ubmVjdFN0cmVhbSBjYW4gY2F1c2UgdXMgdG8g
YmUgZGVsZXRlZC4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90ZWN0KHRoaXMpOwor
ICAgIGlmICghbV9sb2FkTWFudWFsbHkpCisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlzY29ubmVj
dFN0cmVhbSh0aGlzKTsKKworICAgIG1fcGx1Z2luVmlldyA9IDA7Cit9CisKK3ZvaWQgUGx1Z2lu
U3RyZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+
KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fZGVsYXlEZWxpdmVyeVRpbWVyKTsK
KworICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxpdmVy
RGF0YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAobV9z
dHJlYW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGNhbmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBk
b24ndCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFtLm5k
YXRhIHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaW50MzIgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgaW50MzIg
dG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJl
ZCA8IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzIgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2lu
RnVuY3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3RyZWFtKTsKKworICAgICAgICBpZiAo
ZGVsaXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5z
dGFydE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAt
IHRvdGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAgaW50MzIgZGF0YUxlbmd0aCA9IGRl
bGl2ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBkYXRhID0gbV9kZWxpdmVyeURhdGEtPmRh
dGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBk
YXRhCisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGUobV9p
bnN0YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0YUxlbmd0aCwgKHZvaWQqKWRhdGEpOwor
ICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgY2Fu
Y2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihk
ZWxpdmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2
ZXJ5Qnl0ZXM7CisgICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0
ZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDAp
IHsKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAg
ICAgICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2
ZXJlZDsKKyAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxp
dmVyeURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsK
KyAgICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAg
ICAgICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAg
IGRlc3Ryb3lTdHJlYW0oKTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3Ry
ZWFtR3RrOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJl
c291cmNlUmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVu
Z3RoKCksICIiLCAiIikpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZGlkUmVjZWl2ZURhdGEoMCwgcmVzdWx0U3RyaW5n
LmRhdGEoKSwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9
PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRGaW5pc2hMb2FkaW5n
KDApOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVCht
X3N0cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJl
c3BvbnNlID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdp
blN0cmVhbUd0azo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxv
YWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobG9hZGVy
ID09IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKG1fc3Ry
ZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisgICAgCisgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0
YSkKKyAgICAgICAgbV9kZWxpdmVyeURhdGEuc2V0KG5ldyBWZWN0b3I8Y2hhcj4pOworCisgICAg
aW50IG9sZFNpemUgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIG1fZGVsaXZlcnlEYXRh
LT5yZXNpemUob2xkU2l6ZSArIGxlbmd0aCk7CisgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5k
YXRhKCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4g
Y2FuY2VscyB0aGUgc3RyZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAor
ICAgIC8vIHNvIHByb3RlY3QgaXQgaGVyZS4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBw
cm90ZWN0KHRoaXMpOworCisgICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkp
CisgICAgICAgIGRlbGl2ZXJEYXRhKCk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJl
YW1TdG9wcGVkICYmIG1fdGVtcEZpbGVIYW5kbGUgIT0gTlVMTCkgeworICAgICAgICBib29sIHJl
dHZhbCA9IGZhbHNlOworCisgICAgICAgIGlmICghcmV0dmFsIHx8IGZwdXRzKGRhdGEsIG1fdGVt
cEZpbGVIYW5kbGUpIDw9IDApCisgICAgICAgICAgICBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5Q
UkVTX05FVFdPUktfRVJSKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkaWRG
YWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJy
b3ImKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgbV9sb2FkZXIg
PSAwOworCisgICAgZGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7Cit9CisKK3ZvaWQg
UGx1Z2luU3RyZWFtR3RrOjpkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9h
ZGVyKiBsb2FkZXIpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CisgICAgQVNT
RVJUKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisKKyAgICBtX2xvYWRlciA9IDA7
CisKKyAgICBkZXN0cm95U3RyZWFtKE5QUkVTX0RPTkUpOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsg
dGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q
LQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioq
KiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4w
L0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0
byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5z
ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgK
KyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
CisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAq
IFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9u
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVm
aW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1
ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisj
aWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19F
WFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JU
Xyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQor
I2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19j
cGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRl
ZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQ
RV9YVEJJTiAgICAgICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IEdUS19YVEJJTihvYmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChH
VEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5l
IEdUS19JU19YVEJJTihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19D
TEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVu
dDsKKworc3RydWN0IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0
CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxk
X3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsK
KyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2lu
ZG93OworfTsKKworc3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0
OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRp
c3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAg
ICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAg
ICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJ
IHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0
cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9
OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7
CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFy
ZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0
YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtY
VEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3
aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0
aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFn
ZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9j
ZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMg
KmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8K
KyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAg
CisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7
ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisg
ICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRn
ZXQncyBDbGFzc1JlYyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAg
ICAgICAgLyogcGFyZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFt
ZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVh
cmtpZmllZCAgICovCisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyog
bWFya2VkIGZvciBkZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3Qg
IGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVk
ICovCisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWlu
dCByZWNvcmQgICAgICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAg
ICAgICAgICAgICAgLyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAg
RGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMg
ICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAg
ICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAg
ICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/
ICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMg
d2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFu
Y2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICov
CisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBl
dmVudCBkaXNwYXRjaGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAg
ICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRU
cmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRp
b25zICAgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAg
Lyogd2luZG93IGJvcmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAg
ICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAg
ICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBv
ZiBwb3B1cHMgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9w
b3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisg
ICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNl
IG5hbWUgICAgICAgICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAg
ICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3Jt
YXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyog
d2luZG93IElEICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAg
IGRlcHRoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAg
ICovCisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJh
Y2tncm91bmQgcGl4ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91
bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAg
Qm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBh
bmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFn
ZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0Owor
Cit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0g
V2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAv
KiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblN0cmVhbUd0a19ICisjZGVm
aW5lIFBsdWdpblN0cmVhbUd0a19ICisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIm5wZnVuY3Rp
b25zLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIFBsdWdpblZpZXdHdGs7
CisKKyAgICBlbnVtIFBsdWdpblN0cmVhbVN0YXRlIHsgU3RyZWFtQmVmb3JlU3RhcnRlZCwgU3Ry
ZWFtU3RhcnRlZCwgU3RyZWFtU3RvcHBlZCB9OworCisgICAgY2xhc3MgUGx1Z2luU3RyZWFtR3Rr
IDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luU3RyZWFtR3RrPiwgcHJpdmF0ZSBOZXRzY2FwZVBs
dWdJblN0cmVhbUxvYWRlckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5TdHJl
YW1HdGsoUGx1Z2luVmlld0d0ayosIEZyYW1lKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgflBsdWdpblN0
cmVhbUd0aygpOworICAgICAgICAKKyAgICAgICAgdm9pZCBzdGFydCgpOworICAgICAgICB2b2lk
IHN0b3AoKTsKKworICAgICAgICB2b2lkIHN0YXJ0U3RyZWFtKCk7CisKKyAgICAgICAgdm9pZCBz
ZXRMb2FkTWFudWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9sb2FkTWFudWFsbHkgPSBsb2Fk
TWFudWFsbHk7IH0KKworICAgICAgICAvLyBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVu
dAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqLCBjb25zdCBj
aGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKik7CisKKyAgICAg
ICAgdm9pZCBzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBDU3RyaW5nJiByZXN1bHRTdHJpbmcpOworICAgICAgICB2b2lkIGNhbmNlbEFuZERlc3Ryb3lT
dHJlYW0oTlBSZWFzb24pOworCisgICAgICAgIHN0YXRpYyBOUFAgb3duZXJGb3JTdHJlYW0oTlBT
dHJlYW0qKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGRlbGl2ZXJEYXRhKCk7CisgICAg
ICAgIHZvaWQgZGVzdHJveVN0cmVhbShOUFJlYXNvbik7CisgICAgICAgIHZvaWQgZGVzdHJveVN0
cmVhbSgpOworCisgICAgICAgIFJlc291cmNlUmVxdWVzdCBtX3Jlc291cmNlUmVxdWVzdDsKKyAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc291cmNlUmVzcG9uc2U7CisKKyAgICAgICAgRnJh
bWUqIG1fZnJhbWU7CisgICAgICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4g
bV9sb2FkZXI7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAg
dm9pZCogbV9ub3RpZnlEYXRhOworICAgICAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAg
ICAgICAgUGx1Z2luU3RyZWFtU3RhdGUgbV9zdHJlYW1TdGF0ZTsKKyAgICAgICAgYm9vbCBtX2xv
YWRNYW51YWxseTsKKworICAgICAgICBUaW1lcjxQbHVnaW5TdHJlYW1HdGs+IG1fZGVsYXlEZWxp
dmVyeVRpbWVyOworICAgICAgICB2b2lkIGRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKFRpbWVyPFBs
dWdpblN0cmVhbUd0az4qKTsKKworICAgICAgICBPd25QdHI8IFZlY3RvcjxjaGFyPiA+IG1fZGVs
aXZlcnlEYXRhOworCisgICAgICAgIEZJTEUqIG1fdGVtcEZpbGVIYW5kbGU7CisKKyAgICAgICAg
Y29uc3QgTlBQbHVnaW5GdW5jcyogbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBQIG1faW5zdGFu
Y2U7CisgICAgICAgIHVpbnQxNiBtX3RyYW5zZmVyTW9kZTsKKyAgICAgICAgaW50MzIgbV9vZmZz
ZXQ7CisgICAgICAgIENTdHJpbmcgbV9oZWFkZXJzOworICAgICAgICBDU3RyaW5nIG1fcGF0aDsK
KyAgICAgICAgTlBSZWFzb24gbV9yZWFzb247CisgICAgICAgIE5QU3RyZWFtIG1fc3RyZWFtOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmlu
ZSBQbHVnaW5QYWNrYWdlR3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0
aW1lLmg+CisKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBh
Y2thZ2VHdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVi
bGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2lu
UGFja2FnZUd0ayogY3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVf
dCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlTmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9u
c01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlw
dGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5z
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1
Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAg
Ym9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2Fk
V2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2lu
RnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6Cisg
ICAgICAgIFBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3Qm
IGxhc3RNb2RpZmllZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9v
bCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5n
IG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBt
X2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9u
c01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7Cisg
ICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3Jp
cHRpb25GdW5jUHRyIG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRv
d25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1f
TlBQX0dldFZhbHVlOworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAg
ICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0
IFBsdWdpblBhY2thZ2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4o
a2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0
cjxQbHVnaW5QYWNrYWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAg
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4g
ZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCks
ICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
bXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJl
IGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBk
ZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhv
dXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFj
a2FnZUd0a0hhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+
ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlR3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYg
V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNo
VHJhaXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
R3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkRhdGFiYXNlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lu
cygpCit7CisgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAK
KyAgICBpZiAoIXBsdWdpbnMpIHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFz
ZUd0azsKKyAgICAgICAgcGx1Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6
OmRlZmF1bHRQbHVnaW5QYXRocygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAg
IH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjph
ZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0
aHMuYXBwZW5kKHBhdGgpOworICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFz
ZUd0azo6cmVmcmVzaCgpCit7ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBi
b29sIHBsdWdpblNldENoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQg
b2YgcGx1Z2lucworICAgIG5ld1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAg
aWYgKCFtX3BsdWdpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBl
cy5jbGVhcigpOworCisgICAgICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdp
bnM7CisKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5z
LmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQ
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1Vu
bG9hZC5yZW1vdmUoKml0KTsKKworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAg
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOwor
CisgICAgICAgIC8vIFVubG9hZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9h
ZC5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1
Z2luc1RvVW5sb2FkLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1
Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAg
ZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFw
bHVnaW5zVG9VbmxvYWQuaXNFbXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5T
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBs
dWdpblNldENoYW5nZWQgPSAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8g
UmVnaXN0ZXIgcGx1Zy1pbiBNSU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAv
LyBHZXQgTUlNRSB0eXBlcworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIG1hcF9lbmQgPSAoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAg
ICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsr
bWFwX2l0KSB7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+
Zmlyc3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7
Cit9CisKK1ZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdp
bnMoKSBjb25zdAoreworICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisg
ICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBs
dWdpbnNJblBhdGhzKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBj
YXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVz
OworICAgIFBsdWdpblNldCBwbHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01Q
UGx1Z2luID0gMDsKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisg
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5k
KCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
blBhdGhzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBn
X2Rpcl9vcGVuKChpdC0+dXRmOCgpKS5kYXRhKCksIDAsIE5VTEwpOworICAgICAgICBpZiAoZGly
KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgd2hpbGUgKChu
YW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpcikpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfc3Ry
X2hhc19zdWZmaXgobmFtZSwgIi4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2NoYXIqIGZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0
YSgpLCBuYW1lLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZUd0ayog
cGx1Z2luUGFja2FnZSA9IFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoZmlsZW5hbWUs
IHRpbWUoTlVMTCkpOworICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOworICAgICAg
ICAgICAgICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGdfZGlyX2Nsb3NlKGRpcik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBw
YXJzZVZlcnNpb25TdHJpbmcoY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZl
Y3RvcjxpbnQ+IHZlcnNpb247CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5z
aWduZWQgZW5kUG9zOworICAgIAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcu
bGVuZ3RoKCkpIHsKKyAgICAgICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVy
c2lvblN0cmluZy5sZW5ndGgoKTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0
cmluZ1tlbmRQb3NdID09ICcuJyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVy
c2lvblN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgp
OworICAgICAgICB2ZXJzaW9uLmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBz
dGFydFBvcyA9IGVuZFBvcyArIDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisK
Ky8vIFRoaXMgcmV0dXJucyB3aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25C
CitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2
ZXJzaW9uQSwgY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB2ZXJzaW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2
ZXJzaW9uQi5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAo
dmVyc2lvbkFbaV0gPiB2ZXJzaW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBlbHNlIGlmICh2ZXJzaW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25z
IGFyZSBlaXRoZXIgdGhlIHNhbWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwg
anVzdCByZXR1cm4gZmFsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+
IFBsdWdpbkRhdGFiYXNlR3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IHBhdGhzOworCisgICAgZ2NoYXIqIGhvbWVQYXRoID0gZ19idWlsZF9maWxlbmFtZShn
X2dldF9ob21lX2RpcigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhz
LmFwcGVuZChob21lUGF0aCk7CisgICAgZ19mcmVlKGhvbWVQYXRoKTsKKworICAgIGNvbnN0IGdj
aGFyKiBtb3pQYXRoID0gZ19nZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQ
YXRoKSB7CisgICAgICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgs
ICI6IiwgLTEpOworCisgICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkr
KykKKyAgICAgICAgICAgIHBhdGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAg
Z19mcmVlKHBsdWdpblBhdGhzKTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2Fs
L2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemls
bGEvcGx1Z2lucyIpOworCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFi
YXNlR3RrOjppc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25z
dAoreworICAgIHJldHVybiAhbWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNvbnRhaW5zKG1pbWVUeXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0
YWJhc2VHdGs6OnBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgU3RyaW5nIGtleSA9IG1pbWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAg
ICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
KworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1p
bWVUb0V4dGVuc2lvbnMoKS5lbmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJl
Z2luKCk7IG1pbWVfaXQgIT0gbWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2lu
RGF0YWJhc2VHdGs6OmZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQoreyAgIAorICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBp
ZiAoIW1pbWVUeXBlLmlzTnVsbCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlw
ZShtaW1lVHlwZSk7CisgICAgCisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBh
dGggPSB1cmwucGF0aCgpOworICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJp
bmcocGF0aC5yZXZlcnNlRmluZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2lu
Rm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdp
biBjb3VsZCBiZSBmb3VuZCwgcXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAg
ICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVy
biBwbHVnaW47Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQ
bHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1O
YW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVn
aW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3
YXMgZm91bmQsIHRyeSByZWZyZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWlu
CisgICAgaWYgKCFwbHVnaW4gJiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1
Z2luKHVybCwgbWltZVR5cGUpOworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdH
dGsocGFyZW50RnJhbWUsIHNpemUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3Rr
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgodW5zaWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBs
dWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5m
byA9IG5ldyBQbHVnaW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+
cGx1Z2lucygpW2ldOworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBp
bmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2Fn
ZS0+ZGVzY3JpcHRpb24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWlt
ZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlv
bnMuZW5kKCk7CisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGlu
Zm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBp
dC0+Zmlyc3Q7CisgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1l
LT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBw
YWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyAr
PSAiLCI7CisKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0lu
SW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmlu
ZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKwor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRz
TUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJu
IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3Rl
cmVkKG1pbWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5Q
YWdlcykKK3sKKyAgICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZy
ZXNoKCk7CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiBy
ZWxvYWQgb3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTMwNSkKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNiw2ICsxMzYsNyBAQCBE
RVBFTkRQQVRIICs9IGVkaXRpbmcvcXQgaGlzdG9yeS9xdCBsb2FkCiBndGstcG9ydCB7CiAgICAg
eDExOnBsdWdpbnMgewogICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgTElCUyAr
PSAtbFh0CiAgICAgfQogCiAgICAgSU5DTFVERVBBVEggKz0gXApAQCAtMTcxLDYgKzE3Miw3IEBA
IGd0ay1wb3J0IHsKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRl
ci9ndGsgXAogICAgIHBhZ2UvZ3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiB9CkBAIC04
NTksMTMgKzg2MSwzOSBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAK
IAogZ3RrLXBvcnQgeworICAhcGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9Q
TFVHSU5TPTEKKyAgfQorICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRh
YmFzZUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EZWJ1Zy5oIFwKKyAgICBwbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0
ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcCAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAg
XAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9u
cGFwaS5jcHAKKworICB4MTE6cGx1Z2lucyB7CisgICAgSEVBREVSUyArPSBcCisgICAgICBwbHVn
aW5zL2d0ay9ndGsyeHRiaW4uaCBcCisgICAgICBwbHVnaW5zL2d0ay9ucGZ1bmN0aW9ucy5oIFwK
KyAgICAgIHBsdWdpbnMvZ3RrL3hlbWJlZC5oCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgIHBs
dWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0KIAogcXQtcG9ydCB7CkBAIC05NzAsNiArOTk4
LDcgQEAgcXQtcG9ydCB7CiB9CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9X
ZWJDb3JlL3BsdWdpbnMvZ3RrCiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZp
c2lvbiAyOTMwNSkKKysrIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxNCArMjgsMTkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXdHdGsuaCIKIAorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1L
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KFdpZGdldCopCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlw
dEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPih3aWRnZXQpLT5iaW5k
aW5nSW5zdGFuY2UoKTsKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0ZGlycy5wbQkocmV2aXNpb24gMjkzMDUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dGRpcnMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJl
dmlzaW9uOwogbXkgJG9zWFZlcnNpb247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFi
bGVHdGtQbHVnaW5zOwogbXkgJGlzV3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0
CkBAIC00ODAsNiArNDgyLDIzIEBAIHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitz
dWIgZW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygp
OworICAgIHJldHVybiAkZW5hYmxlR3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJs
ZUd0a1BsdWdpbnMoKQoreworICAgIHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5z
KTsKKworICAgIGlmIChjaGVja0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAg
ICAgICRlbmFibGVHdGtQbHVnaW5zID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxl
R3RrUGx1Z2lucyA9IDE7CisgICAgfQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5l
SXNXeCgpOwpAQCAtNzg5LDYgKzgwOCw3IEBAIHN1YiBidWlsZFFNYWtlR3RrUHJvamVjdCgkJCkK
IAogICAgIG15IEBidWlsZEFyZ3MgPSAoIkNPTkZJRys9Z3RrLXBvcnQiKTsKICAgICBwdXNoIEBi
dWlsZEFyZ3MsICJDT05GSUctPXF0IjsKKyAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUcrPXBs
dWdpbnMiIGlmIGVuYWJsZUd0a1BsdWdpbnMoKTsKIAogICAgIHJldHVybiBidWlsZFFNYWtlUHJv
amVjdCgkY2xlYW4sIEBidWlsZEFyZ3MpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18356</attachid>
            <date>2008-01-09 16:14:52 -0800</date>
            <delta_ts>2008-01-16 09:43:55 -0800</delta_ts>
            <desc>Updated patch against r29338</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>167923</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTMzOCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSAkKHRvcF9zcmNkaXIpL1dlYkNvcmUgXAogCS1JICQoc3JjZGlyKS9KYXZh
U2NyaXB0Q29yZSBcCiAJLUkgJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzIFwKIAktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvd3RmIFwKQEAgLTE3MCw2ICsxNzEs
NyBAQCBnbG9iYWxfY3BwZmxhZ3MgKz0gXAogCiBpZiBUQVJHRVRfWDExCiBnbG9iYWxfY3BwZmxh
Z3MgKz0gLURYUF9VTklYCit3ZWJraXRndGtfbGRmbGFncyArPSAtbFh0CiBlbmRpZgogCiBpZiAh
RU5BQkxFX0RFQlVHCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMjkzMzgpCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9h
c3RzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDEyICs1MCwxNyBAQAogI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9y
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmll
d0d0ay5oIgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFtZSog
ZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAg
LCBtX3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjAsOSArMTY2
LDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxv
YWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwor
ICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFTU0VS
VChsb2FkZXItPmZyYW1lKCkpOworICAgICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0
aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1h
bGx5IGRvbmUKKyAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2
ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFi
b3V0OmJsYW5rKS4KKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlkZUVu
Y29kaW5nKCk7CisgICAgICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsK
KyAgICAgICAgaWYgKCF1c2VyQ2hvc2VuKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXIt
PnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBm
cmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2FkZXIt
PnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEpCisg
ICAgICAgICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KKwor
ICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRv
UGx1Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShs
b2FkZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdp
biA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0
YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
CkBAIC0yNTgsOCArMjg1LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVj
aWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9s
aWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNv
bnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0KiBG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CisgICAgUGx1Z2luVmlld0d0ayog
cGx1Z2luVmlldyA9IFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0
ZVBsdWdpblZpZXcoY29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAo
cGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQor
ICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
cmV0dXJuIDA7CiB9CkBAIC0zMDEsOCArMzMzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFU
b1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3Rr
Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
SmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJh
c2VVUkwsCkBAIC0zMjQsNiArMzU1LDkgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJD
bGllbnQ6Om9iagogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50SW1hZ2U7
CiAKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1F
VHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0
Q29udGVudE5ldHNjYXBlUGx1Z2luOworCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9i
amVjdENvbnRlbnRGcmFtZTsKIApAQCAtNjIzLDE0ICs2NTcsMTQgQEAgU3RyaW5nIEZyYW1lTG9h
ZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5p
c2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIEFTU0VS
VChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcg
b24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBu
b3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2
ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFi
b3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+b3ZlcnJp
ZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsK
LSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9jdW1lbnRM
b2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50TG9hZGVy
LT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisKKyAg
ICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVudExvYWRl
ciwgMCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9h
ZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNw
b25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiAKQEAgLTc1Myw5ICs3ODcsMTMgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9y
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAg
ICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0g
ZmFsc2U7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2Fk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyOTMzOCkKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8
emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgor
CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTgwLDYgKzE4MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAg
ICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFnZW50
OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAgICAg
V2ViQ29yZTo6UGx1Z2luVmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gMjkzMzgpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4OSw2ICs5ODksNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXCiAgICAgc2V0dGluZ3MtPnNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoIkFyaWFsIik7CiAgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZh
bWlseSgiQ291cmllciBOZXciKTsKICAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5
KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKIAogICAg
IEdUS19XSURHRVRfU0VUX0ZMQUdTKHdlYlZpZXcsIEdUS19DQU5fRk9DVVMpOwogICAgIHdlYlZp
ZXdEYXRhLT5tYWluRnJhbWUgPSBXRUJLSVRfV0VCX0ZSQU1FKHdlYmtpdF93ZWJfZnJhbWVfbmV3
KHdlYlZpZXcpKTsKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjkzMzgpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAgd2ViY29yZV9jcHBm
bGFncyArPSBcCiAJLUkgJCh0b3BfYnVpbGRkaXIpL1dlYkNvcmUvYmluZGluZ3MvanMKIAogd2Vi
a2l0Z3RrX2NwcGZsYWdzICs9IFwKKwktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MgXAogCS1JICQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCiAJLUkgJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKIAktSSAk
KHNyY2RpcikvV2ViQ29yZS9wYWdlL2d0ayBcCisJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGx1Z2lu
cy9ndGsgXAogCS1JICQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKIAktSSAk
KHNyY2RpcikvV2ViS2l0L2d0ay9XZWJWaWV3CiAKQEAgLTg0NSw2ICs4NDcsMTIgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5TdHJlYW1HdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05MDQsNiArOTEyLDExIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlX
ZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJraXRndGtf
c291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworZW5kaWYKKwog
d2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0
ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjkz
MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50
b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9T
dG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6
UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJl
c2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi0KIENvbG9yIFdlYkNvcmU6
OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpz
ZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlzaW9uIDI5MzM4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDUgKzMwNSwy
MiBAQCB2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vCiAKIHZvaWQgV2lk
Z2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmICghcGFyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICBJbnRQb2lu
dCBsb2MgPSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRy
eSgpLmxvY2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6
ZSB0byBiZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3ogPSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgp
OworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsK
IH0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVn
aW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsK
KyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7Cisg
ICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2Fn
ZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQ
bHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUq
IHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51
YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5Q
YWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdp
c3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4
dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBh
dGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29u
c3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsq
IHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
OworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsK
KworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0
PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVn
aW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVz
dC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxl
bWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pz
X3dpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGlt
ZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4K
KyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEp
CisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgor
I2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNl
bmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1
c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFs
dWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1l
c3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVu
dE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVz
dEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1
ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisg
ICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgICAgICwgbV9zZW5kTm90aWZp
Y2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9h
ZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJl
cXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlE
YXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5k
Tm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxv
YWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlm
aWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0dXJlCit9OworCitzdGF0aWMgU3RyaW5n
IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYg
KCF1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3Ry
aW5nCisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmco
KS5taWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJyZW50
UGx1Z2luVmlldyA9IDA7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0g
Ik1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4x
KSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBk
YXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50
UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJl
Y3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXct
PmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21l
dHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBt
X2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKK30K
KworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAg
Ly8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0
KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRo
ZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3LgorICAg
IFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCkt
PnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJl
Y3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lk
dGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgaWYgKG1fd2lkZ2V0KSB7CisgICAg
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOworI2lm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
eworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQp
LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGd0a194
dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3Qu
aGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gY2xpcFJl
Y3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPnByaW50aW5nKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lR2VvbWV0cnkoKSkKKyAg
ICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworCisgICAgaWYgKHBhcmVudCgp
KQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3coKTsKKyAgICBzZXROUFdpbmRv
d1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Z2VvbWV0cnlDaGFuZ2VkKCkg
Y29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpOworICAgIHVwZGF0ZVdpbmRv
dygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3VzKCkKK3sKKyAgICBXaWRnZXQ6
OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2hvdygpCit7CisgICAgbV9p
c1Zpc2libGUgPSB0cnVlOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIFdpZGdl
dDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbklj
b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHN0YXRpYyBJbWFnZSogbnVsbFBsdWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdl
KQorICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
Im51bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54
KCksIGZyYW1lR2VvbWV0cnkoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBs
dWdpbkltYWdlLT5oZWlnaHQoKSk7CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5
KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAo
ZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAg
ICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRl
cnNlY3RzKGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUo
KTsKKyAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRy
YXdJbWFnZShudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250
ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0
YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAg
ICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAv
KiBOZWVkIHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5
cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFt
ZVZpZXcoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7Cisg
ICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAg
IH0KKworICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBO
UEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBp
dCBvbiAqLworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAg
ICAKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOwor
ICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7
CisgICAgfQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisv
L2V4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZl
bnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50
UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dp
bmRvdyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8q
CisgICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBF
dmVudC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQor
ICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlw
ZSgpID09IG1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2Vv
dXRFdmVudCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgewor
ICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQt
PmJ1dHRvbkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2
ZW50LndQYXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBF
dmVudC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBF
dmVudC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25F
dmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAg
Y2FzZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsK
KworICAgICAgICAgICAgICAgIC8vIEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBt
X3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01f
UkJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJV
VFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICov
CisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAo
IW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBX
aWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4g
RXZlbnRIYW5kbGVyLmNwcAorICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ug
c2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAg
ICAvL2lnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwg
bV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VF
dmVudCgpKQorICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQq
PihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAg
ICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQp
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50
KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFt
X2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBh
cmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5k
b3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRv
dy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVp
Z2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVj
dC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQo
KTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAg
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsK
KworICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpz
dGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1
cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1f
bW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOwor
ICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAg
IGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1f
bG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVz
dDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0
aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRVUkwobV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9w
KCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNo
U2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBI
YXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMu
ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+ID46Oml0ZXJh
dG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCpp
dCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAg
fQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQg
PSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwor
CisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0
ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsK
K30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQor
eworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3Jl
YXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBz
dHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZh
c3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3Ry
LmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0
aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJh
eVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdl
dFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcp
Cit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRl
KiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgVVN0cmlu
ZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayog
cmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2Ny
aXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgaWYgKGpzU3RyaW5n
LmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51cmxTZWxlY3Rl
ZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAg
ICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQg
d2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgaWYgKHJlcXVl
c3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRlZFN0cmluZygpLnV0
ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVl
c3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFT
Y3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9h
ZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlz
RW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVMb2Fk
UmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAvLyBF
eGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95
ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBSZWZQ
dHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSogcmVz
dWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcuZGVw
cmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1
ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmlu
ZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKSwg
cmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
dHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5T
dHJlYW1HdGs+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW1HdGsodGhpcywgcGFyZW50RnJhbWUu
Z2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVx
dWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCkpOworICAgICAg
ICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRT
dHJlYW0ocmVxdWVzdFVSTCwgY3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBB
U1NFUlQodGltZXIgPT0gJm1fcmVxdWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5z
aXplKCkgPiAwKTsKKworICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3Rz
WzBdOworICAgIG1fcmVxdWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEg
bmV3IHJlcXVlc3QgYmVmb3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwg
dG8KKyAgICAvLyBwZXJmb3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJl
IGRlbGV0ZWQuCisgICAgaWYgKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1
ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RH
dGsqIHJlcXVlc3QpCit7CisgICAgbV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9y
ZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisg
ICAgS1VSTCB1cmwgPSBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwor
ICAgIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJ
RF9VUkw7CisKKyAgICBTdHJpbmcgdGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUo
KTsKKworICAgIC8vIGRvbid0IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMg
bm8gbG9uZ2VyIHBhcnQgb2YgYSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3Bs
YXllZCB1bmxlc3MgdGhlIGxvYWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2lu
LgorICAgIGlmIChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBt
X3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAg
ICAodGFyZ2V0LmlzTnVsbCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQp
ICE9IG1fcGFyZW50RnJhbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsK
KworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwp
OworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRp
bmdzID0gbV9wYXJlbnRGcmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8
fCAhc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBN
b3ppbGxhIGRvZXMuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAg
ICAgICAgfSBlbHNlIGlmICh0YXJnZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsK
KyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBz
dGFuZGFsb25lIHBsdWctaW4gdGhhdCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8g
YmVjYXVzZSB0aGlzIGNhbiBjYXVzZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxh
bmsgcGFnZSAoMzQyNDAzOSkuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJB
TTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRh
cmdldC5pc051bGwoKSkgeworICAgICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJn
ZXQuaXNOdWxsKCkgJiYgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9w
YXJlbnRGcmFtZSkgeworICAgICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkg
YWxsb3cgSlMgcmVxdWVzdHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0
aGUgcGx1Zy1pbi4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAg
ICAgICB9CisKKyAgICAgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5S
ZXF1ZXN0R3RrKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEp
OworICAgICAgICBzY2hlZHVsZVJlcXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUGx1Z2luU3RyZWFtR3RrKiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtR3RrKHRoaXMsIG1f
cGFyZW50RnJhbWUsIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3Rp
ZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0cmVhbSk7CisK
KyAgICAgICAgc3RyZWFtLT5zdGFydCgpOworICAgIH0KKworICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKK30KKworc3RhdGljIEtVUkwgbWFrZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25z
dCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKK3sKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVybFN0
cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEocmVsYXRpdmVVUkxTdHJpbmcpOwor
CisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgn
XG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xyJywgIiIpOworCisgICAgcmV0dXJu
IEtVUkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpn
ZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1
cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIHRydWUsIG5vdGlmeURh
dGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTChjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTCht
X2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgZmFs
c2UsIDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAg
JiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0
ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25z
dCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVm
ZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBp
KyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgor
ICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhl
IHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGlu
ZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicp
IHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4n
KQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJc
blxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAg
ICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAo
Mzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRF
T0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEg
Q1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAv
LyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9u
CisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wg
bmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENS
TEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYg
RU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8g
dGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAg
ICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykg
eworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMK
KyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgor
ICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0
aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsg
aTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyBy
ZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIg
JiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG91
cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYg
bmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9sb3dl
cihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAg
ICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3Rl
ciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIg
PSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhl
YWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFy
KiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVs
ZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVy
LCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9s
ID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9
IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAK
KyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5h
dG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAg
ICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAg
ICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcg
Q1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChs
aW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUg
ZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgq
bGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0
aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFu
ZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2
aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVy
RmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUgPSBE
ZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAgICAg
ICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdWYWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCcmFu
ZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAgICAg
IGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29sb24r
KykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBo
ZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFsaXpl
UkZDODIySGVhZGVyRmllbGROYW1lKERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwg
Y29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAgICAg
ICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gRGVwcmVjYXRl
ZFN0cmluZzo6ZnJvbUxhdGluMShjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAg
ICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0
cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7Cisg
ICAgICAgICAgICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmll
bGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBs
ZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNl
bmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFs
ZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBG
cmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhl
YWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxl
KSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8v
LyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAg
ICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklM
RV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworCS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAg
ICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIi
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IE5VTEwpCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXpl
KCk7CisKKyAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAs
IGZpbGVIYW5kbGUpOworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBp
ZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9V
TkQ7CisKKwlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVm
ZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4p
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAg
ICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworICAgIAorICAgIGlmIChhbGxv
d0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewor
ICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVy
Rmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkg
eworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0
aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIK
KyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhi
dWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0g
YnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVz
IHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkg
cG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtl
IHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBh
bmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAg
ICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNv
bnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNO
dWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0
aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxk
cy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBwb3N0RGF0YSAr
PSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7
CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmll
bGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQQm9keShQYXNzUmVmUHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEocG9zdERhdGEs
IHBvc3REYXRhTGVuZ3RoKSkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRh
cmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0
aW9uLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpwb3N0VVJMTm90
aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVy
biBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSwgdHJ1
ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKK3sKKyAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5IGFsbG93IGhlYWRlcnMg
dG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5nIGEgZmlsZS4KKyAgICBy
ZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIDAsIGZhbHNlLCBm
aWxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpuZXdTdHJlYW0oTlBNSU1FVHlwZSB0
eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKK30KKworaW50MzIgUGx1Z2luVmlld0d0azo6d3JpdGUoTlBTdHJlYW0qIHN0cmVh
bSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAtMTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
R3RrOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sK
KyAgICBQbHVnaW5TdHJlYW1HdGsqIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNfY2FzdDxQbHVnaW5T
dHJlYW1HdGsqPihzdHJlYW0tPm5kYXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8IFBsdWdpblN0
cmVhbUd0azo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQorICAgICAgICBy
ZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dzZXJTdHJlYW0t
PmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgpCit7CisgICAg
aWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpCisgICAgICAg
IHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgp
KQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdl
bnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0
cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlm
IChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJv
bWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
Cit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpCisgICAgICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogeworICAgICAgICAgICAgaWYgKCFt
X25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gWHREaXNw
bGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0
ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5WVG9vbGtpdDogeworI2lm
IFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAy
OworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAwOworI2Vu
ZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5E
T1dJTkdfWDExKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7
CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOwor
I2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3Qq
IHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0
KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRh
aW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3Rz
L3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmpl
Y3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0
KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAg
KnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVs
ZW1lbnROUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVj
dCA9IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFn
KSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFn
TmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0
YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsK
KworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwor
CisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9
IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAg
ICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyNpZmRl
ZiBHREtfV0lORE9XSU5HX1gxMQorICAgICAgICAgICAgKigoWElEICopdykgPSBHREtfV0lORE9X
X1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cpOworI2VuZGlm
CisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorICAgICAgICAgICAgKigoSFdORCAqKXcpID0g
R0RLX1dJTkRPV0lOR19IV05EKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93
KTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUoTlBQVmFyaWFi
bGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAg
ICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1faXNXaW5kb3dl
ZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICBj
YXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBtX2lzVHJhbnNwYXJl
bnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAg
ICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIo
cmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJv
dHRvbSAtIHJlY3QtPnRvcCk7CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sK
KyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRSAt
IEludmFsaWRhdGUgdGhlIHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25Cb3go
cmVnaW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICovCit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmIChtX2lzV2luZG93
ZWQpCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3dpZGdldCk7CisgICAgZWxzZQor
ICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93
KCkpKTsKK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIFBsdWdpblZpZXdHdGs6OmJpbmRp
bmdJbnN0YW5jZSgpCit7CisgICAgTlBPYmplY3QqIG9iamVjdCA9IDA7CisKKyAgICBpZiAoIW1f
cGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8S0pTOjpCaW5k
aW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RPYmplY3Qo
dGhpcywgbV9wYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAg
IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAgIF9OUE5fUmVs
ZWFzZU9iamVjdChvYmplY3QpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitQbHVnaW5W
aWV3R3RrOjp+UGx1Z2luVmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxs
VmFsdWVzKG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywg
bV9wYXJhbUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJh
bUNvdW50KTsKKworICAgIGlmICghbV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNfV0lER0VUKG1fd2lk
Z2V0KSkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsKKyAgICBtX3dpbmRv
dyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xl
YW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYg
IShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpCisgICAgICAgIG1fcGx1
Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaXNjb25uZWN0U3RyZWFt
KFBsdWdpblN0cmVhbUd0ayogc3RyZWFtKQoreworICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFp
bnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7
CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lu
cyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICBpZiAobWltZVR5cGUgPT0g
ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBtX3F1aXJrcyB8PSBQ
bHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudDsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1
Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1
aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXM7CisgICAgfQorCisgICAgLy8gVGhlIFdN
UCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFu
ZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4g
dGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtX3BsdWdpbi0+bmFt
ZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJX
aW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEZWZlckZp
cnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBub3Qg
d29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBhcmFt
ZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCisgICAg
ICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW07Cisg
ICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0
IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAv
LyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUK
KyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBtX3F1aXJrcyB8PSBQ
bHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgLy8gRklYTUU6IFRoaXMg
aXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gaW4gb3VyIE5QUnVudGltZSBiaW5kaW5nczsg
aWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAvLyBOUE9iamVjdCBhbmQgcGFzc2VzIGl0IHRv
IGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUgdG8gc2VlIHdoYXQgcm9vdCBvYmplY3QgdGhh
dCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8vIFRodXMsIHdlIGRvbid0IGtub3cgdGhhdCB0
aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBwbHVnLWluIGluc3RhbmNl
IGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU0ODc3NDI+LgorICAgIGlm
IChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodCIpCisgICAgICAgIG1fcXVp
cmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbjsKKworICAgIC8vIFByZXZlbnQgdGhl
IFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHksIGNh
dXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXVkaW8v
eC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtE
b250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5OworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1O
YW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKworICAg
IG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVv
ZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICgobV9xdWlya3MgJiBQ
bHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSAmJiBlcXVhbElnbm9yaW5nQ2Fz
ZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5n
KHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFtQ291bnRdID0gY3Jl
YXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFyYW1Db3VudCsrOwor
ICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisKK1BsdWdpblZpZXdH
dGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAg
ICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX2lzU3RhcnRlZChmYWxzZSkK
KyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3BhcmVudEZyYW1lLT5sb2FkZXIo
KS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpKSkKKyAg
ICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVx
dWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAs
IG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwgbV9xdWlya3Mo
MCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNl
KQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxz
ZSkKKyAgICAsIG1fd2luZG93KDApCisgICAgLCBtX2xhc3RNZXNzYWdlKDApCisgICAgLCBtX2xv
YWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21hbnVhbFN0cmVhbSgwKQorICAgICwg
bV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCit7CisgICAgaWYgKCFtX3Bs
dWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW47
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlID0gJm1faW5zdGFuY2VT
dHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisgICAgbV9taW1lVHlwZSA9
IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOworCisgICAg
c2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisKKyAgICBtX21vZGUgPSBt
X2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAgIHJlc2l6ZShzaXplKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5T
dGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAgICAgIG1f
c3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAm
bV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgIGlm
IChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsK
KyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWlu
aW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQo
bV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwp
OworI2Vsc2UKKyAgICBtX3dpZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lk
Z2V0KTsKKyAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworI2VuZGlmCisgICAgZ3RrX3dpZGdl
dF9zaG93IChtX3dpZGdldCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAg
IE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gZ19uZXcwKE5QU2V0V2luZG93Q2FsbGJh
Y2tTdHJ1Y3QsIDEpOworCisgICAgd3MtPnR5cGUgPSAwOworCisgICAgaWYgKG1fbmVlZHNYRW1i
ZWQpIHsKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hESVNQTEFZKG1fd2lkZ2V0
LT53aW5kb3cpOworICAgICAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKGdka19k
cmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpZGdldC0+d2luZG93KSkpOworICAg
ICAgICB3cy0+ZGVwdGggPSBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbChHREtfRFJBV0FCTEUobV93
aWRnZXQtPndpbmRvdykpLT5kZXB0aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR0RLX0NPTE9S
TUFQX1hDT0xPUk1BUChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19EUkFXQUJMRShtX3dp
ZGdldC0+d2luZG93KSkpOworICAgICAgICBtX3dpbmRvdyA9IEdES19XSU5ET1dfWFdJTkRPVyht
X3dpZGdldC0+d2luZG93KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3cy0+ZGlzcGxheSA9IEdU
S19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdUS19Y
VEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0dmlzdWFsOworICAgICAgICB3cy0+ZGVwdGggPSBH
VEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRlcHRoOworICAgICAgICB3cy0+Y29sb3Jt
YXAgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGNvbG9ybWFwOworICAgICAgICBt
X3dpbmRvdyA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0d2luZG93OworCisgICAgICAgIFhGbHVz
aCAod3MtPmRpc3BsYXkpOworICAgIH0KKworICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdzOwor
I2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorICAgIG1fd2luZG93ID0gR0RLX1dJ
TkRPV19IV05EKG1fd2lkZ2V0LT53aW5kb3cpOworI2VuZGlmCisKKyAgICBpZiAobV9pc1dpbmRv
d2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAg
ICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV93aW5kb3c7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAg
IG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3F1aXJrcyAmIFBs
dWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQorICAgICAgICBzZXROUFdpbmRvd1Jl
Y3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoIW1fbWFu
dWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbUd0ayh0
aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1l
bnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCk7CisgICAgbV9tYW51YWxTdHJlYW0tPnNl
dExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVz
cG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fbWFudWFs
U3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgZGF0
YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGaW5pc2hMb2FkaW5nKCkK
K3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRp
ZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkRmFpbChjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOwor
CisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZp
ZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gKKworI2luY2x1ZGUgPGd0ay9ndGt3aWRn
ZXQuaD4KKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVy
bmFsLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBuYW1lc3BhY2UgQmlu
ZGluZ3MgeworICAgICAgICBjbGFzcyBJbnN0YW5jZTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIHN0cnVj
dCBGcmFtZUxvYWRSZXF1ZXN0OworICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3Mg
TW91c2VFdmVudDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7
CisgICAgY2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW1HdGs7
CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwor
ICAgIAorICAgIGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50c01v
emlsbGFVc2VyQWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNl
dFdpbmRvd0NhbGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlk
YXRlID0gMSA8PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9Q
YXJhbSA9IDEgPDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVN
ZXNzYWdlcyA9IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luID0g
MSA8PCA1LAorICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdl
UmVjdXJzaXZlbHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMgewor
ICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luVmlld0d0ayhGcmFtZSogcGFyZW50RnJhbWUsIGNv
bnN0IEludFNpemUmLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFs
bHkpOworICAgICAgICB2aXJ0dWFsIH5QbHVnaW5WaWV3R3RrKCk7CisKKyAgICAgICAgUGx1Z2lu
UGFja2FnZUd0ayogcGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW4uZ2V0KCk7IH0KKyAg
ICAgICAgTlBQIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQorCisgICAg
ICAgIHZvaWQgc2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGlj
IFBsdWdpblZpZXdHdGsqIGN1cnJlbnRQbHVnaW5WaWV3KCk7CisKKyAgICAgICAgS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2UqIGJpbmRpbmdJbnN0YW5jZSgpOworCisgICAgICAgIFBsdWdpblN0YXR1
cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorCisgICAgICAgIC8vIE5QTiBm
dW5jdGlvbnMKKyAgICAgICAgTlBFcnJvciBnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBj
b25zdCBjaGFyKiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIGdl
dFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCk7CisgICAgICAgIE5QRXJy
b3IgcG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSk7
CisgICAgICAgIE5QRXJyb3IgcG9zdFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRh
cmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnV0LCBOUEJvb2wgZmlsZSk7CisgICAgICAg
IE5QRXJyb3IgbmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBO
UFN0cmVhbSoqIHN0cmVhbSk7CisgICAgICAgIGludDMyIHdyaXRlKE5QU3RyZWFtKiBzdHJlYW0s
IGludDMyIGxlbiwgdm9pZCogYnVmZmVyKTsKKyAgICAgICAgTlBFcnJvciBkZXN0cm95U3RyZWFt
KE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbik7CisgICAgICAgIGNvbnN0IGNoYXIq
IHVzZXJBZ2VudCgpOworICAgICAgICB2b2lkIHN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKTsK
KyAgICAgICAgTlBFcnJvciBnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFs
dWUpOworICAgICAgICBOUEVycm9yIHNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSk7CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZVJlY3QoTlBSZWN0Kik7CisgICAgICAg
IHZvaWQgaW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbik7CisgICAgICAgIHZvaWQgZm9yY2VSZWRy
YXcoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtR3RrKik7
CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9t
ZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFu
dWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBp
bnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNl
dFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBi
b29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3RvcCgpOworICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9h
ZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmls
ZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVh
ZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAg
ICAgRWxlbWVudCogbV9lbGVtZW50OworICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAg
ICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VS
TCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVj
dG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOworCisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVl
c3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVn
aW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1
Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGlt
ZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBk
ZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFp
bnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAg
ICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKworICAgICAgICBpbnQgbV9t
b2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50OworICAgICAgICBjaGFyKiogbV9wYXJhbU5h
bWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKKworICAgICAgICBDU3RyaW5nIG1f
bWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1f
aW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2lu
ZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtR3Rr
PiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVl
c3RzOworCisgICAgICAgIGludCBtX3F1aXJrczsKKyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7
CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OworICAgICAgICBib29sIG1faXNWaXNpYmxl
OworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworCisjaWZkZWYgR0RLX1dJTkRPV0lO
R19YMTEKKyAgICAgICAgWElEIG1fd2luZG93OyAvLyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMKKyNl
bmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKwlIV05EIG1fd2luZG93OworI2VuZGlm
CisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRv
IGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93
aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0
TWVzc2FnZTsKKworICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OworICAgICAgICBSZWZQdHI8
UGx1Z2luU3RyZWFtR3RrPiBtX21hbnVhbFN0cmVhbTsKKworICAgICAgICBzdGF0aWMgUGx1Z2lu
Vmlld0d0ayogc19jdXJyZW50UGx1Z2luVmlldzsKKworICAgICAgICBHdGtXaWRnZXQqIG1fd2lk
Z2V0OworICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisj
aW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCisvLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFu
Y2UsLiBTb21ldGltZXMsIHBsdWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBm
dW5jdGlvbgorLy8gd2l0aCBhIE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2Fs
bCB0aGUgbGFzdCBwbHVnLWluIHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisv
LyBDdXJyZW50bHksIHRoZSBjdXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUg
TlBQX05ldyBpbiBQbHVnaW5WaWV3R3RrOjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdv
cmtzIGFyb3VuZCBGbGFzaCBhbmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhl
eSBjYWxsIE5QTl9Vc2VyYWdlbnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2lu
Vmlld0d0ayogcGx1Z2luVmlld0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAo
aW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGx1Z2luVmlld0d0ayo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdH
dGs6OmN1cnJlbnRQbHVnaW5WaWV3KCk7Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIg
c2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVl
KHZvaWQqIHB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2go
dWludDMyIHNpemUpCit7CisgICAgLy8gRG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2
b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNo
UGx1Z2lucyhyZWxvYWRQYWdlcyk7Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3Ry
ZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRh
KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxO
b3RpZnkodXJsLCB0YXJnZXQsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwo
TlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAg
ICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFy
Z2V0KTsKK30KKworTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0
IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBi
dWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4s
IGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwg
Y29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUp
OworfQorCitOUEVycm9yIE5QTl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5
cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJu
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQs
IHN0cmVhbSk7Cit9CisKK2ludDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBz
dHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKwor
TlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0s
IE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGlu
c3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIq
IE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXdHdGsqIHZpZXcg
PSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21l
IHBsdWctaW5zIGNhbGwgTlBOX1VzZXJBZ2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVp
ciBOUF9pbml0aWFsaXplIGZ1bmN0aW9uIQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0
IGEgdXNlciBhZ2VudCB3aXRob3V0IGhhdmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2
aWV3KQorICAgICAgICAgcmV0dXJuIDA7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgp
OworfQorCit2b2lkIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdl
KQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdl
KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGlu
dmFsaWRSZWN0KQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFs
aWRhdGVSZWN0KGludmFsaWRSZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihO
UFAgaW5zdGFuY2UsIE5QUmVnaW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30K
Kwordm9pZCBOUE5fRm9yY2VSZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dl
dFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2
YXJpYWJsZSwgdmFsdWUpOworfQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2Us
IE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQor
Cit2b2lkKiBOUE5fR2V0SmF2YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAv
LyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0Vu
YWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworfQorCit2b2lkCitO
UE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKK30KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0
ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0
aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZp
bTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lO
IExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIu
MQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1v
emlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRw
Oi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lU
SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2Vl
IHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdo
dHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3Jp
Z2luYWwgQ29kZSBpcyB0aGUgWEVNQkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFs
IERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywg
SW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENv
cHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisg
KiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRl
ciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0
aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3Rl
YWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRo
ZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNh
dGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5k
IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJl
cXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0
aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUg
R1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICov
CisKKy8qIFhFTUJFRCBtZXNzYWdlcyAqLworI2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZ
ICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisj
ZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURf
UkVRVUVTVF9GT0NVUyAgICAgICAgICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAg
ICAgICAgICAgICA0CisjZGVmaW5lIFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQor
I2RlZmluZSBYRU1CRURfRk9DVVNfTkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVE
X0ZPQ1VTX1BSRVYgICAgICAgICAgICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAg
ICAgICAgICAgICAgOAorI2RlZmluZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkK
KyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09OICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1C
RURfTU9EQUxJVFlfT0ZGICAgICAgICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdl
cyovCisjZGVmaW5lIFhFTUJFRF9HVEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmlu
ZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkgICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAg
WEVNQkVEX0ZPQ1VTX0lOOiAqLworI2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAg
ICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5l
IFhFTUJFRF9GT0NVU19MQVNUICAgICAgICAgICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJF
RF9JTkZPICovCisjZGVmaW5lIFhFTUJFRF9NQVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwg
MCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGVidWcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRlYnVnLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQTFVHSU5fREVCVUdfSF9fCisjZGVmaW5l
IFBMVUdJTl9ERUJVR19IX18KKworI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorCitz
dGF0aWMgY29uc3QgY2hhciogZXJyb3JTdHJpbmdzW10gPSB7CisgICAgIk5vIGVycm9ycyBvY2N1
cnJlZC4iLCAvKiBOUEVSUl9OT19FUlJPUiAqLworICAgICJFcnJvciB3aXRoIG5vIHNwZWNpZmlj
IGVycm9yIGNvZGUgb2NjdXJyZWQuIiwgLyogTlBFUlJfR0VORVJJQ19FUlJPUiAqLworICAgICJJ
bnZhbGlkIGluc3RhbmNlIHBhc3NlZCB0byB0aGUgcGx1Zy1pbi4iLCAvKiBOUEVSUl9JTlZBTElE
X0lOU1RBTkNFX0VSUk9SICovCisgICAgIkZ1bmN0aW9uIHRhYmxlIGludmFsaWQuIiwgLyogTlBF
UlJfSU5WQUxJRF9GVU5DVEFCTEVfRVJST1IgKi8KKyAgICAiTG9hZGluZyBvZiBwbHVnLWluIGZh
aWxlZC4iLCAvKiBOUEVSUl9NT0RVTEVfTE9BRF9GQUlMRURfRVJST1IgKi8KKyAgICAiTWVtb3J5
IGFsbG9jYXRpb24gZmFpbGVkLiIsIC8qIE5QRVJSX09VVF9PRl9NRU1PUllfRVJST1IgKi8KKyAg
ICAiUGx1Zy1pbiBtaXNzaW5nIG9yIGludmFsaWQuIiwgLyogTlBFUlJfSU5WQUxJRF9QTFVHSU5f
RVJST1IgKi8KKyAgICAiUGx1Zy1pbiBkaXJlY3RvcnkgbWlzc2luZyBvciBpbnZhbGlkLiIsIC8q
IE5QRVJSX0lOVkFMSURfUExVR0lOX0RJUl9FUlJPUiAqLworICAgICJWZXJzaW9ucyBvZiBwbHVn
LWluIGFuZCBDb21tdW5pY2F0b3IgZG8gbm90IG1hdGNoLiIsIC8qIE5QRVJSX0lOQ09NUEFUSUJM
RV9WRVJTSU9OX0VSUk9SICovCisgICAgIlBhcmFtZXRlciBtaXNzaW5nIG9yIGludmFsaWQuIiwg
LyogTlBFUlJfSU5WQUxJRF9QQVJBTSAqLworICAgICJVUkwgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0lOVkFMSURfVVJMICovCisgICAgIkZpbGUgbWlzc2luZyBvciBpbnZhbGlkLiIs
IC8qIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EICovCisgICAgIlN0cmVhbSBjb250YWlucyBubyBkYXRh
LiIsIC8qIE5QRVJSX05PX0RBVEEgKi8KKyAgICAiU2Vla2FibGUgc3RyZWFtIGV4cGVjdGVkLiIs
IC8qIE5QRVJSX1NUUkVBTV9OT1RfU0VFS0FCTEUgKi8KKyAgICAiVW5rbm93biBlcnJvciBjb2Rl
IgorfTsKKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSBpZiAoZXJy
ICE9IE5QRVJSX05PX0VSUk9SKSBfUlBURjIoX0NSVF9XQVJOLCAiJXM6ICVzXG4iLCBfX0ZVTkNU
SU9OX18sIGVycm9yU3RyaW5nc1tlcnJdKQorI2RlZmluZSBMT0dfUExVR0lOX05FVF9FUlJPUigp
IF9SUFRGMShfQ1JUX1dBUk4sICIlczogU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0
aCBuZXR3b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxu
IiwgX19GVU5DVElPTl9fKQorI2Vsc2UKKyNkZWZpbmUgTE9HX1BMVUdJTl9ORVRfRVJST1IoKSAo
KHZvaWQpMCkKKyNkZWZpbmUgTE9HX05QRVJST1IoZXJyKSAoKHZvaWQpMCkKKyNlbmRpZgorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBmdW5jdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgX05QRlVOQ1RJT05TX0hfCisjZGVmaW5lIF9O
UEZVTkNUSU9OU19IXworCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoWFBfV0lO
KQorI2RlZmluZSBFWFBPUlRFRF9DQUxMQkFDSyhfdHlwZSwgX25hbWUpIF90eXBlIChfX3N0ZGNh
bGwgKiBfbmFtZSkKKyNlbHNlCisjZGVmaW5lIEVYUE9SVEVEX0NBTExCQUNLKF90eXBlLCBfbmFt
ZSkgX3R5cGUgKCogX25hbWUpCisjZW5kaWYKKwordHlwZWRlZiBOUEVycm9yICgqTlBOX0dldFVS
TE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFy
KiB3aW5kb3csIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgqTlBOX1Bvc3RV
UkxOb3RpZnlQcm9jUHRyKShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIFVSTCwgY29uc3QgY2hh
ciogd2luZG93LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9SZXF1ZXN0UmVhZFByb2NQdHIp
KE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpOwordHlwZWRlZiBOUEVy
cm9yICgqTlBOX05ld1N0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBl
LCBjb25zdCBjaGFyKiB3aW5kb3csIE5QU3RyZWFtKiogc3RyZWFtKTsKK3R5cGVkZWYgaW50MzIg
KCpOUE5fV3JpdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMy
IGxlbiwgdm9pZCogYnVmZmVyKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9EZXN0cm95U3RyZWFt
UHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24p
OwordHlwZWRlZiB2b2lkICgqTlBOX1N0YXR1c1Byb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSk7Cit0eXBlZGVmIGNvbnN0IGNoYXIqKCpOUE5fVXNlckFnZW50UHJvY1B0
cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCogKCpOUE5fTWVtQWxsb2NQcm9jUHRyKSh1
aW50MzIgc2l6ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fTWVtRnJlZVByb2NQdHIpKHZvaWQqIHB0
cik7Cit0eXBlZGVmIHVpbnQzMiAoKk5QTl9NZW1GbHVzaFByb2NQdHIpKHVpbnQzMiBzaXplKTsK
K3R5cGVkZWYgdm9pZCAoKk5QTl9SZWxvYWRQbHVnaW5zUHJvY1B0cikoTlBCb29sIHJlbG9hZFBh
Z2VzKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QTl9HZXRWYWx1ZVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnJldF92YWx1ZSk7Cit0eXBlZGVmIE5QRXJy
b3IgKCpOUE5fU2V0VmFsdWVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkICp2YWx1ZSk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52YWxpZGF0ZVJlY3RQcm9j
UHRyKShOUFAgaW5zdGFuY2UsIE5QUmVjdCAqcmVjdCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fSW52
YWxpZGF0ZVJlZ2lvblByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gcmVnaW9uKTsKK3R5
cGVkZWYgdm9pZCAoKk5QTl9Gb3JjZVJlZHJhd1Byb2NQdHIpKE5QUCBpbnN0YW5jZSk7Cit0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpOUE5fUG9zdFVS
TFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBjaGFyKiB3aW5k
b3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwordHlwZWRlZiB2
b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7Cit0eXBlZGVmIHZvaWQqICgqTlBO
X0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Q
dXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxl
ZCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQ
IGluc3RhbmNlKTsKKwordHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9j
UHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKKwordHlwZWRlZiBOUElkZW50aWZpZXIgKCpOUE5f
R2V0U3RyaW5nSWRlbnRpZmllclByb2NQdHIpIChjb25zdCBOUFVURjggKm5hbWUpOwordHlwZWRl
ZiB2b2lkICgqTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzUHJvY1B0cikgKGNvbnN0IE5QVVRGOCAq
Km5hbWVzLCBpbnQzMl90IG5hbWVDb3VudCwgTlBJZGVudGlmaWVyICppZGVudGlmaWVycyk7Cit0
eXBlZGVmIE5QSWRlbnRpZmllciAoKk5QTl9HZXRJbnRJZGVudGlmaWVyUHJvY1B0cikgKGludDMy
X3QgaW50aWQpOwordHlwZWRlZiBpbnQzMl90ICgqTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0
cikgKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JZGVudGlm
aWVySXNTdHJpbmdQcm9jUHRyKSAoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIpOwordHlwZWRlZiBO
UFVURjggKigqTlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIpIChOUElkZW50aWZpZXIgaWRl
bnRpZmllcik7CisKK3R5cGVkZWYgTlBPYmplY3QqICgqTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIp
IChOUFAsIE5QQ2xhc3MgKmFDbGFzcyk7Cit0eXBlZGVmIE5QT2JqZWN0KiAoKk5QTl9SZXRhaW5P
YmplY3RQcm9jUHRyKSAoTlBPYmplY3QgKm9iaik7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFz
ZU9iamVjdFByb2NQdHIpIChOUE9iamVjdCAqb2JqKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZv
a2VQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG1ldGhvZE5h
bWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291bnQsIE5QVmFyaWFudCAq
cmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9JbnZva2VEZWZhdWx0UHJvY1B0cikgKE5QUCBu
cHAsIE5QT2JqZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdW5zaWduZWQgYXJnQ291
bnQsIE5QVmFyaWFudCAqcmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FdmFsdWF0ZVByb2NQ
dHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUFN0cmluZyAqc2NyaXB0LCBOUFZhcmlhbnQg
KnJlc3VsdCk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fR2V0UHJvcGVydHlQcm9jUHRyKSAoTlBQIG5w
cCwgTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyICBwcm9wZXJ0eU5hbWUsIE5QVmFyaWFudCAq
cmVzdWx0KTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9TZXRQcm9wZXJ0eVByb2NQdHIpIChOUFAgbnBw
LCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgIHByb3BlcnR5TmFtZSwgY29uc3QgTlBWYXJp
YW50ICp2YWx1ZSk7Cit0eXBlZGVmIGJvb2wgKCpOUE5fSGFzUHJvcGVydHlQcm9jUHRyKSAoTlBQ
LCBOUE9iamVjdCAqbnBvYmosIE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwordHlwZWRlZiBi
b29sICgqTlBOX0hhc01ldGhvZFByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqbnBvYmosIE5Q
SWRlbnRpZmllciBtZXRob2ROYW1lKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9SZW1vdmVQcm9wZXJ0
eVByb2NQdHIpIChOUFAgbnBwLCBOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgcHJvcGVydHlO
YW1lKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyKSAoTlBPYmplY3Qg
Km9iaiwgY29uc3QgTlBVVEY4ICptZXNzYWdlKTsKK3R5cGVkZWYgYm9vbCAoKk5QTl9FbnVtZXJh
dGVQcm9jUHRyKSAoTlBQIG5wcCwgTlBPYmplY3QgKm5wb2JqLCBOUElkZW50aWZpZXIgKippZGVu
dGlmaWVyLCB1aW50MzJfdCAqY291bnQpOworCit0eXBlZGVmIE5QRXJyb3IgKCpOUFBfTmV3UHJv
Y1B0cikoTlBNSU1FVHlwZSBwbHVnaW5UeXBlLCBOUFAgaW5zdGFuY2UsIHVpbnQxNiBtb2RlLCBp
bnQxNiBhcmdjLCBjaGFyKiBhcmduW10sIGNoYXIqIGFyZ3ZbXSwgTlBTYXZlZERhdGEqIHNhdmVk
KTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9EZXN0cm95UHJvY1B0cikoTlBQIGluc3RhbmNlLCBO
UFNhdmVkRGF0YSoqIHNhdmUpOwordHlwZWRlZiBOUEVycm9yICgqTlBQX1NldFdpbmRvd1Byb2NQ
dHIpKE5QUCBpbnN0YW5jZSwgTlBXaW5kb3cqIHdpbmRvdyk7Cit0eXBlZGVmIE5QRXJyb3IgKCpO
UFBfTmV3U3RyZWFtUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIE5QU3Ry
ZWFtKiBzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2KiBzdHlwZSk7Cit0eXBlZGVmIE5Q
RXJyb3IgKCpOUFBfRGVzdHJveVN0cmVhbVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0q
IHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKK3R5cGVkZWYgdm9pZCAoKk5QUF9TdHJlYW1Bc0Zp
bGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGZu
YW1lKTsKK3R5cGVkZWYgaW50MzIgKCpOUFBfV3JpdGVSZWFkeVByb2NQdHIpKE5QUCBpbnN0YW5j
ZSwgTlBTdHJlYW0qIHN0cmVhbSk7Cit0eXBlZGVmIGludDMyICgqTlBQX1dyaXRlUHJvY1B0ciko
TlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMl90IG9mZnNldCwgaW50MzJfdCBs
ZW4sIHZvaWQqIGJ1ZmZlcik7Cit0eXBlZGVmIHZvaWQgKCpOUFBfUHJpbnRQcm9jUHRyKShOUFAg
aW5zdGFuY2UsIE5QUHJpbnQqIHBsYXRmb3JtUHJpbnQpOwordHlwZWRlZiBpbnQxNiAoKk5QUF9I
YW5kbGVFdmVudFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgdm9pZCogZXZlbnQpOwordHlwZWRlZiB2
b2lkICgqTlBQX1VSTE5vdGlmeVByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJM
LCBOUFJlYXNvbiByZWFzb24sIHZvaWQqIG5vdGlmeURhdGEpOwordHlwZWRlZiBOUEVycm9yICgq
TlBQX0dldFZhbHVlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCAqcmV0X3ZhbHVlKTsKK3R5cGVkZWYgTlBFcnJvciAoKk5QUF9TZXRWYWx1ZVByb2NQdHIp
KE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQgKnZhbHVlKTsKK3R5cGVk
ZWYgRVhQT1JURURfQ0FMTEJBQ0sodm9pZCwgTlBQX1NodXRkb3duUHJvY1B0cikodm9pZCk7CisK
K3R5cGVkZWYgdm9pZCAqKCpOUFBfR2V0SmF2YUNsYXNzUHJvY1B0cikodm9pZCk7Cit0eXBlZGVm
IHZvaWQqICAgSlJJR2xvYmFsUmVmOyAvL25vdCB1c2luZyB0aGlzIHJpZ2h0IG5vdworCit0eXBl
ZGVmIHN0cnVjdCBfTlBOZXRzY2FwZUZ1bmNzIHsKKyAgICB1aW50MTYgc2l6ZTsKKyAgICB1aW50
MTYgdmVyc2lvbjsKKyAgICAKKyAgICBOUE5fR2V0VVJMUHJvY1B0ciBnZXR1cmw7CisgICAgTlBO
X1Bvc3RVUkxQcm9jUHRyIHBvc3R1cmw7CisgICAgTlBOX1JlcXVlc3RSZWFkUHJvY1B0ciByZXF1
ZXN0cmVhZDsKKyAgICBOUE5fTmV3U3RyZWFtUHJvY1B0ciBuZXdzdHJlYW07CisgICAgTlBOX1dy
aXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUE5fRGVzdHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0
cmVhbTsKKyAgICBOUE5fU3RhdHVzUHJvY1B0ciBzdGF0dXM7CisgICAgTlBOX1VzZXJBZ2VudFBy
b2NQdHIgdWFnZW50OworICAgIE5QTl9NZW1BbGxvY1Byb2NQdHIgbWVtYWxsb2M7CisgICAgTlBO
X01lbUZyZWVQcm9jUHRyIG1lbWZyZWU7CisgICAgTlBOX01lbUZsdXNoUHJvY1B0ciBtZW1mbHVz
aDsKKyAgICBOUE5fUmVsb2FkUGx1Z2luc1Byb2NQdHIgcmVsb2FkcGx1Z2luczsKKyAgICBOUE5f
R2V0SmF2YUVudlByb2NQdHIgZ2V0SmF2YUVudjsKKyAgICBOUE5fR2V0SmF2YVBlZXJQcm9jUHRy
IGdldEphdmFQZWVyOworICAgIE5QTl9HZXRVUkxOb3RpZnlQcm9jUHRyIGdldHVybG5vdGlmeTsK
KyAgICBOUE5fUG9zdFVSTE5vdGlmeVByb2NQdHIgcG9zdHVybG5vdGlmeTsKKyAgICBOUE5fR2V0
VmFsdWVQcm9jUHRyIGdldHZhbHVlOworICAgIE5QTl9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7
CisgICAgTlBOX0ludmFsaWRhdGVSZWN0UHJvY1B0ciBpbnZhbGlkYXRlcmVjdDsKKyAgICBOUE5f
SW52YWxpZGF0ZVJlZ2lvblByb2NQdHIgaW52YWxpZGF0ZXJlZ2lvbjsKKyAgICBOUE5fRm9yY2VS
ZWRyYXdQcm9jUHRyIGZvcmNlcmVkcmF3OworICAgIAorICAgIE5QTl9HZXRTdHJpbmdJZGVudGlm
aWVyUHJvY1B0ciBnZXRzdHJpbmdpZGVudGlmaWVyOworICAgIE5QTl9HZXRTdHJpbmdJZGVudGlm
aWVyc1Byb2NQdHIgZ2V0c3RyaW5naWRlbnRpZmllcnM7CisgICAgTlBOX0dldEludElkZW50aWZp
ZXJQcm9jUHRyIGdldGludGlkZW50aWZpZXI7CisgICAgTlBOX0lkZW50aWZpZXJJc1N0cmluZ1By
b2NQdHIgaWRlbnRpZmllcmlzc3RyaW5nOworICAgIE5QTl9VVEY4RnJvbUlkZW50aWZpZXJQcm9j
UHRyIHV0Zjhmcm9taWRlbnRpZmllcjsKKyAgICBOUE5fSW50RnJvbUlkZW50aWZpZXJQcm9jUHRy
IGludGZyb21pZGVudGlmaWVyOworICAgIE5QTl9DcmVhdGVPYmplY3RQcm9jUHRyIGNyZWF0ZW9i
amVjdDsKKyAgICBOUE5fUmV0YWluT2JqZWN0UHJvY1B0ciByZXRhaW5vYmplY3Q7CisgICAgTlBO
X1JlbGVhc2VPYmplY3RQcm9jUHRyIHJlbGVhc2VvYmplY3Q7CisgICAgTlBOX0ludm9rZVByb2NQ
dHIgaW52b2tlOworICAgIE5QTl9JbnZva2VEZWZhdWx0UHJvY1B0ciBpbnZva2VEZWZhdWx0Owor
ICAgIE5QTl9FdmFsdWF0ZVByb2NQdHIgZXZhbHVhdGU7CisgICAgTlBOX0dldFByb3BlcnR5UHJv
Y1B0ciBnZXRwcm9wZXJ0eTsKKyAgICBOUE5fU2V0UHJvcGVydHlQcm9jUHRyIHNldHByb3BlcnR5
OworICAgIE5QTl9SZW1vdmVQcm9wZXJ0eVByb2NQdHIgcmVtb3ZlcHJvcGVydHk7CisgICAgTlBO
X0hhc1Byb3BlcnR5UHJvY1B0ciBoYXNwcm9wZXJ0eTsKKyAgICBOUE5fSGFzTWV0aG9kUHJvY1B0
ciBoYXNtZXRob2Q7CisgICAgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWVQcm9jUHRyIHJlbGVhc2V2
YXJpYW50dmFsdWU7CisgICAgTlBOX1NldEV4Y2VwdGlvblByb2NQdHIgc2V0ZXhjZXB0aW9uOwor
ICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwdXNocG9wdXBzZW5hYmxlZHN0
YXRlOworICAgIE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHBvcHBvcHVwc2VuYWJs
ZWRzdGF0ZTsKKyAgICBOUE5fRW51bWVyYXRlUHJvY1B0ciBlbnVtZXJhdGU7Cit9IE5QTmV0c2Nh
cGVGdW5jczsKKwordHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3MgeworICAgIHVpbnQxNiBz
aXplOworICAgIHVpbnQxNiB2ZXJzaW9uOworICAgIE5QUF9OZXdQcm9jUHRyIG5ld3A7CisgICAg
TlBQX0Rlc3Ryb3lQcm9jUHRyIGRlc3Ryb3k7CisgICAgTlBQX1NldFdpbmRvd1Byb2NQdHIgc2V0
d2luZG93OworICAgIE5QUF9OZXdTdHJlYW1Qcm9jUHRyIG5ld3N0cmVhbTsKKyAgICBOUFBfRGVz
dHJveVN0cmVhbVByb2NQdHIgZGVzdHJveXN0cmVhbTsKKyAgICBOUFBfU3RyZWFtQXNGaWxlUHJv
Y1B0ciBhc2ZpbGU7CisgICAgTlBQX1dyaXRlUmVhZHlQcm9jUHRyIHdyaXRlcmVhZHk7CisgICAg
TlBQX1dyaXRlUHJvY1B0ciB3cml0ZTsKKyAgICBOUFBfUHJpbnRQcm9jUHRyIHByaW50OworICAg
IE5QUF9IYW5kbGVFdmVudFByb2NQdHIgZXZlbnQ7CisgICAgTlBQX1VSTE5vdGlmeVByb2NQdHIg
dXJsbm90aWZ5OworICAgIEpSSUdsb2JhbFJlZiBqYXZhQ2xhc3M7CisgICAgTlBQX0dldFZhbHVl
UHJvY1B0ciBnZXR2YWx1ZTsKKyAgICBOUFBfU2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOworfSBO
UFBsdWdpbkZ1bmNzOworCit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0lu
aXRpYWxpemVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKik7Cit0eXBl
ZGVmIEVYUE9SVEVEX0NBTExCQUNLKGNvbnN0IGNoYXIqLCBOUF9HZXRNSU1FRGVzY3JpcHRpb25G
dW5jUHRyKSh2b2lkKTsKKworI2lmIGRlZmluZWQoWFBfTUFDT1NYKQordHlwZWRlZiB2b2lkICAg
ICgqQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKK3R5
cGVkZWYgTlBFcnJvciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1
bmNzKiwgTlBQX1NodXRkb3duUHJvY1B0ciopOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1
cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5NDEgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50
LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6
c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemls
bGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNl
CisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlh
bCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMs
IEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBD
b3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgor
ICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0
ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2Ug
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0
ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0
aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGlj
YXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICog
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhl
IEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRnZXQgYWxsb3dzIGZvciBYdCB0b29sa2l0IGNv
ZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RLIGFwcGxpY2F0aW9uLiAgCisgKi8KKworI3Vu
ZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKworI2luY2x1ZGUgInhlbWJlZC5oIgorI2luY2x1
ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisKKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxp
Yi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2lu
Y2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisv
KiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQg
d2lkZ2V0CisgICBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJVR19YVEJJ
TgorCisjZGVmaW5lIFhUQklOX01BWF9FVkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAgICAgICAg
ICBndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3RhdGljIHZv
aWQgICAgICAgICAgICBndGtfeHRiaW5faW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAqeHRiaW4p
Oworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3RrV2lkZ2V0
ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl91bnJlYWxp
emUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBn
dGtfeHRiaW5fZGVzdHJveSAgICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0aWMgdm9p
ZCAgICAgICAgICAgIGd0a194dGJpbl9zaHV0ZG93biAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0
KTsKKworLyogWHQgYXdhcmUgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRf
aW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9j
bGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAg
eHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdldCB4dHBsdWcsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9p
ZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7
CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRn
ZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB1c2VyX2RhdGEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2
ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdp
ZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRf
Zm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0
YSk7IAorc3RhdGljIHZvaWQgICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3
LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVtYmVkX21l
c3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb25nIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGRhdGExLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25n
IHRpbWUpOyAgCitzdGF0aWMgaW50ICAgICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChEaXNwbGF5
ICpkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFcnJv
ckV2ZW50ICplcnJvcik7CisvKiBGb3IgZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0YXRpYyB2
b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOworc3RhdGljIGludCAgICAgICAgdW50cmFwX2Vy
cm9yKHZvaWQpOworc3RhdGljIGludCAgICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikgKERpc3Bs
YXkgKiwgWEVycm9yRXZlbnQgKik7CitzdGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vycm9yX2Nv
ZGUgPSAwOworCitzdGF0aWMgR3RrV2lkZ2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisK
K3N0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMgU3RyaW5n
ICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9p
c19pbml0aWFsaXplZCA9IEZBTFNFOworc3RhdGljIGdpbnQgICAgICAgICAgICAgbnVtX3dpZGdl
dHMgPSAwOworCitzdGF0aWMgR1BvbGxGRCAgICAgICAgICB4dF9ldmVudF9wb2xsX2ZkOworc3Rh
dGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0aWMgZ3Vp
bnQgICAgICAgICAgICB0YWcgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3ByZXBh
cmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBnaW50ICAgICAq
dGltZW91dCkKK3sgICAKKyAgaW50IG1hc2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIoKTsKKyAg
bWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7CisKKyAg
cmV0dXJuIChnYm9vbGVhbiltYXNrOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2No
ZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCit7CisgIEdES19USFJFQURTX0VOVEVSICgpOwor
CisgIGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAgaW50IG1h
c2s7CisgICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVBRFNfTEVB
VkUgKCk7CisgICAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworICB9CisKKyAgR0RLX1RIUkVBRFNf
TEVBVkUgKCk7CisgIHJldHVybiBGQUxTRTsKK30gICAKKworc3RhdGljIGdib29sZWFuCit4dF9l
dmVudF9kaXNwYXRjaCAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAg
ICBHU291cmNlRnVuYyBjYWxsX2JhY2ssCisgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICB1
c2VyX2RhdGEpCit7CisgIFhFdmVudCBldmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQg
aSA9IDA7CisKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRpc3BsYXkp
OworCisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIC8qIFByb2Nlc3Mgb25seSByZWFsIFgg
dHJhZmZpYyBoZXJlLiAgV2Ugb25seSBsb29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBwaXBlLCBs
aW1pdCBpdCB0byBYVEJJTl9NQVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRBcHBQcm9j
ZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUncyBubwor
ICAgKiB0aW1lciBwcm9jZXNzaW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGltZXIg
Y2FsbGJhY2sgdGhhdAorICAgKiBkb2VzIGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBYVEJJTl9N
QVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBwUHJvY2Vz
c0V2ZW50KGFjLCBYdElNWEV2ZW50KTsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOwor
CisgIHJldHVybiBUUlVFOyAgCit9CisKK3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZlbnRfZnVu
Y3MgPSB7CisgIHh0X2V2ZW50X3ByZXBhcmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4dF9ldmVu
dF9kaXNwYXRjaCwKKyAgZ19mcmVlLAorICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdTb3VyY2VE
dW1teU1hcnNoYWwpTlVMTAorfTsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wb2xsaW5n
X3RpbWVyX2NhbGxiYWNrKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAqIGRpc3Bs
YXk7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIwOworCisg
IGRpc3BsYXkgPSAoRGlzcGxheSAqKXVzZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxp
Y2F0aW9uQ29udGV4dChkaXNwbGF5KTsKKworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3MgbWFueSBY
dCBldmVudHMgaGVyZS4gSWYgd2UganVzdCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3ZSBtaWdo
dCBzdGFydmUgb25lIG9yIG1vcmUgWHQgY29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFuZAorICAg
ICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdob2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBwb3VyaW5n
IGluLiBTbyBwcm9jZXNzCisgICAgIHVwIHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cgYW5kIHNh
dmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBUaGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0IG91Z2h0
YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVnaW5zLgor
ICAqLworICB3aGlsZSAoZXZlbnRzVG9Qcm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFjKSkKKyAg
ICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTUFsbCk7CisgIHJldHVybiBUUlVFOworfQorCitH
dGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtUeXBlIHh0
YmluX3R5cGUgPSAwOworCisgIGlmICgheHRiaW5fdHlwZSkgeworICAgICAgc3RhdGljIGNvbnN0
IEd0a1R5cGVJbmZvIHh0YmluX2luZm8gPQorICAgICAgeworICAgICAgICAiR3RrWHRCaW4iLAor
ICAgICAgICBzaXplb2YgKEd0a1h0QmluKSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNz
KSwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0LAorICAg
ICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMpIGd0a194dGJpbl9pbml0LAorICAgICAgICAvKiByZXNl
cnZlZF8xICovIE5VTEwsCisgICAgICAgIC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAgICAgICAg
KEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwKKyAgICAgIH07CisgICAgICB4dGJpbl90eXBlID0gZ3Rr
X3R5cGVfdW5pcXVlIChHVEtfVFlQRV9TT0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9CisgIHJl
dHVybiB4dGJpbl90eXBlOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNzX2luaXQg
KEd0a1h0QmluQ2xhc3MgKmtsYXNzKQoreworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNz
OworICBHdGtPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFzcyA9IGd0
a190eXBlX2NsYXNzIChHVEtfVFlQRV9TT0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9IEdUS19X
SURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3RrX3h0Ymlu
X3JlYWxpemU7CisgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3VucmVhbGl6
ZTsKKworICBvYmplY3RfY2xhc3MgPSBHVEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIG9iamVj
dF9jbGFzcy0+ZGVzdHJveSA9IGd0a194dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMgdm9pZAor
Z3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlzcGxheSA9
IE5VTEw7CisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0d2luZG93
ID0gMDsKKyAgeHRiaW4tPnggPSAwOworICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRpYyB2b2lk
CitndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0QmluICAg
ICAqeHRiaW47CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAwLCAyMDAg
fTsKKyAgZ2ludCAgeCwgeSwgdywgaCwgZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICovCisKKyNp
ZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZWFsaXplKClcbiIpOworI2Vu
ZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsKKworICB4
dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxsb2NhdGlv
biBiZWZvcmUgcmVhbGl6ZSAqLworICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJpbi0+cGFy
ZW50X3dpbmRvdywgJngsICZ5LCAmdywgJmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHc7
CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlICh3
aWRnZXQsICZhbGxvY2F0aW9uKTsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiaW5p
dGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRpZgorCisg
IHh0YmluLT53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4tPmhlaWdo
dCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tldCdzIHJl
YWxpemUgKi8KKyAgKCpHVEtfV0lER0VUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxpemUpKHdp
ZGdldCk7CisKKyAgLyogY3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0X2NsaWVu
dF9jcmVhdGUoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dldF9pZChH
VEtfU09DS0VUKHh0YmluKSksIAorICAgICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAgIHh0Ymlu
LT53aWR0aCk7CisgIHh0YmluLT54dHdpbmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNsaWVudC5j
aGlsZF93aWRnZXQpOworCisgIGdka19mbHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdlIGhhdmUg
Y3JlYXRlZCB0aGUgeHQgY2xpZW50LCBhZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAgZ3RrX3Nv
Y2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOworfQorCisK
KworR3RrV2lkZ2V0KgorZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBT
dHJpbmcgKiBmKQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJfZGF0YTsK
KworICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtfdHlwZV9u
ZXcgKEdUS19UWVBFX1hUQklOKTsKKworICBpZiAoIXh0YmluKQorICAgIHJldHVybiAoR3RrV2lk
Z2V0KilOVUxMOworCisgIGlmIChmKQorICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJbml0aWFs
aXplIHRoZSBYdCB0b29sa2l0ICovCisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFyZW50X3dp
bmRvdzsKKworICB4dF9jbGllbnRfaW5pdCgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgR0RL
X1ZJU1VBTF9YVklTVUFMKGdka19yZ2JfZ2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19DT0xPUk1B
UF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRfY29sb3JtYXAoKSksCisgICAgICBnZGtfcmdiX2dldF92
aXN1YWwoKS0+ZGVwdGgpOworCisgIGlmICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxheSkgewor
ICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVydGhlci4K
KyAgICAgKiAgQmFpbCBvdXQuCisgICAgICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmlu
dGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5cbiIpOwor
I2VuZGlmCisgICAgZ19mcmVlICh4dGJpbik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQgKilOVUxM
OworICB9CisKKyAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQsIGhvb2sg
dGhpcyBkaXNwbGF5IGludG8gdGhlCisgICAgIG1haW5sb29wICovCisgIGlmICgwID09IG51bV93
aWRnZXRzKSB7CisgICAgaW50ICAgICAgICAgICBjbnVtYmVyOworICAgIC8qCisgICAgICogaG9v
ayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8KKworICAg
IC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxs
ZWQgKi8KKyAgICBHU291cmNlKiBncyA9IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVuY3MsIHNp
emVvZihHU291cmNlKSk7CisgICAgICBpZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICB9CisgICAgCisgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJT1JJVFlf
RVZFTlRTKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOworICAgIHRh
ZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZkZWYgVk1T
CisgICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxzZQorICAg
IGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAgICB4dF9l
dmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2ZW50cyA9
IEdfSU9fSU47IAorICAgIHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8qIGhtbS4u
LiBpcyB0aGlzIGNvcnJlY3Q/ICovCisKKyAgICBnX21haW5fY29udGV4dF9hZGRfcG9sbCAoKEdN
YWluQ29udGV4dCopTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4dF9ldmVu
dF9wb2xsX2ZkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9MT1cp
OworICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nlc3MgWHQg
dGltZXJzICovCisgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9CisgICAgICBndGtfdGltZW91dF9h
ZGQoMjUsCisgICAgICAgICAgICAgICAgICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50X3BvbGxp
bmdfdGltZXJfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5KTsKKyAg
fQorCisgIC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50ICovCisgIG51bV93aWRnZXRzKys7CisK
KyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+
eHRjbGllbnQueHRkaXNwbGF5OworICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KEdUS19X
SURHRVQoeHRiaW4pLCBwYXJlbnRfd2luZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNlcl9kYXRh
KHh0YmluLT5wYXJlbnRfd2luZG93LCAmdXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0YSkKKyAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19XSURHRVQo
eHRiaW4pKTsKKworICByZXR1cm4gR1RLX1dJREdFVCAoeHRiaW4pOworfQorCit2b2lkCitndGtf
eHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkp
Cit7CisgIHh0YmluLT54ID0geDsKKyAgeHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtfV0lER0VU
X1JFQUxJWkVEICh4dGJpbikpCisgICAgZ2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VUICh4dGJp
biktPndpbmRvdywgeCwgeSk7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0a1dpZGdl
dCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KQoreworICBBcmcgYXJnc1syXTsKKyAgR3RrWHRC
aW4gKnh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRp
b247CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZXNpemUgJXAg
JWQgJWRcbiIsICh2b2lkICopd2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisgIHh0
YmluLT5oZWlnaHQgPSBoZWlnaHQ7CisgIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKworICAvLyBB
dm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4gWHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8PSAwIHx8
IHdpZHRoIDw9MCkgeworICAgIGhlaWdodCA9IDE7CisgICAgd2lkdGggPSAxOworICB9CisgIFh0
U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdodCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJnc1sxXSwg
WHROd2lkdGgsICB3aWR0aCk7CisgIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50b3Bfd2lk
Z2V0LCBhcmdzLCAyKTsKKworICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9jYXRlIHNv
IHRoZSBzb2NrZXQga25vd3MgYWJvdXQgdGhlCisgICAgIHNpemUgY2hhbmdlcyAqLworICBhbGxv
Y2F0aW9uLnggPSB4dGJpbi0+eDsKKyAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7CisgIGFsbG9j
YXRpb24ud2lkdGggPSB4dGJpbi0+d2lkdGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0geHRiaW4t
PmhlaWdodDsKKworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlv
bik7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRnZXQgKm9i
amVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBHdGtXaWRnZXQgKndpZGdldDsKKworI2lm
ZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4iKTsKKyNl
bmRpZgorCisgIC8qIGd0a19vYmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVm
Y291bnQgb24gb2JqZWN0CisgICAqLworICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3QpOworICB3
aWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9GTEFHUyAo
d2lkZ2V0LCBHVEtfVklTSUJMRSk7CisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3aWRnZXQp
KSB7CisgICAgeHRfY2xpZW50X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOworICB9CisK
KyAgKCpHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdpZGdldCk7
Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpvYmplY3Qp
Cit7CisgIEd0a1h0QmluICp4dGJpbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50Zigi
Z3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChv
YmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAob2JqZWN0
KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4tPnh0d2lu
ZG93KSB7CisgICAgLyogcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyICovCisgICAgeHRfY2xpZW50
X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cgPSAwOwor
CisgICAgbnVtX3dpZGdldHMtLTsgLyogcmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLworCisgICAg
LyogSWYgdGhpcyBpcyB0aGUgbGFzdCBydW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBYdCBkaXNw
bGF5CisgICAgICAgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlmICgwID09
IG51bV93aWRnZXRzKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigicmVtb3Zp
bmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRpZgorICAg
ICAgZ19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwgJnh0X2V2
ZW50X3BvbGxfZmQpOworICAgICAgZ19zb3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAgIGd0a190
aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5nX3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxpbmdfdGlt
ZXJfaWQgPSAwOworICAgIH0KKyAgfQorCisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNz
KS0+ZGVzdHJveShvYmplY3QpOworfQorCisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGltcGxlbWVu
dGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50IHNpZGUKKyovCisKKy8qIEluaXRpYWwg
WHQgcGx1Z2luICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50ICogeHRj
bGllbnQsIAorICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAg
ICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCisgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpCit7
CisgIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFyZ3ZbMV07
CisgIGludCAgICAgICAgICAgbUFyZ2MgPSAwOworCisgIC8qCisgICAqIEluaXRpYWxpemUgWHQg
c3R1ZmYKKyAgICovCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQt
PmNoaWxkX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVMTDsKKyAg
eHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IDA7
CisgIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxpemVkKSB7
CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0dWZmXG4i
KTsKKyNlbmRpZgorICAgIFh0VG9vbGtpdEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29udGV4dCA9
IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQorICAgICAg
WHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBfY29udGV4dCwgZmFsbGJhY2spOworCisgICAg
eHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNwbGF5KCks
IE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVMTCwgMCwg
Jm1BcmdjLCBtQXJndik7CisgICAgaWYgKHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2luaXRpYWxp
emVkID0gVFJVRTsKKyAgfQorICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxheTsKKyAg
eHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAg
PSB4dGNvbG9ybWFwOworICB4dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9CisKKy8q
IENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMKKyogICovCitzdGF0aWMgdm9pZAoreHRfY2xp
ZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAsIAorICAgICAgICAgICAgICAgICAgIFdp
bmRvdyBlbWJlZGRlcmlkLCAKKyAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAg
ICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKK3sKKyAgaW50ICAgICAgICAgICBuOworICBBcmcg
ICAgICAgICAgIGFyZ3NbNl07CisgIFdpZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0OworICBXaWRn
ZXQgICAgICAgIHRvcF93aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoInh0
X2NsaWVudF9jcmVhdGUoKSBcbiIpOworI2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFwcENyZWF0
ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVyIiwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0b3Bfd2lk
Z2V0OworCisgIC8qIHNldCBzaXplIG9mIFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAgWHRTZXRB
cmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25d
LCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdldCwgYXJn
cywgbik7CisKKyAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNzLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsKKworICBu
ID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBY
dFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRBcmcoYXJn
c1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVudC0+eHRkZXB0aCApOyBuKys7CisgIFh0U2V0
QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBuKys7Cisg
IFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRoLCAwKTsgbisrOworICBYdFNldFZhbHVl
cyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXks
IEZBTFNFKTsKKyAgeHRjbGllbnQtPm9sZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUud2luZG93
OworICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyogdGhpcyBs
aXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0ICovCisj
aWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdhYmxlKHh0
Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZXJpZCwKKyAg
ICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0ZXJXaW5k
b3coIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbmRp
ZgorICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4gdG8gYWxs
IFh0IGV2ZW50cyAqLworICBYU2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAg
ICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAweDBGRkZG
Rik7CisgIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBYdE1hbmFn
ZUNoaWxkKGNoaWxkX3dpZGdldCk7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBjaGlsZF93
aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBldmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZlbnRIYW5k
bGVyKGNoaWxkX3dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+UmVzaXpl
UmVkaXJlY3RNYXNrLAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAg
ICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7
CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwgCisgICAgICAgICAgICAgICAgICAg
IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAg
ICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRf
Y2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOwor
ICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit4
dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBYbGliU3Bl
Y2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+
eHRkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldC0+
Y29yZS53aW5kb3cpOworI2Vsc2UKKyAgX1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVudC0+dG9w
X3dpZGdldC0+Y29yZS53aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRv
cF93aWRnZXQpOworI2VuZGlmCisKKyAgLyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3ZSByZXR1
cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUud2luZG93CisgICAgIG9yIHdlIGNhbiBnZXQg
WCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGllbnQtPnh0
ZGlzcGxheSwgRmFsc2UpOworCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9
IHh0Y2xpZW50LT5vbGR3aW5kb3c7CisgIFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50LT50b3Bf
d2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAgICAKK3h0X2NsaWVudF9kZXN0cm95
ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKK3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRnZXQpIHsK
KyAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAweDBGRkZG
RiwgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2Ns
aWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0KHh0Y2xp
ZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIH0K
K30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lkZ2V0IHh0
cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZmZXJbMl07
CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcpLCAiX1hF
TUJFRF9JTkZPIiwgRmFsc2UpOyAKKworICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAgICAgICAv
KiBQcm90b2NvbCB2ZXJzaW9uICovCisgIGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhDaGFuZ2VQ
cm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAgICAgICAg
ICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAzMiwKKyAgICAgICAgICAgICAgICAgICBQcm9w
TW9kZVJlcGxhY2UsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIs
IDIpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZShX
aWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENs
aWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChldmVudC0+
eGNsaWVudC5kYXRhLmxbMV0pCisgIHsKKyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9USUZZOgor
ICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFURVxu
Iik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEU6
CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJ
TkRPV19ERUFDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9N
T0RBTElUWV9PTjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdl
dCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVN
QkVEX01PREFMSVRZX09GRjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xp
ZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBj
YXNlIFhFTUJFRF9GT0NVU19JTjoKKyAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAgIHsKKyAg
ICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhldmVu
dCkpOworCisgICAgICBpZihldmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VT
X0lOKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBm
b2N1cyBpblxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJ
bjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHBy
aW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQu
eGZvY3VzLnR5cGUgPSBGb2N1c091dDsKKyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhmb2N1cy53
aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZlbnQueGZv
Y3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgWFNl
bmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAgICAgICAg
ICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCisgICAgICAgICAgICAgICAgIEZhbHNlLCBOb0V2ZW50
TWFzaywKKyAgICAgICAgICAgICAgICAgJnhldmVudCApOworICAgICAgWFN5bmMoIFh0RGlzcGxh
eSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGRl
ZmF1bHQ6CisgICAgYnJlYWs7CisgIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICovCit9CisK
K3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcs
IFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0
cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQtPnR5cGUp
CisgICAgeworICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4ZW1iZWQg
bWVzc2FnZSAqLworICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09CisgICAg
ICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsKKyAg
ICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0YSwgZXZl
bnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgTWFwcGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRf
aW5mbyAodywgWEVNQkVEX01BUFBFRCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVubWFwTm90
aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9jdXNJbjoKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDAp
OworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOworICAgIGNh
c2UgS2V5UHJlc3M6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5IFByZXNz
IEdvdCFcbiIpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJl
YWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMg
dm9pZAorc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgbG9u
ZyAgICAgIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTEsICAK
KyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMiwgIAorICAgICAgICAgICAgICAg
ICAgICAgbG9uZyAgICAgIHRpbWUpICAgCit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBXaW5kb3cg
dz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14dGNsaWVu
dC0+eHRkaXNwbGF5OworICBpbnQgZXJyb3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50LDAsc2l6
ZW9mKHhldmVudCkpOworICB4ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZlbnQueGNs
aWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2FnZV90eXBl
ID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xpZW50LmZv
cm1hdCA9IDMyOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAgeGV2ZW50
LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzJd
ID0gZGV0YWlsOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7CisgIHhldmVu
dC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOworCisgIHRyYXBfZXJyb3JzICgpOworICBYU2Vu
ZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhTeW5jIChk
cHksRmFsc2UpOworCisgIGlmKChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsKKyNpZmRl
ZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkh
ISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAg
ICAgCitlcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICplcnJvcikK
K3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJldHVybiAw
OworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7CisgIHRy
YXBwZWRfZXJyb3JfY29kZSA9MDsKKyAgb2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5k
bGVyKGVycm9yX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50ICAgICAgICAgCit1bnRyYXBfZXJy
b3Iodm9pZCkKK3sKKyAgWFNldEVycm9ySGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7CisgIGlm
KHRyYXBwZWRfZXJyb3JfY29kZSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJH
ZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxuIiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNlbmRpZgor
ICB9CisgIHJldHVybiB0cmFwcGVkX2Vycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkICAgICAg
ICAgCit4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9k
YXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodyk7Cisg
IFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0V2luZG93
KHcpOworCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVhdGVOb3Rp
Znk6CisgICAgICBpZihldmVudC0+eGNyZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7CisgICAg
ICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3JlYXRld2lu
ZG93LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9jdXNf
bGlzdGVuZXJfdHJlZShjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcigg
dywgdXNlcl9kYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6Cisg
ICAgICBpZihldmVudC0+eHJlcGFyZW50LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBh
bSB0aGUgbmV3IHBhcmVudCAqLworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdl
dChkcHksIGV2ZW50LT54cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAg
ICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAg
ICAgIH0KKyAgICAgIGVsc2UgaWYoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2luKSB7Cisg
ICAgICAgIC8qIEkgYW0gdGhlIG5ldyBjaGlsZCAqLworICAgICAgfQorICAgICAgZWxzZSB7Cisg
ICAgICAgIC8qIEkgYW0gdGhlIG9sZCBwYXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1cyhkcHks
IFh0V2luZG93KHh0Y2xpZW50LT5jaGlsZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwgZXZlbnQt
PnhidXR0b24udGltZSk7CisjZW5kaWYKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dGNs
aWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywg
MCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7Cisg
ICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAor
eHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sK
KyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0Q2xpZW50
ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9y
cyAoKTsKKyAgWEdldFdpbmRvd0F0dHJpYnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRvdyh3KSwg
JmF0dHIpOworICBldmVudG1hc2sgPSBhdHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0cnVjdHVy
ZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0RGlzcGxh
eSh3KSwKKyAgICAgICAgICAgICAgIFh0V2luZG93KHcpLCAKKyAgICAgICAgICAgICAgIGV2ZW50
bWFzayk7CisKKyAgWHRBZGRFdmVudEhhbmRsZXIodywgCisgICAgICAgICAgICAgICAgICAgIFN1
YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAg
ICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xp
ZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOworICB1
bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19saXN0ZW5l
cihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29kZTsKKwor
ICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRSZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3RydWN0dXJl
Tm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEp
OworCisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xp
c3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpIAorewor
ICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxkcmVuOwor
ICBXaW5kb3cgcm9vdCwgcGFyZW50OworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodHJlZXJv
b3QpOworICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3ZSBkb24n
dCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KKyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVl
cm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNl
cl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMoKTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4sICZy
b290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFwX2Vycm9y
KCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAgIHJldHVy
bjsKKworICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNoaWxkID0g
WHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQpIAorICAg
ICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICB9Cisg
IFhGcmVlKCh2b2lkKiljaGlsZHJlbik7CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2Fn
ZUd0azo6flBsdWdpblBhY2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9
CisKK1BsdWdpblBhY2thZ2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFsc2UpCisg
ICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgw
KQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQoreworICAgIGludCBwb3MgPSBt
X3BhdGguZGVwcmVjYXRlZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmlsZU5hbWUg
PSBtX3BhdGgucmlnaHQobV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKworYm9vbCBQ
bHVnaW5QYWNrYWdlR3RrOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dldE1JTUVE
ZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywg
IjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3Nb
aV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxpdChtaW1l
RGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5n
Ojpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdf
c3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07IGorKykK
KyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRlbnNpb25z
W2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVswXSwgZXh0
VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRhWzBdLCBk
ZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAgICAgICAg
Z19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURlc2NzKTsK
KworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9HZXRWYWx1
ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVS
Ul9OT19FUlJPUikKKyAgICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsK
KyAgICBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcs
ICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fZGVz
Y3JpcHRpb24gPSBidWZmZXI7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkg
eworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19N
T0RVTEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0
ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVsZV9zeW1i
b2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6ZSk7Cisg
ICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIiwgKHZv
aWQqKikmbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21v
ZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworICAgIGdfbW9k
dWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmbV9OUFBfR2V0VmFs
dWUpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVEZXNjcmlwdGlv
biB8fCAhbV9OUFBfU2h1dGRvd24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAgICAgICBnb3RvIGFi
b3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5j
cykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKwor
ICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBO
UE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0
UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAg
IG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRl
c3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0
dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdl
bnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9i
cm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1l
bWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMg
PSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBO
UE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5f
UG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAg
bV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNz
LmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hw
b3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0
YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVs
ZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVy
ID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmlu
Z2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJv
d3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVu
dGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2Jq
ZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0
OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7
CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9icm93c2Vy
RnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJv
cGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5
ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9
IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBf
TlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1By
b3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0
aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisg
ICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3Mp
OworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsK
KworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIHVu
bG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVn
aW5QYWNrYWdlR3RrOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9
CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3sKKyAg
ICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRD
b3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVfY2xvc2Ug
KG1fbW9kdWxlKTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2luUGFja2Fn
ZUd0ayogUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBh
Y2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOworCisgICAg
aWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2FnZTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOworfQorCit1
bnNpZ25lZCBQbHVnaW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQg
aGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAg
IG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRl
SGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNp
Z25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjplcXVh
bChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKQor
eworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVhbUd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1HdGsuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCisKKyNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRs
Lmg+CisKKy8vIFdlIHVzZSAtMiBoZXJlIGJlY2F1c2Ugc29tZSBwbHVnaW5zIGxpa2UgdG8gcmV0
dXJuIC0xIHRvIGluZGljYXRlIGVycm9yCisvLyBhbmQgdGhpcyB3YXkgd2Ugd29uJ3QgY2xhc2gg
d2l0aCB0aGVtLgorc3RhdGljIGNvbnN0IGludCBXZWJSZWFzb25Ob25lID0gLTI7CisKK3VzaW5n
IHN0ZDo6bWF4OwordXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlw
ZWRlZiBIYXNoTWFwPE5QU3RyZWFtKiwgTlBQPiBTdHJlYW1NYXA7CitzdGF0aWMgU3RyZWFtTWFw
JiBzdHJlYW1zKCkKK3sKKyAgICBzdGF0aWMgU3RyZWFtTWFwIHN0YXRpY1N0cmVhbXM7CisgICAg
cmV0dXJuIHN0YXRpY1N0cmVhbXM7Cit9CisKK1BsdWdpblN0cmVhbUd0azo6UGx1Z2luU3RyZWFt
R3RrKFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcsIEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCog
bm90aWZ5RGF0YSkKKyAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlUmVxdWVzdCkKKyAg
ICAsIG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcocGx1Z2luVmlldykKKyAgICAs
IG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmRO
b3RpZmljYXRpb24pCisgICAgLCBtX3N0cmVhbVN0YXRlKFN0cmVhbUJlZm9yZVN0YXJ0ZWQpCisg
ICAgLCBtX2xvYWRNYW51YWxseShmYWxzZSkKKyAgICAsIG1fZGVsYXlEZWxpdmVyeVRpbWVyKHRo
aXMsICZQbHVnaW5TdHJlYW1HdGs6OmRlbGF5RGVsaXZlcnlUaW1lckZpcmVkKQorICAgICwgbV9k
ZWxpdmVyeURhdGEoMCkKKyAgICAsIG1fdGVtcEZpbGVIYW5kbGUoLTEpCisgICAgLCBtX3BsdWdp
bkZ1bmNzKHBsdWdpblZpZXctPnBsdWdpbigpLT5wbHVnaW5GdW5jcygpKQorICAgICwgbV9pbnN0
YW5jZShwbHVnaW5WaWV3LT5pbnN0YW5jZSgpKQoreworICAgIEFTU0VSVChtX3BsdWdpblZpZXcp
OworCisgICAgbV9zdHJlYW0udXJsID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAg
bV9zdHJlYW0ucGRhdGEgPSAwOworICAgIG1fc3RyZWFtLmVuZCA9IDA7CisgICAgbV9zdHJlYW0u
bm90aWZ5RGF0YSA9IDA7CisgICAgbV9zdHJlYW0ubGFzdG1vZGlmaWVkID0gMDsKKworICAgIHN0
cmVhbXMoKS5hZGQoJm1fc3RyZWFtLCBtX2luc3RhbmNlKTsKK30KKworUGx1Z2luU3RyZWFtR3Rr
Ojp+UGx1Z2luU3RyZWFtR3RrKCkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1TdGF0ZSAhPSBTdHJl
YW1TdGFydGVkKTsKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKworICAgIGlmIChtX3N0cmVhbS51
cmwpCisgICAgICAgIGZyZWUoKGNoYXIqKW1fc3RyZWFtLnVybCk7CisKKyAgICBzdHJlYW1zKCku
cmVtb3ZlKCZtX3N0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpzdGFydCgpCit7
CisgICAgQVNTRVJUKCFtX2xvYWRNYW51YWxseSk7CisKKyAgICBtX2xvYWRlciA9IE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyOjpjcmVhdGUobV9mcmFtZSwgdGhpcyk7CisKKyAgICBtX2xvYWRl
ci0+c2V0U2hvdWxkQnVmZmVyRGF0YShmYWxzZSk7CisgICAgbV9sb2FkZXItPmRvY3VtZW50TG9h
ZGVyKCktPmFkZFBsdWdJblN0cmVhbUxvYWRlcihtX2xvYWRlci5nZXQoKSk7CisgICAgbV9sb2Fk
ZXItPmxvYWQobV9yZXNvdXJjZVJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6
c3RvcCgpCit7CisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0b3BwZWQ7CisKKyAgICBpZiAo
bV9sb2FkTWFudWFsbHkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvYWRlcik7CisKKyAgICAgICAg
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCktPmFjdGl2
ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIEFTU0VSVChkb2N1bWVudExvYWRlcik7CisKKyAg
ICAgICAgaWYgKGRvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkKKyAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyLT5jYW5jZWxNYWluUmVzb3VyY2VMb2FkKG1fZnJhbWUtPmxv
YWRlcigpLT5jYW5jZWxsZWRFcnJvcihtX3Jlc291cmNlUmVxdWVzdCkpOworCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sb2FkZXIpIHsKKyAgICAgICAgbV9sb2FkZXItPmNh
bmNlbCgpOworICAgICAgICBtX2xvYWRlciA9IDA7CisgICAgfQorfQorCit2b2lkIFBsdWdpblN0
cmVhbUd0azo6c3RhcnRTdHJlYW0oKQoreworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0
cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwgPSBtX3Jl
c291cmNlUmVzcG9uc2UudXJsKCk7CisKKyAgICAvLyBTb21lIHBsdWdpbnMgKEZsYXNoKSBleHBl
Y3QgdGhhdCBqYXZhc2NyaXB0IFVSTHMgYXJlIHBhc3NlZCBiYWNrIGRlY29kZWQgYXMgdGhpcyBp
cyB0aGUKKyAgICAvLyBmb3JtYXQgdXNlZCB3aGVuIHJlcXVlc3RpbmcgdGhlIFVSTC4KKyAgICBp
ZiAocmVzcG9uc2VVUkwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkp
CisgICAgICAgIG1fc3RyZWFtLnVybCA9IGdfc3RyZHVwKHJlc3BvbnNlVVJMLmRlY29kZV9zdHJp
bmcocmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0cmluZygpKS51dGY4KCkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9zdHJlYW0udXJsID0gZ19zdHJkdXAocmVzcG9uc2VVUkwuZGVwcmVjYXRlZFN0cmlu
ZygpLnV0ZjgoKSk7CisgICAgCisgICAgQ1N0cmluZyBtaW1lVHlwZVN0ciA9IG1fcmVzb3VyY2VS
ZXNwb25zZS5taW1lVHlwZSgpLnV0ZjgoKTsKKyAgICAKKyAgICBsb25nIGxvbmcgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoID0gbV9yZXNvdXJjZVJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgp
OworCisgICAgaWYgKG1fcmVzb3VyY2VSZXNwb25zZS5pc0hUVFAoKSkgeworICAgICAgICBWZWN0
b3I8VUNoYXI+IHN0cmluZ0J1aWxkZXI7CisgICAgICAgIFN0cmluZyBzZXBhcmF0b3IoIjogIik7
CisKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNvdXJj
ZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVh
ZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VSZXNwb25zZS5odHRwSGVhZGVy
RmllbGRzKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChpdC0+Zmlyc3QuY2hhcmFjdGVycygpLCBpdC0+Zmlyc3QubGVuZ3RoKCkp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yLmNoYXJhY3RlcnMo
KSwgc2VwYXJhdG9yLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KGl0LT5zZWNvbmQuY2hhcmFjdGVycygpLCBpdC0+c2Vjb25kLmxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKChVQ2hhciknXG4nKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1faGVhZGVycyA9IFN0cmluZzo6YWRvcHQoc3RyaW5nQnVpbGRlcikudXRmOCgpOworCisg
ICAgICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGVuY29kZWQgKG1vc3QgbGlrZWx5IGNvbXByZXNz
ZWQpLCB0aGVuIGRvbid0IHNlbmQgaXRzIGxlbmd0aCB0byB0aGUgcGx1Z2luLAorICAgICAgICAv
LyB3aGljaCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGRlY29kZWQgbGVuZ3RoLCBub3QgeWV0
IGtub3duIGF0IHRoZSBtb21lbnQuCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS80NDcwNTk5
PiB0cmFja3MgYSByZXF1ZXN0IGZvciAtW05TVVJMUmVzcG9uc2UgZXhwZWN0ZWRDb250ZW50TGVu
Z3RoXSB0byBpbmNvcnBvcmF0ZSB0aGlzIGxvZ2ljLgorICAgICAgICBTdHJpbmcgY29udGVudEVu
Y29kaW5nID0gbV9yZXNvdXJjZVJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1FbmNv
ZGluZyIpOworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5pc051bGwoKSAmJiBjb250ZW50
RW5jb2RpbmcgIT0gImlkZW50aXR5IikKKyAgICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0
aCA9IC0xOworICAgIH0KKworICAgIG1fc3RyZWFtLmhlYWRlcnMgPSBtX2hlYWRlcnMuZGF0YSgp
OworICAgIG1fc3RyZWFtLnBkYXRhID0gMDsKKyAgICBtX3N0cmVhbS5uZGF0YSA9IHRoaXM7Cisg
ICAgbV9zdHJlYW0uZW5kID0gbWF4KGV4cGVjdGVkQ29udGVudExlbmd0aCwgMExMKTsKKyAgICBt
X3N0cmVhbS5sYXN0bW9kaWZpZWQgPSBtX3Jlc291cmNlUmVzcG9uc2UubGFzdE1vZGlmaWVkRGF0
ZSgpOworICAgIG1fc3RyZWFtLm5vdGlmeURhdGEgPSBtX25vdGlmeURhdGE7CisKKyAgICBtX3Ry
YW5zZmVyTW9kZSA9IE5QX05PUk1BTDsKKyAgICBtX29mZnNldCA9IDA7CisgICAgbV9yZWFzb24g
PSBXZWJSZWFzb25Ob25lOworCisgICAgLy8gUHJvdGVjdCB0aGUgc3RyZWFtIGlmIGRlc3Ryb3lz
dHJlYW0gaXMgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBuZXdzdHJlYW0gaGFuZGxlcgorICAgIFJl
ZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisKKyAgICBOUEVycm9yIG5wRXJy
ID0gbV9wbHVnaW5GdW5jcy0+bmV3c3RyZWFtKG1faW5zdGFuY2UsIChOUE1JTUVUeXBlKW1pbWVU
eXBlU3RyLmRhdGEoKSwgJm1fc3RyZWFtLCBmYWxzZSwgJm1fdHJhbnNmZXJNb2RlKTsKKyAgICAK
KyAgICAvLyBJZiB0aGUgc3RyZWFtIHdhcyBkZXN0cm95ZWQgaW4gdGhlIGNhbGwgdG8gbmV3c3Ry
ZWFtIHdlIHJldHVybgorICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIG1fc3RyZWFtU3RhdGUgPSBTdHJlYW1TdGFydGVkOwor
CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBjYW5jZWxBbmREZXN0
cm95U3RyZWFtKG5wRXJyKTsKKworICAgIGlmIChtX3RyYW5zZmVyTW9kZSA9PSBOUF9OT1JNQUwp
CisgICAgICAgIHJldHVybjsKKworICAgIGNoYXIqIHRtcEZpbGVOYW1lID0gZ19idWlsZF9maWxl
bmFtZShnX2dldF90bXBfZGlyKCksICJXS1BYWFhYWFgiLCBOVUxMKTsKKyAgICBnX3ByaW50KCJE
RUJVRzogVGVtcCBGaWxlIE5hbWU6ICVzXG4iLCB0bXBGaWxlTmFtZSk7CisgICAgaWYgKChtX3Rl
bXBGaWxlSGFuZGxlID0gbWtzdGVtcCh0bXBGaWxlTmFtZSkpICE9IC0xKSB7CisgICAgICAgIGdf
cHJpbnQoIkRFQlVHOiBGRDogJWRcbiIsIG1fdGVtcEZpbGVIYW5kbGUpOworICAgICAgICBtX3Bh
dGggPSBDU3RyaW5nKHRtcEZpbGVOYW1lKTsKKwlnX2ZyZWUodG1wRmlsZU5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGdfZnJlZSh0bXBGaWxlTmFtZSk7CisKKyAgICAvLyBTb21l
dGhpbmcgd2VudCB3cm9uZywgY2FuY2VsIGxvYWRpbmcgdGhlIHN0cmVhbQorICAgIGNhbmNlbEFu
ZERlc3Ryb3lTdHJlYW0oTlBSRVNfTkVUV09SS19FUlIpOworfQorCitOUFAgUGx1Z2luU3RyZWFt
R3RrOjpvd25lckZvclN0cmVhbShOUFN0cmVhbSogc3RyZWFtKQoreworICAgIHJldHVybiBzdHJl
YW1zKCkuZ2V0KHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpjYW5jZWxBbmRE
ZXN0cm95U3RyZWFtKE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFt
R3RrPiBwcm90ZWN0KHRoaXMpOworCisgICAgZGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHN0
b3AoKTsKK30KKwordm9pZCBQbHVnaW5TdHJlYW1HdGs6OmRlc3Ryb3lTdHJlYW0oTlBSZWFzb24g
cmVhc29uKQoreworICAgIG1fcmVhc29uID0gcmVhc29uOworICAgIGlmIChtX3JlYXNvbiAhPSBO
UFJFU19ET05FKSB7CisgICAgICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgZGF0YSBmcm9tIGJlaW5n
IHN0cmVhbWVkCisgICAgICAgIGlmIChtX2RlbGl2ZXJ5RGF0YSkKKyAgICAgICAgICAgIG1fZGVs
aXZlcnlEYXRhLT5yZXNpemUoMCk7CisgICAgfSBlbHNlIGlmIChtX2RlbGl2ZXJ5RGF0YSAmJiBt
X2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpID4gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBtb3JlIGRh
dGEgdG8gYmUgc3RyZWFtZWQsIGRvbid0IGRlc3Ryb3kgdGhlIHN0cmVhbSBub3cuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgZGVzdHJveVN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0
cmVhbUd0azo6ZGVzdHJveVN0cmVhbSgpCit7CisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3Ry
ZWFtU3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUIChtX3JlYXNvbiAhPSBX
ZWJSZWFzb25Ob25lKTsKKyAgICBBU1NFUlQgKCFtX2RlbGl2ZXJ5RGF0YSB8fCBtX2RlbGl2ZXJ5
RGF0YS0+c2l6ZSgpID09IDApOworCisgICAgaWYgKG1fdGVtcEZpbGVIYW5kbGUgIT0gLTEpCisg
ICAgICAgIGNsb3NlKG1fdGVtcEZpbGVIYW5kbGUpOworCisgICAgaWYgKG1fc3RyZWFtLm5kYXRh
ICE9IDApIHsKKyAgICAgICAgaWYgKG1fcmVhc29uID09IE5QUkVTX0RPTkUgJiYgKG1fdHJhbnNm
ZXJNb2RlID09IE5QX0FTRklMRSB8fCBtX3RyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVPTkxZKSkg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3BhdGguaXNOdWxsKCkpOworCisgICAgICAgICAgICBt
X3BsdWdpbkZ1bmNzLT5hc2ZpbGUobV9pbnN0YW5jZSwgJm1fc3RyZWFtLCBtX3BhdGguZGF0YSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIE5QRXJyb3IgbnBFcnI7CisgICAgICAgIG5wRXJyID0g
bV9wbHVnaW5GdW5jcy0+ZGVzdHJveXN0cmVhbShtX2luc3RhbmNlLCAmbV9zdHJlYW0sIG1fcmVh
c29uKTsKKworICAgICAgICBtX3N0cmVhbS5uZGF0YSA9IDA7CisgICAgfQorCisgICAgaWYgKG1f
c2VuZE5vdGlmaWNhdGlvbikKKyAgICAgICAgbV9wbHVnaW5GdW5jcy0+dXJsbm90aWZ5KG1faW5z
dGFuY2UsIG1fcmVzb3VyY2VSZXF1ZXN0LnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCks
IG1fcmVhc29uLCBtX25vdGlmeURhdGEpOworCisgICAgbV9zdHJlYW1TdGF0ZSA9IFN0cmVhbVN0
b3BwZWQ7CisKKyAgICAvLyBkaXNjb25uZWN0U3RyZWFtIGNhbiBjYXVzZSB1cyB0byBiZSBkZWxl
dGVkLgorICAgIFJlZlB0cjxQbHVnaW5TdHJlYW1HdGs+IHByb3RlY3QodGhpcyk7CisgICAgaWYg
KCFtX2xvYWRNYW51YWxseSkKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaXNjb25uZWN0U3RyZWFt
KHRoaXMpOworCisgICAgbV9wbHVnaW5WaWV3ID0gMDsKKworICAgIGlmICghbV9wYXRoLmlzTnVs
bCgpKQorICAgICAgICB1bmxpbmsobV9wYXRoLmRhdGEoKSk7Cit9CisKK3ZvaWQgUGx1Z2luU3Ry
ZWFtR3RrOjpkZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+KiB0
aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1fZGVsYXlEZWxpdmVyeVRpbWVyKTsKKwor
ICAgIGRlbGl2ZXJEYXRhKCk7Cit9CisKK3ZvaWQgUGx1Z2luU3RyZWFtR3RrOjpkZWxpdmVyRGF0
YSgpCit7CisgICAgQVNTRVJUKG1fZGVsaXZlcnlEYXRhKTsKKyAgICAKKyAgICBpZiAobV9zdHJl
YW1TdGF0ZSA9PSBTdHJlYW1TdG9wcGVkKQorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNh
bmNlbCBvdXIgam9iIGluIHRoZSBTdWJyZXNvdXJjZUxvYWRlciBvbiBlcnJvciBzbyB3ZSBkb24n
dCByZWFjaCB0aGlzIGNhc2UKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgIT0gU3RyZWFtQmVmb3JlU3RhcnRlZCk7CisKKyAgICBpZiAoIW1fc3RyZWFtLm5kYXRh
IHx8IG1fZGVsaXZlcnlEYXRhLT5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW50MzIgdG90YWxCeXRlcyA9IG1fZGVsaXZlcnlEYXRhLT5zaXplKCk7CisgICAgaW50MzIgdG90
YWxCeXRlc0RlbGl2ZXJlZCA9IDA7CisKKyAgICB3aGlsZSAodG90YWxCeXRlc0RlbGl2ZXJlZCA8
IHRvdGFsQnl0ZXMpIHsKKyAgICAgICAgaW50MzIgZGVsaXZlcnlCeXRlcyA9IG1fcGx1Z2luRnVu
Y3MtPndyaXRlcmVhZHkobV9pbnN0YW5jZSwgJm1fc3RyZWFtKTsKKworICAgICAgICBpZiAoZGVs
aXZlcnlCeXRlcyA8PSAwKSB7CisgICAgICAgICAgICBtX2RlbGF5RGVsaXZlcnlUaW1lci5zdGFy
dE9uZVNob3QoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGRlbGl2ZXJ5Qnl0ZXMgPSBtaW4oZGVsaXZlcnlCeXRlcywgdG90YWxCeXRlcyAtIHRv
dGFsQnl0ZXNEZWxpdmVyZWQpOworICAgICAgICAgICAgaW50MzIgZGF0YUxlbmd0aCA9IGRlbGl2
ZXJ5Qnl0ZXM7CisgICAgICAgICAgICBjaGFyKiBkYXRhID0gbV9kZWxpdmVyeURhdGEtPmRhdGEo
KSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQ7CisKKyAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBkYXRh
CisgICAgICAgICAgICBkZWxpdmVyeUJ5dGVzID0gbV9wbHVnaW5GdW5jcy0+d3JpdGUobV9pbnN0
YW5jZSwgJm1fc3RyZWFtLCBtX29mZnNldCwgZGF0YUxlbmd0aCwgKHZvaWQqKWRhdGEpOworICAg
ICAgICAgICAgaWYgKGRlbGl2ZXJ5Qnl0ZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgY2FuY2Vs
QW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsaXZlcnlCeXRlcyA9IG1pbihkZWxp
dmVyeUJ5dGVzLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0ICs9IGRlbGl2ZXJ5
Qnl0ZXM7CisgICAgICAgICAgICB0b3RhbEJ5dGVzRGVsaXZlcmVkICs9IGRlbGl2ZXJ5Qnl0ZXM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodG90YWxCeXRlc0RlbGl2ZXJlZCA+IDApIHsK
KyAgICAgICAgaWYgKHRvdGFsQnl0ZXNEZWxpdmVyZWQgPCB0b3RhbEJ5dGVzKSB7CisgICAgICAg
ICAgICBpbnQgcmVtYWluaW5nQnl0ZXMgPSB0b3RhbEJ5dGVzIC0gdG90YWxCeXRlc0RlbGl2ZXJl
ZDsKKyAgICAgICAgICAgIG1lbW1vdmUobV9kZWxpdmVyeURhdGEtPmRhdGEoKSwgbV9kZWxpdmVy
eURhdGEtPmRhdGEoKSArIHRvdGFsQnl0ZXNEZWxpdmVyZWQsIHJlbWFpbmluZ0J5dGVzKTsKKyAg
ICAgICAgICAgIG1fZGVsaXZlcnlEYXRhLT5yZXNpemUocmVtYWluaW5nQnl0ZXMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgbV9kZWxpdmVyeURhdGEtPnJlc2l6ZSgwKTsKKyAgICAg
ICAgICAgIGlmIChtX3JlYXNvbiAhPSBXZWJSZWFzb25Ob25lKQorICAgICAgICAgICAgICAgIGRl
c3Ryb3lTdHJlYW0oKTsKKyAgICAgICAgfQorICAgIH0gCit9CisKK3ZvaWQgUGx1Z2luU3RyZWFt
R3RrOjpzZW5kSmF2YVNjcmlwdFN0cmVhbShjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBD
U3RyaW5nJiByZXN1bHRTdHJpbmcpCit7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIFJlc291
cmNlUmVzcG9uc2UocmVxdWVzdFVSTCwgInRleHQvcGxhaW4iLCByZXN1bHRTdHJpbmcubGVuZ3Ro
KCksICIiLCAiIikpOworCisgICAgaWYgKG1fc3RyZWFtU3RhdGUgPT0gU3RyZWFtU3RvcHBlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZGlkUmVjZWl2ZURhdGEoMCwgcmVzdWx0U3RyaW5nLmRh
dGEoKSwgcmVzdWx0U3RyaW5nLmxlbmd0aCgpKTsKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSA9PSBT
dHJlYW1TdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkaWRGaW5pc2hMb2FkaW5nKDAp
OworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkUmVjZWl2ZVJlc3BvbnNlKE5ldHNjYXBl
UGx1Z0luU3RyZWFtTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0
cmVhbVN0YXRlID09IFN0cmVhbUJlZm9yZVN0YXJ0ZWQpOworCisgICAgbV9yZXNvdXJjZVJlc3Bv
bnNlID0gcmVzcG9uc2U7CisKKyAgICBzdGFydFN0cmVhbSgpOworfQorCit2b2lkIFBsdWdpblN0
cmVhbUd0azo6ZGlkUmVjZWl2ZURhdGEoTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIqIGxvYWRl
ciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQobG9hZGVyID09
IG1fbG9hZGVyKTsKKyAgICBBU1NFUlQobGVuZ3RoID4gMCk7CisgICAgQVNTRVJUKG1fc3RyZWFt
U3RhdGUgPT0gU3RyZWFtU3RhcnRlZCk7CisgICAgCisgICAgaWYgKCFtX2RlbGl2ZXJ5RGF0YSkK
KyAgICAgICAgbV9kZWxpdmVyeURhdGEuc2V0KG5ldyBWZWN0b3I8Y2hhcj4pOworCisgICAgaW50
IG9sZFNpemUgPSBtX2RlbGl2ZXJ5RGF0YS0+c2l6ZSgpOworICAgIG1fZGVsaXZlcnlEYXRhLT5y
ZXNpemUob2xkU2l6ZSArIGxlbmd0aCk7CisgICAgbWVtY3B5KG1fZGVsaXZlcnlEYXRhLT5kYXRh
KCkgKyBvbGRTaXplLCBkYXRhLCBsZW5ndGgpOworCisgICAgLy8gSWYgdGhlIHBsdWctaW4gY2Fu
Y2VscyB0aGUgc3RyZWFtIGluIGRlbGl2ZXJEYXRhIGl0IGNvdWxkIGJlIGRlbGV0ZWQsIAorICAg
IC8vIHNvIHByb3RlY3QgaXQgaGVyZS4KKyAgICBSZWZQdHI8UGx1Z2luU3RyZWFtR3RrPiBwcm90
ZWN0KHRoaXMpOworCisgICAgaWYgKG1fdHJhbnNmZXJNb2RlICE9IE5QX0FTRklMRU9OTFkpCisg
ICAgICAgIGRlbGl2ZXJEYXRhKCk7CisKKyAgICBpZiAobV9zdHJlYW1TdGF0ZSAhPSBTdHJlYW1T
dG9wcGVkICYmIG1fdGVtcEZpbGVIYW5kbGUgIT0gLTEpIHsKKyAgICAgICAgaW50IGJ5dGVzV3Jp
dHRlbjsKKwlpbnQgZXJyb3JDaGVjazsKKworCWJ5dGVzV3JpdHRlbiA9IC0xOworCWJ5dGVzV3Jp
dHRlbiA9IHdyaXRlKG1fdGVtcEZpbGVIYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisKKyAgICAgICAg
aWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSB8fCBieXRlc1dyaXR0ZW4gIT0gbGVuZ3RoKQorICAgICAg
ICAgICAgY2FuY2VsQW5kRGVzdHJveVN0cmVhbShOUFJFU19ORVRXT1JLX0VSUik7CisgICAgfQor
fQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkRmFpbChOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBBU1NFUlQobG9hZGVy
ID09IG1fbG9hZGVyKTsKKworICAgIG1fbG9hZGVyID0gMDsKKworICAgIGRlc3Ryb3lTdHJlYW0o
TlBSRVNfTkVUV09SS19FUlIpOworfQorCit2b2lkIFBsdWdpblN0cmVhbUd0azo6ZGlkRmluaXNo
TG9hZGluZyhOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciogbG9hZGVyKQoreworICAgIEFTU0VS
VChsb2FkZXIgPT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX3N0cmVhbVN0YXRlID09IFN0cmVh
bVN0YXJ0ZWQpOworCisgICAgbV9sb2FkZXIgPSAwOworCisgICAgZGVzdHJveVN0cmVhbShOUFJF
U19ET05FKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3
aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioq
KioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vu
c2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25z
IHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUg
R3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZl
bG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4K
KyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0
aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRo
ZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisg
KiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BM
IG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlv
dXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBs
YWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJl
ZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHBy
b3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBv
ciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLyAgIAor
CisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2RlZmluZSBfX0dUS19YVEJJTl9IX18KKworI2lu
Y2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5j
bHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpZmRlZiBNT1pJTExB
X0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgorI2lmZGVmIF9JTVBMX0dUS1hUQklOX0FQSQor
I2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQT1JUXyh0eXBlKQorI2Vsc2UKKyNkZWZp
bmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8odHlwZSkKKyNlbmRpZgorI2Vsc2UKKyNk
ZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3Bs
dXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3Ry
dWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJpbkNsYXNzIEd0
a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZUEVfWFRCSU4gICAgICAgICAgICAgICAgICAo
Z3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmluZSBHVEtfWFRCSU4ob2JqKSAgICAgICAgICAg
ICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluKSkKKyNkZWZpbmUgR1RL
X1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR1RLX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz
cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVf
WFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmluZSBHVEtfSVNfWFRCSU4ob2JqKSAgICAgICAg
ICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQorI2RlZmluZSBHVEtfSVNfWFRCSU5f
Q0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCit0
eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGllbnQ7CisKK3N0cnVjdCBfWHRDbGllbnQgewor
ICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdldAl0b3Bfd2lkZ2V0OyAgICAvKiBUaGUgdG9w
bGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGlsZF93aWRnZXQ7ICAvKiBUaGUgZW1iZWRkZWQg
d2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7CisgIGludAkJeHRkZXB0aDsKKyAgQ29sb3Jt
YXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdpbmRvdzsKK307CisKK3N0cnVjdCBfR3RrWHRC
aW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tldDsKKyAgR2RrV2luZG93ICAgICAqcGFyZW50
X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRkaXNwbGF5OyAgICAgICAgLyogWHQgVG9vbGtp
dCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAgICAgeHR3aW5kb3c7ICAgICAgICAgLyogWHQg
VG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAgICAgICAgIHgsIHk7CisgIGdpbnQgICAgICAg
ICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50CSB4dGNsaWVudDsgICAgICAgICAvKiBYdCBD
bGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MKK3sKKyAg
R3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOworfTsKKworR1RLWFRCSU5fQVBJKEd0a1R5cGUp
ICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpOworR1RLWFRCSU5fQVBJKEd0a1dpZGdldCAq
KSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqZik7CitH
VEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0Qmlu
ICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RLWFRCSU5fQVBJKHZvaWQpICAgICAgIGd0a194
dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpOworCit0eXBlZGVmIHN0
cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xhdGlvbnMgIHRyYW5zbGF0aW9uczsgICAgICAg
LyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5hZ2VyICAgICovCisgICAgWHRCb3VuZEFjdGlv
bnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJvY2VkdXJlIGJpbmRpbmdzIGZvciBhY3Rpb25z
ICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVjICpjdXJyZW50X3N0YXRlOyAgLyogVHJhbnNs
YXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgIGxhc3RF
dmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAgIAorCit0eXBlZGVmIHN0cnVjdCBfQ29yZVBh
cnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxmOyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIg
dG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLworICAgIFdpZGdldENsYXNzICAgICB3aWRnZXRf
Y2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lkZ2V0J3MgQ2xhc3NSZWMgICAgICAqLworICAg
IFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAgICAgICAgIC8qIHBhcmVudCB3aWRnZXQgICAg
ICAgICAgICAgICAgICAgICAqLworICAgIFhybU5hbWUgICAgICAgICB4cm1fbmFtZTsgICAgICAg
ICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1YXJraWZpZWQgICAqLworICAgIEJvb2xlYW4g
ICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8qIG1hcmtlZCBmb3IgZGVzdHJveSAgICAgICAg
ICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0ICBkZXN0cm95X2NhbGxiYWNrczsgIC8qIHdo
byB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3llZCAqLworICAgIFh0UG9pbnRlciAgICAgICBj
b25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFpbnQgcmVjb3JkICAgICAgICAgICAgICAgICAq
LworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAgICAgICAgICAgICAgIC8qIHdpbmRvdyBwb3Np
dGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICB3aWR0aCwgaGVp
Z2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25zICAgICAgICAgICAgICAgICAqLworICAgIERp
bWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgd2lkdGgg
ICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBtYW5hZ2VkOyAgICAgICAgICAg
IC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2VkPyAgICAgICAqLworICAgIEJvb2xlYW4gICAg
ICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlzIHdpZGdldCBzZW5zaXRpdmUgdG8gdXNlciBl
dmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBhbmNlc3Rvcl9zZW5zaXRpdmU7IC8qIGFyZSBh
bGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAqLworICAgIFh0RXZlbnRUYWJsZSAgICBldmVu
dF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8gZXZlbnQgZGlzcGF0Y2hlciAgICAgICAqLwor
ICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAgICAgICAgICAgIC8qIHRyYW5zbGF0aW9uIG1h
bmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0VHJhbnNsYXRpb25zICBhY2NlbGVyYXRvcnM7
ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0aW9ucyAgICAgICAgICAqLworICAgIFBpeGVs
ICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4ZWwgICAg
ICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBib3JkZXJfcGl4bWFwOyAgICAgIC8q
IHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwgICAgICAqLworICAgIFdpZGdldExpc3QgICAg
ICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qgb2YgcG9wdXBzICAgICAgICAgICAgICAgICAg
ICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1fcG9wdXBzOyAgICAgICAgIC8qIGhvdyBtYW55
IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLworICAgIFN0cmluZyAgICAgICAgICBuYW1lOyAg
ICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lICAgICAgICAgICAgICAqLworICAg
IFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAgICAgICAgIC8qIHdpbmRvdydzIHNjcmVlbiAg
ICAgICAgICAgICAgICAgICAqLworICAgIENvbG9ybWFwICAgICAgICBjb2xvcm1hcDsgICAgICAg
ICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFdpbmRvdyAg
ICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8qIHdpbmRvdyBJRCAgICAgICAgICAgICAgICAg
ICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBkZXB0aDsgICAgICAgICAgICAgIC8qIG51
bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAgICAqLworICAgIFBpeGVsICAgICAgICAgICBi
YWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeGVsICAgICAgICAgICAq
LworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3JvdW5kX3BpeG1hcDsgIC8qIHdpbmRvdyBiYWNr
Z3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAgIEJvb2xlYW4gICAgICAgICB2aXNpYmxlOyAg
ICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQgYW5kIG5vdCBvY2NsdWRlZD8qLworICAgIEJv
b2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5hZ2VkOy8qIG1hcCB3aW5kb3cgaWYgaXQncyBt
YW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsKKwordHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJl
YyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9IFdpZGdldFJlYywgQ29yZVJlYzsgICAKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAv
KiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5T
dHJlYW1HdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblN0cmVh
bUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5TdHJlYW1H
dGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQbHVnaW5TdHJlYW1HdGtfSAorI2RlZmluZSBQbHVnaW5TdHJlYW1HdGtfSAorCisj
aW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBG
cmFtZTsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgZW51bSBQbHVnaW5TdHJlYW1T
dGF0ZSB7IFN0cmVhbUJlZm9yZVN0YXJ0ZWQsIFN0cmVhbVN0YXJ0ZWQsIFN0cmVhbVN0b3BwZWQg
fTsKKworICAgIGNsYXNzIFBsdWdpblN0cmVhbUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdp
blN0cmVhbUd0az4sIHByaXZhdGUgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luU3RyZWFtR3RrKFBsdWdpblZpZXdHdGsqLCBGcmFt
ZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCog
bm90aWZ5RGF0YSk7CisgICAgICAgIH5QbHVnaW5TdHJlYW1HdGsoKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBzdG9wKCk7CisKKyAgICAgICAgdm9pZCBz
dGFydFN0cmVhbSgpOworCisgICAgICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1h
bnVhbGx5KSB7IG1fbG9hZE1hbnVhbGx5ID0gbG9hZE1hbnVhbGx5OyB9CisKKyAgICAgICAgLy8g
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlciosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlciopOworCisgICAgICAgIHZvaWQgc2VuZEphdmFTY3JpcHRTdHJl
YW0oY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgQ1N0cmluZyYgcmVzdWx0U3RyaW5nKTsK
KyAgICAgICAgdm9pZCBjYW5jZWxBbmREZXN0cm95U3RyZWFtKE5QUmVhc29uKTsKKworICAgICAg
ICBzdGF0aWMgTlBQIG93bmVyRm9yU3RyZWFtKE5QU3RyZWFtKik7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBkZWxpdmVyRGF0YSgpOworICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oTlBS
ZWFzb24pOworICAgICAgICB2b2lkIGRlc3Ryb3lTdHJlYW0oKTsKKworICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVlc3Q7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9y
ZXNvdXJjZVJlc3BvbnNlOworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBSZWZQ
dHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOworICAgICAgICBQbHVnaW5W
aWV3R3RrKiBtX3BsdWdpblZpZXc7CisgICAgICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICAg
ICAgYm9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgICAgIFBsdWdpblN0cmVhbVN0YXRlIG1f
c3RyZWFtU3RhdGU7CisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisKKyAgICAgICAgVGlt
ZXI8UGx1Z2luU3RyZWFtR3RrPiBtX2RlbGF5RGVsaXZlcnlUaW1lcjsKKyAgICAgICAgdm9pZCBk
ZWxheURlbGl2ZXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5TdHJlYW1HdGs+Kik7CisKKyAgICAg
ICAgT3duUHRyPCBWZWN0b3I8Y2hhcj4gPiBtX2RlbGl2ZXJ5RGF0YTsKKworICAgICAgICBpbnQg
bV90ZW1wRmlsZUhhbmRsZTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBtX3BsdWdp
bkZ1bmNzOworICAgICAgICBOUFAgbV9pbnN0YW5jZTsKKyAgICAgICAgdWludDE2IG1fdHJhbnNm
ZXJNb2RlOworICAgICAgICBpbnQzMiBtX29mZnNldDsKKyAgICAgICAgQ1N0cmluZyBtX2hlYWRl
cnM7CisgICAgICAgIENTdHJpbmcgbV9wYXRoOworICAgICAgICBOUFJlYXNvbiBtX3JlYXNvbjsK
KyAgICAgICAgTlBTdHJlYW0gbV9zdHJlYW07CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUGx1Z2luUGFja2FnZUd0a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5j
bHVkZSA8Z21vZHVsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50
ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
KyN1bmRlZiBOUF9Jbml0aWFsaXplRnVuY1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNp
b25zTWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVk
PFBsdWdpblBhY2thZ2VHdGs+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdl
R3RrKCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAK
KyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAg
U3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAg
ICAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAg
ICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBj
b25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1F
VG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1l
VG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVn
aW5QYWNrYWdlR3RrJiBiKTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1
bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAg
ICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3Bs
dWdpbkZ1bmNzOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9v
bCBmZXRjaEluZm8oKTsKKworICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBt
X2xvYWRDb3VudDsKKworICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3Ry
aW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBt
X25hbWU7CisKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRp
b25zOworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKwor
ICAgICAgICBHTW9kdWxlKiBtX21vZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVk
OworCisgICAgICAgIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVz
Y3JpcHRpb247CisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247Cisg
ICAgICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgbV9OUFBfR2V0VmFsdWU7CisgICAgICAgIE5QUGx1
Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3Nl
ckZ1bmNzOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsg
cmV0dXJuIGtleS0+aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
aW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2VHdGsqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikp
OyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdl
R3RrPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVn
aW5QYWNrYWdlR3RrOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmth
cm91bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1
c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxk
IGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6
YXRpb24uCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3Rv
cmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQ
dHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRU
eXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5
cGUgSW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFz
aCBIYXNoOworICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAg
IH07Cit9CisKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFi
YXNlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFi
YXNlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0
YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsu
aCIKKworI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3
R3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2VHdGsqIFBsdWdp
bkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0
YWJhc2VHdGsqIHBsdWdpbnMgPSAwOworICAgIAorICAgIGlmICghcGx1Z2lucykgeworICAgICAg
ICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlR3RrOworICAgICAgICBwbHVnaW5zLT5zZXRQ
bHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAg
ICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9
CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2VHdGs6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVz
aCgpOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQ
bHVnaW5TZXQgbmV3UGx1Z2luczsKKworICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNl
OworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9
IGdldFBsdWdpbnNJblBhdGhzKCk7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2lu
U2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2lu
U2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAg
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
ICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMK
KyAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAg
IC8vIEFkZCBuZXcgcGx1Z2lucworICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAg
ICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKwor
ICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwg
IW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9
IG5ld1BsdWdpbnM7CisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3
UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3Bs
dWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5z
LmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMK
KyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1J
TUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1l
VG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5i
ZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VH
dGsqPiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBs
dWdpblBhY2thZ2VHdGsqPiByZXN1bHQ7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1
bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BsdWdp
blNldCBQbHVnaW5EYXRhYmFzZUd0azo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhh
c2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisK
KyAgICBQbHVnaW5QYWNrYWdlR3RrKiBvbGRXTVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2th
Z2VHdGsqIG5ld1dNUFBsdWdpbiA9IDA7CisKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEdEaXIqIGRpciA9IGdfZGlyX29wZW4oKGl0LT51dGY4KCkpLmRhdGEo
KSwgMCwgTlVMTCk7CisgICAgICAgIGlmIChkaXIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG5hbWU7CisgICAgICAgICAgICB3aGlsZSAoKG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZ19zdHJfaGFzX3N1ZmZpeChuYW1lLCAiLiIgR19NT0RV
TEVfU1VGRklYKSkgeworICAgICAgICAgICAgICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1
aWxkX2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5kYXRhKCksIG5hbWUsIE5VTEwpOworICAgICAgICAg
ICAgICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2Fn
ZUd0azo6Y3JlYXRlUGFja2FnZShmaWxlbmFtZSwgdGltZShOVUxMKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lu
cy5hZGQocGx1Z2luUGFja2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGdfZnJlZShmaWxlbmFt
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19kaXJf
Y2xvc2UoZGlyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQor
CitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJp
bmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVu
c2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hp
bGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVu
ZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBv
cykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNp
b25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBv
cywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZl
cnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9
CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVy
c2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
VmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYg
dmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUo
KTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwg
dmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8g
SWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJz
aW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVy
biBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQ
bHVnaW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciog
aG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIs
ICJwbHVnaW5zIiwgTlVMTCk7CisgICAgcGF0aHMuYXBwZW5kKGhvbWVQYXRoKTsKKyAgICBnX2Zy
ZWUoaG9tZVBhdGgpOworCisgICAgY29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9a
X1BMVUdJTl9QQVRIIik7CisgICAgaWYgKG1velBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVn
aW5QYXRocyA9IGdfc3Ryc3BsaXQobW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChn
aW50IGkgPSAwOyBwbHVnaW5QYXRoc1tpXTsgaSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5k
KHBsdWdpblBhdGhzW2ldKTsKKworICAgICAgICBnX2ZyZWUocGx1Z2luUGF0aHMpOworICAgIH0K
KyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9jYWwvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAg
IHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96aWxsYS9wbHVnaW5zIik7CisKKyAgICByZXR1cm4g
cGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6OmlzTUlNRVR5cGVSZWdpc3RlcmVk
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtaW1lVHlwZS5p
c051bGwoKSAmJiBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpOworfQor
CitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93
ZXIoKTsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVu
ZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNj
cmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgp
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5E
YXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQor
eworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOwor
ICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisg
ICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9
ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsg
KyttaW1lX2l0KSB7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9u
cyA9IG1pbWVfaXQtPnNlY29uZDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5z
aW9uc1tpXSA9PSBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKml0KS5n
ZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6ZmluZFBsdWdpbihjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFj
a2FnZUd0ayogcGx1Z2luID0gMDsKKworICAgIGlmICghbWltZVR5cGUuaXNOdWxsKCkpCisgICAg
ICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAKKyAgICBpZiAo
IXBsdWdpbikgeworICAgICAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIFN0
cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcuJykgKyAx
KTsKKworICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKwor
ICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSB4ZGdt
aW1lIGZvciB0aGUgbWltZSB0eXBlIAorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBl
eHRlbnNpb24uCisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld0d0
ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1l
LCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQor
eworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlw
ZSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhl
IGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNo
KCkpCisgICAgICAgIHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgICAg
IAorICAgIHJldHVybiBuZXcgUGx1Z2luVmlld0d0ayhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2lu
LCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1h
bnVhbGx5KTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3Rv
cmVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0
b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5m
b1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
R3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0
b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK3sgCisg
ICAgUGx1Z2luRGF0YWJhc2VHdGsgKmRiID0gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBs
dWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgUGx1
Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IGRiLT5wbHVnaW5zKClbaV07CisKKyAgICBpbmZvLT5u
YW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFt
ZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgY29u
c3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5t
aW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBu
ZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAg
ICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAgbWltZS0+ZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5n
ZXQobWltZS0+dHlwZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAg
ICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgbWltZS0+
c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBpbmZvOworfQorCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+
cGx1Z2lucygpLnNpemUoKTsKK30KKworU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFt
ZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZCBvbiBHVEsrCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCiti
b29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJp
bmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxl
ZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpOworfQorCit2b2lkIHJl
ZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNl
R3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPnJlZnJlc2goKTsKKworICAgIGlmIChyZWxvYWRPcGVu
UGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQor
Cit9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHJldmlzaW9uIDI5MzM4KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBAIERFUEVORFBBVEggKz0gZWRpdGluZy9xdCBoaXN0
b3J5L3F0IGxvYWQKIGd0ay1wb3J0IHsKICAgICB4MTE6cGx1Z2lucyB7CiAgICAgICAgIERFRklO
RVMgKz0gWFBfVU5JWAorICAgICAgICBMSUJTICs9IC1sWHQKICAgICB9CiAKICAgICBJTkNMVURF
UEFUSCArPSBcCkBAIC0xNzEsNiArMTcyLDcgQEAgZ3RrLXBvcnQgewogICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3hibSBcCiAgICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAorICAg
IHBsdWdpbnMvZ3RrIFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAu
Li9XZWJLaXQvZ3RrL1dlYlZpZXcKIH0KQEAgLTg1OSwxMyArODYxLDM5IEBAIFNPVVJDRVMgKz0g
XAogICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsK
KyAgICBERUZJTkVTICs9IEdUS19ESVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0g
XAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3Rr
L1BsdWdpbkRlYnVnLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdp
blZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tM
aXN0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwIAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBcCisgICAgcGx1Z2lucy9ndGsv
UGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VH
dGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisgICAgcGx1
Z2lucy9ndGsvUGx1Z2luU3RyZWFtR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmll
d0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNwcAorCisgIHgxMTpwbHVnaW5zIHsK
KyAgICBIRUFERVJTICs9IFwKKyAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICAg
IHBsdWdpbnMvZ3RrL25wZnVuY3Rpb25zLmggXAorICAgICAgcGx1Z2lucy9ndGsveGVtYmVkLmgK
KworICAgIFNPVVJDRVMgKz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKKyAgfQog
fQogCiBxdC1wb3J0IHsKQEAgLTk3MCw2ICs5OTgsNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBv
cnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBIRUFE
RVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgg
XAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXApJ
bmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDI5MzM4KQorKysgV2ViQ29yZS9wYWdl
L2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE0ICsyOCwxOSBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKwogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgogCisjaW5jbHVkZSAia2pz
X3Byb3h5LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSAicnVudGltZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFt
ZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikKK0tKUzo6QmluZGluZ3M6
Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3
aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGx1Z2luVmlld0d0ayo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwogICAgIHJldHVybiAw
OwogfQogCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAyOTMzOCkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NYVmVyc2lvbjsKIG15
ICRpc1F0OwogbXkgJGlzR3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBteSAkaXNXeDsKIAog
IyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBvcnQKQEAgLTQ4MCw2ICs0ODIsMjMgQEAgc3ViIGRl
dGVybWluZUlzR3RrKCkKICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAg
ICBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRlbmFibGVHdGtQbHVn
aW5zOworfQorCitzdWIgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgcmV0dXJu
IGlmIGRlZmluZWQoJGVuYWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNoZWNrQXJndigiLS1k
aXNhYmxlLWd0ay1wbHVnaW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAwOwor
ICAgIH0gZWxzZSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsKKyAgICB9Cit9CisK
IHN1YiBpc1d4KCkKIHsKICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC03ODksNiArODA4LDcgQEAg
c3ViIGJ1aWxkUU1ha2VHdGtQcm9qZWN0KCQkKQogCiAgICAgbXkgQGJ1aWxkQXJncyA9ICgiQ09O
RklHKz1ndGstcG9ydCIpOwogICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRy09cXQiOworICAg
IHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRys9cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lucygp
OwogCiAgICAgcmV0dXJuIGJ1aWxkUU1ha2VQcm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18473</attachid>
            <date>2008-01-16 09:43:55 -0800</date>
            <delta_ts>2008-01-22 15:48:00 -0800</delta_ts>
            <desc>Updated patch against r29531</desc>
            <filename>webkit-automake-clean.patch</filename>
            <type>text/plain</type>
            <size>1025</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTAxMSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsMTQg
KzI3NCw5IEBAIGluY2x1ZGUgSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUg
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBXZWJLaXRUb29scy9HTlVtYWtlZmlsZS5h
bQogCi0jIFByb2plY3Qtd2lkZSBjbGVhbiBydWxlcwotY2xlYW4tbG9jYWw6Ci0JLXJtIC1yZiAk
KEdFTlNPVVJDRVMpCi0JLXJtIC1mICQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtcy9HdGtMYXVuY2hl
ciAkKHRvcF9idWlsZGRpcikvUHJvZ3JhbXMvRHVtcFJlbmRlclRyZWUKLQktcm0gLWYgJCh0b3Bf
YnVpbGRkaXIpL1Byb2dyYW1zL3Rlc3RranMgJCh0b3BfYnVpbGRkaXIpL1Byb2dyYW1zL2RmdGFi
bGVzCi0JLXJtIC1mICQodG9wX2J1aWxkZGlyL1dlYktpdC9ndGsvV2ViS2l0R3RrLTEuMC5wYwor
Q0xFQU5GSUxFUyArPSAkKHRvcF9idWlsZGRpcikvUHJvZ3JhbXMvR3RrTGF1bmNoZXIgJCh0b3Bf
YnVpbGRkaXIpL1Byb2dyYW1zL0R1bXBSZW5kZXJUcmVlICQodG9wX2J1aWxkZGlyKS9Qcm9ncmFt
cy90ZXN0a2pzICQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtcy9kZnRhYmxlcyAkKHRvcF9idWlsZGRp
cikvV2ViS2l0L2d0ay9XZWJLaXRHdGstMS4wLnBjICQoR0VOU09VUkNFUykvKgogCi1kaXN0Y2xl
YW4tbG9jYWw6Ci0JLXJtIC1mICQoc3JjZGlyKS9hY29uZmlnLmguaW4gY29uZmlndXJlIGNvbmZp
Zy4qIEdOVW1ha2VmaWxlLmluIFwKLQkJSU5TVEFMTCBSRUFETUUKKyMgUHJvamVjdC13aWRlIGNs
ZWFuIHJ1bGVzCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyArPSAkKHNyY2RpcikvYWNvbmZpZy5oLmlu
IGNvbmZpZ3VyZSBjb25maWcuKiBHTlVtYWtlZmlsZS5pbiBcCisJSU5TVEFMTCBSRUFETUUKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18606</attachid>
            <date>2008-01-22 15:48:00 -0800</date>
            <delta_ts>2008-01-23 12:42:57 -0800</delta_ts>
            <desc>Updated patch against r29725</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>137780</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTcyNSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSAkKHRvcF9zcmNkaXIpL1dlYkNvcmUgXAogCS1JICQoc3JjZGlyKS9KYXZh
U2NyaXB0Q29yZSBcCiAJLUkgJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzIFwKIAktSSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvd3RmIFwKQEAgLTE5MSw2ICsxOTIs
NyBAQCBlbmRpZgogCiBpZiBUQVJHRVRfWDExCiBnbG9iYWxfY3BwZmxhZ3MgKz0gLURYUF9VTklY
Cit3ZWJraXRndGtfbGRmbGFncyArPSAtbFh0CiBlbmRpZgogCiBpZiAhRU5BQkxFX0RFQlVHCklu
ZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcAkocmV2aXNpb24gMjk3MjUpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgorICogIENv
cHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDEyICs1MCwxNyBAQAogI2luY2x1ZGUgPHN5cy91dHNu
YW1lLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIEZyYW1lTG9hZGVy
Q2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFtZSogZnJhbWUpCiAgICAgOiBt
X2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBtX3VzZXJBZ2VudCgi
IikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjAsOSArMTY2LDMwIEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2Fk
ZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCks
IGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIGNvbnN0IFN0cmlu
ZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsK
KworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFTU0VSVChsb2FkZXItPmZyYW1l
KCkpOworICAgICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVy
IGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUKKyAgICAg
ICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRo
ZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KKyAg
ICAgICAgU3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7CisgICAg
ICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKKyAgICAgICAgaWYgKCF1
c2VyQ2hvc2VuKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4
dEVuY29kaW5nTmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGxv
YWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2FkZXItPnNldEVuY29kaW5nKGVu
Y29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICBmcmFt
ZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIGlmIChtX3BsdWdp
blZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKSB7CisgICAg
ICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPnJlc3BvbnNl
KCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgp
OworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBp
ZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCkBAIC0yNTgsOCArMjg1
LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG8KICAgICAoY29y
ZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAot
V2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBF
bGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpCiB7CisgICAgUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldyA9IFBs
dWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0ZVBsdWdpblZpZXcoY29y
ZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZh
bHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3Rh
dHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4g
cGx1Z2luVmlldzsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CkBA
IC0zMDEsOCArMzMzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQq
IHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsKKyAg
ICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4ocGx1Z2luV2lkZ2V0
KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdl
dChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCkBAIC0zMjQs
NiArMzU1LDkgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnQ6Om9iagogICAg
IGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSkpCiAg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50SW1hZ2U7CiAKKyAgICBpZiAoUGx1
Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQo
bWltZVR5cGUpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudE5ldHNjYXBl
UGx1Z2luOworCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VN
SU1FVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRGcmFt
ZTsKIApAQCAtNjIzLDE0ICs2NTcsMTQgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpnZW5l
cmF0ZWRNSU1FVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIEFTU0VSVChkb2N1bWVudExvYWRl
ci0+ZnJhbWUoKSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxv
YWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCi0g
ICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRo
ZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KLSAg
ICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOwot
ICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKLSAgICBpZiAoZW5jb2Rp
bmcuaXNOdWxsKCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNl
KCkudGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigp
LT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisKKyAgICBpZiAoIW1fcGx1Z2lu
VmlldykKKyAgICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVudExvYWRlciwgMCwgMCk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAg
ICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0g
ZmFsc2U7CisgICAgfQogfQogCiAKQEAgLTc1Myw5ICs3ODcsMTMgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWlu
RG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAg
ICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAgICBtX3BsdWdpblZpZXcg
PSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQog
fQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAyOTcyNSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzIsNiArMzMs
OCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCiB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpA
QCAtMTgwLDYgKzE4MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgV2ViS2l0V2Vi
RnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNw
b25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAgIC8v
IFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAgICAgV2ViQ29yZTo6UGx1Z2lu
Vmlld0d0ayogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9Q
bHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNw
cAkocmV2aXNpb24gMjk3MjUpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTUsNiArMTA5NSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld191cGRhdGVfc2V0dGkKICAgICBzZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQo
ZW5hYmxlUGx1Z2lucyk7CiAgICAgc2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShy
ZXNpemFibGVUZXh0QXJlYXMpOwogICAgIHNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKHVzZXJTdHlsZXNoZWV0VXJpKTsKKyAgICBzZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQo
dHJ1ZSk7CiAKICAgICBnX2ZyZWUoZGVmYXVsdEVuY29kaW5nKTsKICAgICBnX2ZyZWUoY3Vyc2l2
ZUZvbnRGYW1pbHkpOwpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAyOTcyNSkKKysrIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQCB3ZWJjb3JlX2Nw
cGZsYWdzICs9IFwKIAktSSAkKHRvcF9idWlsZGRpcikvV2ViQ29yZS9iaW5kaW5ncy9qcwogCiB3
ZWJraXRndGtfY3BwZmxhZ3MgKz0gXAorCS1JICQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncyBcCiAJLUkgJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSAkKHNyY2Rp
cikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JICQoc3JjZGlyKS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9sb2FkZXIv
Z3RrIFwKIAktSSAkKHNyY2RpcikvV2ViQ29yZS9wYWdlL2d0ayBcCisJLUkgJChzcmNkaXIpL1dl
YkNvcmUvcGx1Z2lucy9ndGsgXAogCS1JICQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0IFwKIAktSSAkKHNyY2RpcikvV2ViS2l0L2d0ay9XZWJWaWV3CiAKQEAgLTg0Niw2ICs4NDgs
MTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29k
ZVJhbmdlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIFwKIAlXZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZv
U3RvcmVHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNw
cCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisJV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9u
cGFwaS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5l
cy5jcHAgXApAQCAtOTA1LDYgKzkxMiwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAJV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5j
cHAKIAoraWYgVEFSR0VUX1gxMQord2Via2l0Z3RrX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmMKK2VuZGlmCisKIHdlYmtpdGd0a19oZWFkZXJzICs9IFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEhlbHBlci5oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI5NzI1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTMgKzU3LDYg
QEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAogCiBib29sIFdlYkNv
cmU6Omhpc3RvcnlDb250YWlucyhjb25zdCBVQ2hhciosIHVuc2lnbmVkKSB7IHJldHVybiBmYWxz
ZTsgfQogCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQ
bHVnaW5BdEluZGV4KHVuc2lnbmVkKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwO30KLXVu
c2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci1TdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gU3RyaW5nKCk7IH0gCi1ib29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNN
SU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQotdm9pZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KLQotCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJu
IDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5j
dGlvbih2b2lkICgqKSgpKSB7IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
CShyZXZpc2lvbiAyOTcyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNiw1ICszMDYsMjIgQEAgdm9pZCBXaWRnZXQ6OnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGJvbwogCiB2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29u
c3QKIHsKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWd0
a1dpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJh
bWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKTsKKworICAgIC8v
IERvbid0IGFsbG93IHRoZSBhbGxvY2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRT
aXplIHN6ID0gZnJhbWVHZW9tZXRyeSgpLnNpemUoKTsKKyAgICBzei5jbGFtcE5lZ2F0aXZlVG9a
ZXJvKCk7CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55
KCksIHN6LndpZHRoKCksIHN6LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiB9CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VHdGtfSAorI2RlZmluZSBQ
bHVnaW5EYXRhYmFzZUd0a19ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xh
c3MgSW50U2l6ZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7
CisgICAgY2xhc3MgUGx1Z2luVmlld0d0azsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
UGx1Z2luUGFja2FnZUd0az4sIFBsdWdpblBhY2thZ2VHdGtIYXNoPiBQbHVnaW5TZXQ7CisgIAor
ICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlR3RrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQbHVnaW5EYXRhYmFzZUd0ayogaW5zdGFsbGVkUGx1Z2lucygpOworICAgICAgICBQbHVnaW5W
aWV3R3RrKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6
ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisgICAgICAgIGJvb2wgcmVm
cmVzaCgpOworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IHBsdWdpbnMoKSBjb25z
dDsKKyAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBhdGgoY29uc3QgU3RyaW5n
Jik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5QYXRocyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhzOyB9CisgICAgICAgIFBs
dWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OworCisgICAgICAgIFBsdWdpblBhY2th
Z2VHdGsqIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luRm9yRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKTsKKworICAgICAgICBzdGF0aWMgVmVjdG9y
PFN0cmluZz4gZGVmYXVsdFBsdWdpblBhdGhzKCk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
bV9wbHVnaW5QYXRoczsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVnaXN0ZXJlZE1JTUVU
eXBlczsKKyAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5W
aWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3Rr
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJLZXlib2Fy
ZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgImtq
c193aW5kb3cuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRp
bWUuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxranMvSlNMb2NrLmg+
CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDEx
KQorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYK
KyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisjaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+Cisj
ZW5kaWYKKwordXNpbmcgS0pTOjpFeGVjU3RhdGU7Cit1c2luZyBLSlM6OkludGVycHJldGVyOwor
dXNpbmcgS0pTOjpKU0xvY2s7Cit1c2luZyBLSlM6OkpTT2JqZWN0OwordXNpbmcgS0pTOjpKU1Zh
bHVlOwordXNpbmcgS0pTOjpVU3RyaW5nOworCit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZl
bnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NsYXNzIFBsdWdpblJlcXVl
c3RHdGsgeworcHVibGljOgorICAgIFBsdWdpblJlcXVlc3RHdGsoY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3Rp
ZnlEYXRhKQorICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFtZUxvYWRSZXF1ZXN0KQor
ICAgICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICAgICAsIG1fc2VuZE5vdGlm
aWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKSB7IH0KK3B1YmxpYzoKKyAgICBjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUxvYWRS
ZXF1ZXN0OyB9CisgICAgdm9pZCogbm90aWZ5RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90aWZ5
RGF0YTsgfQorICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Vu
ZE5vdGlmaWNhdGlvbjsgfQorcHJpdmF0ZToKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IG1fZnJhbWVM
b2FkUmVxdWVzdDsKKyAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAgYm9vbCBtX3NlbmROb3Rp
ZmljYXRpb247CisgICAgLy8gRklYTUU6IHVzZXIgZ2VzdHVyZQorfTsKKworc3RhdGljIFN0cmlu
ZyBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlm
ICghdXJsLnN0cmluZygpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBUaGlzIHJldHVybnMgYW4gdW5lc2NhcGVkIHN0
cmluZworICAgIHJldHVybiBLVVJMOjpkZWNvZGVfc3RyaW5nKHVybC5kZXByZWNhdGVkU3RyaW5n
KCkubWlkKDExKSk7Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6OnNfY3VycmVu
dFBsdWdpblZpZXcgPSAwOworCitzdGF0aWMgY29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9
ICJNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjgu
MSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAiOworCit2b2lkIFBsdWdpblZpZXdHdGs6OnVw
ZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIElu
dFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBS
ZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3
LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9t
ZXRyeSgpLnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAg
bV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7Cit9
CisKK0ludFJlY3QgUGx1Z2luVmlld0d0azo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAoreworICAg
IC8vIFN0YXJ0IGJ5IGNsaXBwaW5nIHRvIG91ciBib3VuZHMuCisgICAgSW50UmVjdCBjbGlwUmVj
dChtX3dpbmRvd1JlY3QpOworICAgIAorICAgIC8vIFRha2Ugb3VyIGVsZW1lbnQgYW5kIGdldCB0
aGUgY2xpcCByZWN0IGZyb20gdGhlIGVuY2xvc2luZyBsYXllciBhbmQgZnJhbWUgdmlldy4KKyAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2VsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCk7CisgICAgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gbV9lbGVtZW50LT5kb2N1bWVudCgp
LT52aWV3KCk7CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHBhcmVudFZpZXctPndpbmRvd0NsaXBS
ZWN0Rm9yTGF5ZXIobGF5ZXIsIHRydWUpKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0Lndp
ZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGlmIChtX3dpZGdldCkgeworICAg
ICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aWRnZXQsICZhbGxvY2F0aW9uKTsKKyNp
ZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQp
IHsKKyAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1fd2lkZ2V0
KSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAgICBndGtf
eHRiaW5fcmVzaXplKG1fd2lkZ2V0LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIGNsaXBS
ZWN0OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5wcmludGluZygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVjdCAhPSBmcmFtZUdlb21ldHJ5KCkpCisg
ICAgICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKKworICAgIGlmIChwYXJlbnQo
KSkKKyAgICAgICAgaW5pdCgpOworCisgICAgdXBkYXRlV2luZG93KCk7CisgICAgc2V0TlBXaW5k
b3dSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6Omdlb21ldHJ5Q2hhbmdlZCgp
IGNvbnN0Cit7CisgICAgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKTsKKyAgICB1cGRhdGVXaW5k
b3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGb2N1cygpCit7CisgICAgV2lkZ2V0
OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNob3coKQoreworICAgIG1f
aXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OmhpZGUoKQoreworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICBXaWRn
ZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludE1pc3NpbmdQbHVnaW5J
Y29uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBzdGF0aWMgSW1hZ2UqIG51bGxQbHVnaW5JbWFnZTsKKyAgICBpZiAoIW51bGxQbHVnaW5JbWFn
ZSkKKyAgICAgICAgbnVsbFBsdWdpbkltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJudWxsUGx1Z2luIik7CisKKyAgICBJbnRSZWN0IGltYWdlUmVjdChmcmFtZUdlb21ldHJ5KCku
eCgpLCBmcmFtZUdlb21ldHJ5KCkueSgpLCBudWxsUGx1Z2luSW1hZ2UtPndpZHRoKCksIG51bGxQ
bHVnaW5JbWFnZS0+aGVpZ2h0KCkpOworCisgICAgaW50IHhPZmZzZXQgPSAoZnJhbWVHZW9tZXRy
eSgpLndpZHRoKCkgLSBpbWFnZVJlY3Qud2lkdGgoKSkgLyAyOworICAgIGludCB5T2Zmc2V0ID0g
KGZyYW1lR2VvbWV0cnkoKS5oZWlnaHQoKSAtIGltYWdlUmVjdC5oZWlnaHQoKSkgLyAyOworCisg
ICAgaW1hZ2VSZWN0Lm1vdmUoeE9mZnNldCwgeU9mZnNldCk7CisKKyAgICBpZiAoIXJlY3QuaW50
ZXJzZWN0cyhpbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb250ZXh0LT5zYXZl
KCk7CisgICAgY29udGV4dC0+Y2xpcCh3aW5kb3dDbGlwUmVjdCgpKTsKKyAgICBjb250ZXh0LT5k
cmF3SW1hZ2UobnVsbFBsdWdpbkltYWdlLCBpbWFnZVJlY3QubG9jYXRpb24oKSk7CisgICAgY29u
dGV4dC0+cmVzdG9yZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNT
dGFydGVkKSB7CisgICAgICAgIC8vIERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAg
ICAgICAgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX2lzV2luZG93ZWQgfHwgY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAg
LyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLworCisgICAgbV9ucFdpbmRvdy50
eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJh
bWVWaWV3KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgewor
ICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAg
ICB9CisKKyAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIGlmICht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAg
TlBFdmVudCBucEV2ZW50OworCisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgYW5kIHBhc3Mg
aXQgb24gKi8KKyAgICAvKgorICAgIG5wRXZlbnQud1BhcmFtID0gZXZlbnQtPmtleUNvZGUoKTsg
ICAgCisKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQpIHsKKyAgICAgICAg
bnBFdmVudC5ldmVudCA9IFdNX0tFWURPV047CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMDsK
KyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0ga2V5dXBFdmVudCkgeworICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fS0VZVVA7CisgICAgICAgIG5wRXZlbnQubFBhcmFtID0gMHg4MDAw
OworICAgIH0KKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5j
ZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwor
Ly9leHRlcm4gYm9vbCBpZ25vcmVOZXh0U2V0Q3Vyc29yOworCit2b2lkIFBsdWdpblZpZXdHdGs6
OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2
ZW50OworCisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyBvbiAqLworICAgIElu
dFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9X
aW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CisKKyAgICAv
KgorICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55KCkpOworICAgIG5w
RXZlbnQud1BhcmFtID0gMDsKKworICAgIGlmIChldmVudC0+Y3RybEtleSgpKQorICAgICAgICBu
cEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkK
KyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7CisKKyAgICBpZiAoZXZlbnQtPnR5
cGUoKSA9PSBtb3VzZW1vdmVFdmVudCB8fAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNl
b3V0RXZlbnQgfHwgCisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdmVyRXZlbnQpIHsK
KyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAgICAgaWYgKGV2ZW50
LT5idXR0b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBF
dmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2Vkb3du
RXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTEJVVFRPTkRPV047
CisKKyAgICAgICAgICAgICAgICAvLyBGb2N1cyB0aGUgcGx1Z2luCisgICAgICAgICAgICAgICAg
bV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9lbGVtZW50KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdN
X1JCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkgeworICAgICAgICBzd2l0Y2gg
KGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
IG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01C
VVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybjsKKyAgICAq
LworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYg
KCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQor
ICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworICAgIC8vIEN1cnJlbnRseSwg
V2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uIGlu
IEV2ZW50SGFuZGxlci5jcHAKKyAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0aGF0IHdl
IHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2ZW50IHRoYXQuCisg
ICAgLy9pZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsgICAgIAorfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAoIW1fcGx1Z2luIHx8
IG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2ZW50LT5pc01vdXNl
RXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50
Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAg
ICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50
KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVu
dCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICgh
bV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihw
YXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2lu
ZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5k
b3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0Lmhl
aWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJl
Y3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0
KCk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAg
ICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7
CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmlld0d0azo6
c3RhcnQoKQoreworICAgIGlmIChtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQVNTRVJUKG1fcGx1Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdpbkZ1bmNz
KCktPm5ld3ApOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRD
dXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUuZGF0YSgpLCBtX2luc3RhbmNlLCBt
X21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBOVUxMKTsK
KyAgICB9CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7CisKKyAg
ICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpICYmICFt
X2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVl
c3Q7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1l
dGhvZCgiR0VUIik7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0VVJMKG1fdXJsKTsKKyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c3Rv
cCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgp
OworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBpdCA9
IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9w
KCk7CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAg
IEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7
CisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKworICAgIC8v
IERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5kZXN0cm95
KG1faW5zdGFuY2UsIDApOworCisgICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsqIHBsdWdp
blZpZXcpCit7CisgICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Cit9CisKK1Bs
dWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sKKyAgICBy
ZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsKK30KKworc3RhdGljIGNoYXIqIGNyZWF0ZVVURjhT
dHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgQ1N0cmluZyBjc3RyID0gc3RyLnV0Zjgo
KTsKKyAgICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0TWFsbG9j
KGNzdHIubGVuZ3RoKCkgKyAxKSk7CisKKyAgICBzdHJuY3B5KHJlc3VsdCwgY3N0ci5kYXRhKCks
IGNzdHIubGVuZ3RoKCkgKyAxKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2
b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpCit7Cisg
ICAgaWYgKCFzdHJpbmdBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOwor
CisgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOworfQorCitzdGF0aWMgYm9vbCBnZXRTdHJpbmco
S0pTUHJveHkqIHByb3h5LCBKU1ZhbHVlKiByZXN1bHQsIFN0cmluZyYgc3RyaW5nKQoreworICAg
IGlmICghcHJveHkgfHwgIXJlc3VsdCB8fCByZXN1bHQtPmlzVW5kZWZpbmVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBKU0xvY2sgbG9jazsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHByb3h5LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIFVTdHJpbmcgdXN0cmlu
ZyA9IHJlc3VsdC0+dG9TdHJpbmcoZXhlYyk7CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICAKKyAgICBzdHJpbmcgPSB1c3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3Qp
Cit7CisgICAgS1VSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLnJl
c291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlwdFN0cmlu
Z0lmSmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKKworICAgIGlmIChqc1N0cmluZy5pc051bGwo
KSkgeworICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQocmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLCAwLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gRklY
TUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdoZW4gdGhl
IGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgIGlmIChyZXF1ZXN0LT5zZW5k
Tm90aWZpY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOworICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnVybG5v
dGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4KCksIE5Q
UkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0cyBhcmUg
b25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IHBs
dWdpbgorICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQuCisgICAg
QVNTRVJUKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKS5pc0VtcHR5KCkg
fHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3Qo
KS5mcmFtZU5hbWUoKSkgPT0gbV9wYXJlbnRGcmFtZSk7CisgICAgCisgICAgLy8gRXhlY3V0aW5n
IGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVkLCBzbyB3
ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZnJhbWUuCisgICAgUmVmUHRyPEZyYW1l
PiBwYXJlbnRGcmFtZSA9ICBtX3BhcmVudEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IG1f
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJlY2F0ZWRT
dHJpbmcoKSwgdHJ1ZSk7CisKKyAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZy
YW1lTmFtZSgpLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7CisKKyAg
ICAgICAgaWYgKCFnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCksIHJlc3VsdCwg
cmVzdWx0U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU3RyaW5nIGNz
dHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBz
dHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIHBhcmVudEZyYW1lLmdldCgpLCByZXF1ZXN0
LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNlbmROb3Rp
ZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3Mo
KSxpbnN0YW5jZSgpKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworICAgICAgICBz
dHJlYW0tPnNlbmRKYXZhU2NyaXB0U3RyZWFtKHJlcXVlc3RVUkwsIGNzdHIpOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxQbHVnaW5WaWV3
R3RrPiogdGltZXIpCit7CisgICAgQVNTRVJUKHRpbWVyID09ICZtX3JlcXVlc3RUaW1lcik7Cisg
ICAgQVNTRVJUKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCk7CisKKyAgICBQbHVnaW5SZXF1ZXN0R3Rr
KiByZXF1ZXN0ID0gbV9yZXF1ZXN0c1swXTsKKyAgICBtX3JlcXVlc3RzLnJlbW92ZSgwKTsKKyAg
ICAKKyAgICAvLyBTY2hlZHVsZSBhIG5ldyByZXF1ZXN0IGJlZm9yZSBjYWxsaW5nIHBlcmZvcm1S
ZXF1ZXN0IHNpbmNlIHRoZSBjYWxsIHRvCisgICAgLy8gcGVyZm9ybVJlcXVlc3QgY2FuIGNhdXNl
IHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZWxldGVkLgorICAgIGlmIChtX3JlcXVlc3RzLnNpemUo
KSA+IDApCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKworICAgIHBl
cmZvcm1SZXF1ZXN0KHJlcXVlc3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNjaGVkdWxl
UmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0KQoreworICAgIG1fcmVxdWVzdHMuYXBw
ZW5kKHJlcXVlc3QpOworICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwor
TlBFcnJvciBQbHVnaW5WaWV3R3RrOjpsb2FkKGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1l
TG9hZFJlcXVlc3QsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSkKK3sK
KyAgICBBU1NFUlQoZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0aG9k
KCkgPT0gIkdFVCIgfHwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5odHRwTWV0
aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIEtVUkwgdXJsID0gZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS51cmwoKTsKKyAgICAKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfVVJMOworCisgICAgU3RyaW5nIHRhcmdldCA9IGZyYW1l
TG9hZFJlcXVlc3QuZnJhbWVOYW1lKCk7CisKKyAgICAvLyBkb24ndCBsZXQgYSBwbHVnaW4gc3Rh
cnQgYW55IGxvYWRzIGlmIGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIGEgZG9jdW1lbnQgdGhhdCBp
cyBiZWluZyAKKyAgICAvLyBkaXNwbGF5ZWQgdW5sZXNzIHRoZSBsb2FkcyBhcmUgaW4gdGhlIHNh
bWUgZnJhbWUgYXMgdGhlIHBsdWdpbi4KKyAgICBpZiAobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCkgIT0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3Vt
ZW50TG9hZGVyKCkgJiYKKyAgICAgICAgKHRhcmdldC5pc051bGwoKSB8fCBtX3BhcmVudEZyYW1l
LT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1lKSkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICBTdHJpbmcganNTdHJpbmcgPSBzY3JpcHRTdHJp
bmdJZkphdmFTY3JpcHRVUkwodXJsKTsKKyAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpKSB7Cisg
ICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFyZW50RnJhbWUtPnNldHRpbmdzKCk7Cisg
ICAgICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCkp
IHsKKyAgICAgICAgICAgIC8vIFJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SIGlmIEpTIGlzIGRp
c2FibGVkLiBUaGlzIGlzIHdoYXQgTW96aWxsYSBkb2VzLgorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmlzTnVsbCgpICYm
IG1fbW9kZSA9PSBOUF9GVUxMKSB7CisgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyBhIEphdmFT
Y3JpcHQgcmVxdWVzdCBmcm9tIGEgc3RhbmRhbG9uZSBwbHVnLWluIHRoYXQgaXMgc2VsZi10YXJn
ZXR0ZWQKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyBjYW4gY2F1c2UgdGhlIHVzZXIgdG8g
YmUgcmVkaXJlY3RlZCB0byBhIGJsYW5rIHBhZ2UgKDM0MjQwMzkpLgorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWpz
U3RyaW5nLmlzTnVsbCgpIHx8ICF0YXJnZXQuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKCFqc1N0
cmluZy5pc051bGwoKSAmJiAhdGFyZ2V0LmlzTnVsbCgpICYmIG1fcGFyZW50RnJhbWUtPnRyZWUo
KS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUpIHsKKyAgICAgICAgICAgIC8vIEZvciBz
ZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IEpTIHJlcXVlc3RzIHRvIGJlIG1hZGUgb24gdGhl
IGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHBsdWctaW4uCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorCisgICAgICAgIFBsdWdpblJlcXVlc3RHdGsq
IHJlcXVlc3QgPSBuZXcgUGx1Z2luUmVxdWVzdEd0ayhmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90
aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKKyAgICAgICAgc2NoZWR1bGVSZXF1ZXN0KHJlcXVlc3Qp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFBsdWdpblN0cmVhbSogc3RyZWFtID0gbmV3IFBsdWdp
blN0cmVhbSh0aGlzLCBtX3BhcmVudEZyYW1lLCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhLCBwbHVnaW4oKS0+cGx1Z2luRnVu
Y3MoKSxpbnN0YW5jZSgpKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisgICAg
ICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hh
ciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcg
PSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAg
IC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywg
IiIpOworICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJM
KGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJM
Tm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlE
YXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZy
YW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7
CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsK
K30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0
OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFt
ZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNl
VVJMLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAw
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVj
dG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1
ZmZlclswXSA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmly
c3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hh
ciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5z
aXplKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7
CisgICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAg
ICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAg
ICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3Np
dGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisg
ICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7Cisg
ICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIg
KDM4ODAzODcpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAg
ICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgx
MTMpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNv
bnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRv
IHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYg
cGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5z
dGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAg
IC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRz
CisgICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBM
RiBvcgorICAgIC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYg
aXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBm
aXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAg
ICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAg
ICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAg
ICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAg
ICAgICAgIC8vIG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICBVQ2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5h
bWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBwZXIo
bmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVb
aV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFt
ZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAg
IGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0
cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFs
c2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJG
aWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9s
OworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwor
CisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Ig
d2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZp
bmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRl
czsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAg
ICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBh
cyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAg
IGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0
ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYu
CisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxl
bmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBv
ZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUg
PT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBv
ZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkg
eworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29u
dGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMg
aGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxk
cy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVj
YXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAg
ICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3
IGhlYWRlcgorICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3Ig
KGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsK
KyAgICAgICAgICAgICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoY29sb24gPT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVy
OyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgy
MkhlYWRlckZpZWxkTmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9u
IC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAg
ICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJp
bmc6OmZyb21MYXRpbjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0
cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcg
dG1wID0gb2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAg
ICAgICAgICAgICAgICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
dG1wOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5z
ZXQobGFzdEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBj
b25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90
aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8
ICFidWYpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVM
b2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJG
aWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgewor
ICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1
ZiwgbGVuKTsKKworICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkK
KyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgICAg
IC8vIEdldCBmaWxlIGluZm8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0
ZjgoKSkuZGF0YSgpLCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVT
VF9JU19SRUdVTEFSKSkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
CisKKwkvL0ZJWE1FIC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisgICAgICAgIEZJ
TEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7Cisg
ICAgICAgIAorICAgICAgICBpZiAoZmlsZUhhbmRsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgICAgIC8vYnVmZmVyLnJlc2l6ZSgpOwor
CisgICAgICAgIGludCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxl
SGFuZGxlKTsKKworICAgICAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKGJ5
dGVzUmVhZCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwor
CisJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5y
ZXNpemUobGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAg
ICB9CisKKyAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50
IHBvc3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFk
ZXJzKSB7CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAg
ICAgICAgIHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0
QmxhbmtMaW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1p
ZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAg
ICAgICAgICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVy
LCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZl
ci5zaXplKCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVn
aW5zIGxpa2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3Qs
CisgICAgICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0
LiBTbyB3ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIGlu
c3RlYWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAg
ICAgICAgICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50
LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgp
KQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9J
bnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVt
b3ZlKCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9j
YXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAg
IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyho
ZWFkZXJGaWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUEJvZHkoUGFzc1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0
RGF0YUxlbmd0aCkpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQp
OworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwg
bm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hh
ciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFu
ZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRy
dWUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29s
IGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJl
IHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJu
IGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7
Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwg
Y29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7Cit9CisKK2ludDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGlu
dDMyIGxlbiwgdm9pZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
VW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAg
UGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtKj4o
c3RyZWFtLT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW06Om93bmVy
Rm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lO
VkFMSURfSU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0
cm95U3RyZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitjb25z
dCBjaGFyKiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJrcyAm
IFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KQorICAgICAgICByZXR1cm4gTW96aWxs
YVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91
c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4
KCk7CisgICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgcyA9IERlcHJl
Y2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobWVzc2FnZSk7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9
IG1fcGFyZW50RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0YXR1
c2JhclRleHQobV9wYXJlbnRGcmFtZSwgcyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRj
aCAodmFyaWFibGUpIHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBj
YXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsKKyAgICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkg
eworICAgICAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRp
b25Db250ZXh0IChHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0K
KyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMjsKKyNlbHNlCisgICAg
ICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gMDsKKyNlbmRpZgorICAgICAgICAg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5W
U3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAg
ICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAg
ICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBO
UE5WV2luZG93TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRP
YmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAg
ICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2Ny
aWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50
aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAg
ICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2Ny
aXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6
IHsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAg
ICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFn
KSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1M
UGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAg
IC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVk
IGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUu
aHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAg
ICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAg
dm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRP
YmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworCisjaWZkZWYgR0RLX1dJTkRPV0lO
R19YMTEKKyAgICAgICAgICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKEdUS19X
SURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93KTsKKyNlbmRpZgorI2lmZGVmIEdES19X
SU5ET1dJTkdfV0lOMzIKKyAgICAgICAgICAgICooKEhXTkQgKil3KSA9IEdES19XSU5ET1dJTkdf
SFdORChHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdyk7CisjZW5kaWYKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQor
CitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBQ
VnBsdWdpbldpbmRvd0Jvb2w6CisgICAgICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2lu
VHJhbnNwYXJlbnRCb29sOgorICAgICAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7Cisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWN0
KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJl
Y3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50
b3ApOworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNX
aW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogRklYTUUgLSBJbnZhbGlkYXRlIHRo
ZSByZWdpb24KKyAgICBSRUNUIHI7CisKKyAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09
IDApIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKKyAgICAqLworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICBn
dGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV93aWRnZXQpOworICAgIGVsc2UKKyAgICAgICAgZ3RrX3dp
ZGdldF9xdWV1ZV9kcmF3KEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSk7Cit9CisKK0tK
Uzo6QmluZGluZ3M6Okluc3RhbmNlKiBQbHVnaW5WaWV3R3RrOjpiaW5kaW5nSW5zdGFuY2UoKQor
eworICAgIE5QT2JqZWN0KiBvYmplY3QgPSAwOworCisgICAgaWYgKCFtX3BsdWdpbiB8fCAhbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IE5QRXJyb3IgbnBFcnI7CisgICAgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrczsKKyAgICAgICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVj
dCk7CisgICAgfQorCisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SIHx8ICFvYmplY3Qp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmpl
Y3Q+IHJvb3QgPSBtX3BhcmVudEZyYW1lLT5jcmVhdGVSb290T2JqZWN0KHRoaXMsIG1fcGFyZW50
RnJhbWUtPnNjcmlwdFByb3h5KCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICBLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZSAqaW5zdGFuY2UgPSBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlQmlu
ZGluZ0Zvckxhbmd1YWdlSW5zdGFuY2UoS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OkNMYW5ndWFn
ZSwgb2JqZWN0LCByb290LnJlbGVhc2UoKSk7CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2Jq
ZWN0KTsKKworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdp
blZpZXdHdGsoKQoreworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVl
c3RzKTsKKworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7
CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAg
ICBpZiAoIW1fbmVlZHNYRW1iZWQgJiYgR1RLX0lTX1dJREdFVChtX3dpZGdldCkpCisgICAgICAg
IGd0a193aWRnZXRfZGVzdHJveShtX3dpZGdldCk7CisgICAgbV93aW5kb3cgPSAwOworICAgIHNl
dEd0a1dpZGdldChOVUxMKTsKKworICAgIG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmpl
Y3RzRm9yUGx1Z2luKHRoaXMpOworCisgICAgaWYgKG1fcGx1Z2luICYmICEobV9xdWlya3MgJiBQ
bHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKQorICAgICAgICBtX3BsdWdpbi0+dW5sb2FkKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0q
IHN0cmVhbSkKK3sKKyAgICBBU1NFUlQobV9zdHJlYW1zLmNvbnRhaW5zKHN0cmVhbSkpOworCisg
ICAgbV9zdHJlYW1zLnJlbW92ZShzdHJlYW0pOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRl
dGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIC8vIFRoZSBmbGFz
aCBwbHVnaW4gb25seSByZXF1ZXN0cyB3aW5kb3dsZXNzIHBsdWdpbnMgaWYgd2UgcmV0dXJuIGEg
bW96aWxsYSB1c2VyIGFnZW50CisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNo
b2Nrd2F2ZS1mbGFzaCIpIHsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtXYW50c01v
emlsbGFVc2VyQWdlbnQ7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrVGhyb3R0bGVJ
bnZhbGlkYXRlOworICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWlya1Rocm90dGxlV01Vc2Vy
UGx1c09uZU1lc3NhZ2VzOworICAgIH0KKworICAgIC8vIFRoZSBXTVAgcGx1Z2luIHNldHMgaXRz
IHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBp
dHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBo
YXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobV9wbHVnaW4tPm5hbWUoKS5jb250YWlucygiTWlj
cm9zb2Z0IikgJiYgbV9wbHVnaW4tPm5hbWUoKS5jb250YWlucygiV2luZG93cyBNZWRpYSIpKSB7
CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGw7
CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGgg
dGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCisgICAgICAgIC8v
IGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcyB8PSBQ
bHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtOworICAgIH0KKworICAgIC8vIFRo
ZSBEaXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNh
bGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cg
d2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1pbWVUeXBl
ID09ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEZWZlckZp
cnN0U2V0V2luZG93Q2FsbDsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBm
b3IgYSBwcm9ibGVtIGluIG91ciBOUFJ1bnRpbWUgYmluZGluZ3M7IGlmIGEgcGx1Zy1pbiBjcmVh
dGVzIGFuCisgICAgLy8gTlBPYmplY3QgYW5kIHBhc3NlcyBpdCB0byBhIGZ1bmN0aW9uIGl0J3Mg
bm90IHBvc3NpYmxlIHRvIHNlZSB3aGF0IHJvb3Qgb2JqZWN0IHRoYXQgTlBPYmplY3QgYmVsb25n
cyB0by4KKyAgICAvLyBUaHVzLCB3ZSBkb24ndCBrbm93IHRoYXQgdGhlIG9iamVjdCBzaG91bGQg
YmUgaW52YWxpZGF0ZWQgd2hlbiB0aGUgcGx1Zy1pbiBpbnN0YW5jZSBnb2VzIGF3YXkuCisgICAg
Ly8gU2VlIDxyZGFyOi8vcHJvYmxlbS81NDg3NzQyPi4KKyAgICBpZiAobWltZVR5cGUgPT0gImFw
cGxpY2F0aW9uL3gtc2lsdmVybGlnaHQiKQorICAgICAgICBtX3F1aXJrcyB8PSBQbHVnaW5RdWly
a0RvbnRVbmxvYWRQbHVnaW47CisKKyAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9t
IGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0
byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0gImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBs
dWdpbiIpCisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udENhbGxXbmRQcm9jRm9y
U2FtZU1lc3NhZ2VSZWN1cnNpdmVseTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJh
bWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09IHBh
cmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5zaXpl
KCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7CisKKyAgICBtX3BhcmFtTmFtZXMgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkp
OworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxv
YyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7IGkrKykgeworICAgICAgICBpZiAoKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtSZW1vdmVX
aW5kb3dsZXNzVmlkZW9QYXJhbSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFyYW1OYW1lc1tpXSwg
IndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9w
YXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbU5hbWVzW2ldKTsK
KyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVURjhTdHJpbmcocGFy
YW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291bnQrKzsKKyAgICB9CisKKyAgICBtX3Bh
cmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCitQbHVnaW5WaWV3R3RrOjpQbHVnaW5WaWV3R3Rr
KEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1Z2luUGFja2FnZUd0
ayogcGx1Z2luLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorICAgIDogbV9wbHVn
aW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3BhcmVudEZyYW1l
KHBhcmVudEZyYW1lKQorICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2UpCisgICAgLCBtX3VybCh1cmwp
CisgICAgLCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKG1f
cGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSkpCisgICAgLCBtX3N0YXR1cyhQbHVn
aW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgLCBtX3JlcXVlc3RUaW1lcih0aGlzLCAm
UGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX3BhcmFtTmFtZXMoMCkK
KyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKKyAgICAsIG1fcXVpcmtzKDApCisgICAgLCBtX2lzV2lu
ZG93ZWQodHJ1ZSkKKyAgICAsIG1faXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAsIG1faXNWaXNp
YmxlKGZhbHNlKQorICAgICwgbV9oYXZlSW5pdGlhbGl6ZWQoZmFsc2UpCisgICAgLCBtX3dpbmRv
dygwKQorICAgICwgbV9sYXN0TWVzc2FnZSgwKQorICAgICwgbV9sb2FkTWFudWFsbHkobG9hZE1h
bnVhbGx5KQorICAgICwgbV9tYW51YWxTdHJlYW0oMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAg
LCBtX25lZWRzWEVtYmVkKGZhbHNlKQoreworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAg
bV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9pbnN0YW5jZSA9ICZtX2luc3RhbmNlU3RydWN0OworICAgIG1faW5z
dGFuY2UtPm5kYXRhID0gdGhpczsKKworICAgIG1fbWltZVR5cGUgPSBtaW1lVHlwZS51dGY4KCk7
CisgICAgZGV0ZXJtaW5lUXVpcmtzKG1pbWVUeXBlKTsKKworICAgIHNldFBhcmFtZXRlcnMocGFy
YW1OYW1lcywgcGFyYW1WYWx1ZXMpOworCisgICAgbV9tb2RlID0gbV9sb2FkTWFudWFsbHkgPyBO
UF9GVUxMIDogTlBfRU1CRUQ7CisKKyAgICByZXNpemUoc2l6ZSk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BsdWdp
bikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBs
dWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGx1Z2luLT5sb2Fk
KCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1
Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZh
bHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOwor
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkg
eworICAgICAgICBtX3dpZGdldCA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgICAgIGd0a19jb250
YWluZXJfYWRkKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dp
ZGdldCk7CisgICAgICAgIHNldEd0a1dpZGdldChtX3dpZGdldCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fd2lkZ2V0ID0gZ3RrX3h0YmluX25ldyhHVEtfV0lER0VUKG1fcGFyZW50RnJhbWUtPnZp
ZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93LCBOVUxMKTsKKyNlbHNlCisgICAgbV93
aWRnZXQgPSBnZGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKG1fcGFyZW50
RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLCBtX3dpZGdldCk7CisgICAgc2V0R3Rr
V2lkZ2V0KG1fd2lkZ2V0KTsKKyNlbmRpZgorICAgIGd0a193aWRnZXRfc2hvdyAobV93aWRnZXQp
OworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0KiB3cyA9IGdfbmV3MChOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKwor
ICAgIHdzLT50eXBlID0gMDsKKworICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIHdz
LT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExBWShtX3dpZGdldC0+d2luZG93KTsKKyAgICAg
ICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VBTChnZGtfZHJhd2FibGVfZ2V0X3Zpc3Vh
bChHREtfRFJBV0FCTEUobV93aWRnZXQtPndpbmRvdykpKTsKKyAgICAgICAgd3MtPmRlcHRoID0g
Z2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2lkZ2V0LT53aW5kb3cpKS0+
ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2Rr
X2RyYXdhYmxlX2dldF9jb2xvcm1hcChHREtfRFJBV0FCTEUobV93aWRnZXQtPndpbmRvdykpKTsK
KyAgICAgICAgbV93aW5kb3cgPSBHREtfV0lORE9XX1hXSU5ET1cobV93aWRnZXQtPndpbmRvdyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHVEtfWFRCSU4obV93aWRnZXQp
LT54dGRpc3BsYXk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54
dGNsaWVudC54dHZpc3VhbDsKKyAgICAgICAgd3MtPmRlcHRoID0gR1RLX1hUQklOKG1fd2lkZ2V0
KS0+eHRjbGllbnQueHRkZXB0aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKG1f
d2lkZ2V0KS0+eHRjbGllbnQueHRjb2xvcm1hcDsKKyAgICAgICAgbV93aW5kb3cgPSBHVEtfWFRC
SU4obV93aWRnZXQpLT54dHdpbmRvdzsKKworICAgICAgICBYRmx1c2ggKHdzLT5kaXNwbGF5KTsK
KyAgICB9CisKKyAgICBtX25wV2luZG93LndzX2luZm8gPSB3czsKKyNlbmRpZgorI2lmZGVmIEdE
S19XSU5ET1dJTkdfV0lOMzIKKyAgICBtX3dpbmRvdyA9IEdES19XSU5ET1dfSFdORChtX3dpZGdl
dC0+d2luZG93KTsKKyNlbmRpZgorCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisgICAgICAgIG1fbnBXaW5kb3cu
d2luZG93ID0gKHZvaWQqKW1fd2luZG93OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5k
b3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRv
dyA9IDA7CisgICAgfQorCisgICAgaWYgKCEobV9xdWlya3MgJiBQbHVnaW5RdWlya0RlZmVyRmly
c3RTZXRXaW5kb3dDYWxsKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnko
KSk7CisKKyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CisKKyAg
ICBtX21hbnVhbFN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwg
bV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3Qo
KSwgZmFsc2UsIDAsIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLGluc3RhbmNlKCkpOworICAgIG1f
bWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFsbHkodHJ1ZSk7CisKKyAgICBtX21hbnVhbFN0cmVh
bS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
R3RrOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAg
IEFTU0VSVChtX21hbnVhbFN0cmVhbSk7CisgICAgCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJl
Y2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlk
RmluaXNoTG9hZGluZygpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1f
bWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2FkaW5nKDApOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUKG1f
bWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3Ry
aW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpblBhY2thZ2VHdGs6On5QbHVnaW5Q
YWNrYWdlR3RrKCkKK3sKKyAgICBBU1NFUlQoIW1faXNMb2FkZWQpOworfQorCitQbHVnaW5QYWNr
YWdlR3RrOjpQbHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90
JiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX2lzTG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291
bnQoMCkKKyAgICAsIG1fcGF0aChwYXRoKQorICAgICwgbV9tb2R1bGUoMCkKKyAgICAsIG1fbGFz
dE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKK3sKKyAgICBpbnQgcG9zID0gbV9wYXRoLmRlcHJlY2F0
ZWRTdHJpbmcoKS5maW5kUmV2KCcvJyk7CisKKyAgICBtX2ZpbGVOYW1lID0gbV9wYXRoLnJpZ2h0
KG1fcGF0aC5sZW5ndGgoKSAtIHBvcyAtIDEpOworCit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0
azo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgY29uc3QgZ2NoYXIqIHR5cGVzID0gbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsK
KyAgICBnY2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7IiwgLTEpOworICAg
IGZvciAoaW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ldWzBdOyBpKyspIHsK
KyAgICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIs
IDMpOworCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWlt
ZURhdGFbMl0pOworICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMgPSBnX3N0cnNwbGl0KG1pbWVE
YXRhWzFdLCAiLCIsIC0xKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7Cisg
ICAgICAgIGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisgICAgICAgICAgICBl
eHRWZWN0b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5zaW9uc1tqXSkpOworCisgICAg
ICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rvcik7CisgICAg
ICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOwor
CisgICAgICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7CisgICAgICAgIGdfc3RyZnJlZXYobWlt
ZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7CisKKyAgICBjaGFyKiBi
dWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0gbV9OUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdp
bk5hbWVTdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisg
ICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gbV9O
UFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAmYnVmZmVyKTsKKyAg
ICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX2Rlc2NyaXB0aW9uID0gYnVm
ZmVyOworCisgICAgdW5sb2FkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGx1Z2lu
UGFja2FnZUd0azo6bG9hZCgpCit7CisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9s
b2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9tb2R1bGUg
PSBnX21vZHVsZV9vcGVuKChtX3BhdGgudXRmOCgpKS5kYXRhKCksIEdfTU9EVUxFX0JJTkRfTE9D
QUwpOworICAgIGlmICghbV9tb2R1bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
aXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6
ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAi
TlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxpemUpOworICAgIGdfbW9kdWxlX3N5
bWJvbChtX21vZHVsZSwgIk5QX0dldE1JTUVEZXNjcmlwdGlvbiIsICh2b2lkKiopJm1fTlBfR2V0
TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0
ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9t
b2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJm1fTlBQX0dldFZhbHVlKTsKKworICAgIGlm
ICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24gfHwgIW1fTlBQX1No
dXRkb3duIHx8ICFtX05QUF9HZXRWYWx1ZSkKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1l
bXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3Bs
dWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3Mu
dmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0g
TlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7Cisg
ICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9i
cm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0g
TlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1
czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1l
bWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9N
ZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBs
dWdpbnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlm
eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93
c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52
YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNz
LmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEph
dmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9
IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9w
cG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1f
YnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFs
dWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3Ry
aW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRl
bnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVu
dGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJG
dW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURl
ZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUg
PSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9H
ZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJv
cGVydHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVBy
b3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7
CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBf
SW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBF
cnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRD
b3VudCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1
dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6
dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9OUFBfU2h1
dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdp
blBhY2thZ2VHdGs6OnVubG9hZFdpdGhvdXRTaHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9h
ZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7Cisg
ICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAgIGdfbW9kdWxlX2Nsb3NlIChtX21vZHVsZSk7CisK
KyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpblBh
Y2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3Qm
IGxhc3RNb2RpZmllZCkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwYWNrYWdlID0gbmV3IFBs
dWdpblBhY2thZ2VHdGsocGF0aCwgbGFzdE1vZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+
ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVsZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2lu
UGFja2FnZUd0azo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9
IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmll
ZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnBy
ZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9m
KFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoY29uc3QgUGx1Z2lu
UGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYikKK3sKKyAgICByZXR1cm4g
YS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKworfQpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL2d0azJ4dGJpbi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsy
eHRiaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7
IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAt
Ki0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoq
KioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIu
MC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3Qg
dG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vu
c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
CisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lz
LAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisg
KiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlv
bi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMK
KyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIElu
aXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERl
dmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAq
CisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2Vk
IHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwi
KSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQ
TCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2gg
dG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIg
dGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93
IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRo
ZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBh
bmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5
b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1h
eSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFu
eSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQg
TElDRU5TRSBCTE9DSyAqKioqKiAqLyAgIAorCisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2Rl
ZmluZSBfX0dUS19YVEJJTl9IX18KKworI2luY2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNs
dWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8
WDExL1hsaWIuaD4KKyNpZmRlZiBNT1pJTExBX0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgor
I2lmZGVmIF9JTVBMX0dUS1hUQklOX0FQSQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNf
RVhQT1JUXyh0eXBlKQorI2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9S
VF8odHlwZSkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUK
KyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9f
Y3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVk
ZWYgc3RydWN0IF9HdGtYdEJpbkNsYXNzIEd0a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZ
UEVfWFRCSU4gICAgICAgICAgICAgICAgICAoZ3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmlu
ZSBHVEtfWFRCSU4ob2JqKSAgICAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiks
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRC
SU4sIEd0a1h0QmluKSkKKyNkZWZpbmUgR1RLX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAo
R1RLX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmlu
ZSBHVEtfSVNfWFRCSU4ob2JqKSAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiks
IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRC
SU4pKQorI2RlZmluZSBHVEtfSVNfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tf
Q0xBU1NfVFlQRSAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVEtfVFlQRV9YVEJJTikpCit0eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGll
bnQ7CisKK3N0cnVjdCBfWHRDbGllbnQgeworICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdl
dAl0b3Bfd2lkZ2V0OyAgICAvKiBUaGUgdG9wbGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGls
ZF93aWRnZXQ7ICAvKiBUaGUgZW1iZWRkZWQgd2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7
CisgIGludAkJeHRkZXB0aDsKKyAgQ29sb3JtYXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdp
bmRvdzsKK307CisKK3N0cnVjdCBfR3RrWHRCaW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tl
dDsKKyAgR2RrV2luZG93ICAgICAqcGFyZW50X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRk
aXNwbGF5OyAgICAgICAgLyogWHQgVG9vbGtpdCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAg
ICAgeHR3aW5kb3c7ICAgICAgICAgLyogWHQgVG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAg
ICAgICAgIHgsIHk7CisgIGdpbnQgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50
CSB4dGNsaWVudDsgICAgICAgICAvKiBYdCBDbGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitz
dHJ1Y3QgX0d0a1h0QmluQ2xhc3MKK3sKKyAgR3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwor
fTsKKworR1RLWFRCSU5fQVBJKEd0a1R5cGUpICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQp
OworR1RLWFRCSU5fQVBJKEd0a1dpZGdldCAqKSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBh
cmVudF93aW5kb3csIFN0cmluZyAqZik7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194
dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RL
WFRCSU5fQVBJKHZvaWQpICAgICAgIGd0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAg
d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgICBoZWlnaHQpOworCit0eXBlZGVmIHN0cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xh
dGlvbnMgIHRyYW5zbGF0aW9uczsgICAgICAgLyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5h
Z2VyICAgICovCisgICAgWHRCb3VuZEFjdGlvbnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJv
Y2VkdXJlIGJpbmRpbmdzIGZvciBhY3Rpb25zICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVj
ICpjdXJyZW50X3N0YXRlOyAgLyogVHJhbnNsYXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICov
CisgICAgdW5zaWduZWQgbG9uZyAgIGxhc3RFdmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAg
IAorCit0eXBlZGVmIHN0cnVjdCBfQ29yZVBhcnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxm
OyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLwor
ICAgIFdpZGdldENsYXNzICAgICB3aWRnZXRfY2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lk
Z2V0J3MgQ2xhc3NSZWMgICAgICAqLworICAgIFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAg
ICAgICAgIC8qIHBhcmVudCB3aWRnZXQgICAgICAgICAgICAgICAgICAgICAqLworICAgIFhybU5h
bWUgICAgICAgICB4cm1fbmFtZTsgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1
YXJraWZpZWQgICAqLworICAgIEJvb2xlYW4gICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8q
IG1hcmtlZCBmb3IgZGVzdHJveSAgICAgICAgICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0
ICBkZXN0cm95X2NhbGxiYWNrczsgIC8qIHdobyB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3ll
ZCAqLworICAgIFh0UG9pbnRlciAgICAgICBjb25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFp
bnQgcmVjb3JkICAgICAgICAgICAgICAgICAqLworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAg
ICAgICAgICAgICAgIC8qIHdpbmRvdyBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAg
IERpbWVuc2lvbiAgICAgICB3aWR0aCwgaGVpZ2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25z
ICAgICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAg
ICAgIC8qIHdpbmRvdyBib3JkZXIgd2lkdGggICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4g
ICAgICAgICBtYW5hZ2VkOyAgICAgICAgICAgIC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2Vk
PyAgICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlz
IHdpZGdldCBzZW5zaXRpdmUgdG8gdXNlciBldmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBh
bmNlc3Rvcl9zZW5zaXRpdmU7IC8qIGFyZSBhbGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAq
LworICAgIFh0RXZlbnRUYWJsZSAgICBldmVudF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8g
ZXZlbnQgZGlzcGF0Y2hlciAgICAgICAqLworICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAg
ICAgICAgICAgIC8qIHRyYW5zbGF0aW9uIG1hbmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0
VHJhbnNsYXRpb25zICBhY2NlbGVyYXRvcnM7ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0
aW9ucyAgICAgICAgICAqLworICAgIFBpeGVsICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAg
IC8qIHdpbmRvdyBib3JkZXIgcGl4ZWwgICAgICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAg
ICAgICBib3JkZXJfcGl4bWFwOyAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwg
ICAgICAqLworICAgIFdpZGdldExpc3QgICAgICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qg
b2YgcG9wdXBzICAgICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1f
cG9wdXBzOyAgICAgICAgIC8qIGhvdyBtYW55IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLwor
ICAgIFN0cmluZyAgICAgICAgICBuYW1lOyAgICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJj
ZSBuYW1lICAgICAgICAgICAgICAqLworICAgIFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAg
ICAgICAgIC8qIHdpbmRvdydzIHNjcmVlbiAgICAgICAgICAgICAgICAgICAqLworICAgIENvbG9y
bWFwICAgICAgICBjb2xvcm1hcDsgICAgICAgICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLworICAgIFdpbmRvdyAgICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8q
IHdpbmRvdyBJRCAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAg
ICBkZXB0aDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAg
ICAqLworICAgIFBpeGVsICAgICAgICAgICBiYWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBi
YWNrZ3JvdW5kIHBpeGVsICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3Jv
dW5kX3BpeG1hcDsgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAg
IEJvb2xlYW4gICAgICAgICB2aXNpYmxlOyAgICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQg
YW5kIG5vdCBvY2NsdWRlZD8qLworICAgIEJvb2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5h
Z2VkOy8qIG1hcCB3aW5kb3cgaWYgaXQncyBtYW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJlYyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9
IFdpZGdldFJlYywgQ29yZVJlYzsgICAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYg
LyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAvKiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5WaWV3R3RrX0gKKyNkZWZpbmUgUGx1
Z2luVmlld0d0a19ICisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlBsdWdpblN0cmVhbS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2lu
dGVybmFsLmgiCisjaW5jbHVkZSA8Z3RrL2d0a3dpZGdldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEtKUyB7CisgICAgbmFtZXNwYWNlIEJpbmRpbmdzIHsKKyAgICAgICAgY2xhc3MgSW5z
dGFuY2U7CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVu
dDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKKyAgICBj
bGFzcyBLZXlib2FyZEV2ZW50OworICAgIGNsYXNzIE1vdXNlRXZlbnQ7CisgICAgY2xhc3MgS1VS
TDsKKyAgICBjbGFzcyBQbHVnaW5QYWNrYWdlR3RrOworICAgIGNsYXNzIFBsdWdpblJlcXVlc3RH
dGs7CisgICAgY2xhc3MgUGx1Z2luU3RyZWFtOworICAgIGNsYXNzIFJlc291cmNlRXJyb3I7Cisg
ICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICAKKyAgICBlbnVtIFBsdWdpblF1aXJrcyB7
CisgICAgICAgIFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50ID0gMSA8PCAwLAorICAg
ICAgICBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsID0gMSA8PCAxLAorICAgICAg
ICBQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSA9IDEgPDwgMiwgCisgICAgICAgIFBsdWdp
blF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0gPSAxIDw8IDMsCisgICAgICAgIFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMgPSAxIDw8IDQsCisgICAgICAgIFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbiA9IDEgPDwgNSwKKyAgICAgICAgUGx1Z2luUXVpcmtE
b250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5ID0gMSA8PCA2CisgICAgfTsK
KworICAgIGVudW0gUGx1Z2luU3RhdHVzIHsKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90Rmlu
ZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKKyAgICAgICAg
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdp
blZpZXdHdGsgOiBwdWJsaWMgV2lkZ2V0LCBwcml2YXRlIFBsdWdpblN0cmVhbUNsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICBQbHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29u
c3QgSW50U2l6ZSYsIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxs
eSk7CisgICAgICAgIHZpcnR1YWwgflBsdWdpblZpZXdHdGsoKTsKKworICAgICAgICBQbHVnaW5Q
YWNrYWdlR3RrKiBwbHVnaW4oKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorICAg
ICAgICBOUFAgaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisKKyAgICAg
ICAgdm9pZCBzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0aWMg
UGx1Z2luVmlld0d0ayogY3VycmVudFBsdWdpblZpZXcoKTsKKworICAgICAgICBLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZSogYmluZGluZ0luc3RhbmNlKCk7CisKKyAgICAgICAgUGx1Z2luU3RhdHVz
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisKKyAgICAgICAgLy8gTlBOIGZ1
bmN0aW9ucworICAgICAgICBOUEVycm9yIGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNv
bnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgZ2V0
VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KTsKKyAgICAgICAgTlBFcnJv
ciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50
MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsK
KyAgICAgICAgTlBFcnJvciBwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAgICAgICAg
TlBFcnJvciBuZXdTdHJlYW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5Q
U3RyZWFtKiogc3RyZWFtKTsKKyAgICAgICAgaW50MzIgd3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwg
aW50MzIgbGVuLCB2b2lkKiBidWZmZXIpOworICAgICAgICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0o
TlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKTsKKyAgICAgICAgY29uc3QgY2hhciog
dXNlckFnZW50KCk7CisgICAgICAgIHZvaWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwor
ICAgICAgICBOUEVycm9yIGdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1
ZSk7CisgICAgICAgIE5QRXJyb3Igc2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKKyAgICAgICAg
dm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKTsKKyAgICAgICAgdm9pZCBmb3JjZVJlZHJh
dygpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qKTsKKyAg
ICAgICAgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKFBsdWdpblN0cmVhbSogc3RyZWFtKSB7
IGRpc2Nvbm5lY3RTdHJlYW0oc3RyZWFtKTsgfQorCisgICAgICAgIC8vIFdpZGdldCBmdW5jdGlv
bnMKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBzZXRGb2N1cygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIEludFJl
Y3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KEV2ZW50Kik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyop
OworCisgICAgICAgIC8vIFVzZWQgZm9yIG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBk
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKCk7CisgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAg
ICAgICB2b2lkIGluaXQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0
b3AoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmll
d0d0ayopOworICAgICAgICBOUEVycm9yIGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJv
b2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9pZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3Ig
aGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxl
biwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2Vu
ZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2lu
UGFja2FnZUd0az4gbV9wbHVnaW47CisgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAg
ICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAg
ICAgIEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5T
dGF0dXMgbV9zdGF0dXM7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsK
KworICAgICAgICB2b2lkIHBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAg
ICAgdm9pZCBzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lk
IHJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIFRpbWVy
PFBsdWdpblZpZXdHdGs+IG1fcmVxdWVzdFRpbWVyOworCisgICAgICAgIHZvaWQgdXBkYXRlV2lu
ZG93KCkgY29uc3Q7CisgICAgICAgIHZvaWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpOworICAgICAgICB2b2lkIHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50Kik7CisgICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3Vz
ZUV2ZW50Kik7CisKKyAgICAgICAgaW50IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3Vu
dDsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1W
YWx1ZXM7CisKKyAgICAgICAgQ1N0cmluZyBtX21pbWVUeXBlOworICAgICAgICBDU3RyaW5nIG1f
dXNlckFnZW50OworCisgICAgICAgIE5QUCBtX2luc3RhbmNlOworICAgICAgICBOUFBfdCBtX2lu
c3RhbmNlU3RydWN0OworICAgICAgICBOUFdpbmRvdyBtX25wV2luZG93OworCisgICAgICAgIEhh
c2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBtX3N0cmVhbXM7CisgICAgICAgIFZlY3RvcjxQ
bHVnaW5SZXF1ZXN0R3RrKj4gbV9yZXF1ZXN0czsKKworICAgICAgICBpbnQgbV9xdWlya3M7Cisg
ICAgICAgIGJvb2wgbV9pc1dpbmRvd2VkOworICAgICAgICBib29sIG1faXNUcmFuc3BhcmVudDsK
KyAgICAgICAgYm9vbCBtX2lzVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXpl
ZDsKKworI2lmZGVmIEdES19XSU5ET1dJTkdfWDExCisgICAgICAgIFhJRCBtX3dpbmRvdzsgLy8g
Zm9yIHdpbmRvd2VkIHBsdWctaW5zCisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMy
CisJSFdORCBtX3dpbmRvdzsKKyNlbmRpZgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV9jbGlw
UmVjdDsgLy8gVGhlIGNsaXAgcmVjdCB0byBhcHBseSB0byBhIHdpbmRvd2VkIHBsdWctaW4KKyAg
ICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fd2luZG93UmVjdDsgLy8gT3VyIHdpbmRvdyByZWN0Lgor
CisgICAgICAgIHVuc2lnbmVkIG1fbGFzdE1lc3NhZ2U7CisKKyAgICAgICAgYm9vbCBtX2xvYWRN
YW51YWxseTsKKyAgICAgICAgUmVmUHRyPFBsdWdpblN0cmVhbT4gbV9tYW51YWxTdHJlYW07CisK
KyAgICAgICAgc3RhdGljIFBsdWdpblZpZXdHdGsqIHNfY3VycmVudFBsdWdpblZpZXc7CisKKyAg
ICAgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICAgICAgYm9vbCBtX25lZWRzWEVtYmVkOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIApJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5QYWNrYWdlR3RrX0gKKyNkZWZp
bmUgUGx1Z2luUGFja2FnZUd0a19ICisKKyNpbmNsdWRlIDxnbW9kdWxlLmg+CisjaW5jbHVkZSA8
dGltZS5oPgorCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIm5wZnVuY3Rpb25zLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworI3VuZGVmIE5QX0luaXRpYWxpemVGdW5jUHRy
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IE1JTUVUb0Rlc2NyaXB0aW9uc01hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPiA+IE1JTUVUb0V4dGVuc2lvbnNNYXA7CisKKyAgICBjbGFzcyBQbHVnaW5Q
YWNrYWdlR3RrIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZUd0az4geworICAgIHB1
YmxpYzoKKyAgICAgICAgflBsdWdpblBhY2thZ2VHdGsoKTsKKyAgICAgICAgc3RhdGljIFBsdWdp
blBhY2thZ2VHdGsqIGNyZWF0ZVBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1l
X3QmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7
IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlv
bnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRGVzY3Jp
cHRpb25zOyB9CisgICAgICAgIGNvbnN0IE1JTUVUb0V4dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVu
c2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4dGVuc2lvbnM7IH0KKworICAgICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3Q7CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBs
dWdpblBhY2thZ2VHdGsmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2VHdGsmIGIpOworCisgICAgICAg
IGJvb2wgbG9hZCgpOworICAgICAgICB2b2lkIHVubG9hZCgpOworICAgICAgICB2b2lkIHVubG9h
ZFdpdGhvdXRTaHV0ZG93bigpOworCisgICAgICAgIGNvbnN0IE5QUGx1Z2luRnVuY3MqIHBsdWdp
bkZ1bmNzKCkgY29uc3QgeyByZXR1cm4gJm1fcGx1Z2luRnVuY3M7IH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90
JiBsYXN0TW9kaWZpZWQpOworICAgICAgICBib29sIGZldGNoSW5mbygpOworCisgICAgICAgIGJv
b2wgbV9pc0xvYWRlZDsKKyAgICAgICAgaW50IG1fbG9hZENvdW50OworCisgICAgICAgIFN0cmlu
ZyBtX2Rlc2NyaXB0aW9uOworICAgICAgICBTdHJpbmcgbV9wYXRoOworICAgICAgICBTdHJpbmcg
bV9maWxlTmFtZTsKKyAgICAgICAgU3RyaW5nIG1fbmFtZTsKKworICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXAgbV9taW1lVG9EZXNjcmlwdGlvbnM7CisgICAgICAgIE1JTUVUb0V4dGVuc2lv
bnNNYXAgbV9taW1lVG9FeHRlbnNpb25zOworCisgICAgICAgIEdNb2R1bGUqIG1fbW9kdWxlOwor
ICAgICAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWQ7CisKKyAgICAgICAgTlBfR2V0TUlNRURlc2Ny
aXB0aW9uRnVuY1B0ciBtX05QX0dldE1JTUVEZXNjcmlwdGlvbjsKKyAgICAgICAgTlBQX1NodXRk
b3duUHJvY1B0ciBtX05QUF9TaHV0ZG93bjsKKyAgICAgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBt
X05QUF9HZXRWYWx1ZTsKKyAgICAgICAgTlBQbHVnaW5GdW5jcyBtX3BsdWdpbkZ1bmNzOworICAg
ICAgICBOUE5ldHNjYXBlRnVuY3MgbV9icm93c2VyRnVuY3M7CisgICAgfTsKKworICAgIHN0cnVj
dCBQbHVnaW5QYWNrYWdlR3RrSGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+
KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZUd0az4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKworICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpIHsgcmV0dXJu
IGVxdWFsKHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGEpLCByZWludGVycHJl
dF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihiKSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2lu
UGFja2FnZUd0az4mIGIpIHsgcmV0dXJuIFBsdWdpblBhY2thZ2VHdGs6OmVxdWFsKCphLmdldCgp
LCAqYi5nZXQoKSk7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKy8vIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gV1RGLCB3aGVy
ZSBpdCdzIGltcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIEhhc2ggZnVuY3Rpb24gYnV0IHdpdGgg
ZGVmYXVsdCB0cmFpdHMuCisvLyBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRo
b3V0IGEgU3RvcmFnZVRyYWl0cyBzcGVjaWFsaXphdGlvbi4KK25hbWVzcGFjZSBXVEYgeworICAg
IHRlbXBsYXRlPD4gc3RydWN0IEhhc2hLZXlTdG9yYWdlVHJhaXRzPFdlYkNvcmU6OlBsdWdpblBh
Y2thZ2VHdGtIYXNoLCBIYXNoVHJhaXRzPFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3Rr
PiA+ID4geworICAgICAgICB0eXBlZGVmIEludFR5cGVzPHNpemVvZihSZWZQdHI8V2ViQ29yZTo6
UGx1Z2luUGFja2FnZUd0az4pPjo6U2lnbmVkVHlwZSBJbnRUeXBlOworICAgICAgICB0eXBlZGVm
IFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGtIYXNoIEhhc2g7CisgICAgICAgIHR5cGVkZWYgSGFz
aFRyYWl0czxJbnRUeXBlPiBUcmFpdHM7CisgICAgfTsKK30KKworCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFw
aS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2lu
Y2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoZSBwbHVnaW4gdmlldyBpcyBhbHdh
eXMgdGhlIG5kYXRhIG9mIHRoZSBpbnN0YW5jZSwuIFNvbWV0aW1lcywgcGx1Zy1pbnMgd2lsbCBj
YWxsIGFuIGluc3RhbmNlLXNwZWNpZmljIGZ1bmN0aW9uCisvLyB3aXRoIGEgTlVMTCBpbnN0YW5j
ZS4gVG8gd29ya2Fyb3VuZCB0aGlzLCBjYWxsIHRoZSBsYXN0IHBsdWctaW4gdmlldyB0aGF0IG1h
ZGUgYSBjYWxsIHRvIGEgcGx1Zy1pbi4KKy8vIEN1cnJlbnRseSwgdGhlIGN1cnJlbnQgcGx1Zy1p
biB2aWV3IGlzIG9ubHkgc2V0IGJlZm9yZSBOUFBfTmV3IGluIFBsdWdpblZpZXdHdGs6OnN0YXJ0
LgorLy8gVGhpcyBzcGVjaWZpY2FsbHkgd29ya3MgYXJvdW5kIEZsYXNoIGFuZCBTaG9ja3dhdmUu
IFdoZW4gd2UgY2FsbCBOUFBfTmV3LCB0aGV5IGNhbGwgTlBOX1VzZXJhZ2VudCB3aXRoIGEgTlVM
TCBpbnN0YW5jZS4KK3N0YXRpYyBQbHVnaW5WaWV3R3RrKiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
TlBQIGluc3RhbmNlKQoreworICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS0+bmRhdGEpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4oaW5zdGFuY2UtPm5kYXRh
KTsKKyAgICByZXR1cm4gUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKTsKK30KKwor
dm9pZCogTlBOX01lbUFsbG9jKHVpbnQzMiBzaXplKQoreworICAgIHJldHVybiBtYWxsb2Moc2l6
ZSk7Cit9CisKK3ZvaWQgTlBOX01lbUZyZWUodm9pZCogcHRyKQoreworICAgIGZyZWUocHRyKTsK
K30KKwordWludDMyIE5QTl9NZW1GbHVzaCh1aW50MzIgc2l6ZSkKK3sKKyAgICAvLyBEbyBub3Ro
aW5nCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBOX1JlbG9hZFBsdWdpbnMoTlBCb29sIHJl
bG9hZFBhZ2VzKQoreworICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZFBhZ2VzKTsKK30KKworTlBF
cnJvciBOUE5fUmVxdWVzdFJlYWQoTlBTdHJlYW0qIHN0cmVhbSwgTlBCeXRlUmFuZ2UqIHJhbmdl
TGlzdCkKK3sKKyAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworTlBFcnJvciBO
UE5fR2V0VVJMTm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJ
bnN0YW5jZShpbnN0YW5jZSktPmdldFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbm90aWZ5RGF0YSk7
Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5nZXRVUkwodXJsLCB0YXJnZXQpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJM
Tm90aWZ5KE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURh
dGEpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RV
UkxOb3RpZnkodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCBub3RpZnlEYXRhKTsKK30KKwor
TlBFcnJvciBOUE5fUG9zdFVSTChOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMKHVy
bCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSk7Cit9CisKK05QRXJyb3IgTlBOX05ld1N0cmVhbShO
UFAgaW5zdGFuY2UsIE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVh
bSoqIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+bmV3U3RyZWFtKHR5cGUsIHRhcmdldCwgc3RyZWFtKTsKK30KKworaW50MzIgTlBOX1dyaXRl
KE5QUCBpbnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIp
Cit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPndyaXRlKHN0
cmVhbSwgbGVuLCBidWZmZXIpOworfQorCitOUEVycm9yIE5QTl9EZXN0cm95U3RyZWFtKE5QUCBp
bnN0YW5jZSwgTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5kZXN0cm95U3RyZWFtKHN0cmVhbSwg
cmVhc29uKTsKK30KKworY29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgaW5zdGFuY2UpCit7
CisgICAgUGx1Z2luVmlld0d0ayogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSk7CisKKyAgICAgLy8gRklYTUU6IFNvbWUgcGx1Zy1pbnMgY2FsbCBOUE5fVXNlckFnZW50IHdp
dGggYSBudWxsIGluc3RhbmNlIGluIHRoZWlyIE5QX2luaXRpYWxpemUgZnVuY3Rpb24hCisgICAg
IC8vIFdlJ2QgbmVlZCBhIHdheSB0byBnZXQgYSB1c2VyIGFnZW50IHdpdGhvdXQgaGF2aW5nIGEg
ZnJhbWUgYXJvdW5kLgorICAgICBpZiAoIXZpZXcpCisgICAgICAgICByZXR1cm4gMDsKKyAKKyAg
ICByZXR1cm4gdmlldy0+dXNlckFnZW50KCk7Cit9CisKK3ZvaWQgTlBOX1N0YXR1cyhOUFAgaW5z
dGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+c3RhdHVzKG1lc3NhZ2UpOworfQorCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVj
dChOUFAgaW5zdGFuY2UsIE5QUmVjdCogaW52YWxpZFJlY3QpCit7CisgICAgcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3QpOworfQorCit2
b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBpbnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJl
Z2lvbikKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRl
UmVnaW9uKGludmFsaWRSZWdpb24pOworfQorCit2b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5z
dGFuY2UpCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Zm9yY2VSZWRy
YXcoKTsKK30KKworTlBFcnJvciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK05QRXJyb3Ig
TlBOX1NldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKQoreworICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnNldFZh
bHVlKHZhcmlhYmxlLCB2YWx1ZSk7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhRW52KCkKK3sKKyAg
ICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkKiBOUE5fR2V0SmF2YVBl
ZXIoTlBQIGluc3RhbmNlKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQKK05QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29s
IGVuYWJsZWQpCit7Cit9CisKK3ZvaWQKK05QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGlu
c3RhbmNlKQoreworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAor
LyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt
YmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3Rv
cD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lv
bjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisg
KiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAq
IFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisg
KiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBYRU1CRUQgRGVjbGFy
YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2Rl
IGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6
CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUg
dXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJM
R1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhl
IExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3
aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVu
ZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGlu
ZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQor
ICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4g
SWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVu
dCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBv
ZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiog
RU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1lc3NhZ2VzICovCisjZGVm
aW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfV0lO
RE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRF
ICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAgICAgICAgICAgMworI2Rl
ZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWEVNQkVEX0ZP
Q1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9GT0NVU19ORVhUICAgICAg
ICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAgICAgICAgICAgIDcKKyNk
ZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFhFTUJFRF9V
TkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT04gICAg
ICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYgICAgICAgICAgICAgMTEK
KworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVNQkVEX0dUS19HUkFCX0tF
WSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5HUkFCX0tFWSAgICAgICAg
ICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46ICovCisjZGVmaW5lIFhF
TUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBYRU1CRURfRk9DVVNfRklS
U1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xBU1QgICAgICAgICAgICAg
ICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZpbmUgWEVNQkVEX01BUFBF
RCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlR3RrLmgiCisKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAi
UGx1Z2luVmlld0d0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkRhdGFiYXNl
R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAgc3RhdGlj
IFBsdWdpbkRhdGFiYXNlR3RrKiBwbHVnaW5zID0gMDsKKyAgICAKKyAgICBpZiAoIXBsdWdpbnMp
IHsKKyAgICAgICAgcGx1Z2lucyA9IG5ldyBQbHVnaW5EYXRhYmFzZUd0azsKKyAgICAgICAgcGx1
Z2lucy0+c2V0UGx1Z2luUGF0aHMoUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRo
cygpKTsKKyAgICAgICAgcGx1Z2lucy0+cmVmcmVzaCgpOworICAgIH0KKworICAgIHJldHVybiBw
bHVnaW5zOworfQorCit2b2lkIFBsdWdpbkRhdGFiYXNlR3RrOjphZGRFeHRyYVBsdWdpblBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fcGx1Z2luUGF0aHMuYXBwZW5kKHBhdGgpOwor
ICAgIHJlZnJlc2goKTsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6cmVmcmVzaCgpCit7
ICAgCisgICAgUGx1Z2luU2V0IG5ld1BsdWdpbnM7CisKKyAgICBib29sIHBsdWdpblNldENoYW5n
ZWQgPSBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQgb2YgcGx1Z2lucworICAgIG5l
d1BsdWdpbnMgPSBnZXRQbHVnaW5zSW5QYXRocygpOworCisgICAgaWYgKCFtX3BsdWdpbnMuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jbGVhcigpOworCisgICAg
ICAgIFBsdWdpblNldCBwbHVnaW5zVG9VbmxvYWQgPSBtX3BsdWdpbnM7CisKKyAgICAgICAgUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHBsdWdpbnNUb1VubG9hZC5yZW1vdmUoKml0KTsK
KworICAgICAgICBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgICAgICBuZXdQbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIFVubG9h
ZCBwbHVnaW5zCisgICAgICAgIGVuZCA9IHBsdWdpbnNUb1VubG9hZC5lbmQoKTsKKyAgICAgICAg
Zm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGx1Z2luc1RvVW5sb2FkLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmUoKml0KTsK
KworICAgICAgICAvLyBBZGQgbmV3IHBsdWdpbnMKKyAgICAgICAgZW5kID0gbmV3UGx1Z2lucy5l
bmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1
Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRk
KCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFwbHVnaW5zVG9VbmxvYWQuaXNF
bXB0eSgpIHx8ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X3BsdWdpbnMgPSBuZXdQbHVnaW5zOworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAh
bmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiBN
SU1FIHR5cGVzCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMu
ZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBHZXQgTUlNRSB0eXBlcwor
ICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9lbmQgPSAo
Kml0KS0+bWltZVRvRGVzY3JpcHRpb25zKCkuZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfaXQgPSAoKml0KS0+bWltZVRvRGVzY3Jp
cHRpb25zKCkuYmVnaW4oKTsgbWFwX2l0ICE9IG1hcF9lbmQ7ICsrbWFwX2l0KSB7CisgICAgICAg
ICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuYWRkKG1hcF9pdC0+Zmlyc3QpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpblNldENoYW5nZWQ7Cit9CisKK1ZlY3RvcjxQbHVn
aW5QYWNrYWdlR3RrKj4gUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbnMoKSBjb25zdAoreworICAg
IFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcmVzdWx0OworCisgICAgUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgoKml0KS5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitQbHVnaW5TZXQgUGx1Z2luRGF0YWJhc2VHdGs6OmdldFBsdWdpbnNJblBhdGhzKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNl
dC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmlsZW5hbWVzOworICAgIFBsdWdpblNldCBw
bHVnaW5zOworCisgICAgUGx1Z2luUGFja2FnZUd0ayogb2xkV01QUGx1Z2luID0gMDsKKyAgICBQ
bHVnaW5QYWNrYWdlR3RrKiBuZXdXTVBQbHVnaW4gPSAwOworCisgICAgVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luUGF0aHMuZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblBhdGhzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHRGlyKiBkaXIgPSBnX2Rpcl9vcGVuKChpdC0+dXRm
OCgpKS5kYXRhKCksIDAsIE5VTEwpOworICAgICAgICBpZiAoZGlyKSB7CisgICAgICAgICAgICBj
b25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgd2hpbGUgKChuYW1lID0gZ19kaXJfcmVhZF9u
YW1lKGRpcikpKSB7CisgICAgICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgobmFtZSwg
Ii4iIEdfTU9EVUxFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2NoYXIqIGZpbGVu
YW1lID0gZ19idWlsZF9maWxlbmFtZSgoaXQtPnV0ZjgoKSkuZGF0YSgpLCBuYW1lLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luUGFja2FnZSA9IFBs
dWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoZmlsZW5hbWUsIHRpbWUoTlVMTCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocGx1Z2luUGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBsdWdpbnMuYWRkKHBsdWdpblBhY2thZ2UpOworICAgICAgICAgICAgICAgICAgICBnX2Zy
ZWUoZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGdfZGlyX2Nsb3NlKGRpcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1
Z2luczsKK30KKworc3RhdGljIGlubGluZSBWZWN0b3I8aW50PiBwYXJzZVZlcnNpb25TdHJpbmco
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIFZlY3RvcjxpbnQ+IHZlcnNpb247
CisKKyAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zOworICAg
IAorICAgIHdoaWxlIChzdGFydFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAgICAg
ICAgZm9yIChlbmRQb3MgPSBzdGFydFBvczsgZW5kUG9zIDwgdmVyc2lvblN0cmluZy5sZW5ndGgo
KTsgKytlbmRQb3MpCisgICAgICAgICAgICBpZiAodmVyc2lvblN0cmluZ1tlbmRQb3NdID09ICcu
JyB8fCB2ZXJzaW9uU3RyaW5nW2VuZFBvc10gPT0gJ18nKQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGludCB2ZXJzaW9uQ29tcG9uZW50ID0gdmVyc2lvblN0cmluZy5zdWJzdHJp
bmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKS50b0ludCgpOworICAgICAgICB2ZXJzaW9u
LmFwcGVuZCh2ZXJzaW9uQ29tcG9uZW50KTsKKworICAgICAgICBzdGFydFBvcyA9IGVuZFBvcyAr
IDE7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnNpb247Cit9CisKKy8vIFRoaXMgcmV0dXJucyB3
aGV0aGVyIHZlcnNpb25BIGlzIGhpZ2hlciB0aGFuIHZlcnNpb25CCitzdGF0aWMgaW5saW5lIGJv
b2wgY29tcGFyZVZlcnNpb25zKGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9uQSwgY29uc3QgVmVj
dG9yPGludD4mIHZlcnNpb25CKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZXJz
aW9uQS5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoaSA+PSB2ZXJzaW9uQi5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAodmVyc2lvbkFbaV0gPiB2ZXJz
aW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBlbHNlIGlmICh2ZXJz
aW9uQVtpXSA8IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIElmIHdlIGNvbWUgaGVyZSwgdGhlIHZlcnNpb25zIGFyZSBlaXRoZXIgdGhlIHNh
bWUgb3IgdmVyc2lvbkIgaGFzIGFuIGV4dHJhIGNvbXBvbmVudCwganVzdCByZXR1cm4gZmFsc2UK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlR3Rr
OjpkZWZhdWx0UGx1Z2luUGF0aHMoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOworCisg
ICAgZ2NoYXIqIGhvbWVQYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAi
Lm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChob21lUGF0aCk7
CisgICAgZ19mcmVlKGhvbWVQYXRoKTsKKworICAgIGNvbnN0IGdjaGFyKiBtb3pQYXRoID0gZ19n
ZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQYXRoKSB7CisgICAgICAgIGdj
aGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgsICI6IiwgLTEpOworCisgICAg
ICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKyAgICAgICAgICAgIHBh
dGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAgZ19mcmVlKHBsdWdpblBhdGhz
KTsKKyAgICB9CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxhL3BsdWdp
bnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOworCisg
ICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjppc01JTUVUeXBl
UmVnaXN0ZXJlZChjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdAoreworICAgIHJldHVybiAh
bWltZVR5cGUuaXNOdWxsKCkgJiYgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNvbnRhaW5zKG1pbWVU
eXBlKTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgU3RyaW5nIGtleSA9IG1p
bWVUeXBlLmxvd2VyKCk7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
cGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KS0+
bWltZVRvRGVzY3JpcHRpb25zKCkuY29udGFpbnMoa2V5KSkKKyAgICAgICAgICAgIHJldHVybiAo
Kml0KS5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0
ayogUGx1Z2luRGF0YWJhc2VHdGs6OnBsdWdpbkZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbikKK3sKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lu
cy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIE1JTUVUb0V4dGVuc2lvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIG1pbWVfZW5kID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5l
bmQoKTsKKworICAgICAgICBmb3IgKE1JTUVUb0V4dGVuc2lvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IG1pbWVfaXQgPSAoKml0KS0+bWltZVRvRXh0ZW5zaW9ucygpLmJlZ2luKCk7IG1pbWVfaXQgIT0g
bWltZV9lbmQ7ICsrbWltZV9pdCkgeworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGV4dGVuc2lvbnMgPSBtaW1lX2l0LT5zZWNvbmQ7CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAg
aWYgKGV4dGVuc2lvbnNbaV0gPT0gZXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKCppdCkuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmZpbmRQ
bHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreyAgIAorICAg
IFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbiA9IDA7CisKKyAgICBpZiAoIW1pbWVUeXBlLmlzTnVs
bCgpKQorICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAg
CisgICAgaWYgKCFwbHVnaW4pIHsKKyAgICAgICAgU3RyaW5nIHBhdGggPSB1cmwucGF0aCgpOwor
ICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gcGF0aC5zdWJzdHJpbmcocGF0aC5yZXZlcnNlRmlu
ZCgnLicpICsgMSk7CisKKyAgICAgICAgcGx1Z2luID0gcGx1Z2luRm9yRXh0ZW5zaW9uKGV4dGVu
c2lvbik7CisKKyAgICAgICAgLy8gRklYTUU6IGlmIG5vIHBsdWdpbiBjb3VsZCBiZSBmb3VuZCwg
cXVlcnkgeGRnbWltZSBmb3IgdGhlIG1pbWUgdHlwZSAKKyAgICAgICAgLy8gY29ycmVzcG9uZGlu
ZyB0byB0aGUgZXh0ZW5zaW9uLgorICAgIH0KKworICAgIHJldHVybiBwbHVnaW47Cit9CisKK1Bs
dWdpblZpZXdHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBw
YXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK3sKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4gPSBmaW5kUGx1Z2luKHVy
bCwgbWltZVR5cGUpOworICAgIAorICAgIC8vIE5vIHBsdWdpbiB3YXMgZm91bmQsIHRyeSByZWZy
ZXNoaW5nIHRoZSBkYXRhYmFzZSBhbmQgc2VhcmNoaW5nIGFnYWluCisgICAgaWYgKCFwbHVnaW4g
JiYgcmVmcmVzaCgpKQorICAgICAgICBwbHVnaW4gPSBmaW5kUGx1Z2luKHVybCwgbWltZVR5cGUp
OworICAgICAgICAKKyAgICByZXR1cm4gbmV3IFBsdWdpblZpZXdHdGsocGFyZW50RnJhbWUsIHNp
emUsIHBsdWdpbiwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5
cGUsIGxvYWRNYW51YWxseSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3Rr
Mnh0YmluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTQxIEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGlu
ZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5k
dGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNF
IEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisg
KiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGlj
ZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBs
aW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENv
ZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRnZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIElu
aXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0
ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBh
cmUgQ29weXJpZ2h0IChDKSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVs
eSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMg
b2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9y
IGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBj
YXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUg
aW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRo
ZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVz
ZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBp
bmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92
ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lv
bnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUK
KyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEws
IHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioq
KiogKi8KKyAKKy8qCisgKiBUaGUgR3RrWHRCaW4gd2lkZ2V0IGFsbG93cyBmb3IgWHQgdG9vbGtp
dCBjb2RlIHRvIGJlIHVzZWQKKyAqIGluc2lkZSBhIEdUSyBhcHBsaWNhdGlvbi4gIAorICovCisK
KyN1bmRlZiBHVEtfRElTQUJMRV9ERVBSRUNBVEVECisKKyNpbmNsdWRlICJ4ZW1iZWQuaCIKKyNp
bmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorI2luY2x1ZGUg
PGd0ay9ndGtwcml2YXRlLmg+CisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvKiBYbGliL1h0IHN0dWZmICovCisjaW5jbHVkZSA8WDEx
L1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4K
KyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4K
KworLyogdW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFi
b3V0IHdpZGdldAorICAgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uICovCisjdW5kZWYgREVCVUdf
WFRCSU4KKworI2RlZmluZSBYVEJJTl9NQVhfRVZFTlRTIDMwCisKK3N0YXRpYyB2b2lkICAgICAg
ICAgICAgZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKK3N0YXRp
YyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0
YmluKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dp
ZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5y
ZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAg
ICAgZ3RrX3h0YmluX2Rlc3Ryb3kgICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworc3RhdGlj
IHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fc2h1dGRvd24gICAoR3RrT2JqZWN0ICAgICAgKm9i
amVjdCk7CisKKy8qIFh0IGF3YXJlIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgeHRfY2xp
ZW50X2luaXQgICAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2NyZWF0ZSAgICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRlciwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApOworc3RhdGljIHZvaWQgICAgICAg
eHRfY2xpZW50X3VucmVhbGl6ZSAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9p
ZCAgICAgICB4dF9jbGllbnRfc2V0X2luZm8gIChXaWRnZXQgeHRwbHVnLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGlj
IHZvaWQgICAgICAgeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZl
bnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAo
V2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyICAgICAgIChXaWRnZXQgdywgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9k
YXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVy
KCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSApOworc3RhdGljIHZvaWQgICAgICAgeHRf
YWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2Vy
X2RhdGEpOyAKK3N0YXRpYyB2b2lkICAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRn
ZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSk7CitzdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJl
ZF9tZXNzYWdlIChYdENsaWVudCAqeHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIG1lc3NhZ2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBkZXRhaWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBkYXRhMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGRhdGEyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9uZyB0aW1lKTsgIAorc3RhdGljIGludCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlz
cGxheSAqZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
RXJyb3JFdmVudCAqZXJyb3IpOworLyogRm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCitzdGF0
aWMgdm9pZCAgICAgICB0cmFwX2Vycm9ycyh2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgIHVudHJh
cF9lcnJvcih2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChE
aXNwbGF5ICosIFhFcnJvckV2ZW50ICopOworc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJv
cl9jb2RlID0gMDsKKworc3RhdGljIEd0a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxM
OworCitzdGF0aWMgRGlzcGxheSAgICAgICAgICp4dGRpc3BsYXkgPSBOVUxMOworc3RhdGljIFN0
cmluZyAgICAgICAgICAqZmFsbGJhY2sgPSBOVUxMOworc3RhdGljIGdib29sZWFuICAgICAgICAg
eHRfaXNfaW5pdGlhbGl6ZWQgPSBGQUxTRTsKK3N0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93
aWRnZXRzID0gMDsKKworc3RhdGljIEdQb2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsK
K3N0YXRpYyBnaW50ICAgICAgICAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworc3RhdGlj
IGd1aW50ICAgICAgICAgICAgdGFnID0gMDsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9w
cmVwYXJlIChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZ2ludCAg
ICAgKnRpbWVvdXQpCit7ICAgCisgIGludCBtYXNrOworCisgIEdES19USFJFQURTX0VOVEVSKCk7
CisgIG1hc2sgPSBYUGVuZGluZyh4dGRpc3BsYXkpOworICBHREtfVEhSRUFEU19MRUFWRSgpOwor
CisgIHJldHVybiAoZ2Jvb2xlYW4pbWFzazsKK30KKworc3RhdGljIGdib29sZWFuCit4dF9ldmVu
dF9jaGVjayAoR1NvdXJjZSogIHNvdXJjZV9kYXRhKQoreworICBHREtfVEhSRUFEU19FTlRFUiAo
KTsKKworICBpZiAoeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzICYgR19JT19JTikgeworICAgIGlu
dCBtYXNrOworICAgIG1hc2sgPSBYUGVuZGluZyh4dGRpc3BsYXkpOworICAgIEdES19USFJFQURT
X0xFQVZFICgpOworICAgIHJldHVybiAoZ2Jvb2xlYW4pbWFzazsKKyAgfQorCisgIEdES19USFJF
QURTX0xFQVZFICgpOworICByZXR1cm4gRkFMU0U7Cit9ICAgCisKK3N0YXRpYyBnYm9vbGVhbgor
eHRfZXZlbnRfZGlzcGF0Y2ggKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAg
ICAgICAgR1NvdXJjZUZ1bmMgY2FsbF9iYWNrLAorICAgICAgICAgICAgICAgICAgICBncG9pbnRl
ciAgdXNlcl9kYXRhKQoreworICBYRXZlbnQgZXZlbnQ7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAg
aW50IGkgPSAwOworCisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNw
bGF5KTsKKworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKworICAvKiBQcm9jZXNzIG9ubHkgcmVh
bCBYIHRyYWZmaWMgaGVyZS4gIFdlIG9ubHkgbG9vayBmb3IgZGF0YSBvbiB0aGUKKyAgICogcGlw
ZSwgbGltaXQgaXQgdG8gWFRCSU5fTUFYX0VWRU5UUyBhbmQgb25seSBjYWxsCisgICAqIFh0QXBw
UHJvY2Vzc0V2ZW50IHNvIHRoYXQgaXQgd2lsbCBsb29rIGZvciBYIGV2ZW50cy4gIFRoZXJlJ3Mg
bm8KKyAgICogdGltZXIgcHJvY2Vzc2luZyBoZXJlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHRp
bWVyIGNhbGxiYWNrIHRoYXQKKyAgICogZG9lcyBpdC4gICovCisgIGZvciAoaT0wOyBpIDwgWFRC
SU5fTUFYX0VWRU5UUyAmJiBYUGVuZGluZyh4dGRpc3BsYXkpOyBpKyspIHsKKyAgICBYdEFwcFBy
b2Nlc3NFdmVudChhYywgWHRJTVhFdmVudCk7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAo
KTsKKworICByZXR1cm4gVFJVRTsgIAorfQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50
X2Z1bmNzID0geworICB4dF9ldmVudF9wcmVwYXJlLAorICB4dF9ldmVudF9jaGVjaywKKyAgeHRf
ZXZlbnRfZGlzcGF0Y2gsCisgIGdfZnJlZSwKKyAgKEdTb3VyY2VGdW5jKU5VTEwsCisgIChHU291
cmNlRHVtbXlNYXJzaGFsKU5VTEwKK307CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcG9s
bGluZ190aW1lcl9jYWxsYmFjayhncG9pbnRlciB1c2VyX2RhdGEpCit7CisgIERpc3BsYXkgKiBk
aXNwbGF5OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsK
KworICBkaXNwbGF5ID0gKERpc3BsYXkgKil1c2VyX2RhdGE7CisgIGFjID0gWHREaXNwbGF5VG9B
cHBsaWNhdGlvbkNvbnRleHQoZGlzcGxheSk7CisKKyAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1h
bnkgWHQgZXZlbnRzIGhlcmUuIElmIHdlIGp1c3QgcHJvY2VzcworICAgICBvbmUgZXZlbnQgd2Ug
bWlnaHQgc3RhcnZlIG9uZSBvciBtb3JlIFh0IGNvbnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQK
KyAgICAgdGhpcyBjb3VsZCBoYW5nIHRoZSB3aG9sZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91
cmluZyBpbi4gU28gcHJvY2VzcworICAgICB1cCB0byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFu
ZCBzYXZlIHRoZSByZXN0IGZvciBsYXRlci4gVGhpcyBpcyBhIGhhY2ssCisgICAgIGJ1dCBpdCBv
dWdodGEgd29yay4gV2UgKnJlYWxseSogc2hvdWxkIGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lu
cy4KKyAgKi8KKyAgd2hpbGUgKGV2ZW50c1RvUHJvY2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykp
CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1BbGwpOworICByZXR1cm4gVFJVRTsKK30K
KworR3RrVHlwZQorZ3RrX3h0YmluX2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR3RrVHlw
ZSB4dGJpbl90eXBlID0gMDsKKworICBpZiAoIXh0YmluX3R5cGUpIHsKKyAgICAgIHN0YXRpYyBj
b25zdCBHdGtUeXBlSW5mbyB4dGJpbl9pbmZvID0KKyAgICAgIHsKKyAgICAgICAgIkd0a1h0Qmlu
IiwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbiksCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW5D
bGFzcyksCisgICAgICAgIChHdGtDbGFzc0luaXRGdW5jKSBndGtfeHRiaW5fY2xhc3NfaW5pdCwK
KyAgICAgICAgKEd0a09iamVjdEluaXRGdW5jKSBndGtfeHRiaW5faW5pdCwKKyAgICAgICAgLyog
cmVzZXJ2ZWRfMSAqLyBOVUxMLAorICAgICAgICAvKiByZXNlcnZlZF8yICovIE5VTEwsCisgICAg
ICAgIChHdGtDbGFzc0luaXRGdW5jKSBOVUxMCisgICAgICB9OworICAgICAgeHRiaW5fdHlwZSA9
IGd0a190eXBlX3VuaXF1ZSAoR1RLX1RZUEVfU09DS0VULCAmeHRiaW5faW5mbyk7CisgICAgfQor
ICByZXR1cm4geHRiaW5fdHlwZTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9jbGFzc19p
bml0IChHdGtYdEJpbkNsYXNzICprbGFzcykKK3sKKyAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9j
bGFzczsKKyAgR3RrT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzczsKKworICBwYXJlbnRfY2xhc3Mg
PSBndGtfdHlwZV9jbGFzcyAoR1RLX1RZUEVfU09DS0VUKTsKKworICB3aWRnZXRfY2xhc3MgPSBH
VEtfV0lER0VUX0NMQVNTIChrbGFzcyk7CisgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194
dGJpbl9yZWFsaXplOworICB3aWRnZXRfY2xhc3MtPnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJl
YWxpemU7CisKKyAgb2JqZWN0X2NsYXNzID0gR1RLX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBv
YmplY3RfY2xhc3MtPmRlc3Ryb3kgPSBndGtfeHRiaW5fZGVzdHJveTsKK30KKworc3RhdGljIHZv
aWQKK2d0a194dGJpbl9pbml0IChHdGtYdEJpbiAqeHRiaW4pCit7CisgIHh0YmluLT54dGRpc3Bs
YXkgPSBOVUxMOworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IE5VTEw7CisgIHh0YmluLT54dHdp
bmRvdyA9IDA7CisgIHh0YmluLT54ID0gMDsKKyAgeHRiaW4tPnkgPSAwOworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX3JlYWxpemUgKEd0a1dpZGdldCAqd2lkZ2V0KQoreworICBHdGtYdEJp
biAgICAgKnh0YmluOworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDIwMCwg
MjAwIH07CisgIGdpbnQgIHgsIHksIHcsIGgsIGQ7IC8qIGdlb21ldHJ5IG9mIHdpbmRvdyAqLwor
CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVhbGl6ZSgpXG4iKTsK
KyNlbmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAod2lkZ2V0KSk7CisK
KyAgeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisKKyAgLyogY2FjdWxhdGUgdGhlIGFsbG9j
YXRpb24gYmVmb3JlIHJlYWxpemUgKi8KKyAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoeHRiaW4t
PnBhcmVudF93aW5kb3csICZ4LCAmeSwgJncsICZoLCAmZCk7CisgIGFsbG9jYXRpb24ud2lkdGgg
PSB3OworICBhbGxvY2F0aW9uLmhlaWdodCA9IGg7CisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZSAod2lkZ2V0LCAmYWxsb2NhdGlvbik7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYo
ImluaXRpYWwgYWxsb2NhdGlvbiAlZCAlZCAlZCAlZFxuIiwgeCwgeSwgdywgaCk7CisjZW5kaWYK
KworICB4dGJpbi0+d2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgIHh0YmluLT5o
ZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworCisgIC8qIHVzZSBHdGtTb2NrZXQn
cyByZWFsaXplICovCisgICgqR1RLX1dJREdFVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWFsaXpl
KSh3aWRnZXQpOworCisgIC8qIGNyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldCAqLworICB4dF9j
bGllbnRfY3JlYXRlKCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICAgZ3RrX3NvY2tldF9nZXRf
aWQoR1RLX1NPQ0tFVCh4dGJpbikpLCAKKyAgICAgICB4dGJpbi0+aGVpZ2h0LCAKKyAgICAgICB4
dGJpbi0+d2lkdGgpOworICB4dGJpbi0+eHR3aW5kb3cgPSBYdFdpbmRvdyh4dGJpbi0+eHRjbGll
bnQuY2hpbGRfd2lkZ2V0KTsKKworICBnZGtfZmx1c2goKTsKKworICAvKiBub3cgdGhhdCB3ZSBo
YXZlIGNyZWF0ZWQgdGhlIHh0IGNsaWVudCwgYWRkIGl0IHRvIHRoZSBzb2NrZXQuICovCisgIGd0
a19zb2NrZXRfYWRkX2lkKEdUS19TT0NLRVQod2lkZ2V0KSwgeHRiaW4tPnh0d2luZG93KTsKK30K
KworCisKK0d0a1dpZGdldCoKK2d0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRv
dywgU3RyaW5nICogZikKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBncG9pbnRlciB1c2VyX2Rh
dGE7CisKKyAgYXNzZXJ0KHBhcmVudF93aW5kb3cgIT0gTlVMTCk7CisgIHh0YmluID0gZ3RrX3R5
cGVfbmV3IChHVEtfVFlQRV9YVEJJTik7CisKKyAgaWYgKCF4dGJpbikKKyAgICByZXR1cm4gKEd0
a1dpZGdldCopTlVMTDsKKworICBpZiAoZikKKyAgICBmYWxsYmFjayA9IGY7CisKKyAgLyogSW5p
dGlhbGl6ZSB0aGUgWHQgdG9vbGtpdCAqLworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IHBhcmVu
dF93aW5kb3c7CisKKyAgeHRfY2xpZW50X2luaXQoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAg
IEdES19WSVNVQUxfWFZJU1VBTChnZGtfcmdiX2dldF92aXN1YWwoKSksCisgICAgICBHREtfQ09M
T1JNQVBfWENPTE9STUFQKGdka19yZ2JfZ2V0X2NvbG9ybWFwKCkpLAorICAgICAgZ2RrX3JnYl9n
ZXRfdmlzdWFsKCktPmRlcHRoKTsKKworICBpZiAoIXh0YmluLT54dGNsaWVudC54dGRpc3BsYXkp
IHsKKyAgICAvKiBJZiBYdE9wZW5EaXNwbGF5IGZhaWxlZCwgd2UgY2FuJ3QgZ28gYW55IGZ1cnRo
ZXIuCisgICAgICogIEJhaWwgb3V0LgorICAgICAqLworI2lmZGVmIERFQlVHX1hUQklOCisgICAg
cHJpbnRmKCJndGtfeHRiaW5faW5pdDogWHRPcGVuRGlzcGxheSgpIHJldHVybmVkIE5VTEwuXG4i
KTsKKyNlbmRpZgorICAgIGdfZnJlZSAoeHRiaW4pOworICAgIHJldHVybiAoR3RrV2lkZ2V0ICop
TlVMTDsKKyAgfQorCisgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHJ1bm5pbmcgd2lkZ2V0LCBo
b29rIHRoaXMgZGlzcGxheSBpbnRvIHRoZQorICAgICBtYWlubG9vcCAqLworICBpZiAoMCA9PSBu
dW1fd2lkZ2V0cykgeworICAgIGludCAgICAgICAgICAgY251bWJlcjsKKyAgICAvKgorICAgICAq
IGhvb2sgWHQgZXZlbnQgbG9vcCBpbnRvIHRoZSBnbGliIGV2ZW50IGxvb3AuCisgICAgICovCisK
KyAgICAvKiB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGd0a19pbml0IGhhcyBhbHJlYWR5IGJlZW4g
Y2FsbGVkICovCisgICAgR1NvdXJjZSogZ3MgPSBnX3NvdXJjZV9uZXcoJnh0X2V2ZW50X2Z1bmNz
LCBzaXplb2YoR1NvdXJjZSkpOworICAgICAgaWYgKCFncykgeworICAgICAgIHJldHVybiBOVUxM
OworICAgICAgfQorICAgIAorICAgIGdfc291cmNlX3NldF9wcmlvcml0eShncywgR0RLX1BSSU9S
SVRZX0VWRU5UUyk7CisgICAgZ19zb3VyY2Vfc2V0X2Nhbl9yZWN1cnNlKGdzLCBUUlVFKTsKKyAg
ICB0YWcgPSBnX3NvdXJjZV9hdHRhY2goZ3MsIChHTWFpbkNvbnRleHQqKU5VTEwpOworI2lmZGVm
IFZNUworICAgIGNudW1iZXIgPSBYQ29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2Vsc2UK
KyAgICBjbnVtYmVyID0gQ29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2VuZGlmCisgICAg
eHRfZXZlbnRfcG9sbF9mZC5mZCA9IGNudW1iZXI7CisgICAgeHRfZXZlbnRfcG9sbF9mZC5ldmVu
dHMgPSBHX0lPX0lOOyAKKyAgICB4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgPSAwOyAgICAvKiBo
bW0uLi4gaXMgdGhpcyBjb3JyZWN0PyAqLworCisgICAgZ19tYWluX2NvbnRleHRfYWRkX3BvbGwg
KChHTWFpbkNvbnRleHQqKU5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHRf
ZXZlbnRfcG9sbF9mZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlf
TE9XKTsKKyAgICAvKiBhZGQgYSB0aW1lciBzbyB0aGF0IHdlIGNhbiBwb2xsIGFuZCBwcm9jZXNz
IFh0IHRpbWVycyAqLworICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPQorICAgICAgZ3RrX3RpbWVv
dXRfYWRkKDI1LAorICAgICAgICAgICAgICAgICAgICAgIChHdGtGdW5jdGlvbil4dF9ldmVudF9w
b2xsaW5nX3RpbWVyX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgIHh0ZGlzcGxheSk7
CisgIH0KKworICAvKiBCdW1wIHVwIG91ciB1c2FnZSBjb3VudCAqLworICBudW1fd2lkZ2V0cysr
OworCisgIC8qIEJ1aWxkIHRoZSBoaWVyYWNoeSAqLworICB4dGJpbi0+eHRkaXNwbGF5ID0geHRi
aW4tPnh0Y2xpZW50Lnh0ZGlzcGxheTsKKyAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhH
VEtfV0lER0VUKHh0YmluKSwgcGFyZW50X3dpbmRvdyk7CisgIGdka193aW5kb3dfZ2V0X3VzZXJf
ZGF0YSh4dGJpbi0+cGFyZW50X3dpbmRvdywgJnVzZXJfZGF0YSk7CisgIGlmICh1c2VyX2RhdGEp
CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih1c2VyX2RhdGEpLCBHVEtfV0lE
R0VUKHh0YmluKSk7CisKKyAgcmV0dXJuIEdUS19XSURHRVQgKHh0YmluKTsKK30KKwordm9pZAor
Z3RrX3h0YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg
ICB5KQoreworICB4dGJpbi0+eCA9IHg7CisgIHh0YmluLT55ID0geTsKKworICBpZiAoR1RLX1dJ
REdFVF9SRUFMSVpFRCAoeHRiaW4pKQorICAgIGdka193aW5kb3dfbW92ZSAoR1RLX1dJREdFVCAo
eHRiaW4pLT53aW5kb3csIHgsIHkpOworfQorCit2b2lkCitndGtfeHRiaW5fcmVzaXplIChHdGtX
aWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCkKK3sKKyAgQXJnIGFyZ3NbMl07CisgIEd0
a1h0QmluICp4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKyAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVzaXpl
ICVwICVkICVkXG4iLCAodm9pZCAqKXdpZGdldCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKwor
ICB4dGJpbi0+aGVpZ2h0ID0gaGVpZ2h0OworICB4dGJpbi0+d2lkdGggID0gd2lkdGg7CisKKyAg
Ly8gQXZvaWQgQmFkVmFsdWUgZXJyb3JzIGluIFh0U2V0VmFsdWVzCisgIGlmIChoZWlnaHQgPD0g
MCB8fCB3aWR0aCA8PTApIHsKKyAgICBoZWlnaHQgPSAxOworICAgIHdpZHRoID0gMTsKKyAgfQor
ICBYdFNldEFyZyhhcmdzWzBdLCBYdE5oZWlnaHQsIGhlaWdodCk7CisgIFh0U2V0QXJnKGFyZ3Nb
MV0sIFh0TndpZHRoLCAgd2lkdGgpOworICBYdFNldFZhbHVlcyh4dGJpbi0+eHRjbGllbnQudG9w
X3dpZGdldCwgYXJncywgMik7CisKKyAgLyogd2UgbmVlZCB0byBzZW5kIGEgc2l6ZSBhbGxvY2F0
ZSBzbyB0aGUgc29ja2V0IGtub3dzIGFib3V0IHRoZQorICAgICBzaXplIGNoYW5nZXMgKi8KKyAg
YWxsb2NhdGlvbi54ID0geHRiaW4tPng7CisgIGFsbG9jYXRpb24ueSA9IHh0YmluLT55OworICBh
bGxvY2F0aW9uLndpZHRoID0geHRiaW4tPndpZHRoOworICBhbGxvY2F0aW9uLmhlaWdodCA9IHh0
YmluLT5oZWlnaHQ7CisKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKHdpZGdldCwgJmFsbG9j
YXRpb24pOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX3VucmVhbGl6ZSAoR3RrV2lkZ2V0
ICpvYmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisK
KyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl91bnJlYWxpemUoKVxuIik7
CisjZW5kaWYKKworICAvKiBndGtfb2JqZWN0X2Rlc3Ryb3koKSB3aWxsIGFscmVhZHkgaG9sZCBh
IHJlZmNvdW50IG9uIG9iamVjdAorICAgKi8KKyAgeHRiaW4gPSBHVEtfWFRCSU4ob2JqZWN0KTsK
KyAgd2lkZ2V0ID0gR1RLX1dJREdFVChvYmplY3QpOworCisgIEdUS19XSURHRVRfVU5TRVRfRkxB
R1MgKHdpZGdldCwgR1RLX1ZJU0lCTEUpOworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAod2lk
Z2V0KSkgeworICAgIHh0X2NsaWVudF91bnJlYWxpemUoJih4dGJpbi0+eHRjbGllbnQpKTsKKyAg
fQorCisgICgqR1RLX1dJREdFVF9DTEFTUyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKSh3aWRn
ZXQpOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2Rlc3Ryb3kgKEd0a09iamVjdCAqb2Jq
ZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmlu
dGYoImd0a194dGJpbl9kZXN0cm95KClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFp
bCAob2JqZWN0ICE9IE5VTEwpOworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9i
amVjdCkpOworCisgIHh0YmluID0gR1RLX1hUQklOIChvYmplY3QpOworCisgIGlmKHh0YmluLT54
dHdpbmRvdykgeworICAgIC8qIHJlbW92ZSB0aGUgZXZlbnQgaGFuZGxlciAqLworICAgIHh0X2Ns
aWVudF9kZXN0cm95KCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgICAgeHRiaW4tPnh0d2luZG93ID0g
MDsKKworICAgIG51bV93aWRnZXRzLS07IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KKwor
ICAgIC8qIElmIHRoaXMgaXMgdGhlIGxhc3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQg
ZGlzcGxheQorICAgICAgIGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KKyAgICBpZiAo
MCA9PSBudW1fd2lkZ2V0cykgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoInJl
bW92aW5nIHRoZSBYdCBjb25uZWN0aW9uIGZyb20gdGhlIG1haW4gbG9vcFxuIik7CisjZW5kaWYK
KyAgICAgIGdfbWFpbl9jb250ZXh0X3JlbW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4
dF9ldmVudF9wb2xsX2ZkKTsKKyAgICAgIGdfc291cmNlX3JlbW92ZSh0YWcpOworCisgICAgICBn
dGtfdGltZW91dF9yZW1vdmUoeHRfcG9sbGluZ190aW1lcl9pZCk7CisgICAgICB4dF9wb2xsaW5n
X3RpbWVyX2lkID0gMDsKKyAgICB9CisgIH0KKworICBHVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9j
bGFzcyktPmRlc3Ryb3kob2JqZWN0KTsKK30KKworLyoKKyogRm9sbG93aW5nIGlzIHRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBYdCBYRW1iZWRkZWQgZm9yIGNsaWVudCBzaWRlCisqLworCisvKiBJbml0
aWFsIFh0IHBsdWdpbiAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9pbml0KCBYdENsaWVudCAq
IHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAg
ICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLAorICAgICAgICAgICAgICAgIGludCB4dGRlcHRo
KQoreworICBYdEFwcENvbnRleHQgIGFwcF9jb250ZXh0OworICBjaGFyICAgICAgICAgKm1Bcmd2
WzFdOworICBpbnQgICAgICAgICAgIG1BcmdjID0gMDsKKworICAvKgorICAgKiBJbml0aWFsaXpl
IFh0IHN0dWZmCisgICAqLworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xp
ZW50LT5jaGlsZF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IE5VTEw7
CisgIHh0Y2xpZW50LT54dHZpc3VhbCAgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAg
PSAwOworICB4dGNsaWVudC0+eHRkZXB0aCA9IDA7CisKKyAgaWYgKCF4dF9pc19pbml0aWFsaXpl
ZCkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzdGFydGluZyB1cCBYdCBzdHVm
ZlxuIik7CisjZW5kaWYKKyAgICBYdFRvb2xraXRJbml0aWFsaXplKCk7CisgICAgYXBwX2NvbnRl
eHQgPSBYdENyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgIGlmIChmYWxsYmFjaykKKyAg
ICAgIFh0QXBwU2V0RmFsbGJhY2tSZXNvdXJjZXMoYXBwX2NvbnRleHQsIGZhbGxiYWNrKTsKKwor
ICAgIHh0ZGlzcGxheSA9IFh0T3BlbkRpc3BsYXkoYXBwX2NvbnRleHQsIGdka19nZXRfZGlzcGxh
eSgpLCBOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JhcHBlciIsIE5VTEws
IDAsICZtQXJnYywgbUFyZ3YpOworICAgIGlmICh4dGRpc3BsYXkpCisgICAgICB4dF9pc19pbml0
aWFsaXplZCA9IFRSVUU7CisgIH0KKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSB4dGRpc3BsYXk7
CisgIHh0Y2xpZW50LT54dHZpc3VhbCAgID0geHR2aXN1YWw7CisgIHh0Y2xpZW50LT54dGNvbG9y
bWFwID0geHRjb2xvcm1hcDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggICAgPSB4dGRlcHRoOworfQor
CisvKiBDcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXRzCisqICAqLworc3RhdGljIHZvaWQKK3h0
X2NsaWVudF9jcmVhdGUgKCBYdENsaWVudCogeHRjbGllbnQgLCAKKyAgICAgICAgICAgICAgICAg
ICBXaW5kb3cgZW1iZWRkZXJpZCwgCisgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisg
ICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICkgCit7CisgIGludCAgICAgICAgICAgbjsKKyAg
QXJnICAgICAgICAgICBhcmdzWzZdOworICBXaWRnZXQgICAgICAgIGNoaWxkX3dpZGdldDsKKyAg
V2lkZ2V0ICAgICAgICB0b3Bfd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRm
KCJ4dF9jbGllbnRfY3JlYXRlKCkgXG4iKTsKKyNlbmRpZgorICB0b3Bfd2lkZ2V0ID0gWHRBcHBD
cmVhdGVTaGVsbCgiZHJhd2luZ0FyZWEiLCAiV3JhcHBlciIsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gdG9w
X3dpZGdldDsKKworICAvKiBzZXQgc2l6ZSBvZiBYdCB3aW5kb3cgKi8KKyAgbiA9IDA7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJn
c1tuXSwgWHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0VmFsdWVzKHRvcF93aWRnZXQs
IGFyZ3MsIG4pOworCisgIGNoaWxkX3dpZGdldCA9IFh0VmFDcmVhdGVXaWRnZXQoImZvcm0iLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVXaWRnZXRDbGFzcywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCwgTlVMTCk7CisK
KyAgbiA9IDA7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsK
KyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TnZpc3VhbCwgICB4dGNsaWVudC0+eHR2aXN1YWwgKTsgbisrOworICBYdFNl
dEFyZyhhcmdzW25dLCBYdE5kZXB0aCwgICAgeHRjbGllbnQtPnh0ZGVwdGggKTsgbisrOworICBY
dFNldEFyZyhhcmdzW25dLCBYdE5jb2xvcm1hcCwgeHRjbGllbnQtPnh0Y29sb3JtYXAgKTsgbisr
OworICBYdFNldEFyZyhhcmdzW25dLCBYdE5ib3JkZXJXaWR0aCwgMCk7IG4rKzsKKyAgWHRTZXRW
YWx1ZXMoY2hpbGRfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBYU3luYyh4dGNsaWVudC0+eHRkaXNw
bGF5LCBGQUxTRSk7CisgIHh0Y2xpZW50LT5vbGR3aW5kb3cgPSB0b3Bfd2lkZ2V0LT5jb3JlLndp
bmRvdzsKKyAgdG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSBlbWJlZGRlcmlkOworCisgIC8qIHRo
aXMgbGl0dGxlIHRyaWNrIHNlZW1zIHRvIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHdpZGdldCAq
LworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0UmVnaXN0ZXJEcmF3YWJs
ZSh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVyaWQs
CisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbHNlCisgIF9YdFJlZ2lzdGVy
V2luZG93KCBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7Cisj
ZW5kaWYKKyAgWHRSZWFsaXplV2lkZ2V0KGNoaWxkX3dpZGdldCk7CisKKyAgLyogbGlzdGVuIHRv
IGFsbCBYdCBldmVudHMgKi8KKyAgWFNlbGVjdElucHV0KHh0Y2xpZW50LT54dGRpc3BsYXksIAor
ICAgICAgICAgICAgICAgWHRXaW5kb3codG9wX3dpZGdldCksIAorICAgICAgICAgICAgICAgMHgw
RkZGRkYpOworICB4dF9jbGllbnRfc2V0X2luZm8gKGNoaWxkX3dpZGdldCwgMCk7CisKKyAgWHRN
YW5hZ2VDaGlsZChjaGlsZF93aWRnZXQpOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gY2hp
bGRfd2lkZ2V0OworCisgIC8qIHNldCB0aGUgZXZlbnQgaGFuZGxlciAqLworICBYdEFkZEV2ZW50
SGFuZGxlcihjaGlsZF93aWRnZXQsCisgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGICYgflJl
c2l6ZVJlZGlyZWN0TWFzaywKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAg
ICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGll
bnQpOworICBYdEFkZEV2ZW50SGFuZGxlcihjaGlsZF93aWRnZXQsIAorICAgICAgICAgICAgICAg
ICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAg
ICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVy
KXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50
KTsKKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9p
ZAoreHRfY2xpZW50X3VucmVhbGl6ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCApCit7CisjaWYgWGxp
YlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRVbnJlZ2lzdGVyRHJhd2FibGUoeHRjbGll
bnQtPnh0ZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRn
ZXQtPmNvcmUud2luZG93KTsKKyNlbHNlCisgIF9YdFVucmVnaXN0ZXJXaW5kb3coeHRjbGllbnQt
PnRvcF93aWRnZXQtPmNvcmUud2luZG93LAorICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0KTsKKyNlbmRpZgorCisgIC8qIGZsdXNoIHRoZSBxdWV1ZSBiZWZvcmUgd2Ug
cmV0dXJuaW5nIG9yaWdpbiB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdworICAgICBvciB3ZSBjYW4g
Z2V0IFggZXJyb3Igc2luY2UgdGhlIHdpbmRvdyBpcyBnb25lICovCisgIFhTeW5jKHh0Y2xpZW50
LT54dGRpc3BsYXksIEZhbHNlKTsKKworICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5k
b3cgPSB4dGNsaWVudC0+b2xkd2luZG93OworICBYdFVucmVhbGl6ZVdpZGdldCh4dGNsaWVudC0+
dG9wX3dpZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgCit4dF9jbGllbnRfZGVz
dHJveSAgIChYdENsaWVudCogeHRjbGllbnQpCit7CisgIGlmKHh0Y2xpZW50LT50b3Bfd2lkZ2V0
KSB7CisgICAgWHRSZW1vdmVFdmVudEhhbmRsZXIoeHRjbGllbnQtPmNoaWxkX3dpZGdldCwgMHgw
RkZGRkYsIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4
dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOworICAgIFh0RGVzdHJveVdpZGdldCh4
dGNsaWVudC0+dG9wX3dpZGdldCk7CisgICAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOwor
ICB9Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfc2V0X2luZm8gKFdpZGdl
dCB4dHBsdWcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisgIHVuc2lnbmVkIGxvbmcgYnVmZmVy
WzJdOworCisgIEF0b20gaW5mb0F0b20gPSBYSW50ZXJuQXRvbShYdERpc3BsYXkoeHRwbHVnKSwg
Il9YRU1CRURfSU5GTyIsIEZhbHNlKTsgCisKKyAgYnVmZmVyWzFdID0gMDsgICAgICAgICAgICAg
ICAgLyogUHJvdG9jb2wgdmVyc2lvbiAqLworICBidWZmZXJbMV0gPSBmbGFnczsKKworICBYQ2hh
bmdlUHJvcGVydHkgKFh0RGlzcGxheSh4dHBsdWcpLCBYdFdpbmRvdyh4dHBsdWcpLAorICAgICAg
ICAgICAgICAgICAgIGluZm9BdG9tLCBpbmZvQXRvbSwgMzIsCisgICAgICAgICAgICAgICAgICAg
UHJvcE1vZGVSZXBsYWNlLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYnVm
ZmVyLCAyKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3Nh
Z2UoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAg
WHRDbGllbnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIHN3aXRjaCAoZXZl
bnQtPnhjbGllbnQuZGF0YS5sWzFdKQorICB7CisgIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElG
WToKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0FDVElWQVRFOgorI2lmZGVmIERF
QlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZB
VEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElW
QVRFOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJF
RF9XSU5ET1dfREVBQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1C
RURfTU9EQUxJVFlfT046CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVu
dCBnZXQgWEVNQkVEX01PREFMSVRZX09OXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNl
IFhFTUJFRF9NT0RBTElUWV9PRkY6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0
IGNsaWVudCBnZXQgWEVNQkVEX01PREFMSVRZX09GRlxuIik7CisjZW5kaWYKKyAgICBicmVhazsK
KyAgY2FzZSBYRU1CRURfRk9DVVNfSU46CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKKyAgICB7
CisgICAgICBYRXZlbnQgeGV2ZW50OworICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4
ZXZlbnQpKTsKKworICAgICAgaWYoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9G
T0NVU19JTikgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBn
b3QgZm9jdXMgaW5cbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZv
Y3VzSW47CisgICAgICB9CisgICAgICBlbHNlIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAg
ICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIG91dFxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2
ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNPdXQ7CisgICAgICB9CisKKyAgICAgIHhldmVudC54Zm9j
dXMud2luZG93ID0gWHRXaW5kb3coeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgeGV2ZW50
Lnhmb2N1cy5kaXNwbGF5ID0gWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAg
IFhTZW5kRXZlbnQoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCisgICAgICAgICAg
ICAgICAgIHhldmVudC54Zm9jdXMud2luZG93LAorICAgICAgICAgICAgICAgICBGYWxzZSwgTm9F
dmVudE1hc2ssCisgICAgICAgICAgICAgICAgICZ4ZXZlbnQgKTsKKyAgICAgIFhTeW5jKCBYdERp
c3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCBGYWxzZSk7CisgICAgfQorICAgIGJyZWFrOwor
ICBkZWZhdWx0OgorICAgIGJyZWFrOworICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLwor
fQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdl
dCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50
ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICAKKyAgc3dpdGNoKGV2ZW50LT50
eXBlKQorICAgIHsKKyAgICBjYXNlIENsaWVudE1lc3NhZ2U6CisgICAgICAvKiBIYW5kbGUgeGVt
YmVkIG1lc3NhZ2UgKi8KKyAgICAgIGlmIChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQor
ICAgICAgICAgICAgICAgICBYSW50ZXJuQXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lk
Z2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7
CisgICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEs
IGV2ZW50KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6
CisgICAgICBicmVhazsKKyAgICBjYXNlIE1hcHBpbmdOb3RpZnk6CisgICAgICB4dF9jbGllbnRf
c2V0X2luZm8gKHcsIFhFTUJFRF9NQVBQRUQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm1h
cE5vdGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgMCk7CisgICAgICBicmVhazsK
KyAgICBjYXNlIEZvY3VzSW46CisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAw
LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNPdXQ6CisgICAgICBicmVhazsKKyAg
ICBjYXNlIEtleVByZXNzOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoIktleSBQ
cmVzcyBHb3QhXG4iKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
IGJyZWFrOworICAgIH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3Rh
dGljIHZvaWQKK3NlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCisgICAg
ICAgICAgICAgICAgICAgICBsb25nICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAg
IGxvbmcgICAgICBkZXRhaWwsIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEx
LCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTIsICAKKyAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgICAgICB0aW1lKSAgIAoreworICBYRXZlbnQgeGV2ZW50OyAKKyAgV2lu
ZG93IHc9WHRXaW5kb3coeHRjbGllbnQtPnRvcF93aWRnZXQpOworICBEaXNwbGF5KiBkcHk9eHRj
bGllbnQtPnh0ZGlzcGxheTsKKyAgaW50IGVycm9yY29kZTsKKworICBtZW1zZXQoJnhldmVudCww
LHNpemVvZih4ZXZlbnQpKTsKKyAgeGV2ZW50LnhjbGllbnQud2luZG93ID0gdzsKKyAgeGV2ZW50
LnhjbGllbnQudHlwZSA9IENsaWVudE1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50Lm1lc3NhZ2Vf
dHlwZSA9IFhJbnRlcm5BdG9tKGRweSwiX1hFTUJFRCIsRmFsc2UpOworICB4ZXZlbnQueGNsaWVu
dC5mb3JtYXQgPSAzMjsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCisgIHhl
dmVudC54Y2xpZW50LmRhdGEubFsxXSA9IG1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50LmRhdGEu
bFsyXSA9IGRldGFpbDsgCisgIHhldmVudC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICB4
ZXZlbnQueGNsaWVudC5kYXRhLmxbNF0gPSBkYXRhMjsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAg
WFNlbmRFdmVudCAoZHB5LCB3LCBGYWxzZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOworICBYU3lu
YyAoZHB5LEZhbHNlKTsKKworICBpZigoZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3Io
JWQpISEhXG4iLGVycm9yY29kZSk7CisjZW5kaWYKKyAgfQorfQorCitzdGF0aWMgaW50ICAgICAg
ICAgICAgIAorZXJyb3JfaGFuZGxlcihEaXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJy
b3IpCit7CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9IGVycm9yLT5lcnJvcl9jb2RlOworICByZXR1
cm4gMDsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAgCit0cmFwX2Vycm9ycyh2b2lkKQorewor
ICB0cmFwcGVkX2Vycm9yX2NvZGUgPTA7CisgIG9sZF9lcnJvcl9oYW5kbGVyID0gWFNldEVycm9y
SGFuZGxlcihlcnJvcl9oYW5kbGVyKTsKK30KKworc3RhdGljIGludCAgICAgICAgIAordW50cmFw
X2Vycm9yKHZvaWQpCit7CisgIFhTZXRFcnJvckhhbmRsZXIob2xkX2Vycm9yX2hhbmRsZXIpOwor
ICBpZih0cmFwcGVkX2Vycm9yX2NvZGUpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
ZigiR2V0IFggV2luZG93IEVycm9yID0gJWRcbiIsIHRyYXBwZWRfZXJyb3JfY29kZSk7CisjZW5k
aWYKKyAgfQorICByZXR1cm4gdHJhcHBlZF9lcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCAg
ICAgICAgIAoreHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVz
ZXJfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHcp
OworICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2VyX2RhdGE7CisgIFdpbmRvdyB3aW4gPSBYdFdp
bmRvdyh3KTsKKworICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ3JlYXRl
Tm90aWZ5OgorICAgICAgaWYoZXZlbnQtPnhjcmVhdGV3aW5kb3cucGFyZW50ID09IHdpbikgewor
ICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldCggZHB5LCBldmVudC0+eGNyZWF0
ZXdpbmRvdy53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyX3RyZWUoY2hpbGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBicmVh
azsKKyAgICBjYXNlIERlc3Ryb3lOb3RpZnk6CisgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVu
ZXIoIHcsIHVzZXJfZGF0YSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5
OgorICAgICAgaWYoZXZlbnQtPnhyZXBhcmVudC5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIC8q
IEkgYW0gdGhlIG5ldyBwYXJlbnQgKi8KKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9X
aWRnZXQoZHB5LCBldmVudC0+eHJlcGFyZW50LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkK
KyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7
CisgICAgICB9CisgICAgICBlbHNlIGlmKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IHdpbikg
eworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgY2hpbGQgKi8KKyAgICAgIH0KKyAgICAgIGVsc2Ug
eworICAgICAgICAvKiBJIGFtIHRoZSBvbGQgcGFyZW50ICovCisgICAgICB9CisgICAgICBicmVh
azsKKyAgICBjYXNlIEJ1dHRvblJlbGVhc2U6CisjaWYgMAorICAgICAgWFNldElucHV0Rm9jdXMo
ZHB5LCBYdFdpbmRvdyh4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2
ZW50LT54YnV0dG9uLnRpbWUpOworI2VuZGlmCisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICgg
eHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9D
VVMsIDAsIDAsIDAsIDApOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFr
OworICAgIH0gLyogRW5kIG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZv
aWQKK3h0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEp
Cit7CisgIFhXaW5kb3dBdHRyaWJ1dGVzIGF0dHI7CisgIGxvbmcgZXZlbnRtYXNrOworICBYdENs
aWVudCAqeHRjbGllbnQgPSB1c2VyX2RhdGE7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9l
cnJvcnMgKCk7CisgIFhHZXRXaW5kb3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3co
dyksICZhdHRyKTsKKyAgZXZlbnRtYXNrID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBTdWJzdHJ1
Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2s7CisgIFhTZWxlY3RJbnB1dChYdERp
c3BsYXkodyksCisgICAgICAgICAgICAgICBYdFdpbmRvdyh3KSwgCisgICAgICAgICAgICAgICBl
dmVudG1hc2spOworCisgIFh0QWRkRXZlbnRIYW5kbGVyKHcsIAorICAgICAgICAgICAgICAgICAg
ICBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAg
ICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0
X2NsaWVudF9mb2N1c19saXN0ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsK
KyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9yZW1vdmVfZm9jdXNfbGlz
dGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7CisgIGludCBlcnJvcmNvZGU7
CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIFN1YnN0cnVj
dHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgdXNlcl9k
YXRhKTsKKworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1
c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKSAK
K3sKKyAgV2luZG93IHdpbiA9IFh0V2luZG93KHRyZWVyb290KTsKKyAgV2luZG93ICpjaGlsZHJl
bjsKKyAgV2luZG93IHJvb3QsIHBhcmVudDsKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHRy
ZWVyb290KTsKKyAgdW5zaWduZWQgaW50IGksIG5jaGlsZHJlbjsKKworICAvKiBlbnN1cmUgd2Ug
ZG9uJ3QgYWRkIG1vcmUgdGhhbiBvbmNlICovCisgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcigg
dHJlZXJvb3QsIHVzZXJfZGF0YSk7CisgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggdHJlZXJvb3Qs
IHVzZXJfZGF0YSk7CisgIHRyYXBfZXJyb3JzKCk7CisgIGlmKCFYUXVlcnlUcmVlKGRweSwgd2lu
LCAmcm9vdCwgJnBhcmVudCwgJmNoaWxkcmVuLCAmbmNoaWxkcmVuKSkgeworICAgIHVudHJhcF9l
cnJvcigpOworICAgIHJldHVybjsKKyAgfQorCisgIGlmKHVudHJhcF9lcnJvcigpKSAKKyAgICBy
ZXR1cm47CisKKyAgZm9yKGk9MDsgaTxuY2hpbGRyZW47ICsraSkgeworICAgIFdpZGdldCBjaGls
ZCA9IFh0V2luZG93VG9XaWRnZXQoZHB5LCBjaGlsZHJlbltpXSk7CisgICAgaWYgKGNoaWxkKSAK
KyAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAg
fQorICBYRnJlZSgodm9pZCopY2hpbGRyZW4pOworCisgIHJldHVybjsKK30KKwpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VH
dGsuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1
Z2luQXRJbmRleCh1bnNpZ25lZCBpKSAKK3sgCisgICAgUGx1Z2luRGF0YWJhc2VHdGsgKmRiID0g
UGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBQbHVnaW5JbmZvKiBp
bmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGFja2FnZSA9IGRi
LT5wbHVnaW5zKClbaV07CisKKyAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAg
IGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgIGluZm8tPmRlc2MgPSBwYWNr
YWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBt
aW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICBN
SU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAg
aW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAKKyAgICAgICAgbWltZS0+dHlwZSA9
IGl0LT5maXJzdDsKKyAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIG1p
bWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9
IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykg
eworICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVz
ICs9ICIsIjsKKworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbmZvOworfQorCit1bnNpZ25lZCBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUGx1Z2luRGF0
YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworU3Ry
aW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbiBHVEsr
CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9y
dHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKSAKK3sKKyAgICByZXR1
cm4gUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lz
dGVyZWQobWltZVR5cGUpOworfQorCit2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3Bl
blBhZ2VzKQoreworICAgIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPnJl
ZnJlc2goKTsKKworICAgIGlmIChyZWxvYWRPcGVuUGFnZXMpIHsKKyAgICAgICAgLy8gRklYTUU6
IHJlbG9hZCBvcGVuIHBhZ2VzCisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
bnBmdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMu
aAkocmV2aXNpb24gMjk3MjUpCisrKyBXZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTcyLDE0ICsxNzIsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2lu
RnVuY3MgewogICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgc2V0dmFsdWU7CiB9IE5QUGx1Z2luRnVu
Y3M7CiAKKyNpZiBkZWZpbmVkKFhQX1dJTikKIHR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBF
cnJvciwgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyopOwogdHlwZWRlZiBF
WFBPUlRFRF9DQUxMQkFDSyhOUEVycm9yLCBOUF9HZXRFbnRyeVBvaW50c0Z1bmNQdHIpKE5QUGx1
Z2luRnVuY3MqKTsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChYUF9NQUNPU1gpCiB0eXBlZGVmIHZv
aWQgICAgKCpCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlc0Z1bmNQdHIpKHZvaWQp
OwogdHlwZWRlZiBOUEVycm9yICgqTWFpbkZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1
Z2luRnVuY3MqLCBOUFBfU2h1dGRvd25Qcm9jUHRyKik7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQo
WFBfVU5JWCkKK3R5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0soTlBFcnJvciwgTlBfSW5pdGlhbGl6
ZUZ1bmNQdHIpKE5QTmV0c2NhcGVGdW5jcyosIE5QUGx1Z2luRnVuY3MqKTsKK3R5cGVkZWYgRVhQ
T1JURURfQ0FMTEJBQ0soY2hhciosIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIpKHZvaWQp
OworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9u
IDI5NzI1KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYg
KzEzNyw3IEBAIERFUEVORFBBVEggKz0gZWRpdGluZy9xdCBoaXN0b3J5L3F0IGxvYWQKIGd0ay1w
b3J0IHsKICAgICB4MTE6cGx1Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAg
ICAgICBMSUJTICs9IC1sWHQKICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0xNzIs
NiArMTczLDcgQEAgZ3RrLXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBc
CiAgICAgbG9hZGVyL2d0ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAg
ICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZp
ZXcKIH0KQEAgLTg2MiwxMyArODY0LDM1IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJv
Y2Vzc29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdU
S19ESVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsu
aCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCisKICAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHAgCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBw
bHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisg
ICAgcGx1Z2lucy9ndGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMg
Kz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAorICAgICAgcGx1Z2lucy9ndGsv
eGVtYmVkLmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk4Miw2ICsxMDA2LDcgQEAgcXQtcG9ydCB7CiB9
CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3Rr
CiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBi
b2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhl
bHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAyOTcyNSkKKysrIFdl
YkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNCArMjgs
MTkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKIAorI2lu
Y2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUg
InJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCitLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0
KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKICAg
ICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkocmV2aXNp
b24gMjk3MjUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNyBDb2xs
YWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJldmlzaW9uOwogbXkgJG9zWFZl
cnNpb247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFibGVHdGtQbHVnaW5zOwogbXkg
JGlzV3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0CkBAIC00ODQsNiArNDg2LDIz
IEBAIHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitzdWIgZW5hYmxlR3RrUGx1Z2lu
cygpCit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpOworICAgIHJldHVybiAkZW5h
YmxlR3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKQorewor
ICAgIHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5zKTsKKworICAgIGlmIChjaGVj
a0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAgICAgICRlbmFibGVHdGtQbHVn
aW5zID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDE7Cisg
ICAgfQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5lSXNXeCgpOwpAQCAtNzk5LDYg
KzgxOCw3IEBAIHN1YiBidWlsZFFNYWtlR3RrUHJvamVjdCgkJCkKIAogICAgIG15IEBidWlsZEFy
Z3MgPSAoIkNPTkZJRys9Z3RrLXBvcnQiKTsKICAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUct
PXF0IjsKKyAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUcrPXBsdWdpbnMiIGlmIGVuYWJsZUd0
a1BsdWdpbnMoKTsKIAogICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xlYW4sIEBidWls
ZEFyZ3MpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18623</attachid>
            <date>2008-01-23 12:42:57 -0800</date>
            <delta_ts>2008-01-25 09:24:02 -0800</delta_ts>
            <desc>Updated patch against r29742</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>137572</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTc0MikKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0
Q29yZSBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMgXAog
CS1JJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL3d0ZiBcCkBAIC0xOTEsNiArMTkyLDcgQEAgZW5k
aWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBfVU5JWAord2Via2l0
Z3RrX2xkZmxhZ3MgKz0gLWxYdAogZW5kaWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJbmRleDogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJ
KHJldmlzaW9uIDI5NzQyKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC00OSwxMiArNTAsMTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgog
I2VuZGlmCiAKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6
RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAg
ICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYwLDkgKzE2NiwzMCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1p
dHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0g
ICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7
Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBp
ZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAg
ICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIg
d2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0
cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOworICAgICAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3Nl
bikKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGlu
Z05hbWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZy
YW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywg
dXNlckNob3Nlbik7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXIt
PmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7
CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAg
bV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAg
ICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjU4LDggKzI4NSwxMyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFt
ZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCog
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0
ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRh
YmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFt
ZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1p
bWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZp
ZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzAxLDgg
KzMzMyw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5X
aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9wbHVn
aW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAK
IFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtMzI0LDYgKzM1NSw5
IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAoTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBl
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsK
KwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUo
dHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAKQEAg
LTYyMywxNCArNjU3LDE0IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlN
RVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1l
KCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMg
b3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5n
IGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVs
bCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5j
b2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisg
ICAgICAgIGNvbW1pdHRlZExvYWQoZG9jdW1lbnRMb2FkZXIsIDAsIDApOworICAgIGVsc2Ugewor
ICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVn
aW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwor
ICAgIH0KIH0KIAogCkBAIC03NTMsOSArNzg3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoVW5hYmxlVG8KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0
IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50
RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAg
ICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuaAkocmV2aXNpb24gMjk3NDIpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMyLDYgKzMzLDggQEAKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4MCw2
ICsxODMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBt
X2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAg
ICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsKKworICAgICAgICAvLyBQbHVnaW4g
dmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisgICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXdHdGsq
IG1fcGx1Z2luVmlldzsKKyAgICAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwog
ICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKHJldmlz
aW9uIDI5NzQyKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDk1LDYgKzEwOTUsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfdXBkYXRlX3NldHRpCiAgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZVBs
dWdpbnMpOwogICAgIHNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUocmVzaXphYmxl
VGV4dEFyZWFzKTsKICAgICBzZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1c2Vy
U3R5bGVzaGVldFVyaSk7CisgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwog
CiAgICAgZ19mcmVlKGRlZmF1bHRFbmNvZGluZyk7CiAgICAgZ19mcmVlKGN1cnNpdmVGb250RmFt
aWx5KTsKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjk3NDIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHdlYmtpdGd0a19jcHBmbGFncyAr
PSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAJLUkk
KHNyY2RpcikvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BhZ2Uv
Z3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsdWdpbnMvZ3RrIFwKIAktSSQoc3JjZGlyKS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYlZp
ZXcKIApAQCAtODQ2LDYgKzg0NywxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKKwlXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05MDUsNiArOTExLDExIEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlXZWJDb3Jl
L3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJraXRndGtfc291cmNl
cyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworZW5kaWYKKwogd2Via2l0
Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjk3NDIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5
KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6
Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6UGx1Z0lu
SW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVn
aW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi0KIENvbG9yIFdlYkNvcmU6OmZvY3Vz
UmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1
c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlzaW9uIDI5NzQyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDUgKzMwNiwyMiBAQCB2
b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vCiAKIHZvaWQgV2lkZ2V0Ojpn
ZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICBJbnRQb2ludCBsb2Mg
PSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxv
Y2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6ZSB0byBi
ZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3ogPSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpOworICAg
IHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsKKyAgICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIH0K
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRh
YmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBj
bGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xh
c3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgdHlw
ZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2FnZUd0a0hh
c2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQbHVnaW5z
KCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVu
dEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7
CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
R3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVk
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBs
dWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0g
cGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisK
KyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNr
YWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pOworCisg
ICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgor
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5o
IgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3By
b3h5LmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBs
LmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2lu
Y2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8
Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNsdWRl
IDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3VzaW5n
IEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNPYmpl
Y3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5nIHN0
ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVzdEd0
ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0
KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisg
ICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVibGlj
OgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZyYW1l
TG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsK
KyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0dXJl
Cit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlw
dDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0
dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmco
dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1
Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5U
IDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3
KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4o
cGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Owor
ICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0
ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxv
Y2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1t
X3dpbmRvd1JlY3QueSgpKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlw
UmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4K
KyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBv
dXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVy
IGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFy
ZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAg
aWYgKG1fd2lkZ2V0KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpZGdl
dCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAg
IGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlv
bihHVEtfWFRCSU4obV93aWRnZXQpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgp
KTsKKyAgICAgICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53
aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9
CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9
IGZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3Qp
OworCisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5k
b3coKTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdl
ZCgpOworICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZv
Y3VzKCkKK3sKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgV2lkZ2V0OjpzaG93
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUg
PSBmYWxzZTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogbnVsbFBsdWdpbkltYWdlOworICAg
IGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55KCksIG51bGxQbHVnaW5J
bWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7CisKKyAgICBpbnQgeE9m
ZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7
CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0
LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsK
KworICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0
KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3Np
bmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQs
IHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8
fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5Q
RXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICov
CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21l
dHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAg
ICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXpl
IGFuIFhFdmVudCBhbmQgcGFzcyBpdCBvbiAqLworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0g
PSBldmVudC0+a2V5Q29kZSgpOyAgICAKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRv
d25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAg
bnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1
cEV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBF
dmVudC5sUGFyYW0gPSAweDgwMDA7CisgICAgfQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworfQorCisvL2V4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkK
K3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCB0
byBwYXNzIG9uICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBh
cmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQt
PnBhZ2VZKCkpKTsKKworICAgIC8qCisgICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAu
eCgpLCBwLnkoKSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5j
dHJsS2V5KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYg
KGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsK
KworICAgIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2
ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVudCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9
PSBtb3VzZW92ZXJFdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZF
OworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAg
ICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0
b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9MQlVUVE9ORE9XTjsKKworICAgICAgICAgICAgICAgIC8vIEZvY3VzIHRoZSBwbHVn
aW4KKyAgICAgICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2Vk
Tm9kZShtX2VsZW1lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50
KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNl
IDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVU
VE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgcmV0dXJuOworICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
CisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFm
dGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAorICAgIC8vIGFuZCBzaW5jZSB3
ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJl
IHRvIHByZXZlbnQgdGhhdC4KKyAgICAvL2lnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAg
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQorewor
ICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tl
eWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJl
bnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0
aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAu
eSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2lu
ZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0Lmxl
ZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93
LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
Ym90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5z
dGFuY2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKwor
Ym9vbCBQbHVnaW5WaWV3R3RrOjpzdGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVCht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAg
IFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJy
ID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5k
YXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1f
cGFyYW1WYWx1ZXMsIE5VTEwpOworICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50
UGx1Z2luVmlldygwKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFt
X3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJl
cXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9h
ZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3R3RrOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9
IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9y
IGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5n
ZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAg
bV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5w
ZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXco
UGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0g
cGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBs
dWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0
aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3Ry
aW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHko
cmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJh
eSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0
YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpz
U3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAg
aWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVl
KTsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hv
dWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAg
ICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRl
ZFN0cmluZygpLnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZh
U2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFp
bnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBz
dXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZy
YW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAg
ICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0
byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFt
ZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAg
SlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQo
anNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5n
IHJlc3VsdFN0cmluZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2Ny
aXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJl
ZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgcGFyZW50
RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3Qo
KSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBs
dWdpbigpLT5wbHVnaW5GdW5jcygpLGluc3RhbmNlKCkpOworICAgICAgICBtX3N0cmVhbXMuYWRk
KHN0cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVS
TCwgY3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZp
cmVkKFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0g
Jm1fcmVxdWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5zaXplKCkgPiAwKTsKKwor
ICAgIFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3RzWzBdOworICAgIG1fcmVx
dWVzdHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVm
b3JlIGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KKyAgICAvLyBwZXJm
b3JtUmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCisgICAg
aWYgKG1fcmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRP
bmVTaG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7
CisgICAgbV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9yZXF1ZXN0VGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmxvYWQoY29uc3QgRnJh
bWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2
b2lkKiBub3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisgICAgS1VSTCB1cmwgPSBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1
cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICBT
dHJpbmcgdGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKKworICAgIC8vIGRv
bid0IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQg
b2YgYSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhl
IGxvYWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgorICAgIGlmIChtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5s
b2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAgICAodGFyZ2V0LmlzTnVs
bCgpIHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJh
bWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgIFN0cmluZyBq
c1N0cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOworICAgIGlmICghanNT
dHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9wYXJlbnRG
cmFtZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmlz
SmF2YVNjcmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dFTkVS
SUNfRVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfSBlbHNlIGlm
ICh0YXJnZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsKKyAgICAgICAgICAgIC8v
IERvbid0IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBzdGFuZGFsb25lIHBsdWct
aW4gdGhhdCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNh
biBjYXVzZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxhbmsgcGFnZSAoMzQyNDAz
OSkuCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRhcmdldC5pc051bGwoKSkg
eworICAgICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJnZXQuaXNOdWxsKCkgJiYg
bV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRGcmFtZSkgewor
ICAgICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVz
dHMgdG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9CisKKyAgICAg
ICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0R3RrKGZyYW1l
TG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBzY2hl
ZHVsZVJlcXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUGx1Z2luU3RyZWFt
KiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIG1fcGFyZW50RnJhbWUsIGZyYW1lTG9h
ZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEs
IHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLGluc3RhbmNlKCkpOworICAgICAgICBtX3N0cmVhbXMu
YWRkKHN0cmVhbSk7CisKKyAgICAgICAgc3RyZWFtLT5zdGFydCgpOworICAgIH0KKworICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKK30KKworc3RhdGljIEtVUkwgbWFrZVVSTChjb25zdCBLVVJM
JiBiYXNlVVJMLCBjb25zdCBjaGFyKiByZWxhdGl2ZVVSTFN0cmluZykKK3sKKyAgICBEZXByZWNh
dGVkU3RyaW5nIHVybFN0cmluZyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEocmVsYXRp
dmVVUkxTdHJpbmcpOworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMKKyAgICB1cmxT
dHJpbmcucmVwbGFjZSgnXG4nLCAiIik7CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xyJywgIiIp
OworCisgICAgcmV0dXJuIEtVUkwoYmFzZVVSTCwgdXJsU3RyaW5nKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpnZXRVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxv
YWRSZXF1ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdF
VCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VV
UkwobV9iYXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3Qs
IHRydWUsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTChj
b25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICBGcmFtZUxvYWRSZXF1
ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFt
ZSh0YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UE1ldGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVM
b2FkUmVxdWVzdCwgZmFsc2UsIDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0
aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gYnVm
ZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK3N0YXRpYyBpbmxpbmUg
aW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZl
cikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQg
c2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsg
MV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgCisgICAgICAg
IC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBp
cyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNb
aSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChp
ID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBlbHNlIGlmIChi
eXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9y
LiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkg
KyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsg
MV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2Vu
ZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIGNv
bnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5l
ZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2ls
bCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVz
ZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5
PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2ls
bCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCBy
ZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAv
LyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ld
ID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0
ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5n
IGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElm
IHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAgICAgICAgaWYg
KGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
cmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVl
OworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFt
ZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0
YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAneicpCisgICAg
ICAgICAgICBjID0gdG91cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxp
emVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAg
ICAgICBjID0gdG9sb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9
IG5hbWVbaV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2Fw
aXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0
YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1h
cCBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsK
KyAgICBjb25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRl
ck1hcCBoZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUg
cGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcwor
ICAgIHdoaWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29u
c3QgY2hhciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5
dGVzOworICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFm
dGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVz
ID0gZW9sICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xu
JykpCisgICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0
dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7
CisgICAgICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5l
OyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBlbHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAg
ICAgLy8gQ29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlm
IChsYXN0S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRl
cjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0
aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVu
dFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJp
bmcgbmV3VmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGxpbmVMZW5n
dGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50
VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xv
bjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9u
ICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAg
IC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RL
ZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKERlcHJlY2F0ZWRTdHJpbmc6OmZy
b21MYXRpbjEobGluZSwgY29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZh
bHVlOworCisgICAgICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9u
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9
ICdcdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSAiIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShjb2xvbiwgZW9sIC0gY29sb24pOwor
CisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0
S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dG1wICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSB0bXA7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9y
IFBsdWdpblZpZXdHdGs6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3Rp
ZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAg
IGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURf
UEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBI
VFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAg
IAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IERlcHJlY2F0ZWRT
dHJpbmc6OmZyb21MYXRpbjEoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFy
dHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJz
dHJpbmcoOCk7CisKKyAgICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmls
ZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNU
X0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKKworCS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50
byBidWZmZXIKKyAgICAgICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4
KCkpLmRhdGEoKSwgInIiKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IE5V
TEwpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAg
Ly9idWZmZXIucmVzaXplKCk7CisKKyAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZl
ci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxl
KTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfRklMRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRh
dGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVm
ZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworICAg
IAorICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFua0xp
bmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAgICAgICAgIHBvc3RE
YXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgbG9jYXRpb24g
PSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChs
b2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5lIGlz
IHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVmb3Jl
IGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJGQzgy
MkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisgICAgICAgICAgICAg
ICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhlbXNl
bHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRhdGlv
biBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKKyAgICAg
ICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVxdWVz
dGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhlYWRl
ckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNv
bnRlbnRMZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGggPSBt
aW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOworICAgICAgICAgICAg
ICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAg
ICAgICBwb3N0RGF0YSArPSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBwb3N0RGF0YUxlbmd0
aCA9IGRhdGFMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1f
YmFzZVVSTCwgdXJsKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5h
ZGRIVFRQSGVhZGVyRmllbGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShQYXNzUmVmUHRyPEZvcm1EYXRhPihuZXcgRm9y
bURhdGEocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Qu
c2V0RnJhbWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0
LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
R3RrOjpwb3N0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1
aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRh
KQoreworICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwg
bm90aWZ5RGF0YSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9z
dFVSTChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29u
c3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICAvLyBBcyBkb2N1bWVudGVkLCBvbmx5
IGFsbG93IGhlYWRlcnMgdG8gYmUgc3BlY2lmaWVkIHZpYSBOUFBfUG9zdFVSTCB3aGVuIHVzaW5n
IGEgZmlsZS4KKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZp
bGUsIDAsIGZhbHNlLCBmaWxlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpuZXdTdHJl
YW0oTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFt
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKK30KKworaW50MzIgUGx1Z2luVmlld0d0azo6d3JpdGUo
TlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAtMTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3R3RrOjpkZXN0cm95U3RyZWFtKE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVh
c29uIHJlYXNvbikKK3sKKyAgICBQbHVnaW5TdHJlYW0qIGJyb3dzZXJTdHJlYW0gPSBzdGF0aWNf
Y2FzdDxQbHVnaW5TdHJlYW0qPihzdHJlYW0tPm5kYXRhKTsKKworICAgIGlmICghc3RyZWFtIHx8
IFBsdWdpblN0cmVhbTo6b3duZXJGb3JTdHJlYW0oc3RyZWFtKSAhPSBtX2luc3RhbmNlKQorICAg
ICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9JTlNUQU5DRV9FUlJPUjsKKworICAgIGJyb3dzZXJT
dHJlYW0tPmNhbmNlbEFuZERlc3Ryb3lTdHJlYW0ocmVhc29uKTsKKyAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7Cit9CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXdHdGs6OnVzZXJBZ2VudCgpCit7
CisgICAgaWYgKG1fcXVpcmtzICYgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpCisg
ICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50Lmlz
TnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51
c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQorewor
ICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKwor
ICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdl
LT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBF
cnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpCisgICAgICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogeworICAgICAgICAgICAg
aWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0g
WHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xp
ZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5WVG9vbGtpdDog
eworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1
ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAw
OworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdE
S19XSU5ET1dJTkdfWDExKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9
IHRydWU7CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZh
bHNlOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBP
YmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5Q
T2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3Jp
cHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0
T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAg
ICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBs
dWdpbkVsZW1lbnROUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlw
dE9iamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBw
bGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+
aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVj
dCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmpl
Y3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9i
amVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmpl
Y3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAg
ICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsK
KyAgICAgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisK
KyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgICAgICAgICAgKigoWElEICopdykgPSBHREtf
V0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cpOwor
I2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorICAgICAgICAgICAgKigoSFdORCAq
KXcpID0gR0RLX1dJTkRPV0lOR19IV05EKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+
d2luZG93KTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUoTlBQ
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUp
IHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1faXNX
aW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBtX2lzVHJh
bnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgewor
ICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRS
ZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJl
Y3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lv
bikKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBG
SVhNRSAtIEludmFsaWRhdGUgdGhlIHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRS
Z25Cb3gocmVnaW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICov
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmIChtX2lz
V2luZG93ZWQpCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3dpZGdldCk7CisgICAg
ZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpKTsKK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIFBsdWdpblZpZXdHdGs6
OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBPYmplY3QqIG9iamVjdCA9IDA7CisKKyAgICBp
ZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0
YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJf
Tk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8S0pT
OjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RP
YmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkp
OworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdz
OjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAgIF9O
UE5fUmVsZWFzZU9iamVjdChvYmplY3QpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitQ
bHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1O
YW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywg
bV9wYXJhbUNvdW50KTsKKworICAgIGlmICghbV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNfV0lER0VU
KG1fd2lkZ2V0KSkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsKKyAgICBt
X3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAgbV9wYXJlbnRGcmFt
ZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVn
aW4gJiYgIShtX3F1aXJrcyAmIFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpCisgICAgICAg
IG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaXNjb25uZWN0
U3RyZWFtKFBsdWdpblN0cmVhbSogc3RyZWFtKQoreworICAgIEFTU0VSVChtX3N0cmVhbXMuY29u
dGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Cit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1
Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICBpZiAobWltZVR5cGUg
PT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICBtX3F1aXJrcyB8
PSBQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudDsKKyAgICAgICAgbV9xdWlya3MgfD0g
UGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGU7CisgICAgICAgIG1fcXVpcmtzIHw9IFBsdWdp
blF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXM7CisgICAgfQorCisgICAgLy8gVGhl
IFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBvbiB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxs
IGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXplLCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdo
ZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNvcnJlY3Qgc2l6ZQorICAgIGlmIChtX3BsdWdpbi0+
bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQiKSAmJiBtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5z
KCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVpcmtEZWZl
ckZpcnN0U2V0V2luZG93Q2FsbDsKKworICAgICAgICAvLyBXaW5kb3dsZXNzIG1vZGUgZG9lcyBu
b3Qgd29yayBhdCBhbGwgd2l0aCB0aGUgV01QIHBsdWdpbiBzbyBqdXN0IHJlbW92ZSB0aGF0IHBh
cmFtZXRlciAKKyAgICAgICAgLy8gYW5kIGRvbid0IHBhc3MgaXQgdG8gdGhlIHBsdWctaW4uCisg
ICAgICAgIG1fcXVpcmtzIHw9IFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW07
CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZp
cnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAg
ICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNp
emUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBtX3F1aXJrcyB8
PSBQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsOworCisgICAgLy8gRklYTUU6IFRo
aXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIHByb2JsZW0gaW4gb3VyIE5QUnVudGltZSBiaW5kaW5n
czsgaWYgYSBwbHVnLWluIGNyZWF0ZXMgYW4KKyAgICAvLyBOUE9iamVjdCBhbmQgcGFzc2VzIGl0
IHRvIGEgZnVuY3Rpb24gaXQncyBub3QgcG9zc2libGUgdG8gc2VlIHdoYXQgcm9vdCBvYmplY3Qg
dGhhdCBOUE9iamVjdCBiZWxvbmdzIHRvLgorICAgIC8vIFRodXMsIHdlIGRvbid0IGtub3cgdGhh
dCB0aGUgb2JqZWN0IHNob3VsZCBiZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBwbHVnLWluIGluc3Rh
bmNlIGdvZXMgYXdheS4KKyAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU0ODc3NDI+LgorICAg
IGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodCIpCisgICAgICAgIG1f
cXVpcmtzIHw9IFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbjsKKworICAgIC8vIFByZXZlbnQg
dGhlIFJlYWwgcGx1Z2luIGZyb20gY2FsbGluZyB0aGUgV2luZG93IFByb2MgcmVjdXJzaXZlbHks
IGNhdXNpbmcgdGhlIHN0YWNrIHRvIG92ZXJmbG93LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXVk
aW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luIikKKyAgICAgICAgbV9xdWlya3MgfD0gUGx1Z2luUXVp
cmtEb250Q2FsbFduZFByb2NGb3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5OworfQorCit2b2lkIFBs
dWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFy
YW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNp
emUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKwor
ICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNp
emVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICgobV9xdWlya3Mg
JiBQbHVnaW5RdWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSAmJiBlcXVhbElnbm9yaW5n
Q2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3Ry
aW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFtQ291bnRdID0g
Y3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFyYW1Db3VudCsr
OworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisKK1BsdWdpblZp
ZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBz
aXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkK
KyAgICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX2lzU3RhcnRlZChmYWxz
ZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3BhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpKSkK
KyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1f
cmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAg
ICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwgbV9xdWly
a3MoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0cnVlKQorICAgICwgbV9pc1RyYW5zcGFyZW50KGZh
bHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2hhdmVJbml0aWFsaXplZChm
YWxzZSkKKyAgICAsIG1fd2luZG93KDApCisgICAgLCBtX2xhc3RNZXNzYWdlKDApCisgICAgLCBt
X2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkpCisgICAgLCBtX21hbnVhbFN0cmVhbSgwKQorICAg
ICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVlZHNYRW1iZWQoZmFsc2UpCit7CisgICAgaWYgKCFt
X3BsdWdpbikgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVn
aW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlID0gJm1faW5zdGFu
Y2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+bmRhdGEgPSB0aGlzOworCisgICAgbV9taW1lVHlw
ZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBkZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOworCisg
ICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisKKyAgICBtX21vZGUg
PSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwgOiBOUF9FTUJFRDsKKworICAgIHJlc2l6ZShzaXpl
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5p
dGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7
CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVn
aW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAgICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdp
blN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVk
LCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAg
IGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXco
KTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250
YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsKKyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURH
RVQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5V
TEwpOworI2Vsc2UKKyAgICBtX3dpZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2Nv
bnRhaW5lcl9hZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1f
d2lkZ2V0KTsKKyAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworI2VuZGlmCisgICAgZ3RrX3dp
ZGdldF9zaG93IChtX3dpZGdldCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQor
ICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QqIHdzID0gZ19uZXcwKE5QU2V0V2luZG93Q2Fs
bGJhY2tTdHJ1Y3QsIDEpOworCisgICAgd3MtPnR5cGUgPSAwOworCisgICAgaWYgKG1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hESVNQTEFZKG1fd2lk
Z2V0LT53aW5kb3cpOworICAgICAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKGdk
a19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpZGdldC0+d2luZG93KSkpOwor
ICAgICAgICB3cy0+ZGVwdGggPSBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbChHREtfRFJBV0FCTEUo
bV93aWRnZXQtPndpbmRvdykpLT5kZXB0aDsKKyAgICAgICAgd3MtPmNvbG9ybWFwID0gR0RLX0NP
TE9STUFQX1hDT0xPUk1BUChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19EUkFXQUJMRSht
X3dpZGdldC0+d2luZG93KSkpOworICAgICAgICBtX3dpbmRvdyA9IEdES19XSU5ET1dfWFdJTkRP
VyhtX3dpZGdldC0+d2luZG93KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3cy0+ZGlzcGxheSA9
IEdUS19YVEJJTihtX3dpZGdldCktPnh0ZGlzcGxheTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdU
S19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0dmlzdWFsOworICAgICAgICB3cy0+ZGVwdGgg
PSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGRlcHRoOworICAgICAgICB3cy0+Y29s
b3JtYXAgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dGNvbG9ybWFwOworICAgICAg
ICBtX3dpbmRvdyA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0d2luZG93OworCisgICAgICAgIFhG
bHVzaCAod3MtPmRpc3BsYXkpOworICAgIH0KKworICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IHdz
OworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorICAgIG1fd2luZG93ID0gR0RL
X1dJTkRPV19IV05EKG1fd2lkZ2V0LT53aW5kb3cpOworI2VuZGlmCisKKyAgICBpZiAobV9pc1dp
bmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsK
KyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV93aW5kb3c7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAg
ICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3F1aXJrcyAm
IFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKQorICAgICAgICBzZXROUFdpbmRv
d1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9h
ZGVkU3VjY2Vzc2Z1bGx5OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoIW1f
bWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtID0gbmV3IFBsdWdpblN0cmVhbSh0
aGlzLCBtX3BhcmVudEZyYW1lLCBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1l
bnRMb2FkZXIoKS0+cmVxdWVzdCgpLCBmYWxzZSwgMCwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCks
aW5zdGFuY2UoKSk7CisgICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsK
KworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBt
X21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3R3RrOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51
YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0t
PmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2lu
UGFja2FnZUd0azo6flBsdWdpblBhY2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRl
ZCk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFs
c2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21v
ZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQoreworICAgIGludCBw
b3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmls
ZU5hbWUgPSBtX3BhdGgucmlnaHQobV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlR3RrOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dl
dE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0
eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1l
RGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxp
dChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0g
U3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9u
cyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07
IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRl
bnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVsw
XSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRh
WzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAg
ICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURl
c2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9H
ZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9
PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVy
ID0gMDsKKyAgICBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25T
dHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAg
IG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xv
YWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEo
KSwgR19NT0RVTEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXpl
RnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVs
ZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6
ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9u
IiwgKHZvaWQqKikmbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJv
bChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworICAg
IGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmbV9OUFBf
R2V0VmFsdWUpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVEZXNj
cmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRvd24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAgICAgICBn
b3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVn
aW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNz
KTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1
cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9S
ZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFt
OworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1
bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9V
c2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7Cisg
ICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1
bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBs
dWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3Rp
ZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkg
PSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9H
ZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247
CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3Nl
ckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNz
LnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9O
UE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVu
dGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAg
IG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZy
b21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3Jl
YXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWlu
T2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VP
YmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9i
cm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHBy
b3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9w
ZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVy
dHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBO
X0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0
RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRl
OworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2lu
RnVuY3MpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBh
Ym9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0Ogor
ICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkK
K3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCht
X2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVf
Y2xvc2UgKG1fbW9kdWxlKTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2lu
UGFja2FnZUd0ayogUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VH
dGsqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOwor
CisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2Fn
ZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOwor
fQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5z
aWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisg
ICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVv
Zih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3Rr
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3Rr
JiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOwor
fQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBA
QAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7
IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFi
c3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVy
c2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
CisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoK
KyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhl
CisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4g
V2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAw
MgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwg
b3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEg
b3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBv
ZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3Nl
IGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExH
UEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVj
aXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3
aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBH
UEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBh
Ym92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
CisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BM
LgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovICAgCisKKyNpZm5kZWYg
X19HVEtfWFRCSU5fSF9fCisjZGVmaW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVkZSA8Z3Rr
L2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEv
WHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJRU5UCisj
aW5jbHVkZSAibnNjb3JlLmgiCisjaWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVmaW5lIEdU
S1hUQklOX0FQSSh0eXBlKSBOU19FWFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBHVEtYVEJJ
Tl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBHVEtY
VEJJTl9BUEkodHlwZSkgdHlwZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJu
ICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0
QmluIEd0a1h0QmluOwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFz
czsKKworI2RlZmluZSBHVEtfVFlQRV9YVEJJTiAgICAgICAgICAgICAgICAgIChndGtfeHRiaW5f
Z2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19YVEJJTihvYmopICAgICAgICAgICAgICAgICAgKEdU
S19DSEVDS19DQVNUICgob2JqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRCSU5fQ0xB
U1Moa2xhc3MpICAgICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3Rr
WHRCaW5DbGFzcykpCisjZGVmaW5lIEdUS19JU19YVEJJTihvYmopICAgICAgICAgICAgICAgKEdU
S19DSEVDS19UWVBFICgob2JqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHVEtfVFlQRV9YVEJJTikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFTUyhrbGFz
cykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVkZWYgc3Ry
dWN0IF9YdENsaWVudCBYdENsaWVudDsKKworc3RydWN0IF9YdENsaWVudCB7CisgIERpc3BsYXkJ
Knh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRn
ZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8K
KyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4dGNvbG9y
bWFwOworICBXaW5kb3cJb2xkd2luZG93OworfTsKKworc3RydWN0IF9HdGtYdEJpbgoreworICBH
dGtTb2NrZXQgICAgICBnc29ja2V0OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2luZG93Owor
ICBEaXNwbGF5ICAgICAgICp4dGRpc3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERpc3BsYXkg
Ki8KKworICBXaW5kb3cgICAgICAgICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29sa2l0IFhX
aW5kb3cgKi8KKyAgZ2ludCAgICAgICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAgd2lkdGgs
IGhlaWdodDsKKyAgWHRDbGllbnQJIHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVudCBmb3Ig
WEVtYmVkICovCit9OworICAKK3N0cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBHdGtTb2NrZXRD
bGFzcyB3aWRnZXRfY2xhc3M7Cit9OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAgIGd0a194
dGJpbl9nZXRfdHlwZSAodm9pZCk7CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0a194dGJp
bl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hUQklOX0FQ
SSh2b2lkKSAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgeSk7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6
ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0IF9YdFRN
UmVjIHsKKyAgICBYdFRyYW5zbGF0aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBwcml2YXRl
IHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAgcHJvY190
YWJsZTsgICAgICAgICAvKiBwcm9jZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAgKi8KKyAg
ICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5h
Z2VyIHN0YXRlIHB0ciAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50VGltZTsK
K30gWHRUTVJlYywgKlh0VE07ICAgCisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7CisgICAg
V2lkZ2V0ICAgICAgICAgIHNlbGY7ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB3aWRnZXQg
aXRzZWxmICAgICAgICAgICovCisgICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFzczsgICAg
ICAgLyogcG9pbnRlciB0byBXaWRnZXQncyBDbGFzc1JlYyAgICAgICovCisgICAgV2lkZ2V0ICAg
ICAgICAgIHBhcmVudDsgICAgICAgICAgICAgLyogcGFyZW50IHdpZGdldCAgICAgICAgICAgICAg
ICAgICAgICovCisgICAgWHJtTmFtZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAgICAgLyogd2lk
Z2V0IHJlc291cmNlIG5hbWUgcXVhcmtpZmllZCAgICovCisgICAgQm9vbGVhbiAgICAgICAgIGJl
aW5nX2Rlc3Ryb3llZDsgICAgLyogbWFya2VkIGZvciBkZXN0cm95ICAgICAgICAgICAgICAgICov
CisgICAgWHRDYWxsYmFja0xpc3QgIGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRvIGNhbGwg
d2hlbiB3aWRnZXQgZGVzdHJveWVkICovCisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0cmFpbnRz
OyAgICAgICAgLyogY29uc3RyYWludCByZWNvcmQgICAgICAgICAgICAgICAgICovCisgICAgUG9z
aXRpb24gICAgICAgIHgsIHk7ICAgICAgICAgICAgICAgLyogd2luZG93IHBvc2l0aW9uICAgICAg
ICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAg
Lyogd2luZG93IGRpbWVuc2lvbnMgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAg
ICAgIGJvcmRlcl93aWR0aDsgICAgICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAgICAgICAgICAg
ICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyogaXMgd2lk
Z2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIHNlbnNp
dGl2ZTsgICAgICAgICAgLyogaXMgd2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50cyovCisg
ICAgQm9vbGVhbiAgICAgICAgIGFuY2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBhbmNlc3Rv
cnMgc2Vuc2l0aXZlPyAgICAgICovCisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3RhYmxlOyAg
ICAgICAgLyogcHJpdmF0ZSB0byBldmVudCBkaXNwYXRjaGVyICAgICAgICovCisgICAgWHRUTVJl
YyAgICAgICAgIHRtOyAgICAgICAgICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdlbWVudCAg
ICAgICAgICAgICovCisgICAgWHRUcmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAgICAgLyog
YWNjZWxlcmF0b3IgdHJhbnNsYXRpb25zICAgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAg
IGJvcmRlcl9waXhlbDsgICAgICAgLyogd2luZG93IGJvcmRlciBwaXhlbCAgICAgICAgICAgICAg
ICovCisgICAgUGl4bWFwICAgICAgICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2luZG93IGJv
cmRlciBwaXhtYXAgb3IgTlVMTCAgICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xp
c3Q7ICAgICAgICAgLyogbGlzdCBvZiBwb3B1cHMgICAgICAgICAgICAgICAgICAgICovCisgICAg
Q2FyZGluYWwgICAgICAgIG51bV9wb3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9wdXBzICAg
ICAgICAgICAgICAgICAgICovCisgICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAgICAgICAg
ICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgICAgICAgICAgICAgICovCisgICAgU2NyZWVuICAg
ICAgICAgICpzY3JlZW47ICAgICAgICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAgICAgICAg
ICAgICAgICovCisgICAgQ29sb3JtYXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAgLyogY29s
b3JtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgV2luZG93ICAgICAgICAgIHdp
bmRvdzsgICAgICAgICAgICAgLyogd2luZG93IElEICAgICAgICAgICAgICAgICAgICAgICAgICov
CisgICAgQ2FyZGluYWwgICAgICAgIGRlcHRoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBs
YW5lcyBpbiB3aW5kb3cgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tncm91bmRf
cGl4ZWw7ICAgLyogd2luZG93IGJhY2tncm91bmQgcGl4ZWwgICAgICAgICAgICovCisgICAgUGl4
bWFwICAgICAgICAgIGJhY2tncm91bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91bmQgcGl4
bWFwIG9yIE5VTEwgICovCisgICAgQm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAgICAgICAgICAg
LyogaXMgd2luZG93IG1hcHBlZCBhbmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVhbiAgICAg
ICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAg
ICAgICovCit9IENvcmVQYXJ0OworCit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBD
b3JlUGFydCAgICBjb3JlOworIH0gV2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZkZWYgX19j
cGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fR1RLX1hU
QklOX0hfXyAqLworCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZp
ZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luU3RyZWFtLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNp
bmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNpbmNsdWRlIDxndGsvZ3Rrd2lkZ2V0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBuYW1lc3BhY2UgQmluZGluZ3Mg
eworICAgICAgICBjbGFzcyBJbnN0YW5jZTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIHN0cnVjdCBGcmFt
ZUxvYWRSZXF1ZXN0OworICAgIGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VF
dmVudDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7CisgICAg
Y2xhc3MgUGx1Z2luUmVxdWVzdEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW07CisgICAgY2xh
c3MgUmVzb3VyY2VFcnJvcjsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIAorICAg
IGVudW0gUGx1Z2luUXVpcmtzIHsKKyAgICAgICAgUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2Vy
QWdlbnQgPSAxIDw8IDAsCisgICAgICAgIFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0Nh
bGwgPSAxIDw8IDEsCisgICAgICAgIFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlID0gMSA8
PCAyLCAKKyAgICAgICAgUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSA9IDEg
PDwgMywKKyAgICAgICAgUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyA9
IDEgPDwgNCwKKyAgICAgICAgUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luID0gMSA8PCA1LAor
ICAgICAgICBQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZl
bHkgPSAxIDw8IDYKKyAgICB9OworCisgICAgZW51bSBQbHVnaW5TdGF0dXMgeworICAgICAgICBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKKyAgICB9
OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQsIHByaXZhdGUgUGx1
Z2luU3RyZWFtQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZpZXdHdGsoRnJh
bWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2lu
LCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld0d0aygp
OworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cGx1Z2luLmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdGFuY2U7IH0KKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0
Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2luVmlldygpOwor
CisgICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKKwor
ICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0K
KworICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsK
KyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQpOworICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUs
IHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBC
b29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNv
bnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMiB3cml0
ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgICAgIE5Q
RXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOwor
ICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBzdGF0dXMoY29u
c3QgY2hhciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0
KE5QUmVjdCopOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworICAg
ICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFt
KFBsdWdpblN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1
Z2luU3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAg
ICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9t
ZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRp
bmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAg
ICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBhcmFtZXRl
cnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcyk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHN0YXJ0
KCk7CisgICAgICAgIHZvaWQgc3RvcCgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50
UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRh
KTsKKyAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCog
bm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7Cisg
ICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAgICAgRWxlbWVu
dCogbV9lbGVtZW50OworICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAgICAgICAgYm9v
bCBtX2lzU3RhcnRlZDsKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VSTCBtX2Jhc2VV
Ukw7CisgICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVjdG9yPEludFJl
Y3Q+IG1faW52YWxpZFJlY3RzOworCisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0
R3RrKik7CisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0
az4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisKKyAg
ICAgICAgdm9pZCB1cGRhdGVXaW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVR
dWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5n
UGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAg
dm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBo
YW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAg
ICAgICBpbnQgbV9wYXJhbUNvdW50OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAg
ICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7
CisgICAgICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7
CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBX
aW5kb3c7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3RyZWFt
czsKKyAgICAgICAgVmVjdG9yPFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAg
ICAgIGludCBtX3F1aXJrczsKKyAgICAgICAgYm9vbCBtX2lzV2luZG93ZWQ7CisgICAgICAgIGJv
b2wgbV9pc1RyYW5zcGFyZW50OworICAgICAgICBib29sIG1faXNWaXNpYmxlOworICAgICAgICBi
b29sIG1faGF2ZUluaXRpYWxpemVkOworCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAgICAg
ICAgWElEIG1fd2luZG93OyAvLyBmb3Igd2luZG93ZWQgcGx1Zy1pbnMKKyNlbmRpZgorI2lmZGVm
IEdES19XSU5ET1dJTkdfV0lOMzIKKwlIV05EIG1fd2luZG93OworI2VuZGlmCisgICAgICAgIG11
dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUgY2xpcCByZWN0IHRvIGFwcGx5IHRvIGEg
d2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxlIEludFJlY3QgbV93aW5kb3dSZWN0OyAv
LyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0TWVzc2FnZTsKKwor
ICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OworICAgICAgICBSZWZQdHI8UGx1Z2luU3RyZWFt
PiBtX21hbnVhbFN0cmVhbTsKKworICAgICAgICBzdGF0aWMgUGx1Z2luVmlld0d0ayogc19jdXJy
ZW50UGx1Z2luVmlldzsKKworICAgICAgICBHdGtXaWRnZXQqIG1fd2lkZ2V0OworICAgICAgICBi
b29sIG1fbmVlZHNYRW1iZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdp
blBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVnaW5QYWNrYWdlR3RrX0gKKworI2luY2x1ZGUgPGdt
b2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisj
aW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCisjdW5kZWYg
TlBfSW5pdGlhbGl6ZUZ1bmNQdHIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVzY3JpcHRpb25zTWFwOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsK
KworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5Q
YWNrYWdlR3RrPiB7CisgICAgcHVibGljOgorICAgICAgICB+UGx1Z2luUGFja2FnZUd0aygpOwor
ICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZUd0ayogY3JlYXRlUGFja2FnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgCisgICAgICAg
IFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIFN0cmluZyBk
ZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY3JpcHRpb247IH0KKyAgICAgICAgU3Ry
aW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorCisgICAgICAgIGNv
bnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAgICAgICAgY29uc3QgTUlNRVRvRXh0ZW5z
aW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5z
aW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2luUGFja2Fn
ZUd0ayYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkKCk7
CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisKKyAgICAgICAgY29uc3Qg
TlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25zdCB7IHJldHVybiAmbV9wbHVnaW5GdW5j
czsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJ
bmZvKCk7CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVkOworICAgICAgICBpbnQgbV9sb2FkQ291
bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRpb247CisgICAgICAgIFN0cmluZyBtX3Bh
dGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOworICAgICAgICBTdHJpbmcgbV9uYW1lOwor
CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBtX21pbWVUb0Rlc2NyaXB0aW9uczsKKyAg
ICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVUb0V4dGVuc2lvbnM7CisKKyAgICAgICAg
R01vZHVsZSogbV9tb2R1bGU7CisgICAgICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZDsKKworICAg
ICAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIG1fTlBfR2V0TUlNRURlc2NyaXB0aW9u
OworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1fTlBQX1NodXRkb3duOworICAgICAgICBO
UFBfR2V0VmFsdWVQcm9jUHRyIG1fTlBQX0dldFZhbHVlOworICAgICAgICBOUFBsdWdpbkZ1bmNz
IG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0c2NhcGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsK
KyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2thZ2VHdGtIYXNoIHsKKyAgICAgICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYga2V5KSB7IHJldHVybiBr
ZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBj
b25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdl
R3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZUd0ayo+KGIpKTsgfQorICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGEs
IGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2Fn
ZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gSGFz
aCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0cy4KKy8vIEl0IHNob3VsZCBiZSBwb3Nz
aWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdlVHJhaXRzIHNwZWNpYWxpemF0aW9uLgor
bmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFp
dHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNv
cmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7CisgICAgICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6
ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrPik+OjpTaWduZWRUeXBlIEludFR5
cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsK
KyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5cGU+IFRyYWl0czsKKyAgICB9OworfQor
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUGx1
Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbnRlcm5hbC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLy8gVGhl
IHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEgb2YgdGhlIGluc3RhbmNlLC4gU29tZXRp
bWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFuY2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8v
IHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJvdW5kIHRoaXMsIGNhbGwgdGhlIGxhc3Qg
cGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8gYSBwbHVnLWluLgorLy8gQ3VycmVudGx5
LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25seSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4g
UGx1Z2luVmlld0d0azo6c3RhcnQuCisvLyBUaGlzIHNwZWNpZmljYWxseSB3b3JrcyBhcm91bmQg
Rmxhc2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxsIE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5f
VXNlcmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgorc3RhdGljIFBsdWdpblZpZXdHdGsqIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2UpCit7CisgICAgaWYgKGluc3RhbmNlICYm
IGluc3RhbmNlLT5uZGF0YSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXdH
dGsqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIHJldHVybiBQbHVnaW5WaWV3R3RrOjpjdXJyZW50
UGx1Z2luVmlldygpOworfQorCit2b2lkKiBOUE5fTWVtQWxsb2ModWludDMyIHNpemUpCit7Cisg
ICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKwordm9pZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIp
Cit7CisgICAgZnJlZShwdHIpOworfQorCit1aW50MzIgTlBOX01lbUZsdXNoKHVpbnQzMiBzaXpl
KQoreworICAgIC8vIERvIG5vdGhpbmcKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOUE5fUmVs
b2FkUGx1Z2lucyhOUEJvb2wgcmVsb2FkUGFnZXMpCit7CisgICAgcmVmcmVzaFBsdWdpbnMocmVs
b2FkUGFnZXMpOworfQorCitOUEVycm9yIE5QTl9SZXF1ZXN0UmVhZChOUFN0cmVhbSogc3RyZWFt
LCBOUEJ5dGVSYW5nZSogcmFuZ2VMaXN0KQoreworICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworfQorCitOUEVycm9yIE5QTl9HZXRVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBy
ZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwg
dGFyZ2V0LCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5j
ZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgcmV0dXJuIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdldFVSTCh1cmwsIHRhcmdldCk7Cit9CisK
K05QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUs
IG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9Qb3N0VVJMKE5QUCBpbnN0YW5jZSwgY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIq
IGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPnBvc3RVUkwodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlKTsKK30KKworTlBF
cnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBjb25zdCBj
aGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3
Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0odHlwZSwgdGFyZ2V0LCBzdHJlYW0pOwor
fQorCitpbnQzMiBOUE5fV3JpdGUoTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBpbnQz
MiBsZW4sIHZvaWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNl
KGluc3RhbmNlKS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1ZmZlcik7Cit9CisKK05QRXJyb3IgTlBO
X0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiBy
ZWFzb24pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmRl
c3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOworfQorCitjb25zdCBjaGFyKiBOUE5fVXNlckFn
ZW50KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5WaWV3R3RrKiB2aWV3ID0gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICAvLyBGSVhNRTogU29tZSBwbHVnLWlucyBj
YWxsIE5QTl9Vc2VyQWdlbnQgd2l0aCBhIG51bGwgaW5zdGFuY2UgaW4gdGhlaXIgTlBfaW5pdGlh
bGl6ZSBmdW5jdGlvbiEKKyAgICAgLy8gV2UnZCBuZWVkIGEgd2F5IHRvIGdldCBhIHVzZXIgYWdl
bnQgd2l0aG91dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQuCisgICAgIGlmICghdmlldykKKyAgICAg
ICAgIHJldHVybiAwOworIAorICAgIHJldHVybiB2aWV3LT51c2VyQWdlbnQoKTsKK30KKwordm9p
ZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zdGF0dXMobWVzc2FnZSk7Cit9CisKK3Zv
aWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5jZSwgTlBSZWN0KiBpbnZhbGlkUmVjdCkK
K3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5pbnZhbGlkYXRlUmVjdChp
bnZhbGlkUmVjdCk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3RhbmNl
LCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxpZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBO
X0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2Uo
aW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOworfQorCitOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAg
aW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZh
bHVlKTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUFBWYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3Rh
bmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKwordm9pZCogTlBO
X0dldEphdmFFbnYoKQoreworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpCit7CisgICAgLy8gVW5zdXBwb3J0
ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUo
TlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sKK30KKwordm9pZAorTlBOX1BvcFBvcHVw
c0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UpCit7Cit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
Z3RrL3hlbWJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY0IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVu
dC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFi
OnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJM
T0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBU
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5z
ZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1p
dGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUg
aXMgdGhlIFhFTUJFRCBEZWNsYXJhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIg
b2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBv
cnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMp
IDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BM
IiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
Mi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0
aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRo
ZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAq
IGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRo
ZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0
aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisvKiBYRU1C
RUQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgWEVNQkVEX0VNQkVEREVEX05PVElGWSAgICAgICAgICAw
CisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUgICAgICAgICAgMQorI2RlZmluZSBYRU1C
RURfV0lORE9XX0RFQUNUSVZBVEUgICAgICAgIDIKKyNkZWZpbmUgWEVNQkVEX1JFUVVFU1RfRk9D
VVMgICAgICAgICAgICAzCisjZGVmaW5lIFhFTUJFRF9GT0NVU19JTiAgICAgICAgICAgICAgICAg
NAorI2RlZmluZSBYRU1CRURfRk9DVVNfT1VUICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWEVN
QkVEX0ZPQ1VTX05FWFQgICAgICAgICAgICAgICA2CisjZGVmaW5lIFhFTUJFRF9GT0NVU19QUkVW
ICAgICAgICAgICAgICAgNworI2RlZmluZSBYRU1CRURfR1JBQl9LRVkgICAgICAgICAgICAgICAg
IDgKKyNkZWZpbmUgWEVNQkVEX1VOR1JBQl9LRVkgICAgICAgICAgICAgICA5CisjZGVmaW5lIFhF
TUJFRF9NT0RBTElUWV9PTiAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZ
X09GRiAgICAgICAgICAgICAxMQorCisvKiBOb24gc3RhbmRhcmQgbWVzc2FnZXMqLworI2RlZmlu
ZSBYRU1CRURfR1RLX0dSQUJfS0VZICAgICAgICAgICAgIDEwOCAKKyNkZWZpbmUgWEVNQkVEX0dU
S19VTkdSQUJfS0VZICAgICAgICAgICAxMDkKKworLyogRGV0YWlscyBmb3IgIFhFTUJFRF9GT0NV
U19JTjogKi8KKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQgICAgICAgICAgICAwCisjZGVm
aW5lIFhFTUJFRF9GT0NVU19GSVJTVCAgICAgICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfRk9D
VVNfTEFTVCAgICAgICAgICAgICAgIDIKKworLyogRmxhZ3MgZm9yIF9YRU1CRURfSU5GTyAqLwor
I2RlZmluZSBYRU1CRURfTUFQUEVEICAgICAgICAgICAgICAgICAgICgxIDw8IDApCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9y
YSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIKKworI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGx1Z2luRGF0YWJhc2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVn
aW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2VHdGsqIHBsdWdpbnMgPSAwOworICAg
IAorICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBwbHVnaW5zID0gbmV3IFBsdWdpbkRhdGFi
YXNlR3RrOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVnaW5QYXRocyhQbHVnaW5EYXRhYmFzZUd0
azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAgICBwbHVnaW5zLT5yZWZyZXNoKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2VHdGs6
OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9wbHVnaW5Q
YXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgpOworfQorCitib29sIFBsdWdpbkRhdGFi
YXNlR3RrOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVnaW5TZXQgbmV3UGx1Z2luczsKKworICAg
IGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IHNl
dCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdldFBsdWdpbnNJblBhdGhzKCk7CisKKyAg
ICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5
cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1
Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdp
bnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5l
d1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgcGx1Z2luc1Rv
VW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAg
ICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7
CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAgICAgICAgZW5kID0gcGx1Z2luc1RvVW5s
b2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBw
bHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9w
bHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8vIEFkZCBuZXcgcGx1Z2lucworICAgICAg
ICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0g
IXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5ld1BsdWdpbnM7CisgICAgICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMuYWRkKCppdCk7CisKKyAgICAgICAg
cGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAv
LyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAg
ICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9
ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdpbigpOyBtYXBfaXQgIT0gbWFwX2VuZDsg
KyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0
LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdl
ZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1
Z2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsqPiByZXN1bHQ7CisK
KyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKCgqaXQpLmdldCgpKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BsdWdpblNldCBQbHVnaW5EYXRhYmFzZUd0azo6Z2V0
UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBh
IGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFt
ZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAgICBQbHVnaW5QYWNrYWdlR3RrKiBvbGRX
TVBQbHVnaW4gPSAwOworICAgIFBsdWdpblBhY2thZ2VHdGsqIG5ld1dNUFBsdWdpbiA9IDA7CisK
KyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5l
bmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1
Z2luUGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEdEaXIqIGRpciA9
IGdfZGlyX29wZW4oKGl0LT51dGY4KCkpLmRhdGEoKSwgMCwgTlVMTCk7CisgICAgICAgIGlmIChk
aXIpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICB3aGlsZSAo
KG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ19z
dHJfaGFzX3N1ZmZpeChuYW1lLCAiLiIgR19NT0RVTEVfU1VGRklYKSkgeworICAgICAgICAgICAg
ICAgICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5k
YXRhKCksIG5hbWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlR3Rr
KiBwbHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShmaWxlbmFt
ZSwgdGltZShOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7CisgICAg
ICAgICAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGlyKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+
IHBhcnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAg
VmVjdG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1
bnNpZ25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmlu
Zy5sZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2
ZXJzaW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9u
U3RyaW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2
ZXJzaW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50
KCk7CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAg
IHN0YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30K
KworLy8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lv
bkIKK3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4m
IHZlcnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49
IHZlcnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlm
ICh2ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lv
bnMgYXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50
LCBqdXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmlu
Zz4gUGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7CisgICAgVmVjdG9y
PFN0cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciogaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1l
KGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVMTCk7CisgICAgcGF0
aHMuYXBwZW5kKGhvbWVQYXRoKTsKKyAgICBnX2ZyZWUoaG9tZVBhdGgpOworCisgICAgY29uc3Qg
Z2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7CisgICAgaWYgKG1v
elBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3BsaXQobW96UGF0
aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVnaW5QYXRoc1tpXTsg
aSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ldKTsKKworICAgICAg
ICBnX2ZyZWUocGx1Z2luUGF0aHMpOworICAgIH0KKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbG9j
YWwvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvbW96
aWxsYS9wbHVnaW5zIik7CisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2luRGF0
YWJhc2VHdGs6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVyZWRNSU1F
VHlwZXMuY29udGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5E
YXRhYmFzZUd0azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sK
KyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkpKQor
ICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAwOwor
fQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0KS0+
bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5zaW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCku
YmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVn
aW5EYXRhYmFzZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsKKworICAg
IGlmICghbWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1JTUVU
eXBlKG1pbWVUeXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJpbmcg
cGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1YnN0
cmluZyhwYXRoLnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4gPSBwbHVn
aW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYgbm8gcGx1
Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBlIAorICAg
ICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisgICAgcmV0
dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNyZWF0
ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBs
dWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8gcGx1Z2lu
IHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcgYWdh
aW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9IGZpbmRQ
bHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2luVmll
d0d0ayhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9n
dGsyeHRiaW4uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NDEgQEAKKy8qIC0qLSBNb2RlOiBD
Kys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDog
MiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8q
ICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BM
IDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1Ympl
Y3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxp
Y2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJh
c2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAq
CisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRh
dGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUg
aXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhl
IEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFs
IERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToK
KyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxH
UEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUg
TEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdp
c2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5k
ZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFs
bG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5n
IHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisg
KiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJ
ZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50
IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9m
IGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBF
TkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRnZXQg
YWxsb3dzIGZvciBYdCB0b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RLIGFw
cGxpY2F0aW9uLiAgCisgKi8KKworI3VuZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKworI2lu
Y2x1ZGUgInhlbWJlZC5oIgorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGd0ay9n
dGttYWluLmg+CisjaW5jbHVkZSA8Z3RrL2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rr
eC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxz
eXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFhsaWIvWHQgc3R1
ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2lu
Y2x1ZGUgPFgxMS9TaGVsbC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRl
IDxYMTEvU3RyaW5nRGVmcy5oPgorCisvKiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBkZWJ1
Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2lkZ2V0CisgICBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rp
b24gKi8KKyN1bmRlZiBERUJVR19YVEJJTgorCisjZGVmaW5lIFhUQklOX01BWF9FVkVOVFMgMzAK
Kworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5D
bGFzcyAqa2xhc3MpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5faW5pdCAgICAg
ICAoR3RrWHRCaW4gICAgICAqeHRiaW4pOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRi
aW5fcmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAg
ICAgICAgIGd0a194dGJpbl91bnJlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwor
c3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fZGVzdHJveSAgICAoR3RrT2JqZWN0ICAg
ICAgKm9iamVjdCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9zaHV0ZG93biAg
IChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKKworLyogWHQgYXdhcmUgWEVtYmVkICovCitzdGF0
aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWws
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xv
cm1hcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRkZXB0
aCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAqIHh0
Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBl
bWJlZGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWln
aHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICk7
CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRjbGll
bnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0
Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdldCB4
dHBsdWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxlciAo
V2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaGFu
ZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu
dCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAgKFdp
ZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFh0UG9pbnRlciB1c2VyX2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7Citz
dGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVl
cm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSk7IAorc3RhdGljIHZvaWQgICAgICAgeHRfcmVtb3Zl
X2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKK3N0YXRpYyB2
b2lkICAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldGFpbCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGExLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUpOyAgCitzdGF0aWMgaW50ICAgICAgICBlcnJv
cl9oYW5kbGVyICAgICAgIChEaXNwbGF5ICpkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhFcnJvckV2ZW50ICplcnJvcik7CisvKiBGb3IgZXJyb3IgdHJh
cCBvZiBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOworc3Rh
dGljIGludCAgICAgICAgdW50cmFwX2Vycm9yKHZvaWQpOworc3RhdGljIGludCAgICAgICAgKCpv
bGRfZXJyb3JfaGFuZGxlcikgKERpc3BsYXkgKiwgWEVycm9yRXZlbnQgKik7CitzdGF0aWMgaW50
ICAgICAgICB0cmFwcGVkX2Vycm9yX2NvZGUgPSAwOworCitzdGF0aWMgR3RrV2lkZ2V0Q2xhc3Mg
KnBhcmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlzcGxh
eSA9IE5VTEw7CitzdGF0aWMgU3RyaW5nICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7CitzdGF0
aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOworc3RhdGljIGdp
bnQgICAgICAgICAgICAgbnVtX3dpZGdldHMgPSAwOworCitzdGF0aWMgR1BvbGxGRCAgICAgICAg
ICB4dF9ldmVudF9wb2xsX2ZkOworc3RhdGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGluZ190
aW1lcl9pZCA9IDA7CitzdGF0aWMgZ3VpbnQgICAgICAgICAgICB0YWcgPSAwOworCitzdGF0aWMg
Z2Jvb2xlYW4KK3h0X2V2ZW50X3ByZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAqdGltZW91dCkKK3sgICAKKyAgaW50IG1hc2s7CisKKyAg
R0RLX1RIUkVBRFNfRU5URVIoKTsKKyAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgIEdE
S19USFJFQURTX0xFQVZFKCk7CisKKyAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2NoZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCit7Cisg
IEdES19USFJFQURTX0VOVEVSICgpOworCisgIGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMg
JiBHX0lPX0lOKSB7CisgICAgaW50IG1hc2s7CisgICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxh
eSk7CisgICAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgICAgcmV0dXJuIChnYm9vbGVhbiltYXNr
OworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgIHJldHVybiBGQUxTRTsKK30gICAK
Kworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9kaXNwYXRjaCAoR1NvdXJjZSogIHNvdXJjZV9k
YXRhLAorICAgICAgICAgICAgICAgICAgICBHU291cmNlRnVuYyBjYWxsX2JhY2ssCisgICAgICAg
ICAgICAgICAgICAgIGdwb2ludGVyICB1c2VyX2RhdGEpCit7CisgIFhFdmVudCBldmVudDsKKyAg
WHRBcHBDb250ZXh0IGFjOworICBpbnQgaSA9IDA7CisKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxp
Y2F0aW9uQ29udGV4dCh4dGRpc3BsYXkpOworCisgIEdES19USFJFQURTX0VOVEVSICgpOworCisg
IC8qIFByb2Nlc3Mgb25seSByZWFsIFggdHJhZmZpYyBoZXJlLiAgV2Ugb25seSBsb29rIGZvciBk
YXRhIG9uIHRoZQorICAgKiBwaXBlLCBsaW1pdCBpdCB0byBYVEJJTl9NQVhfRVZFTlRTIGFuZCBv
bmx5IGNhbGwKKyAgICogWHRBcHBQcm9jZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxsIGxvb2sgZm9y
IFggZXZlbnRzLiAgVGhlcmUncyBubworICAgKiB0aW1lciBwcm9jZXNzaW5nIGhlcmUgc2luY2Ug
d2UgYWxyZWFkeSBoYXZlIGEgdGltZXIgY2FsbGJhY2sgdGhhdAorICAgKiBkb2VzIGl0LiAgKi8K
KyAgZm9yIChpPTA7IGkgPCBYVEJJTl9NQVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0ZGlzcGxheSk7
IGkrKykgeworICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNWEV2ZW50KTsKKyAgfQorCisg
IEdES19USFJFQURTX0xFQVZFICgpOworCisgIHJldHVybiBUUlVFOyAgCit9CisKK3N0YXRpYyBH
U291cmNlRnVuY3MgeHRfZXZlbnRfZnVuY3MgPSB7CisgIHh0X2V2ZW50X3ByZXBhcmUsCisgIHh0
X2V2ZW50X2NoZWNrLAorICB4dF9ldmVudF9kaXNwYXRjaCwKKyAgZ19mcmVlLAorICAoR1NvdXJj
ZUZ1bmMpTlVMTCwKKyAgKEdTb3VyY2VEdW1teU1hcnNoYWwpTlVMTAorfTsKKworc3RhdGljIGdi
b29sZWFuCit4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNrKGdwb2ludGVyIHVzZXJfZGF0
YSkKK3sKKyAgRGlzcGxheSAqIGRpc3BsYXk7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGV2
ZW50c1RvUHJvY2VzcyA9IDIwOworCisgIGRpc3BsYXkgPSAoRGlzcGxheSAqKXVzZXJfZGF0YTsK
KyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dChkaXNwbGF5KTsKKworICAvKiBX
ZSBuZWVkIHRvIHByb2Nlc3MgbWFueSBYdCBldmVudHMgaGVyZS4gSWYgd2UganVzdCBwcm9jZXNz
CisgICAgIG9uZSBldmVudCB3ZSBtaWdodCBzdGFydmUgb25lIG9yIG1vcmUgWHQgY29uc3VtZXJz
LiBPbiB0aGUgb3RoZXIgaGFuZAorICAgICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdob2xlIGFwcCBp
ZiBYdCBldmVudHMgY29tZSBwb3VyaW5nIGluLiBTbyBwcm9jZXNzCisgICAgIHVwIHRvIDIwIFh0
IGV2ZW50cyByaWdodCBub3cgYW5kIHNhdmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBUaGlzIGlzIGEg
aGFjaywKKyAgICAgYnV0IGl0IG91Z2h0YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91bGQgaGF2ZSBv
dXQgb2YgcHJvY2VzcyBwbHVnaW5zLgorICAqLworICB3aGlsZSAoZXZlbnRzVG9Qcm9jZXNzLS0g
JiYgWHRBcHBQZW5kaW5nKGFjKSkKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTUFsbCk7
CisgIHJldHVybiBUUlVFOworfQorCitHdGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQp
Cit7CisgIHN0YXRpYyBHdGtUeXBlIHh0YmluX3R5cGUgPSAwOworCisgIGlmICgheHRiaW5fdHlw
ZSkgeworICAgICAgc3RhdGljIGNvbnN0IEd0a1R5cGVJbmZvIHh0YmluX2luZm8gPQorICAgICAg
eworICAgICAgICAiR3RrWHRCaW4iLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluKSwKKyAgICAg
ICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNzKSwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIGd0
a194dGJpbl9jbGFzc19pbml0LAorICAgICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMpIGd0a194dGJp
bl9pbml0LAorICAgICAgICAvKiByZXNlcnZlZF8xICovIE5VTEwsCisgICAgICAgIC8qIHJlc2Vy
dmVkXzIgKi8gTlVMTCwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwKKyAgICAgIH07
CisgICAgICB4dGJpbl90eXBlID0gZ3RrX3R5cGVfdW5pcXVlIChHVEtfVFlQRV9TT0NLRVQsICZ4
dGJpbl9pbmZvKTsKKyAgICB9CisgIHJldHVybiB4dGJpbl90eXBlOworfQorCitzdGF0aWMgdm9p
ZAorZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKQoreworICBHdGtX
aWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNzOworICBHdGtPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNz
OworCisgIHBhcmVudF9jbGFzcyA9IGd0a190eXBlX2NsYXNzIChHVEtfVFlQRV9TT0NLRVQpOwor
CisgIHdpZGdldF9jbGFzcyA9IEdUS19XSURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAgd2lkZ2V0X2Ns
YXNzLT5yZWFsaXplID0gZ3RrX3h0YmluX3JlYWxpemU7CisgIHdpZGdldF9jbGFzcy0+dW5yZWFs
aXplID0gZ3RrX3h0YmluX3VucmVhbGl6ZTsKKworICBvYmplY3RfY2xhc3MgPSBHVEtfT0JKRUNU
X0NMQVNTIChrbGFzcyk7CisgIG9iamVjdF9jbGFzcy0+ZGVzdHJveSA9IGd0a194dGJpbl9kZXN0
cm95OworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJpbikK
K3sKKyAgeHRiaW4tPnh0ZGlzcGxheSA9IE5VTEw7CisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0g
TlVMTDsKKyAgeHRiaW4tPnh0d2luZG93ID0gMDsKKyAgeHRiaW4tPnggPSAwOworICB4dGJpbi0+
eSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3
aWRnZXQpCit7CisgIEd0a1h0QmluICAgICAqeHRiaW47CisgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgMjAwLCAyMDAgfTsKKyAgZ2ludCAgeCwgeSwgdywgaCwgZDsgLyogZ2Vv
bWV0cnkgb2Ygd2luZG93ICovCisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194
dGJpbl9yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lT
X1hUQklOICh3aWRnZXQpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKworICAv
KiBjYWN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBiZWZvcmUgcmVhbGl6ZSAqLworICBnZGtfd2luZG93
X2dldF9nZW9tZXRyeSh4dGJpbi0+cGFyZW50X3dpbmRvdywgJngsICZ5LCAmdywgJmgsICZkKTsK
KyAgYWxsb2NhdGlvbi53aWR0aCA9IHc7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaDsKKyAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworI2lmZGVmIERF
QlVHX1hUQklOCisgIHByaW50ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4iLCB4
LCB5LCB3LCBoKTsKKyNlbmRpZgorCisgIHh0YmluLT53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlv
bi53aWR0aDsKKyAgeHRiaW4tPmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisK
KyAgLyogdXNlIEd0a1NvY2tldCdzIHJlYWxpemUgKi8KKyAgKCpHVEtfV0lER0VUX0NMQVNTKHBh
cmVudF9jbGFzcyktPnJlYWxpemUpKHdpZGdldCk7CisKKyAgLyogY3JlYXRlIHRoZSBYdCBjbGll
bnQgd2lkZ2V0ICovCisgIHh0X2NsaWVudF9jcmVhdGUoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAg
ICAgICBndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHh0YmluKSksIAorICAgICAgIHh0Ymlu
LT5oZWlnaHQsIAorICAgICAgIHh0YmluLT53aWR0aCk7CisgIHh0YmluLT54dHdpbmRvdyA9IFh0
V2luZG93KHh0YmluLT54dGNsaWVudC5jaGlsZF93aWRnZXQpOworCisgIGdka19mbHVzaCgpOwor
CisgIC8qIG5vdyB0aGF0IHdlIGhhdmUgY3JlYXRlZCB0aGUgeHQgY2xpZW50LCBhZGQgaXQgdG8g
dGhlIHNvY2tldC4gKi8KKyAgZ3RrX3NvY2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3aWRnZXQpLCB4
dGJpbi0+eHR3aW5kb3cpOworfQorCisKKworR3RrV2lkZ2V0KgorZ3RrX3h0YmluX25ldyAoR2Rr
V2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKiBmKQoreworICBHdGtYdEJpbiAqeHRiaW47
CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKworICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBOVUxM
KTsKKyAgeHRiaW4gPSBndGtfdHlwZV9uZXcgKEdUS19UWVBFX1hUQklOKTsKKworICBpZiAoIXh0
YmluKQorICAgIHJldHVybiAoR3RrV2lkZ2V0KilOVUxMOworCisgIGlmIChmKQorICAgIGZhbGxi
YWNrID0gZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCisgIHh0YmluLT5w
YXJlbnRfd2luZG93ID0gcGFyZW50X3dpbmRvdzsKKworICB4dF9jbGllbnRfaW5pdCgmKHh0Ymlu
LT54dGNsaWVudCksIAorICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKGdka19yZ2JfZ2V0X3Zpc3Vh
bCgpKSwKKyAgICAgIEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRfY29sb3JtYXAo
KSksCisgICAgICBnZGtfcmdiX2dldF92aXN1YWwoKS0+ZGVwdGgpOworCisgIGlmICgheHRiaW4t
Pnh0Y2xpZW50Lnh0ZGlzcGxheSkgeworICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3
ZSBjYW4ndCBnbyBhbnkgZnVydGhlci4KKyAgICAgKiAgQmFpbCBvdXQuCisgICAgICovCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5
KCkgcmV0dXJuZWQgTlVMTC5cbiIpOworI2VuZGlmCisgICAgZ19mcmVlICh4dGJpbik7CisgICAg
cmV0dXJuIChHdGtXaWRnZXQgKilOVUxMOworICB9CisKKyAgLyogSWYgdGhpcyBpcyB0aGUgZmly
c3QgcnVubmluZyB3aWRnZXQsIGhvb2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCisgICAgIG1haW5s
b29wICovCisgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisgICAgaW50ICAgICAgICAgICBjbnVt
YmVyOworICAgIC8qCisgICAgICogaG9vayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIgZXZl
bnQgbG9vcC4KKyAgICAgKi8KKworICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2lu
aXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKyAgICBHU291cmNlKiBncyA9IGdfc291cmNl
X25ldygmeHRfZXZlbnRfZnVuY3MsIHNpemVvZihHU291cmNlKSk7CisgICAgICBpZiAoIWdzKSB7
CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgCisgICAgZ19zb3VyY2Vfc2V0X3By
aW9yaXR5KGdzLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FuX3Jl
Y3Vyc2UoZ3MsIFRSVUUpOworICAgIHRhZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWluQ29u
dGV4dCopTlVMTCk7CisjaWZkZWYgVk1TCisgICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVtYmVy
KHh0ZGlzcGxheSk7CisjZWxzZQorICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlz
cGxheSk7CisjZW5kaWYKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKKyAgICB4
dF9ldmVudF9wb2xsX2ZkLmV2ZW50cyA9IEdfSU9fSU47IAorICAgIHh0X2V2ZW50X3BvbGxfZmQu
cmV2ZW50cyA9IDA7ICAgIC8qIGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCisKKyAgICBnX21h
aW5fY29udGV4dF9hZGRfcG9sbCAoKEdNYWluQ29udGV4dCopTlVMTCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ4dF9ldmVudF9wb2xsX2ZkLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19QUklPUklUWV9MT1cpOworICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQgd2Ug
Y2FuIHBvbGwgYW5kIHByb2Nlc3MgWHQgdGltZXJzICovCisgICAgeHRfcG9sbGluZ190aW1lcl9p
ZCA9CisgICAgICBndGtfdGltZW91dF9hZGQoMjUsCisgICAgICAgICAgICAgICAgICAgICAgKEd0
a0Z1bmN0aW9uKXh0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgeHRkaXNwbGF5KTsKKyAgfQorCisgIC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50
ICovCisgIG51bV93aWRnZXRzKys7CisKKyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5ICovCisgIHh0
YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5OworICBndGtfd2lkZ2V0
X3NldF9wYXJlbnRfd2luZG93KEdUS19XSURHRVQoeHRiaW4pLCBwYXJlbnRfd2luZG93KTsKKyAg
Z2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhKHh0YmluLT5wYXJlbnRfd2luZG93LCAmdXNlcl9kYXRh
KTsKKyAgaWYgKHVzZXJfZGF0YSkKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHVzZXJfZGF0YSksIEdUS19XSURHRVQoeHRiaW4pKTsKKworICByZXR1cm4gR1RLX1dJREdFVCAo
eHRiaW4pOworfQorCit2b2lkCitndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRi
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgIHkpCit7CisgIHh0YmluLT54ID0geDsKKyAgeHRiaW4tPnkg
PSB5OworCisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh4dGJpbikpCisgICAgZ2RrX3dpbmRv
d19tb3ZlIChHVEtfV0lER0VUICh4dGJpbiktPndpbmRvdywgeCwgeSk7Cit9CisKK3ZvaWQKK2d0
a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KQorewor
ICBBcmcgYXJnc1syXTsKKyAgR3RrWHRCaW4gKnh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOwor
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmlu
dGYoImd0a194dGJpbl9yZXNpemUgJXAgJWQgJWRcbiIsICh2b2lkICopd2lkZ2V0LCB3aWR0aCwg
aGVpZ2h0KTsKKyNlbmRpZgorCisgIHh0YmluLT5oZWlnaHQgPSBoZWlnaHQ7CisgIHh0YmluLT53
aWR0aCAgPSB3aWR0aDsKKworICAvLyBBdm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4gWHRTZXRWYWx1
ZXMKKyAgaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9MCkgeworICAgIGhlaWdodCA9IDE7Cisg
ICAgd2lkdGggPSAxOworICB9CisgIFh0U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdodCwgaGVpZ2h0
KTsKKyAgWHRTZXRBcmcoYXJnc1sxXSwgWHROd2lkdGgsICB3aWR0aCk7CisgIFh0U2V0VmFsdWVz
KHh0YmluLT54dGNsaWVudC50b3Bfd2lkZ2V0LCBhcmdzLCAyKTsKKworICAvKiB3ZSBuZWVkIHRv
IHNlbmQgYSBzaXplIGFsbG9jYXRlIHNvIHRoZSBzb2NrZXQga25vd3MgYWJvdXQgdGhlCisgICAg
IHNpemUgY2hhbmdlcyAqLworICBhbGxvY2F0aW9uLnggPSB4dGJpbi0+eDsKKyAgYWxsb2NhdGlv
bi55ID0geHRiaW4tPnk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB4dGJpbi0+d2lkdGg7CisgIGFs
bG9jYXRpb24uaGVpZ2h0ID0geHRiaW4tPmhlaWdodDsKKworICBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5f
dW5yZWFsaXplIChHdGtXaWRnZXQgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBH
dGtXaWRnZXQgKndpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0
YmluX3VucmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIC8qIGd0a19vYmplY3RfZGVzdHJveSgp
IHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmY291bnQgb24gb2JqZWN0CisgICAqLworICB4dGJpbiA9
IEdUS19YVEJJTihvYmplY3QpOworICB3aWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CisKKyAg
R1RLX1dJREdFVF9VTlNFVF9GTEFHUyAod2lkZ2V0LCBHVEtfVklTSUJMRSk7CisgIGlmIChHVEtf
V0lER0VUX1JFQUxJWkVEICh3aWRnZXQpKSB7CisgICAgeHRfY2xpZW50X3VucmVhbGl6ZSgmKHh0
YmluLT54dGNsaWVudCkpOworICB9CisKKyAgKCpHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRfY2xh
c3MpLT51bnJlYWxpemUpKHdpZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fZGVz
dHJveSAoR3RrT2JqZWN0ICpvYmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKworI2lmZGVm
IERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7CisjZW5kaWYK
KworICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2Zh
aWwgKEdUS19JU19YVEJJTiAob2JqZWN0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKG9iamVj
dCk7CisKKyAgaWYoeHRiaW4tPnh0d2luZG93KSB7CisgICAgLyogcmVtb3ZlIHRoZSBldmVudCBo
YW5kbGVyICovCisgICAgeHRfY2xpZW50X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGllbnQpKTsKKyAg
ICB4dGJpbi0+eHR3aW5kb3cgPSAwOworCisgICAgbnVtX3dpZGdldHMtLTsgLyogcmVkdWNlIG91
ciB1c2FnZSBjb3VudCAqLworCisgICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBydW5uaW5nIHdp
ZGdldCwgcmVtb3ZlIHRoZSBYdCBkaXNwbGF5CisgICAgICAgY29ubmVjdGlvbiBmcm9tIHRoZSBt
YWlubG9vcCAqLworICAgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICAgIHByaW50ZigicmVtb3ZpbmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFp
biBsb29wXG4iKTsKKyNlbmRpZgorICAgICAgZ19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwoKEdN
YWluQ29udGV4dCopTlVMTCwgJnh0X2V2ZW50X3BvbGxfZmQpOworICAgICAgZ19zb3VyY2VfcmVt
b3ZlKHRhZyk7CisKKyAgICAgIGd0a190aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5nX3RpbWVyX2lk
KTsKKyAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworICAgIH0KKyAgfQorCisgIEdUS19P
QkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGVzdHJveShvYmplY3QpOworfQorCisvKgorKiBG
b2xsb3dpbmcgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50
IHNpZGUKKyovCisKKy8qIEluaXRpYWwgWHQgcGx1Z2luICovCitzdGF0aWMgdm9pZAoreHRfY2xp
ZW50X2luaXQoIFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgIFZpc3VhbCAq
eHR2aXN1YWwsIAorICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCisgICAgICAg
ICAgICAgICAgaW50IHh0ZGVwdGgpCit7CisgIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7Cisg
IGNoYXIgICAgICAgICAqbUFyZ3ZbMV07CisgIGludCAgICAgICAgICAgbUFyZ2MgPSAwOworCisg
IC8qCisgICAqIEluaXRpYWxpemUgWHQgc3R1ZmYKKyAgICovCisgIHh0Y2xpZW50LT50b3Bfd2lk
Z2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50
LT54dGRpc3BsYXkgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOworICB4
dGNsaWVudC0+eHRjb2xvcm1hcCA9IDA7CisgIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKKworICBp
ZiAoIXh0X2lzX2luaXRpYWxpemVkKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYo
InN0YXJ0aW5nIHVwIFh0IHN0dWZmXG4iKTsKKyNlbmRpZgorICAgIFh0VG9vbGtpdEluaXRpYWxp
emUoKTsKKyAgICBhcHBfY29udGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7Cisg
ICAgaWYgKGZhbGxiYWNrKQorICAgICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBfY29u
dGV4dCwgZmFsbGJhY2spOworCisgICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBfY29u
dGV4dCwgZ2RrX2dldF9kaXNwbGF5KCksIE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJXcmFwcGVyIiwgTlVMTCwgMCwgJm1BcmdjLCBtQXJndik7CisgICAgaWYgKHh0ZGlzcGxh
eSkKKyAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gVFJVRTsKKyAgfQorICB4dGNsaWVudC0+eHRk
aXNwbGF5ICA9IHh0ZGlzcGxheTsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3VhbDsK
KyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSB4dGNvbG9ybWFwOworICB4dGNsaWVudC0+eHRkZXB0
aCAgICA9IHh0ZGVwdGg7Cit9CisKKy8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMKKyog
ICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAs
IAorICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAKKyAgICAgICAgICAgICAg
ICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKK3sKKyAg
aW50ICAgICAgICAgICBuOworICBBcmcgICAgICAgICAgIGFyZ3NbNl07CisgIFdpZGdldCAgICAg
ICAgY2hpbGRfd2lkZ2V0OworICBXaWRnZXQgICAgICAgIHRvcF93aWRnZXQ7CisKKyNpZmRlZiBE
RUJVR19YVEJJTgorICBwcmludGYoInh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOworI2VuZGlmCisg
IHRvcF93aWRnZXQgPSBYdEFwcENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVyIiwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRD
bGFzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRpc3Bs
YXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgeHRjbGll
bnQtPnRvcF93aWRnZXQgPSB0b3Bfd2lkZ2V0OworCisgIC8qIHNldCBzaXplIG9mIFh0IHdpbmRv
dyAqLworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7
bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRT
ZXRWYWx1ZXModG9wX3dpZGdldCwgYXJncywgbik7CisKKyAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNy
ZWF0ZVdpZGdldCgiZm9ybSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvc2l0ZVdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b3Bfd2lkZ2V0LCBOVUxMKTsKKworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVp
Z2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lk
dGgpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54dHZp
c3VhbCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVudC0+
eHRkZXB0aCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVu
dC0+eHRjb2xvcm1hcCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRo
LCAwKTsgbisrOworICBYdFNldFZhbHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOworCisgIFhT
eW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKKyAgeHRjbGllbnQtPm9sZHdpbmRvdyA9
IHRvcF93aWRnZXQtPmNvcmUud2luZG93OworICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVt
YmVkZGVyaWQ7CisKKyAgLyogdGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGluaXRp
YWxpemluZyB0aGUgd2lkZ2V0ICovCisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYK
KyAgWHRSZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAg
ICAgICAgICAgZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOwor
I2Vsc2UKKyAgX1h0UmVnaXN0ZXJXaW5kb3coIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAg
ICAgICB0b3Bfd2lkZ2V0KTsKKyNlbmRpZgorICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0
KTsKKworICAvKiBsaXN0ZW4gdG8gYWxsIFh0IGV2ZW50cyAqLworICBYU2VsZWN0SW5wdXQoeHRj
bGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwg
CisgICAgICAgICAgICAgICAweDBGRkZGRik7CisgIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRf
d2lkZ2V0LCAwKTsKKworICBYdE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7CisgIHh0Y2xpZW50
LT5jaGlsZF93aWRnZXQgPSBjaGlsZF93aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBldmVudCBoYW5k
bGVyICovCisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwKKyAgICAgICAgICAgICAg
ICAgICAgMHgwRkZGRkYgJiB+UmVzaXplUmVkaXJlY3RNYXNrLAorICAgICAgICAgICAgICAgICAg
ICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9l
dmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdl
dCwgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25S
ZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAg
ICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAg
ICAgICAgICAgICAgeHRjbGllbnQpOworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxT
RSk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQqIHh0
Y2xpZW50ICkKK3sKKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFVucmVn
aXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAg
ICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cpOworI2Vsc2UKKyAgX1h0VW5yZWdp
c3RlcldpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCisgICAgICAgICAg
ICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQpOworI2VuZGlmCisKKyAgLyogZmx1c2gg
dGhlIHF1ZXVlIGJlZm9yZSB3ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUud2lu
ZG93CisgICAgIG9yIHdlIGNhbiBnZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdvbmUg
Ki8KKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRmFsc2UpOworCisgIHh0Y2xpZW50LT50
b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7CisgIFh0VW5yZWFs
aXplV2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgICAgICAg
ICAgICAKK3h0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKK3sKKyAgaWYo
eHRjbGllbnQtPnRvcF93aWRnZXQpIHsKKyAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNsaWVu
dC0+Y2hpbGRfd2lkZ2V0LCAweDBGRkZGRiwgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7Cisg
ICAgWHREZXN0cm95V2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4dGNsaWVudC0+
dG9wX3dpZGdldCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2Ns
aWVudF9zZXRfaW5mbyAoV2lkZ2V0IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAg
dW5zaWduZWQgbG9uZyBidWZmZXJbMl07CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9t
KFh0RGlzcGxheSh4dHBsdWcpLCAiX1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKKworICBidWZmZXJb
MV0gPSAwOyAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCisgIGJ1ZmZlclsx
XSA9IGZsYWdzOworCisgIFhDaGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0V2lu
ZG93KHh0cGx1ZyksCisgICAgICAgICAgICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAzMiwK
KyAgICAgICAgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsCisgICAgICAgICAgICAgICAgICAg
KHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDIpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50
X2hhbmRsZV94ZW1iZWRfbWVzc2FnZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBY
RXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRf
ZGF0YTsKKyAgc3dpdGNoIChldmVudC0+eGNsaWVudC5kYXRhLmxbMV0pCisgIHsKKyAgY2FzZSBY
RU1CRURfRU1CRURERURfTk9USUZZOgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1df
QUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQg
WEVNQkVEX1dJTkRPV19BQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBY
RU1CRURfV0lORE9XX0RFQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYo
Ilh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFXG4iKTsKKyNlbmRpZgorICAg
IGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PTjoKKyNpZmRlZiBERUJVR19YVEJJTgor
ICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOworI2VuZGlm
CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09GRjoKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsK
KyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9GT0NVU19JTjoKKyAgY2FzZSBYRU1C
RURfRk9DVVNfT1VUOgorICAgIHsKKyAgICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgICBtZW1zZXQo
JnhldmVudCwgMCwgc2l6ZW9mKHhldmVudCkpOworCisgICAgICBpZihldmVudC0+eGNsaWVudC5k
YXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VTX0lOKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAg
ICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBpblxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2
ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJbjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2lmZGVm
IERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsK
KyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c091dDsKKyAgICAgIH0K
KworICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxkX3dp
ZGdldCk7CisgICAgICB4ZXZlbnQueGZvY3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVnLT5j
aGlsZF93aWRnZXQpOworICAgICAgWFNlbmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93
aWRnZXQpLCAKKyAgICAgICAgICAgICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCisgICAgICAg
ICAgICAgICAgIEZhbHNlLCBOb0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgJnhldmVudCAp
OworICAgICAgWFN5bmMoIFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNlKTsK
KyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0gLyogRW5kIG9m
IFhFbWJlZCBNZXNzYWdlICovCit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRf
ZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpl
dmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7Cisg
IAorICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ2xpZW50TWVzc2FnZToK
KyAgICAgIC8qIEhhbmRsZSB4ZW1iZWQgbWVzc2FnZSAqLworICAgICAgaWYgKGV2ZW50LT54Y2xp
ZW50Lm1lc3NhZ2VfdHlwZT09CisgICAgICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERpc3Bs
YXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Il9YRU1CRUQiLCBGYWxzZSkpIHsKKyAgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVz
c2FnZSh3LCBjbGllbnRfZGF0YSwgZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAg
Y2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwcGluZ05vdGlm
eToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgWEVNQkVEX01BUFBFRCk7CisgICAgICBi
cmVhazsKKyAgICBjYXNlIFVubWFwTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3
LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgIHNlbmRfeGVtYmVk
X21lc3NhZ2UgKCB4dHBsdWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JF
UVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091
dDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisjaWZkZWYgREVCVUdfWFRCSU4K
KyAgICAgIHByaW50ZigiS2V5IFByZXNzIEdvdCFcbiIpOworI2VuZGlmCisgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50
LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAorc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGll
bnQgICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRldGFpbCwgCisgICAgICAgICAgICAgICAg
ICAgICBsb25nICAgICAgZGF0YTEsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBk
YXRhMiwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIHRpbWUpICAgCit7CisgIFhF
dmVudCB4ZXZlbnQ7IAorICBXaW5kb3cgdz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldCk7
CisgIERpc3BsYXkqIGRweT14dGNsaWVudC0+eHRkaXNwbGF5OworICBpbnQgZXJyb3Jjb2RlOwor
CisgIG1lbXNldCgmeGV2ZW50LDAsc2l6ZW9mKHhldmVudCkpOworICB4ZXZlbnQueGNsaWVudC53
aW5kb3cgPSB3OworICB4ZXZlbnQueGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgeGV2
ZW50LnhjbGllbnQubWVzc2FnZV90eXBlID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixGYWxz
ZSk7CisgIHhldmVudC54Y2xpZW50LmZvcm1hdCA9IDMyOworICB4ZXZlbnQueGNsaWVudC5kYXRh
LmxbMF0gPSB0aW1lOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAg
eGV2ZW50LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0
YS5sWzNdID0gZGF0YTE7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOworCisg
IHRyYXBfZXJyb3JzICgpOworICBYU2VuZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50TWFz
aywgJnhldmVudCk7CisgIFhTeW5jIChkcHksRmFsc2UpOworCisgIGlmKChlcnJvcmNvZGUgPSB1
bnRyYXBfZXJyb3IoKSkpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic2VuZF94
ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkhISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRpZgorICB9Cit9
CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgCitlcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRpc3Bs
YXksIFhFcnJvckV2ZW50ICplcnJvcikKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0gZXJyb3It
PmVycm9yX2NvZGU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAKK3Ry
YXBfZXJyb3JzKHZvaWQpCit7CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9MDsKKyAgb2xkX2Vycm9y
X2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKGVycm9yX2hhbmRsZXIpOworfQorCitzdGF0aWMg
aW50ICAgICAgICAgCit1bnRyYXBfZXJyb3Iodm9pZCkKK3sKKyAgWFNldEVycm9ySGFuZGxlcihv
bGRfZXJyb3JfaGFuZGxlcik7CisgIGlmKHRyYXBwZWRfZXJyb3JfY29kZSkgeworI2lmZGVmIERF
QlVHX1hUQklOCisgICAgcHJpbnRmKCJHZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxuIiwgdHJhcHBl
ZF9lcnJvcl9jb2RlKTsKKyNlbmRpZgorICB9CisgIHJldHVybiB0cmFwcGVkX2Vycm9yX2NvZGU7
Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIoIFdp
ZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBEaXNwbGF5
ICpkcHkgPSBYdERpc3BsYXkodyk7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsK
KyAgV2luZG93IHdpbiA9IFh0V2luZG93KHcpOworCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAg
ICB7CisgICAgY2FzZSBDcmVhdGVOb3RpZnk6CisgICAgICBpZihldmVudC0+eGNyZWF0ZXdpbmRv
dy5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0
KCBkcHksIGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkK
KyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZShjaGlsZCwgdXNlcl9kYXRhKTsK
KyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKyAgICAgIHh0
X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdywgdXNlcl9kYXRhKTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBpZihldmVudC0+eHJlcGFyZW50LnBhcmVudCA9
PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IHBhcmVudCAqLworICAgICAgICBXaWRn
ZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldChkcHksIGV2ZW50LT54cmVwYXJlbnQud2luZG93KTsK
KyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVl
KCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXZlbnQtPnhyZXBh
cmVudC53aW5kb3cgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBjaGlsZCAqLwor
ICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG9sZCBwYXJlbnQgKi8K
KyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyNpZiAwCisg
ICAgICBYU2V0SW5wdXRGb2N1cyhkcHksIFh0V2luZG93KHh0Y2xpZW50LT5jaGlsZF93aWRnZXQp
LCBSZXZlcnRUb1BhcmVudCwgZXZlbnQtPnhidXR0b24udGltZSk7CisjZW5kaWYKKyAgICAgIHNl
bmRfeGVtYmVkX21lc3NhZ2UgKCB4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBl
KSAqLworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywg
WHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgbG9u
ZyBldmVudG1hc2s7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgaW50IGVy
cm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWEdldFdpbmRvd0F0dHJpYnV0ZXMoWHRE
aXNwbGF5KHcpLCBYdFdpbmRvdyh3KSwgJmF0dHIpOworICBldmVudG1hc2sgPSBhdHRyLnlvdXJf
ZXZlbnRfbWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzazsK
KyAgWFNlbGVjdElucHV0KFh0RGlzcGxheSh3KSwKKyAgICAgICAgICAgICAgIFh0V2luZG93KHcp
LCAKKyAgICAgICAgICAgICAgIGV2ZW50bWFzayk7CisKKyAgWHRBZGRFdmVudEhhbmRsZXIodywg
CisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxl
YXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAg
ICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAg
ICAgICAgICAgeHRjbGllbnQpOworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQK
K3h0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkK
K3sKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRSZW1vdmVFdmVu
dEhhbmRsZXIodywgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCBU
UlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2Zv
Y3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEpOworCisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0
aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0
UG9pbnRlciB1c2VyX2RhdGEpIAoreworICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJvb3Qp
OworICBXaW5kb3cgKmNoaWxkcmVuOworICBXaW5kb3cgcm9vdCwgcGFyZW50OworICBEaXNwbGF5
ICpkcHkgPSBYdERpc3BsYXkodHJlZXJvb3QpOworICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxkcmVu
OworCisgIC8qIGVuc3VyZSB3ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KKyAgeHRfcmVt
b3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRfYWRkX2ZvY3Vz
X2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMoKTsKKyAgaWYo
IVhRdWVyeVRyZWUoZHB5LCB3aW4sICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hpbGRy
ZW4pKSB7CisgICAgdW50cmFwX2Vycm9yKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodW50
cmFwX2Vycm9yKCkpIAorICAgIHJldHVybjsKKworICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsgKytp
KSB7CisgICAgV2lkZ2V0IGNoaWxkID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVuW2ld
KTsKKyAgICBpZiAoY2hpbGQpIAorICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNo
aWxkLCB1c2VyX2RhdGEpOworICB9CisgIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7CisKKyAgcmV0
dXJuOworfQorCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVH
dGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNy
ZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpIAoreyAKKyAgICBQbHVn
aW5EYXRhYmFzZUd0ayAqZGIgPSBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygp
OworICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICBQbHVnaW5QYWNr
YWdlR3RrKiBwYWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKKworICAgIGluZm8tPm5hbWUgPSBw
YWNrYWdlLT5uYW1lKCk7CisgICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7Cisg
ICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICBjb25zdCBNSU1F
VG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rl
c2NyaXB0aW9ucygpOworICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgIGZvciAoTUlNRVRvRGVzY3JpcHRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1l
Q2xhc3NJbmZvOworICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAgIAor
ICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0OworICAgICAgICBtaW1lLT5kZXNjID0gaXQt
PnNlY29uZDsKKyAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsKKworICAgICAgICBWZWN0b3I8
U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1l
LT50eXBlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRl
bnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAg
ICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAgICBtaW1lLT5zdWZmaXhl
cyArPSBleHRlbnNpb25zW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGluZm87
Cit9CisKK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAorewor
ICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVnaW5z
KCkuc2l6ZSgpOworfQorCitTdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kIG9uIEdUSysKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgUGx1
Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgbWlt
ZVR5cGUpIAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lu
cygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVzaFBs
dWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCit7CisgICAgUGx1Z2luRGF0YWJhc2VHdGs6Omlu
c3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworCisgICAgaWYgKHJlbG9hZE9wZW5QYWdlcykg
eworICAgICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKKyAgICB9Cit9CisKK30KSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ucGZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyOTc0MikKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ucGZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsMTQgKzE3MiwyMSBAQCB0eXBl
ZGVmIHN0cnVjdCBfTlBQbHVnaW5GdW5jcyB7CiAgICAgTlBQX1NldFZhbHVlUHJvY1B0ciBzZXR2
YWx1ZTsKIH0gTlBQbHVnaW5GdW5jczsKIAorI2lmIGRlZmluZWQoWFBfV0lOKQogdHlwZWRlZiBF
WFBPUlRFRF9DQUxMQkFDSyhOUEVycm9yLCBOUF9Jbml0aWFsaXplRnVuY1B0cikoTlBOZXRzY2Fw
ZUZ1bmNzKik7CiB0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0dldEVudHJ5
UG9pbnRzRnVuY1B0cikoTlBQbHVnaW5GdW5jcyopOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKFhQ
X01BQ09TWCkKIHR5cGVkZWYgdm9pZCAgICAoKkJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZl
cmVuY2VzRnVuY1B0cikodm9pZCk7CiB0eXBlZGVmIE5QRXJyb3IgKCpNYWluRnVuY1B0cikoTlBO
ZXRzY2FwZUZ1bmNzKiwgTlBQbHVnaW5GdW5jcyosIE5QUF9TaHV0ZG93blByb2NQdHIqKTsKICNl
bmRpZgogCisjaWYgZGVmaW5lZChYUF9VTklYKQordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhO
UEVycm9yLCBOUF9Jbml0aWFsaXplRnVuY1B0cikoTlBOZXRzY2FwZUZ1bmNzKiwgTlBQbHVnaW5G
dW5jcyopOwordHlwZWRlZiBFWFBPUlRFRF9DQUxMQkFDSyhjaGFyKiwgTlBfR2V0TUlNRURlc2Ny
aXB0aW9uRnVuY1B0cikodm9pZCk7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gMjk3NDIpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDcgQEAgREVQRU5EUEFUSCArPSBlZGl0aW5nL3F0IGhp
c3RvcnkvcXQgbG9hZAogZ3RrLXBvcnQgewogICAgIHgxMTpwbHVnaW5zIHsKICAgICAgICAgREVG
SU5FUyArPSBYUF9VTklYCisgICAgICAgIExJQlMgKz0gLWxYdAogICAgIH0KIAogICAgIElOQ0xV
REVQQVRIICs9IFwKQEAgLTE3Miw2ICsxNzMsNyBAQCBndGstcG9ydCB7CiAgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMveGJtIFwKICAgICBsb2FkZXIvZ3RrIFwKICAgICBwYWdlL2d0ayBcCisg
ICAgcGx1Z2lucy9ndGsgXAogICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQgXAogICAg
IC4uL1dlYktpdC9ndGsvV2ViVmlldwogfQpAQCAtODYyLDEzICs4NjQsMzUgQEAgU09VUkNFUyAr
PSBcCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuY3BwCiAKIGd0ay1wb3J0IHsKKyAgIXBsdWdpbnMg
eworICAgIERFRklORVMgKz0gR1RLX0RJU0FCTEVfUExVR0lOUz0xCisgIH0KKyAgSEVBREVSUyAr
PSBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaCBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgK
KwogICBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAgXAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdJbkluZm9T
dG9yZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9ucGFwaS5jcHAKKworICB4MTE6cGx1
Z2lucyB7CisgICAgSEVBREVSUyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBc
CisgICAgICBwbHVnaW5zL2d0ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICBw
bHVnaW5zL2d0ay9ndGsyeHRiaW4uYworICB9CiB9CiAKIHF0LXBvcnQgewpAQCAtOTgyLDYgKzEw
MDYsNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4u
L1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXApJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFt
ZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJl
dmlzaW9uIDI5NzQyKQorKysgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDE0ICsyOCwxOSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKKwogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlld0d0ay5oIgogCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAicnVudGlt
ZV9yb290LmgiCisjaW5jbHVkZSAicnVudGltZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JX
aWRnZXQoV2lkZ2V0KikKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZTo6Y3JlYXRlU2Ny
aXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHdpZGdldCktPmJp
bmRpbmdJbnN0YW5jZSgpOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAyOTc0MikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwog
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZO
UmV2aXNpb247CiBteSAkb3NYVmVyc2lvbjsKIG15ICRpc1F0OwogbXkgJGlzR3RrOworbXkgJGVu
YWJsZUd0a1BsdWdpbnM7CiBteSAkaXNXeDsKIAogIyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBv
cnQKQEAgLTQ4NCw2ICs0ODYsMjMgQEAgc3ViIGRldGVybWluZUlzR3RrKCkKICAgICB9CiB9CiAK
K3N1YiBlbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5z
KCk7CisgICAgcmV0dXJuICRlbmFibGVHdGtQbHVnaW5zOworfQorCitzdWIgZGV0ZXJtaW5lRW5h
YmxlR3RrUGx1Z2lucygpCit7CisgICAgcmV0dXJuIGlmIGRlZmluZWQoJGVuYWJsZUd0a1BsdWdp
bnMpOworCisgICAgaWYgKGNoZWNrQXJndigiLS1kaXNhYmxlLWd0ay1wbHVnaW5zIikpIHsKKyAg
ICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRlbmFi
bGVHdGtQbHVnaW5zID0gMTsKKyAgICB9Cit9CisKIHN1YiBpc1d4KCkKIHsKICAgICBkZXRlcm1p
bmVJc1d4KCk7CkBAIC03OTksNiArODE4LDcgQEAgc3ViIGJ1aWxkUU1ha2VHdGtQcm9qZWN0KCQk
KQogCiAgICAgbXkgQGJ1aWxkQXJncyA9ICgiQ09ORklHKz1ndGstcG9ydCIpOwogICAgIHB1c2gg
QGJ1aWxkQXJncywgIkNPTkZJRy09cXQiOworICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRys9
cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lucygpOwogCiAgICAgcmV0dXJuIGJ1aWxkUU1ha2VQ
cm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18691</attachid>
            <date>2008-01-25 09:24:02 -0800</date>
            <delta_ts>2008-02-01 10:10:47 -0800</delta_ts>
            <desc>Updated patch against r29792</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>137250</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTc5MikKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0
Q29yZSBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMgXAog
CS1JJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL3d0ZiBcCkBAIC0xOTEsNiArMTkyLDcgQEAgZW5k
aWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBfVU5JWAord2Via2l0
Z3RrX2xkZmxhZ3MgKz0gLWxYdAogZW5kaWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJbmRleDogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJ
KHJldmlzaW9uIDI5NzkyKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC00OSwxMiArNTAsMTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgog
I2VuZGlmCiAKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6
RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAg
ICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYwLDkgKzE2NiwzMCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1p
dHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0g
ICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7
Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBp
ZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAg
ICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIg
d2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0
cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOworICAgICAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3Nl
bikKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGlu
Z05hbWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZy
YW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywg
dXNlckNob3Nlbik7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXIt
PmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7
CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAg
bV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAg
ICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjU4LDggKzI4NSwxMyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFt
ZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCog
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0
ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRh
YmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFt
ZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1p
bWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZp
ZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzAxLDgg
KzMzMyw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5X
aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9wbHVn
aW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAK
IFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtMzI0LDYgKzM1NSw5
IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAoTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBl
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsK
KwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUo
dHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAKQEAg
LTYyMywxNCArNjU3LDE0IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlN
RVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1l
KCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMg
b3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5n
IGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVs
bCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5j
b2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisg
ICAgICAgIGNvbW1pdHRlZExvYWQoZG9jdW1lbnRMb2FkZXIsIDAsIDApOworICAgIGVsc2Ugewor
ICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVn
aW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwor
ICAgIH0KIH0KIAogCkBAIC03NTMsOSArNzg3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoVW5hYmxlVG8KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0
IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50
RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAg
ICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuaAkocmV2aXNpb24gMjk3OTIpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMyLDYgKzMzLDggQEAKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4MCw2
ICsxODMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBt
X2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAg
ICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsKKworICAgICAgICAvLyBQbHVnaW4g
dmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisgICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXdHdGsq
IG1fcGx1Z2luVmlldzsKKyAgICAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwog
ICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAJKHJldmlz
aW9uIDI5NzkyKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDk1LDYgKzEwOTUsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfdXBkYXRlX3NldHRpCiAgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZVBs
dWdpbnMpOwogICAgIHNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUocmVzaXphYmxl
VGV4dEFyZWFzKTsKICAgICBzZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbih1c2Vy
U3R5bGVzaGVldFVyaSk7CisgICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUpOwog
CiAgICAgZ19mcmVlKGRlZmF1bHRFbmNvZGluZyk7CiAgICAgZ19mcmVlKGN1cnNpdmVGb250RmFt
aWx5KTsKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjk3OTIpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHdlYmtpdGd0a19jcHBmbGFncyAr
PSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAJLUkk
KHNyY2RpcikvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BhZ2Uv
Z3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsdWdpbnMvZ3RrIFwKIAktSSQoc3JjZGlyKS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYlZp
ZXcKIApAQCAtODQ2LDYgKzg0NywxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKKwlXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05MDUsNiArOTExLDExIEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlXZWJDb3Jl
L3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJraXRndGtfc291cmNl
cyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworZW5kaWYKKwogd2Via2l0
Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjk3OTIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5
KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6
Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnSW5JbmZv
U3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6UGx1Z0lu
SW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVn
aW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCi0KIENvbG9yIFdlYkNvcmU6OmZvY3Vz
UmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1
c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlzaW9uIDI5NzkyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDUgKzMwNiwyMiBAQCB2
b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vCiAKIHZvaWQgV2lkZ2V0Ojpn
ZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICBJbnRQb2ludCBsb2Mg
PSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxv
Y2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6ZSB0byBi
ZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3ogPSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpOworICAg
IHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
biA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsKKyAgICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIH0K
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRh
YmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiU3RyaW5n
SGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBj
bGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xh
c3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgdHlw
ZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwgUGx1Z2luUGFja2FnZUd0a0hh
c2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0YWJhc2VHdGsgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQbHVnaW5z
KCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVu
dEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7
CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdl
R3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVk
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1
Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBs
dWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0g
cGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisK
KyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdp
bkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNr
YWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pOworCisg
ICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgor
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5o
IgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3By
b3h5LmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBs
LmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2lu
Y2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8
Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNsdWRl
IDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3VzaW5n
IEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNPYmpl
Y3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5nIHN0
ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVzdEd0
ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0
KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisg
ICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVibGlj
OgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZyYW1l
TG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsK
KyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0dXJl
Cit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwuc3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlw
dDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0
dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmco
dXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoMTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1
Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5U
IDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3
KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4o
cGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0Owor
ICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0
ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxv
Y2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2lu
ZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1t
X3dpbmRvd1JlY3QueSgpKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlw
UmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4K
KyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBv
dXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVy
IGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBt
X2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFy
ZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkpOworCisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAg
aWYgKG1fd2lkZ2V0KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpZGdl
dCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAg
IGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlv
bihHVEtfWFRCSU4obV93aWRnZXQpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgp
KTsKKyAgICAgICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53
aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9
CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPnByaW50aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9
IGZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3Qp
OworCisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5k
b3coKTsKKyAgICBzZXROUFdpbmRvd1JlY3QocmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdl
ZCgpOworICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZv
Y3VzKCkKK3sKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgV2lkZ2V0OjpzaG93
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUg
PSBmYWxzZTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogbnVsbFBsdWdpbkltYWdlOworICAg
IGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VS
ZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55KCksIG51bGxQbHVnaW5J
bWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7CisKKyAgICBpbnQgeE9m
ZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7
CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0
LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFnZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsK
KworICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0
KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3Np
bmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQs
IHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8
fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5Q
RXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICov
CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21l
dHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAg
ICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXpl
IGFuIFhFdmVudCBhbmQgcGFzcyBpdCBvbiAqLworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0g
PSBldmVudC0+a2V5Q29kZSgpOyAgICAKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRv
d25FdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAg
bnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1
cEV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBF
dmVudC5sUGFyYW0gPSAweDgwMDA7CisgICAgfQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworfQorCisvL2V4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkK
K3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCB0
byBwYXNzIG9uICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBh
cmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQt
PnBhZ2VZKCkpKTsKKworICAgIC8qCisgICAgbnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAu
eCgpLCBwLnkoKSk7CisgICAgbnBFdmVudC53UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5j
dHJsS2V5KCkpCisgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYg
KGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsK
KworICAgIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2
ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVudCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9
PSBtb3VzZW92ZXJFdmVudCkgeworICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZF
OworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAo
ZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAg
ICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAg
ICAgICAgICAgICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0
b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZl
bnQgPSBXTV9MQlVUVE9ORE9XTjsKKworICAgICAgICAgICAgICAgIC8vIEZvY3VzIHRoZSBwbHVn
aW4KKyAgICAgICAgICAgICAgICBtX3BhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2Vk
Tm9kZShtX2VsZW1lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50
KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNl
IDA6CisgICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBu
cEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVU
VE9OVVA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgcmV0dXJuOworICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
CisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFm
dGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRIYW5kbGVyLmNwcAorICAgIC8vIGFuZCBzaW5jZSB3
ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGlnbm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJl
IHRvIHByZXZlbnQgdGhhdC4KKyAgICAvL2lnbm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAg
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQorewor
ICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tl
eWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJl
bnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0
aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAu
eSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2lu
ZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0Lmxl
ZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93
LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
Ym90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5z
dGFuY2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKwor
Ym9vbCBQbHVnaW5WaWV3R3RrOjpzdGFydCgpCit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVCht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAg
IFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJy
ID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5k
YXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1f
cGFyYW1WYWx1ZXMsIE5VTEwpOworICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50
UGx1Z2luVmlldygwKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFt
X3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJl
cXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9h
ZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3R3RrOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9
IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9y
IGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJl
YW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5n
ZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAg
bV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5w
ZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXco
UGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0g
cGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBs
dWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0
aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3Ry
aW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHko
cmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJh
eSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0
YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNV
bmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2lu
UmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpz
U3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAg
aWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVl
KTsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hv
dWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAg
ICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRl
ZFN0cmluZygpLnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZh
U2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFp
bnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBz
dXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZy
YW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVz
dC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAg
ICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0
byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFt
ZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAg
SlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQo
anNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5m
cmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5n
IHJlc3VsdFN0cmluZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2Ny
aXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJl
ZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgcGFyZW50
RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3Qo
KSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBs
dWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgICAgIG1f
c3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVh
bShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cmVx
dWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VS
VCh0aW1lciA9PSAmbV9yZXF1ZXN0VGltZXIpOworICAgIEFTU0VSVChtX3JlcXVlc3RzLnNpemUo
KSA+IDApOworCisgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG1fcmVxdWVzdHNbMF07
CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcg
cmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bwor
ICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVs
ZXRlZC4KKyAgICBpZiAobV9yZXF1ZXN0cy5zaXplKCkgPiAwKQorICAgICAgICBtX3JlcXVlc3RU
aW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayog
cmVxdWVzdCkKK3sKKyAgICBtX3JlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3JlcXVl
c3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bG9h
ZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3Rp
ZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7CisKKyAgICBL
VVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAg
CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1VS
TDsKKworICAgIFN0cmluZyB0YXJnZXQgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOwor
CisgICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBs
b25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxheWVk
IHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCisg
ICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpICE9IG1fcGFy
ZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmCisgICAgICAgICh0
YXJnZXQuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0g
bV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisg
ICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7Cisg
ICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBtX3BhcmVudEZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBpZiAoIXNldHRpbmdzIHx8ICFz
ZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBSZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemls
bGEgZG9lcy4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAg
ICB9IGVsc2UgaWYgKHRhcmdldC5pc051bGwoKSAmJiBtX21vZGUgPT0gTlBfRlVMTCkgeworICAg
ICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYSBKYXZhU2NyaXB0IHJlcXVlc3QgZnJvbSBhIHN0YW5k
YWxvbmUgcGx1Zy1pbiB0aGF0IGlzIHNlbGYtdGFyZ2V0dGVkCisgICAgICAgICAgICAvLyBiZWNh
dXNlIHRoaXMgY2FuIGNhdXNlIHRoZSB1c2VyIHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBibGFuayBw
YWdlICgzNDI0MDM5KS4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSB8fCAhdGFyZ2V0
LmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgJiYgIXRhcmdldC5p
c051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVu
dEZyYW1lKSB7CisgICAgICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxv
dyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBw
bHVnLWluLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAg
IH0KKworICAgICAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbmV3IFBsdWdpblJlcXVl
c3RHdGsoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Cisg
ICAgICAgIHNjaGVkdWxlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBQ
bHVnaW5TdHJlYW0qIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFt
ZSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2VuZE5vdGlmaWNhdGlvbiwg
bm90aWZ5RGF0YSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcXVpcmtz
KTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisgICAgICAgIHN0cmVhbS0+c3Rh
cnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK3N0YXRpYyBL
VVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxT
dHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSBEZXByZWNhdGVkU3Ry
aW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAgIC8vIFN0cmlwIHJldHVy
biBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVybFN0
cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0
cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMTm90aWZ5KGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Qu
c2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1cm4g
bG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQ
bHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQp
Cit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJhbWVM
b2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKwor
ICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZm
ZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclswXSA9PSAnXG4n
OworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZm
ZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAgICAgIC8vIFN1
cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYgKGJ5dGVzW2ld
ID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gaSAr
IDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAyIENS
TEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAgIGlmIChieXRl
c1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBpICs9
IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAv
LyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgorICAg
ICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ld
ID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgorICAgICAgICAg
ICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsK
K30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5dGVz
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNwZWNp
ZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0dW5h
dGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4gV29yc2UgeWV0
LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9mIGJvdGggKGUu
Zy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAgLy8gdG8gYmUg
bW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgorICAgIC8vIENS
LgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5kIG9y
IGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGlu
ZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVz
ICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAgICAvLyAoQ1JM
RiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAgIC8vIG5leHQg
cmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6ZVJG
QzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYm9vbCBjYXBp
dGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICBVQ2hhciBj
OworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2EnICYm
IG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBwZXIobmFtZVtpXSk7CisgICAg
ICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5h
bWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1lW2ldID09
ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVj
dG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBi
eXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0cmluZyBs
YXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8gTG9vcCBv
dmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBh
bnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxl
bmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAgaW50
IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1vdmUgYnl0
ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBm
aW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9PSAn
XHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBz
aW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAgbGVu
Z3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQorICAg
ICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5l
ID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMg
aGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAgICAgICAg
ICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAg
ICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7
CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJv
bUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxk
cy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAgICAg
ICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsg
KmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAg
ICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sb24gPT0g
ZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5k
IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFt
ZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAg
ICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24r
KzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29s
b24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wp
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEo
Y29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9
IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1
ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7
CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0
bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFs
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRl
ckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5kbGVQb3N0KGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYs
IGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29s
IGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAg
IHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFt
ZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcg
ZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1ZiwgbGVuKTsKKworICAg
ICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAgICAgICAgIGZp
bGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgICAgIC8vIEdldCBmaWxlIGlu
Zm8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAo
R0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkp
CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJWE1FIC0g
cmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisgICAgICAgIEZJTEUqIGZpbGVIYW5kbGUg
PSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7CisgICAgICAgIAorICAgICAg
ICBpZiAoZmlsZUhhbmRsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVf
Tk9UX0ZPVU5EOworCisgICAgICAgIC8vYnVmZmVyLnJlc2l6ZSgpOworCisgICAgICAgIGludCBi
eXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAg
ICAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICBjb25z
dCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3REYXRhTGVuZ3Ro
ID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFkZXJzKSB7CisgICAgICAg
IGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIHBvc3REYXRh
Kys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZl
cik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVm
ZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgaGVh
ZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2NhdGlvbik7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2Nh
dGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0
IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCisgICAgICAgICAgICAg
ICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJl
bW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUg
dGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAgICAgICAgICAgU3RyaW5n
IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0aCIpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwgKGludClkYXRh
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50LUxl
bmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAg
ICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAgIGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJGaWVsZHMpOwor
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAgcmV0dXJu
IGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Cit9
CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmws
IGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wg
ZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRh
cmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUpOworfQorCitOUEVy
cm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAg
Ly8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEg
TlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJs
LCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJyb3Ig
UGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFy
Z2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8v
IFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK2ludDMy
IFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCog
YnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAg
ICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6ZGVzdHJveVN0cmVhbShO
UFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgUGx1Z2luU3RyZWFtKiBi
cm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7
CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3RyZWFtKHN0cmVh
bSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0Vf
RVJST1I7CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95U3RyZWFtKHJlYXNv
bik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitjb25zdCBjaGFyKiBQbHVnaW5W
aWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5R
dWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFn
ZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2Vu
dCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAg
ICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0
YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJl
bnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4
dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1
ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJp
YWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAgIGNhc2UgTlBO
Vnh0QXBwQ29udGV4dDogeworICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAg
ICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRl
eHQgKEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlm
CisKKyAgICAgICAgY2FzZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAg
ICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAg
ICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0
c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICAg
ICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7CisjZWxzZQorICAgICAgICAgICAg
KigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZXaW5k
b3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9
IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAg
X05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9p
ZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmpl
Y3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAg
ICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAg
IGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAg
ICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5F
bGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsK
KworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZvaWQqIHcgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQor
ICAgICAgICAgICAgKigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChj
b250YWluaW5nV2luZG93KCkpLT53aW5kb3cpOworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lO
R19XSU4zMgorICAgICAgICAgICAgKigoSFdORCAqKXcpID0gR0RLX1dJTkRPV0lOR19IV05EKEdU
S19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93KTsKKyNlbmRpZgorICAgICAgICAg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJy
b3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2lu
V2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3Bh
cmVudEJvb2w6CisgICAgICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0
KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9w
LCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7Cisg
ICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpp
bnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBpZiAobV9pc1dpbmRvd2Vk
KQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRSAtIEludmFsaWRhdGUgdGhlIHJlZ2lv
bgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25Cb3gocmVnaW9uLCAmcikgPT0gMCkgewor
ICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXaWRn
ZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICovCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
Zm9yY2VSZWRyYXcoKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193aWRn
ZXRfcXVldWVfZHJhdyhtX3dpZGdldCk7CisgICAgZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3F1
ZXVlX2RyYXcoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpKTsKK30KKworS0pTOjpCaW5k
aW5nczo6SW5zdGFuY2UqIFBsdWdpblZpZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAg
TlBPYmplY3QqIG9iamVjdCA9IDA7CisKKyAgICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJv
ciBucEVycjsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAg
ICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9v
dCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+
c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIEtKUzo6QmluZGluZ3M6Okluc3Rh
bmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9y
TGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmpl
Y3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAgIF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOwor
CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitQbHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0
aygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOwor
CisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBm
cmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIGlmICgh
bV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNfV0lER0VUKG1fd2lkZ2V0KSkKKyAgICAgICAgZ3RrX3dp
ZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsKKyAgICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lk
Z2V0KE5VTEwpOworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQ
bHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3F1aXJrcy5jb250YWlucyhQ
bHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgp
OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFt
KiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKKwor
ICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpk
ZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBUaGUgZmxh
c2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBh
IG1vemlsbGEgdXNlciBhZ2VudAorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1z
aG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1dhbnRz
TW96aWxsYVVzZXJBZ2VudCk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90
dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxl
V01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAgICB9CisKKyAgICAvLyBUaGUgV01QIHBsdWdpbiBz
ZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVw
ZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2lu
IHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1fcGx1Z2luLT5uYW1lKCkuY29udGFp
bnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVk
aWEiKSkgeworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2lu
ZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQg
YWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCisg
ICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgorICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSk7CisgICAgfQor
CisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9T
ZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxs
IFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBp
ZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBh
IHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBh
IHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBm
dW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5Q
T2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBv
YmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29l
cyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAvLyBQcmV2ZW50IHRoZSBS
ZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVz
aW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0gImF1ZGlvL3gt
cG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0Rv
bnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1O
YW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKworICAg
IG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVv
ZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICBpZiAoKG1fcXVpcmtzLmNv
bnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pKSAmJiBlcXVhbEln
bm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVV
VEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFtQ291
bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFyYW1D
b3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisKK1Bs
dWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBs
b2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQoZWxl
bWVudCkKKyAgICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBtX2lzU3RhcnRl
ZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3BhcmVudEZyYW1l
LT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVS
TCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAg
ICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJl
ZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwg
bV9pc1dpbmRvd2VkKHRydWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBt
X2lzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwg
bV93aW5kb3coMCkKKyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1fbG9hZE1hbnVhbGx5
KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCisgICAgLCBtX3dpZGdldCgw
KQorICAgICwgbV9uZWVkc1hFbWJlZChmYWxzZSkKK3sKKyAgICBpZiAoIW1fcGx1Z2luKSB7Cisg
ICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1faW5zdGFuY2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKKyAg
ICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CisKKyAgICBtX21pbWVUeXBlID0gbWltZVR5cGUu
dXRmOCgpOworICAgIGRldGVybWluZVF1aXJrcyhtaW1lVHlwZSk7CisKKyAgICBzZXRQYXJhbWV0
ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKworICAgIG1fbW9kZSA9IG1fbG9hZE1hbnVh
bGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVEOworCisgICAgcmVzaXplKHNpemUpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICgh
bV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5v
dEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdp
bi0+bG9hZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFzdGFydCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVt
YmVkKTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaWYgKG1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgbV93aWRnZXQgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBn
dGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3co
KSwgbV93aWRnZXQpOworICAgICAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3dpZGdldCA9IGd0a194dGJpbl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZy
YW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgTlVMTCk7CisjZWxzZQor
ICAgIG1fd2lkZ2V0ID0gZ2RrX3NvY2tldF9uZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZCht
X3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSwgbV93aWRnZXQpOworICAg
IHNldEd0a1dpZGdldChtX3dpZGdldCk7CisjZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1f
d2lkZ2V0KTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgTlBTZXRXaW5k
b3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCwg
MSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAg
ICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkobV93aWRnZXQtPndpbmRvdyk7
CisgICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX2RyYXdhYmxlX2dl
dF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2lkZ2V0LT53aW5kb3cpKSk7CisgICAgICAgIHdzLT5k
ZXB0aCA9IGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpZGdldC0+d2lu
ZG93KSktPmRlcHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHREtfQ09MT1JNQVBfWENPTE9S
TUFQKGdka19kcmF3YWJsZV9nZXRfY29sb3JtYXAoR0RLX0RSQVdBQkxFKG1fd2lkZ2V0LT53aW5k
b3cpKSk7CisgICAgICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19YV0lORE9XKG1fd2lkZ2V0LT53
aW5kb3cpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKG1f
d2lkZ2V0KS0+eHRkaXNwbGF5OworICAgICAgICB3cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lk
Z2V0KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJTiht
X3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19Y
VEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisgICAgICAgIG1fd2luZG93ID0g
R1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisKKyAgICAgICAgWEZsdXNoICh3cy0+ZGlz
cGxheSk7CisgICAgfQorCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKyNp
ZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisgICAgbV93aW5kb3cgPSBHREtfV0lORE9XX0hXTkQo
bV93aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAg
ICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25w
V2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRvdzsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRv
dy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdp
blF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0
KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1
Y2Nlc3NmdWxseTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKCFtX21hbnVh
bFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywg
bV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9h
ZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDAsIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0
YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgbV9tYW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0
cnVlKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9u
c2UpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAK
KyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQo
bV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmco
MCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxT
dHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1w
bC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGx1Z2luUGFja2FnZUd0azo6flBsdWdpblBhY2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9p
c0xvYWRlZCk7Cit9CisKK1BsdWdpblBhY2thZ2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2Fk
ZWQoZmFsc2UpCisgICAgLCBtX2xvYWRDb3VudCgwKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAg
LCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKQoreworICAg
IGludCBwb3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAg
IG1fZmlsZU5hbWUgPSBtX3BhdGgucmlnaHQobV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisK
K30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9h
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBt
X05QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJz
cGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAm
JiBtaW1lRGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19z
dHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0
ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lv
bnNbal07IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChleHRlbnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1l
RGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1p
bWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25z
KTsKKyAgICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYo
bWltZURlc2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBt
X05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYg
KGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAg
YnVmZmVyID0gMDsKKyAgICBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3Jp
cHRpb25TdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisg
ICAgICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAo
bV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkp
LmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0
aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBn
X21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5p
dGlhbGl6ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2Ny
aXB0aW9uIiwgKHZvaWQqKikmbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxl
X3N5bWJvbChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24p
OworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikm
bV9OUFBfR2V0VmFsdWUpOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1J
TUVEZXNjcmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRvd24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2Yo
bV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdp
bkZ1bmNzKTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1
bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNz
LnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9
IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3
U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJv
d3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9
IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxs
b2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJv
d3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJl
bG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1
cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxu
b3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9
IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVj
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVS
ZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1f
YnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9w
dXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1
ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJp
bmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1
bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVy
OworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmll
cklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5f
VVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9O
UE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5f
UmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1Jl
bGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7Cisg
ICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNz
LnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1v
dmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFz
cHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2Qg
PSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9O
UE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51
bWVyYXRlOworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1f
cGx1Z2luRnVuY3MpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAg
Z290byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fi
b3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX05QUF9TaHV0ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNo
dXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRk
b3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19t
b2R1bGVfY2xvc2UgKG1fbW9kdWxlKTsKKworICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKwor
UGx1Z2luUGFja2FnZUd0ayogUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBh
Y2thZ2VHdGsqIHBhY2thZ2UgPSBuZXcgUGx1Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZp
ZWQpOworCisgICAgaWYgKCFwYWNrYWdlLT5mZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUg
cGFja2FnZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNr
YWdlOworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisg
ICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNo
KCksCisgICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJ
bXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAq
IHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNr
YWdlR3RrOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNr
YWdlR3RrJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0
aW9uOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2Rl
OiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRo
PTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgor
ICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBM
LworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL
SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsy
WHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3Bl
ciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICog
UG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAo
QykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJH
UEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3Ig
dGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgor
ICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2Ug
dGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5
IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRo
ZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovICAgCisKKyNp
Zm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVmaW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVk
ZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRl
IDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJ
RU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisjaWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVm
aW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19FWFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBH
VEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmlu
ZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3Qg
X0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRC
aW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQRV9YVEJJTiAgICAgICAgICAgICAgICAgIChndGtf
eHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdUS19YVEJJTihvYmopICAgICAgICAgICAgICAg
ICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRC
SU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5lIEdUS19JU19YVEJJTihvYmopICAgICAgICAgICAg
ICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFT
UyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVk
ZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVudDsKKworc3RydWN0IF9YdENsaWVudCB7CisgIERp
c3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZl
bCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRn
ZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4
dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2luZG93OworfTsKKworc3RydWN0IF9HdGtYdEJpbgor
eworICBHdGtTb2NrZXQgICAgICBnc29ja2V0OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2lu
ZG93OworICBEaXNwbGF5ICAgICAgICp4dGRpc3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERp
c3BsYXkgKi8KKworICBXaW5kb3cgICAgICAgICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29s
a2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAgICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAg
d2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJIHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVu
dCBmb3IgWEVtYmVkICovCit9OworICAKK3N0cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBHdGtT
b2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAg
IGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0
a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hU
QklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0
YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0Ymlu
X3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0
IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBw
cml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAg
cHJvY190YWJsZTsgICAgICAgICAvKiBwcm9jZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAg
Ki8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlv
biBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50
VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAgCisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7
CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB3
aWRnZXQgaXRzZWxmICAgICAgICAgICovCisgICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFz
czsgICAgICAgLyogcG9pbnRlciB0byBXaWRnZXQncyBDbGFzc1JlYyAgICAgICovCisgICAgV2lk
Z2V0ICAgICAgICAgIHBhcmVudDsgICAgICAgICAgICAgLyogcGFyZW50IHdpZGdldCAgICAgICAg
ICAgICAgICAgICAgICovCisgICAgWHJtTmFtZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAgICAg
Lyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVhcmtpZmllZCAgICovCisgICAgQm9vbGVhbiAgICAg
ICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyogbWFya2VkIGZvciBkZXN0cm95ICAgICAgICAgICAg
ICAgICovCisgICAgWHRDYWxsYmFja0xpc3QgIGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRv
IGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVkICovCisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0
cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWludCByZWNvcmQgICAgICAgICAgICAgICAgICovCisg
ICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAgICAgICAgICAgICAgLyogd2luZG93IHBvc2l0aW9u
ICAgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7
ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5z
aW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAgICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAgICAg
ICAgICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyog
aXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAg
IHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMgd2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50
cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFuY2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBh
bmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICovCisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3Rh
YmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBldmVudCBkaXNwYXRjaGVyICAgICAgICovCisgICAg
WHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAgICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdl
bWVudCAgICAgICAgICAgICovCisgICAgWHRUcmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAg
ICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRpb25zICAgICAgICAgICovCisgICAgUGl4ZWwgICAg
ICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAgLyogd2luZG93IGJvcmRlciBwaXhlbCAgICAgICAg
ICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2lu
ZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAgICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBv
cHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBvZiBwb3B1cHMgICAgICAgICAgICAgICAgICAgICov
CisgICAgQ2FyZGluYWwgICAgICAgIG51bV9wb3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9w
dXBzICAgICAgICAgICAgICAgICAgICovCisgICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAg
ICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgICAgICAgICAgICAgICovCisgICAgU2Ny
ZWVuICAgICAgICAgICpzY3JlZW47ICAgICAgICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAg
ICAgICAgICAgICAgICovCisgICAgQ29sb3JtYXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAg
LyogY29sb3JtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgV2luZG93ICAgICAg
ICAgIHdpbmRvdzsgICAgICAgICAgICAgLyogd2luZG93IElEICAgICAgICAgICAgICAgICAgICAg
ICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIGRlcHRoOyAgICAgICAgICAgICAgLyogbnVtYmVy
IG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tn
cm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJhY2tncm91bmQgcGl4ZWwgICAgICAgICAgICovCisg
ICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91
bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAgQm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAgICAg
ICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBhbmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVh
biAgICAgICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFn
ZWQ/ICAgICAgICovCit9IENvcmVQYXJ0OworCit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsK
KyAgICBDb3JlUGFydCAgICBjb3JlOworIH0gV2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZk
ZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9f
R1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3
IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBs
dWdpblZpZXdHdGtfSAorI2RlZmluZSBQbHVnaW5WaWV3R3RrX0gKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRl
ICJQbHVnaW5TdHJlYW0uaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRl
cm5hbC5oIgorI2luY2x1ZGUgPGd0ay9ndGt3aWRnZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBLSlMgeworICAgIG5hbWVzcGFjZSBCaW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3Rh
bmNlOworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7
CisgICAgY2xhc3MgRnJhbWU7CisgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xh
c3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7
CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0R3Rr
OworICAgIGNsYXNzIFBsdWdpblN0cmVhbTsKKyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAg
IGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CisgICAgCisgICAgZW51bSBQbHVnaW5TdGF0dXMgewor
ICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVs
bHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQsIHBy
aXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZp
ZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0
ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2lu
Vmlld0d0aygpOworCisgICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAgICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2lu
VmlldygpOworCisgICAgICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFu
Y2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0dXM7IH0KKworICAgICAgICAvLyBOUE4gZnVuY3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0
VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3Rp
ZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBj
aGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciog
dXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBC
b29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOworICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIq
IGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAgICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBl
IHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBp
bnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7Cisg
ICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiBy
ZWFzb24pOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBz
dGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1
ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpOworICAgICAgICB2b2lkIGludmFs
aWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdp
b24pOworICAgICAgICB2b2lkIGZvcmNlUmVkcmF3KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25u
ZWN0U3RyZWFtKFBsdWdpblN0cmVhbSopOworICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExv
YWRpbmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0pIHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9
CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9t
ZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFu
dWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBp
bnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNl
dFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBi
b29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3RvcCgpOworICAgICAgICBzdGF0aWMgdm9pZCBz
ZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9h
ZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBu
b3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmls
ZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVh
ZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAg
ICAgRWxlbWVudCogbV9lbGVtZW50OworICAgICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAg
ICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VS
TCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdpblN0YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVj
dG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOworCisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVl
c3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVn
aW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1
Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGlt
ZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBk
ZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFp
bnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAg
ICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKTsKKworICAgICAgICBpbnQgbV9t
b2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50OworICAgICAgICBjaGFyKiogbV9wYXJhbU5h
bWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZhbHVlczsKKworICAgICAgICBDU3RyaW5nIG1f
bWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1f
aW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2lu
ZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+
IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3Rz
OworCisgICAgICAgIFBsdWdpblF1aXJrU2V0IG1fcXVpcmtzOworICAgICAgICBib29sIG1faXNX
aW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lzVHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9p
c1Zpc2libGU7CisgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CisKKyNpZmRlZiBHREtf
V0lORE9XSU5HX1gxMQorICAgICAgICBYSUQgbV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVn
LWlucworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorCUhXTkQgbV93aW5kb3c7
CisjZW5kaWYKKyAgICAgICAgbXV0YWJsZSBJbnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlw
IHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBwbHVnLWluCisgICAgICAgIG11dGFibGUgSW50
UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5kb3cgcmVjdC4KKworICAgICAgICB1bnNpZ25l
ZCBtX2xhc3RNZXNzYWdlOworCisgICAgICAgIGJvb2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAg
IFJlZlB0cjxQbHVnaW5TdHJlYW0+IG1fbWFudWFsU3RyZWFtOworCisgICAgICAgIHN0YXRpYyBQ
bHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVnaW5WaWV3OworCisgICAgICAgIEd0a1dpZGdldCog
bV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
UGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5Q
YWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZUd0a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VH
dGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1
ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0aWFsaXplRnVuY1B0cgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlw
dGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBN
SU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0ayA6IHB1Ymxp
YyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VHdGs+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5Q
bHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAgIHN0YXRpYyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVh
dGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQp
OworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlw
dGlvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVO
YW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNj
cmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAg
ICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBh
LCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAg
ICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24o
KTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsg
cmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFj
a2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsK
KyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKworICAgICAgICBib29sIG1faXNMb2FkZWQ7Cisg
ICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsK
KyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAg
ICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWlt
ZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0
ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxlKiBtX21vZHVsZTsKKyAgICAgICAgdGltZV90IG1f
bGFzdE1vZGlmaWVkOworCisgICAgICAgIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9O
UF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAgICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBf
U2h1dGRvd247CisgICAgICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgbV9OUFBfR2V0VmFsdWU7Cisg
ICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1
bmNzIG1fYnJvd3NlckZ1bmNzOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0
a0hhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJl
dHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0K
KyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VH
dGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJl
dF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQ
bHVnaW5QYWNrYWdlR3RrPiYgYSwgY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7
IHJldHVybiBQbHVnaW5QYWNrYWdlR3RrOjplcXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhp
cyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxl
IHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgor
Ly8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFp
dHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3BhY2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFz
aFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAg
dHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+
KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlR3RrSGFzaCBIYXNoOworICAgICAgICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4g
VHJhaXRzOworICAgIH07Cit9CisKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L25wYXBpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3
R3RrLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2luIHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0
aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBsdWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1z
cGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBhIE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQg
dGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWluIHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBs
dWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBjdXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNl
dCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5WaWV3R3RrOjpzdGFydC4KKy8vIFRoaXMgc3BlY2lm
aWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBhbmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQ
X05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdlbnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0
aWMgUGx1Z2luVmlld0d0ayogcGx1Z2luVmlld0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sK
KyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KGluc3RhbmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBs
dWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3KCk7Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxv
Yyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkIE5Q
Tl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKK3VpbnQzMiBOUE5f
TWVtRmx1c2godWludDMyIHNpemUpCit7CisgICAgLy8gRG8gbm90aGluZworICAgIHJldHVybiAw
OworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVnaW5zKE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAg
ICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RS
ZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJhbmdlKiByYW5nZUxpc3QpCit7CisgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShO
UFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBu
b3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5Q
Tl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdl
dCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJM
KHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJvciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25z
dCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFy
Z2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RV
UkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWlu
dDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBi
dWYsIGZpbGUpOworfQorCitOUEVycm9yIE5QTl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1J
TUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7Cisg
ICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBl
LCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2ludDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5Q
U3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoreworICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVy
KTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJveVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFt
KiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvcklu
c3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2Nv
bnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXdH
dGsqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAgIC8vIEZJ
WE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBOX1VzZXJBZ2VudCB3aXRoIGEgbnVsbCBpbnN0YW5j
ZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1bmN0aW9uIQorICAgICAvLyBXZSdkIG5lZWQgYSB3
YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRob3V0IGhhdmluZyBhIGZyYW1lIGFyb3VuZC4KKyAg
ICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0dXJuIDA7CisgCisgICAgcmV0dXJuIHZpZXctPnVz
ZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9TdGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBtZXNzYWdlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1
cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBO
UFJlY3QqIGludmFsaWRSZWN0KQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRSZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0
ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1
Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVn
aW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VSZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJy
b3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5n
ZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAg
aW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVy
biBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFs
dWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCogTlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkK
K3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJldHVybiAwOworfQorCit2b2lkCitOUE5fUHVz
aFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworfQor
Cit2b2lkCitOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKK30KSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsv
eGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7
IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAt
Ki0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoq
KioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIu
MC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3Qg
dG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vu
c2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
CisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lz
LAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisg
KiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVNQkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRo
ZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jv
c3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0
aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNh
YmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2Yg
ZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisg
KiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1Q
TCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMg
YWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92
aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVs
ZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUg
TVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NL
ICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdlcyAqLworI2RlZmluZSBYRU1CRURfRU1CRURE
RURfTk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAg
ICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSAgICAgICAgMgorI2RlZmlu
ZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAgICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X0lOICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAg
ICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNfTkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZp
bmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAgICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFC
X0tFWSAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAg
ICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09OICAgICAgICAgICAgICAxMAorI2Rl
ZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAgICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFy
ZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9HVEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4
IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkgICAgICAgICAgIDEwOQorCisvKiBEZXRh
aWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLworI2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVO
VCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAx
CisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAgICAgICAgICAgICAgMgorCisvKiBGbGFncyBm
b3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhFTUJFRF9NQVBQRUQgICAgICAgICAgICAgICAg
ICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhYmFzZUd0ayogUGx1Z2luRGF0YWJh
c2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKQoreworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZUd0
ayogcGx1Z2lucyA9IDA7CisgICAgCisgICAgaWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdp
bnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VHdGs7CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBh
dGhzKFBsdWdpbkRhdGFiYXNlR3RrOjpkZWZhdWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBs
dWdpbnMtPnJlZnJlc2goKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9p
ZCBQbHVnaW5EYXRhYmFzZUd0azo6YWRkRXh0cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBtX3BsdWdpblBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9
CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNl
dCBuZXdQbHVnaW5zOworCisgICAgYm9vbCBwbHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAg
ICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBsdWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1
Z2luc0luUGF0aHMoKTsKKworICAgIGlmICghbV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAg
ICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1
Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOworCisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQucmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3
UGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAg
ICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICAgICBtX3BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRk
IG5ldyBwbHVnaW5zCisgICAgICAgIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZv
ciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAg
IHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1
Z2lucy5pc0VtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1
Z2luczsKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5z
LmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQ
bHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5h
ZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0
eSgpOworICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7
IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVk
TUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBwbHVnaW5TZXRDaGFuZ2VkOworfQorCitWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IFBs
dWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5zKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFj
a2FnZUd0ayo+IHJlc3VsdDsKKworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGx1Z2luU2V0IFBs
dWdpbkRhdGFiYXNlR3RrOjpnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNlbnNpdGl2ZSBzZXQuCisgICAgSGFzaFNldDxT
dHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKKyAgICBQbHVnaW5TZXQgcGx1Z2luczsKKworICAgIFBs
dWdpblBhY2thZ2VHdGsqIG9sZFdNUFBsdWdpbiA9IDA7CisgICAgUGx1Z2luUGFja2FnZUd0ayog
bmV3V01QUGx1Z2luID0gMDsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbigoaXQtPnV0ZjgoKSkuZGF0YSgpLCAwLCBO
VUxMKTsKKyAgICAgICAgaWYgKGRpcikgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsK
KyAgICAgICAgICAgIHdoaWxlICgobmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSkgeworICAg
ICAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfc3VmZml4KG5hbWUsICIuIiBHX01PRFVMRV9TVUZG
SVgpKSB7CisgICAgICAgICAgICAgICAgICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfYnVpbGRfZmls
ZW5hbWUoKGl0LT51dGY4KCkpLmRhdGEoKSwgbmFtZSwgTlVMTCk7CisgICAgICAgICAgICAgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3RrOjpj
cmVhdGVQYWNrYWdlKGZpbGVuYW1lLCB0aW1lKE5VTEwpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBsdWdpblBhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChw
bHVnaW5QYWNrYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnX2Rpcl9jbG9zZShk
aXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVy
c2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWduZWQg
c3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAoc3Rh
cnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9zID0g
c3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQorICAg
ICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmlu
Z1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnQg
dmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQ
b3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNv
bXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKworICAg
IHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBp
cyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9u
cyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9u
QikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9u
QltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBj
b21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhh
cyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBh
dGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBob21lUGF0
aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdp
bnMiLCBOVUxMKTsKKyAgICBwYXRocy5hcHBlbmQoaG9tZVBhdGgpOworICAgIGdfZnJlZShob21l
UGF0aCk7CisKKyAgICBjb25zdCBnY2hhciogbW96UGF0aCA9IGdfZ2V0ZW52KCJNT1pfUExVR0lO
X1BBVEgiKTsKKyAgICBpZiAobW96UGF0aCkgeworICAgICAgICBnY2hhcioqIHBsdWdpblBhdGhz
ID0gZ19zdHJzcGxpdChtb3pQYXRoLCAiOiIsIC0xKTsKKworICAgICAgICBmb3IgKGdpbnQgaSA9
IDA7IHBsdWdpblBhdGhzW2ldOyBpKyspCisgICAgICAgICAgICBwYXRocy5hcHBlbmQocGx1Z2lu
UGF0aHNbaV0pOworCisgICAgICAgIGdfZnJlZShwbHVnaW5QYXRocyk7CisgICAgfQorICAgIHBh
dGhzLmFwcGVuZCgiL3Vzci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5zIik7CisgICAgcGF0aHMu
YXBwZW5kKCIvdXNyL2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKKworICAgIHJldHVybiBwYXRoczsK
K30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1pbWVUeXBlLmlzTnVsbCgp
ICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSk7Cit9CisKK1BsdWdp
blBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5Gb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQoreworICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dlcigpOwor
CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Cisg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9u
cygpLmNvbnRhaW5zKGtleSkpCisgICAgICAgICAgICByZXR1cm4gKCppdCkuZ2V0KCk7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNl
R3RrOjpwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAg
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7CisgICAgZm9y
IChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CisKKyAgICAgICAg
Zm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0gKCppdCkt
Pm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyArK21pbWVf
aXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25zID0gbWlt
ZV9pdC0+c2Vjb25kOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0
ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleHRlbnNpb25zW2ld
ID09IGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1Bs
dWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpmaW5kUGx1Z2luKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sgICAKKyAgICBQbHVnaW5QYWNrYWdlR3Rr
KiBwbHVnaW4gPSAwOworCisgICAgaWYgKCFtaW1lVHlwZS5pc051bGwoKSkKKyAgICAgICAgcGx1
Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgIAorICAgIGlmICghcGx1Z2lu
KSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKKyAgICAgICAgU3RyaW5nIGV4
dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQoJy4nKSArIDEpOworCisg
ICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvckV4dGVuc2lvbihleHRlbnNpb24pOworCisgICAgICAg
IC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IHhkZ21pbWUgZm9y
IHRoZSBtaW1lIHR5cGUgCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lv
bi4KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luOworfQorCitQbHVnaW5WaWV3R3RrKiBQbHVn
aW5EYXRhYmFzZUd0azo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0
IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7CisgICAg
UGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlKTsKKyAg
ICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUgZGF0YWJh
c2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2goKSkKKyAg
ICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlKTsKKyAgICAgICAgCisgICAg
cmV0dXJuIG5ldyBQbHVnaW5WaWV3R3RrKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1l
bnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkp
OworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0
MSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBu
aWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6
dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICog
VmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwor
ICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIg
dGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRC
aW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBv
ZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9y
dGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykg
MjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBv
ZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwi
KSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAy
LjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9u
cyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRo
b3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhl
IExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICog
ZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBM
R1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisgCisvKgorICog
VGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1c2Vk
CisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisjdW5kZWYgR1RLX0RJU0FC
TEVfREVQUkVDQVRFRAorCisjaW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0Ymlu
LmgiCisjaW5jbHVkZSA8Z3RrL2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5o
PgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFz
c2VydC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKworLyogWGxpYi9YdCBzdHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVk
ZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0lu
dHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0
aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNy
ZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUg
WFRCSU5fTUFYX0VWRU5UUyAzMAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9j
bGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAg
IGd0a194dGJpbl9pbml0ICAgICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9p
ZCAgICAgICAgICAgIGd0a194dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0
KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lk
Z2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0
cm95ICAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAg
Z3RrX3h0YmluX3NodXRkb3duICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBh
d2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0
Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB4dGRlcHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVh
dGUgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2luZG93IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgd2lkdGggKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxp
emUgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVz
dHJveSAgIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50
X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Ns
aWVudF9ldmVudF9oYW5kbGVyIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lk
ICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBj
bGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1
c19saXN0ZW5lciAgICAgICAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9p
bnRlciB1c2VyX2RhdGEgKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5l
cl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMg
dm9pZCAgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1
c2VyX2RhdGEpOworc3RhdGljIHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGll
bnQgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u
ZyBtZXNzYWdlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg
ZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0
YTEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0
YXRpYyBpbnQgICAgICAgIGVycm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9y
KTsKKy8qIEZvciBlcnJvciB0cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJh
cF9lcnJvcnModm9pZCk7CitzdGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7Citz
dGF0aWMgaW50ICAgICAgICAoKm9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JF
dmVudCAqKTsKK3N0YXRpYyBpbnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0
YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3Bs
YXkgICAgICAgICAqeHRkaXNwbGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZh
bGxiYWNrID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVk
ID0gRkFMU0U7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0
YXRpYyBHUG9sbEZEICAgICAgICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAg
ICAgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAg
IHRhZyA9IDA7CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSog
IHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAg
IAorICBpbnQgbWFzazsKKworICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRp
bmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29s
ZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2Uq
ICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2
ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNr
ID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICBy
ZXR1cm4gKGdib29sZWFuKW1hc2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAg
cmV0dXJuIEZBTFNFOworfSAgIAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNo
IChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5j
IGNhbGxfYmFjaywKKyAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sK
KyAgWEV2ZW50IGV2ZW50OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBh
YyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RI
UkVBRFNfRU5URVIgKCk7CisKKyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUu
ICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhU
QklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0
aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHBy
b2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0
CisgICAqIGRvZXMgaXQuICAqLworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYg
WFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0
SU1YRXZlbnQpOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRS
VUU7ICAKK30KKworc3RhdGljIEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRf
ZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAor
ICBnX2ZyZWUsCisgIChHU291cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClO
VUxMCit9OworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJh
Y2soZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBD
b250ZXh0IGFjOworICBpbnQgZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChE
aXNwbGF5ICopdXNlcl9kYXRhOworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0
KGRpc3BsYXkpOworCisgIC8qIFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJl
LiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUg
b3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQg
aGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nl
c3MKKyAgICAgdXAgdG8gMjAgWHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBm
b3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpy
ZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxl
IChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vz
c0V2ZW50KGFjLCBYdElNQWxsKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194
dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7
CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8g
eHRiaW5faW5mbyA9CisgICAgICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVv
ZiAoR3RrWHRCaW4pLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAo
R3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmpl
Y3RJbml0RnVuYykgZ3RrX3h0YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVM
TCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0
RnVuYykgTlVMTAorICAgICAgfTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUg
KEdUS19UWVBFX1NPQ0tFVCwgJnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5
cGU7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFz
cyAqa2xhc3MpCit7CisgIEd0a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVj
dENsYXNzICpvYmplY3RfY2xhc3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3Mg
KEdUS19UWVBFX1NPQ0tFVCk7CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAo
a2xhc3MpOworICB3aWRnZXRfY2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAg
d2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVj
dF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0
cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5p
dCAoR3RrWHRCaW4gKnh0YmluKQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRi
aW4tPnBhcmVudF93aW5kb3cgPSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJp
bi0+eCA9IDA7CisgIHh0YmluLT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9y
ZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4
LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hU
QklOCisgIHByaW50ZigiZ3RrX3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3Jl
dHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hU
QklOICh3aWRnZXQpOworCisgIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFs
aXplICovCisgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAm
eCwgJnksICZ3LCAmaCwgJmQpOworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlv
bi5oZWlnaHQgPSBoOworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9j
YXRpb24pOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRp
b24gJWQgJWQgJWQgJWRcbiIsIHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRo
ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5h
bGxvY2F0aW9uLmhlaWdodDsKKworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAo
KkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAv
KiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0
YmluLT54dGNsaWVudCksIAorICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRi
aW4pKSwgCisgICAgICAgeHRiaW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAg
eHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7
CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4
dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChH
VEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQq
CitndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7
CisgIEd0a1h0QmluICp4dGJpbjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChw
YXJlbnRfd2luZG93ICE9IE5VTEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVf
WFRCSU4pOworCisgIGlmICgheHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisK
KyAgaWYgKGYpCisgICAgZmFsbGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRv
b2xraXQgKi8KKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0
X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNV
QUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChn
ZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0
aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRP
cGVuRGlzcGxheSBmYWlsZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWls
IG91dC4KKyAgICAgKi8KKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0Ymlu
X2luaXQ6IFh0T3BlbkRpc3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBn
X2ZyZWUgKHh0YmluKTsKKyAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAv
KiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkg
aW50byB0aGUKKyAgICAgbWFpbmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAg
ICBpbnQgICAgICAgICAgIGNudW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxv
b3AgaW50byB0aGUgZ2xpYiBldmVudCBsb29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3Vt
cHRpb24gaXMgdGhhdCBndGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdT
b3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2Up
KTsKKyAgICAgIGlmICghZ3MpIHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAK
KyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAg
IGdfc291cmNlX3NldF9jYW5fcmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2Vf
YXR0YWNoKGdzLCAoR01haW5Db250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVy
ID0gWENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENv
bm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQu
ZmQgPSBjbnVtYmVyOworICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisg
ICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29y
cmVjdD8gKi8KKworICAgIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilO
VUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRk
IGEgdGltZXIgc28gdGhhdCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAg
ICB4dF9wb2xsaW5nX3RpbWVyX2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAg
ICAgICAgICAgICAgICAgICAoR3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxs
YmFjaywKKyAgICAgICAgICAgICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVt
cCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0
aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRp
c3BsYXk7CisgIGd0a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiks
IHBhcmVudF93aW5kb3cpOworICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVu
dF93aW5kb3csICZ1c2VyX2RhdGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisg
IHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9z
aXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAg
ICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4t
PnggPSB4OworICB4dGJpbi0+eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0
YmluKSkKKyAgICBnZGtfd2luZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4
LCB5KTsKK30KKwordm9pZAorZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisg
ICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICBoZWlnaHQpCit7CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBH
VEtfWFRCSU4gKHdpZGdldCk7CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVm
IERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZv
aWQgKil3aWRnZXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9
IGhlaWdodDsKKyAgeHRiaW4tPndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVl
IGVycm9ycyBpbiBYdFNldFZhbHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7
CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1sw
XSwgWHROaGVpZ2h0LCBoZWlnaHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdp
ZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIp
OworCisgIC8qIHdlIG5lZWQgdG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBr
bm93cyBhYm91dCB0aGUKKyAgICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0
YmluLT54OworICBhbGxvY2F0aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9
IHh0YmluLT53aWR0aDsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3Rh
dGljIHZvaWQKK2d0a194dGJpbl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBH
dGtYdEJpbiAqeHRiaW47CisgIEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyog
Z3RrX29iamVjdF9kZXN0cm95KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmpl
Y3QKKyAgICovCisgIHh0YmluID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19X
SURHRVQob2JqZWN0KTsKKworICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19W
SVNJQkxFKTsKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9j
bGllbnRfdW5yZWFsaXplKCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURH
RVRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGlj
IHZvaWQKK2d0a194dGJpbl9kZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRC
aW4gKnh0YmluOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVz
dHJveSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxM
KTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJp
biA9IEdUS19YVEJJTiAob2JqZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAv
KiByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0
YmluLT54dGNsaWVudCkpOworICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lk
Z2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlz
IHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBj
b25uZWN0aW9uIGZyb20gdGhlIG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMp
IHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29u
bmVjdGlvbiBmcm9tIHRoZSBtYWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29u
dGV4dF9yZW1vdmVfcG9sbCgoR01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7
CisgICAgICBnX3NvdXJjZV9yZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3Zl
KHh0X3BvbGxpbmdfdGltZXJfaWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7Cisg
ICAgfQorICB9CisKKyAgR1RLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9i
amVjdCk7Cit9CisKKy8qCisqIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQg
WEVtYmVkZGVkIGZvciBjbGllbnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8K
K3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAg
ICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAg
eHRjb2xvcm1hcCwKKyAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250
ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAg
ICAgICBtQXJnYyA9IDA7CisKKyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8K
KyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0
ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2
aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQt
Pnh0ZGVwdGggPSAwOworCisgIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJV
R19YVEJJTgorICAgIHByaW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisg
ICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBs
aWNhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxi
YWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBY
dE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2
KTsKKyAgICBpZiAoeHRkaXNwbGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOwor
ICB9CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2
aXN1YWwgICA9IHh0dmlzdWFsOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7
CisgIHh0Y2xpZW50LT54dGRlcHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBY
dCBjbGllbnQgd2lkZ2V0cworKiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICgg
WHRDbGllbnQqIHh0Y2xpZW50ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVy
aWQsIAorICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAg
IGludCB3aWR0aCApIAoreworICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJn
c1s2XTsKKyAgV2lkZ2V0ICAgICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9w
X3dpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0
ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdp
bmdBcmVhIiwgIldyYXBwZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
bGljYXRpb25TaGVsbFdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIDApOworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyog
c2V0IHNpemUgb2YgWHQgd2luZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBY
dE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAg
ICB3aWR0aCk7bisrOworICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBj
aGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNl
dEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nb
bl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1
YWwsICAgeHRjbGllbnQtPnh0dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHRO
ZGVwdGgsICAgIHh0Y2xpZW50LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwg
WHROY29sb3JtYXAsIHh0Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJn
c1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdl
dCwgYXJncywgbik7CisKKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4
dGNsaWVudC0+b2xkd2luZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRn
ZXQtPmNvcmUud2luZG93ID0gZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBz
ZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lm
aWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlz
cGxheSwgCisgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAg
ICAgICAgdG9wX3dpZGdldCk7CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJp
ZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6
ZVdpZGdldChjaGlsZF93aWRnZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICov
CisgIFhTZWxlY3RJbnB1dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0
V2luZG93KHRvcF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xp
ZW50X3NldF9pbmZvIChjaGlsZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRf
d2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAv
KiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lk
Z2V0LAorICAgICAgICAgICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ss
CisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVu
dEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVu
dEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJl
Tm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJV
RSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNf
bGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xp
ZW50LT54dGRpc3BsYXksIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJl
YWxpemUgKCBYdENsaWVudCogeHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVs
ZWFzZSA+PSA2CisgIFh0VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisg
ICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7
CisjZWxzZQorICBfWHRVbnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3Jl
LndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7Cisj
ZW5kaWYKKworICAvKiBmbHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4g
dG9wX3dpZGdldC0+Y29yZS53aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNl
IHRoZSB3aW5kb3cgaXMgZ29uZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxz
ZSk7CisKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9s
ZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQor
CitzdGF0aWMgdm9pZCAgICAgICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQq
IHh0Y2xpZW50KQoreworICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3Zl
RXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hh
bmRsZXIsIHh0Y2xpZW50KTsKKyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRn
ZXQpOworICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMg
dm9pZCAgICAgICAgIAoreHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25l
ZCBsb25nIGZsYWdzKQoreworICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGlu
Zm9BdG9tID0gWEludGVybkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBG
YWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZl
cnNpb24gKi8KKyAgYnVmZmVyWzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERp
c3BsYXkoeHRwbHVnKSwgWHRXaW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZv
QXRvbSwgaW5mb0F0b20sIDMyLAorICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwK
KyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0
YXRpYyB2b2lkCit4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBv
aW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcg
PSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEu
bFsxXSkKKyAgeworICBjYXNlIFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7Cisg
IGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHBy
aW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgor
ICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJV
R19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZB
VEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgor
I2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RB
TElUWV9PTlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlf
T0ZGOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJF
RF9NT0RBTElUWV9PRkZcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZP
Q1VTX0lOOgorICBjYXNlIFhFTUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhl
dmVudDsKKyAgICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAg
IGlmKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRl
ZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsK
KyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQor
ICAgICAgZWxzZSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVE
IGdvdCBmb2N1cyBvdXRcbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9
IEZvY3VzT3V0OworICAgICAgfQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2lu
ZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9
IFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlz
cGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZv
Y3VzLndpbmRvdywKKyAgICAgICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAg
ICAgICAgICAgICAmeGV2ZW50ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hp
bGRfd2lkZ2V0KSwgRmFsc2UpOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBi
cmVhazsKKyAgfSAvKiBFbmQgb2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQg
ICAgICAgICAKK3h0X2NsaWVudF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNs
aWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xp
ZW50KiljbGllbnRfZGF0YTsKKyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAg
Y2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisg
ICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAg
WEludGVybkF0b20gKFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGll
bnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9
CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNYXBwaW5nTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1C
RURfTUFQUEVEKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4
dF9jbGllbnRfc2V0X2luZm8gKHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0lu
OgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVh
azsKKyAgICBjYXNlIEZvY3VzT3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7Cisj
ZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8q
IEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hl
bWJlZF9tZXNzYWdlIChYdENsaWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAg
bG9uZyAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWls
LCAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAg
ICAgICAgICAgbG9uZyAgICAgIGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAg
ICAgdGltZSkgICAKK3sKKyAgWEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0
Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7
CisgIGludCBlcnJvcmNvZGU7CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7
CisgIHhldmVudC54Y2xpZW50LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBD
bGllbnRNZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRv
bShkcHksIl9YRU1CRUQiLEZhbHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7Cisg
IHhldmVudC54Y2xpZW50LmRhdGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRh
LmxbMV0gPSBtZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAor
ICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0
YS5sWzRdID0gZGF0YTI7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwg
dywgRmFsc2UsIE5vRXZlbnRNYXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisK
KyAgaWYoKGVycm9yY29kZSA9IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJzZW5kX3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNv
ZGUpOworI2VuZGlmCisgIH0KK30KKworc3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hh
bmRsZXIoRGlzcGxheSAqZGlzcGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVk
X2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyB2b2lkICAgICAgICAgIAordHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9j
b2RlID0wOworICBvbGRfZXJyb3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFu
ZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQorewor
ICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJv
cl9jb2RlKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBF
cnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJu
IHRyYXBwZWRfZXJyb3JfY29kZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVu
dF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAq
ZXZlbnQpCit7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0
Y2xpZW50ID0gdXNlcl9kYXRhOworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dp
dGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlm
KGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNo
aWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsK
KyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVl
KGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0
cm95Tm90aWZ5OgorICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEp
OworICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50
LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFy
ZW50ICovCisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQt
PnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRk
X2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAg
ZWxzZSBpZihldmVudC0+eHJlcGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBh
bSB0aGUgbmV3IGNoaWxkICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBh
bSB0aGUgb2xkIHBhcmVudCAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0
b25SZWxlYXNlOgorI2lmIDAKKyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRj
bGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1l
KTsKKyNlbmRpZgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsK
KyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBv
ZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNf
bGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0
cmlidXRlcyBhdHRyOworICBsb25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0g
dXNlcl9kYXRhOworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0
V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2
ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8
IEJ1dHRvblJlbGVhc2VNYXNrOworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAg
ICAgICAgICAgWHRXaW5kb3codyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBY
dEFkZEV2ZW50SGFuZGxlcih3LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90
aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwg
CisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlz
dGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigp
OworfQorCitzdGF0aWMgdm9pZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBY
dFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3Jz
ICgpOworICBYdFJlbW92ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwg
QnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50
SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFw
X2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAo
IFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4g
PSBYdFdpbmRvdyh0cmVlcm9vdCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290
LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2ln
bmVkIGludCBpLCBuY2hpbGRyZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRo
YW4gb25jZSAqLworICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2Rh
dGEpOworICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0
cmFwX2Vycm9ycygpOworICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQs
ICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1
cm47CisgIH0KKworICBpZih1bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihp
PTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lk
Z2V0KGRweSwgY2hpbGRyZW5baV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9j
dXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQq
KWNoaWxkcmVuKTsKKworICByZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdJ
bkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkluZm8q
IFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWdu
ZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRhdGFiYXNlR3Rr
OjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5J
bmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygpW2ldOwor
CisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxlID0gcGFj
a2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24o
KTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25z
ID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3JpcHRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAg
Zm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVz
Y3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1lQ2xhc3NJ
bmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVzLmFwcGVu
ZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAg
ICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZv
OworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlm
IChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAgICAg
ICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVn
aW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxs
ZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmluZyBQbHVnSW5JbmZvU3Rv
cmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNl
R3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKTsK
K30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKK3sKKyAgICBQ
bHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CisKKyAgICBp
ZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3BlbiBwYWdl
cworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDI5Nzky
KQorKysgV2ViQ29yZS9wbHVnaW5zL25wZnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
MiwxNCArMTcyLDIxIEBAIHR5cGVkZWYgc3RydWN0IF9OUFBsdWdpbkZ1bmNzIHsKICAgICBOUFBf
U2V0VmFsdWVQcm9jUHRyIHNldHZhbHVlOwogfSBOUFBsdWdpbkZ1bmNzOwogCisjaWYgZGVmaW5l
ZChYUF9XSU4pCiB0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxp
emVGdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqKTsKIHR5cGVkZWYgRVhQT1JURURfQ0FMTEJBQ0so
TlBFcnJvciwgTlBfR2V0RW50cnlQb2ludHNGdW5jUHRyKShOUFBsdWdpbkZ1bmNzKik7CisjZW5k
aWYKIAogI2lmIGRlZmluZWQoWFBfTUFDT1NYKQogdHlwZWRlZiB2b2lkICAgICgqQlBfQ3JlYXRl
UGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKSh2b2lkKTsKIHR5cGVkZWYgTlBFcnJv
ciAoKk1haW5GdW5jUHRyKShOUE5ldHNjYXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKiwgTlBQX1No
dXRkb3duUHJvY1B0ciopOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFhQX1VOSVgpCit0eXBlZGVm
IEVYUE9SVEVEX0NBTExCQUNLKE5QRXJyb3IsIE5QX0luaXRpYWxpemVGdW5jUHRyKShOUE5ldHNj
YXBlRnVuY3MqLCBOUFBsdWdpbkZ1bmNzKik7Cit0eXBlZGVmIEVYUE9SVEVEX0NBTExCQUNLKGNo
YXIqLCBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyKSh2b2lkKTsKKyNlbmRpZgorCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTc5MikKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQCBERVBFTkRQ
QVRIICs9IGVkaXRpbmcvcXQgaGlzdG9yeS9xdCBsb2FkCiBndGstcG9ydCB7CiAgICAgeDExOnBs
dWdpbnMgewogICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgTElCUyArPSAtbFh0
CiAgICAgfQogCiAgICAgSU5DTFVERVBBVEggKz0gXApAQCAtMTcyLDYgKzE3Myw3IEBAIGd0ay1w
b3J0IHsKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsg
XAogICAgIHBhZ2UvZ3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3CiB9CkBAIC04NjIsMTMg
Kzg2NCwzNSBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKIAogZ3Rr
LXBvcnQgeworICAhcGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9QTFVHSU5T
PTEKKyAgfQorICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAorICAgIHBsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhX
aWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
RmFsbGJhY2tMaXN0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBcCisgICAgcGx1
Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YWJhc2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBc
CisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25w
YXBpLmNwcAorCisgIHgxMTpwbHVnaW5zIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgIHBsdWdp
bnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICAgIHBsdWdpbnMvZ3RrL3hlbWJlZC5oCisKKyAgICBT
T1VSQ0VTICs9IFwKKyAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0KIAogcXQt
cG9ydCB7CkBAIC05ODIsNiArMTAwNiw3IEBAIHF0LXBvcnQgewogfQogCiBndGstcG9ydCB7Cisg
ICAgSU5DTFVERVBBVEggKz0gLi4vV2ViQ29yZS9wbHVnaW5zL2d0awogICAgIEhFQURFUlMgKz0g
XAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCiAgICAg
ICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBcCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
Z3RrL0ZyYW1lR3RrLmNwcAkocmV2aXNpb24gMjk3OTIpCisrKyBXZWJDb3JlL3BhZ2UvZ3RrL0Zy
YW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE5IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCiAKKyNpbmNsdWRlICJranNfcHJveHku
aCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJydW50aW1lLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lOjpjcmVh
dGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQorS0pTOjpCaW5kaW5nczo6SW5zdGFu
Y2UqIEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5W
aWV3R3RrKj4od2lkZ2V0KS0+YmluZGluZ0luc3RhbmNlKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHJldmlzaW9uIDI5NzkyKQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEs
NSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU2
LDcgQEAgbXkgJGN1cnJlbnRTVk5SZXZpc2lvbjsKIG15ICRvc1hWZXJzaW9uOwogbXkgJGlzUXQ7
CiBteSAkaXNHdGs7CitteSAkZW5hYmxlR3RrUGx1Z2luczsKIG15ICRpc1d4OwogCiAjIFZhcmlh
YmxlcyBmb3IgV2luMzIgc3VwcG9ydApAQCAtNDg0LDYgKzQ4NiwyMyBAQCBzdWIgZGV0ZXJtaW5l
SXNHdGsoKQogICAgIH0KIH0KIAorc3ViIGVuYWJsZUd0a1BsdWdpbnMoKQoreworICAgIGRldGVy
bWluZUVuYWJsZUd0a1BsdWdpbnMoKTsKKyAgICByZXR1cm4gJGVuYWJsZUd0a1BsdWdpbnM7Cit9
CisKK3N1YiBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICByZXR1cm4gaWYgZGVm
aW5lZCgkZW5hYmxlR3RrUGx1Z2lucyk7CisKKyAgICBpZiAoY2hlY2tBcmd2KCItLWRpc2FibGUt
Z3RrLXBsdWdpbnMiKSkgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDA7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAxOworICAgIH0KK30KKwogc3ViIGlz
V3goKQogewogICAgIGRldGVybWluZUlzV3goKTsKQEAgLTc5OSw2ICs4MTgsNyBAQCBzdWIgYnVp
bGRRTWFrZUd0a1Byb2plY3QoJCQpCiAKICAgICBteSBAYnVpbGRBcmdzID0gKCJDT05GSUcrPWd0
ay1wb3J0Iik7CiAgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHLT1xdCI7CisgICAgcHVzaCBA
YnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBlbmFibGVHdGtQbHVnaW5zKCk7CiAKICAg
ICByZXR1cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18849</attachid>
            <date>2008-02-01 10:10:47 -0800</date>
            <delta_ts>2008-02-04 14:05:14 -0800</delta_ts>
            <desc>Updated patch against r29914</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>136298</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAyOTkxNCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PSAKIAogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0
Q29yZSBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMgXAog
CS1JJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL3d0ZiBcCkBAIC0xOTEsNiArMTkyLDcgQEAgZW5k
aWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBfVU5JWAord2Via2l0
Z3RrX2xkZmxhZ3MgKz0gLWxYdAogZW5kaWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJbmRleDogV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJ
KHJldmlzaW9uIDI5OTE0KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC00OSwxMiArNTAsMTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgog
I2VuZGlmCiAKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6
RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShm
cmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAg
ICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYwLDkgKzE2NiwzMCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1p
dHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0g
ICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7
Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRF
bmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBp
ZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAg
ICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIg
d2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0
cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOworICAgICAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3Nl
bikKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGlu
Z05hbWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZy
YW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywg
dXNlckNob3Nlbik7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXIt
PmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7
CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAg
bV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAg
ICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjU4LDggKzI4NSwxMyBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFt
ZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCog
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0
ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9h
ZE1hbnVhbGx5KQogeworICAgIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRh
YmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFt
ZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1p
bWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09
IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZp
ZXc7CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzAxLDgg
KzMzMyw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5X
aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9wbHVn
aW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAK
IFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtMzI0LDYgKzM1NSw5
IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAoTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBl
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsK
KwogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUo
dHlwZSkpCiAgICAgICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAKQEAg
LTYyMywxNCArNjU3LDE0IEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlN
RVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1l
KCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMg
b3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5n
IGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVs
bCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5j
b2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisg
ICAgICAgIGNvbW1pdHRlZExvYWQoZG9jdW1lbnRMb2FkZXIsIDAsIDApOworICAgIGVsc2Ugewor
ICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVn
aW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwor
ICAgIH0KIH0KIAogCkBAIC03NTMsOSArNzg3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoVW5hYmxlVG8KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0
IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50
RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAg
ICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuaAkocmV2aXNpb24gMjk5MTQpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMyLDYgKzMzLDggQEAKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4MCw2
ICsxODMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBt
X2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAg
ICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsKKworICAgICAgICAvLyBQbHVnaW4g
dmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisgICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXdHdGsq
IG1fcGx1Z2luVmlldzsKKyAgICAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwog
ICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMjk5MTQpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHdlYmtpdGd0a19jcHBm
bGFncyArPSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBc
CiAJLUkkKHNyY2RpcikvV2ViQ29yZS9sb2FkZXIvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3Jl
L3BhZ2UvZ3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsdWdpbnMvZ3RrIFwKIAktSSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdApAQCAtODQ4LDYgKzg0OSwxMSBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2Uu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5TdHJlYW0uY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0
ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNw
cCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9y
ZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBc
CkBAIC05MDcsNiArOTEzLDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlXZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitp
ZiBUQVJHRVRfWDExCit3ZWJraXRndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0
ay9ndGsyeHRiaW4uYworZW5kaWYKKwogd2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlu
a1N0dWJzLmNwcAkocmV2aXNpb24gMjk5MTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0
b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlz
dG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
LVBsdWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0
SW5kZXgodW5zaWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQg
UGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLVN0cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJp
bmcoKTsgfSAKLWJvb2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBl
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci12b2lkIFdlYkNvcmU6OnJlZnJlc2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotCi0KIENvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAw
MDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZv
aWQgKCopKCkpIHsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHJldmlz
aW9uIDI5OTE0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA2LDUgKzMwNiwyMiBAQCB2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24oYm9vCiAKIHZvaWQgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogewor
ICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZ3RrV2lkZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KHBhcmVudCgpKTsKKyAgICBJbnRQb2ludCBsb2MgPSBmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRh
aW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6ZSB0byBiZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3og
PSBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpOworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
KworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3ou
d2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZ3Rr
V2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKIH0KIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpbkRhdGFiYXNlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBQbHVnaW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRh
dGFiYXNlR3RrX0gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRT
aXplOworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBj
bGFzcyBQbHVnaW5WaWV3R3RrOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiwgUGx1Z2luUGFja2FnZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xh
c3MgUGx1Z2luRGF0YWJhc2VHdGsgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdp
bkRhdGFiYXNlR3RrKiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsq
IGNyZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7
CisgICAgICAgIFZlY3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAg
ICAgICBib29sIGlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNv
bnN0OworICAgICAgICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXRocykgeyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0
IGdldFBsdWdpbnNJblBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayog
ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisg
ICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpOworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24pOworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5n
PiBkZWZhdWx0UGx1Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdp
blBhdGhzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOwor
ICAgICAgICBQbHVnaW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiUGx1Z2luRGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtq
c19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pzX3dpbmRv
dy5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgor
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNs
dWRlIDxranMvdmFsdWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisjaW5j
bHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVm
IEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgor
Cit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBL
SlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1
c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2Ug
V1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVz
OwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7
CitwdWJsaWM6CisgICAgUGx1Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBm
cmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEp
CisgICAgICAgIDogbV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAg
ICwgbV9ub3RpZnlEYXRhKG5vdGlmeURhdGEpCisgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9u
KHNlbmROb3RpZmljYXRpb24pIHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVl
c3QmIGZyYW1lTG9hZFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7
IH0KKyAgICB2b2lkKiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9
CisgICAgYm9vbCBzZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZp
Y2F0aW9uOyB9Citwcml2YXRlOgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1
ZXN0OworICAgIHZvaWQqIG1fbm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlv
bjsKKyAgICAvLyBGSVhNRTogdXNlciBnZXN0dXJlCit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlw
dFN0cmluZ0lmSmF2YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwu
c3RyaW5nKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisg
ICAgcmV0dXJuIEtVUkw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQo
MTEpKTsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2lu
VmlldyA9IDA7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemls
bGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNr
by8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2lu
ZG93KCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBv
bGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBt
X2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRl
bnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCku
c2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBS
ZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKK30KKworSW50
UmVjdCBQbHVnaW5WaWV3R3RrOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3Rh
cnQgYnkgY2xpcHBpbmcgdG8gb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2lu
ZG93UmVjdCk7CisgICAgCisgICAgLy8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlw
IHJlY3QgZnJvbSB0aGUgZW5jbG9zaW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRl
ckxheWVyKiBsYXllciA9IG1fZWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsK
KyAgICBGcmFtZVZpZXcqIHBhcmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXco
KTsKKyAgICBjbGlwUmVjdC5pbnRlcnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JM
YXllcihsYXllciwgdHJ1ZSkpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBt
X3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwg
bV93aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgaWYgKG1fd2lkZ2V0KSB7CisgICAgICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAg
ICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBtX3dp
bmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGd0a194dGJpbl9y
ZXNpemUobV93aWRnZXQsIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9
CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmIChtX2VsZW1lbnQtPmRvY3VtZW50KCktPnByaW50aW5nKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChyZWN0ICE9IGZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAg
V2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworCisgICAgaWYgKHBhcmVudCgpKQorICAg
ICAgICBpbml0KCk7CisKKyAgICB1cGRhdGVXaW5kb3coKTsKKyAgICBzZXROUFdpbmRvd1JlY3Qo
cmVjdCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QK
K3sKKyAgICBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpOworICAgIHVwZGF0ZVdpbmRvdygpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEZvY3VzKCkKK3sKKyAgICBXaWRnZXQ6OnNldEZv
Y3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2hvdygpCit7CisgICAgbV9pc1Zpc2li
bGUgPSB0cnVlOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIFdpZGdldDo6aGlk
ZSgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRp
YyBJbWFnZSogbnVsbFBsdWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAg
ICAgICBudWxsUGx1Z2luSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQ
bHVnaW4iKTsKKworICAgIEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZy
YW1lR2VvbWV0cnkoKS55KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbklt
YWdlLT5oZWlnaHQoKSk7CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lk
dGgoKSAtIGltYWdlUmVjdC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVH
ZW9tZXRyeSgpLmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFn
ZVJlY3QubW92ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNlY3Rz
KGltYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAg
ICBjb250ZXh0LT5jbGlwKHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShudWxsUGx1Z2luSW1hZ2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQp
IHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBw
YWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVk
IHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUgPSBO
UFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKwor
ICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExv
Y2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50
IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQgcGFzcyBpdCBvbiAq
LworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29kZSgpOyAgICAKKwor
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAgICAgICBucEV2ZW50
LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAwOworICAgIH0g
ZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQu
ZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAweDgwMDA7CisgICAg
fQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsK
KyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBF
dmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCisvL2V4dGVy
biBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGFuZGxl
TW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisK
KyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIG9uICovCisgICAgSW50UG9pbnQg
cCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJ
bnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIC8qCisgICAg
bnBFdmVudC5sUGFyYW0gPSBNQUtFTFBBUkFNKHAueCgpLCBwLnkoKSk7CisgICAgbnBFdmVudC53
UGFyYW0gPSAwOworCisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG5wRXZlbnQu
d1BhcmFtIHw9IE1LX0NPTlRST0w7CisgICAgaWYgKGV2ZW50LT5zaGlmdEtleSgpKQorICAgICAg
ICBucEV2ZW50LndQYXJhbSB8PSBNS19TSElGVDsKKworICAgIGlmIChldmVudC0+dHlwZSgpID09
IG1vdXNlbW92ZUV2ZW50IHx8CisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2VvdXRFdmVu
dCB8fCAKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW92ZXJFdmVudCkgeworICAgICAg
ICBucEV2ZW50LmV2ZW50ID0gV01fTU9VU0VNT1ZFOworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRv
bkRvd24oKSkKKyAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQ
YXJhbSB8PSBNS19MQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIE1pZGRsZUJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfTUJVVFRPTjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICAgICAgbnBFdmVudC53
UGFyYW0gfD0gTUtfUkJVVFRPTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCkg
eworICAgICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAw
OgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9ORE9XTjsKKworICAg
ICAgICAgICAgICAgIC8vIEZvY3VzIHRoZSBwbHVnaW4KKyAgICAgICAgICAgICAgICBtX3BhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5zZXRGb2N1c2VkTm9kZShtX2VsZW1lbnQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZl
bnQuZXZlbnQgPSBXTV9NQlVUVE9ORE9XTjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRP
TkRPV047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KGV2ZW50LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50KSB7CisgICAgICAgIHN3aXRjaCAoZXZlbnQt
PmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX0xCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTlVQ
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9OVVA7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuOworICAgICovCisKKyAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgLy8gQ3VycmVudGx5LCBXaWRnZXQ6
OnNldEN1cnNvciBpcyBhbHdheXMgY2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaW4gRXZlbnRI
YW5kbGVyLmNwcAorICAgIC8vIGFuZCBzaW5jZSB3ZSBkb24ndCB3YW50IHRoYXQgd2Ugc2V0IGln
bm9yZU5leHRTZXRDdXJzb3IgdG8gdHJ1ZSBoZXJlIHRvIHByZXZlbnQgdGhhdC4KKyAgICAvL2ln
bm9yZU5leHRTZXRDdXJzb3IgPSB0cnVlOyAgICAgCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV9wbHVnaW4gfHwgbV9pc1dp
bmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgp
KQorICAgICAgICBoYW5kbGVNb3VzZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgaGFu
ZGxlS2V5Ym9hcmRFdmVudChzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQorewor
ICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3Rh
cnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgp
KS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9
IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0
aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7
CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0
aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKwor
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKworICAg
ICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBB
U1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpzdGFydCgp
Cit7CisgICAgaWYgKG1faXNTdGFydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBB
U1NFUlQobV9wbHVnaW4pOworICAgIEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3
cCk7CisKKyAgICBOUEVycm9yIG5wRXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQ
bHVnaW5WaWV3KHRoaXMpOworICAgIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2Nr
cyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
Pm5ld3AoKE5QTUlNRVR5cGUpbV9taW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwg
bV9wYXJhbUNvdW50LCBtX3BhcmFtTmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOworICAgIH0K
KyAgICBQbHVnaW5WaWV3R3RrOjpzZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIGlmIChu
cEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9p
c1N0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1h
bnVhbGx5KSB7CisgICAgICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKyAg
ICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJH
RVQiKTsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwo
bV91cmwpOworICAgICAgICBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9wKCkKK3sK
KyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJl
ZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJl
ZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAg
Zm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFt
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAg
ICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJU
KG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworCisgICAgLy8gRGVzdHJv
eSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0
YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykK
K3sKKyAgICBzX2N1cnJlbnRQbHVnaW5WaWV3ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmll
d0d0ayogUGx1Z2luVmlld0d0azo6Y3VycmVudFBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBz
X2N1cnJlbnRQbHVnaW5WaWV3OworfQorCitzdGF0aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAg
IGNoYXIqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5s
ZW5ndGgoKSArIDEpKTsKKworICAgIHN0cm5jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5s
ZW5ndGgoKSArIDEpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJl
ZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAo
IXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBm
YXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94
eSogcHJveHksIEpTVmFsdWUqIHJlc3VsdCwgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFw
cm94eSB8fCAhcmVzdWx0IHx8IHJlc3VsdC0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIEpTTG9jayBsb2NrOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHkt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVz
dWx0LT50b1N0cmluZyhleGVjKTsKKyAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIAor
ICAgIHN0cmluZyA9IHVzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6cGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAg
ICBLVVJMIHJlcXVlc3RVUkwgPSByZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VS
ZXF1ZXN0KCkudXJsKCk7CisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZh
U2NyaXB0VVJMKHJlcXVlc3RVUkwpOworCisgICAgaWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7Cisg
ICAgICAgIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFt
ZUxvYWRSZXF1ZXN0KCksIDAsIGZhbHNlLCB0cnVlKTsKKworICAgICAgICAvLyBGSVhNRTogPHJk
YXI6Ly9wcm9ibGVtLzQ4MDc0Njk+IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1l
bnQgaGFzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmlj
YXRpb24oKSkgeworICAgICAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3M7CisgICAgICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1f
aW5zdGFuY2UsIHJlcXVlc3RVUkwuZGVwcmVjYXRlZFN0cmluZygpLnV0ZjgoKSwgTlBSRVNfRE9O
RSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUYXJnZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFs
bG93ZWQgb24gdGhlIGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisg
ICAgLy8gYW5kIHRoaXMgaGFzIGJlZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQo
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3Bh
cmVudEZyYW1lLT50cmVlKCktPmZpbmQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1l
TmFtZSgpKSA9PSBtX3BhcmVudEZyYW1lKTsKKyAgICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3Jp
cHQgY2FuIGNhdXNlIHRoZSBwbHVnaW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmcmFtZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVu
dEZyYW1lID0gIG1fcGFyZW50RnJhbWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRG
cmFtZS0+bG9hZGVyKCktPmV4ZWN1dGVTY3JpcHQoanNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygp
LCB0cnVlKTsKKworICAgIGlmIChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1l
KCkuaXNOdWxsKCkpIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAgICAgICBp
ZiAoIWdldFN0cmluZyhwYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRT
dHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJl
c3VsdFN0cmluZy51dGY4KCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9
IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1l
TG9hZFJlcXVlc3QoKS5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlv
bigpLCByZXF1ZXN0LT5ub3RpZnlEYXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0
YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAg
ICAgc3RyZWFtLT5zZW5kSmF2YVNjcmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2lu
Vmlld0d0az4qIHRpbWVyKQoreworICAgIEFTU0VSVCh0aW1lciA9PSAmbV9yZXF1ZXN0VGltZXIp
OworICAgIEFTU0VSVChtX3JlcXVlc3RzLnNpemUoKSA+IDApOworCisgICAgUGx1Z2luUmVxdWVz
dEd0ayogcmVxdWVzdCA9IG1fcmVxdWVzdHNbMF07CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7
CisgICAgCisgICAgLy8gU2NoZWR1bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJm
b3JtUmVxdWVzdCBzaW5jZSB0aGUgY2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBj
YXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVsZXRlZC4KKyAgICBpZiAobV9yZXF1ZXN0cy5z
aXplKCkgPiAwKQorICAgICAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAg
ICBwZXJmb3JtUmVxdWVzdChyZXF1ZXN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzY2hl
ZHVsZVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBtX3JlcXVlc3Rz
LmFwcGVuZChyZXF1ZXN0KTsKKyAgICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBm
cmFtZUxvYWRSZXF1ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEp
Cit7CisgICAgQVNTRVJUKGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1l
dGhvZCgpID09ICJHRVQiIHx8IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0
cE1ldGhvZCgpID09ICJQT1NUIik7CisKKyAgICBLVVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAgCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1VSTDsKKworICAgIFN0cmluZyB0YXJnZXQgPSBm
cmFtZUxvYWRSZXF1ZXN0LmZyYW1lTmFtZSgpOworCisgICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2lu
IHN0YXJ0IGFueSBsb2FkcyBpZiBpdCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRo
YXQgaXMgYmVpbmcgCisgICAgLy8gZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRo
ZSBzYW1lIGZyYW1lIGFzIHRoZSBwbHVnaW4uCisgICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpICE9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpICYmCisgICAgICAgICh0YXJnZXQuaXNOdWxsKCkgfHwgbV9wYXJlbnRG
cmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0
U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHVybCk7CisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkg
eworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3BhcmVudEZyYW1lLT5zZXR0aW5ncygp
OworICAgICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICAvLyBSZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBp
cyBkaXNhYmxlZC4gVGhpcyBpcyB3aGF0IE1vemlsbGEgZG9lcy4KKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5pc051bGwo
KSAmJiBtX21vZGUgPT0gTlBfRlVMTCkgeworICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYSBK
YXZhU2NyaXB0IHJlcXVlc3QgZnJvbSBhIHN0YW5kYWxvbmUgcGx1Zy1pbiB0aGF0IGlzIHNlbGYt
dGFyZ2V0dGVkCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoaXMgY2FuIGNhdXNlIHRoZSB1c2Vy
IHRvIGJlIHJlZGlyZWN0ZWQgdG8gYSBibGFuayBwYWdlICgzNDI0MDM5KS4KKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFqc1N0cmluZy5pc051bGwoKSB8fCAhdGFyZ2V0LmlzTnVsbCgpKSB7CisgICAgICAgIGlmICgh
anNTdHJpbmcuaXNOdWxsKCkgJiYgIXRhcmdldC5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50
cmVlKCktPmZpbmQodGFyZ2V0KSAhPSBtX3BhcmVudEZyYW1lKSB7CisgICAgICAgICAgICAvLyBG
b3Igc2VjdXJpdHkgcmVhc29ucywgb25seSBhbGxvdyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9u
IHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnLWluLgorICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgICAgIH0KKworICAgICAgICBQbHVnaW5SZXF1ZXN0
R3RrKiByZXF1ZXN0ID0gbmV3IFBsdWdpblJlcXVlc3RHdGsoZnJhbWVMb2FkUmVxdWVzdCwgc2Vu
ZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7CisgICAgICAgIHNjaGVkdWxlUmVxdWVzdChyZXF1
ZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBQbHVnaW5TdHJlYW0qIHN0cmVhbSA9IG5ldyBQ
bHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKSwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSwgcGx1Z2luKCktPnBsdWdp
bkZ1bmNzKCksIGluc3RhbmNlKCksIG1fcXVpcmtzKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChz
dHJlYW0pOworCisgICAgICAgIHN0cmVhbS0+c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
TlBFUlJfTk9fRVJST1I7Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFz
ZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0
cmluZyB1cmxTdHJpbmcgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJM
U3RyaW5nKTsKKworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5n
LnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKwor
ICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2lu
Vmlld0d0azo6Z2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVx
dWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1f
YmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVl
LCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3Qg
Y2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZUxvYWRSZXF1ZXN0OworCisgICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFy
Z2V0KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRo
b2QoIkdFVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJM
KG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJl
cXVlc3QsIGZhbHNlLCAwKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFu
a0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5z
aXplKCkgPiAwICYmIGJ1ZmZlclswXSA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBs
b2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7
CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoIC0gNDsgaSsrKSB7CisgICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRz
ICJcblxuIi4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09
ICdcbicpCisgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhl
IGZpcnN0IGxpbmUuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAx
XSA9PSAnXG4nKSB7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAy
KQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNb
aV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQg
c2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09
ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJc
clxuXHJcbiIgKDM3NTgxMTMpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBj
aGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMK
KyAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNl
IExGCisgICAgLy8gaW5zdGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBj
b21iaW5hdGlvbgorICAgIC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBz
byBmaW5kRU9MIG5lZWRzCisgICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93
IGFjY2VwdCBDUkxGLCBMRiBvcgorICAgIC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJu
cyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBw
b2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAn
XG4nKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ld
ID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZm
ZXIgYm91bmRzCisgICAgICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywg
d2FpdCBmb3IKKyAgICAgICAgICAgIC8vIG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsg
MSA9PSBsZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVy
biBieXRlcyArIGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh
dGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAg
ICBTdHJpbmcgcmVzdWx0OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVu
Z3RoKCk7IGkrKykgeworICAgICAgICBVQ2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXpl
Q2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAg
ICAgYyA9IHRvdXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hh
cmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAg
YyA9IHRvbG93ZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1l
W2ldOworCisgICAgICAgIGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxp
emVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXpl
Q2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFy
c2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAg
Y29uc3QgY2hhciogZW9sOworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAg
aGVhZGVyRmllbGRzOworCisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3Qg
dGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3
aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsK
KyAgICAgICAgCisgICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0
aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVv
bCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQor
ICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBh
IHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAg
ICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2Un
cmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8v
IENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFz
dEtleS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGln
bm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBv
ZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1
ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5l
d1ZhbHVlID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsK
KworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVl
ICsgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247Cisg
ICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBl
b2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBt
YWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0g
Y2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0
aW4xKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQn
KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAg
ICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7
CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCAr
PSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVn
aW5WaWV3R3RrOjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0
LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0
YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAo
IXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFN
OworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhl
YWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAg
ICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5n
Ojpmcm9tTGF0aW4xKGJ1ZiwgbGVuKTsKKworICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0
aCgiZmlsZTovLy8iKSkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5n
KDgpOworCisgICAgICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVz
dCAoKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElT
VFMgfCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7CisKKwkvL0ZJWE1FIC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVm
ZmVyCisgICAgICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5k
YXRhKCksICJyIik7CisgICAgICAgIAorICAgICAgICBpZiAoZmlsZUhhbmRsZSA9PSBOVUxMKQor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgICAgIC8vYnVm
ZmVyLnJlc2l6ZSgpOworCisgICAgICAgIGludCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0
YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAgICAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisK
KyAgICAgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJ
TEVfTk9UX0ZPVU5EOworCisJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCks
IGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5k
YXRhKCk7CisgICAgaW50IHBvc3REYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAg
ICBpZiAoYWxsb3dIZWFkZXJzKSB7CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1
ZmZlcikpIHsKKyAgICAgICAgICAgIHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxl
bmd0aC0tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9j
YXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRp
b24gIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21l
d2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0
aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFk
ZXJGaWVsZHMoYnVmZmVyLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0
YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8v
IFNvbWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMg
d2hlbiB0aGV5IHBvc3QsCisgICAgICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9l
cyBub3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAg
ICAgICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBs
ZW5ndGguCisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVs
ZHMuZ2V0KCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50
TGVuZ3RoLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNv
bnRlbnRMZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBo
ZWFkZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAg
cG9zdERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBk
YXRhTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VV
UkwsIHVybCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRU
UEhlYWRlckZpZWxkcyhoZWFkZXJGaWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoUGFzc1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRh
KHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZy
YW1lTmFtZSh0YXJnZXQpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2Vu
ZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
cG9zdFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMy
IGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sK
KyAgICByZXR1cm4gaGFuZGxlUG9zdCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlm
eURhdGEsIHRydWUsIHRydWUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNo
YXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxv
dyBoZWFkZXJzIHRvIGJlIHNwZWNpZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZp
bGUuCisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAw
LCBmYWxzZSwgZmlsZSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5Q
TUlNRVR5cGUgdHlwZSwgY29uc3QgY2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7Cit9CisKK2ludDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3Ry
ZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9pZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3Ig
UGx1Z2luVmlld0d0azo6ZGVzdHJveVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiBy
ZWFzb24pCit7CisgICAgUGx1Z2luU3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8
UGx1Z2luU3RyZWFtKj4oc3RyZWFtLT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVn
aW5TdHJlYW06Om93bmVyRm9yU3RyZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfSU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3RyZWFt
LT5jYW5jZWxBbmREZXN0cm95U3RyZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworfQorCitjb25zdCBjaGFyKiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAg
IGlmIChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkp
CisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50
LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigp
LT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgp
OworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQor
eworICAgIFN0cmluZyBzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsK
KworICAgIGlmIChQYWdlKiBwYWdlID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKwor
TlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpCisgICAgICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogeworICAgICAgICAg
ICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVl
ID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTihtX3dpZGdldCktPnh0
Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5WVG9vbGtp
dDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2
YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkg
PSAwOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVl
KSA9IHRydWU7CisjZWxzZQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9
IGZhbHNlOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAg
TlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1Njcmlw
dE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0
byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dT
Y3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2Ny
aXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAg
ICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBO
VlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNj
cmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUo
YXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVu
dC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9i
amVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBP
YmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJl
IHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJv
amVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlw
dE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRP
YmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAg
ICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6
IHsKKyAgICAgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7
CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgICAgICAgICAgKigoWElEICopdykgPSBH
REtfV0lORE9XX1hXSU5ET1coR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cp
OworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorICAgICAgICAgICAgKigoSFdO
RCAqKXcpID0gR0RLX1dJTkRPV0lOR19IV05EKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygp
KS0+d2luZG93KTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUo
TlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFi
bGUpIHsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1f
aXNXaW5kb3dlZCA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICBjYXNlIE5QUFZwbHVnaW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBtX2lz
VHJhbnNwYXJlbnQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkg
eworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJ
bnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQs
IHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChy
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJl
Z2lvbikKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAv
KiBGSVhNRSAtIEludmFsaWRhdGUgdGhlIHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChH
ZXRSZ25Cb3gocmVnaW9uLCAmcikgPT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAg
ICovCit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmICht
X2lzV2luZG93ZWQpCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3dpZGdldCk7Cisg
ICAgZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChjb250YWlu
aW5nV2luZG93KCkpKTsKK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIFBsdWdpblZpZXdH
dGs6OmJpbmRpbmdJbnN0YW5jZSgpCit7CisgICAgTlBPYmplY3QqIG9iamVjdCA9IDA7CisKKyAg
ICBpZiAoIW1fcGx1Z2luIHx8ICFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1f
cGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2Ny
aXB0YWJsZU5QT2JqZWN0LCAmb2JqZWN0KTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBF
UlJfTk9fRVJST1IgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8
S0pTOjpCaW5kaW5nczo6Um9vdE9iamVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJv
b3RPYmplY3QodGhpcywgbV9wYXJlbnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0
KCkpOworICAgIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlOjpjcmVhdGVCaW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZTo6Q0xhbmd1YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAg
IF9OUE5fUmVsZWFzZU9iamVjdChvYmplY3QpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQor
CitQbHVnaW5WaWV3R3RrOjp+UGx1Z2luVmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisgICAg
ZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFy
YW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVl
cywgbV9wYXJhbUNvdW50KTsKKworICAgIGlmICghbV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNfV0lE
R0VUKG1fd2lkZ2V0KSkKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsKKyAg
ICBtX3dpbmRvdyA9IDA7CisgICAgc2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAgbV9wYXJlbnRG
cmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9w
bHVnaW4gJiYgIShtX3F1aXJrcy5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4p
KSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OmRpc2Nvbm5lY3RTdHJlYW0oUGx1Z2luU3RyZWFtKiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1f
c3RyZWFtcy5jb250YWlucyhzdHJlYW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFt
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKK3sKKyAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2lu
ZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgIGlm
IChtaW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7CisgICAgICAg
IG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1f
cXVpcmtzLmFkZChQbHVnaW5RdWlya1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAg
ICB9CisKKyAgICAvLyBUaGUgV01QIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBO
UFBfU2V0V2luZG93IGNhbGwgYW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8g
Y2FsbCBTZXRXaW5kb3cgd2hlbiB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisg
ICAgaWYgKG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2lu
LT5uYW1lKCkuY29udGFpbnMoIldpbmRvd3MgTWVkaWEiKSkgeworICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2lu
ZG93bGVzcyBtb2RlIGRvZXMgbm90IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28g
anVzdCByZW1vdmUgdGhhdCBwYXJhbWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0
IHRvIHRoZSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVX
aW5kb3dsZXNzVmlkZW9QYXJhbSk7CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNl
dHMgaXRzIHNpemUgb24gdGhlIGZpcnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBk
YXRlcyBpdHMgc2l6ZSwgc28KKyAgICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4g
dmlldyBoYXMgYSBjb3JyZWN0IHNpemUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2Rpdngi
KQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2Fs
bCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBp
biBvdXIgTlBSdW50aW1lIGJpbmRpbmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8v
IE5QT2JqZWN0IGFuZCBwYXNzZXMgaXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0
byBzZWUgd2hhdCByb290IG9iamVjdCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8g
VGh1cywgd2UgZG9uJ3Qga25vdyB0aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVk
IHdoZW4gdGhlIHBsdWctaW4gaW5zdGFuY2UgZ29lcyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjov
L3Byb2JsZW0vNTQ4Nzc0Mj4uCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNp
bHZlcmxpZ2h0IikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBs
dWdpbik7CisKKyAgICAvLyBQcmV2ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhl
IFdpbmRvdyBQcm9jIHJlY3Vyc2l2ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4K
KyAgICBpZiAobWltZVR5cGUgPT0gImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAg
ICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdl
UmVjdXJzaXZlbHkpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcykKK3sKKyAgICBBU1NFUlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMu
c2l6ZSgpKTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1
bnNpZ25lZCBwYXJhbUNvdW50ID0gMDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9w
YXJhbVZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihj
aGFyKikgKiBzaXplKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7CisgICAgICAgICBpZiAoKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2lu
ZG93bGVzc1ZpZGVvUGFyYW0pKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAi
d2luZG93bGVzc3ZpZGVvIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3Bh
cmFtTmFtZXNbcGFyYW1Db3VudF0gPSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOwor
ICAgICAgICBtX3BhcmFtVmFsdWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJh
bVZhbHVlc1tpXSk7CisKKyAgICAgICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFy
YW1Db3VudCA9IHBhcmFtQ291bnQ7Cit9CisKK1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGso
RnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3Rr
KiBwbHVnaW4sIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdp
bihwbHVnaW4pCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fcGFyZW50RnJhbWUo
cGFyZW50RnJhbWUpCisgICAgLCBtX2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkK
KyAgICAsIG1fYmFzZVVSTChtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9w
YXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdp
blN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQ
bHVnaW5WaWV3R3RrOjpyZXF1ZXN0VGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQor
ICAgICwgbV9wYXJhbVZhbHVlcygwKQorICAgICwgbV9pc1dpbmRvd2VkKHRydWUpCisgICAgLCBt
X2lzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1f
aGF2ZUluaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1fbGFzdE1l
c3NhZ2UoMCkKKyAgICAsIG1fbG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFu
dWFsU3RyZWFtKDApCisgICAgLCBtX3dpZGdldCgwKQorICAgICwgbV9uZWVkc1hFbWJlZChmYWxz
ZSkKK3sKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3Rh
dHVzQ2FuTm90RmluZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5z
dGFuY2UgPSAmbV9pbnN0YW5jZVN0cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7
CisKKyAgICBtX21pbWVUeXBlID0gbWltZVR5cGUudXRmOCgpOworICAgIGRldGVybWluZVF1aXJr
cyhtaW1lVHlwZSk7CisKKyAgICBzZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
KTsKKworICAgIG1fbW9kZSA9IG1fbG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVEOwor
CisgICAgcmVzaXplKHNpemUpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmluaXQoKQorewor
ICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZUlu
aXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJU
KG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAgIG1fcGx1
Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2lu
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFydCgpKSB7CisgICAgICAg
IG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisg
ICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBW
cGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgbV93aWRnZXQg
PSBndGtfc29ja2V0X25ldygpOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZy
YW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSwgbV93aWRnZXQpOworICAgICAgICBzZXRH
dGtXaWRnZXQobV93aWRnZXQpOworICAgIH0gZWxzZQorICAgICAgICBtX3dpZGdldCA9IGd0a194
dGJpbl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5k
b3coKSktPndpbmRvdywgTlVMTCk7CisjZWxzZQorICAgIG1fd2lkZ2V0ID0gZ2RrX3NvY2tldF9u
ZXcoKTsKKyAgICBndGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRh
aW5pbmdXaW5kb3coKSwgbV93aWRnZXQpOworICAgIHNldEd0a1dpZGdldChtX3dpZGdldCk7Cisj
ZW5kaWYKKyAgICBndGtfd2lkZ2V0X3Nob3cgKG1fd2lkZ2V0KTsKKworI2lmIGRlZmluZWQoR0RL
X1dJTkRPV0lOR19YMTEpCisgICAgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCogd3MgPSBnX25l
dzAoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCwgMSk7CisKKyAgICB3cy0+dHlwZSA9IDA7CisK
KyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICB3cy0+ZGlzcGxheSA9IEdES19XSU5E
T1dfWERJU1BMQVkobV93aWRnZXQtPndpbmRvdyk7CisgICAgICAgIHdzLT52aXN1YWwgPSBHREtf
VklTVUFMX1hWSVNVQUwoZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2lk
Z2V0LT53aW5kb3cpKSk7CisgICAgICAgIHdzLT5kZXB0aCA9IGdka19kcmF3YWJsZV9nZXRfdmlz
dWFsKEdES19EUkFXQUJMRShtX3dpZGdldC0+d2luZG93KSktPmRlcHRoOworICAgICAgICB3cy0+
Y29sb3JtYXAgPSBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdka19kcmF3YWJsZV9nZXRfY29sb3Jt
YXAoR0RLX0RSQVdBQkxFKG1fd2lkZ2V0LT53aW5kb3cpKSk7CisgICAgICAgIG1fd2luZG93ID0g
R0RLX1dJTkRPV19YV0lORE9XKG1fd2lkZ2V0LT53aW5kb3cpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRkaXNwbGF5OworICAgICAg
ICB3cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHR2aXN1YWw7Cisg
ICAgICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7
CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0
Y29sb3JtYXA7CisgICAgICAgIG1fd2luZG93ID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5k
b3c7CisKKyAgICAgICAgWEZsdXNoICh3cy0+ZGlzcGxheSk7CisgICAgfQorCisgICAgbV9ucFdp
bmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisg
ICAgbV93aW5kb3cgPSBHREtfV0lORE9XX0hXTkQobV93aWRnZXQtPndpbmRvdyk7CisjZW5kaWYK
KworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBX
aW5kb3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dp
bmRvdzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAg
IGlmICghKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0Nh
bGwpKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBt
X3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCit7CisgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0
cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFt
ZS0+bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDAs
IHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgbV9t
YW51YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFudWFsU3RyZWFt
LT5kaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBsdWdpblZpZXdH
dGs6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAg
QVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVj
ZWl2ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRG
aW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9t
YW51YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9t
YW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZUd0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJp
bmcuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVn
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZUd0azo6flBsdWdpblBh
Y2thZ2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK1BsdWdpblBhY2th
Z2VHdGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3Qm
IGxhc3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xvYWRDb3Vu
dCgwKQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0
TW9kaWZpZWQobGFzdE1vZGlmaWVkKQoreworICAgIGludCBwb3MgPSBtX3BhdGguZGVwcmVjYXRl
ZFN0cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmlsZU5hbWUgPSBtX3BhdGgucmlnaHQo
bV9wYXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3Rr
OjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dldE1JTUVEZXNjcmlwdGlvbigpOwor
ICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykgewor
ICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6Iiwg
Myk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtaW1l
RGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURh
dGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07IGorKykKKyAgICAgICAgICAgIGV4
dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRlbnNpb25zW2pdKSk7CisKKyAgICAg
ICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAg
ICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7CisK
KyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAgICAgICAgZ19zdHJmcmVldihtaW1l
RGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURlc2NzKTsKKworICAgIGNoYXIqIGJ1
ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2lu
TmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBtX05Q
UF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIpOworICAg
IGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fZGVzY3JpcHRpb24gPSBidWZm
ZXI7CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5Q
YWNrYWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xv
YWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9
IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NB
TCk7CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9p
c0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXpl
OworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJO
UF9Jbml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6ZSk7CisgICAgZ19tb2R1bGVfc3lt
Ym9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIiwgKHZvaWQqKikmbV9OUF9HZXRN
SU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1NodXRk
b3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21v
ZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmbV9OUFBfR2V0VmFsdWUpOworCisgICAgaWYg
KCFOUF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVEZXNjcmlwdGlvbiB8fCAhbV9OUFBfU2h1
dGRvd24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbWVt
c2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1
Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIG1fYnJvd3NlckZ1
bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52
ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBO
UE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNz
LndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBO
UE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVz
OworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93
c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVt
ZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01l
bUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1
Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5
OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZh
bGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZh
bGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3Mu
Zm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2
YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0g
TlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3Rh
dGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bw
b3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9i
cm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0g
X05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVu
dGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50
aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1
bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1f
YnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJv
d3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3Nl
ckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2Vy
RnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVm
YXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9
IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dl
dFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9w
ZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJv
cGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1f
YnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJv
d3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisgICAgbnBFcnIgPSBOUF9J
bml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworICAgIGlmIChucEVy
ciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENv
dW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0
ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1
bmxvYWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX05QUF9TaHV0
ZG93bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
UGFja2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2Fk
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAg
ICBBU1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVfY2xvc2UgKG1fbW9kdWxlKTsKKwor
ICAgIG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luUGFj
a2FnZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYg
bGFzdE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBuZXcgUGx1
Z2luUGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOworCisgICAgaWYgKCFwYWNrYWdlLT5m
ZXRjaEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2FnZTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOworfQorCit1bnNpZ25lZCBQbHVnaW5Q
YWNrYWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0g
eworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFzdE1vZGlmaWVk
CisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJl
dF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2Yo
VUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjplcXVhbChjb25zdCBQbHVnaW5Q
YWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKQoreworICAgIHJldHVybiBh
Lm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsg
dGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q
LQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioq
KiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4w
L0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0
byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5z
ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgK
KyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
CisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAq
IFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9u
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVm
aW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1
ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxY
MTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisj
aWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19F
WFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JU
Xyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQor
I2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19j
cGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRl
ZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQ
RV9YVEJJTiAgICAgICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IEdUS19YVEJJTihvYmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChH
VEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5l
IEdUS19JU19YVEJJTihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19D
TEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVu
dDsKKworc3RydWN0IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0
CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxk
X3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsK
KyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2lu
ZG93OworfTsKKworc3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0
OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRp
c3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAg
ICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAg
ICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJ
IHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0
cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9
OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7
CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFy
ZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0
YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtY
VEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3
aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0
aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFn
ZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9j
ZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMg
KmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8K
KyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAg
CisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7
ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisg
ICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRn
ZXQncyBDbGFzc1JlYyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAg
ICAgICAgLyogcGFyZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFt
ZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVh
cmtpZmllZCAgICovCisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyog
bWFya2VkIGZvciBkZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3Qg
IGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVk
ICovCisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWlu
dCByZWNvcmQgICAgICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAg
ICAgICAgICAgICAgLyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAg
RGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMg
ICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAg
ICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAg
ICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/
ICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMg
d2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFu
Y2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICov
CisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBl
dmVudCBkaXNwYXRjaGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAg
ICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRU
cmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRp
b25zICAgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAg
Lyogd2luZG93IGJvcmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAg
ICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAg
ICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBv
ZiBwb3B1cHMgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9w
b3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisg
ICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNl
IG5hbWUgICAgICAgICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAg
ICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3Jt
YXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyog
d2luZG93IElEICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAg
IGRlcHRoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAg
ICovCisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJh
Y2tncm91bmQgcGl4ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91
bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAg
Qm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBh
bmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFn
ZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0Owor
Cit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0g
V2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAv
KiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdHdGtfSAorI2RlZmluZSBQbHVn
aW5WaWV3R3RrX0gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW0uaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdl
dC5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgPGd0ay9ndGt3
aWRnZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFjZSBC
aW5kaW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgc3Ry
dWN0IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFz
cyBNb3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0
azsKKyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrOworICAgIGNsYXNzIFBsdWdpblN0cmVhbTsK
KyAgICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Cisg
ICAgCisgICAgZW51bSBQbHVnaW5TdGF0dXMgeworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RG
aW5kUGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAg
ICBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1
Z2luVmlld0d0ayA6IHB1YmxpYyBXaWRnZXQsIHByaXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVh
bGx5KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld0d0aygpOworCisgICAgICAgIFBsdWdp
blBhY2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9Cisg
ICAgICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAg
ICAgICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRp
YyBQbHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2luVmlldygpOworCisgICAgICAgIEtKUzo6Qmlu
ZGluZ3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0
dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgICAgICAvLyBOUE4g
ZnVuY3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBn
ZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVy
cm9yIHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEp
OworICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAg
ICBOUEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwg
TlBTdHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFt
LCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVh
bShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOworICAgICAgICBjb25zdCBjaGFy
KiB1c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7
CisgICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZh
bHVlKTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9p
ZCogdmFsdWUpOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworICAgICAgICB2b2lkIGZvcmNlUmVk
cmF3KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSopOwor
ICAgICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0p
IHsgZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0
aW9ucworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0
Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50
UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXZlbnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3
Kik7CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
KyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Cisg
ICAgICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQg
c3RvcCgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5W
aWV3R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jiwg
Ym9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJv
ciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBz
ZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVn
aW5QYWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OworICAg
ICAgICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAg
ICAgICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VSTCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdp
blN0YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3Rz
OworCisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAg
ICAgICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZv
aWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGlt
ZXI8UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVX
aW5kb3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNv
dW50OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJh
bVZhbHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcg
bV91c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1f
aW5zdGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAg
SGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9y
PFBsdWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIFBsdWdpblF1aXJrU2V0
IG1fcXVpcmtzOworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lz
VHJhbnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9pc1Zpc2libGU7CisgICAgICAgIGJvb2wgbV9o
YXZlSW5pdGlhbGl6ZWQ7CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgICAgICBYSUQg
bV93aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworI2VuZGlmCisjaWZkZWYgR0RLX1dJ
TkRPV0lOR19XSU4zMgorCUhXTkQgbV93aW5kb3c7CisjZW5kaWYKKyAgICAgICAgbXV0YWJsZSBJ
bnRSZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dl
ZCBwbHVnLWluCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3
aW5kb3cgcmVjdC4KKworICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNzYWdlOworCisgICAgICAg
IGJvb2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IG1fbWFu
dWFsU3RyZWFtOworCisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVn
aW5WaWV3OworCisgICAgICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9u
ZWVkc1hFbWJlZDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3Jh
LCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2Fn
ZUd0a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5o
PgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJu
cGZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0
aWFsaXplRnVuY1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAg
Y2xhc3MgUGx1Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VH
dGs+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAg
IHN0YXRpYyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmls
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlN
RVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X21pbWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFw
JiBtaW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9
CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBi
KTsKKworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAg
ICAgdm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdp
bkZ1bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsK
KworICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKwor
ICAgICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAg
ICAgICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAg
ICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBN
SU1FVG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxl
KiBtX21vZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisgICAgICAgIE5Q
X0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAg
ICAgIE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAgICAgIE5QUF9HZXRW
YWx1ZVByb2NQdHIgbV9OUFBfR2V0VmFsdWU7CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVn
aW5GdW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworICAgIH07
CisKKyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFz
aCgpOyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGlu
dCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihh
KSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYSwgY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlR3RrOjpl
cXVhbCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVn
IGluIFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0
aW9uIGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRv
IGRvIHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3Bh
Y2UgV1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJD
b3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luUGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVm
UHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAg
ICAgICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBIYXNoOworICAgICAg
ICB0eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAgIH07Cit9CisKKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ludGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2lu
IHZpZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBs
dWctaW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBh
IE5VTEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWlu
IHZpZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBj
dXJyZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5W
aWV3R3RrOjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBh
bmQgU2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdl
bnQgd2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlld0d0ayogcGx1Z2luVmll
d0Zvckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFu
Y2UtPm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KGlu
c3RhbmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5W
aWV3KCk7Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1
cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAg
ICBmcmVlKHB0cik7Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2godWludDMyIHNpemUpCit7Cisg
ICAgLy8gRG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVn
aW5zKE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdl
cyk7Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0
ZVJhbmdlKiByYW5nZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9
CisKK05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBw
bHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQs
IG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmll
d0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJv
ciBOUE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBO
UEJvb2wgZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5Q
Tl9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRh
cmdldCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2lu
dDMyIE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwg
dm9pZCogYnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJv
eVN0cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikK
K3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0
cmVhbShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQ
IGluc3RhbmNlKQoreworICAgIFBsdWdpblZpZXdHdGsqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5z
dGFuY2UoaW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBO
X1VzZXJBZ2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1
bmN0aW9uIQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRo
b3V0IGhhdmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0
dXJuIDA7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9T
dGF0dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHBsdWdpblZp
ZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5f
SW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQoreworICAg
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRS
ZWN0KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVn
aW9uIGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VS
ZWRyYXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5j
ZSktPmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5j
ZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHJldHVybiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOwor
fQorCitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlh
YmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2
YUVudigpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCog
TlBOX0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAg
IHJldHVybiAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5z
dGFuY2UsIE5QQm9vbCBlbmFibGVkKQoreworfQorCit2b2lkCitOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVt
YmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3
aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioq
KioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vu
c2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25z
IHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUg
WEVNQkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUg
T3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMg
Y3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgor
ICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENv
bnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IK
KyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3Ig
bGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0
aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFi
b3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEws
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNp
b24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwg
b3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisg
KiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgor
ICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNz
YWdlcyAqLworI2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZp
bmUgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5E
T1dfREVBQ1RJVkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAg
ICAgICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVm
aW5lIFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9D
VVNfTkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAg
ICAgICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2Rl
ZmluZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01P
REFMSVRZX09OICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAg
ICAgICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJF
RF9HVEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JB
Ql9LRVkgICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAq
LworI2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVN
QkVEX0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNU
ICAgICAgICAgICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5l
IFhFTUJFRF9NQVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
bHVnaW5EYXRhYmFzZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKQor
eworICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZUd0ayogcGx1Z2lucyA9IDA7CisgICAgCisgICAg
aWYgKCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VHdGs7
CisgICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlR3RrOjpkZWZh
dWx0UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICB9CisK
KyAgICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZUd0azo6YWRkRXh0
cmFQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhzLmFw
cGVuZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6
OnJlZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9vbCBw
bHVnaW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBs
dWdpbnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlmICgh
bV9wbHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xl
YXIoKTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOwor
CisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQo
KTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lu
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQu
cmVtb3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAg
ICAgICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5k
KCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNU
b1VubG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMu
cmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVuZCA9
IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAg
bV9wbHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2lu
c1RvVW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5T
ZXRDaGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJlZ2lz
dGVyIHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0
IE1JTUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBtYXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBm
b3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCkt
Pm1pbWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9p
dCkgeworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOworfQor
CitWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5zKCkg
Y29uc3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IHJlc3VsdDsKKworICAgIFBs
dWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAo
UGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlR3RrOjpnZXRQbHVnaW5z
SW5QYXRocygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBp
bnNlbnNpdGl2ZSBzZXQuCisgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKKyAg
ICBQbHVnaW5TZXQgcGx1Z2luczsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbigoaXQtPnV0ZjgoKSkuZGF0YSgpLCAw
LCBOVUxMKTsKKyAgICAgICAgaWYgKGRpcikgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZTsKKyAgICAgICAgICAgIHdoaWxlICgobmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSkgewor
ICAgICAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfc3VmZml4KG5hbWUsICIuIiBHX01PRFVMRV9T
VUZGSVgpKSB7CisgICAgICAgICAgICAgICAgICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfYnVpbGRf
ZmlsZW5hbWUoKGl0LT51dGY4KCkpLmRhdGEoKSwgbmFtZSwgTlVMTCk7CisgICAgICAgICAgICAg
ICAgICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3Rr
OjpjcmVhdGVQYWNrYWdlKGZpbGVuYW1lLCB0aW1lKE5VTEwpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHBsdWdpblBhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zLmFk
ZChwbHVnaW5QYWNrYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnX2Rpcl9jbG9z
ZShkaXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0
YXRpYyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYg
dmVyc2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWdu
ZWQgc3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAo
c3RhcnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9z
ID0gc3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQor
ICAgICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0
cmluZ1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
bnQgdmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBl
bmRQb3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lv
bkNvbXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKwor
ICAgIHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9u
QSBpcyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJz
aW9ucyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJz
aW9uQikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJz
aW9uQltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBjb21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25C
IGhhcyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdp
blBhdGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBwYXRo
OworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBwYXRoID0gZ19idWlsZF9m
aWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOwor
ICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBnX2ZyZWUocGF0aCk7CisjZWxpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfV0lOMzIpCisgICAgcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRf
aG9tZV9kaXIoKSwgIkFwcGxpY2F0aW9uIERhdGEiLCAiTW96aWxsYSIsICJwbHVnaW5zIiwgTlVM
TCk7CisgICAgcGF0aHMuYXBwZW5kKHBhdGgpOworICAgIGdfZnJlZShwYXRoKTsKKyNlbmRpZgor
CisgICAgY29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7
CisgICAgaWYgKG1velBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ry
c3BsaXQobW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVn
aW5QYXRoc1tpXTsgaSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ld
KTsKKworICAgICAgICBnX3N0cmZyZWV2KHBsdWdpblBhdGhzKTsKKyAgICB9CisKKyNpZiBkZWZp
bmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgIHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKEdfRElS
X1NFUEFSQVRPUl9TICJ1c3IiLCAibG9jYWwiLCAibGliIiwgIm1vemlsbGEiLCAicGx1Z2lucyIs
IE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBnX2ZyZWUgKHBhdGgpOworICAg
IHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9TICJ1c3IiLCAibGliIiwg
Im1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAg
ICBnX2ZyZWUgKHBhdGgpOworICAgIHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFS
QVRPUl9TICJ1c3IiLCAibGliIiwgImJyb3dzZXIiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBh
dGhzLmFwcGVuZChwYXRoKTsKKyAgICBnX2ZyZWUocGF0aCk7CisjZW5kaWYKKworICAgIHJldHVy
biBwYXRoczsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6aXNNSU1FVHlwZVJlZ2lzdGVy
ZWQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1pbWVUeXBl
LmlzTnVsbCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSk7Cit9
CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5Gb3JNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5s
b3dlcigpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMu
ZW5kKCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rl
c2NyaXB0aW9ucygpLmNvbnRhaW5zKGtleSkpCisgICAgICAgICAgICByZXR1cm4gKCppdCkuZ2V0
KCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdp
bkRhdGFiYXNlR3RrOjpwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24p
Cit7CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7
CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CisK
KyAgICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0
ID0gKCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5k
OyArK21pbWVfaXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNp
b25zID0gbWltZV9pdC0+c2Vjb25kOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleHRl
bnNpb25zW2ldID09IGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqaXQp
LmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpmaW5kUGx1Z2luKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sgICAKKyAgICBQbHVnaW5Q
YWNrYWdlR3RrKiBwbHVnaW4gPSAwOworCisgICAgaWYgKCFtaW1lVHlwZS5pc051bGwoKSkKKyAg
ICAgICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgIAorICAgIGlm
ICghcGx1Z2luKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKKyAgICAgICAg
U3RyaW5nIGV4dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQoJy4nKSAr
IDEpOworCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvckV4dGVuc2lvbihleHRlbnNpb24pOwor
CisgICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IHhk
Z21pbWUgZm9yIHRoZSBtaW1lIHR5cGUgCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGV4dGVuc2lvbi4KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luOworfQorCitQbHVnaW5WaWV3
R3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJh
bWUsIGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkp
Cit7CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVU
eXBlKTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0
aGUgZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYmIHJlZnJl
c2goKSkKKyAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlKTsKKyAgICAg
ICAgCisgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3R3RrKHBhcmVudEZyYW1lLCBzaXplLCBwbHVn
aW4sIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2Fk
TWFudWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk0MSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFi
cy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlm
dHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq
KioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAq
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRo
ZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERl
dmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5j
LgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHly
aWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBl
aXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAo
dGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQK
KyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBH
UEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUg
eW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUg
cHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BM
IG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisg
CisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0
byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisjdW5kZWYg
R1RLX0RJU0FCTEVfREVQUkVDQVRFRAorCisjaW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAi
Z3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
cHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5
cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+
CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVk
ZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVu
Y29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRn
ZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisK
KyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0
a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAg
ICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7Citz
dGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAg
ICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAg
ICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194
dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAg
ICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOwor
CisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0
ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Ns
aWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVu
dF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9j
bGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAg
eHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0
UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Ns
aWVudF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQg
KmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0
IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1
c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsg
CitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0
UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2Fn
ZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u
ZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGlt
ZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRp
c3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZl
bnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQg
ICAgICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Io
dm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAq
LCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9
IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3Rh
dGljIERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAg
ICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2lu
aXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9
IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMg
Z2ludCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAg
ICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAo
R1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1l
b3V0KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNr
ID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1
cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sg
KEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAg
aWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsK
KyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAo
KTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFW
RSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50
X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdT
b3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJf
ZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0g
MDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisK
KyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFm
ZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0
IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NF
dmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAq
IHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxs
YmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9F
VkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZl
bnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAg
cmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9
IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rp
c3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15
TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGlt
ZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsK
KyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlz
cGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRp
b25Db250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2
ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0
YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRo
aXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4u
IFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0
aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdv
cmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICov
CisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0
QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5
cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5f
dHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3Rr
VHlwZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAg
ICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAor
ICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAg
IChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVk
XzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3Rr
Q2xhc3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlw
ZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJu
IHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3Rr
WHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7Cisg
IEd0a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5
cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdF
VF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVh
bGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOwor
CisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2Ns
YXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtf
eHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVM
TDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAw
OworICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0
a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4
dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9Owor
ICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVm
IERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYK
KworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0Ymlu
ID0gR1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJl
Zm9yZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRf
d2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAg
YWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdl
dCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFs
IGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRi
aW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0g
d2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6
ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0
KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2Ny
ZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19T
T0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndp
ZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxk
X3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVh
dGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0
X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitH
dGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmlu
ZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisg
IGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAo
R1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQq
KU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUg
dGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93
OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklT
VUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hD
T0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3Vh
bCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAg
LyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAg
ICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigi
Z3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5k
aWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7Cisg
IH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlz
IGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdl
dHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0
IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBsb29wLgorICAgICAqLworCisgICAgLyog
dGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAq
LworICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9m
KEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
IH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVO
VFMpOworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0g
Z19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAg
ICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251
bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50
X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19J
T19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlz
IHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5D
b250ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3Bv
bGxfZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7Cisg
ICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1l
cnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgy
NSwKKyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190
aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisK
KyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAv
KiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNs
aWVudC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdF
VCh4dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRi
aW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJp
bikpOworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJp
bl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sK
KyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVB
TElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+
d2luZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3
aWRnZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAq
eHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsK
KworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAl
ZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4t
PmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lk
IEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lk
dGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRB
cmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53
aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQs
IGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhl
IHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRp
b24ueCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlv
bi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVp
Z2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsK
K30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0
KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlm
CisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3Vu
dCBvbiBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdl
dCA9IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRn
ZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsK
KyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAo
KkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30K
Kworc3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sK
KyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtf
eHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVj
dCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsK
KworICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cp
IHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVz
dHJveSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAg
ICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJ
ZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkK
KyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVt
X3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0
aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBn
X21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRf
cG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVv
dXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9p
ZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5k
ZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRp
b24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBw
bHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVu
dCwgCisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAg
Q29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAg
WHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAg
aW50ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVm
ZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hp
bGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNs
aWVudC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAg
eHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNp
ZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOwor
I2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRD
cmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFw
cFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRp
c3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVM
TCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFy
Z2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQg
PSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNs
aWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0
Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3Jl
YXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRf
Y3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93
IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAg
ICAgICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAg
ICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAg
ICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xp
ZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hl
bGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7
CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhh
cmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0
TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBu
KTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAw
OworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0
QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25d
LCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJn
c1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmco
YXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRT
ZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNo
aWxkX3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFM
U0UpOworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7Cisg
IHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRs
ZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBY
bGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGll
bnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAg
ICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdygg
ZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisg
IFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQg
ZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAg
ICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsK
KyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hp
bGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdl
dDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIo
Y2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRp
cmVjdE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAg
ICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAg
WHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vi
c3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAg
ICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGll
bnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhT
eW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2Ns
aWVudF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZp
Y2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRp
c3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3Jl
LndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lk
Z2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dp
ZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmlu
ZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVy
cm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNw
bGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRj
bGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRn
ZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAo
WHRDbGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAg
IFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBU
UlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50
X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQt
PnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQor
CitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVn
LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKwor
ICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVE
X0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFBy
b3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3Bl
cnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAg
ICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAgICAgICAgICAgICAgICAgIFByb3BNb2Rl
UmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7
Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdl
dCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50
ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xp
ZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAg
YnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJ
TgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsK
KyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNp
ZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9X
X0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFM
SVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhF
TUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURf
TU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQg
Z2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2Ug
WEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAg
WEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7
CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4p
IHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3Vz
IGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOwor
ICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRm
KCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9j
dXMudHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRv
dyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMu
ZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2
ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4
ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNr
LAorICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0
cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVs
dDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3Rh
dGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQ
b2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVn
ID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAg
ICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNz
YWdlICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAg
ICAgICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAg
ICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7
CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAg
YnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZv
ICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6
CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBL
ZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290
IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsK
KyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lk
CitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAg
ICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICBsb25nICAg
ICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAg
ICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAg
ICBsb25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0
V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54
dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2Yo
eGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50
LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBY
SW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0
ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNs
aWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBk
ZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50Lnhj
bGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZl
bnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxG
YWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERF
QlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxu
IixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKworc3RhdGljIGludCAgICAgICAgICAgICAK
K2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQorewor
ICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBl
ZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIo
ZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2
b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJh
cHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBY
IFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0K
KyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAK
K3h0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEs
IFhFdmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRD
bGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7
CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToK
KyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAg
V2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cu
d2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0
ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAg
Y2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1
c2VyX2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAg
IGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRo
ZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRw
eSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAg
ICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAg
fQorICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAg
ICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAg
ICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAg
Y2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRX
aW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1
dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAw
LCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9
IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9h
ZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBY
V2luZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0
Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgp
OworICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0
cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90
aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcp
LAorICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNr
KTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3Ry
dWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAg
ICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRf
Zm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJh
cF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdp
ZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRy
YXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3Rp
ZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAg
IChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisK
KyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVu
ZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdp
bmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdp
bmRvdyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7
CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFk
ZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290
LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2Rh
dGEpOworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3Qs
ICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsK
KyAgICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOwor
CisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdp
bmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4
dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZy
ZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bs
dWdpbkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5k
ZXgodW5zaWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRh
dGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5l
dyBQbHVnaW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lu
cygpW2ldOworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5m
aWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVz
Y3JpcHRpb24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVz
Y3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5k
KCk7CisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBN
aW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1p
bWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmly
c3Q7CisgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVn
aW4gPSBpbmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdl
LT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7
CisKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0
b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3Rr
OjppbnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmluZyBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5
cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJuIFBsdWdp
bkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1p
bWVUeXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykK
K3sKKyAgICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7
CisKKyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiByZWxvYWQg
b3BlbiBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAyOTkxNCkKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQCBERVBFTkRQ
QVRIICs9IGVkaXRpbmcvcXQgaGlzdG9yeS9xdCBsb2FkCiBndGstcG9ydCB7CiAgICAgeDExOnBs
dWdpbnMgewogICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgTElCUyArPSAtbFh0
CiAgICAgfQogCiAgICAgSU5DTFVERVBBVEggKz0gXApAQCAtMTczLDYgKzE3NCw3IEBAIGd0ay1w
b3J0IHsKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsg
XAogICAgIHBhZ2UvZ3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ayBc
CiAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay93
ZWJraXQKQEAgLTg2NSwxMyArODY3LDM1IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJv
Y2Vzc29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdU
S19ESVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsu
aCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCisKICAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVGb250RGF0YS5jcHAgCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBw
bHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisg
ICAgcGx1Z2lucy9ndGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMg
Kz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAorICAgICAgcGx1Z2lucy9ndGsv
eGVtYmVkLmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0Ymlu
LmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk4NSw2ICsxMDA5LDcgQEAgcXQtcG9ydCB7CiB9
CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3Rr
CiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBi
b2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhl
bHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAyOTkxNCkKKysrIFdl
YkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNCArMjgs
MTkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKIAorI2lu
Y2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUg
InJ1bnRpbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCitLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0
KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKICAg
ICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkocmV2aXNp
b24gMjk5MTQpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNyBDb2xs
YWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJldmlzaW9uOwogbXkgJG9zWFZl
cnNpb247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFibGVHdGtQbHVnaW5zOwogbXkg
JGlzV3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0CkBAIC00ODQsNiArNDg2LDIz
IEBAIHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitzdWIgZW5hYmxlR3RrUGx1Z2lu
cygpCit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpOworICAgIHJldHVybiAkZW5h
YmxlR3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKQorewor
ICAgIHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5zKTsKKworICAgIGlmIChjaGVj
a0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAgICAgICRlbmFibGVHdGtQbHVn
aW5zID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDE7Cisg
ICAgfQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5lSXNXeCgpOwpAQCAtNzk5LDYg
KzgxOCw3IEBAIHN1YiBidWlsZFFNYWtlR3RrUHJvamVjdCgkJCkKIAogICAgIG15IEBidWlsZEFy
Z3MgPSAoIkNPTkZJRys9Z3RrLXBvcnQiKTsKICAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUct
PXF0IjsKKyAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUcrPXBsdWdpbnMiIGlmIGVuYWJsZUd0
a1BsdWdpbnMoKTsKIAogICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xlYW4sIEBidWls
ZEFyZ3MpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18918</attachid>
            <date>2008-02-04 14:05:14 -0800</date>
            <delta_ts>2008-02-05 10:51:02 -0800</delta_ts>
            <desc>Updated patch against r29975</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>139803</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAyOTk3NSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTQgKzE0OSwxNCBAQCBQ
cm9ncmFtc19taW5pZG9tX1NPVVJDRVMgPSBcCiAJSmF2YVNjcmlwdENvcmUvQVBJL05vZGVMaXN0
LmMgXAogCUphdmFTY3JpcHRDb3JlL0FQSS9taW5pZG9tLmMKIFByb2dyYW1zX21pbmlkb21fQ1BQ
RkxBR1MgPSAkKGdsb2JhbF9jcHBmbGFncykKLVByb2dyYW1zX21pbmlkb21fQ1hYRkxBR1MgPSAk
KGdsb2JhbF9jZmxhZ3MpCitQcm9ncmFtc19taW5pZG9tX0NYWEZMQUdTID0gJChnbG9iYWxfY3h4
ZmxhZ3MpICQoZ2xvYmFsX2NmbGFncykKIFByb2dyYW1zX21pbmlkb21fTERBREQgPSBsaWJKYXZh
U2NyaXB0Q29yZS5sYQogUHJvZ3JhbXNfbWluaWRvbV9MREZMQUdTID0gLXJwYXRoICQoQ1VSRElS
KS8ubGlicwogCiAjIHRlc3RranMKIFByb2dyYW1zX3Rlc3RranNfU09VUkNFUyA9IEphdmFTY3Jp
cHRDb3JlL2tqcy90ZXN0a2pzLmNwcAogUHJvZ3JhbXNfdGVzdGtqc19DUFBGTEFHUyA9ICQoZ2xv
YmFsX2NwcGZsYWdzKQotUHJvZ3JhbXNfdGVzdGtqc19DWFhGTEFHUyA9ICQoZ2xvYmFsX2NmbGFn
cykKK1Byb2dyYW1zX3Rlc3RranNfQ1hYRkxBR1MgPSAkKGdsb2JhbF9jeHhmbGFncykgJChnbG9i
YWxfY2ZsYWdzKQogUHJvZ3JhbXNfdGVzdGtqc19MREFERCA9IGxpYkphdmFTY3JpcHRDb3JlLmxh
CiBQcm9ncmFtc190ZXN0a2pzX0xERkxBR1MgPSAtcnBhdGggJChDVVJESVIpLy5saWJzCiAKSW5k
ZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZpc2lv
biAyOTk3NSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSwx
MCBAQAogIwogIyBnbG9iYWxfY3BwZmxhZ3MgICA9IENQUEZMQUdTIHRoYXQgYXBwbHkgdG8gSlND
LCBXZWJDb3JlLCBhbmQgdG8gYW55CiAjICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgcG9y
dAotIyBnbG9iYWxfY2ZsYWdzICAgICA9IENGTEFHUyBhbmQgQ1hYRkxBR1MgdGhhdCBhcHBseSB0
byBKU0MsIFdlYkNvcmUsIGFuZCB0bworIyBnbG9iYWxfY2ZsYWdzICAgICA9IENGTEFHUyB0aGF0
IGFwcGx5IHRvIEpTQywgV2ViQ29yZSwgYW5kIHRvCiAjICAgICAgICAgICAgICAgICAgICAgYW55
IHNwZWNpZmljIHBvcnQKKyMgZ2xvYmFsX2N4eGZsYWdzICAgPSBDWFhGTEFHUyB0aGF0IGFwcGx5
IHRvIEpTQywgV2ViQ29yZSwgYW5kIHRvIGFueQorIyAgICAgICAgICAgICAgICAgICAgIHNwZWNp
ZmljIHBvcnQKIAogc3JjZGlyID0gQHNyY2RpckAKIFZQQVRIID0gQHNyY2RpckAKQEAgLTUwLDYg
KzUyLDcgQEAgRVhUUkFfRElTVCA6PQogZ2xvYmFsX2NwcGZsYWdzIDo9CiAKIGdsb2JhbF9jcHBm
bGFncyArPSBcCisJLUkkKHNyY2RpcikvV2ViQ29yZSBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlw
dENvcmUgXAogCS1JJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzIFwK
IAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS93dGYgXApAQCAtNjEsMTIgKzY0LDE4IEBAIGds
b2JhbF9jZmxhZ3MgOj0gXAogCS1XYWxsIC1XIC1XY2FzdC1hbGlnbiAtV2NoYXItc3Vic2NyaXB0
cyAtV3JldHVybi10eXBlIFwKIAktV2Zvcm1hdCAtV2Zvcm1hdC1zZWN1cml0eSAtV25vLWZvcm1h
dC15MmsgLVd1bmRlZiBcCiAJLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdwb2ludGVyLWFy
aXRoIC1Xd3JpdGUtc3RyaW5ncyBcCi0JLVduby11bnVzZWQtcGFyYW1ldGVyICQoU1lNQk9MX1ZJ
U0lCSUxJVFlfSU5MSU5FUykKKwktV25vLXVudXNlZC1wYXJhbWV0ZXIKKworZ2xvYmFsX2N4eGZs
YWdzIDo9IFwKKwkkKFNZTUJPTF9WSVNJQklMSVRZX0lOTElORVMpCiAKIGlmICFFTkFCTEVfREVC
VUcKIGdsb2JhbF9jZmxhZ3MgKz0gXAotCS1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMgXAorCS1m
bm8tZXhjZXB0aW9ucyBcCiAJJChTWU1CT0xfVklTSUJJTElUWSkKKworZ2xvYmFsX2N4eGZsYWdz
ICs9IFwKKwktZm5vLXJ0dGkKIGVuZGlmCiAKICMgU2hhcmVkIGxpYnJhcmllcwpAQCAtOTYsNyAr
MTA1LDcgQEAgbGliSmF2YVNjcmlwdENvcmVfbGFfU09VUkNFUyA9IFwKIAogbGliSmF2YVNjcmlw
dENvcmVfbGFfTERGTEFHUyA9ICQoSUNVX0xJQlMpIC1scHRocmVhZAogCi1saWJKYXZhU2NyaXB0
Q29yZV9sYV9DWFhGTEFHUyA9ICQoZ2xvYmFsX2NmbGFncykgLWZzdHJpY3QtYWxpYXNpbmcKK2xp
YkphdmFTY3JpcHRDb3JlX2xhX0NYWEZMQUdTID0gJChnbG9iYWxfY3h4ZmxhZ3MpICQoZ2xvYmFs
X2NmbGFncykgLWZzdHJpY3QtYWxpYXNpbmcKIAogbGliSmF2YVNjcmlwdENvcmVfbGFfQ0ZMQUdT
ID0gJChnbG9iYWxfY2ZsYWdzKSAtZnN0cmljdC1hbGlhc2luZwogCkBAIC0xMzksNiArMTQ4LDcg
QEAgbGliV2ViS2l0R3RrX2xhX1NPVVJDRVMgPSBcCiAKIGxpYldlYktpdEd0a19sYV9DWFhGTEFH
UyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCisJJChnbG9iYWxfY3h4ZmxhZ3MpIFwKIAkk
KGdsb2JhbF9jZmxhZ3MpIFwKIAkkKERFUEVOREVOQ0lFU19DRkxBR1MpIFwKIAkkKExJQkNVUkxf
Q0ZMQUdTKSBcCkBAIC0xOTEsNiArMjAxLDcgQEAgZW5kaWYKIAogaWYgVEFSR0VUX1gxMQogZ2xv
YmFsX2NwcGZsYWdzICs9IC1EWFBfVU5JWAord2Via2l0Z3RrX2xkZmxhZ3MgKz0gLWxYdAogZW5k
aWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDI5OTc1KQorKysgV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0
aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00OSwxMiArNTAs
MTcgQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJQbHVn
SW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorI2luY2x1ZGUg
IlBsdWdpblZpZXdHdGsuaCIKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0
V2ViRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmll
dygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAt
MTYwLDkgKzE2NiwzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJt
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxvYWRl
ciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1fcmVz
cG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwg
bGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVzcG9u
c2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAg
ICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgZW5j
b2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhh
dCBpcyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRh
IGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0
YSAobGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+
b3ZlcnJpZGVFbmNvZGluZygpOworICAgICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2Rpbmcu
aXNOdWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3NlbikKKyAgICAgICAgICAgIGVuY29kaW5n
ID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgICAgICBGcmFt
ZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAgIGZy
YW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGlm
IChkYXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsK
KyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50
UmVzcG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZl
UmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJlc3Bv
bnNlVG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlk
UmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKQpAQCAtMjU4LDggKzI4NSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVu
Y3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0
ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkK
K1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBw
bHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogeworICAgIFBsdWdp
blZpZXdHdGsqIHBsdWdpblZpZXcgPSBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lu
cygpLT5jcmVhdGVQbHVnaW5WaWV3KGNvcmUobV9mcmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQs
IHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOwor
CisgICAgaWYgKHBsdWdpblZpZXctPnN0YXR1cygpID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nl
c3NmdWxseSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiAwOwogfQpAQCAtMzAxLDggKzMzMyw3IEBAIFBhc3NSZWZQdHI8RnJh
bWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVk
aXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1
Z2luVmlld0d0ayo+KHBsdWdpbldpZGdldCk7CiB9CiAKIFdpZGdldCogRnJhbWVMb2FkZXJDbGll
bnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25z
dCBLVVJMJiBiYXNlVVJMLApAQCAtMzI0LDYgKzM1NSw5IEBAIE9iamVjdENvbnRlbnRUeXBlIEZy
YW1lTG9hZGVyQ2xpZW50OjpvYmoKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29u
dGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5z
KCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6Ok9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKwogICAgIGlmIChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpPYmplY3RDb250ZW50RnJhbWU7CiAKQEAgLTYyMywxNCArNjU3LDE0IEBAIFN0cmlu
ZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsK
LSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhl
IGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25l
IHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRh
IGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0
YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2Fk
ZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2Rpbmcu
aXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9
IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1
bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9z
ZW4pOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpCisgICAgICAgIGNvbW1pdHRlZExvYWQoZG9j
dW1lbnRMb2FkZXIsIDAsIDApOworICAgIGVsc2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9o
YXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogCkBAIC03NTMsOSAr
Nzg3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG8KICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9j
dW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGYWlsKGVycm9y
KTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3Rh
cnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpJbmRleDogV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMjk5NzUp
CisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZp
ZXdHdGsuaCIKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lIFdlYktpdFdlYkZyYW1l
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4MCw2ICsxODMsMTAgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBtX2ZyYW1lOwogICAgICAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBt
X3VzZXJBZ2VudDsKKworICAgICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRv
CisgICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXdHdGsqIG1fcGx1Z2luVmlldzsKKyAgICAgICAg
Ym9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
cmV2aXNpb24gMjk5NzUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw3IEBAIHdlYmtpdGd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2Rpcikv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9s
b2FkZXIvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BhZ2UvZ3RrIFwKKwktSSQoc3JjZGly
KS9XZWJDb3JlL3BsdWdpbnMvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQo
c3JjZGlyKS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQv
Z3RrL3dlYmtpdApAQCAtODQ4LDYgKzg0OSwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9Vbmljb2RlUmFuZ2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKKwlXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05MDcsNiArOTEzLDExIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlX
ZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJraXRndGtf
c291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYworZW5kaWYKKwog
d2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0
ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMjk5
NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMyArNTcsNiBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50
b0FycmF5KGNvbnN0CiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbkluZm8qIFBsdWdJbkluZm9T
dG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLVN0cmluZyBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQotYm9vbCBXZWJDb3JlOjpQ
bHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgV2ViQ29yZTo6cmVmcmVz
aFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogQ29sb3IgV2ViQ29yZTo6
Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNl
dEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkgeyB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAkocmV2aXNpb24gMjk5NzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNSArMzA2LDIy
IEBAIHZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib28KIAogdm9pZCBXaWRn
ZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0CiB7CisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworICAgIEludFBvaW50
IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFtZUdlb21ldHJ5
KCkubG9jYXRpb24oKSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgYWxsb2NhdGlvbiBzaXpl
IHRvIGJlIG5lZ2F0aXZlCisgICAgSW50U2l6ZSBzeiA9IGZyYW1lR2VvbWV0cnkoKS5zaXplKCk7
CisgICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWlnaHQoKSB9Owor
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24pOwog
fQogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiAyOTk3NSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDcgQEAgc3RhdGljIEhhc2hNYXA8Y29uc3QgV2lkZ2V0KiwgUmVuZGVyV2lkZwog
fQogCiBSZW5kZXJXaWRnZXQ6OlJlbmRlcldpZGdldChOb2RlKiBub2RlKQotICAgICAgOiBSZW5k
ZXJSZXBsYWNlZChub2RlKQorICAgICAgOiBSZW5kZXJSZXBsYWNlZChub2RlLCBJbnRTaXplKDAs
IDApKQogICAgICAgLCBtX3dpZGdldCgwKQogICAgICAgLCBtX3JlZkNvdW50KDApCiB7CkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luRGF0YWJhc2VH
dGtfSAorI2RlZmluZSBQbHVnaW5EYXRhYmFzZUd0a19ICisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3Mg
RnJhbWU7CisgICAgY2xhc3MgSW50U2l6ZTsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFBs
dWdpblBhY2thZ2VHdGs7CisgICAgY2xhc3MgUGx1Z2luVmlld0d0azsKKworICAgIHR5cGVkZWYg
SGFzaFNldDxSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4sIFBsdWdpblBhY2thZ2VHdGtIYXNoPiBQ
bHVnaW5TZXQ7CisgIAorICAgIGNsYXNzIFBsdWdpbkRhdGFiYXNlR3RrIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZUd0ayogaW5zdGFsbGVkUGx1Z2lucygpOwor
ICAgICAgICBQbHVnaW5WaWV3R3RrKiBjcmVhdGVQbHVnaW5WaWV3KEZyYW1lKiBwYXJlbnRGcmFt
ZSwgY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpOworCisg
ICAgICAgIGJvb2wgcmVmcmVzaCgpOworICAgICAgICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+
IHBsdWdpbnMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBpc01JTUVUeXBlUmVnaXN0ZXJlZChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGRFeHRyYVBsdWdpblBh
dGgoY29uc3QgU3RyaW5nJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRQbHVnaW5Q
YXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpIHsgbV9wbHVnaW5QYXRocyA9IHBhdGhz
OyB9CisgICAgICAgIFBsdWdpblNldCBnZXRQbHVnaW5zSW5QYXRocygpIGNvbnN0OworCisgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIGZpbmRQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0
ayogcGx1Z2luRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKTsKKworICAgICAg
ICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZGVmYXVsdFBsdWdpblBhdGhzKCk7CisKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gbV9wbHVnaW5QYXRoczsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1f
cmVnaXN0ZXJlZE1JTUVUeXBlczsKKyAgICAgICAgUGx1Z2luU2V0IG1fcGx1Z2luczsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3
R3RrLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNs
dWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZUd0ay5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5o
IgorI2luY2x1ZGUgImtqc193aW5kb3cuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgor
I2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRl
IDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKKyNpZiBkZWZpbmVkKEdE
S19XSU5ET1dJTkdfWDExKQorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGdkay9n
ZGt4Lmg+CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJTjMyCisjaW5jbHVkZSA8Z2Rr
L2dka3dpbjMyLmg+CisjZW5kaWYKKwordXNpbmcgS0pTOjpFeGVjU3RhdGU7Cit1c2luZyBLSlM6
OkludGVycHJldGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1c2luZyBLSlM6OkpTT2JqZWN0Owor
dXNpbmcgS0pTOjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3RyaW5nOworCit1c2luZyBzdGQ6Om1p
bjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2Ns
YXNzIFBsdWdpblJlcXVlc3RHdGsgeworcHVibGljOgorICAgIFBsdWdpblJlcXVlc3RHdGsoY29u
c3QgRnJhbWVMb2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0
aW9uLCB2b2lkKiBub3RpZnlEYXRhKQorICAgICAgICA6IG1fZnJhbWVMb2FkUmVxdWVzdChmcmFt
ZUxvYWRSZXF1ZXN0KQorICAgICAgICAsIG1fbm90aWZ5RGF0YShub3RpZnlEYXRhKQorICAgICAg
ICAsIG1fc2VuZE5vdGlmaWNhdGlvbihzZW5kTm90aWZpY2F0aW9uKSB7IH0KK3B1YmxpYzoKKyAg
ICBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0KCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZUxvYWRSZXF1ZXN0OyB9CisgICAgdm9pZCogbm90aWZ5RGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm90aWZ5RGF0YTsgfQorICAgIGJvb2wgc2VuZE5vdGlmaWNhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2VuZE5vdGlmaWNhdGlvbjsgfQorcHJpdmF0ZToKKyAgICBGcmFtZUxvYWRS
ZXF1ZXN0IG1fZnJhbWVMb2FkUmVxdWVzdDsKKyAgICB2b2lkKiBtX25vdGlmeURhdGE7CisgICAg
Ym9vbCBtX3NlbmROb3RpZmljYXRpb247CisgICAgLy8gRklYTUU6IHVzZXIgZ2VzdHVyZQorfTsK
Kworc3RhdGljIFN0cmluZyBzY3JpcHRTdHJpbmdJZkphdmFTY3JpcHRVUkwoY29uc3QgS1VSTCYg
dXJsKQoreworICAgIGlmICghdXJsLnN0cmluZygpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBUaGlzIHJldHVybnMg
YW4gdW5lc2NhcGVkIHN0cmluZworICAgIHJldHVybiBLVVJMOjpkZWNvZGVfc3RyaW5nKHVybC5k
ZXByZWNhdGVkU3RyaW5nKCkubWlkKDExKSk7Cit9CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZp
ZXdHdGs6OnNfY3VycmVudFBsdWdpblZpZXcgPSAwOworCitzdGF0aWMgY29uc3QgY2hhciogTW96
aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7
IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAiOworCit2b2lkIFBs
dWdpblZpZXdHdGs6OnVwZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQoKSB8
fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCkt
PmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93
aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAg
bV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVH
ZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2Ns
aXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93
UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKK30KKworSW50UmVjdCBQbHVnaW5WaWV3R3Rr
Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAgLy8gU3RhcnQgYnkgY2xpcHBpbmcgdG8g
b3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0IGNsaXBSZWN0KG1fd2luZG93UmVjdCk7CisgICAgCisg
ICAgLy8gVGFrZSBvdXIgZWxlbWVudCBhbmQgZ2V0IHRoZSBjbGlwIHJlY3QgZnJvbSB0aGUgZW5j
bG9zaW5nIGxheWVyIGFuZCBmcmFtZSB2aWV3LgorICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1f
ZWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBGcmFtZVZpZXcqIHBh
cmVudFZpZXcgPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAgICBjbGlwUmVjdC5p
bnRlcnNlY3QocGFyZW50Vmlldy0+d2luZG93Q2xpcFJlY3RGb3JMYXllcihsYXllciwgdHJ1ZSkp
OworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBt
X3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdo
dCgpIH07CisgICAgaWYgKG1fd2lkZ2V0KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxv
Y2F0ZShtX3dpZGdldCwgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpCisgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0Ymlu
X3NldF9wb3NpdGlvbihHVEtfWFRCSU4obV93aWRnZXQpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dp
bmRvd1JlY3QueSgpKTsKKyAgICAgICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aWRnZXQsIG1f
d2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gY2xpcFJlY3Q7Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICht
X2VsZW1lbnQtPmRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHJlY3QgIT0gZnJhbWVHZW9tZXRyeSgpKQorICAgICAgICBX
aWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisKKyAgICBpZiAocGFyZW50KCkpCisgICAg
ICAgIGluaXQoKTsKKworICAgIHVwZGF0ZVdpbmRvdygpOworICAgIHNldE5QV2luZG93UmVjdChy
ZWN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAor
eworICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBXaWRnZXQ6
Omdlb21ldHJ5Q2hhbmdlZCgpOworICAgIHVwZGF0ZVdpbmRvdygpOworfQorCit2b2lkIFBsdWdp
blZpZXdHdGs6OnNldEZvY3VzKCkKK3sKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlld0d0azo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisg
ICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aGlkZSgpCit7Cisg
ICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lk
IFBsdWdpblZpZXdHdGs6OnBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogbnVsbFBs
dWdpbkltYWdlOworICAgIGlmICghbnVsbFBsdWdpbkltYWdlKQorICAgICAgICBudWxsUGx1Z2lu
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm51bGxQbHVnaW4iKTsKKworICAg
IEludFJlY3QgaW1hZ2VSZWN0KGZyYW1lR2VvbWV0cnkoKS54KCksIGZyYW1lR2VvbWV0cnkoKS55
KCksIG51bGxQbHVnaW5JbWFnZS0+d2lkdGgoKSwgbnVsbFBsdWdpbkltYWdlLT5oZWlnaHQoKSk7
CisKKyAgICBpbnQgeE9mZnNldCA9IChmcmFtZUdlb21ldHJ5KCkud2lkdGgoKSAtIGltYWdlUmVj
dC53aWR0aCgpKSAvIDI7CisgICAgaW50IHlPZmZzZXQgPSAoZnJhbWVHZW9tZXRyeSgpLmhlaWdo
dCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDI7CisKKyAgICBpbWFnZVJlY3QubW92ZSh4T2Zm
c2V0LCB5T2Zmc2V0KTsKKworICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKGltYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5jbGlw
KHdpbmRvd0NsaXBSZWN0KCkpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShudWxsUGx1Z2luSW1h
Z2UsIGltYWdlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisK
K3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8g
RHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICBwYWludE1pc3NpbmdQbHVn
aW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUg
WGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3
YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIGlmIChtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAg
aWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1
Z2luVmlld0d0azo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sK
KyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICAvKiBTeW50aGVzaXplIGFuIFhFdmVudCBhbmQg
cGFzcyBpdCBvbiAqLworICAgIC8qCisgICAgbnBFdmVudC53UGFyYW0gPSBldmVudC0+a2V5Q29k
ZSgpOyAgICAKKworICAgIGlmIChldmVudC0+dHlwZSgpID09IGtleWRvd25FdmVudCkgeworICAg
ICAgICBucEV2ZW50LmV2ZW50ID0gV01fS0VZRE9XTjsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0g
PSAwOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBrZXl1cEV2ZW50KSB7CisgICAg
ICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlVUDsKKyAgICAgICAgbnBFdmVudC5sUGFyYW0gPSAw
eDgwMDA7CisgICAgfQorICAgICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRy
b3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2lu
c3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
fQorCisvL2V4dGVybiBib29sIGlnbm9yZU5leHRTZXRDdXJzb3I7CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50
IG5wRXZlbnQ7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgIHJldHVybjsKKworICAg
IC8qIFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3Mgb24gKi8KKyAgICBJbnRQb2ludCBwID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KEludFBv
aW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgLyoKKyAgICBucEV2
ZW50LmxQYXJhbSA9IE1BS0VMUEFSQU0ocC54KCksIHAueSgpKTsKKyAgICBucEV2ZW50LndQYXJh
bSA9IDA7CisKKyAgICBpZiAoZXZlbnQtPmN0cmxLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFy
YW0gfD0gTUtfQ09OVFJPTDsKKyAgICBpZiAoZXZlbnQtPnNoaWZ0S2V5KCkpCisgICAgICAgIG5w
RXZlbnQud1BhcmFtIHw9IE1LX1NISUZUOworCisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gbW91
c2Vtb3ZlRXZlbnQgfHwKKyAgICAgICAgZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW91dEV2ZW50IHx8
IAorICAgICAgICBldmVudC0+dHlwZSgpID09IG1vdXNlb3ZlckV2ZW50KSB7CisgICAgICAgIG5w
RXZlbnQuZXZlbnQgPSBXTV9NT1VTRU1PVkU7CisgICAgICAgIGlmIChldmVudC0+YnV0dG9uRG93
bigpKQorICAgICAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIExlZnRCdXR0b246CisgICAgICAgICAgICAgICAgICAgIG5wRXZlbnQud1BhcmFt
IHw9IE1LX0xCVVRUT047CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgTWlkZGxlQnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19NQlVUVE9OOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgICAgICAgICBucEV2ZW50LndQYXJh
bSB8PSBNS19SQlVUVE9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50KSB7Cisg
ICAgICAgIHN3aXRjaCAoZXZlbnQtPmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0xCVVRUT05ET1dOOworCisgICAgICAg
ICAgICAgICAgLy8gRm9jdXMgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAgIG1fcGFyZW50RnJh
bWUtPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG1fZWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01CVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9SQlVUVE9ORE9X
TjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0
dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2
ZW50ID0gV01fTEJVVFRPTlVQOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9NQlVUVE9OVVA7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg
ICAgbnBFdmVudC5ldmVudCA9IFdNX1JCVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm47CisgICAgKi8KKworICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICAvLyBDdXJyZW50bHksIFdpZGdldDo6c2V0
Q3Vyc29yIGlzIGFsd2F5cyBjYWxsZWQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBpbiBFdmVudEhhbmRs
ZXIuY3BwCisgICAgLy8gYW5kIHNpbmNlIHdlIGRvbid0IHdhbnQgdGhhdCB3ZSBzZXQgaWdub3Jl
TmV4dFNldEN1cnNvciB0byB0cnVlIGhlcmUgdG8gcHJldmVudCB0aGF0LgorICAgIC8vaWdub3Jl
TmV4dFNldEN1cnNvciA9IHRydWU7ICAgICAKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5k
bGVFdmVudChFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3BsdWdpbiB8fCBtX2lzV2luZG93
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudC0+aXNNb3VzZUV2ZW50KCkpCisg
ICAgICAgIGhhbmRsZU1vdXNlRXZlbnQoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KSk7
CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICBoYW5kbGVL
ZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAg
V2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRO
UFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
IHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBt
X25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1f
bnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBy
ZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBt
X25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdo
dCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3Qu
aGVpZ2h0KCk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykg
eworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAg
ICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdp
bmRvdyk7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luVmll
d0d0azo6c3RhcnQoKQoreworICAgIGlmIChtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQVNTRVJUKG1fcGx1Z2luKTsKKyAgICBBU1NFUlQobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPm5ld3ApOworCisgICAgTlBFcnJvciBucEVycjsKKyAgICBQbHVnaW5WaWV3R3Rr
OjpzZXRDdXJyZW50UGx1Z2luVmlldyh0aGlzKTsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5uZXdwKChOUE1JTUVUeXBlKW1fbWltZVR5cGUuZGF0YSgpLCBtX2luc3Rh
bmNlLCBtX21vZGUsIG1fcGFyYW1Db3VudCwgbV9wYXJhbU5hbWVzLCBtX3BhcmFtVmFsdWVzLCBO
VUxMKTsKKyAgICB9CisgICAgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBsdWdpblZpZXcoMCk7
CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG1faXNTdGFydGVkID0gdHJ1ZTsKKworICAgIGlmICghbV91cmwuaXNFbXB0eSgp
ICYmICFtX2xvYWRNYW51YWxseSkgeworICAgICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9h
ZFJlcXVlc3Q7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0
SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0VVJMKG1fdXJsKTsKKyAgICAgICAgbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxz
ZSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0
azo6c3RvcCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7Cisg
ICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1z
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRv
ciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQp
LT5zdG9wKCk7CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0K
KworICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0g
ZmFsc2U7CisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKwor
ICAgIC8vIERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5k
ZXN0cm95KG1faW5zdGFuY2UsIDApOworCisgICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXdHdGsq
IHBsdWdpblZpZXcpCit7CisgICAgc19jdXJyZW50UGx1Z2luVmlldyA9IHBsdWdpblZpZXc7Cit9
CisKK1BsdWdpblZpZXdHdGsqIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3KCkKK3sK
KyAgICByZXR1cm4gc19jdXJyZW50UGx1Z2luVmlldzsKK30KKworc3RhdGljIGNoYXIqIGNyZWF0
ZVVURjhTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCit7CisgICAgQ1N0cmluZyBjc3RyID0gc3Ry
LnV0ZjgoKTsKKyAgICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihmYXN0
TWFsbG9jKGNzdHIubGVuZ3RoKCkgKyAxKSk7CisKKyAgICBzdHJuY3B5KHJlc3VsdCwgY3N0ci5k
YXRhKCksIGNzdHIubGVuZ3RoKCkgKyAxKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgp
Cit7CisgICAgaWYgKCFzdHJpbmdBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXlb
aV0pOworCisgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOworfQorCitzdGF0aWMgYm9vbCBnZXRT
dHJpbmcoS0pTUHJveHkqIHByb3h5LCBKU1ZhbHVlKiByZXN1bHQsIFN0cmluZyYgc3RyaW5nKQor
eworICAgIGlmICghcHJveHkgfHwgIXJlc3VsdCB8fCByZXN1bHQtPmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBKU0xvY2sgbG9jazsKKworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHByb3h5LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIFVTdHJpbmcg
dXN0cmluZyA9IHJlc3VsdC0+dG9TdHJpbmcoZXhlYyk7CisgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAKKyAgICBzdHJpbmcgPSB1c3RyaW5nOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OnBlcmZvcm1SZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJl
cXVlc3QpCit7CisgICAgS1VSTCByZXF1ZXN0VVJMID0gcmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVz
dCgpLnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIFN0cmluZyBqc1N0cmluZyA9IHNjcmlw
dFN0cmluZ0lmSmF2YVNjcmlwdFVSTChyZXF1ZXN0VVJMKTsKKworICAgIGlmIChqc1N0cmluZy5p
c051bGwoKSkgeworICAgICAgICBtX3BhcmVudEZyYW1lLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQo
cmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLCAwLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAg
Ly8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS80ODA3NDY5PiBUaGlzIHNob3VsZCBiZSBzZW50IHdo
ZW4gdGhlIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBsb2FkaW5nCisgICAgICAgIGlmIChyZXF1ZXN0
LT5zZW5kTm90aWZpY2F0aW9uKCkpIHsKKyAgICAgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PnVybG5vdGlmeShtX2luc3RhbmNlLCByZXF1ZXN0VVJMLmRlcHJlY2F0ZWRTdHJpbmcoKS51dGY4
KCksIE5QUkVTX0RPTkUsIHJlcXVlc3QtPm5vdGlmeURhdGEoKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGFyZ2V0ZWQgSmF2YVNjcmlwdCByZXF1ZXN0
cyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBKYXZhU2Ny
aXB0IHBsdWdpbgorICAgIC8vIGFuZCB0aGlzIGhhcyBiZWVuIG1hZGUgc3VyZSBpbiA6OmxvYWQu
CisgICAgQVNTRVJUKHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5mcmFtZU5hbWUoKS5pc0Vt
cHR5KCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHJlcXVlc3QtPmZyYW1lTG9hZFJl
cXVlc3QoKS5mcmFtZU5hbWUoKSkgPT0gbV9wYXJlbnRGcmFtZSk7CisgICAgCisgICAgLy8gRXhl
Y3V0aW5nIGEgc2NyaXB0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcgdG8gYmUgZGVzdHJveWVk
LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZnJhbWUuCisgICAgUmVmUHRy
PEZyYW1lPiBwYXJlbnRGcmFtZSA9ICBtX3BhcmVudEZyYW1lOworICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGpzU3RyaW5nLmRlcHJl
Y2F0ZWRTdHJpbmcoKSwgdHJ1ZSk7CisKKyAgICBpZiAocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVz
dCgpLmZyYW1lTmFtZSgpLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmluZyByZXN1bHRTdHJpbmc7
CisKKyAgICAgICAgaWYgKCFnZXRTdHJpbmcocGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCksIHJl
c3VsdCwgcmVzdWx0U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU3Ry
aW5nIGNzdHIgPSByZXN1bHRTdHJpbmcudXRmOCgpOworICAgICAgICBSZWZQdHI8UGx1Z2luU3Ry
ZWFtPiBzdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIHBhcmVudEZyYW1lLmdldCgpLCBy
ZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QtPnNl
bmROb3RpZmljYXRpb24oKSwgcmVxdWVzdC0+bm90aWZ5RGF0YSgpLCBwbHVnaW4oKS0+cGx1Z2lu
RnVuY3MoKSwgaW5zdGFuY2UoKSwgbV9xdWlya3MpOworICAgICAgICBtX3N0cmVhbXMuYWRkKHN0
cmVhbSk7CisgICAgICAgIHN0cmVhbS0+c2VuZEphdmFTY3JpcHRTdHJlYW0ocmVxdWVzdFVSTCwg
Y3N0cik7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OnJlcXVlc3RUaW1lckZpcmVk
KFRpbWVyPFBsdWdpblZpZXdHdGs+KiB0aW1lcikKK3sKKyAgICBBU1NFUlQodGltZXIgPT0gJm1f
cmVxdWVzdFRpbWVyKTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0cy5zaXplKCkgPiAwKTsKKworICAg
IFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QgPSBtX3JlcXVlc3RzWzBdOworICAgIG1fcmVxdWVz
dHMucmVtb3ZlKDApOworICAgIAorICAgIC8vIFNjaGVkdWxlIGEgbmV3IHJlcXVlc3QgYmVmb3Jl
IGNhbGxpbmcgcGVyZm9ybVJlcXVlc3Qgc2luY2UgdGhlIGNhbGwgdG8KKyAgICAvLyBwZXJmb3Jt
UmVxdWVzdCBjYW4gY2F1c2UgdGhlIHBsdWdpbiB2aWV3IHRvIGJlIGRlbGV0ZWQuCisgICAgaWYg
KG1fcmVxdWVzdHMuc2l6ZSgpID4gMCkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVT
aG90KDApOworCisgICAgcGVyZm9ybVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6c2NoZWR1bGVSZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqIHJlcXVlc3QpCit7Cisg
ICAgbV9yZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCk7CisgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRP
bmVTaG90KDApOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmxvYWQoY29uc3QgRnJhbWVM
b2FkUmVxdWVzdCYgZnJhbWVMb2FkUmVxdWVzdCwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lk
KiBub3RpZnlEYXRhKQoreworICAgIEFTU0VSVChmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNl
UmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpOworCisgICAgS1VSTCB1cmwgPSBmcmFt
ZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOworICAgIAorICAgIGlmICh1cmwu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9VUkw7CisKKyAgICBTdHJp
bmcgdGFyZ2V0ID0gZnJhbWVMb2FkUmVxdWVzdC5mcmFtZU5hbWUoKTsKKworICAgIC8vIGRvbid0
IGxldCBhIHBsdWdpbiBzdGFydCBhbnkgbG9hZHMgaWYgaXQgaXMgbm8gbG9uZ2VyIHBhcnQgb2Yg
YSBkb2N1bWVudCB0aGF0IGlzIGJlaW5nIAorICAgIC8vIGRpc3BsYXllZCB1bmxlc3MgdGhlIGxv
YWRzIGFyZSBpbiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgcGx1Z2luLgorICAgIGlmIChtX3BhcmVu
dEZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSAhPSBtX3BhcmVudEZyYW1lLT5sb2Fk
ZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSAmJgorICAgICAgICAodGFyZ2V0LmlzTnVsbCgp
IHx8IG1fcGFyZW50RnJhbWUtPnRyZWUoKS0+ZmluZCh0YXJnZXQpICE9IG1fcGFyZW50RnJhbWUp
KQorICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgIFN0cmluZyBqc1N0
cmluZyA9IHNjcmlwdFN0cmluZ0lmSmF2YVNjcmlwdFVSTCh1cmwpOworICAgIGlmICghanNTdHJp
bmcuaXNOdWxsKCkpIHsKKyAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9wYXJlbnRGcmFt
ZS0+c2V0dGluZ3MoKTsKKyAgICAgICAgaWYgKCFzZXR0aW5ncyB8fCAhc2V0dGluZ3MtPmlzSmF2
YVNjcmlwdEVuYWJsZWQoKSkgeworICAgICAgICAgICAgLy8gUmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1IgaWYgSlMgaXMgZGlzYWJsZWQuIFRoaXMgaXMgd2hhdCBNb3ppbGxhIGRvZXMuCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfSBlbHNlIGlmICh0
YXJnZXQuaXNOdWxsKCkgJiYgbV9tb2RlID09IE5QX0ZVTEwpIHsKKyAgICAgICAgICAgIC8vIERv
bid0IGFsbG93IGEgSmF2YVNjcmlwdCByZXF1ZXN0IGZyb20gYSBzdGFuZGFsb25lIHBsdWctaW4g
dGhhdCBpcyBzZWxmLXRhcmdldHRlZAorICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGlzIGNhbiBj
YXVzZSB0aGUgdXNlciB0byBiZSByZWRpcmVjdGVkIHRvIGEgYmxhbmsgcGFnZSAoMzQyNDAzOSku
CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgfHwgIXRhcmdldC5pc051bGwoKSkgewor
ICAgICAgICBpZiAoIWpzU3RyaW5nLmlzTnVsbCgpICYmICF0YXJnZXQuaXNOdWxsKCkgJiYgbV9w
YXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRhcmdldCkgIT0gbV9wYXJlbnRGcmFtZSkgeworICAg
ICAgICAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG9ubHkgYWxsb3cgSlMgcmVxdWVzdHMg
dG8gYmUgbWFkZSBvbiB0aGUgZnJhbWUgdGhhdCBjb250YWlucyB0aGUgcGx1Zy1pbi4KKyAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworICAgICAgICB9CisKKyAgICAgICAg
UGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG5ldyBQbHVnaW5SZXF1ZXN0R3RrKGZyYW1lTG9h
ZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworICAgICAgICBzY2hlZHVs
ZVJlcXVlc3QocmVxdWVzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUGx1Z2luU3RyZWFtKiBz
dHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRoaXMsIG1fcGFyZW50RnJhbWUsIGZyYW1lTG9hZFJl
cXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEsIHBs
dWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgICAgIG1f
c3RyZWFtcy5hZGQoc3RyZWFtKTsKKworICAgICAgICBzdHJlYW0tPnN0YXJ0KCk7CisgICAgfQor
CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitzdGF0aWMgS1VSTCBtYWtlVVJMKGNv
bnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5nKQoreworICAg
IERlcHJlY2F0ZWRTdHJpbmcgdXJsU3RyaW5nID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbUxhdGlu
MShyZWxhdGl2ZVVSTFN0cmluZyk7CisKKyAgICAvLyBTdHJpcCByZXR1cm4gY2hhcmFjdGVycwor
ICAgIHVybFN0cmluZy5yZXBsYWNlKCdcbicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgn
XHInLCAiIik7CisKKyAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitO
UEVycm9yIFBsdWdpblZpZXdHdGs6OmdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIHRhcmdldCwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBGcmFtZUxvYWRSZXF1ZXN0
IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0
YXJnZXQpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1l
dGhvZCgiR0VUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRV
UkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworCisgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2Fk
UmVxdWVzdCwgdHJ1ZSwgbm90aWZ5RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6
Z2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0KQoreworICAgIEZyYW1l
TG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0
RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3Qo
KS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAgICByZXR1cm4gbG9h
ZChmcmFtZUxvYWRSZXF1ZXN0LCBmYWxzZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
dGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJl
dHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworc3RhdGlj
IGlubGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFy
PiYgYnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3Jv
YmF0LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5
dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAK
KyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxG
IGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAm
JiBieXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAg
ICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3Ig
RGlyZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5
dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNo
LiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4g
aSArIDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBp
bmxpbmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBp
cyBkZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2Vy
dmVycyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJz
IHdpbGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JM
RkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5n
LiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAg
IC8vIEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVy
bgorICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAo
Ynl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAg
IGlmIChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
c3Bhbm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJl
YWRzKS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAg
ICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVs
ZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3Rl
ciA9IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBp
ZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6
JykKKyAgICAgICAgICAgIGMgPSB0b3VwcGVyKG5hbWVbaV0pOworICAgICAgICBlbHNlIGlmICgh
Y2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykK
KyAgICAgICAgICAgIGMgPSB0b2xvd2VyKG5hbWVbaV0pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjID0gbmFtZVtpXTsKKworICAgICAgICBpZiAobmFtZVtpXSA9PSAnLScpCisgICAgICAg
ICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IGZhbHNlOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Yyk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBIVFRQ
SGVhZGVyTWFwIHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIu
ZGF0YSgpOworICAgIGNvbnN0IGNoYXIqIGVvbDsKKyAgICBTdHJpbmcgbGFzdEtleTsKKyAgICBI
VFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKworICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRp
bCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIsIG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9m
LWxpbmVzCisgICAgd2hpbGUgKChlb2wgPSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgeworICAg
ICAgICBjb25zdCBjaGFyKiBsaW5lID0gYnl0ZXM7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0g
ZW9sIC0gYnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFy
YWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KKyAgICAg
ICAgYnl0ZXMgPSBlb2wgKyAxOworICAgICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRl
cyA9PSAnXG4nKSkKKyAgICAgICAgICAgIGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3
b24ndCByZXR1cm4gYSBzcGFubmluZyBDUkxGLgorCisgICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMg
LSBsaW5lKTsKKyAgICAgICAgaWYgKGxpbmVMZW5ndGggPT0gMCkKKyAgICAgICAgICAgIC8vIEJs
YW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGhlYWRlcgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGVsc2UgaWYgKCpsaW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7Cisg
ICAgICAgICAgICAvLyBDb250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAg
ICAgICAgaWYgKGxhc3RLZXkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3Jt
ZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBj
b250aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgICAgIFN0cmlu
ZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAg
ICAgIFN0cmluZyBuZXdWYWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRpbjEobGluZSwg
bGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXks
IGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicg
JiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9v
cAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAg
ICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMShsaW5lLCBjb2xvbiAtIGxpbmUpKTsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVv
bDsgY29sb24rKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAq
Y29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGNvbG9uLCBlb2wgLSBj
b2xvbik7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMu
Z2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9sZFZhbHVlOworICAgICAgICAgICAg
ICAgICAgICB0bXAgKz0gIiwgIjsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9IHZhbHVlOwor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIHZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoZWFkZXJGaWVsZHM7Cit9CisK
K05QRXJyb3IgUGx1Z2luVmlld0d0azo6aGFuZGxlUG9zdChjb25zdCBjaGFyKiB1cmwsIGNvbnN0
IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBib29sIGZpbGUsIHZv
aWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxvd0hlYWRlcnMp
Cit7CisgICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQorICAgICAgICByZXR1cm4gTlBFUlJf
SU5WQUxJRF9QQVJBTTsKKworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsK
KworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworICAgIFZlY3RvcjxjaGFyPiBidWZm
ZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShidWYsIGxlbik7CisKKyAgICAgICAgaWYgKGZpbGVu
YW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVu
YW1lLnN1YnN0cmluZyg4KTsKKworICAgICAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgICAgIGlm
ICghZ19maWxlX3Rlc3QgKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19G
SUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUg
ZGF0YSBpbnRvIGJ1ZmZlcgorICAgICAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oKGZpbGVu
YW1lLnV0ZjgoKSkuZGF0YSgpLCAiciIpOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGVIYW5k
bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKwor
ICAgICAgICAvL2J1ZmZlci5yZXNpemUoKTsKKworICAgICAgICBpbnQgYnl0ZXNSZWFkID0gZnJl
YWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICAgICAgZmNsb3NlKGZp
bGVIYW5kbGUpOworCisgICAgICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBidWZmZXIucmVzaXplKGxlbik7CisgICAgICAgIG1lbWNweShi
dWZmZXIuZGF0YSgpLCBidWYsIGxlbik7CisgICAgfQorCisgICAgY29uc3QgY2hhciogcG9zdERh
dGEgPSBidWZmZXIuZGF0YSgpOworICAgIGludCBwb3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXpl
KCk7CisgICAgCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAgICAgICBpZiAoc3RhcnRzV2l0
aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0RGF0YSsrOworICAgICAgICAg
ICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBs
b2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShidWZmZXIpOworICAgICAgICAg
ICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5r
IGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGlu
ZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBh
cnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24pOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAg
ICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0
aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJG
b3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRl
cgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRo
ZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3Ro
ID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAg
IGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxl
bmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChpbnQpZGF0YUxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1MZW5ndGgiKTsKKworICAg
ICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOworICAgICAgICAgICAgICAgIHBvc3RE
YXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgi
UE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1h
a2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmllbGRzKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KFBhc3NSZWZQdHI8Rm9ybURhdGE+
KG5ldyBGb3JtRGF0YShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKSk7CisgICAgZnJhbWVMb2Fk
UmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9h
ZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBs
dWdpblZpZXdHdGs6OnBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUsIHZvaWQqIG5v
dGlmeURhdGEpCit7CisgICAgcmV0dXJuIGhhbmRsZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVm
LCBmaWxlLCBub3RpZnlEYXRhLCB0cnVlLCB0cnVlKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3
R3RrOjpwb3N0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlKQoreworICAgIC8vIEFzIGRvY3VtZW50
ZWQsIG9ubHkgYWxsb3cgaGVhZGVycyB0byBiZSBzcGVjaWZpZWQgdmlhIE5QUF9Qb3N0VVJMIHdo
ZW4gdXNpbmcgYSBmaWxlLgorICAgIHJldHVybiBoYW5kbGVQb3N0KHVybCwgdGFyZ2V0LCBsZW4s
IGJ1ZiwgZmlsZSwgMCwgZmFsc2UsIGZpbGUpOworfQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6
Om5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBTdHJlYW0q
KiBzdHJlYW0pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBVbnN1cHBvcnRlZAor
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorCitpbnQzMiBQbHVnaW5WaWV3R3Rr
Ojp3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIC0xOwor
fQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OmRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVh
bSwgTlBSZWFzb24gcmVhc29uKQoreworICAgIFBsdWdpblN0cmVhbSogYnJvd3NlclN0cmVhbSA9
IHN0YXRpY19jYXN0PFBsdWdpblN0cmVhbSo+KHN0cmVhbS0+bmRhdGEpOworCisgICAgaWYgKCFz
dHJlYW0gfHwgUGx1Z2luU3RyZWFtOjpvd25lckZvclN0cmVhbShzdHJlYW0pICE9IG1faW5zdGFu
Y2UpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX0lOU1RBTkNFX0VSUk9SOworCisgICAg
YnJvd3NlclN0cmVhbS0+Y2FuY2VsQW5kRGVzdHJveVN0cmVhbShyZWFzb24pOworICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKK30KKworY29uc3QgY2hhciogUGx1Z2luVmlld0d0azo6dXNlckFn
ZW50KCkKK3sKKyAgICBpZiAobV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemls
bGFVc2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKKworICAgIGlm
IChtX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZy
YW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CisgICAgcmV0dXJuIG1fdXNl
ckFnZW50LmRhdGEoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdGF0dXMoY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBTdHJpbmcgcyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21MYXRp
bjEobWVzc2FnZSk7CisKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fcGFyZW50RnJhbWUtPnBhZ2Uo
KSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0YXR1c2JhclRleHQobV9wYXJlbnRGcmFt
ZSwgcyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VmFsdWUoTlBOVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBk
ZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6
IHsKKyAgICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgICAgICoo
dm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4o
bV93aWRnZXQpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNh
c2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICAqKCh1bnNp
Z25lZCBsb25nICopdmFsdWUpID0gMjsKKyNlbHNlCisgICAgICAgICAgICAqKCh1bnNpZ25lZCBs
b25nICopdmFsdWUpID0gMDsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICAgICAgICAgICooKHVuc2lnbmVk
IGxvbmcgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxv
bmcgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsK
KyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1l
LT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUg
aXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAg
ICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2Jq
ZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQq
Kil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKyAgICAgICAgICAgIE5QT2Jq
ZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50
LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFn
KSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBw
bHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxl
bWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBl
eHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1v
emlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlm
IChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qo
cGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZh
bHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVm5l
dHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odmFsdWUpOworCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAgICAgICAgICAgICoo
KFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRv
dygpKS0+d2luZG93KTsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyAgICAg
ICAgICAgICooKEhXTkQgKil3KSA9IEdES19XSU5ET1dJTkdfSFdORChHVEtfV0lER0VUKGNvbnRh
aW5pbmdXaW5kb3coKSktPndpbmRvdyk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCitOUEVycm9yIFBsdWdpblZpZXdH
dGs6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBQVnBsdWdpbldpbmRvd0Jvb2w6Cisg
ICAgICAgICAgICBtX2lzV2luZG93ZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgY2FzZSBOUFBWcGx1Z2luVHJhbnNwYXJlbnRCb29sOgorICAg
ICAgICAgICAgbV9pc1RyYW5zcGFyZW50ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpblZpZXdHdGs6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAg
ICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQg
LSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworICAgIFdpZGdldDo6aW52
YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJlZ2lv
bihOUFJlZ2lvbiByZWdpb24pCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLyogRklYTUUgLSBJbnZhbGlkYXRlIHRoZSByZWdpb24KKyAgICBSRUNUIHI7
CisKKyAgICBpZiAoR2V0UmduQm94KHJlZ2lvbiwgJnIpID09IDApIHsKKyAgICAgICAgaW52YWxp
ZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2lkZ2V0OjppbnZhbGlkYXRl
UmVjdChyKTsKKyAgICAqLworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmZvcmNlUmVkcmF3KCkK
K3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXco
bV93aWRnZXQpOworICAgIGVsc2UKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KEdUS19X
SURHRVQoY29udGFpbmluZ1dpbmRvdygpKSk7Cit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBQbHVnaW5WaWV3R3RrOjpiaW5kaW5nSW5zdGFuY2UoKQoreworICAgIE5QT2JqZWN0KiBvYmpl
Y3QgPSAwOworCisgICAgaWYgKCFtX3BsdWdpbiB8fCAhbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmdldHZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5QRXJyb3IgbnBFcnI7CisgICAg
eworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAg
ICAgbnBFcnIgPSBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwg
TlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCwgJm9iamVjdCk7CisgICAgfQorCisgICAgaWYg
KG5wRXJyICE9IE5QRVJSX05PX0VSUk9SIHx8ICFvYmplY3QpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVmUHRyPEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+IHJvb3QgPSBtX3BhcmVudEZy
YW1lLT5jcmVhdGVSb290T2JqZWN0KHRoaXMsIG1fcGFyZW50RnJhbWUtPnNjcmlwdFByb3h5KCkt
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqaW5zdGFuY2Ug
PSBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Y3JlYXRlQmluZGluZ0Zvckxhbmd1YWdlSW5zdGFu
Y2UoS0pTOjpCaW5kaW5nczo6SW5zdGFuY2U6OkNMYW5ndWFnZSwgb2JqZWN0LCByb290LnJlbGVh
c2UoKSk7CisKKyAgICBfTlBOX1JlbGVhc2VPYmplY3Qob2JqZWN0KTsKKworICAgIHJldHVybiBp
bnN0YW5jZTsKK30KKworUGx1Z2luVmlld0d0azo6flBsdWdpblZpZXdHdGsoKQoreworICAgIHN0
b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAgIGZyZWVTdHJp
bmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0cmluZ0FycmF5
KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBpZiAoIW1fbmVlZHNYRW1iZWQg
JiYgR1RLX0lTX1dJREdFVChtX3dpZGdldCkpCisgICAgICAgIGd0a193aWRnZXRfZGVzdHJveSht
X3dpZGdldCk7CisgICAgbV93aW5kb3cgPSAwOworICAgIHNldEd0a1dpZGdldChOVUxMKTsKKwor
ICAgIG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOwor
CisgICAgaWYgKG1fcGx1Z2luICYmICEobV9xdWlya3MuY29udGFpbnMoUGx1Z2luUXVpcmtEb250
VW5sb2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3R3RrOjpkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSogc3RyZWFtKQorewor
ICAgIEFTU0VSVChtX3N0cmVhbXMuY29udGFpbnMoc3RyZWFtKSk7CisKKyAgICBtX3N0cmVhbXMu
cmVtb3ZlKHN0cmVhbSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5
IHJlcXVlc3RzIHdpbmRvd2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIg
YWdlbnQKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNo
IikgeworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdl
bnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUp
OworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVN
ZXNzYWdlcyk7CisgICAgfQorCisgICAgLy8gVGhlIFdNUCBwbHVnaW4gc2V0cyBpdHMgc2l6ZSBv
biB0aGUgZmlyc3QgTlBQX1NldFdpbmRvdyBjYWxsIGFuZCBuZXZlciB1cGRhdGVzIGl0cyBzaXpl
LCBzbworICAgIC8vIGNhbGwgU2V0V2luZG93IHdoZW4gdGhlIHBsdWdpbiB2aWV3IGhhcyBhIGNv
cnJlY3Qgc2l6ZQorICAgIGlmIChtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJNaWNyb3NvZnQi
KSAmJiBtX3BsdWdpbi0+bmFtZSgpLmNvbnRhaW5zKCJXaW5kb3dzIE1lZGlhIikpIHsKKyAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpOworCisg
ICAgICAgIC8vIFdpbmRvd2xlc3MgbW9kZSBkb2VzIG5vdCB3b3JrIGF0IGFsbCB3aXRoIHRoZSBX
TVAgcGx1Z2luIHNvIGp1c3QgcmVtb3ZlIHRoYXQgcGFyYW1ldGVyIAorICAgICAgICAvLyBhbmQg
ZG9uJ3QgcGFzcyBpdCB0byB0aGUgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdp
blF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pOworICAgIH0KKworICAgIC8vIFRoZSBE
aXZYIHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwg
YW5kIG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hl
biB0aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1pbWVUeXBlID09
ICJ2aWRlby9kaXZ4IikKKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGwpOworCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBhIHByb2JsZW0gaW4gb3VyIE5QUnVudGltZSBiaW5kaW5nczsgaWYgYSBwbHVnLWluIGNyZWF0
ZXMgYW4KKyAgICAvLyBOUE9iamVjdCBhbmQgcGFzc2VzIGl0IHRvIGEgZnVuY3Rpb24gaXQncyBu
b3QgcG9zc2libGUgdG8gc2VlIHdoYXQgcm9vdCBvYmplY3QgdGhhdCBOUE9iamVjdCBiZWxvbmdz
IHRvLgorICAgIC8vIFRodXMsIHdlIGRvbid0IGtub3cgdGhhdCB0aGUgb2JqZWN0IHNob3VsZCBi
ZSBpbnZhbGlkYXRlZCB3aGVuIHRoZSBwbHVnLWluIGluc3RhbmNlIGdvZXMgYXdheS4KKyAgICAv
LyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzU0ODc3NDI+LgorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBw
bGljYXRpb24veC1zaWx2ZXJsaWdodCIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgLy8gUHJldmVudCB0aGUgUmVhbCBwbHVnaW4gZnJv
bSBjYWxsaW5nIHRoZSBXaW5kb3cgUHJvYyByZWN1cnNpdmVseSwgY2F1c2luZyB0aGUgc3RhY2sg
dG8gb3ZlcmZsb3cuCisgICAgaWYgKG1pbWVUeXBlID09ICJhdWRpby94LXBuLXJlYWxhdWRpby1w
bHVnaW4iKQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2FsbFduZFByb2NG
b3JTYW1lTWVzc2FnZVJlY3Vyc2l2ZWx5KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRQ
YXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJUKHBhcmFtTmFtZXMuc2l6ZSgpID09
IHBhcmFtVmFsdWVzLnNpemUoKSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gcGFyYW1OYW1lcy5z
aXplKCk7CisgICAgdW5zaWduZWQgcGFyYW1Db3VudCA9IDA7CisKKyAgICBtX3BhcmFtTmFtZXMg
PSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1hbGxvYyhzaXplb2YoY2hhciopICogc2l6
ZSkpOworICAgIG1fcGFyYW1WYWx1ZXMgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZmFzdE1h
bGxvYyhzaXplb2YoY2hhciopICogc2l6ZSkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7IGkrKykgeworICAgICAgICAgaWYgKChtX3F1aXJrcy5jb250YWlucyhQbHVnaW5R
dWlya1JlbW92ZVdpbmRvd2xlc3NWaWRlb1BhcmFtKSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UocGFy
YW1OYW1lc1tpXSwgIndpbmRvd2xlc3N2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgbV9wYXJhbU5hbWVzW3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJh
bU5hbWVzW2ldKTsKKyAgICAgICAgbV9wYXJhbVZhbHVlc1twYXJhbUNvdW50XSA9IGNyZWF0ZVVU
RjhTdHJpbmcocGFyYW1WYWx1ZXNbaV0pOworCisgICAgICAgIHBhcmFtQ291bnQrKzsKKyAgICB9
CisKKyAgICBtX3BhcmFtQ291bnQgPSBwYXJhbUNvdW50OworfQorCitQbHVnaW5WaWV3R3RrOjpQ
bHVnaW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgUGx1
Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQor
ICAgIDogbV9wbHVnaW4ocGx1Z2luKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBt
X3BhcmVudEZyYW1lKHBhcmVudEZyYW1lKQorICAgICwgbV9pc1N0YXJ0ZWQoZmFsc2UpCisgICAg
LCBtX3VybCh1cmwpCisgICAgLCBtX2Jhc2VVUkwobV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmNv
bXBsZXRlVVJMKG1fcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKSkpCisgICAgLCBt
X3N0YXR1cyhQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgLCBtX3JlcXVlc3RU
aW1lcih0aGlzLCAmUGx1Z2luVmlld0d0azo6cmVxdWVzdFRpbWVyRmlyZWQpCisgICAgLCBtX3Bh
cmFtTmFtZXMoMCkKKyAgICAsIG1fcGFyYW1WYWx1ZXMoMCkKKyAgICAsIG1faXNXaW5kb3dlZCh0
cnVlKQorICAgICwgbV9pc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFs
c2UpCisgICAgLCBtX2hhdmVJbml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fd2luZG93KDApCisg
ICAgLCBtX2xhc3RNZXNzYWdlKDApCisgICAgLCBtX2xvYWRNYW51YWxseShsb2FkTWFudWFsbHkp
CisgICAgLCBtX21hbnVhbFN0cmVhbSgwKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fbmVl
ZHNYRW1iZWQoZmFsc2UpCit7CisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBtX3N0YXR1
cyA9IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX2luc3RhbmNlID0gJm1faW5zdGFuY2VTdHJ1Y3Q7CisgICAgbV9pbnN0YW5jZS0+
bmRhdGEgPSB0aGlzOworCisgICAgbV9taW1lVHlwZSA9IG1pbWVUeXBlLnV0ZjgoKTsKKyAgICBk
ZXRlcm1pbmVRdWlya3MobWltZVR5cGUpOworCisgICAgc2V0UGFyYW1ldGVycyhwYXJhbU5hbWVz
LCBwYXJhbVZhbHVlcyk7CisKKyAgICBtX21vZGUgPSBtX2xvYWRNYW51YWxseSA/IE5QX0ZVTEwg
OiBOUF9FTUJFRDsKKworICAgIHJlc2l6ZShzaXplKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3Rr
Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7Cisg
ICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgewor
ICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2Fu
Tm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQo
KSkgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmdldHZhbHVlKQorICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9p
bnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBk
ZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAg
ICAgIG1fd2lkZ2V0ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsK
KyAgICAgICAgc2V0R3RrV2lkZ2V0KG1fd2lkZ2V0KTsKKyAgICB9IGVsc2UgaWYgKG1faXNXaW5k
b3dlZCkKKyAgICAgICAgbV93aWRnZXQgPSBndGtfeHRiaW5fbmV3KEdUS19XSURHRVQobV9wYXJl
bnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIE5VTEwpOworI2Vs
c2UKKyAgICBtX3dpZGdldCA9IGdka19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCksIG1fd2lkZ2V0KTsK
KyAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOworI2VuZGlmCisgICAgaWYgKG1faXNXaW5kb3dl
ZCkKKyAgICAgIGd0a193aWRnZXRfc2hvdyAobV93aWRnZXQpOworCisgICAgaWYgKG1faXNXaW5k
b3dlZCkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgTlBTZXRXaW5kb3dD
YWxsYmFja1N0cnVjdCogd3MgPSBnX25ldzAoTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCwgMSk7
CisKKyAgICB3cy0+dHlwZSA9IDA7CisKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAg
ICB3cy0+ZGlzcGxheSA9IEdES19XSU5ET1dfWERJU1BMQVkobV93aWRnZXQtPndpbmRvdyk7Cisg
ICAgICAgIHdzLT52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX2RyYXdhYmxlX2dldF92
aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2lkZ2V0LT53aW5kb3cpKSk7CisgICAgICAgIHdzLT5kZXB0
aCA9IGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpZGdldC0+d2luZG93
KSktPmRlcHRoOworICAgICAgICB3cy0+Y29sb3JtYXAgPSBHREtfQ09MT1JNQVBfWENPTE9STUFQ
KGdka19kcmF3YWJsZV9nZXRfY29sb3JtYXAoR0RLX0RSQVdBQkxFKG1fd2lkZ2V0LT53aW5kb3cp
KSk7CisgICAgICAgIG1fd2luZG93ID0gR0RLX1dJTkRPV19YV0lORE9XKG1fd2lkZ2V0LT53aW5k
b3cpOworICAgIH0gZWxzZSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2lk
Z2V0KS0+eHRkaXNwbGF5OworICAgICAgICB3cy0+dmlzdWFsID0gR1RLX1hUQklOKG1fd2lkZ2V0
KS0+eHRjbGllbnQueHR2aXN1YWw7CisgICAgICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJTihtX3dp
ZGdldCktPnh0Y2xpZW50Lnh0ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdUS19YVEJJ
TihtX3dpZGdldCktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisgICAgICAgIG1fd2luZG93ID0gR1RL
X1hUQklOKG1fd2lkZ2V0KS0+eHR3aW5kb3c7CisKKyAgICAgICAgWEZsdXNoICh3cy0+ZGlzcGxh
eSk7CisgICAgfQorCisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKyNpZmRl
ZiBHREtfV0lORE9XSU5HX1dJTjMyCisgICAgbV93aW5kb3cgPSBHREtfV0lORE9XX0hXTkQobV93
aWRnZXQtPndpbmRvdyk7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7
CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyAgICAgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV93aW5kb3c7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBX
aW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3F1aXJrcy5jb250YWlucyhQ
bHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHNldE5QV2luZG93
UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2Fk
ZWRTdWNjZXNzZnVsbHk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVCghbV9t
YW51YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0gPSBuZXcgUGx1Z2luU3RyZWFtKHRo
aXMsIG1fcGFyZW50RnJhbWUsIG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVu
dExvYWRlcigpLT5yZXF1ZXN0KCksIGZhbHNlLCAwLCBwbHVnaW4oKS0+cGx1Z2luRnVuY3MoKSwg
aW5zdGFuY2UoKSwgbV9xdWlya3MpOworICAgIG1fbWFudWFsU3RyZWFtLT5zZXRMb2FkTWFudWFs
bHkodHJ1ZSk7CisKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJl
c3BvbnNlKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEFTU0VSVChtX21hbnVhbFN0cmVhbSk7Cisg
ICAgCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZFJlY2VpdmVEYXRhKDAsIGRhdGEsIGxlbmd0aCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6ZGlkRmluaXNoTG9hZGluZygpCit7CisgICAgQVNT
RVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5kaWRGaW5pc2hMb2Fk
aW5nKDApOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUKG1fbWFudWFsU3RyZWFtKTsKKworICAgIG1fbWFu
dWFsU3RyZWFtLT5kaWRGYWlsKDAsIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpblBhY2thZ2VHdGs6On5QbHVnaW5QYWNrYWdlR3RrKCkKK3sKKyAgICBBU1NFUlQo
IW1faXNMb2FkZWQpOworfQorCitQbHVnaW5QYWNrYWdlR3RrOjpQbHVnaW5QYWNrYWdlR3RrKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCisgICAgOiBtX2lz
TG9hZGVkKGZhbHNlKQorICAgICwgbV9sb2FkQ291bnQoMCkKKyAgICAsIG1fcGF0aChwYXRoKQor
ICAgICwgbV9tb2R1bGUoMCkKKyAgICAsIG1fbGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCkKK3sK
KyAgICBpbnQgcG9zID0gbV9wYXRoLmRlcHJlY2F0ZWRTdHJpbmcoKS5maW5kUmV2KCcvJyk7CisK
KyAgICBtX2ZpbGVOYW1lID0gbV9wYXRoLnJpZ2h0KG1fcGF0aC5sZW5ndGgoKSAtIHBvcyAtIDEp
OworCit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAo
IWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgZ2NoYXIqIHR5cGVz
ID0gbV9OUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsKKyAgICBnY2hhcioqIG1pbWVEZXNjcyA9IGdf
c3Ryc3BsaXQodHlwZXMsICI7IiwgLTEpOworICAgIGZvciAoaW50IGkgPSAwOyBtaW1lRGVzY3Nb
aV0gJiYgbWltZURlc2NzW2ldWzBdOyBpKyspIHsKKyAgICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9
IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIsIDMpOworCisgICAgICAgIFN0cmluZyBkZXNj
cmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWltZURhdGFbMl0pOworICAgICAgICBnY2hhcioq
IGV4dGVuc2lvbnMgPSBnX3N0cnNwbGl0KG1pbWVEYXRhWzFdLCAiLCIsIC0xKTsKKworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBleHRl
bnNpb25zW2pdOyBqKyspCisgICAgICAgICAgICBleHRWZWN0b3IuYXBwZW5kKFN0cmluZzo6ZnJv
bVVURjgoZXh0ZW5zaW9uc1tqXSkpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQo
bWltZURhdGFbMF0sIGV4dFZlY3Rvcik7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFk
ZChtaW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOworCisgICAgICAgIGdfc3RyZnJlZXYoZXh0ZW5z
aW9ucyk7CisgICAgICAgIGdfc3RyZnJlZXYobWltZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZy
ZWV2KG1pbWVEZXNjcyk7CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJy
ID0gbV9OUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZidWZmZXIpOworICAg
IGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKwor
ICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gbV9OUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRl
c2NyaXB0aW9uU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9S
KQorICAgICAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworCisgICAgdW5sb2FkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZUd0azo6bG9hZCgpCit7CisgICAg
aWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgbV9tb2R1bGUgPSBnX21vZHVsZV9vcGVuKChtX3BhdGgudXRm
OCgpKS5kYXRhKCksIEdfTU9EVUxFX0JJTkRfTE9DQUwpOworICAgIGlmICghbV9tb2R1bGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBf
SW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisg
ICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5Q
X0luaXRpYWxpemUpOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldE1JTUVE
ZXNjcmlwdGlvbiIsICh2b2lkKiopJm1fTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21v
ZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRk
b3duKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lk
KiopJm1fTlBQX0dldFZhbHVlKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUF9H
ZXRNSU1FRGVzY3JpcHRpb24gfHwgIW1fTlBQX1NodXRkb3duIHx8ICFtX05QUF9HZXRWYWx1ZSkK
KyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6
ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBzaXplb2YobV9w
bHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9mIChtX2Jyb3dz
ZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3MucmVxdWVzdHJl
YWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3RyZWFtID0gTlBO
X05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07CisgICAgbV9i
cm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJGdW5jcy51YWdl
bnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9jID0gTlBOX01l
bUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0
dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dmFs
dWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0
VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0
ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlk
YXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVk
cmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2YUVudjsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVk
U3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1Bv
cFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50
dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0
c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50SWRlbnRp
ZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50
aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSBf
TlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3Qg
PSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBf
TlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2JqZWN0ID0gX05Q
Tl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9OUE5fSW52b2tl
OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7
CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNz
Lmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVuY3MuaGFzbWV0
aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24g
PSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBO
X0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93c2VyRnVuY3Ms
ICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IpCisgICAg
ICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVybiB0cnVlOwor
CithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZUd0azo6dW5sb2FkKCkKK3sKKyAgICBpZiAoIW1faXNM
b2FkZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgtLW1fbG9hZENvdW50ID4gMCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9OUFBfU2h1dGRvd24oKTsKKworICAgIHVubG9hZFdpdGhv
dXRTaHV0ZG93bigpOworfQorCit2b2lkIFBsdWdpblBhY2thZ2VHdGs6OnVubG9hZFdpdGhvdXRT
aHV0ZG93bigpCit7CisgICAgaWYgKCFtX2lzTG9hZGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQobV9sb2FkQ291bnQgPT0gMCk7CisgICAgQVNTRVJUKG1fbW9kdWxlKTsKKworICAg
IGdfbW9kdWxlX2Nsb3NlIChtX21vZHVsZSk7CisKKyAgICBtX2lzTG9hZGVkID0gZmFsc2U7Cit9
CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpblBhY2thZ2VHdGs6OmNyZWF0ZVBhY2thZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBQbHVn
aW5QYWNrYWdlR3RrKiBwYWNrYWdlID0gbmV3IFBsdWdpblBhY2thZ2VHdGsocGF0aCwgbGFzdE1v
ZGlmaWVkKTsKKworICAgIGlmICghcGFja2FnZS0+ZmV0Y2hJbmZvKCkpIHsKKyAgICAgICAgZGVs
ZXRlIHBhY2thZ2U7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
cGFja2FnZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZUd0azo6aGFzaCgpIGNvbnN0Cit7
IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+
aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2Rlcyks
IDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2lu
UGFja2FnZUd0azo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYSwgY29uc3QgUGx1Z2lu
UGFja2FnZUd0ayYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNj
cmlwdGlvbjsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMt
bW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3
aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioq
KioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vu
c2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25z
IHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUg
R3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZl
bG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4K
KyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0
aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRo
ZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHBy
b3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisg
KiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BM
IG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlv
dXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBs
YWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJl
ZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHBy
b3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBv
ciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLyAgIAor
CisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2RlZmluZSBfX0dUS19YVEJJTl9IX18KKworI2lu
Y2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+CisjaW5j
bHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpZmRlZiBNT1pJTExB
X0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgorI2lmZGVmIF9JTVBMX0dUS1hUQklOX0FQSQor
I2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQT1JUXyh0eXBlKQorI2Vsc2UKKyNkZWZp
bmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8odHlwZSkKKyNlbmRpZgorI2Vsc2UKKyNk
ZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3Bs
dXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVkZWYgc3Ry
dWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJpbkNsYXNzIEd0
a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZUEVfWFRCSU4gICAgICAgICAgICAgICAgICAo
Z3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmluZSBHVEtfWFRCSU4ob2JqKSAgICAgICAgICAg
ICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluKSkKKyNkZWZpbmUgR1RL
X1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR1RLX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz
cyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVf
WFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmluZSBHVEtfSVNfWFRCSU4ob2JqKSAgICAgICAg
ICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQorI2RlZmluZSBHVEtfSVNfWFRCSU5f
Q0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikpCit0
eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGllbnQ7CisKK3N0cnVjdCBfWHRDbGllbnQgewor
ICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdldAl0b3Bfd2lkZ2V0OyAgICAvKiBUaGUgdG9w
bGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGlsZF93aWRnZXQ7ICAvKiBUaGUgZW1iZWRkZWQg
d2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7CisgIGludAkJeHRkZXB0aDsKKyAgQ29sb3Jt
YXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdpbmRvdzsKK307CisKK3N0cnVjdCBfR3RrWHRC
aW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tldDsKKyAgR2RrV2luZG93ICAgICAqcGFyZW50
X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRkaXNwbGF5OyAgICAgICAgLyogWHQgVG9vbGtp
dCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAgICAgeHR3aW5kb3c7ICAgICAgICAgLyogWHQg
VG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAgICAgICAgIHgsIHk7CisgIGdpbnQgICAgICAg
ICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50CSB4dGNsaWVudDsgICAgICAgICAvKiBYdCBD
bGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MKK3sKKyAg
R3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOworfTsKKworR1RLWFRCSU5fQVBJKEd0a1R5cGUp
ICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpOworR1RLWFRCSU5fQVBJKEd0a1dpZGdldCAq
KSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqZik7CitH
VEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0Qmlu
ICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RLWFRCSU5fQVBJKHZvaWQpICAgICAgIGd0a194
dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpOworCit0eXBlZGVmIHN0
cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xhdGlvbnMgIHRyYW5zbGF0aW9uczsgICAgICAg
LyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5hZ2VyICAgICovCisgICAgWHRCb3VuZEFjdGlv
bnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJvY2VkdXJlIGJpbmRpbmdzIGZvciBhY3Rpb25z
ICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVjICpjdXJyZW50X3N0YXRlOyAgLyogVHJhbnNs
YXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAgIGxhc3RF
dmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAgIAorCit0eXBlZGVmIHN0cnVjdCBfQ29yZVBh
cnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxmOyAgICAgICAgICAgICAgIC8qIHBvaW50ZXIg
dG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLworICAgIFdpZGdldENsYXNzICAgICB3aWRnZXRf
Y2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lkZ2V0J3MgQ2xhc3NSZWMgICAgICAqLworICAg
IFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAgICAgICAgIC8qIHBhcmVudCB3aWRnZXQgICAg
ICAgICAgICAgICAgICAgICAqLworICAgIFhybU5hbWUgICAgICAgICB4cm1fbmFtZTsgICAgICAg
ICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1YXJraWZpZWQgICAqLworICAgIEJvb2xlYW4g
ICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8qIG1hcmtlZCBmb3IgZGVzdHJveSAgICAgICAg
ICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0ICBkZXN0cm95X2NhbGxiYWNrczsgIC8qIHdo
byB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3llZCAqLworICAgIFh0UG9pbnRlciAgICAgICBj
b25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFpbnQgcmVjb3JkICAgICAgICAgICAgICAgICAq
LworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAgICAgICAgICAgICAgIC8qIHdpbmRvdyBwb3Np
dGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICB3aWR0aCwgaGVp
Z2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25zICAgICAgICAgICAgICAgICAqLworICAgIERp
bWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgd2lkdGgg
ICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBtYW5hZ2VkOyAgICAgICAgICAg
IC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2VkPyAgICAgICAqLworICAgIEJvb2xlYW4gICAg
ICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlzIHdpZGdldCBzZW5zaXRpdmUgdG8gdXNlciBl
dmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBhbmNlc3Rvcl9zZW5zaXRpdmU7IC8qIGFyZSBh
bGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAqLworICAgIFh0RXZlbnRUYWJsZSAgICBldmVu
dF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8gZXZlbnQgZGlzcGF0Y2hlciAgICAgICAqLwor
ICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAgICAgICAgICAgIC8qIHRyYW5zbGF0aW9uIG1h
bmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0VHJhbnNsYXRpb25zICBhY2NlbGVyYXRvcnM7
ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0aW9ucyAgICAgICAgICAqLworICAgIFBpeGVs
ICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4ZWwgICAg
ICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBib3JkZXJfcGl4bWFwOyAgICAgIC8q
IHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwgICAgICAqLworICAgIFdpZGdldExpc3QgICAg
ICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qgb2YgcG9wdXBzICAgICAgICAgICAgICAgICAg
ICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1fcG9wdXBzOyAgICAgICAgIC8qIGhvdyBtYW55
IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLworICAgIFN0cmluZyAgICAgICAgICBuYW1lOyAg
ICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lICAgICAgICAgICAgICAqLworICAg
IFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAgICAgICAgIC8qIHdpbmRvdydzIHNjcmVlbiAg
ICAgICAgICAgICAgICAgICAqLworICAgIENvbG9ybWFwICAgICAgICBjb2xvcm1hcDsgICAgICAg
ICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFdpbmRvdyAg
ICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8qIHdpbmRvdyBJRCAgICAgICAgICAgICAgICAg
ICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBkZXB0aDsgICAgICAgICAgICAgIC8qIG51
bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAgICAqLworICAgIFBpeGVsICAgICAgICAgICBi
YWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeGVsICAgICAgICAgICAq
LworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3JvdW5kX3BpeG1hcDsgIC8qIHdpbmRvdyBiYWNr
Z3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAgIEJvb2xlYW4gICAgICAgICB2aXNpYmxlOyAg
ICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQgYW5kIG5vdCBvY2NsdWRlZD8qLworICAgIEJv
b2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5hZ2VkOy8qIG1hcCB3aW5kb3cgaWYgaXQncyBt
YW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsKKwordHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJl
YyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9IFdpZGdldFJlYywgQ29yZVJlYzsgICAKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNlbmRpZiAv
KiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5W
aWV3R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3Rr
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBQbHVnaW5WaWV3R3RrX0gKKyNkZWZpbmUgUGx1Z2luVmlld0d0a19ICisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblF1aXJrU2V0LmgiCisjaW5j
bHVkZSAiUGx1Z2luU3RyZWFtLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVf
aW50ZXJuYWwuaCIKKyNpbmNsdWRlIDxndGsvZ3Rrd2lkZ2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgS0pTIHsKKyAgICBuYW1lc3BhY2UgQmluZGluZ3MgeworICAgICAgICBjbGFzcyBJ
bnN0YW5jZTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVt
ZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OworICAg
IGNsYXNzIEtleWJvYXJkRXZlbnQ7CisgICAgY2xhc3MgTW91c2VFdmVudDsKKyAgICBjbGFzcyBL
VVJMOworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGs7CisgICAgY2xhc3MgUGx1Z2luUmVxdWVz
dEd0azsKKyAgICBjbGFzcyBQbHVnaW5TdHJlYW07CisgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsK
KyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIAorICAgIGVudW0gUGx1Z2luU3RhdHVz
IHsKKyAgICAgICAgUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbiwKKyAgICAgICAgUGx1Z2lu
U3RhdHVzQ2FuTm90TG9hZFBsdWdpbiwKKyAgICAgICAgUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vz
c2Z1bGx5CisgICAgfTsKKworICAgIGNsYXNzIFBsdWdpblZpZXdHdGsgOiBwdWJsaWMgV2lkZ2V0
LCBwcml2YXRlIFBsdWdpblN0cmVhbUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBQbHVn
aW5WaWV3R3RrKEZyYW1lKiBwYXJlbnRGcmFtZSwgY29uc3QgSW50U2l6ZSYsIFBsdWdpblBhY2th
Z2VHdGsqIHBsdWdpbiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSk7CisgICAgICAgIHZpcnR1YWwgflBs
dWdpblZpZXdHdGsoKTsKKworICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4oKSBjb25z
dCB7IHJldHVybiBtX3BsdWdpbi5nZXQoKTsgfQorICAgICAgICBOUFAgaW5zdGFuY2UoKSBjb25z
dCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisKKyAgICAgICAgdm9pZCBzZXROUFdpbmRvd1JlY3Qo
Y29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0aWMgUGx1Z2luVmlld0d0ayogY3VycmVudFBs
dWdpblZpZXcoKTsKKworICAgICAgICBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogYmluZGluZ0lu
c3RhbmNlKCk7CisKKyAgICAgICAgUGx1Z2luU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzOyB9CisKKyAgICAgICAgLy8gTlBOIGZ1bmN0aW9ucworICAgICAgICBOUEVycm9y
IGdldFVSTE5vdGlmeShjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9pZCog
bm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgZ2V0VVJMKGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0KTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJMTm90aWZ5KGNvbnN0IGNo
YXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidXQs
IE5QQm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBwb3N0VVJM
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidXQsIE5QQm9vbCBmaWxlKTsKKyAgICAgICAgTlBFcnJvciBuZXdTdHJlYW0oTlBNSU1F
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKTsKKyAgICAg
ICAgaW50MzIgd3JpdGUoTlBTdHJlYW0qIHN0cmVhbSwgaW50MzIgbGVuLCB2b2lkKiBidWZmZXIp
OworICAgICAgICBOUEVycm9yIGRlc3Ryb3lTdHJlYW0oTlBTdHJlYW0qIHN0cmVhbSwgTlBSZWFz
b24gcmVhc29uKTsKKyAgICAgICAgY29uc3QgY2hhciogdXNlckFnZW50KCk7CisgICAgICAgIHZv
aWQgc3RhdHVzKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworICAgICAgICBOUEVycm9yIGdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSk7CisgICAgICAgIE5QRXJyb3Igc2V0
VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBp
bnZhbGlkYXRlUmVjdChOUFJlY3QqKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9uKE5Q
UmVnaW9uKTsKKyAgICAgICAgdm9pZCBmb3JjZVJlZHJhdygpOworCisgICAgICAgIHZvaWQgZGlz
Y29ubmVjdFN0cmVhbShQbHVnaW5TdHJlYW0qKTsKKyAgICAgICAgdm9pZCBzdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKFBsdWdpblN0cmVhbSogc3RyZWFtKSB7IGRpc2Nvbm5lY3RTdHJlYW0oc3RyZWFt
KTsgfQorCisgICAgICAgIC8vIFdpZGdldCBmdW5jdGlvbnMKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cygp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2hvdygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGlk
ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYpOworICAgICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworCisgICAgICAgIC8vIFVzZWQgZm9y
IG1hbnVhbCBsb2FkaW5nCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIHZvaWQg
ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9p
ZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworICAgICAgICB2b2lkIGluaXQoKTsKKyAgICAg
ICAgYm9vbCBzdGFydCgpOworICAgICAgICB2b2lkIHN0b3AoKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgc2V0Q3VycmVudFBsdWdpblZpZXcoUGx1Z2luVmlld0d0ayopOworICAgICAgICBOUEVycm9y
IGxvYWQoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgdm9p
ZCogbm90aWZ5RGF0YSk7CisgICAgICAgIE5QRXJyb3IgaGFuZGxlUG9zdChjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBib29s
IGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBhbGxv
d0hlYWRlcnMpOworICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4gbV9wbHVnaW47Cisg
ICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICAgICAgRnJhbWUqIG1fcGFyZW50RnJhbWU7
CisgICAgICAgIGJvb2wgbV9pc1N0YXJ0ZWQ7CisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAg
IEtVUkwgbV9iYXNlVVJMOworICAgICAgICBQbHVnaW5TdGF0dXMgbV9zdGF0dXM7CisgICAgICAg
IFZlY3RvcjxJbnRSZWN0PiBtX2ludmFsaWRSZWN0czsKKworICAgICAgICB2b2lkIHBlcmZvcm1S
ZXF1ZXN0KFBsdWdpblJlcXVlc3RHdGsqKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlcXVlc3Qo
UGx1Z2luUmVxdWVzdEd0ayopOworICAgICAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKFRpbWVy
PFBsdWdpblZpZXdHdGs+Kik7CisgICAgICAgIFRpbWVyPFBsdWdpblZpZXdHdGs+IG1fcmVxdWVz
dFRpbWVyOworCisgICAgICAgIHZvaWQgdXBkYXRlV2luZG93KCkgY29uc3Q7CisgICAgICAgIHZv
aWQgZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2b2lk
IHBhaW50TWlzc2luZ1BsdWdpbkljb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OworCisgICAgICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50Kik7Cisg
ICAgICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50Kik7CisKKyAgICAgICAgaW50
IG1fbW9kZTsKKyAgICAgICAgaW50IG1fcGFyYW1Db3VudDsKKyAgICAgICAgY2hhcioqIG1fcGFy
YW1OYW1lczsKKyAgICAgICAgY2hhcioqIG1fcGFyYW1WYWx1ZXM7CisKKyAgICAgICAgQ1N0cmlu
ZyBtX21pbWVUeXBlOworICAgICAgICBDU3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAgIE5Q
UCBtX2luc3RhbmNlOworICAgICAgICBOUFBfdCBtX2luc3RhbmNlU3RydWN0OworICAgICAgICBO
UFdpbmRvdyBtX25wV2luZG93OworCisgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVh
bT4gPiBtX3N0cmVhbXM7CisgICAgICAgIFZlY3RvcjxQbHVnaW5SZXF1ZXN0R3RrKj4gbV9yZXF1
ZXN0czsKKworICAgICAgICBQbHVnaW5RdWlya1NldCBtX3F1aXJrczsKKyAgICAgICAgYm9vbCBt
X2lzV2luZG93ZWQ7CisgICAgICAgIGJvb2wgbV9pc1RyYW5zcGFyZW50OworICAgICAgICBib29s
IG1faXNWaXNpYmxlOworICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOworCisjaWZkZWYg
R0RLX1dJTkRPV0lOR19YMTEKKyAgICAgICAgWElEIG1fd2luZG93OyAvLyBmb3Igd2luZG93ZWQg
cGx1Zy1pbnMKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKwlIV05EIG1fd2lu
ZG93OworI2VuZGlmCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX2NsaXBSZWN0OyAvLyBUaGUg
Y2xpcCByZWN0IHRvIGFwcGx5IHRvIGEgd2luZG93ZWQgcGx1Zy1pbgorICAgICAgICBtdXRhYmxl
IEludFJlY3QgbV93aW5kb3dSZWN0OyAvLyBPdXIgd2luZG93IHJlY3QuCisKKyAgICAgICAgdW5z
aWduZWQgbV9sYXN0TWVzc2FnZTsKKworICAgICAgICBib29sIG1fbG9hZE1hbnVhbGx5OworICAg
ICAgICBSZWZQdHI8UGx1Z2luU3RyZWFtPiBtX21hbnVhbFN0cmVhbTsKKworICAgICAgICBzdGF0
aWMgUGx1Z2luVmlld0d0ayogc19jdXJyZW50UGx1Z2luVmlldzsKKworICAgICAgICBHdGtXaWRn
ZXQqIG1fd2lkZ2V0OworICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblBhY2thZ2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1Bs
dWdpblBhY2thZ2VHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBsdWdpblBhY2thZ2VHdGtfSAorI2RlZmluZSBQbHVnaW5QYWNr
YWdlR3RrX0gKKworI2luY2x1ZGUgPGdtb2R1bGUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNp
bmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCisjdW5kZWYgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gTUlNRVRvRGVz
Y3JpcHRpb25zTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
ID4gTUlNRVRvRXh0ZW5zaW9uc01hcDsKKworICAgIGNsYXNzIFBsdWdpblBhY2thZ2VHdGsgOiBw
dWJsaWMgUmVmQ291bnRlZDxQbHVnaW5QYWNrYWdlR3RrPiB7CisgICAgcHVibGljOgorICAgICAg
ICB+UGx1Z2luUGFja2FnZUd0aygpOworICAgICAgICBzdGF0aWMgUGx1Z2luUGFja2FnZUd0ayog
Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlm
aWVkKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
Y3JpcHRpb247IH0KKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
aWxlTmFtZTsgfQorCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRv
RGVzY3JpcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9EZXNjcmlwdGlvbnM7IH0KKyAg
ICAgICAgY29uc3QgTUlNRVRvRXh0ZW5zaW9uc01hcCYgbWltZVRvRXh0ZW5zaW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVRvRXh0ZW5zaW9uczsgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZUd0
ayYgYSwgY29uc3QgUGx1Z2luUGFja2FnZUd0ayYgYik7CisKKyAgICAgICAgYm9vbCBsb2FkKCk7
CisgICAgICAgIHZvaWQgdW5sb2FkKCk7CisgICAgICAgIHZvaWQgdW5sb2FkV2l0aG91dFNodXRk
b3duKCk7CisKKyAgICAgICAgY29uc3QgTlBQbHVnaW5GdW5jcyogcGx1Z2luRnVuY3MoKSBjb25z
dCB7IHJldHVybiAmbV9wbHVnaW5GdW5jczsgfQorICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdp
blBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmll
ZCk7CisgICAgICAgIGJvb2wgZmV0Y2hJbmZvKCk7CisKKyAgICAgICAgYm9vbCBtX2lzTG9hZGVk
OworICAgICAgICBpbnQgbV9sb2FkQ291bnQ7CisKKyAgICAgICAgU3RyaW5nIG1fZGVzY3JpcHRp
b247CisgICAgICAgIFN0cmluZyBtX3BhdGg7CisgICAgICAgIFN0cmluZyBtX2ZpbGVOYW1lOwor
ICAgICAgICBTdHJpbmcgbV9uYW1lOworCisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcCBt
X21pbWVUb0Rlc2NyaXB0aW9uczsKKyAgICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcCBtX21pbWVU
b0V4dGVuc2lvbnM7CisKKyAgICAgICAgR01vZHVsZSogbV9tb2R1bGU7CisgICAgICAgIHRpbWVf
dCBtX2xhc3RNb2RpZmllZDsKKworICAgICAgICBOUF9HZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRy
IG1fTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgICAgICBOUFBfU2h1dGRvd25Qcm9jUHRyIG1f
TlBQX1NodXRkb3duOworICAgICAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIG1fTlBQX0dldFZhbHVl
OworICAgICAgICBOUFBsdWdpbkZ1bmNzIG1fcGx1Z2luRnVuY3M7CisgICAgICAgIE5QTmV0c2Nh
cGVGdW5jcyBtX2Jyb3dzZXJGdW5jczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpblBhY2th
Z2VHdGtIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgaW50IGtleSkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oa2V5KS0+aGFzaCgp
OyB9CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNr
YWdlR3RrPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorCisgICAgICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1cm4gZXF1YWwocmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2lu
UGFja2FnZUd0ayo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWZQ
dHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYg
YikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgpKTsg
fQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworLy8gRklYTUU6
IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBXVEYsIHdoZXJlIGl0J3MgaW1wb3Nz
aWJsZSB0byB1c2UgYSBjdXN0b20gSGFzaCBmdW5jdGlvbiBidXQgd2l0aCBkZWZhdWx0IHRyYWl0
cy4KKy8vIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBkbyB0aGlzIHdpdGhvdXQgYSBTdG9yYWdl
VHJhaXRzIHNwZWNpYWxpemF0aW9uLgorbmFtZXNwYWNlIFdURiB7CisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSGFzaEtleVN0b3JhZ2VUcmFpdHM8V2ViQ29yZTo6UGx1Z2luUGFja2FnZUd0a0hhc2gs
IEhhc2hUcmFpdHM8UmVmUHRyPFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+ID4gPiB7CisgICAg
ICAgIHR5cGVkZWYgSW50VHlwZXM8c2l6ZW9mKFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5QYWNrYWdl
R3RrPik+OjpTaWduZWRUeXBlIEludFR5cGU7CisgICAgICAgIHR5cGVkZWYgV2ViQ29yZTo6UGx1
Z2luUGFja2FnZUd0a0hhc2ggSGFzaDsKKyAgICAgICAgdHlwZWRlZiBIYXNoVHJhaXRzPEludFR5
cGU+IFRyYWl0czsKKyAgICB9OworfQorCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9ucGFwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ucGFwaS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2lu
Vmlld0d0ay5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworLy8gVGhlIHBsdWdpbiB2aWV3IGlzIGFsd2F5cyB0aGUgbmRhdGEg
b2YgdGhlIGluc3RhbmNlLC4gU29tZXRpbWVzLCBwbHVnLWlucyB3aWxsIGNhbGwgYW4gaW5zdGFu
Y2Utc3BlY2lmaWMgZnVuY3Rpb24KKy8vIHdpdGggYSBOVUxMIGluc3RhbmNlLiBUbyB3b3JrYXJv
dW5kIHRoaXMsIGNhbGwgdGhlIGxhc3QgcGx1Zy1pbiB2aWV3IHRoYXQgbWFkZSBhIGNhbGwgdG8g
YSBwbHVnLWluLgorLy8gQ3VycmVudGx5LCB0aGUgY3VycmVudCBwbHVnLWluIHZpZXcgaXMgb25s
eSBzZXQgYmVmb3JlIE5QUF9OZXcgaW4gUGx1Z2luVmlld0d0azo6c3RhcnQuCisvLyBUaGlzIHNw
ZWNpZmljYWxseSB3b3JrcyBhcm91bmQgRmxhc2ggYW5kIFNob2Nrd2F2ZS4gV2hlbiB3ZSBjYWxs
IE5QUF9OZXcsIHRoZXkgY2FsbCBOUE5fVXNlcmFnZW50IHdpdGggYSBOVUxMIGluc3RhbmNlLgor
c3RhdGljIFBsdWdpblZpZXdHdGsqIHBsdWdpblZpZXdGb3JJbnN0YW5jZShOUFAgaW5zdGFuY2Up
Cit7CisgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLT5uZGF0YSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFBsdWdpblZpZXdHdGsqPihpbnN0YW5jZS0+bmRhdGEpOworICAgIHJldHVy
biBQbHVnaW5WaWV3R3RrOjpjdXJyZW50UGx1Z2luVmlldygpOworfQorCit2b2lkKiBOUE5fTWVt
QWxsb2ModWludDMyIHNpemUpCit7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKwordm9p
ZCBOUE5fTWVtRnJlZSh2b2lkKiBwdHIpCit7CisgICAgZnJlZShwdHIpOworfQorCit1aW50MzIg
TlBOX01lbUZsdXNoKHVpbnQzMiBzaXplKQoreworICAgIC8vIERvIG5vdGhpbmcKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBOUE5fUmVsb2FkUGx1Z2lucyhOUEJvb2wgcmVsb2FkUGFnZXMpCit7
CisgICAgcmVmcmVzaFBsdWdpbnMocmVsb2FkUGFnZXMpOworfQorCitOUEVycm9yIE5QTl9SZXF1
ZXN0UmVhZChOUFN0cmVhbSogc3RyZWFtLCBOUEJ5dGVSYW5nZSogcmFuZ2VMaXN0KQoreworICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworfQorCitOUEVycm9yIE5QTl9HZXRVUkxOb3Rp
ZnkoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdm9p
ZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3Rh
bmNlKS0+Z2V0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBub3RpZnlEYXRhKTsKK30KKworTlBFcnJv
ciBOUE5fR2V0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0
YXJnZXQpCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmdl
dFVSTCh1cmwsIHRhcmdldCk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkxOb3RpZnkoTlBQIGlu
c3RhbmNlLCBjb25zdCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwg
Y29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICBy
ZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+cG9zdFVSTE5vdGlmeSh1cmws
IHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9Q
b3N0VVJMKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQs
IHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpCit7CisgICAgcmV0dXJu
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPnBvc3RVUkwodXJsLCB0YXJnZXQsIGxl
biwgYnVmLCBmaWxlKTsKK30KKworTlBFcnJvciBOUE5fTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwg
TlBNSU1FVHlwZSB0eXBlLCBjb25zdCBjaGFyKiB0YXJnZXQsIE5QU3RyZWFtKiogc3RyZWFtKQor
eworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5uZXdTdHJlYW0o
dHlwZSwgdGFyZ2V0LCBzdHJlYW0pOworfQorCitpbnQzMiBOUE5fV3JpdGUoTlBQIGluc3RhbmNl
LCBOUFN0cmVhbSogc3RyZWFtLCBpbnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcikKK3sKKyAgICByZXR1
cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+d3JpdGUoc3RyZWFtLCBsZW4sIGJ1
ZmZlcik7Cit9CisKK05QRXJyb3IgTlBOX0Rlc3Ryb3lTdHJlYW0oTlBQIGluc3RhbmNlLCBOUFN0
cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pOworfQor
Citjb25zdCBjaGFyKiBOUE5fVXNlckFnZW50KE5QUCBpbnN0YW5jZSkKK3sKKyAgICBQbHVnaW5W
aWV3R3RrKiB2aWV3ID0gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKTsKKworICAgICAv
LyBGSVhNRTogU29tZSBwbHVnLWlucyBjYWxsIE5QTl9Vc2VyQWdlbnQgd2l0aCBhIG51bGwgaW5z
dGFuY2UgaW4gdGhlaXIgTlBfaW5pdGlhbGl6ZSBmdW5jdGlvbiEKKyAgICAgLy8gV2UnZCBuZWVk
IGEgd2F5IHRvIGdldCBhIHVzZXIgYWdlbnQgd2l0aG91dCBoYXZpbmcgYSBmcmFtZSBhcm91bmQu
CisgICAgIGlmICghdmlldykKKyAgICAgICAgIHJldHVybiAwOworIAorICAgIHJldHVybiB2aWV3
LT51c2VyQWdlbnQoKTsKK30KKwordm9pZCBOUE5fU3RhdHVzKE5QUCBpbnN0YW5jZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5z
dGF0dXMobWVzc2FnZSk7Cit9CisKK3ZvaWQgTlBOX0ludmFsaWRhdGVSZWN0KE5QUCBpbnN0YW5j
ZSwgTlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sKKyAgICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5z
dGFuY2UpLT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdCk7Cit9CisKK3ZvaWQgTlBOX0ludmFs
aWRhdGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKQoreworICAg
IHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWdpb24oaW52YWxp
ZFJlZ2lvbik7Cit9CisKK3ZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKK3sKKyAg
ICBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5mb3JjZVJlZHJhdygpOworfQorCitO
UEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2
b2lkKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNl
KS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKK30KKworTlBFcnJvciBOUE5fU2V0VmFsdWUo
TlBQIGluc3RhbmNlLCBOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICBy
ZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+c2V0VmFsdWUodmFyaWFibGUs
IHZhbHVlKTsKK30KKwordm9pZCogTlBOX0dldEphdmFFbnYoKQoreworICAgIC8vIFVuc3VwcG9y
dGVkCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFu
Y2UpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorTlBO
X1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCkKK3sK
K30KKwordm9pZAorTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UpCit7Cit9
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL3hlbWJlZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKiAtKi0gTW9kZTog
QysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6
IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisv
KiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQ
TCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJq
ZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJM
aWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBi
YXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisg
KgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhFTUJFRCBEZWNsYXJhdGlvbi4KKyAqCisg
KiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBN
aWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2
ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRl
cm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRo
ZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJz
aW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGlu
IHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBw
bGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cg
dXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1z
IG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0
bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90
IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91
ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2Yg
dGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBC
TE9DSyAqKioqKiAqLworCisvKiBYRU1CRUQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgWEVNQkVEX0VN
QkVEREVEX05PVElGWSAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUg
ICAgICAgICAgMQorI2RlZmluZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUgICAgICAgIDIKKyNk
ZWZpbmUgWEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAgICAgICAzCisjZGVmaW5lIFhFTUJFRF9G
T0NVU19JTiAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBYRU1CRURfRk9DVVNfT1VUICAgICAg
ICAgICAgICAgIDUKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX05FWFQgICAgICAgICAgICAgICA2Cisj
ZGVmaW5lIFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAgICAgICAgNworI2RlZmluZSBYRU1CRURf
R1JBQl9LRVkgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWEVNQkVEX1VOR1JBQl9LRVkgICAg
ICAgICAgICAgICA5CisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PTiAgICAgICAgICAgICAgMTAK
KyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAgICAgICAgICAxMQorCisvKiBOb24gc3Rh
bmRhcmQgbWVzc2FnZXMqLworI2RlZmluZSBYRU1CRURfR1RLX0dSQUJfS0VZICAgICAgICAgICAg
IDEwOCAKKyNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJfS0VZICAgICAgICAgICAxMDkKKworLyog
RGV0YWlscyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8KKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NV
UlJFTlQgICAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9GT0NVU19GSVJTVCAgICAgICAgICAg
ICAgMQorI2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAgICAgICAgICAgICAgIDIKKworLyogRmxh
Z3MgZm9yIF9YRU1CRURfSU5GTyAqLworI2RlZmluZSBYRU1CRURfTUFQUEVEICAgICAgICAgICAg
ICAgICAgICgxIDw8IDApCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJh
c2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2VHdGsuaCIK
KworI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3Rr
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YWJhc2VHdGsqIFBsdWdpbkRh
dGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBzdGF0aWMgUGx1Z2luRGF0YWJh
c2VHdGsqIHBsdWdpbnMgPSAwOworICAgIAorICAgIGlmICghcGx1Z2lucykgeworICAgICAgICBw
bHVnaW5zID0gbmV3IFBsdWdpbkRhdGFiYXNlR3RrOworICAgICAgICBwbHVnaW5zLT5zZXRQbHVn
aW5QYXRocyhQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBhdGhzKCkpOworICAgICAg
ICBwbHVnaW5zLT5yZWZyZXNoKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisK
K3ZvaWQgUGx1Z2luRGF0YWJhc2VHdGs6OmFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgbV9wbHVnaW5QYXRocy5hcHBlbmQocGF0aCk7CisgICAgcmVmcmVzaCgp
OworfQorCitib29sIFBsdWdpbkRhdGFiYXNlR3RrOjpyZWZyZXNoKCkKK3sgICAKKyAgICBQbHVn
aW5TZXQgbmV3UGx1Z2luczsKKworICAgIGJvb2wgcGx1Z2luU2V0Q2hhbmdlZCA9IGZhbHNlOwor
CisgICAgLy8gQ3JlYXRlIGEgbmV3IHNldCBvZiBwbHVnaW5zCisgICAgbmV3UGx1Z2lucyA9IGdl
dFBsdWdpbnNJblBhdGhzKCk7CisKKyAgICBpZiAoIW1fcGx1Z2lucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmNsZWFyKCk7CisKKyAgICAgICAgUGx1Z2luU2V0
IHBsdWdpbnNUb1VubG9hZCA9IG1fcGx1Z2luczsKKworICAgICAgICBQbHVnaW5TZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG5ld1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAgICAgcGx1Z2luc1RvVW5sb2FkLnJlbW92ZSgqaXQpOworCisgICAgICAgIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IG5ld1BsdWdpbnMucmVtb3ZlKCppdCk7CisKKyAgICAgICAgLy8gVW5sb2FkIHBsdWdpbnMKKyAg
ICAgICAgZW5kID0gcGx1Z2luc1RvVW5sb2FkLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwbHVnaW5zVG9VbmxvYWQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZSgqaXQpOworCisgICAgICAgIC8v
IEFkZCBuZXcgcGx1Z2lucworICAgICAgICBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAg
ICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAg
ICAgICBwbHVnaW5TZXRDaGFuZ2VkID0gIXBsdWdpbnNUb1VubG9hZC5pc0VtcHR5KCkgfHwgIW5l
d1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2lucyA9IG5l
d1BsdWdpbnM7CisgICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1
Z2lucy5lbmQoKTsKKyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bmV3UGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdp
bnMuYWRkKCppdCk7CisKKyAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9ICFuZXdQbHVnaW5zLmlz
RW1wdHkoKTsKKyAgICB9CisKKyAgICAvLyBSZWdpc3RlciBwbHVnLWluIE1JTUUgdHlwZXMKKyAg
ICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBm
b3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIEdldCBNSU1FIHR5cGVzCisgICAgICAgIE1JTUVU
b0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2VuZCA9ICgqaXQpLT5taW1lVG9E
ZXNjcmlwdGlvbnMoKS5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIG1hcF9pdCA9ICgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5iZWdp
bigpOyBtYXBfaXQgIT0gbWFwX2VuZDsgKyttYXBfaXQpIHsKKyAgICAgICAgICAgIG1fcmVnaXN0
ZXJlZE1JTUVUeXBlcy5hZGQobWFwX2l0LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcGx1Z2luU2V0Q2hhbmdlZDsKK30KKworVmVjdG9yPFBsdWdpblBhY2thZ2VHdGsq
PiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFBsdWdp
blBhY2thZ2VHdGsqPiByZXN1bHQ7CisKKyAgICBQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGx1Z2lucy5lbmQoKTsKKyAgICBmb3IgKFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQu
YXBwZW5kKCgqaXQpLmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1BsdWdpblNl
dCBQbHVnaW5EYXRhYmFzZUd0azo6Z2V0UGx1Z2luc0luUGF0aHMoKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hT
ZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisgICAgUGx1Z2luU2V0IHBsdWdpbnM7CisKKyAg
ICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5QYXRocy5lbmQo
KTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lu
UGF0aHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEdEaXIqIGRpciA9IGdf
ZGlyX29wZW4oKGl0LT51dGY4KCkpLmRhdGEoKSwgMCwgTlVMTCk7CisgICAgICAgIGlmIChkaXIp
IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICB3aGlsZSAoKG5h
bWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ19zdHJf
aGFzX3N1ZmZpeChuYW1lLCAiLiIgR19NT0RVTEVfU1VGRklYKSkgeworICAgICAgICAgICAgICAg
ICAgICBnY2hhciogZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKChpdC0+dXRmOCgpKS5kYXRh
KCksIG5hbWUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBw
bHVnaW5QYWNrYWdlID0gUGx1Z2luUGFja2FnZUd0azo6Y3JlYXRlUGFja2FnZShmaWxlbmFtZSwg
dGltZShOVUxMKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW5QYWNrYWdlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy5hZGQocGx1Z2luUGFja2FnZSk7CisgICAgICAg
ICAgICAgICAgICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGlyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBwbHVnaW5zOworfQorCitzdGF0aWMgaW5saW5lIFZlY3RvcjxpbnQ+IHBh
cnNlVmVyc2lvblN0cmluZyhjb25zdCBTdHJpbmcmIHZlcnNpb25TdHJpbmcpCit7CisgICAgVmVj
dG9yPGludD4gdmVyc2lvbjsKKworICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKKyAgICB1bnNp
Z25lZCBlbmRQb3M7CisgICAgCisgICAgd2hpbGUgKHN0YXJ0UG9zIDwgdmVyc2lvblN0cmluZy5s
ZW5ndGgoKSkgeworICAgICAgICBmb3IgKGVuZFBvcyA9IHN0YXJ0UG9zOyBlbmRQb3MgPCB2ZXJz
aW9uU3RyaW5nLmxlbmd0aCgpOyArK2VuZFBvcykKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uU3Ry
aW5nW2VuZFBvc10gPT0gJy4nIHx8IHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnXycpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaW50IHZlcnNpb25Db21wb25lbnQgPSB2ZXJz
aW9uU3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQb3MpLnRvSW50KCk7
CisgICAgICAgIHZlcnNpb24uYXBwZW5kKHZlcnNpb25Db21wb25lbnQpOworCisgICAgICAgIHN0
YXJ0UG9zID0gZW5kUG9zICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVyc2lvbjsKK30KKwor
Ly8gVGhpcyByZXR1cm5zIHdoZXRoZXIgdmVyc2lvbkEgaXMgaGlnaGVyIHRoYW4gdmVyc2lvbkIK
K3N0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlVmVyc2lvbnMoY29uc3QgVmVjdG9yPGludD4mIHZl
cnNpb25BLCBjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkIpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHZlcnNpb25BLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpID49IHZl
cnNpb25CLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh2
ZXJzaW9uQVtpXSA+IHZlcnNpb25CW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKHZlcnNpb25BW2ldIDwgdmVyc2lvbkJbaV0pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYgd2UgY29tZSBoZXJlLCB0aGUgdmVyc2lvbnMg
YXJlIGVpdGhlciB0aGUgc2FtZSBvciB2ZXJzaW9uQiBoYXMgYW4gZXh0cmEgY29tcG9uZW50LCBq
dXN0IHJldHVybiBmYWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4g
UGx1Z2luRGF0YWJhc2VHdGs6OmRlZmF1bHRQbHVnaW5QYXRocygpCit7CisgICAgVmVjdG9yPFN0
cmluZz4gcGF0aHM7CisKKyAgICBnY2hhciogcGF0aDsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpCisgICAgcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwg
Ii5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRocy5hcHBlbmQocGF0aCk7Cisg
ICAgZ19mcmVlKHBhdGgpOworI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQorICAg
IHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICJBcHBsaWNhdGlvbiBE
YXRhIiwgIk1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChwYXRo
KTsKKyAgICBnX2ZyZWUocGF0aCk7CisjZW5kaWYKKworICAgIGNvbnN0IGdjaGFyKiBtb3pQYXRo
ID0gZ19nZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpOworICAgIGlmIChtb3pQYXRoKSB7CisgICAg
ICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBhdGgsICI6IiwgLTEpOwor
CisgICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkrKykKKyAgICAgICAg
ICAgIHBhdGhzLmFwcGVuZChwbHVnaW5QYXRoc1tpXSk7CisKKyAgICAgICAgZ19zdHJmcmVldihw
bHVnaW5QYXRocyk7CisgICAgfQorCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAg
ICBwYXRoID0gZ19idWlsZF9maWxlbmFtZShHX0RJUl9TRVBBUkFUT1JfUyAidXNyIiwgImxvY2Fs
IiwgImxpYiIsICJtb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRocy5hcHBlbmQo
cGF0aCk7CisgICAgZ19mcmVlIChwYXRoKTsKKyAgICBwYXRoID0gZ19idWlsZF9maWxlbmFtZShH
X0RJUl9TRVBBUkFUT1JfUyAidXNyIiwgImxpYiIsICJtb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxM
KTsKKyAgICBwYXRocy5hcHBlbmQocGF0aCk7CisgICAgZ19mcmVlIChwYXRoKTsKKyAgICBwYXRo
ID0gZ19idWlsZF9maWxlbmFtZShHX0RJUl9TRVBBUkFUT1JfUyAidXNyIiwgImxpYiIsICJicm93
c2VyIiwgInBsdWdpbnMiLCBOVUxMKTsKKyAgICBwYXRocy5hcHBlbmQocGF0aCk7CisgICAgZ19m
cmVlKHBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gcGF0aHM7Cit9CisKK2Jvb2wgUGx1Z2lu
RGF0YWJhc2VHdGs6OmlzTUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFtaW1lVHlwZS5pc051bGwoKSAmJiBtX3JlZ2lzdGVyZWRN
SU1FVHlwZXMuY29udGFpbnMobWltZVR5cGUpOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVn
aW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyAgICBTdHJpbmcga2V5ID0gbWltZVR5cGUubG93ZXIoKTsKKworICAgIFBsdWdpblNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgaWYgKCgqaXQpLT5taW1lVG9EZXNjcmlwdGlvbnMoKS5jb250YWlucyhrZXkp
KQorICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQbHVnaW5EYXRhYmFzZUd0azo6cGx1Z2luRm9yRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQoreworICAgIFBsdWdpblNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgTUlNRVRvRXh0ZW5zaW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9lbmQgPSAoKml0
KS0+bWltZVRvRXh0ZW5zaW9ucygpLmVuZCgpOworCisgICAgICAgIGZvciAoTUlNRVRvRXh0ZW5z
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWltZV9pdCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25z
KCkuYmVnaW4oKTsgbWltZV9pdCAhPSBtaW1lX2VuZDsgKyttaW1lX2l0KSB7CisgICAgICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZXh0ZW5zaW9ucyA9IG1pbWVfaXQtPnNlY29uZDsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uc1tpXSA9PSBleHRlbnNpb24pCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoKml0KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQbHVnaW5QYWNrYWdlR3RrKiBQ
bHVnaW5EYXRhYmFzZUd0azo6ZmluZFBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCit7ICAgCisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gMDsKKwor
ICAgIGlmICghbWltZVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvck1J
TUVUeXBlKG1pbWVUeXBlKTsKKyAgICAKKyAgICBpZiAoIXBsdWdpbikgeworICAgICAgICBTdHJp
bmcgcGF0aCA9IHVybC5wYXRoKCk7CisgICAgICAgIFN0cmluZyBleHRlbnNpb24gPSBwYXRoLnN1
YnN0cmluZyhwYXRoLnJldmVyc2VGaW5kKCcuJykgKyAxKTsKKworICAgICAgICBwbHVnaW4gPSBw
bHVnaW5Gb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKKworICAgICAgICAvLyBGSVhNRTogaWYgbm8g
cGx1Z2luIGNvdWxkIGJlIGZvdW5kLCBxdWVyeSB4ZGdtaW1lIGZvciB0aGUgbWltZSB0eXBlIAor
ICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24uCisgICAgfQorCisgICAg
cmV0dXJuIHBsdWdpbjsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luRGF0YWJhc2VHdGs6OmNy
ZWF0ZVBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQoreworICAgIFBsdWdpblBhY2thZ2VHdGsq
IHBsdWdpbiA9IGZpbmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgCisgICAgLy8gTm8gcGx1
Z2luIHdhcyBmb3VuZCwgdHJ5IHJlZnJlc2hpbmcgdGhlIGRhdGFiYXNlIGFuZCBzZWFyY2hpbmcg
YWdhaW4KKyAgICBpZiAoIXBsdWdpbiAmJiByZWZyZXNoKCkpCisgICAgICAgIHBsdWdpbiA9IGZp
bmRQbHVnaW4odXJsLCBtaW1lVHlwZSk7CisgICAgICAgIAorICAgIHJldHVybiBuZXcgUGx1Z2lu
Vmlld0d0ayhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFt
ZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0
ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NDEgQEAKKy8qIC0qLSBNb2Rl
OiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNl
dDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAK
Ky8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEv
R1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1
YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUg
IkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4K
KyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1l
bnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENv
ZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkg
dGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0
aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihz
KToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBi
ZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUg
IkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0
aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91
IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICog
dW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRv
IGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0
aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
CisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BM
LiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBp
ZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1z
IG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioq
KiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRn
ZXQgYWxsb3dzIGZvciBYdCB0b29sa2l0IGNvZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RL
IGFwcGxpY2F0aW9uLiAgCisgKi8KKworI3VuZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKwor
I2luY2x1ZGUgInhlbWJlZC5oIgorI2luY2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGd0
ay9ndGttYWluLmg+CisjaW5jbHVkZSA8Z3RrL2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZGsv
Z2RreC5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFhsaWIvWHQg
c3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgor
I2luY2x1ZGUgPFgxMS9TaGVsbC5oPgorI2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNs
dWRlIDxYMTEvU3RyaW5nRGVmcy5oPgorCisvKiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBk
ZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2lkZ2V0CisgICBjcmVhdGlvbiBhbmQgZGVzdHJ1
Y3Rpb24gKi8KKyN1bmRlZiBERUJVR19YVEJJTgorCisjZGVmaW5lIFhUQklOX01BWF9FVkVOVFMg
MzAKKworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRC
aW5DbGFzcyAqa2xhc3MpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5faW5pdCAg
ICAgICAoR3RrWHRCaW4gICAgICAqeHRiaW4pOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtf
eHRiaW5fcmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAg
ICAgICAgICAgIGd0a194dGJpbl91bnJlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQp
Oworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fZGVzdHJveSAgICAoR3RrT2JqZWN0
ICAgICAgKm9iamVjdCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9zaHV0ZG93
biAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKKworLyogWHQgYXdhcmUgWEVtYmVkICovCitz
dGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1
YWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRj
b2xvcm1hcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRk
ZXB0aCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAq
IHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRv
dyBlbWJlZGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBo
ZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRo
ICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRj
bGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQq
IHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdl
dCB4dHBsdWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBmbGFncyk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxl
ciAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRf
aGFuZGxlX3hlbWJlZF9tZXNzYWdlIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpl
dmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAg
KFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFh0UG9pbnRlciB1c2VyX2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7
CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0
cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSk7IAorc3RhdGljIHZvaWQgICAgICAgeHRfcmVt
b3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKK3N0YXRp
YyB2b2lkICAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRldGFpbCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGExLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIHRpbWUpOyAgCitzdGF0aWMgaW50ICAgICAgICBl
cnJvcl9oYW5kbGVyICAgICAgIChEaXNwbGF5ICpkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhFcnJvckV2ZW50ICplcnJvcik7CisvKiBGb3IgZXJyb3Ig
dHJhcCBvZiBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOwor
c3RhdGljIGludCAgICAgICAgdW50cmFwX2Vycm9yKHZvaWQpOworc3RhdGljIGludCAgICAgICAg
KCpvbGRfZXJyb3JfaGFuZGxlcikgKERpc3BsYXkgKiwgWEVycm9yRXZlbnQgKik7CitzdGF0aWMg
aW50ICAgICAgICB0cmFwcGVkX2Vycm9yX2NvZGUgPSAwOworCitzdGF0aWMgR3RrV2lkZ2V0Q2xh
c3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7CisKK3N0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlz
cGxheSA9IE5VTEw7CitzdGF0aWMgU3RyaW5nICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7Citz
dGF0aWMgZ2Jvb2xlYW4gICAgICAgICB4dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOworc3RhdGlj
IGdpbnQgICAgICAgICAgICAgbnVtX3dpZGdldHMgPSAwOworCitzdGF0aWMgR1BvbGxGRCAgICAg
ICAgICB4dF9ldmVudF9wb2xsX2ZkOworc3RhdGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGlu
Z190aW1lcl9pZCA9IDA7CitzdGF0aWMgZ3VpbnQgICAgICAgICAgICB0YWcgPSAwOworCitzdGF0
aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3ByZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAg
ICAgICAgICAgICAgICAgICBnaW50ICAgICAqdGltZW91dCkKK3sgICAKKyAgaW50IG1hc2s7CisK
KyAgR0RLX1RIUkVBRFNfRU5URVIoKTsKKyAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7Cisg
IEdES19USFJFQURTX0xFQVZFKCk7CisKKyAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2NoZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCit7
CisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVu
dHMgJiBHX0lPX0lOKSB7CisgICAgaW50IG1hc2s7CisgICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlz
cGxheSk7CisgICAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgICAgcmV0dXJuIChnYm9vbGVhbilt
YXNrOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisgIHJldHVybiBGQUxTRTsKK30g
ICAKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9kaXNwYXRjaCAoR1NvdXJjZSogIHNvdXJj
ZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICBHU291cmNlRnVuYyBjYWxsX2JhY2ssCisgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyICB1c2VyX2RhdGEpCit7CisgIFhFdmVudCBldmVudDsK
KyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgaSA9IDA7CisKKyAgYWMgPSBYdERpc3BsYXlUb0Fw
cGxpY2F0aW9uQ29udGV4dCh4dGRpc3BsYXkpOworCisgIEdES19USFJFQURTX0VOVEVSICgpOwor
CisgIC8qIFByb2Nlc3Mgb25seSByZWFsIFggdHJhZmZpYyBoZXJlLiAgV2Ugb25seSBsb29rIGZv
ciBkYXRhIG9uIHRoZQorICAgKiBwaXBlLCBsaW1pdCBpdCB0byBYVEJJTl9NQVhfRVZFTlRTIGFu
ZCBvbmx5IGNhbGwKKyAgICogWHRBcHBQcm9jZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxsIGxvb2sg
Zm9yIFggZXZlbnRzLiAgVGhlcmUncyBubworICAgKiB0aW1lciBwcm9jZXNzaW5nIGhlcmUgc2lu
Y2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGltZXIgY2FsbGJhY2sgdGhhdAorICAgKiBkb2VzIGl0LiAg
Ki8KKyAgZm9yIChpPTA7IGkgPCBYVEJJTl9NQVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0ZGlzcGxh
eSk7IGkrKykgeworICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNWEV2ZW50KTsKKyAgfQor
CisgIEdES19USFJFQURTX0xFQVZFICgpOworCisgIHJldHVybiBUUlVFOyAgCit9CisKK3N0YXRp
YyBHU291cmNlRnVuY3MgeHRfZXZlbnRfZnVuY3MgPSB7CisgIHh0X2V2ZW50X3ByZXBhcmUsCisg
IHh0X2V2ZW50X2NoZWNrLAorICB4dF9ldmVudF9kaXNwYXRjaCwKKyAgZ19mcmVlLAorICAoR1Nv
dXJjZUZ1bmMpTlVMTCwKKyAgKEdTb3VyY2VEdW1teU1hcnNoYWwpTlVMTAorfTsKKworc3RhdGlj
IGdib29sZWFuCit4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNrKGdwb2ludGVyIHVzZXJf
ZGF0YSkKK3sKKyAgRGlzcGxheSAqIGRpc3BsYXk7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50
IGV2ZW50c1RvUHJvY2VzcyA9IDIwOworCisgIGRpc3BsYXkgPSAoRGlzcGxheSAqKXVzZXJfZGF0
YTsKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dChkaXNwbGF5KTsKKworICAv
KiBXZSBuZWVkIHRvIHByb2Nlc3MgbWFueSBYdCBldmVudHMgaGVyZS4gSWYgd2UganVzdCBwcm9j
ZXNzCisgICAgIG9uZSBldmVudCB3ZSBtaWdodCBzdGFydmUgb25lIG9yIG1vcmUgWHQgY29uc3Vt
ZXJzLiBPbiB0aGUgb3RoZXIgaGFuZAorICAgICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdob2xlIGFw
cCBpZiBYdCBldmVudHMgY29tZSBwb3VyaW5nIGluLiBTbyBwcm9jZXNzCisgICAgIHVwIHRvIDIw
IFh0IGV2ZW50cyByaWdodCBub3cgYW5kIHNhdmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBUaGlzIGlz
IGEgaGFjaywKKyAgICAgYnV0IGl0IG91Z2h0YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91bGQgaGF2
ZSBvdXQgb2YgcHJvY2VzcyBwbHVnaW5zLgorICAqLworICB3aGlsZSAoZXZlbnRzVG9Qcm9jZXNz
LS0gJiYgWHRBcHBQZW5kaW5nKGFjKSkKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTUFs
bCk7CisgIHJldHVybiBUUlVFOworfQorCitHdGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5cGUgKHZv
aWQpCit7CisgIHN0YXRpYyBHdGtUeXBlIHh0YmluX3R5cGUgPSAwOworCisgIGlmICgheHRiaW5f
dHlwZSkgeworICAgICAgc3RhdGljIGNvbnN0IEd0a1R5cGVJbmZvIHh0YmluX2luZm8gPQorICAg
ICAgeworICAgICAgICAiR3RrWHRCaW4iLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluKSwKKyAg
ICAgICAgc2l6ZW9mIChHdGtYdEJpbkNsYXNzKSwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMp
IGd0a194dGJpbl9jbGFzc19pbml0LAorICAgICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMpIGd0a194
dGJpbl9pbml0LAorICAgICAgICAvKiByZXNlcnZlZF8xICovIE5VTEwsCisgICAgICAgIC8qIHJl
c2VydmVkXzIgKi8gTlVMTCwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwKKyAgICAg
IH07CisgICAgICB4dGJpbl90eXBlID0gZ3RrX3R5cGVfdW5pcXVlIChHVEtfVFlQRV9TT0NLRVQs
ICZ4dGJpbl9pbmZvKTsKKyAgICB9CisgIHJldHVybiB4dGJpbl90eXBlOworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX2NsYXNzX2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKQoreworICBH
dGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2NsYXNzOworICBHdGtPYmplY3RDbGFzcyAqb2JqZWN0X2Ns
YXNzOworCisgIHBhcmVudF9jbGFzcyA9IGd0a190eXBlX2NsYXNzIChHVEtfVFlQRV9TT0NLRVQp
OworCisgIHdpZGdldF9jbGFzcyA9IEdUS19XSURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAgd2lkZ2V0
X2NsYXNzLT5yZWFsaXplID0gZ3RrX3h0YmluX3JlYWxpemU7CisgIHdpZGdldF9jbGFzcy0+dW5y
ZWFsaXplID0gZ3RrX3h0YmluX3VucmVhbGl6ZTsKKworICBvYmplY3RfY2xhc3MgPSBHVEtfT0JK
RUNUX0NMQVNTIChrbGFzcyk7CisgIG9iamVjdF9jbGFzcy0+ZGVzdHJveSA9IGd0a194dGJpbl9k
ZXN0cm95OworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJp
bikKK3sKKyAgeHRiaW4tPnh0ZGlzcGxheSA9IE5VTEw7CisgIHh0YmluLT5wYXJlbnRfd2luZG93
ID0gTlVMTDsKKyAgeHRiaW4tPnh0d2luZG93ID0gMDsKKyAgeHRiaW4tPnggPSAwOworICB4dGJp
bi0+eSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0
ICp3aWRnZXQpCit7CisgIEd0a1h0QmluICAgICAqeHRiaW47CisgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgMCwgMCwgMjAwLCAyMDAgfTsKKyAgZ2ludCAgeCwgeSwgdywgaCwgZDsgLyog
Z2VvbWV0cnkgb2Ygd2luZG93ICovCisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0
a194dGJpbl9yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RL
X0lTX1hUQklOICh3aWRnZXQpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKwor
ICAvKiBjYWN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBiZWZvcmUgcmVhbGl6ZSAqLworICBnZGtfd2lu
ZG93X2dldF9nZW9tZXRyeSh4dGJpbi0+cGFyZW50X3dpbmRvdywgJngsICZ5LCAmdywgJmgsICZk
KTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHc7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaDsKKyAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworI2lmZGVm
IERFQlVHX1hUQklOCisgIHByaW50ZigiaW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4i
LCB4LCB5LCB3LCBoKTsKKyNlbmRpZgorCisgIHh0YmluLT53aWR0aCA9IHdpZGdldC0+YWxsb2Nh
dGlvbi53aWR0aDsKKyAgeHRiaW4tPmhlaWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7
CisKKyAgLyogdXNlIEd0a1NvY2tldCdzIHJlYWxpemUgKi8KKyAgKCpHVEtfV0lER0VUX0NMQVNT
KHBhcmVudF9jbGFzcyktPnJlYWxpemUpKHdpZGdldCk7CisKKyAgLyogY3JlYXRlIHRoZSBYdCBj
bGllbnQgd2lkZ2V0ICovCisgIHh0X2NsaWVudF9jcmVhdGUoJih4dGJpbi0+eHRjbGllbnQpLCAK
KyAgICAgICBndGtfc29ja2V0X2dldF9pZChHVEtfU09DS0VUKHh0YmluKSksIAorICAgICAgIHh0
YmluLT5oZWlnaHQsIAorICAgICAgIHh0YmluLT53aWR0aCk7CisgIHh0YmluLT54dHdpbmRvdyA9
IFh0V2luZG93KHh0YmluLT54dGNsaWVudC5jaGlsZF93aWRnZXQpOworCisgIGdka19mbHVzaCgp
OworCisgIC8qIG5vdyB0aGF0IHdlIGhhdmUgY3JlYXRlZCB0aGUgeHQgY2xpZW50LCBhZGQgaXQg
dG8gdGhlIHNvY2tldC4gKi8KKyAgZ3RrX3NvY2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3aWRnZXQp
LCB4dGJpbi0+eHR3aW5kb3cpOworfQorCisKKworR3RrV2lkZ2V0KgorZ3RrX3h0YmluX25ldyAo
R2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKiBmKQoreworICBHdGtYdEJpbiAqeHRi
aW47CisgIGdwb2ludGVyIHVzZXJfZGF0YTsKKworICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBO
VUxMKTsKKyAgeHRiaW4gPSBndGtfdHlwZV9uZXcgKEdUS19UWVBFX1hUQklOKTsKKworICBpZiAo
IXh0YmluKQorICAgIHJldHVybiAoR3RrV2lkZ2V0KilOVUxMOworCisgIGlmIChmKQorICAgIGZh
bGxiYWNrID0gZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCisgIHh0Ymlu
LT5wYXJlbnRfd2luZG93ID0gcGFyZW50X3dpbmRvdzsKKworICB4dF9jbGllbnRfaW5pdCgmKHh0
YmluLT54dGNsaWVudCksIAorICAgICAgR0RLX1ZJU1VBTF9YVklTVUFMKGdka19yZ2JfZ2V0X3Zp
c3VhbCgpKSwKKyAgICAgIEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRfY29sb3Jt
YXAoKSksCisgICAgICBnZGtfcmdiX2dldF92aXN1YWwoKS0+ZGVwdGgpOworCisgIGlmICgheHRi
aW4tPnh0Y2xpZW50Lnh0ZGlzcGxheSkgeworICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVk
LCB3ZSBjYW4ndCBnbyBhbnkgZnVydGhlci4KKyAgICAgKiAgQmFpbCBvdXQuCisgICAgICovCisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNw
bGF5KCkgcmV0dXJuZWQgTlVMTC5cbiIpOworI2VuZGlmCisgICAgZ19mcmVlICh4dGJpbik7Cisg
ICAgcmV0dXJuIChHdGtXaWRnZXQgKilOVUxMOworICB9CisKKyAgLyogSWYgdGhpcyBpcyB0aGUg
Zmlyc3QgcnVubmluZyB3aWRnZXQsIGhvb2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCisgICAgIG1h
aW5sb29wICovCisgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisgICAgaW50ICAgICAgICAgICBj
bnVtYmVyOworICAgIC8qCisgICAgICogaG9vayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIg
ZXZlbnQgbG9vcC4KKyAgICAgKi8KKworICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3Rr
X2luaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgKi8KKyAgICBHU291cmNlKiBncyA9IGdfc291
cmNlX25ldygmeHRfZXZlbnRfZnVuY3MsIHNpemVvZihHU291cmNlKSk7CisgICAgICBpZiAoIWdz
KSB7CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisgICAgCisgICAgZ19zb3VyY2Vfc2V0
X3ByaW9yaXR5KGdzLCBHREtfUFJJT1JJVFlfRVZFTlRTKTsKKyAgICBnX3NvdXJjZV9zZXRfY2Fu
X3JlY3Vyc2UoZ3MsIFRSVUUpOworICAgIHRhZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWlu
Q29udGV4dCopTlVMTCk7CisjaWZkZWYgVk1TCisgICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVt
YmVyKHh0ZGlzcGxheSk7CisjZWxzZQorICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0
ZGlzcGxheSk7CisjZW5kaWYKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKKyAg
ICB4dF9ldmVudF9wb2xsX2ZkLmV2ZW50cyA9IEdfSU9fSU47IAorICAgIHh0X2V2ZW50X3BvbGxf
ZmQucmV2ZW50cyA9IDA7ICAgIC8qIGhtbS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCisKKyAgICBn
X21haW5fY29udGV4dF9hZGRfcG9sbCAoKEdNYWluQ29udGV4dCopTlVMTCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZ4dF9ldmVudF9wb2xsX2ZkLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19QUklPUklUWV9MT1cpOworICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQg
d2UgY2FuIHBvbGwgYW5kIHByb2Nlc3MgWHQgdGltZXJzICovCisgICAgeHRfcG9sbGluZ190aW1l
cl9pZCA9CisgICAgICBndGtfdGltZW91dF9hZGQoMjUsCisgICAgICAgICAgICAgICAgICAgICAg
KEd0a0Z1bmN0aW9uKXh0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgeHRkaXNwbGF5KTsKKyAgfQorCisgIC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNv
dW50ICovCisgIG51bV93aWRnZXRzKys7CisKKyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5ICovCisg
IHh0YmluLT54dGRpc3BsYXkgPSB4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5OworICBndGtfd2lk
Z2V0X3NldF9wYXJlbnRfd2luZG93KEdUS19XSURHRVQoeHRiaW4pLCBwYXJlbnRfd2luZG93KTsK
KyAgZ2RrX3dpbmRvd19nZXRfdXNlcl9kYXRhKHh0YmluLT5wYXJlbnRfd2luZG93LCAmdXNlcl9k
YXRhKTsKKyAgaWYgKHVzZXJfZGF0YSkKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKHVzZXJfZGF0YSksIEdUS19XSURHRVQoeHRiaW4pKTsKKworICByZXR1cm4gR1RLX1dJREdF
VCAoeHRiaW4pOworfQorCit2b2lkCitndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAq
eHRiaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgIHkpCit7CisgIHh0YmluLT54ID0geDsKKyAgeHRiaW4t
PnkgPSB5OworCisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh4dGJpbikpCisgICAgZ2RrX3dp
bmRvd19tb3ZlIChHVEtfV0lER0VUICh4dGJpbiktPndpbmRvdywgeCwgeSk7Cit9CisKK3ZvaWQK
K2d0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAg
Z2ludCAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KQor
eworICBBcmcgYXJnc1syXTsKKyAgR3RrWHRCaW4gKnh0YmluID0gR1RLX1hUQklOICh3aWRnZXQp
OworICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBw
cmludGYoImd0a194dGJpbl9yZXNpemUgJXAgJWQgJWRcbiIsICh2b2lkICopd2lkZ2V0LCB3aWR0
aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisgIHh0YmluLT5oZWlnaHQgPSBoZWlnaHQ7CisgIHh0Ymlu
LT53aWR0aCAgPSB3aWR0aDsKKworICAvLyBBdm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4gWHRTZXRW
YWx1ZXMKKyAgaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9MCkgeworICAgIGhlaWdodCA9IDE7
CisgICAgd2lkdGggPSAxOworICB9CisgIFh0U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdodCwgaGVp
Z2h0KTsKKyAgWHRTZXRBcmcoYXJnc1sxXSwgWHROd2lkdGgsICB3aWR0aCk7CisgIFh0U2V0VmFs
dWVzKHh0YmluLT54dGNsaWVudC50b3Bfd2lkZ2V0LCBhcmdzLCAyKTsKKworICAvKiB3ZSBuZWVk
IHRvIHNlbmQgYSBzaXplIGFsbG9jYXRlIHNvIHRoZSBzb2NrZXQga25vd3MgYWJvdXQgdGhlCisg
ICAgIHNpemUgY2hhbmdlcyAqLworICBhbGxvY2F0aW9uLnggPSB4dGJpbi0+eDsKKyAgYWxsb2Nh
dGlvbi55ID0geHRiaW4tPnk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB4dGJpbi0+d2lkdGg7Cisg
IGFsbG9jYXRpb24uaGVpZ2h0ID0geHRiaW4tPmhlaWdodDsKKworICBndGtfd2lkZ2V0X3NpemVf
YWxsb2NhdGUod2lkZ2V0LCAmYWxsb2NhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRi
aW5fdW5yZWFsaXplIChHdGtXaWRnZXQgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOwor
ICBHdGtXaWRnZXQgKndpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3Rr
X3h0YmluX3VucmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIC8qIGd0a19vYmplY3RfZGVzdHJv
eSgpIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmY291bnQgb24gb2JqZWN0CisgICAqLworICB4dGJp
biA9IEdUS19YVEJJTihvYmplY3QpOworICB3aWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CisK
KyAgR1RLX1dJREdFVF9VTlNFVF9GTEFHUyAod2lkZ2V0LCBHVEtfVklTSUJMRSk7CisgIGlmIChH
VEtfV0lER0VUX1JFQUxJWkVEICh3aWRnZXQpKSB7CisgICAgeHRfY2xpZW50X3VucmVhbGl6ZSgm
KHh0YmluLT54dGNsaWVudCkpOworICB9CisKKyAgKCpHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRf
Y2xhc3MpLT51bnJlYWxpemUpKHdpZGdldCk7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5f
ZGVzdHJveSAoR3RrT2JqZWN0ICpvYmplY3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKworI2lm
ZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7CisjZW5k
aWYKKworICBnX3JldHVybl9pZl9mYWlsIChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lm
X2ZhaWwgKEdUS19JU19YVEJJTiAob2JqZWN0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKG9i
amVjdCk7CisKKyAgaWYoeHRiaW4tPnh0d2luZG93KSB7CisgICAgLyogcmVtb3ZlIHRoZSBldmVu
dCBoYW5kbGVyICovCisgICAgeHRfY2xpZW50X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGllbnQpKTsK
KyAgICB4dGJpbi0+eHR3aW5kb3cgPSAwOworCisgICAgbnVtX3dpZGdldHMtLTsgLyogcmVkdWNl
IG91ciB1c2FnZSBjb3VudCAqLworCisgICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBydW5uaW5n
IHdpZGdldCwgcmVtb3ZlIHRoZSBYdCBkaXNwbGF5CisgICAgICAgY29ubmVjdGlvbiBmcm9tIHRo
ZSBtYWlubG9vcCAqLworICAgIGlmICgwID09IG51bV93aWRnZXRzKSB7CisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgICAgIHByaW50ZigicmVtb3ZpbmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJvbSB0aGUg
bWFpbiBsb29wXG4iKTsKKyNlbmRpZgorICAgICAgZ19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwo
KEdNYWluQ29udGV4dCopTlVMTCwgJnh0X2V2ZW50X3BvbGxfZmQpOworICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKHRhZyk7CisKKyAgICAgIGd0a190aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5nX3RpbWVy
X2lkKTsKKyAgICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworICAgIH0KKyAgfQorCisgIEdU
S19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGVzdHJveShvYmplY3QpOworfQorCisvKgor
KiBGb2xsb3dpbmcgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xp
ZW50IHNpZGUKKyovCisKKy8qIEluaXRpYWwgWHQgcGx1Z2luICovCitzdGF0aWMgdm9pZAoreHRf
Y2xpZW50X2luaXQoIFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgIFZpc3Vh
bCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCisgICAg
ICAgICAgICAgICAgaW50IHh0ZGVwdGgpCit7CisgIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7
CisgIGNoYXIgICAgICAgICAqbUFyZ3ZbMV07CisgIGludCAgICAgICAgICAgbUFyZ2MgPSAwOwor
CisgIC8qCisgICAqIEluaXRpYWxpemUgWHQgc3R1ZmYKKyAgICovCisgIHh0Y2xpZW50LT50b3Bf
d2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xp
ZW50LT54dGRpc3BsYXkgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOwor
ICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IDA7CisgIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKKwor
ICBpZiAoIXh0X2lzX2luaXRpYWxpemVkKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmlu
dGYoInN0YXJ0aW5nIHVwIFh0IHN0dWZmXG4iKTsKKyNlbmRpZgorICAgIFh0VG9vbGtpdEluaXRp
YWxpemUoKTsKKyAgICBhcHBfY29udGV4dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7
CisgICAgaWYgKGZhbGxiYWNrKQorICAgICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBf
Y29udGV4dCwgZmFsbGJhY2spOworCisgICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBf
Y29udGV4dCwgZ2RrX2dldF9kaXNwbGF5KCksIE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJXcmFwcGVyIiwgTlVMTCwgMCwgJm1BcmdjLCBtQXJndik7CisgICAgaWYgKHh0ZGlz
cGxheSkKKyAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gVFJVRTsKKyAgfQorICB4dGNsaWVudC0+
eHRkaXNwbGF5ICA9IHh0ZGlzcGxheTsKKyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3Vh
bDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSB4dGNvbG9ybWFwOworICB4dGNsaWVudC0+eHRk
ZXB0aCAgICA9IHh0ZGVwdGg7Cit9CisKKy8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMK
KyogICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVu
dCAsIAorICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGRlcmlkLCAKKyAgICAgICAgICAg
ICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKK3sK
KyAgaW50ICAgICAgICAgICBuOworICBBcmcgICAgICAgICAgIGFyZ3NbNl07CisgIFdpZGdldCAg
ICAgICAgY2hpbGRfd2lkZ2V0OworICBXaWRnZXQgICAgICAgIHRvcF93aWRnZXQ7CisKKyNpZmRl
ZiBERUJVR19YVEJJTgorICBwcmludGYoInh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOworI2VuZGlm
CisgIHRvcF93aWRnZXQgPSBYdEFwcENyZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVy
IiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRn
ZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRp
c3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgeHRj
bGllbnQtPnRvcF93aWRnZXQgPSB0b3Bfd2lkZ2V0OworCisgIC8qIHNldCBzaXplIG9mIFh0IHdp
bmRvdyAqLworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdo
dCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAg
WHRTZXRWYWx1ZXModG9wX3dpZGdldCwgYXJncywgbik7CisKKyAgY2hpbGRfd2lkZ2V0ID0gWHRW
YUNyZWF0ZVdpZGdldCgiZm9ybSIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXBvc2l0ZVdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b3Bfd2lkZ2V0LCBOVUxMKTsKKworICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHRO
aGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAg
d2lkdGgpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54
dHZpc3VhbCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVu
dC0+eHRkZXB0aCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNs
aWVudC0+eHRjb2xvcm1hcCApOyBuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldp
ZHRoLCAwKTsgbisrOworICBYdFNldFZhbHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOworCisg
IFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKKyAgeHRjbGllbnQtPm9sZHdpbmRv
dyA9IHRvcF93aWRnZXQtPmNvcmUud2luZG93OworICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9
IGVtYmVkZGVyaWQ7CisKKyAgLyogdGhpcyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGlu
aXRpYWxpemluZyB0aGUgd2lkZ2V0ICovCisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49
IDYKKyAgWHRSZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAg
ICAgICAgICAgICAgZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQp
OworI2Vsc2UKKyAgX1h0UmVnaXN0ZXJXaW5kb3coIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAg
ICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNlbmRpZgorICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lk
Z2V0KTsKKworICAvKiBsaXN0ZW4gdG8gYWxsIFh0IGV2ZW50cyAqLworICBYU2VsZWN0SW5wdXQo
eHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0
KSwgCisgICAgICAgICAgICAgICAweDBGRkZGRik7CisgIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hp
bGRfd2lkZ2V0LCAwKTsKKworICBYdE1hbmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7CisgIHh0Y2xp
ZW50LT5jaGlsZF93aWRnZXQgPSBjaGlsZF93aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBldmVudCBo
YW5kbGVyICovCisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwKKyAgICAgICAgICAg
ICAgICAgICAgMHgwRkZGRkYgJiB+UmVzaXplUmVkaXJlY3RNYXNrLAorICAgICAgICAgICAgICAg
ICAgICBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVu
dF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dp
ZGdldCwgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0
b25SZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAg
ICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAg
ICAgICAgICAgICAgICAgeHRjbGllbnQpOworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBG
QUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQq
IHh0Y2xpZW50ICkKK3sKKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFVu
cmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5LAorICAgICAgICAgICAgICAgICAg
ICAgICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cpOworI2Vsc2UKKyAgX1h0VW5y
ZWdpc3RlcldpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCisgICAgICAg
ICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQpOworI2VuZGlmCisKKyAgLyogZmx1
c2ggdGhlIHF1ZXVlIGJlZm9yZSB3ZSByZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUu
d2luZG93CisgICAgIG9yIHdlIGNhbiBnZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdv
bmUgKi8KKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRmFsc2UpOworCisgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7CisgIFh0VW5y
ZWFsaXplV2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgICAg
ICAgICAgICAKK3h0X2NsaWVudF9kZXN0cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKK3sKKyAg
aWYoeHRjbGllbnQtPnRvcF93aWRnZXQpIHsKKyAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNs
aWVudC0+Y2hpbGRfd2lkZ2V0LCAweDBGRkZGRiwgVFJVRSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7
CisgICAgWHREZXN0cm95V2lkZ2V0KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4dGNsaWVu
dC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIH0KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0
X2NsaWVudF9zZXRfaW5mbyAoV2lkZ2V0IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sK
KyAgdW5zaWduZWQgbG9uZyBidWZmZXJbMl07CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5B
dG9tKFh0RGlzcGxheSh4dHBsdWcpLCAiX1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKKworICBidWZm
ZXJbMV0gPSAwOyAgICAgICAgICAgICAgICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCisgIGJ1ZmZl
clsxXSA9IGZsYWdzOworCisgIFhDaGFuZ2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0
V2luZG93KHh0cGx1ZyksCisgICAgICAgICAgICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAz
MiwKKyAgICAgICAgICAgICAgICAgICBQcm9wTW9kZVJlcGxhY2UsCisgICAgICAgICAgICAgICAg
ICAgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIDIpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xp
ZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRh
LCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGll
bnRfZGF0YTsKKyAgc3dpdGNoIChldmVudC0+eGNsaWVudC5kYXRhLmxbMV0pCisgIHsKKyAgY2Fz
ZSBYRU1CRURfRU1CRURERURfTk9USUZZOgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5E
T1dfQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBn
ZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFURVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2Fz
ZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmlu
dGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFXG4iKTsKKyNlbmRpZgor
ICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PTjoKKyNpZmRlZiBERUJVR19YVEJJ
TgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOworI2Vu
ZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09GRjoKKyNpZmRlZiBERUJV
R19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4i
KTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9GT0NVU19JTjoKKyAgY2FzZSBY
RU1CRURfRk9DVVNfT1VUOgorICAgIHsKKyAgICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgICBtZW1z
ZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhldmVudCkpOworCisgICAgICBpZihldmVudC0+eGNsaWVu
dC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZPQ1VTX0lOKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBpblxuIik7CisjZW5kaWYKKyAgICAgICAg
eGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNJbjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2lm
ZGVmIERFQlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4i
KTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c091dDsKKyAgICAg
IH0KKworICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxk
X3dpZGdldCk7CisgICAgICB4ZXZlbnQueGZvY3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVn
LT5jaGlsZF93aWRnZXQpOworICAgICAgWFNlbmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGls
ZF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCisgICAg
ICAgICAgICAgICAgIEZhbHNlLCBOb0V2ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgJnhldmVu
dCApOworICAgICAgWFN5bmMoIFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNl
KTsKKyAgICB9CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0gLyogRW5k
IG9mIFhFbWJlZCBNZXNzYWdlICovCit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGll
bnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50
ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7
CisgIAorICBzd2l0Y2goZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ2xpZW50TWVzc2Fn
ZToKKyAgICAgIC8qIEhhbmRsZSB4ZW1iZWQgbWVzc2FnZSAqLworICAgICAgaWYgKGV2ZW50LT54
Y2xpZW50Lm1lc3NhZ2VfdHlwZT09CisgICAgICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERp
c3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsKKyAgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRf
bWVzc2FnZSh3LCBjbGllbnRfZGF0YSwgZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwcGluZ05v
dGlmeToKKyAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAodywgWEVNQkVEX01BUFBFRCk7CisgICAg
ICBicmVhazsKKyAgICBjYXNlIFVubWFwTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZv
ICh3LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgIHNlbmRfeGVt
YmVkX21lc3NhZ2UgKCB4dHBsdWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVE
X1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1
c091dDoKKyAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5UHJlc3M6CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICAgIHByaW50ZigiS2V5IFByZXNzIEdvdCFcbiIpOworI2VuZGlmCisgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2
ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAorc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRD
bGllbnQgICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdl
LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRldGFpbCwgCisgICAgICAgICAgICAg
ICAgICAgICBsb25nICAgICAgZGF0YTEsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAg
ICBkYXRhMiwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIHRpbWUpICAgCit7Cisg
IFhFdmVudCB4ZXZlbnQ7IAorICBXaW5kb3cgdz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdl
dCk7CisgIERpc3BsYXkqIGRweT14dGNsaWVudC0+eHRkaXNwbGF5OworICBpbnQgZXJyb3Jjb2Rl
OworCisgIG1lbXNldCgmeGV2ZW50LDAsc2l6ZW9mKHhldmVudCkpOworICB4ZXZlbnQueGNsaWVu
dC53aW5kb3cgPSB3OworICB4ZXZlbnQueGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAg
eGV2ZW50LnhjbGllbnQubWVzc2FnZV90eXBlID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixG
YWxzZSk7CisgIHhldmVudC54Y2xpZW50LmZvcm1hdCA9IDMyOworICB4ZXZlbnQueGNsaWVudC5k
YXRhLmxbMF0gPSB0aW1lOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsK
KyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzJdID0gZGV0YWlsOyAKKyAgeGV2ZW50LnhjbGllbnQu
ZGF0YS5sWzNdID0gZGF0YTE7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOwor
CisgIHRyYXBfZXJyb3JzICgpOworICBYU2VuZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50
TWFzaywgJnhldmVudCk7CisgIFhTeW5jIChkcHksRmFsc2UpOworCisgIGlmKChlcnJvcmNvZGUg
PSB1bnRyYXBfZXJyb3IoKSkpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic2Vu
ZF94ZW1iZWRfbWVzc2FnZSBlcnJvciglZCkhISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRpZgorICB9
Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAgICAgCitlcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRp
c3BsYXksIFhFcnJvckV2ZW50ICplcnJvcikKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0gZXJy
b3ItPmVycm9yX2NvZGU7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAK
K3RyYXBfZXJyb3JzKHZvaWQpCit7CisgIHRyYXBwZWRfZXJyb3JfY29kZSA9MDsKKyAgb2xkX2Vy
cm9yX2hhbmRsZXIgPSBYU2V0RXJyb3JIYW5kbGVyKGVycm9yX2hhbmRsZXIpOworfQorCitzdGF0
aWMgaW50ICAgICAgICAgCit1bnRyYXBfZXJyb3Iodm9pZCkKK3sKKyAgWFNldEVycm9ySGFuZGxl
cihvbGRfZXJyb3JfaGFuZGxlcik7CisgIGlmKHRyYXBwZWRfZXJyb3JfY29kZSkgeworI2lmZGVm
IERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJHZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxuIiwgdHJh
cHBlZF9lcnJvcl9jb2RlKTsKKyNlbmRpZgorICB9CisgIHJldHVybiB0cmFwcGVkX2Vycm9yX2Nv
ZGU7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIo
IFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBEaXNw
bGF5ICpkcHkgPSBYdERpc3BsYXkodyk7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0
YTsKKyAgV2luZG93IHdpbiA9IFh0V2luZG93KHcpOworCisgIHN3aXRjaChldmVudC0+dHlwZSkK
KyAgICB7CisgICAgY2FzZSBDcmVhdGVOb3RpZnk6CisgICAgICBpZihldmVudC0+eGNyZWF0ZXdp
bmRvdy5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lk
Z2V0KCBkcHksIGV2ZW50LT54Y3JlYXRld2luZG93LndpbmRvdyk7CisgICAgICAgIGlmIChjaGls
ZCkKKyAgICAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZShjaGlsZCwgdXNlcl9kYXRh
KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKyAgICAg
IHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdywgdXNlcl9kYXRhKTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBpZihldmVudC0+eHJlcGFyZW50LnBhcmVu
dCA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IHBhcmVudCAqLworICAgICAgICBX
aWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dpZGdldChkcHksIGV2ZW50LT54cmVwYXJlbnQud2luZG93
KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90
cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXZlbnQtPnhy
ZXBhcmVudC53aW5kb3cgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBjaGlsZCAq
LworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG9sZCBwYXJlbnQg
Ki8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyNpZiAw
CisgICAgICBYU2V0SW5wdXRGb2N1cyhkcHksIFh0V2luZG93KHh0Y2xpZW50LT5jaGlsZF93aWRn
ZXQpLCBSZXZlcnRUb1BhcmVudCwgZXZlbnQtPnhidXR0b24udGltZSk7CisjZW5kaWYKKyAgICAg
IHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50
eXBlKSAqLworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQg
dywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAg
bG9uZyBldmVudG1hc2s7CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgaW50
IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWEdldFdpbmRvd0F0dHJpYnV0ZXMo
WHREaXNwbGF5KHcpLCBYdFdpbmRvdyh3KSwgJmF0dHIpOworICBldmVudG1hc2sgPSBhdHRyLnlv
dXJfZXZlbnRfbWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFz
azsKKyAgWFNlbGVjdElucHV0KFh0RGlzcGxheSh3KSwKKyAgICAgICAgICAgICAgIFh0V2luZG93
KHcpLCAKKyAgICAgICAgICAgICAgIGV2ZW50bWFzayk7CisKKyAgWHRBZGRFdmVudEhhbmRsZXIo
dywgCisgICAgICAgICAgICAgICAgICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25S
ZWxlYXNlTWFzaywgCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAg
ICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAg
ICAgICAgICAgICAgeHRjbGllbnQpOworICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZv
aWQKK3h0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0
YSkKK3sKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRSZW1vdmVF
dmVudEhhbmRsZXIodywgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNr
LCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50
X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2RhdGEpOworCisgIHVudHJhcF9lcnJvcigpOworfQorCitz
dGF0aWMgdm9pZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3Qs
IFh0UG9pbnRlciB1c2VyX2RhdGEpIAoreworICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJv
b3QpOworICBXaW5kb3cgKmNoaWxkcmVuOworICBXaW5kb3cgcm9vdCwgcGFyZW50OworICBEaXNw
bGF5ICpkcHkgPSBYdERpc3BsYXkodHJlZXJvb3QpOworICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxk
cmVuOworCisgIC8qIGVuc3VyZSB3ZSBkb24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KKyAgeHRf
cmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRfYWRkX2Zv
Y3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMoKTsKKyAg
aWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4sICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hp
bGRyZW4pKSB7CisgICAgdW50cmFwX2Vycm9yKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYo
dW50cmFwX2Vycm9yKCkpIAorICAgIHJldHVybjsKKworICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsg
KytpKSB7CisgICAgV2lkZ2V0IGNoaWxkID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVu
W2ldKTsKKyAgICBpZiAoY2hpbGQpIAorICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUo
IGNoaWxkLCB1c2VyX2RhdGEpOworICB9CisgIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7CisKKyAg
cmV0dXJuOworfQorCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVH
dGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3Rv
cmVHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2VHdGsu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6
OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpIAoreyAKKyAgICBQ
bHVnaW5EYXRhYmFzZUd0ayAqZGIgPSBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lu
cygpOworICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICBQbHVnaW5Q
YWNrYWdlR3RrKiBwYWNrYWdlID0gZGItPnBsdWdpbnMoKVtpXTsKKworICAgIGluZm8tPm5hbWUg
PSBwYWNrYWdlLT5uYW1lKCk7CisgICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7
CisgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICBjb25zdCBN
SU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVU
b0Rlc2NyaXB0aW9ucygpOworICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgIGZvciAoTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBN
aW1lQ2xhc3NJbmZvOworICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAg
IAorICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0OworICAgICAgICBtaW1lLT5kZXNjID0g
aXQtPnNlY29uZDsKKyAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsKKworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldCht
aW1lLT50eXBlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAg
ICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAgICBtaW1lLT5zdWZm
aXhlcyArPSBleHRlbnNpb25zW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGlu
Zm87Cit9CisKK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAor
eworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5wbHVn
aW5zKCkuc2l6ZSgpOworfQorCitTdHJpbmcgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kIG9uIEdUSysKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wg
UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYg
bWltZVR5cGUpIAoreworICAgIHJldHVybiBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1
Z2lucygpLT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSk7Cit9CisKK3ZvaWQgcmVmcmVz
aFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCit7CisgICAgUGx1Z2luRGF0YWJhc2VHdGs6
Omluc3RhbGxlZFBsdWdpbnMoKS0+cmVmcmVzaCgpOworCisgICAgaWYgKHJlbG9hZE9wZW5QYWdl
cykgeworICAgICAgICAvLyBGSVhNRTogcmVsb2FkIG9wZW4gcGFnZXMKKyAgICB9Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
LnBybwkocmV2aXNpb24gMjk5NzUpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzcsNiArMTM3LDcgQEAgREVQRU5EUEFUSCArPSBlZGl0aW5nL3F0IGhpc3Rvcnkv
cXQgbG9hZAogZ3RrLXBvcnQgewogICAgIHgxMTpwbHVnaW5zIHsKICAgICAgICAgREVGSU5FUyAr
PSBYUF9VTklYCisgICAgICAgIExJQlMgKz0gLWxYdAogICAgIH0KIAogICAgIElOQ0xVREVQQVRI
ICs9IFwKQEAgLTE3Myw2ICsxNzQsNyBAQCBndGstcG9ydCB7CiAgICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMveGJtIFwKICAgICBsb2FkZXIvZ3RrIFwKICAgICBwYWdlL2d0ayBcCisgICAgcGx1
Z2lucy9ndGsgXAogICAgIC4uL1dlYktpdC9ndGsgXAogICAgIC4uL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQgXAogICAgIC4uL1dlYktpdC9ndGsvd2Via2l0CkBAIC04NjUsMTMgKzg2NywzNSBA
QCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKIAogZ3RrLXBvcnQgewor
ICAhcGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9QTFVHSU5TPTEKKyAgfQor
ICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oIFwKKyAg
ICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdp
blZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tM
aXN0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwIAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBcCisgICAgcGx1Z2lucy9ndGsv
UGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VH
dGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisgICAgcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNwcAor
CisgIHgxMTpwbHVnaW5zIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgIHBsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5oIFwKKyAgICAgIHBsdWdpbnMvZ3RrL3hlbWJlZC5oCisKKyAgICBTT1VSQ0VTICs9
IFwKKyAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0KIAogcXQtcG9ydCB7CkBA
IC05ODUsNiArMTAwOSw3IEBAIHF0LXBvcnQgewogfQogCiBndGstcG9ydCB7CisgICAgSU5DTFVE
RVBBVEggKz0gLi4vV2ViQ29yZS9wbHVnaW5zL2d0awogICAgIEhFQURFUlMgKz0gXAogICAgICAg
ICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCiAgICAgICAgIC4uL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBcCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvZ3RrL0ZyYW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1l
R3RrLmNwcAkocmV2aXNpb24gMjk5NzUpCisrKyBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTQgKzI4LDE5IEBACiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgorCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCiAKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNs
dWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlICJydW50aW1lLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lOjpjcmVhdGVTY3JpcHRJ
bnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQorS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1l
OjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4o
d2lkZ2V0KS0+YmluZGluZ0luc3RhbmNlKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFdl
YktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiAyOTk3NSkKKysrIFdlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVl
X1NPVVJDRVMgPSBcCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX0NYWEZMQUdTID0gXAogCSQo
REVQRU5ERU5DSUVTX0NGTEFHUykgXAorCSQoZ2xvYmFsX2N4eGZsYWdzKSBcCiAJJChnbG9iYWxf
Y2ZsYWdzKQogCiBQcm9ncmFtc19EdW1wUmVuZGVyVHJlZV9MREFERCA9IFwKSW5kZXg6IFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0JKHJldmlzaW9uIDI5OTc1KQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU2LDcgQEAgbXkgJGN1
cnJlbnRTVk5SZXZpc2lvbjsKIG15ICRvc1hWZXJzaW9uOwogbXkgJGlzUXQ7CiBteSAkaXNHdGs7
CitteSAkZW5hYmxlR3RrUGx1Z2luczsKIG15ICRpc1d4OwogCiAjIFZhcmlhYmxlcyBmb3IgV2lu
MzIgc3VwcG9ydApAQCAtNDg0LDYgKzQ4NiwyMyBAQCBzdWIgZGV0ZXJtaW5lSXNHdGsoKQogICAg
IH0KIH0KIAorc3ViIGVuYWJsZUd0a1BsdWdpbnMoKQoreworICAgIGRldGVybWluZUVuYWJsZUd0
a1BsdWdpbnMoKTsKKyAgICByZXR1cm4gJGVuYWJsZUd0a1BsdWdpbnM7Cit9CisKK3N1YiBkZXRl
cm1pbmVFbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICByZXR1cm4gaWYgZGVmaW5lZCgkZW5hYmxl
R3RrUGx1Z2lucyk7CisKKyAgICBpZiAoY2hlY2tBcmd2KCItLWRpc2FibGUtZ3RrLXBsdWdpbnMi
KSkgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAxOworICAgIH0KK30KKwogc3ViIGlzV3goKQogewogICAg
IGRldGVybWluZUlzV3goKTsKQEAgLTc5OSw2ICs4MTgsNyBAQCBzdWIgYnVpbGRRTWFrZUd0a1By
b2plY3QoJCQpCiAKICAgICBteSBAYnVpbGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0Iik7CiAg
ICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHLT1xdCI7CisgICAgcHVzaCBAYnVpbGRBcmdzLCAi
Q09ORklHKz1wbHVnaW5zIiBpZiBlbmFibGVHdGtQbHVnaW5zKCk7CiAKICAgICByZXR1cm4gYnVp
bGRRTWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18936</attachid>
            <date>2008-02-05 10:51:02 -0800</date>
            <delta_ts>2008-03-21 13:58:48 -0700</delta_ts>
            <desc>Updated patch against r30005</desc>
            <filename>webkit-npapi-gtk.patch</filename>
            <type>text/plain</type>
            <size>137041</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzMDAwNSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1
Miw3IEBAIEVYVFJBX0RJU1QgOj0KIGdsb2JhbF9jcHBmbGFncyA6PQogCiBnbG9iYWxfY3BwZmxh
Z3MgKz0gXAorCS1JJChzcmNkaXIpL1dlYkNvcmUgXAogCS1JJChzcmNkaXIpL0phdmFTY3JpcHRD
b3JlIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCiAJ
LUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvd3RmIFwKQEAgLTIwMCw2ICsyMDEsNyBAQCBlbmRp
ZgogCiBpZiBUQVJHRVRfWDExCiBnbG9iYWxfY3BwZmxhZ3MgKz0gLURYUF9VTklYCit3ZWJraXRn
dGtfbGRmbGFncyArPSAtbFh0CiBlbmRpZgogCiBpZiAhRU5BQkxFX0RFQlVHCkluZGV4OiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAko
cmV2aXNpb24gMzAwMDUpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
Q2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgorICogIENvcHlyaWdodCAo
QykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKQEAgLTQ5LDEyICs1MCwxNyBAQAogI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CiAj
ZW5kaWYKIAorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGFiYXNlR3RrLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpG
cmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZy
YW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBtX3VzZXJBZ2VudCgiIikKIHsKICAg
ICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjAsOSArMTY2LDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0
dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAg
ICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsK
LSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIGNvbnN0IFN0cmluZyYgdGV4dEVu
Y29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgIGlm
ICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFTU0VSVChsb2FkZXItPmZyYW1lKCkpOworICAg
ICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3
YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUKKyAgICAgICAgLy8gd2hl
biB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9m
IGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KKyAgICAgICAgU3Ry
aW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7CisgICAgICAgIGJvb2wg
dXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKKyAgICAgICAgaWYgKCF1c2VyQ2hvc2Vu
KQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5n
TmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGxvYWRlci0+ZnJh
bWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2FkZXItPnNldEVuY29kaW5nKGVuY29kaW5nLCB1
c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICBmcmFtZUxvYWRlci0+
YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KKworICAgIGlmIChtX3BsdWdpblZpZXcpIHsK
KyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKSB7CisgICAgICAgICAgICBt
X3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPnJlc3BvbnNlKCkpOworICAg
ICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0K
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVy
LCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCkBAIC0yNTgsOCArMjg1LDEzIEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG8KICAgICAoY29yZShtX2ZyYW1l
KS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBFbGVtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
UGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2Fk
TWFudWFsbHkpCiB7CisgICAgUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldyA9IFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmNyZWF0ZVBsdWdpblZpZXcoY29yZShtX2ZyYW1l
KSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWlt
ZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2luVmll
dzsKKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zMDEsOCAr
MzMzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldp
ZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsKKyAgICBtX3BsdWdp
blZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3R3RrKj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAog
V2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJ
bnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCkBAIC0zMjQsNiArMzU1LDkg
QEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnQ6Om9iagogICAgIGlmIChNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50SW1hZ2U7CiAKKyAgICBpZiAoUGx1Z2luRGF0YWJh
c2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUp
KQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOwor
CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0
eXBlKSkKICAgICAgICAgcmV0dXJuIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRGcmFtZTsKIApAQCAt
NjIzLDE0ICs2NTcsMTQgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1F
VAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2Fk
ZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAgIEFTU0VSVChkb2N1bWVudExvYWRlci0+ZnJhbWUo
KSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBv
dXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCi0gICAgLy8gd2hl
biB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9m
IGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KLSAgICBTdHJpbmcg
ZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOwotICAgIGJvb2wg
dXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKLSAgICBpZiAoZW5jb2RpbmcuaXNOdWxs
KCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkudGV4dEVu
Y29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNv
ZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykKKyAg
ICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVudExvYWRlciwgMCwgMCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICBtX3BsdWdp
blZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7Cisg
ICAgfQogfQogCiAKQEAgLTc1Myw5ICs3ODcsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRF
cnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBtX3Bs
dWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAg
ICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5oCShyZXZpc2lvbiAzMDAwNSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzIsNiArMzMsOCBAQAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgogCisjaW5jbHVkZSAiUGx1Z2luVmlld0d0ay5oIgorCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTgwLDYg
KzE4MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1f
ZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAg
ICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAgIC8vIFBsdWdpbiB2
aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAgICAgV2ViQ29yZTo6UGx1Z2luVmlld0d0ayog
bV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiAg
ICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzMDAwNSkKKysrIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgd2Via2l0Z3RrX2NwcGZs
YWdzICs9IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIFwK
IAktSSQoc3JjZGlyKS9XZWJDb3JlL2xvYWRlci9ndGsgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUv
cGFnZS9ndGsgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGx1Z2lucy9ndGsgXAogCS1JJChzcmNk
aXIpL1dlYktpdC9ndGsgXAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQg
XAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0CkBAIC04NDksNiArODUwLDExIEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5nZS5j
cHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblN0cmVhbS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3Rr
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorCVdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvbnBhcGkuY3Bw
IFwKIAlXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3Jl
bmRlcmluZy9iaWRpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIFwK
QEAgLTkwOCw2ICs5MTQsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCiAKK2lm
IFRBUkdFVF9YMTEKK3dlYmtpdGd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3Rr
L2d0azJ4dGJpbi5jCitlbmRpZgorCiB3ZWJraXRndGtfaGVhZGVycyArPSBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3Rl
Ym9hcmRIZWxwZXIuaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiAzMDAwNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEzICs1Nyw2IEBAIFZlY3Rv
cjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIAogYm9vbCBXZWJDb3JlOjpoaXN0
b3J5Q29udGFpbnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KIAot
UGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJ
bmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDt9Ci11bnNpZ25lZCBQ
bHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmlu
ZygpOyB9Ci1ib29sIFdlYkNvcmU6OlBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShj
b25zdCBXZWJDb3JlOjpTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsg
fQotdm9pZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLQotCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAw
RkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lk
ICgqKSgpKSB7IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZpc2lv
biAzMDAwNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNiw1ICszMDYsMjIgQEAgdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxp
ZGF0aW9uKGJvbwogCiB2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKIHsKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWd0a1dpZGdldCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkp
OworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihw
YXJlbnQoKSk7CisgICAgSW50UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKTsKKworICAgIC8vIERvbid0IGFs
bG93IHRoZSBhbGxvY2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRTaXplIHN6ID0g
ZnJhbWVHZW9tZXRyeSgpLnNpemUoKTsKKyAgICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisK
KyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHN6Lndp
ZHRoKCksIHN6LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dp
ZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAJKHJldmlzaW9uIDMwMDA1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdGF0aWMgSGFzaE1hcDxjb25z
dCBXaWRnZXQqLCBSZW5kZXJXaWRnCiB9CiAKIFJlbmRlcldpZGdldDo6UmVuZGVyV2lkZ2V0KE5v
ZGUqIG5vZGUpCi0gICAgICA6IFJlbmRlclJlcGxhY2VkKG5vZGUpCisgICAgICA6IFJlbmRlclJl
cGxhY2VkKG5vZGUsIEludFNpemUoMCwgMCkpCiAgICAgICAsIG1fd2lkZ2V0KDApCiAgICAgICAs
IG1fcmVmQ291bnQoMCkKIHsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJh
c2VHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQbHVnaW5EYXRhYmFzZUd0a19ICisjZGVmaW5lIFBsdWdpbkRhdGFiYXNlR3RrX0gK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgi
CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgRWxlbWVudDsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBJbnRTaXplOworICAgIGNs
YXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsKKyAgICBjbGFzcyBQbHVnaW5W
aWV3R3RrOworCisgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiwg
UGx1Z2luUGFja2FnZUd0a0hhc2g+IFBsdWdpblNldDsKKyAgCisgICAgY2xhc3MgUGx1Z2luRGF0
YWJhc2VHdGsgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlR3Rr
KiBpbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgICAgIFBsdWdpblZpZXdHdGsqIGNyZWF0ZVBsdWdp
blZpZXcoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBi
b29sIGxvYWRNYW51YWxseSk7CisKKyAgICAgICAgYm9vbCByZWZyZXNoKCk7CisgICAgICAgIFZl
Y3RvcjxQbHVnaW5QYWNrYWdlR3RrKj4gcGx1Z2lucygpIGNvbnN0OworICAgICAgICBib29sIGlz
TUlNRVR5cGVSZWdpc3RlcmVkKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAg
ICB2b2lkIGFkZEV4dHJhUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIHNldFBsdWdpblBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykg
eyBtX3BsdWdpblBhdGhzID0gcGF0aHM7IH0KKyAgICAgICAgUGx1Z2luU2V0IGdldFBsdWdpbnNJ
blBhdGhzKCkgY29uc3Q7CisKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayogZmluZFBsdWdpbihj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgICAgIFBsdWdp
blBhY2thZ2VHdGsqIHBsdWdpbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwor
ICAgICAgICBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBleHRlbnNpb24pOworCisgICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBkZWZhdWx0UGx1
Z2luUGF0aHMoKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX3BsdWdpblBhdGhzOworICAg
ICAgICBIYXNoU2V0PFN0cmluZz4gbV9yZWdpc3RlcmVkTUlNRVR5cGVzOworICAgICAgICBQbHVn
aW5TZXQgbV9wbHVnaW5zOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlR3RrLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtqc19iaW5kaW5nLmgi
CisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgorI2luY2x1
ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2luY2x1ZGUgInJ1
bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxranMvdmFs
dWUuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisjaW5jbHVkZSAiZ3RrMnh0
YmluLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJ
TkdfV0lOMzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6
OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsK
K3VzaW5nIEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVT
dHJpbmc7CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKKworY2xhc3MgUGx1Z2luUmVxdWVzdEd0ayB7CitwdWJsaWM6Cisg
ICAgUGx1Z2luUmVxdWVzdEd0ayhjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1
ZXN0LCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCisgICAgICAgIDog
bV9mcmFtZUxvYWRSZXF1ZXN0KGZyYW1lTG9hZFJlcXVlc3QpCisgICAgICAgICwgbV9ub3RpZnlE
YXRhKG5vdGlmeURhdGEpCisgICAgICAgICwgbV9zZW5kTm90aWZpY2F0aW9uKHNlbmROb3RpZmlj
YXRpb24pIHsgfQorcHVibGljOgorICAgIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lTG9h
ZFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTG9hZFJlcXVlc3Q7IH0KKyAgICB2b2lk
KiBub3RpZnlEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZnlEYXRhOyB9CisgICAgYm9vbCBz
ZW5kTm90aWZpY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kTm90aWZpY2F0aW9uOyB9Citw
cml2YXRlOgorICAgIEZyYW1lTG9hZFJlcXVlc3QgbV9mcmFtZUxvYWRSZXF1ZXN0OworICAgIHZv
aWQqIG1fbm90aWZ5RGF0YTsKKyAgICBib29sIG1fc2VuZE5vdGlmaWNhdGlvbjsKKyAgICAvLyBG
SVhNRTogdXNlciBnZXN0dXJlCit9OworCitzdGF0aWMgU3RyaW5nIHNjcmlwdFN0cmluZ0lmSmF2
YVNjcmlwdFVSTChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwuc3RyaW5nKCkuc3Rh
cnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIC8vIFRoaXMgcmV0dXJucyBhbiB1bmVzY2FwZWQgc3RyaW5nCisgICAgcmV0dXJuIEtV
Ukw6OmRlY29kZV9zdHJpbmcodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKS5taWQoMTEpKTsKK30KKwor
UGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6c19jdXJyZW50UGx1Z2luVmlldyA9IDA7CisK
K3N0YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChXaW5k
b3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBG
aXJlZm94LzIuMCI7CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6dXBkYXRlV2luZG93KCkgY29uc3QK
K3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRS
ZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVj
dCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0
cnkoKS5zaXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1f
Y2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworfQor
CitJbnRSZWN0IFBsdWdpblZpZXdHdGs6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK3sKKyAgICAv
LyBTdGFydCBieSBjbGlwcGluZyB0byBvdXIgYm91bmRzLgorICAgIEludFJlY3QgY2xpcFJlY3Qo
bV93aW5kb3dSZWN0KTsKKyAgICAKKyAgICAvLyBUYWtlIG91ciBlbGVtZW50IGFuZCBnZXQgdGhl
IGNsaXAgcmVjdCBmcm9tIHRoZSBlbmNsb3NpbmcgbGF5ZXIgYW5kIGZyYW1lIHZpZXcuCisgICAg
UmVuZGVyTGF5ZXIqIGxheWVyID0gbV9lbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXll
cigpOworICAgIEZyYW1lVmlldyogcGFyZW50VmlldyA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dmlldygpOworICAgIGNsaXBSZWN0LmludGVyc2VjdChwYXJlbnRWaWV3LT53aW5kb3dDbGlwUmVj
dEZvckxheWVyKGxheWVyLCB0cnVlKSk7CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSB7IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0
aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKyAgICBpZiAobV93aWRnZXQpIHsKKyAgICAg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2lkZ2V0LCAmYWxsb2NhdGlvbik7CisjaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7
CisgICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihtX3dpZGdldCks
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAgICAgZ3RrX3h0
YmluX3Jlc2l6ZShtX3dpZGdldCwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5o
ZWlnaHQoKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBjbGlwUmVj
dDsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSB8
fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVjdCAhPSBmcmFt
ZUdlb21ldHJ5KCkpCisgICAgICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKKwor
ICAgIGlmIChwYXJlbnQoKSkKKyAgICAgICAgaW5pdCgpOworCisgICAgdXBkYXRlV2luZG93KCk7
CisgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6Omdl
b21ldHJ5Q2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCk7CisgICAgdXBkYXRlV2lu
ZG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Rm9jdXMoKQoreworICAgIFdpZGdl
dDo6c2V0Rm9jdXMoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzaG93KCkKK3sKKyAgICBt
X2lzVmlzaWJsZSA9IHRydWU7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3R3RrOjpoaWRlKCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgV2lk
Z2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGFpbnRNaXNzaW5nUGx1Z2lu
SWNvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgc3RhdGljIEltYWdlKiBudWxsUGx1Z2luSW1hZ2U7CisgICAgaWYgKCFudWxsUGx1Z2luSW1h
Z2UpCisgICAgICAgIG51bGxQbHVnaW5JbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgibnVsbFBsdWdpbiIpOworCisgICAgSW50UmVjdCBpbWFnZVJlY3QoZnJhbWVHZW9tZXRyeSgp
LngoKSwgZnJhbWVHZW9tZXRyeSgpLnkoKSwgbnVsbFBsdWdpbkltYWdlLT53aWR0aCgpLCBudWxs
UGx1Z2luSW1hZ2UtPmhlaWdodCgpKTsKKworICAgIGludCB4T2Zmc2V0ID0gKGZyYW1lR2VvbWV0
cnkoKS53aWR0aCgpIC0gaW1hZ2VSZWN0LndpZHRoKCkpIC8gMjsKKyAgICBpbnQgeU9mZnNldCA9
IChmcmFtZUdlb21ldHJ5KCkuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKwor
ICAgIGltYWdlUmVjdC5tb3ZlKHhPZmZzZXQsIHlPZmZzZXQpOworCisgICAgaWYgKCFyZWN0Lmlu
dGVyc2VjdHMoaW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29udGV4dC0+c2F2
ZSgpOworICAgIGNvbnRleHQtPmNsaXAod2luZG93Q2xpcFJlY3QoKSk7CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlKG51bGxQbHVnaW5JbWFnZSwgaW1hZ2VSZWN0LmxvY2F0aW9uKCkpOworICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lz
U3RhcnRlZCkgeworICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisg
ICAgICAgIHBhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAg
IC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cu
dHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0Zy
YW1lVmlldygpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsK
KyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAg
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7Cisg
ICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZy
YW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIC8qIFN5
bnRoZXNpemUgYW4gWEV2ZW50IGFuZCBwYXNzIGl0IG9uICovCisgICAgLyoKKyAgICBucEV2ZW50
LndQYXJhbSA9IGV2ZW50LT5rZXlDb2RlKCk7ICAgIAorCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0ga2V5ZG93bkV2ZW50KSB7CisgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9LRVlET1dOOwor
ICAgICAgICBucEV2ZW50LmxQYXJhbSA9IDA7CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGtleXVwRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX0tFWVVQOworICAg
ICAgICBucEV2ZW50LmxQYXJhbSA9IDB4ODAwMDsKKyAgICB9CisgICAgKi8KKworICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKKy8vZXh0ZXJuIGJvb2wgaWdub3JlTmV4dFNldEN1
cnNvcjsKKwordm9pZCBQbHVnaW5WaWV3R3RrOjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
IGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKworICAgIGlmICghbV9pc1dpbmRvd2Vk
KQorICAgICAgcmV0dXJuOworCisgICAgLyogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyBv
biAqLworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSkt
PmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgp
KSk7CisKKyAgICAvKgorICAgIG5wRXZlbnQubFBhcmFtID0gTUFLRUxQQVJBTShwLngoKSwgcC55
KCkpOworICAgIG5wRXZlbnQud1BhcmFtID0gMDsKKworICAgIGlmIChldmVudC0+Y3RybEtleSgp
KQorICAgICAgICBucEV2ZW50LndQYXJhbSB8PSBNS19DT05UUk9MOworICAgIGlmIChldmVudC0+
c2hpZnRLZXkoKSkKKyAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfU0hJRlQ7CisKKyAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBtb3VzZW1vdmVFdmVudCB8fAorICAgICAgICBldmVudC0+dHlw
ZSgpID09IG1vdXNlb3V0RXZlbnQgfHwgCisgICAgICAgIGV2ZW50LT50eXBlKCkgPT0gbW91c2Vv
dmVyRXZlbnQpIHsKKyAgICAgICAgbnBFdmVudC5ldmVudCA9IFdNX01PVVNFTU9WRTsKKyAgICAg
ICAgaWYgKGV2ZW50LT5idXR0b25Eb3duKCkpCisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LT5i
dXR0b24oKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTGVmdEJ1dHRvbjoKKyAgICAgICAgICAg
ICAgICAgICAgbnBFdmVudC53UGFyYW0gfD0gTUtfTEJVVFRPTjsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNaWRkbGVCdXR0b246CisgICAgICAgICAg
ICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX01CVVRUT047CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUmlnaHRCdXR0b246CisgICAgICAgICAg
ICAgICAgICAgIG5wRXZlbnQud1BhcmFtIHw9IE1LX1JCVVRUT047CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlKCkg
PT0gbW91c2Vkb3duRXZlbnQpIHsKKyAgICAgICAgc3dpdGNoIChldmVudC0+YnV0dG9uKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01f
TEJVVFRPTkRPV047CisKKyAgICAgICAgICAgICAgICAvLyBGb2N1cyB0aGUgcGx1Z2luCisgICAg
ICAgICAgICAgICAgbV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rm9jdXNlZE5vZGUobV9l
bGVtZW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fTUJVVFRPTkRPV047CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgbnBFdmVu
dC5ldmVudCA9IFdNX1JCVVRUT05ET1dOOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IG1vdXNldXBFdmVudCkgeworICAg
ICAgICBzd2l0Y2ggKGV2ZW50LT5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAg
ICAgICAgICAgICAgIG5wRXZlbnQuZXZlbnQgPSBXTV9MQlVUVE9OVVA7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbnBFdmVudC5l
dmVudCA9IFdNX01CVVRUT05VUDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgICAgICBucEV2ZW50LmV2ZW50ID0gV01fUkJVVFRPTlVQOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJl
dHVybjsKKyAgICAqLworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwg
Jm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKworICAgIC8v
IEN1cnJlbnRseSwgV2lkZ2V0OjpzZXRDdXJzb3IgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGlz
IGZ1bmN0aW9uIGluIEV2ZW50SGFuZGxlci5jcHAKKyAgICAvLyBhbmQgc2luY2Ugd2UgZG9uJ3Qg
d2FudCB0aGF0IHdlIHNldCBpZ25vcmVOZXh0U2V0Q3Vyc29yIHRvIHRydWUgaGVyZSB0byBwcmV2
ZW50IHRoYXQuCisgICAgLy9pZ25vcmVOZXh0U2V0Q3Vyc29yID0gdHJ1ZTsgICAgIAorfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
IW1fcGx1Z2luIHx8IG1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2
ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgaGFuZGxlTW91c2VFdmVudChzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZlbnQpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNLZXlib2FyZEV2
ZW50KCkpCisgICAgICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRF
dmVudCo+KGV2ZW50KSk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0UGFyZW50KFNjcm9s
bFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQg
cCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhy
ZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5k
b3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAg
ICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNs
aXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBt
X25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNXaW5kb3dl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAg
IH0KK30KKworYm9vbCBQbHVnaW5WaWV3R3RrOjpzdGFydCgpCit7CisgICAgaWYgKG1faXNTdGFy
dGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQobV9wbHVnaW4pOworICAg
IEFTU0VSVChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+bmV3cCk7CisKKyAgICBOUEVycm9yIG5w
RXJyOworICAgIFBsdWdpblZpZXdHdGs6OnNldEN1cnJlbnRQbHVnaW5WaWV3KHRoaXMpOworICAg
IHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAg
ICAgIG5wRXJyID0gbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPm5ld3AoKE5QTUlNRVR5cGUpbV9t
aW1lVHlwZS5kYXRhKCksIG1faW5zdGFuY2UsIG1fbW9kZSwgbV9wYXJhbUNvdW50LCBtX3BhcmFt
TmFtZXMsIG1fcGFyYW1WYWx1ZXMsIE5VTEwpOworICAgIH0KKyAgICBQbHVnaW5WaWV3R3RrOjpz
ZXRDdXJyZW50UGx1Z2luVmlldygwKTsKKworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJP
UikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc1N0YXJ0ZWQgPSB0cnVlOworCisg
ICAgaWYgKCFtX3VybC5pc0VtcHR5KCkgJiYgIW1fbG9hZE1hbnVhbGx5KSB7CisgICAgICAgIEZy
YW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKyAgICAgICAgZnJhbWVMb2FkUmVxdWVz
dC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobV91cmwpOworICAgICAgICBsb2Fk
KGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4g
c3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46
Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQ
bHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVh
bSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkp
OworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxs
TG9ja3MgZHJvcEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9w
bHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2lu
c3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6c2V0Q3VycmVudFBs
dWdpblZpZXcoUGx1Z2luVmlld0d0ayogcGx1Z2luVmlldykKK3sKKyAgICBzX2N1cnJlbnRQbHVn
aW5WaWV3ID0gcGx1Z2luVmlldzsKK30KKworUGx1Z2luVmlld0d0ayogUGx1Z2luVmlld0d0azo6
Y3VycmVudFBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzX2N1cnJlbnRQbHVnaW5WaWV3Owor
fQorCitzdGF0aWMgY2hhciogY3JlYXRlVVRGOFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sK
KyAgICBDU3RyaW5nIGNzdHIgPSBzdHIudXRmOCgpOworICAgIGNoYXIqIHJlc3VsdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MoY3N0ci5sZW5ndGgoKSArIDEpKTsKKworICAg
IHN0cm5jcHkocmVzdWx0LCBjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgoKSArIDEpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBz
dHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAg
ICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7
Cit9CisKK3N0YXRpYyBib29sIGdldFN0cmluZyhLSlNQcm94eSogcHJveHksIEpTVmFsdWUqIHJl
c3VsdCwgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYgKCFwcm94eSB8fCAhcmVzdWx0IHx8IHJl
c3VsdC0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTTG9jayBs
b2NrOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CisgICAgVVN0cmluZyB1c3RyaW5nID0gcmVzdWx0LT50b1N0cmluZyhleGVjKTsK
KyAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIAorICAgIHN0cmluZyA9IHVzdHJpbmc7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6cGVyZm9ybVJlcXVl
c3QoUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBLVVJMIHJlcXVlc3RVUkwgPSBy
ZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCk7CisgICAg
U3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJMKHJlcXVlc3RVUkwp
OworCisgICAgaWYgKGpzU3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIG1fcGFyZW50RnJhbWUt
PmxvYWRlcigpLT51cmxTZWxlY3RlZChyZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCksIDAsIGZh
bHNlLCB0cnVlKTsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzQ4MDc0Njk+
IFRoaXMgc2hvdWxkIGJlIHNlbnQgd2hlbiB0aGUgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIGxvYWRp
bmcKKyAgICAgICAgaWYgKHJlcXVlc3QtPnNlbmROb3RpZmljYXRpb24oKSkgeworICAgICAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+dXJsbm90aWZ5KG1faW5zdGFuY2UsIHJlcXVlc3RVUkwu
ZGVwcmVjYXRlZFN0cmluZygpLnV0ZjgoKSwgTlBSRVNfRE9ORSwgcmVxdWVzdC0+bm90aWZ5RGF0
YSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUYXJn
ZXRlZCBKYXZhU2NyaXB0IHJlcXVlc3RzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIGZyYW1lIHRo
YXQgY29udGFpbnMgdGhlIEphdmFTY3JpcHQgcGx1Z2luCisgICAgLy8gYW5kIHRoaXMgaGFzIGJl
ZW4gbWFkZSBzdXJlIGluIDo6bG9hZC4KKyAgICBBU1NFUlQocmVxdWVzdC0+ZnJhbWVMb2FkUmVx
dWVzdCgpLmZyYW1lTmFtZSgpLmlzRW1wdHkoKSB8fCBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZp
bmQocmVxdWVzdC0+ZnJhbWVMb2FkUmVxdWVzdCgpLmZyYW1lTmFtZSgpKSA9PSBtX3BhcmVudEZy
YW1lKTsKKyAgICAKKyAgICAvLyBFeGVjdXRpbmcgYSBzY3JpcHQgY2FuIGNhdXNlIHRoZSBwbHVn
aW4gdmlldyB0byBiZSBkZXN0cm95ZWQsIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHBh
cmVudCBmcmFtZS4KKyAgICBSZWZQdHI8RnJhbWU+IHBhcmVudEZyYW1lID0gIG1fcGFyZW50RnJh
bWU7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPmV4ZWN1
dGVTY3JpcHQoanNTdHJpbmcuZGVwcmVjYXRlZFN0cmluZygpLCB0cnVlKTsKKworICAgIGlmIChy
ZXF1ZXN0LT5mcmFtZUxvYWRSZXF1ZXN0KCkuZnJhbWVOYW1lKCkuaXNOdWxsKCkpIHsKKyAgICAg
ICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKKworICAgICAgICBpZiAoIWdldFN0cmluZyhwYXJlbnRG
cmFtZS0+c2NyaXB0UHJveHkoKSwgcmVzdWx0LCByZXN1bHRTdHJpbmcpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIENTdHJpbmcgY3N0ciA9IHJlc3VsdFN0cmluZy51dGY4KCk7Cisg
ICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhp
cywgcGFyZW50RnJhbWUuZ2V0KCksIHJlcXVlc3QtPmZyYW1lTG9hZFJlcXVlc3QoKS5yZXNvdXJj
ZVJlcXVlc3QoKSwgcmVxdWVzdC0+c2VuZE5vdGlmaWNhdGlvbigpLCByZXF1ZXN0LT5ub3RpZnlE
YXRhKCksIHBsdWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7Cisg
ICAgICAgIG1fc3RyZWFtcy5hZGQoc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtLT5zZW5kSmF2YVNj
cmlwdFN0cmVhbShyZXF1ZXN0VVJMLCBjc3RyKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmll
d0d0azo6cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qIHRpbWVyKQorewor
ICAgIEFTU0VSVCh0aW1lciA9PSAmbV9yZXF1ZXN0VGltZXIpOworICAgIEFTU0VSVChtX3JlcXVl
c3RzLnNpemUoKSA+IDApOworCisgICAgUGx1Z2luUmVxdWVzdEd0ayogcmVxdWVzdCA9IG1fcmVx
dWVzdHNbMF07CisgICAgbV9yZXF1ZXN0cy5yZW1vdmUoMCk7CisgICAgCisgICAgLy8gU2NoZWR1
bGUgYSBuZXcgcmVxdWVzdCBiZWZvcmUgY2FsbGluZyBwZXJmb3JtUmVxdWVzdCBzaW5jZSB0aGUg
Y2FsbCB0bworICAgIC8vIHBlcmZvcm1SZXF1ZXN0IGNhbiBjYXVzZSB0aGUgcGx1Z2luIHZpZXcg
dG8gYmUgZGVsZXRlZC4KKyAgICBpZiAobV9yZXF1ZXN0cy5zaXplKCkgPiAwKQorICAgICAgICBt
X3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICBwZXJmb3JtUmVxdWVzdChyZXF1
ZXN0KTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpzY2hlZHVsZVJlcXVlc3QoUGx1Z2luUmVx
dWVzdEd0ayogcmVxdWVzdCkKK3sKKyAgICBtX3JlcXVlc3RzLmFwcGVuZChyZXF1ZXN0KTsKKyAg
ICBtX3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmll
d0d0azo6bG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBmcmFtZUxvYWRSZXF1ZXN0LCBib29s
IHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEpCit7CisgICAgQVNTRVJUKGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IGZy
YW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7
CisKKyAgICBLVVJMIHVybCA9IGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJs
KCk7CisgICAgCisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOUEVSUl9J
TlZBTElEX1VSTDsKKworICAgIFN0cmluZyB0YXJnZXQgPSBmcmFtZUxvYWRSZXF1ZXN0LmZyYW1l
TmFtZSgpOworCisgICAgLy8gZG9uJ3QgbGV0IGEgcGx1Z2luIHN0YXJ0IGFueSBsb2FkcyBpZiBp
dCBpcyBubyBsb25nZXIgcGFydCBvZiBhIGRvY3VtZW50IHRoYXQgaXMgYmVpbmcgCisgICAgLy8g
ZGlzcGxheWVkIHVubGVzcyB0aGUgbG9hZHMgYXJlIGluIHRoZSBzYW1lIGZyYW1lIGFzIHRoZSBw
bHVnaW4uCisgICAgaWYgKG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
ICE9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT5hY3RpdmVEb2N1bWVudExvYWRlcigpICYmCisg
ICAgICAgICh0YXJnZXQuaXNOdWxsKCkgfHwgbV9wYXJlbnRGcmFtZS0+dHJlZSgpLT5maW5kKHRh
cmdldCkgIT0gbV9wYXJlbnRGcmFtZSkpCisgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworCisgICAgU3RyaW5nIGpzU3RyaW5nID0gc2NyaXB0U3RyaW5nSWZKYXZhU2NyaXB0VVJM
KHVybCk7CisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSkgeworICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX3BhcmVudEZyYW1lLT5zZXR0aW5ncygpOworICAgICAgICBpZiAoIXNldHRp
bmdzIHx8ICFzZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAv
LyBSZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUiBpZiBKUyBpcyBkaXNhYmxlZC4gVGhpcyBpcyB3
aGF0IE1vemlsbGEgZG9lcy4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5pc051bGwoKSAmJiBtX21vZGUgPT0gTlBfRlVM
TCkgeworICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYSBKYXZhU2NyaXB0IHJlcXVlc3QgZnJv
bSBhIHN0YW5kYWxvbmUgcGx1Zy1pbiB0aGF0IGlzIHNlbGYtdGFyZ2V0dGVkCisgICAgICAgICAg
ICAvLyBiZWNhdXNlIHRoaXMgY2FuIGNhdXNlIHRoZSB1c2VyIHRvIGJlIHJlZGlyZWN0ZWQgdG8g
YSBibGFuayBwYWdlICgzNDI0MDM5KS4KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElE
X1BBUkFNOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFqc1N0cmluZy5pc051bGwoKSB8
fCAhdGFyZ2V0LmlzTnVsbCgpKSB7CisgICAgICAgIGlmICghanNTdHJpbmcuaXNOdWxsKCkgJiYg
IXRhcmdldC5pc051bGwoKSAmJiBtX3BhcmVudEZyYW1lLT50cmVlKCktPmZpbmQodGFyZ2V0KSAh
PSBtX3BhcmVudEZyYW1lKSB7CisgICAgICAgICAgICAvLyBGb3Igc2VjdXJpdHkgcmVhc29ucywg
b25seSBhbGxvdyBKUyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uIHRoZSBmcmFtZSB0aGF0IGNvbnRh
aW5zIHRoZSBwbHVnLWluLgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07
CisgICAgICAgIH0KKworICAgICAgICBQbHVnaW5SZXF1ZXN0R3RrKiByZXF1ZXN0ID0gbmV3IFBs
dWdpblJlcXVlc3RHdGsoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5
RGF0YSk7CisgICAgICAgIHNjaGVkdWxlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBQbHVnaW5TdHJlYW0qIHN0cmVhbSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9w
YXJlbnRGcmFtZSwgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgc2VuZE5vdGlm
aWNhdGlvbiwgbm90aWZ5RGF0YSwgcGx1Z2luKCktPnBsdWdpbkZ1bmNzKCksIGluc3RhbmNlKCks
IG1fcXVpcmtzKTsKKyAgICAgICAgbV9zdHJlYW1zLmFkZChzdHJlYW0pOworCisgICAgICAgIHN0
cmVhbS0+c3RhcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisK
K3N0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVs
YXRpdmVVUkxTdHJpbmcpCit7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmxTdHJpbmcgPSBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKHJlbGF0aXZlVVJMU3RyaW5nKTsKKworICAgIC8vIFN0
cmlwIHJldHVybiBjaGFyYWN0ZXJzCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOwor
ICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VV
UkwsIHVybFN0cmluZyk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VVJMTm90aWZ5
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQor
eworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIGZyYW1lTG9h
ZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0
LnJlc291cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisKKyAg
ICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCB0cnVlLCBub3RpZnlEYXRhKTsKK30KKwor
TlBFcnJvciBQbHVnaW5WaWV3R3RrOjpnZXRVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQpCit7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisg
ICAgZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1
cmwpKTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3QsIGZhbHNlLCAwKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNo
YXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclsw
XSA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFu
a0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0
ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAg
ICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYg
KGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICBy
ZXR1cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBh
ZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAg
IGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAg
ICAgICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAg
ICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAz
ODcpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgor
ICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNo
YXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBI
VFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4g
VW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4g
V29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9m
IGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAg
Ly8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgor
ICAgIC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90
IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0
ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0
dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAg
ICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAg
IC8vIG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2Fw
aXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
Ym9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAg
ICBVQ2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0g
Pj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvdXBwZXIobmFtZVtp
XSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0g
J0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvbG93ZXIobmFtZVtpXSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChu
YW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMo
Y29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25z
dCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAg
IFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAg
Ly8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2Fu
J3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0wo
Ynl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAg
ICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8v
IE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1
cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgo
KmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsg
Ly8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAg
ICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9
PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUg
aGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAn
IHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUg
cHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAg
ICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVy
CisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQo
bGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlID0gRGVwcmVjYXRlZFN0
cmluZzo6ZnJvbUxhdGluMShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhl
YWRlckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRl
cgorICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9u
ID0gbGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAg
ICAgICAgICAgICAvLyBlbXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
Y29sb24gPT0gZW9sKSAKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25v
cmUgaXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRl
ckZpZWxkTmFtZShEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGxpbmUsIGNvbG9uIC0gbGlu
ZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAgICAgICAgIGZv
ciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjb2xv
biA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IERlcHJlY2F0ZWRTdHJpbmc6OmZy
b21MYXRpbjEoY29sb24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBv
bGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYg
KCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0g
b2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAg
ICAgICAgICB0bXAgKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFz
dEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3RrOjpoYW5kbGVQb3N0
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0
aW9uLCBib29sIGFsbG93SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYp
CisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVx
dWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7
CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAg
ICBTdHJpbmcgZmlsZW5hbWUgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tTGF0aW4xKGJ1ZiwgbGVu
KTsKKworICAgICAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKKyAgICAg
ICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAgICAgIC8vIEdl
dCBmaWxlIGluZm8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0ZjgoKSku
ZGF0YSgpLCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19S
RUdVTEFSKSkpCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwkv
L0ZJWE1FIC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisgICAgICAgIEZJTEUqIGZp
bGVIYW5kbGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksICJyIik7CisgICAgICAg
IAorICAgICAgICBpZiAoZmlsZUhhbmRsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgICAgIC8vYnVmZmVyLnJlc2l6ZSgpOworCisgICAg
ICAgIGludCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxl
KTsKKworICAgICAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICAgICAgaWYgKGJ5dGVzUmVh
ZCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0
dXJuIE5QRVJSX05PX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUo
bGVuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisK
KyAgICBjb25zdCBjaGFyKiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3RE
YXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKyAgICAKKyAgICBpZiAoYWxsb3dIZWFkZXJzKSB7
CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikpIHsKKyAgICAgICAgICAg
IHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0tOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25BZnRlckZpcnN0QmxhbmtM
aW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBv
ZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVhZGVyCisgICAgICAgICAg
ICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoYnVmZmVyLCBsb2Nh
dGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXpl
KCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBwbHVnaW5zIGxp
a2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBvc3QsCisgICAg
ICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3QgbGlrZSB0aGF0LiBTbyB3
ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAgLy8gYW5kIGluc3RlYWQg
dHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGguCisgICAgICAgICAgICAg
ICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0KCJDb250ZW50LUxlbmd0
aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3RoLmlzTnVsbCgpKQorICAg
ICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRMZW5ndGgudG9JbnQoKSwg
KGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMucmVtb3ZlKCJD
b250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERhdGEgKz0gbG9jYXRpb247
CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVuZ3RoOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJl
cXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNv
dXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOworICAgIGZyYW1l
TG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJG
aWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJv
ZHkoUGFzc1JlZlB0cjxGb3JtRGF0YT4obmV3IEZvcm1EYXRhKHBvc3REYXRhLCBwb3N0RGF0YUxl
bmd0aCkpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisg
ICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6cG9zdFVSTE5vdGlmeShjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVm
LCBOUEJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSkKK3sKKyAgICByZXR1cm4gaGFuZGxlUG9z
dCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUsIG5vdGlmeURhdGEsIHRydWUsIHRydWUpOwor
fQorCitOUEVycm9yIFBsdWdpblZpZXdHdGs6OnBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUp
Cit7CisgICAgLy8gQXMgZG9jdW1lbnRlZCwgb25seSBhbGxvdyBoZWFkZXJzIHRvIGJlIHNwZWNp
ZmllZCB2aWEgTlBQX1Bvc3RVUkwgd2hlbiB1c2luZyBhIGZpbGUuCisgICAgcmV0dXJuIGhhbmRs
ZVBvc3QodXJsLCB0YXJnZXQsIGxlbiwgYnVmLCBmaWxlLCAwLCBmYWxzZSwgZmlsZSk7Cit9CisK
K05QRXJyb3IgUGx1Z2luVmlld0d0azo6bmV3U3RyZWFtKE5QTUlNRVR5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdGFyZ2V0LCBOUFN0cmVhbSoqIHN0cmVhbSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIC8vIFVuc3VwcG9ydGVkCisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9
CisKK2ludDMyIFBsdWdpblZpZXdHdGs6OndyaXRlKE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxl
biwgdm9pZCogYnVmZmVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gVW5zdXBw
b3J0ZWQKKyAgICByZXR1cm4gLTE7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6ZGVzdHJv
eVN0cmVhbShOUFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pCit7CisgICAgUGx1Z2lu
U3RyZWFtKiBicm93c2VyU3RyZWFtID0gc3RhdGljX2Nhc3Q8UGx1Z2luU3RyZWFtKj4oc3RyZWFt
LT5uZGF0YSk7CisKKyAgICBpZiAoIXN0cmVhbSB8fCBQbHVnaW5TdHJlYW06Om93bmVyRm9yU3Ry
ZWFtKHN0cmVhbSkgIT0gbV9pbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURf
SU5TVEFOQ0VfRVJST1I7CisKKyAgICBicm93c2VyU3RyZWFtLT5jYW5jZWxBbmREZXN0cm95U3Ry
ZWFtKHJlYXNvbik7CisgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQorCitjb25zdCBjaGFy
KiBQbHVnaW5WaWV3R3RrOjp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3F1aXJrcy5jb250YWlu
cyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVybiBNb3pp
bGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBt
X3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0
ZjgoKTsKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCit2b2lkIFBsdWdpblZp
ZXdHdGs6OnN0YXR1cyhjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIFN0cmluZyBzID0gRGVw
cmVjYXRlZFN0cmluZzo6ZnJvbUxhdGluMShtZXNzYWdlKTsKKworICAgIGlmIChQYWdlKiBwYWdl
ID0gbV9wYXJlbnRGcmFtZS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3Rh
dHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBzKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3R3Rr
OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dp
dGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAg
IGNhc2UgTlBOVnh0QXBwQ29udGV4dDogeworICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVk
KSB7CisgICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNh
dGlvbkNvbnRleHQgKEdUS19YVEJJTihtX3dpZGdldCktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAg
fQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAyOworI2Vsc2UKKyAg
ICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5Q
TlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQor
ICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IHRydWU7CisjZWxzZQorICAg
ICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IE5QTlZXaW5kb3dOUE9iamVjdDogeworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1Njcmlw
dE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAg
ICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVz
Y3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1
bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAg
ICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAg
ICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dT
Y3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19F
UlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVj
dDogeworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAg
ICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1l
bnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RU
YWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhU
TUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAg
ICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmli
ZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGlt
ZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAg
ICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICAg
ICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlw
dE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZvaWQq
IHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyNpZmRlZiBHREtfV0lORE9X
SU5HX1gxMQorICAgICAgICAgICAgKigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1coR1RL
X1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3cpOworI2VuZGlmCisjaWZkZWYgR0RL
X1dJTkRPV0lOR19XSU4zMgorICAgICAgICAgICAgKigoSFdORCAqKXcpID0gR0RLX1dJTkRPV0lO
R19IV05EKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93KTsKKyNlbmRpZgor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9
CisKK05QRXJyb3IgUGx1Z2luVmlld0d0azo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyAgICAgICAgY2FzZSBO
UFBWcGx1Z2luV2luZG93Qm9vbDoKKyAgICAgICAgICAgIG1faXNXaW5kb3dlZCA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICBjYXNlIE5QUFZwbHVn
aW5UcmFuc3BhcmVudEJvb2w6CisgICAgICAgICAgICBtX2lzVHJhbnNwYXJlbnQgPSB2YWx1ZTsK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6aW52YWxpZGF0ZVJl
Y3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwg
cmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3Qt
PnRvcCk7CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uIHJlZ2lvbikKK3sKKyAgICBpZiAobV9p
c1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRSAtIEludmFsaWRhdGUg
dGhlIHJlZ2lvbgorICAgIFJFQ1QgcjsKKworICAgIGlmIChHZXRSZ25Cb3gocmVnaW9uLCAmcikg
PT0gMCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworICAgICovCit9CisKK3ZvaWQgUGx1Z2lu
Vmlld0d0azo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhtX3dpZGdldCk7CisgICAgZWxzZQorICAgICAgICBndGtf
d2lkZ2V0X3F1ZXVlX2RyYXcoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpKTsKK30KKwor
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIFBsdWdpblZpZXdHdGs6OmJpbmRpbmdJbnN0YW5jZSgp
Cit7CisgICAgTlBPYmplY3QqIG9iamVjdCA9IDA7CisKKyAgICBpZiAoIW1fcGx1Z2luIHx8ICFt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgTlBFcnJvciBucEVycjsKKyAgICB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzOworICAgICAgICBucEVyciA9IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0LCAmb2Jq
ZWN0KTsKKyAgICB9CisKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJST1IgfHwgIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8S0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdD4gcm9vdCA9IG1fcGFyZW50RnJhbWUtPmNyZWF0ZVJvb3RPYmplY3QodGhpcywgbV9wYXJl
bnRGcmFtZS0+c2NyaXB0UHJveHkoKS0+Z2xvYmFsT2JqZWN0KCkpOworICAgIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlICppbnN0YW5jZSA9IEtKUzo6QmluZGluZ3M6Okluc3RhbmNlOjpjcmVhdGVC
aW5kaW5nRm9yTGFuZ3VhZ2VJbnN0YW5jZShLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZTo6Q0xhbmd1
YWdlLCBvYmplY3QsIHJvb3QucmVsZWFzZSgpKTsKKworICAgIF9OUE5fUmVsZWFzZU9iamVjdChv
YmplY3QpOworCisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCitQbHVnaW5WaWV3R3RrOjp+UGx1
Z2luVmlld0d0aygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVx
dWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50
KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKwor
ICAgIGlmICghbV9uZWVkc1hFbWJlZCAmJiBHVEtfSVNfV0lER0VUKG1fd2lkZ2V0KSkKKyAgICAg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fd2lkZ2V0KTsKKyAgICBtX3dpbmRvdyA9IDA7CisgICAg
c2V0R3RrV2lkZ2V0KE5VTEwpOworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9i
amVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3F1aXJrcy5j
b250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4t
PnVubG9hZCgpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmRpc2Nvbm5lY3RTdHJlYW0oUGx1
Z2luU3RyZWFtKiBzdHJlYW0pCit7CisgICAgQVNTRVJUKG1fc3RyZWFtcy5jb250YWlucyhzdHJl
YW0pKTsKKworICAgIG1fc3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICAv
LyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdl
IHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgIGlmIChtaW1lVHlwZSA9PSAiYXBwbGlj
YXRpb24veC1zaG9ja3dhdmUtZmxhc2giKSB7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5R
dWlya1Rocm90dGxlSW52YWxpZGF0ZSk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a1Rocm90dGxlV01Vc2VyUGx1c09uZU1lc3NhZ2VzKTsKKyAgICB9CisKKyAgICAvLyBUaGUgV01Q
IHBsdWdpbiBzZXRzIGl0cyBzaXplIG9uIHRoZSBmaXJzdCBOUFBfU2V0V2luZG93IGNhbGwgYW5k
IG5ldmVyIHVwZGF0ZXMgaXRzIHNpemUsIHNvCisgICAgLy8gY2FsbCBTZXRXaW5kb3cgd2hlbiB0
aGUgcGx1Z2luIHZpZXcgaGFzIGEgY29ycmVjdCBzaXplCisgICAgaWYgKG1fcGx1Z2luLT5uYW1l
KCkuY29udGFpbnMoIk1pY3Jvc29mdCIpICYmIG1fcGx1Z2luLT5uYW1lKCkuY29udGFpbnMoIldp
bmRvd3MgTWVkaWEiKSkgeworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEZWZlckZp
cnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAgICAgLy8gV2luZG93bGVzcyBtb2RlIGRvZXMgbm90
IHdvcmsgYXQgYWxsIHdpdGggdGhlIFdNUCBwbHVnaW4gc28ganVzdCByZW1vdmUgdGhhdCBwYXJh
bWV0ZXIgCisgICAgICAgIC8vIGFuZCBkb24ndCBwYXNzIGl0IHRvIHRoZSBwbHVnLWluLgorICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtSZW1vdmVXaW5kb3dsZXNzVmlkZW9QYXJhbSk7
CisgICAgfQorCisgICAgLy8gVGhlIERpdlggcGx1Z2luIHNldHMgaXRzIHNpemUgb24gdGhlIGZp
cnN0IE5QUF9TZXRXaW5kb3cgY2FsbCBhbmQgbmV2ZXIgdXBkYXRlcyBpdHMgc2l6ZSwgc28KKyAg
ICAvLyBjYWxsIFNldFdpbmRvdyB3aGVuIHRoZSBwbHVnaW4gdmlldyBoYXMgYSBjb3JyZWN0IHNp
emUKKyAgICBpZiAobWltZVR5cGUgPT0gInZpZGVvL2RpdngiKQorICAgICAgICBtX3F1aXJrcy5h
ZGQoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCk7CisKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgcHJvYmxlbSBpbiBvdXIgTlBSdW50aW1lIGJpbmRp
bmdzOyBpZiBhIHBsdWctaW4gY3JlYXRlcyBhbgorICAgIC8vIE5QT2JqZWN0IGFuZCBwYXNzZXMg
aXQgdG8gYSBmdW5jdGlvbiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzZWUgd2hhdCByb290IG9iamVj
dCB0aGF0IE5QT2JqZWN0IGJlbG9uZ3MgdG8uCisgICAgLy8gVGh1cywgd2UgZG9uJ3Qga25vdyB0
aGF0IHRoZSBvYmplY3Qgc2hvdWxkIGJlIGludmFsaWRhdGVkIHdoZW4gdGhlIHBsdWctaW4gaW5z
dGFuY2UgZ29lcyBhd2F5LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNTQ4Nzc0Mj4uCisg
ICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNpbHZlcmxpZ2h0IikKKyAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAvLyBQcmV2
ZW50IHRoZSBSZWFsIHBsdWdpbiBmcm9tIGNhbGxpbmcgdGhlIFdpbmRvdyBQcm9jIHJlY3Vyc2l2
ZWx5LCBjYXVzaW5nIHRoZSBzdGFjayB0byBvdmVyZmxvdy4KKyAgICBpZiAobWltZVR5cGUgPT0g
ImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIpCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0RvbnRDYWxsV25kUHJvY0ZvclNhbWVNZXNzYWdlUmVjdXJzaXZlbHkpOworfQorCit2
b2lkIFBsdWdpblZpZXdHdGs6OnNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBBU1NF
UlQocGFyYW1OYW1lcy5zaXplKCkgPT0gcGFyYW1WYWx1ZXMuc2l6ZSgpKTsKKworICAgIHVuc2ln
bmVkIHNpemUgPSBwYXJhbU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBwYXJhbUNvdW50ID0g
MDsKKworICAgIG1fcGFyYW1OYW1lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFs
bG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisgICAgbV9wYXJhbVZhbHVlcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBzaXplKSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICBpZiAoKG1f
cXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrUmVtb3ZlV2luZG93bGVzc1ZpZGVvUGFyYW0pKSAm
JiBlcXVhbElnbm9yaW5nQ2FzZShwYXJhbU5hbWVzW2ldLCAid2luZG93bGVzc3ZpZGVvIikpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BhcmFtTmFtZXNbcGFyYW1Db3VudF0g
PSBjcmVhdGVVVEY4U3RyaW5nKHBhcmFtTmFtZXNbaV0pOworICAgICAgICBtX3BhcmFtVmFsdWVz
W3BhcmFtQ291bnRdID0gY3JlYXRlVVRGOFN0cmluZyhwYXJhbVZhbHVlc1tpXSk7CisKKyAgICAg
ICAgcGFyYW1Db3VudCsrOworICAgIH0KKworICAgIG1fcGFyYW1Db3VudCA9IHBhcmFtQ291bnQ7
Cit9CisKK1BsdWdpblZpZXdHdGs6OlBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBQbHVnaW5QYWNrYWdlR3RrKiBwbHVnaW4sIEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgYm9vbCBsb2FkTWFudWFsbHkpCisgICAgOiBtX3BsdWdpbihwbHVnaW4pCisgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fcGFyZW50RnJhbWUocGFyZW50RnJhbWUpCisgICAgLCBt
X2lzU3RhcnRlZChmYWxzZSkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fYmFzZVVSTChtX3Bh
cmVudEZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwobV9wYXJlbnRGcmFtZS0+ZG9jdW1lbnQo
KS0+YmFzZVVSTCgpKSkKKyAgICAsIG1fc3RhdHVzKFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3Nm
dWxseSkKKyAgICAsIG1fcmVxdWVzdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3R3RrOjpyZXF1ZXN0
VGltZXJGaXJlZCkKKyAgICAsIG1fcGFyYW1OYW1lcygwKQorICAgICwgbV9wYXJhbVZhbHVlcygw
KQorICAgICwgbV9pc1dpbmRvd2VkKHRydWUpCisgICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2Up
CisgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1faGF2ZUluaXRpYWxpemVkKGZhbHNl
KQorICAgICwgbV93aW5kb3coMCkKKyAgICAsIG1fbGFzdE1lc3NhZ2UoMCkKKyAgICAsIG1fbG9h
ZE1hbnVhbGx5KGxvYWRNYW51YWxseSkKKyAgICAsIG1fbWFudWFsU3RyZWFtKDApCisgICAgLCBt
X3dpZGdldCgwKQorICAgICwgbV9uZWVkc1hFbWJlZChmYWxzZSkKK3sKKyAgICBpZiAoIW1fcGx1
Z2luKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5zdGFuY2UgPSAmbV9pbnN0YW5jZVN0
cnVjdDsKKyAgICBtX2luc3RhbmNlLT5uZGF0YSA9IHRoaXM7CisKKyAgICBtX21pbWVUeXBlID0g
bWltZVR5cGUudXRmOCgpOworICAgIGRldGVybWluZVF1aXJrcyhtaW1lVHlwZSk7CisKKyAgICBz
ZXRQYXJhbWV0ZXJzKHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKworICAgIG1fbW9kZSA9IG1f
bG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5QX0VNQkVEOworCisgICAgcmVzaXplKHNpemUpOwor
fQorCit2b2lkIFBsdWdpblZpZXdHdGs6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFs
aXplZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKwor
ICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0
YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9z
dGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFzdGFydCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3Rh
dHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZt
X25lZWRzWEVtYmVkKTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaWYg
KG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgbV93aWRnZXQgPSBndGtfc29ja2V0X25ldygpOwor
ICAgICAgICBndGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5p
bmdXaW5kb3coKSwgbV93aWRnZXQpOworICAgICAgICBzZXRHdGtXaWRnZXQobV93aWRnZXQpOwor
ICAgIH0gZWxzZSBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICBtX3dpZGdldCA9IGd0a194dGJp
bl9uZXcoR1RLX1dJREdFVChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3co
KSktPndpbmRvdywgTlVMTCk7CisjZWxzZQorICAgIG1fd2lkZ2V0ID0gZ2RrX3NvY2tldF9uZXco
KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5p
bmdXaW5kb3coKSwgbV93aWRnZXQpOworICAgIHNldEd0a1dpZGdldChtX3dpZGdldCk7CisjZW5k
aWYKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgZ3RrX3dpZGdldF9zaG93IChtX3dpZGdl
dCk7CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5H
X1gxMSkKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IGdfbmV3MChOUFNldFdp
bmRvd0NhbGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0gMDsKKworICAgIGlmICht
X25lZWRzWEVtYmVkKSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExB
WShtX3dpZGdldC0+d2luZG93KTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJ
U1VBTChnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbChHREtfRFJBV0FCTEUobV93aWRnZXQtPndpbmRv
dykpKTsKKyAgICAgICAgd3MtPmRlcHRoID0gZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RS
QVdBQkxFKG1fd2lkZ2V0LT53aW5kb3cpKS0+ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9
IEdES19DT0xPUk1BUF9YQ09MT1JNQVAoZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChHREtfRFJB
V0FCTEUobV93aWRnZXQtPndpbmRvdykpKTsKKyAgICAgICAgbV93aW5kb3cgPSBHREtfV0lORE9X
X1hXSU5ET1cobV93aWRnZXQtPndpbmRvdyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd3MtPmRp
c3BsYXkgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGRpc3BsYXk7CisgICAgICAgIHdzLT52aXN1
YWwgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dGNsaWVudC54dHZpc3VhbDsKKyAgICAgICAgd3Mt
PmRlcHRoID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRkZXB0aDsKKyAgICAgICAg
d3MtPmNvbG9ybWFwID0gR1RLX1hUQklOKG1fd2lkZ2V0KS0+eHRjbGllbnQueHRjb2xvcm1hcDsK
KyAgICAgICAgbV93aW5kb3cgPSBHVEtfWFRCSU4obV93aWRnZXQpLT54dHdpbmRvdzsKKworICAg
ICAgICBYRmx1c2ggKHdzLT5kaXNwbGF5KTsKKyAgICB9CisKKyAgICBtX25wV2luZG93LndzX2lu
Zm8gPSB3czsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyAgICBtX3dpbmRv
dyA9IEdES19XSU5ET1dfSFdORChtX3dpZGdldC0+d2luZG93KTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5k
b3dUeXBlV2luZG93OworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKiltX3dpbmRv
dzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVE
cmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlm
ICghKG1fcXVpcmtzLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwp
KSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKwordm9pZCBQbHVnaW5W
aWV3R3RrOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCit7CisgICAgQVNTRVJUKCFtX21hbnVhbFN0cmVhbSk7CisKKyAgICBtX21hbnVhbFN0cmVh
bSA9IG5ldyBQbHVnaW5TdHJlYW0odGhpcywgbV9wYXJlbnRGcmFtZSwgbV9wYXJlbnRGcmFtZS0+
bG9hZGVyKCktPmFjdGl2ZURvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSwgZmFsc2UsIDAsIHBs
dWdpbigpLT5wbHVnaW5GdW5jcygpLCBpbnN0YW5jZSgpLCBtX3F1aXJrcyk7CisgICAgbV9tYW51
YWxTdHJlYW0tPnNldExvYWRNYW51YWxseSh0cnVlKTsKKworICAgIG1fbWFudWFsU3RyZWFtLT5k
aWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOworfQorCit2b2lkIFBsdWdpblZpZXdHdGs6
OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgQVNT
RVJUKG1fbWFudWFsU3RyZWFtKTsKKyAgICAKKyAgICBtX21hbnVhbFN0cmVhbS0+ZGlkUmVjZWl2
ZURhdGEoMCwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3R3RrOjpkaWRGaW5p
c2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9tYW51YWxTdHJlYW0pOworCisgICAgbV9tYW51
YWxTdHJlYW0tPmRpZEZpbmlzaExvYWRpbmcoMCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlld0d0azo6
ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlQobV9tYW51
YWxTdHJlYW0pOworCisgICAgbV9tYW51YWxTdHJlYW0tPmRpZEZhaWwoMCwgZXJyb3IpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
UGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0
ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcu
aCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luUGFja2FnZUd0azo6flBsdWdpblBhY2th
Z2VHdGsoKQoreworICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7Cit9CisKK1BsdWdpblBhY2thZ2VH
dGs6OlBsdWdpblBhY2thZ2VHdGsoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxh
c3RNb2RpZmllZCkKKyAgICA6IG1faXNMb2FkZWQoZmFsc2UpCisgICAgLCBtX2xvYWRDb3VudCgw
KQorICAgICwgbV9wYXRoKHBhdGgpCisgICAgLCBtX21vZHVsZSgwKQorICAgICwgbV9sYXN0TW9k
aWZpZWQobGFzdE1vZGlmaWVkKQoreworICAgIGludCBwb3MgPSBtX3BhdGguZGVwcmVjYXRlZFN0
cmluZygpLmZpbmRSZXYoJy8nKTsKKworICAgIG1fZmlsZU5hbWUgPSBtX3BhdGgucmlnaHQobV9w
YXRoLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjpm
ZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBtX05QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAg
IGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykgeworICAg
ICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7
CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0
YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFb
MV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07IGorKykKKyAgICAgICAgICAgIGV4dFZl
Y3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRlbnNpb25zW2pdKSk7CisKKyAgICAgICAg
bV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAgICAg
bV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7CisKKyAg
ICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAgICAgICAgZ19zdHJmcmVldihtaW1lRGF0
YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURlc2NzKTsKKworICAgIGNoYXIqIGJ1ZmZl
ciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBtX05QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFt
ZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAg
ICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBtX05QUF9H
ZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIpOworICAgIGlm
IChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7
CisKKyAgICB1bmxvYWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNr
YWdlR3RrOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRD
b3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGdf
bW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NBTCk7
CisgICAgaWYgKCFtX21vZHVsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9pc0xv
YWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOwor
ICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9J
bml0aWFsaXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9s
KG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIiwgKHZvaWQqKikmbV9OUF9HZXRNSU1F
RGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1NodXRkb3du
IiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVs
ZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmbV9OUFBfR2V0VmFsdWUpOworCisgICAgaWYgKCFO
UF9Jbml0aWFsaXplIHx8ICFtX05QX0dldE1JTUVEZXNjcmlwdGlvbiB8fCAhbV9OUFBfU2h1dGRv
d24gfHwgIW1fTlBQX0dldFZhbHVlKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0
KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2lu
RnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIG1fYnJvd3NlckZ1bmNz
LnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJz
aW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5f
R2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndy
aXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5f
RGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2Vy
RnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJl
ZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZs
dXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2lu
czsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5Owor
ICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlk
YXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlk
YXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9y
Y2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVu
diA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBO
X0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUg
PSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1
cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9icm93
c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJ
ZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlm
aWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZp
ZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNz
LnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJv
d3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3Nl
ckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVs
dCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9O
UE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFBy
b3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0
eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVy
dHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJv
d3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3Nl
ckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisgICAgbnBFcnIgPSBOUF9Jbml0
aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworICAgIGlmIChucEVyciAh
PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50
Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93
bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5QYWNrYWdlR3RrOjp1bmxv
YWQoKQoreworICAgIGlmICghbV9pc0xvYWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KC0tbV9sb2FkQ291bnQgPiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX05QUF9TaHV0ZG93
bigpOworCisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7Cit9CisKK3ZvaWQgUGx1Z2luUGFj
a2FnZUd0azo6dW5sb2FkV2l0aG91dFNodXRkb3duKCkKK3sKKyAgICBpZiAoIW1faXNMb2FkZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2xvYWRDb3VudCA9PSAwKTsKKyAgICBB
U1NFUlQobV9tb2R1bGUpOworCisgICAgZ19tb2R1bGVfY2xvc2UgKG1fbW9kdWxlKTsKKworICAg
IG1faXNMb2FkZWQgPSBmYWxzZTsKK30KKworUGx1Z2luUGFja2FnZUd0ayogUGx1Z2luUGFja2Fn
ZUd0azo6Y3JlYXRlUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFz
dE1vZGlmaWVkKQoreworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBuZXcgUGx1Z2lu
UGFja2FnZUd0ayhwYXRoLCBsYXN0TW9kaWZpZWQpOworCisgICAgaWYgKCFwYWNrYWdlLT5mZXRj
aEluZm8oKSkgeworICAgICAgICBkZWxldGUgcGFja2FnZTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBwYWNrYWdlOworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNr
YWdlR3RrOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0gewor
ICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFzdE1vZGlmaWVkCisg
ICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9j
YXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNo
YXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlR3RrOjplcXVhbChjb25zdCBQbHVnaW5QYWNr
YWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKQoreworICAgIHJldHVybiBhLm1f
ZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9CkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
Z3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJp
bi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQor
ICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiog
QkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xH
UEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIp
OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAq
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisg
KiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgor
ICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICog
U3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxv
cGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAq
IEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAor
ICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFy
ZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUg
dGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3Ro
ZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHBy
b3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBv
dGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBk
byBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVz
ZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9u
ZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNF
TlNFIEJMT0NLICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisjZGVmaW5l
IF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2luY2x1ZGUg
PFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEv
WGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgiCisjaWZk
ZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBOU19FWFBP
UlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1QT1JUXyh0
eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlwZQorI2Vu
ZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1
c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlwZWRlZiBz
dHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtfVFlQRV9Y
VEJJTiAgICAgICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIEdU
S19YVEJJTihvYmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2JqKSwgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwg
R3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAgIChHVEtf
Q0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVmaW5lIEdU
S19JU19YVEJJTihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2JqKSwgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTikp
CisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVDS19DTEFT
U19UWVBFICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENsaWVudDsK
Kworc3RydWN0IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lkZ2V0CXRv
cF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNoaWxkX3dp
ZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3VhbDsKKyAg
aW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xkd2luZG93
OworfTsKKworc3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29ja2V0Owor
ICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4dGRpc3Bs
YXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAgICAgICB4
dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAgICAgICAg
ICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGllbnQJIHh0
Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAKK3N0cnVj
dCBfR3RrWHRCaW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7Cit9Owor
CitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9pZCk7CitH
VEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50
X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3RrX3h0Ymlu
X3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitHVEtYVEJJ
Tl9BUEkodm9pZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
IGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5zbGF0aW9u
cyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1hbmFnZXIg
ICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBwcm9jZWR1
cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1
cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAgKi8KKyAg
ICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07ICAgCisK
K3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNlbGY7ICAg
ICAgICAgICAgICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICovCisgICAg
V2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBXaWRnZXQn
cyBDbGFzc1JlYyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAgICAgICAg
ICAgLyogcGFyZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJtTmFtZSAg
ICAgICAgIHhybV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUgcXVhcmtp
ZmllZCAgICovCisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAgLyogbWFy
a2VkIGZvciBkZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xpc3QgIGRl
c3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJveWVkICov
CisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3RyYWludCBy
ZWNvcmQgICAgICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7ICAgICAg
ICAgICAgICAgLyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisgICAgRGlt
ZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lvbnMgICAg
ICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsgICAgICAg
Lyogd2luZG93IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVhbiAgICAg
ICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFnZWQ/ICAg
ICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyogaXMgd2lk
Z2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAgIGFuY2Vz
dG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAgICovCisg
ICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0byBldmVu
dCBkaXNwYXRjaGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAgICAgICAg
ICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAgWHRUcmFu
c2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNsYXRpb25z
ICAgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAgICAgLyog
d2luZG93IGJvcmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAg
IGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVMTCAgICAg
ICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlzdCBvZiBw
b3B1cHMgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51bV9wb3B1
cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICovCisgICAg
U3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5h
bWUgICAgICAgICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAgICAgICAg
ICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29sb3JtYXAg
ICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovCisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAgLyogd2lu
ZG93IElEICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIGRl
cHRoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAgICAgICov
CisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93IGJhY2tn
cm91bmQgcGl4ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tncm91bmRf
cGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisgICAgQm9v
bGVhbiAgICAgICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBlZCBhbmQg
bm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21hbmFnZWQ7
LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0OworCit0
eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOworIH0gV2lk
Z2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBf
X2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luVmlld0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsdWdpblZpZXdHdGtfSAorI2RlZmluZSBQbHVnaW5W
aWV3R3RrX0gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGx1Z2luUXVpcmtTZXQuaCIKKyNpbmNsdWRlICJQbHVnaW5TdHJlYW0uaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldpZGdldC5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgPGd0ay9ndGt3aWRn
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIG5hbWVzcGFjZSBCaW5k
aW5ncyB7CisgICAgICAgIGNsYXNzIEluc3RhbmNlOworICAgIH0KK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRnJhbWU7CisgICAgc3RydWN0
IEZyYW1lTG9hZFJlcXVlc3Q7CisgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBN
b3VzZUV2ZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgUGx1Z2luUGFja2FnZUd0azsK
KyAgICBjbGFzcyBQbHVnaW5SZXF1ZXN0R3RrOworICAgIGNsYXNzIFBsdWdpblN0cmVhbTsKKyAg
ICBjbGFzcyBSZXNvdXJjZUVycm9yOworICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CisgICAg
CisgICAgZW51bSBQbHVnaW5TdGF0dXMgeworICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5k
UGx1Z2luLAorICAgICAgICBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luLAorICAgICAgICBQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkKKyAgICB9OworCisgICAgY2xhc3MgUGx1Z2lu
Vmlld0d0ayA6IHB1YmxpYyBXaWRnZXQsIHByaXZhdGUgUGx1Z2luU3RyZWFtQ2xpZW50IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFBsdWdpblZpZXdHdGsoRnJhbWUqIHBhcmVudEZyYW1lLCBjb25z
dCBJbnRTaXplJiwgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luLCBFbGVtZW50KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5
KTsKKyAgICAgICAgdmlydHVhbCB+UGx1Z2luVmlld0d0aygpOworCisgICAgICAgIFBsdWdpblBh
Y2thZ2VHdGsqIHBsdWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luLmdldCgpOyB9CisgICAg
ICAgIE5QUCBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2U7IH0KKworICAgICAg
ICB2b2lkIHNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyBQ
bHVnaW5WaWV3R3RrKiBjdXJyZW50UGx1Z2luVmlldygpOworCisgICAgICAgIEtKUzo6QmluZGlu
Z3M6Okluc3RhbmNlKiBiaW5kaW5nSW5zdGFuY2UoKTsKKworICAgICAgICBQbHVnaW5TdGF0dXMg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKworICAgICAgICAvLyBOUE4gZnVu
Y3Rpb25zCisgICAgICAgIE5QRXJyb3IgZ2V0VVJMTm90aWZ5KGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBnZXRV
UkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQpOworICAgICAgICBOUEVycm9y
IHBvc3RVUkxOb3RpZnkoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQz
MiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEpOwor
ICAgICAgICBOUEVycm9yIHBvc3RVUkwoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJn
ZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1dCwgTlBCb29sIGZpbGUpOworICAgICAgICBO
UEVycm9yIG5ld1N0cmVhbShOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdldCwgTlBT
dHJlYW0qKiBzdHJlYW0pOworICAgICAgICBpbnQzMiB3cml0ZShOUFN0cmVhbSogc3RyZWFtLCBp
bnQzMiBsZW4sIHZvaWQqIGJ1ZmZlcik7CisgICAgICAgIE5QRXJyb3IgZGVzdHJveVN0cmVhbShO
UFN0cmVhbSogc3RyZWFtLCBOUFJlYXNvbiByZWFzb24pOworICAgICAgICBjb25zdCBjaGFyKiB1
c2VyQWdlbnQoKTsKKyAgICAgICAgdm9pZCBzdGF0dXMoY29uc3QgY2hhciogbWVzc2FnZSk7Cisg
ICAgICAgIE5QRXJyb3IgZ2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVl
KTsKKyAgICAgICAgTlBFcnJvciBzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpOworICAgICAgICB2b2lkIGludmFsaWRhdGVSZWN0KE5QUmVjdCopOworICAgICAgICB2
b2lkIGludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pOworICAgICAgICB2b2lkIGZvcmNlUmVkcmF3
KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0U3RyZWFtKFBsdWdpblN0cmVhbSopOworICAg
ICAgICB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcoUGx1Z2luU3RyZWFtKiBzdHJlYW0pIHsg
ZGlzY29ubmVjdFN0cmVhbShzdHJlYW0pOyB9CisKKyAgICAgICAgLy8gV2lkZ2V0IGZ1bmN0aW9u
cworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgSW50UmVj
dCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZl
bnQoRXZlbnQqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7
CisKKyAgICAgICAgLy8gVXNlZCBmb3IgbWFudWFsIGxvYWRpbmcKKyAgICAgICAgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2b2lkIGRpZEZpbmlzaExv
YWRpbmcoKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAg
ICAgIHZvaWQgaW5pdCgpOworICAgICAgICBib29sIHN0YXJ0KCk7CisgICAgICAgIHZvaWQgc3Rv
cCgpOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1Z2luVmlldyhQbHVnaW5WaWV3
R3RrKik7CisgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgYm9v
bCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKKyAgICAgICAgTlBFcnJvciBo
YW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVu
LCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5k
Tm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlR3RrPiBtX3BsdWdpbjsKKyAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OworICAgICAg
ICBGcmFtZSogbV9wYXJlbnRGcmFtZTsKKyAgICAgICAgYm9vbCBtX2lzU3RhcnRlZDsKKyAgICAg
ICAgS1VSTCBtX3VybDsKKyAgICAgICAgS1VSTCBtX2Jhc2VVUkw7CisgICAgICAgIFBsdWdpblN0
YXR1cyBtX3N0YXR1czsKKyAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1faW52YWxpZFJlY3RzOwor
CisgICAgICAgIHZvaWQgcGVyZm9ybVJlcXVlc3QoUGx1Z2luUmVxdWVzdEd0ayopOworICAgICAg
ICB2b2lkIHNjaGVkdWxlUmVxdWVzdChQbHVnaW5SZXF1ZXN0R3RrKik7CisgICAgICAgIHZvaWQg
cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UGx1Z2luVmlld0d0az4qKTsKKyAgICAgICAgVGltZXI8
UGx1Z2luVmlld0d0az4gbV9yZXF1ZXN0VGltZXI7CisKKyAgICAgICAgdm9pZCB1cGRhdGVXaW5k
b3coKSBjb25zdDsKKyAgICAgICAgdm9pZCBkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgICAgIHZvaWQgcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqKTsKKyAgICAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqKTsKKworICAgICAgICBpbnQgbV9tb2RlOworICAgICAgICBpbnQgbV9wYXJhbUNvdW50
OworICAgICAgICBjaGFyKiogbV9wYXJhbU5hbWVzOworICAgICAgICBjaGFyKiogbV9wYXJhbVZh
bHVlczsKKworICAgICAgICBDU3RyaW5nIG1fbWltZVR5cGU7CisgICAgICAgIENTdHJpbmcgbV91
c2VyQWdlbnQ7CisKKyAgICAgICAgTlBQIG1faW5zdGFuY2U7CisgICAgICAgIE5QUF90IG1faW5z
dGFuY2VTdHJ1Y3Q7CisgICAgICAgIE5QV2luZG93IG1fbnBXaW5kb3c7CisKKyAgICAgICAgSGFz
aFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IG1fc3RyZWFtczsKKyAgICAgICAgVmVjdG9yPFBs
dWdpblJlcXVlc3RHdGsqPiBtX3JlcXVlc3RzOworCisgICAgICAgIFBsdWdpblF1aXJrU2V0IG1f
cXVpcmtzOworICAgICAgICBib29sIG1faXNXaW5kb3dlZDsKKyAgICAgICAgYm9vbCBtX2lzVHJh
bnNwYXJlbnQ7CisgICAgICAgIGJvb2wgbV9pc1Zpc2libGU7CisgICAgICAgIGJvb2wgbV9oYXZl
SW5pdGlhbGl6ZWQ7CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgICAgICBYSUQgbV93
aW5kb3c7IC8vIGZvciB3aW5kb3dlZCBwbHVnLWlucworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRP
V0lOR19XSU4zMgorCUhXTkQgbV93aW5kb3c7CisjZW5kaWYKKyAgICAgICAgbXV0YWJsZSBJbnRS
ZWN0IG1fY2xpcFJlY3Q7IC8vIFRoZSBjbGlwIHJlY3QgdG8gYXBwbHkgdG8gYSB3aW5kb3dlZCBw
bHVnLWluCisgICAgICAgIG11dGFibGUgSW50UmVjdCBtX3dpbmRvd1JlY3Q7IC8vIE91ciB3aW5k
b3cgcmVjdC4KKworICAgICAgICB1bnNpZ25lZCBtX2xhc3RNZXNzYWdlOworCisgICAgICAgIGJv
b2wgbV9sb2FkTWFudWFsbHk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5TdHJlYW0+IG1fbWFudWFs
U3RyZWFtOworCisgICAgICAgIHN0YXRpYyBQbHVnaW5WaWV3R3RrKiBzX2N1cnJlbnRQbHVnaW5W
aWV3OworCisgICAgICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgICAgIGJvb2wgbV9uZWVk
c1hFbWJlZDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGx1Z2luUGFja2FnZUd0
a19ICisjZGVmaW5lIFBsdWdpblBhY2thZ2VHdGtfSAorCisjaW5jbHVkZSA8Z21vZHVsZS5oPgor
I2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJucGZ1
bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKKyN1bmRlZiBOUF9Jbml0aWFs
aXplRnVuY1B0cgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBNSU1FVG9EZXNjcmlwdGlvbnNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBNSU1FVG9FeHRlbnNpb25zTWFwOworCisgICAgY2xh
c3MgUGx1Z2luUGFja2FnZUd0ayA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpblBhY2thZ2VHdGs+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5QbHVnaW5QYWNrYWdlR3RrKCk7CisgICAgICAgIHN0
YXRpYyBQbHVnaW5QYWNrYWdlR3RrKiBjcmVhdGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kZXNjcmlwdGlvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZU5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisKKyAgICAgICAgY29uc3QgTUlNRVRv
RGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX21p
bWVUb0Rlc2NyaXB0aW9uczsgfQorICAgICAgICBjb25zdCBNSU1FVG9FeHRlbnNpb25zTWFwJiBt
aW1lVG9FeHRlbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9taW1lVG9FeHRlbnNpb25zOyB9CisK
KyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlR3RrJiBiKTsK
KworICAgICAgICBib29sIGxvYWQoKTsKKyAgICAgICAgdm9pZCB1bmxvYWQoKTsKKyAgICAgICAg
dm9pZCB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKworICAgICAgICBjb25zdCBOUFBsdWdpbkZ1
bmNzKiBwbHVnaW5GdW5jcygpIGNvbnN0IHsgcmV0dXJuICZtX3BsdWdpbkZ1bmNzOyB9CisgICAg
cHJpdmF0ZToKKyAgICAgICAgUGx1Z2luUGFja2FnZUd0ayhjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgYm9vbCBmZXRjaEluZm8oKTsKKwor
ICAgICAgICBib29sIG1faXNMb2FkZWQ7CisgICAgICAgIGludCBtX2xvYWRDb3VudDsKKworICAg
ICAgICBTdHJpbmcgbV9kZXNjcmlwdGlvbjsKKyAgICAgICAgU3RyaW5nIG1fcGF0aDsKKyAgICAg
ICAgU3RyaW5nIG1fZmlsZU5hbWU7CisgICAgICAgIFN0cmluZyBtX25hbWU7CisKKyAgICAgICAg
TUlNRVRvRGVzY3JpcHRpb25zTWFwIG1fbWltZVRvRGVzY3JpcHRpb25zOworICAgICAgICBNSU1F
VG9FeHRlbnNpb25zTWFwIG1fbWltZVRvRXh0ZW5zaW9uczsKKworICAgICAgICBHTW9kdWxlKiBt
X21vZHVsZTsKKyAgICAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkOworCisgICAgICAgIE5QX0dl
dE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgbV9OUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAgICAg
IE5QUF9TaHV0ZG93blByb2NQdHIgbV9OUFBfU2h1dGRvd247CisgICAgICAgIE5QUF9HZXRWYWx1
ZVByb2NQdHIgbV9OUFBfR2V0VmFsdWU7CisgICAgICAgIE5QUGx1Z2luRnVuY3MgbV9wbHVnaW5G
dW5jczsKKyAgICAgICAgTlBOZXRzY2FwZUZ1bmNzIG1fYnJvd3NlckZ1bmNzOworICAgIH07CisK
KyAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUd0a0hhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBh
Y2thZ2VHdGsqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgp
OyB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBi
KSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihhKSwg
cmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNrYWdlR3RrPiYgYSwgY29uc3QgUmVm
UHRyPFBsdWdpblBhY2thZ2VHdGs+JiBiKSB7IHJldHVybiBQbHVnaW5QYWNrYWdlR3RrOjplcXVh
bCgqYS5nZXQoKSwgKmIuZ2V0KCkpOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGlu
IFdURiwgd2hlcmUgaXQncyBpbXBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSBIYXNoIGZ1bmN0aW9u
IGJ1dCB3aXRoIGRlZmF1bHQgdHJhaXRzLgorLy8gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRv
IHRoaXMgd2l0aG91dCBhIFN0b3JhZ2VUcmFpdHMgc3BlY2lhbGl6YXRpb24uCituYW1lc3BhY2Ug
V1RGIHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoS2V5U3RvcmFnZVRyYWl0czxXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlR3RrSGFzaCwgSGFzaFRyYWl0czxSZWZQdHI8V2ViQ29yZTo6UGx1Z2lu
UGFja2FnZUd0az4gPiA+IHsKKyAgICAgICAgdHlwZWRlZiBJbnRUeXBlczxzaXplb2YoUmVmUHRy
PFdlYkNvcmU6OlBsdWdpblBhY2thZ2VHdGs+KT46OlNpZ25lZFR5cGUgSW50VHlwZTsKKyAgICAg
ICAgdHlwZWRlZiBXZWJDb3JlOjpQbHVnaW5QYWNrYWdlR3RrSGFzaCBIYXNoOworICAgICAgICB0
eXBlZGVmIEhhc2hUcmFpdHM8SW50VHlwZT4gVHJhaXRzOworICAgIH07Cit9CisKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvZ3RrL25wYXBpLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvbnBhcGkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3Rv
cmUuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3R3RrLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2lu
dGVybmFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBUaGUgcGx1Z2luIHZp
ZXcgaXMgYWx3YXlzIHRoZSBuZGF0YSBvZiB0aGUgaW5zdGFuY2UsLiBTb21ldGltZXMsIHBsdWct
aW5zIHdpbGwgY2FsbCBhbiBpbnN0YW5jZS1zcGVjaWZpYyBmdW5jdGlvbgorLy8gd2l0aCBhIE5V
TEwgaW5zdGFuY2UuIFRvIHdvcmthcm91bmQgdGhpcywgY2FsbCB0aGUgbGFzdCBwbHVnLWluIHZp
ZXcgdGhhdCBtYWRlIGEgY2FsbCB0byBhIHBsdWctaW4uCisvLyBDdXJyZW50bHksIHRoZSBjdXJy
ZW50IHBsdWctaW4gdmlldyBpcyBvbmx5IHNldCBiZWZvcmUgTlBQX05ldyBpbiBQbHVnaW5WaWV3
R3RrOjpzdGFydC4KKy8vIFRoaXMgc3BlY2lmaWNhbGx5IHdvcmtzIGFyb3VuZCBGbGFzaCBhbmQg
U2hvY2t3YXZlLiBXaGVuIHdlIGNhbGwgTlBQX05ldywgdGhleSBjYWxsIE5QTl9Vc2VyYWdlbnQg
d2l0aCBhIE5VTEwgaW5zdGFuY2UuCitzdGF0aWMgUGx1Z2luVmlld0d0ayogcGx1Z2luVmlld0Zv
ckluc3RhbmNlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2Ut
Pm5kYXRhKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlld0d0ayo+KGluc3Rh
bmNlLT5uZGF0YSk7CisgICAgcmV0dXJuIFBsdWdpblZpZXdHdGs6OmN1cnJlbnRQbHVnaW5WaWV3
KCk7Cit9CisKK3ZvaWQqIE5QTl9NZW1BbGxvYyh1aW50MzIgc2l6ZSkKK3sKKyAgICByZXR1cm4g
bWFsbG9jKHNpemUpOworfQorCit2b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKK3sKKyAgICBm
cmVlKHB0cik7Cit9CisKK3VpbnQzMiBOUE5fTWVtRmx1c2godWludDMyIHNpemUpCit7CisgICAg
Ly8gRG8gbm90aGluZworICAgIHJldHVybiAwOworfQorCit2b2lkIE5QTl9SZWxvYWRQbHVnaW5z
KE5QQm9vbCByZWxvYWRQYWdlcykKK3sKKyAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWRQYWdlcyk7
Cit9CisKK05QRXJyb3IgTlBOX1JlcXVlc3RSZWFkKE5QU3RyZWFtKiBzdHJlYW0sIE5QQnl0ZVJh
bmdlKiByYW5nZUxpc3QpCit7CisgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cit9CisK
K05QRXJyb3IgTlBOX0dldFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB2b2lkKiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVn
aW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRVUkxOb3RpZnkodXJsLCB0YXJnZXQsIG5v
dGlmeURhdGEpOworfQorCitOUEVycm9yIE5QTl9HZXRVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBj
aGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VVJMKHVybCwgdGFyZ2V0KTsKK30KKworTlBFcnJvciBO
UE5fUG9zdFVSTE5vdGlmeShOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hh
ciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIE5QQm9vbCBmaWxlLCB2b2lk
KiBub3RpZnlEYXRhKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5wb3N0VVJMTm90aWZ5KHVybCwgdGFyZ2V0LCBsZW4sIGJ1ZiwgZmlsZSwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgTlBOX1Bvc3RVUkwoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiB1
cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJv
b2wgZmlsZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
cG9zdFVSTCh1cmwsIHRhcmdldCwgbGVuLCBidWYsIGZpbGUpOworfQorCitOUEVycm9yIE5QTl9O
ZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JTUVUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHRhcmdl
dCwgTlBTdHJlYW0qKiBzdHJlYW0pCit7CisgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0YW5j
ZShpbnN0YW5jZSktPm5ld1N0cmVhbSh0eXBlLCB0YXJnZXQsIHN0cmVhbSk7Cit9CisKK2ludDMy
IE5QTl9Xcml0ZShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIGludDMyIGxlbiwgdm9p
ZCogYnVmZmVyKQoreworICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2Up
LT53cml0ZShzdHJlYW0sIGxlbiwgYnVmZmVyKTsKK30KKworTlBFcnJvciBOUE5fRGVzdHJveVN0
cmVhbShOUFAgaW5zdGFuY2UsIE5QU3RyZWFtKiBzdHJlYW0sIE5QUmVhc29uIHJlYXNvbikKK3sK
KyAgICByZXR1cm4gcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+ZGVzdHJveVN0cmVh
bShzdHJlYW0sIHJlYXNvbik7Cit9CisKK2NvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGlu
c3RhbmNlKQoreworICAgIFBsdWdpblZpZXdHdGsqIHZpZXcgPSBwbHVnaW5WaWV3Rm9ySW5zdGFu
Y2UoaW5zdGFuY2UpOworCisgICAgIC8vIEZJWE1FOiBTb21lIHBsdWctaW5zIGNhbGwgTlBOX1Vz
ZXJBZ2VudCB3aXRoIGEgbnVsbCBpbnN0YW5jZSBpbiB0aGVpciBOUF9pbml0aWFsaXplIGZ1bmN0
aW9uIQorICAgICAvLyBXZSdkIG5lZWQgYSB3YXkgdG8gZ2V0IGEgdXNlciBhZ2VudCB3aXRob3V0
IGhhdmluZyBhIGZyYW1lIGFyb3VuZC4KKyAgICAgaWYgKCF2aWV3KQorICAgICAgICAgcmV0dXJu
IDA7CisgCisgICAgcmV0dXJuIHZpZXctPnVzZXJBZ2VudCgpOworfQorCit2b2lkIE5QTl9TdGF0
dXMoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIHBsdWdpblZpZXdG
b3JJbnN0YW5jZShpbnN0YW5jZSktPnN0YXR1cyhtZXNzYWdlKTsKK30KKwordm9pZCBOUE5fSW52
YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJlY3QqIGludmFsaWRSZWN0KQoreworICAgIHBs
dWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSktPmludmFsaWRhdGVSZWN0KGludmFsaWRSZWN0
KTsKK30KKwordm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVnaW9u
IGludmFsaWRSZWdpb24pCit7CisgICAgcGx1Z2luVmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+
aW52YWxpZGF0ZVJlZ2lvbihpbnZhbGlkUmVnaW9uKTsKK30KKwordm9pZCBOUE5fRm9yY2VSZWRy
YXcoTlBQIGluc3RhbmNlKQoreworICAgIHBsdWdpblZpZXdGb3JJbnN0YW5jZShpbnN0YW5jZSkt
PmZvcmNlUmVkcmF3KCk7Cit9CisKK05QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0YW5jZSwg
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHJldHVybiBwbHVnaW5W
aWV3Rm9ySW5zdGFuY2UoaW5zdGFuY2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQor
CitOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSkKK3sKKyAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5zZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworfQorCit2b2lkKiBOUE5fR2V0SmF2YUVu
digpCit7CisgICAgLy8gVW5zdXBwb3J0ZWQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCogTlBO
X0dldEphdmFQZWVyKE5QUCBpbnN0YW5jZSkKK3sKKyAgICAvLyBVbnN1cHBvcnRlZAorICAgIHJl
dHVybiAwOworfQorCit2b2lkCitOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFu
Y2UsIE5QQm9vbCBlbmFibGVkKQoreworfQorCit2b2lkCitOUE5fUG9wUG9wdXBzRW5hYmxlZFN0
YXRlKE5QUCBpbnN0YW5jZSkKK3sKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9k
ZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0
aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioK
KyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2Ug
VmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRh
aW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01Q
TC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVN
QkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRy
aWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAq
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0
ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
R1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3Zl
LiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBv
bmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFu
ZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24g
YnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3Ig
dGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0
aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoK
KyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdl
cyAqLworI2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUg
WEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1df
REVBQ1RJVkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAg
ICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVmaW5l
IFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNf
TkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAg
ICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2RlZmlu
ZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFM
SVRZX09OICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAg
ICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9H
VEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9L
RVkgICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLwor
I2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVE
X0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAg
ICAgICAgICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhF
TUJFRF9NQVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9w
bHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
Mjk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EYXRhYmFzZUd0ay5oIgorCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVn
aW5EYXRhYmFzZUd0ayogUGx1Z2luRGF0YWJhc2VHdGs6Omluc3RhbGxlZFBsdWdpbnMoKQorewor
ICAgIHN0YXRpYyBQbHVnaW5EYXRhYmFzZUd0ayogcGx1Z2lucyA9IDA7CisgICAgCisgICAgaWYg
KCFwbHVnaW5zKSB7CisgICAgICAgIHBsdWdpbnMgPSBuZXcgUGx1Z2luRGF0YWJhc2VHdGs7Cisg
ICAgICAgIHBsdWdpbnMtPnNldFBsdWdpblBhdGhzKFBsdWdpbkRhdGFiYXNlR3RrOjpkZWZhdWx0
UGx1Z2luUGF0aHMoKSk7CisgICAgICAgIHBsdWdpbnMtPnJlZnJlc2goKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcGx1Z2luczsKK30KKwordm9pZCBQbHVnaW5EYXRhYmFzZUd0azo6YWRkRXh0cmFQ
bHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3BsdWdpblBhdGhzLmFwcGVu
ZChwYXRoKTsKKyAgICByZWZyZXNoKCk7Cit9CisKK2Jvb2wgUGx1Z2luRGF0YWJhc2VHdGs6OnJl
ZnJlc2goKQoreyAgIAorICAgIFBsdWdpblNldCBuZXdQbHVnaW5zOworCisgICAgYm9vbCBwbHVn
aW5TZXRDaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgc2V0IG9mIHBsdWdp
bnMKKyAgICBuZXdQbHVnaW5zID0gZ2V0UGx1Z2luc0luUGF0aHMoKTsKKworICAgIGlmICghbV9w
bHVnaW5zLmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZ2lzdGVyZWRNSU1FVHlwZXMuY2xlYXIo
KTsKKworICAgICAgICBQbHVnaW5TZXQgcGx1Z2luc1RvVW5sb2FkID0gbV9wbHVnaW5zOworCisg
ICAgICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbmV3UGx1Z2lucy5lbmQoKTsK
KyAgICAgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbmV3UGx1Z2lucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBwbHVnaW5zVG9VbmxvYWQucmVt
b3ZlKCppdCk7CisKKyAgICAgICAgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgICAgICBmb3Ig
KFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQorICAgICAgICAgICAgbmV3UGx1Z2lucy5yZW1vdmUoKml0KTsKKworICAgICAg
ICAvLyBVbmxvYWQgcGx1Z2lucworICAgICAgICBlbmQgPSBwbHVnaW5zVG9VbmxvYWQuZW5kKCk7
CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsdWdpbnNUb1Vu
bG9hZC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBtX3BsdWdpbnMucmVt
b3ZlKCppdCk7CisKKyAgICAgICAgLy8gQWRkIG5ldyBwbHVnaW5zCisgICAgICAgIGVuZCA9IG5l
d1BsdWdpbnMuZW5kKCk7CisgICAgICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG5ld1BsdWdpbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgbV9w
bHVnaW5zLmFkZCgqaXQpOworCisgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSAhcGx1Z2luc1Rv
VW5sb2FkLmlzRW1wdHkoKSB8fCAhbmV3UGx1Z2lucy5pc0VtcHR5KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9wbHVnaW5zID0gbmV3UGx1Z2luczsKKyAgICAgICAgUGx1Z2luU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBuZXdQbHVnaW5zLmVuZCgpOworICAgICAgICBmb3IgKFBsdWdpblNl
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBuZXdQbHVnaW5zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hZGQoKml0KTsKKworICAgICAgICBwbHVnaW5TZXRD
aGFuZ2VkID0gIW5ld1BsdWdpbnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIC8vIFJlZ2lzdGVy
IHBsdWctaW4gTUlNRSB0eXBlcworICAgIFBsdWdpblNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gR2V0IE1J
TUUgdHlwZXMKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBt
YXBfZW5kID0gKCppdCktPm1pbWVUb0Rlc2NyaXB0aW9ucygpLmVuZCgpOworICAgICAgICBmb3Ig
KE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgbWFwX2l0ID0gKCppdCktPm1p
bWVUb0Rlc2NyaXB0aW9ucygpLmJlZ2luKCk7IG1hcF9pdCAhPSBtYXBfZW5kOyArK21hcF9pdCkg
eworICAgICAgICAgICAgbV9yZWdpc3RlcmVkTUlNRVR5cGVzLmFkZChtYXBfaXQtPmZpcnN0KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwbHVnaW5TZXRDaGFuZ2VkOworfQorCitW
ZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5zKCkgY29u
c3QKK3sKKyAgICBWZWN0b3I8UGx1Z2luUGFja2FnZUd0ayo+IHJlc3VsdDsKKworICAgIFBsdWdp
blNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wbHVnaW5zLmVuZCgpOworICAgIGZvciAoUGx1
Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcGx1Z2lucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoKCppdCkuZ2V0KCkpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworUGx1Z2luU2V0IFBsdWdpbkRhdGFiYXNlR3RrOjpnZXRQbHVnaW5zSW5Q
YXRocygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgY2FzZSBpbnNl
bnNpdGl2ZSBzZXQuCisgICAgSGFzaFNldDxTdHJpbmc+IHVuaXF1ZUZpbGVuYW1lczsKKyAgICBQ
bHVnaW5TZXQgcGx1Z2luczsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3BsdWdpblBhdGhzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5QYXRocy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbigoaXQtPnV0ZjgoKSkuZGF0YSgpLCAwLCBO
VUxMKTsKKyAgICAgICAgaWYgKGRpcikgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsK
KyAgICAgICAgICAgIHdoaWxlICgobmFtZSA9IGdfZGlyX3JlYWRfbmFtZShkaXIpKSkgeworICAg
ICAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfc3VmZml4KG5hbWUsICIuIiBHX01PRFVMRV9TVUZG
SVgpKSB7CisgICAgICAgICAgICAgICAgICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfYnVpbGRfZmls
ZW5hbWUoKGl0LT51dGY4KCkpLmRhdGEoKSwgbmFtZSwgTlVMTCk7CisgICAgICAgICAgICAgICAg
ICAgIFBsdWdpblBhY2thZ2VHdGsqIHBsdWdpblBhY2thZ2UgPSBQbHVnaW5QYWNrYWdlR3RrOjpj
cmVhdGVQYWNrYWdlKGZpbGVuYW1lLCB0aW1lKE5VTEwpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBsdWdpblBhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5zLmFkZChw
bHVnaW5QYWNrYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnX2Rpcl9jbG9zZShk
aXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBsdWdpbnM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgVmVjdG9yPGludD4gcGFyc2VWZXJzaW9uU3RyaW5nKGNvbnN0IFN0cmluZyYgdmVy
c2lvblN0cmluZykKK3sKKyAgICBWZWN0b3I8aW50PiB2ZXJzaW9uOworCisgICAgdW5zaWduZWQg
c3RhcnRQb3MgPSAwOworICAgIHVuc2lnbmVkIGVuZFBvczsKKyAgICAKKyAgICB3aGlsZSAoc3Rh
cnRQb3MgPCB2ZXJzaW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIGZvciAoZW5kUG9zID0g
c3RhcnRQb3M7IGVuZFBvcyA8IHZlcnNpb25TdHJpbmcubGVuZ3RoKCk7ICsrZW5kUG9zKQorICAg
ICAgICAgICAgaWYgKHZlcnNpb25TdHJpbmdbZW5kUG9zXSA9PSAnLicgfHwgdmVyc2lvblN0cmlu
Z1tlbmRQb3NdID09ICdfJykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpbnQg
dmVyc2lvbkNvbXBvbmVudCA9IHZlcnNpb25TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQ
b3MgLSBzdGFydFBvcykudG9JbnQoKTsKKyAgICAgICAgdmVyc2lvbi5hcHBlbmQodmVyc2lvbkNv
bXBvbmVudCk7CisKKyAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOworICAgIH0KKworICAg
IHJldHVybiB2ZXJzaW9uOworfQorCisvLyBUaGlzIHJldHVybnMgd2hldGhlciB2ZXJzaW9uQSBp
cyBoaWdoZXIgdGhhbiB2ZXJzaW9uQgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVWZXJzaW9u
cyhjb25zdCBWZWN0b3I8aW50PiYgdmVyc2lvbkEsIGNvbnN0IFZlY3RvcjxpbnQ+JiB2ZXJzaW9u
QikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVyc2lvbkEuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgaWYgKGkgPj0gdmVyc2lvbkIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgaWYgKHZlcnNpb25BW2ldID4gdmVyc2lvbkJbaV0pCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAodmVyc2lvbkFbaV0gPCB2ZXJzaW9u
QltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBj
b21lIGhlcmUsIHRoZSB2ZXJzaW9ucyBhcmUgZWl0aGVyIHRoZSBzYW1lIG9yIHZlcnNpb25CIGhh
cyBhbiBleHRyYSBjb21wb25lbnQsIGp1c3QgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZUd0azo6ZGVmYXVsdFBsdWdpblBh
dGhzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKworICAgIGdjaGFyKiBwYXRoOwor
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBwYXRoID0gZ19idWlsZF9maWxl
bmFtZShnX2dldF9ob21lX2RpcigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAg
IHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBnX2ZyZWUocGF0aCk7CisjZWxpZiBkZWZpbmVkKEdE
S19XSU5ET1dJTkdfV0lOMzIpCisgICAgcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9t
ZV9kaXIoKSwgIkFwcGxpY2F0aW9uIERhdGEiLCAiTW96aWxsYSIsICJwbHVnaW5zIiwgTlVMTCk7
CisgICAgcGF0aHMuYXBwZW5kKHBhdGgpOworICAgIGdfZnJlZShwYXRoKTsKKyNlbmRpZgorCisg
ICAgY29uc3QgZ2NoYXIqIG1velBhdGggPSBnX2dldGVudigiTU9aX1BMVUdJTl9QQVRIIik7Cisg
ICAgaWYgKG1velBhdGgpIHsKKyAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRocyA9IGdfc3Ryc3Bs
aXQobW96UGF0aCwgIjoiLCAtMSk7CisKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVnaW5Q
YXRoc1tpXTsgaSsrKQorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKHBsdWdpblBhdGhzW2ldKTsK
KworICAgICAgICBnX3N0cmZyZWV2KHBsdWdpblBhdGhzKTsKKyAgICB9CisKKyNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKQorICAgIHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NF
UEFSQVRPUl9TICJ1c3IiLCAibG9jYWwiLCAibGliIiwgIm1vemlsbGEiLCAicGx1Z2lucyIsIE5V
TEwpOworICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBnX2ZyZWUgKHBhdGgpOworICAgIHBh
dGggPSBnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9TICJ1c3IiLCAibGliIiwgIm1v
emlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBn
X2ZyZWUgKHBhdGgpOworICAgIHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRP
Ul9TICJ1c3IiLCAibGliIiwgImJyb3dzZXIiLCAicGx1Z2lucyIsIE5VTEwpOworICAgIHBhdGhz
LmFwcGVuZChwYXRoKTsKKyAgICBnX2ZyZWUocGF0aCk7CisjZW5kaWYKKworICAgIHJldHVybiBw
YXRoczsKK30KKworYm9vbCBQbHVnaW5EYXRhYmFzZUd0azo6aXNNSU1FVHlwZVJlZ2lzdGVyZWQo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1pbWVUeXBlLmlz
TnVsbCgpICYmIG1fcmVnaXN0ZXJlZE1JTUVUeXBlcy5jb250YWlucyhtaW1lVHlwZSk7Cit9CisK
K1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpwbHVnaW5Gb3JNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFN0cmluZyBrZXkgPSBtaW1lVHlwZS5sb3dl
cigpOworCisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5k
KCk7CisgICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCktPm1pbWVUb0Rlc2Ny
aXB0aW9ucygpLmNvbnRhaW5zKGtleSkpCisgICAgICAgICAgICByZXR1cm4gKCppdCkuZ2V0KCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRh
dGFiYXNlR3RrOjpwbHVnaW5Gb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7
CisgICAgUGx1Z2luU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BsdWdpbnMuZW5kKCk7Cisg
ICAgZm9yIChQbHVnaW5TZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBtaW1lX2VuZCA9ICgqaXQpLT5taW1lVG9FeHRlbnNpb25zKCkuZW5kKCk7CisKKyAg
ICAgICAgZm9yIChNSU1FVG9FeHRlbnNpb25zTWFwOjpjb25zdF9pdGVyYXRvciBtaW1lX2l0ID0g
KCppdCktPm1pbWVUb0V4dGVuc2lvbnMoKS5iZWdpbigpOyBtaW1lX2l0ICE9IG1pbWVfZW5kOyAr
K21pbWVfaXQpIHsKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBleHRlbnNpb25z
ID0gbWltZV9pdC0+c2Vjb25kOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChleHRlbnNp
b25zW2ldID09IGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqaXQpLmdl
dCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKK1BsdWdpblBhY2thZ2VHdGsqIFBsdWdpbkRhdGFiYXNlR3RrOjpmaW5kUGx1Z2luKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sgICAKKyAgICBQbHVnaW5QYWNr
YWdlR3RrKiBwbHVnaW4gPSAwOworCisgICAgaWYgKCFtaW1lVHlwZS5pc051bGwoKSkKKyAgICAg
ICAgcGx1Z2luID0gcGx1Z2luRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgIAorICAgIGlmICgh
cGx1Z2luKSB7CisgICAgICAgIFN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKKyAgICAgICAgU3Ry
aW5nIGV4dGVuc2lvbiA9IHBhdGguc3Vic3RyaW5nKHBhdGgucmV2ZXJzZUZpbmQoJy4nKSArIDEp
OworCisgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZvckV4dGVuc2lvbihleHRlbnNpb24pOworCisg
ICAgICAgIC8vIEZJWE1FOiBpZiBubyBwbHVnaW4gY291bGQgYmUgZm91bmQsIHF1ZXJ5IHhkZ21p
bWUgZm9yIHRoZSBtaW1lIHR5cGUgCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4
dGVuc2lvbi4KKyAgICB9CisKKyAgICByZXR1cm4gcGx1Z2luOworfQorCitQbHVnaW5WaWV3R3Rr
KiBQbHVnaW5EYXRhYmFzZUd0azo6Y3JlYXRlUGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUs
IGNvbnN0IEludFNpemUmIHNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCit7
CisgICAgUGx1Z2luUGFja2FnZUd0ayogcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBl
KTsKKyAgICAKKyAgICAvLyBObyBwbHVnaW4gd2FzIGZvdW5kLCB0cnkgcmVmcmVzaGluZyB0aGUg
ZGF0YWJhc2UgYW5kIHNlYXJjaGluZyBhZ2FpbgorICAgIGlmICghcGx1Z2luICYmIHJlZnJlc2go
KSkKKyAgICAgICAgcGx1Z2luID0gZmluZFBsdWdpbih1cmwsIG1pbWVUeXBlKTsKKyAgICAgICAg
CisgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3R3RrKHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4s
IGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFu
dWFsbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDk0MSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1t
b2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdp
ZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioq
KgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
TVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMg
dW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBH
dGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVs
b3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgor
ICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdo
dCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRo
ZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhl
ICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAq
IG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwg
b3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91
cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxh
Y2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVk
IGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJv
dmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9y
IHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisgCisv
KgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBi
ZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRpb24uICAKKyAqLworCisjdW5kZWYgR1RL
X0RJU0FCTEVfREVQUkVDQVRFRAorCisjaW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3Rr
Mnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJp
dmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+Cisj
aW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8
WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29t
bWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQK
KyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisKKyNk
ZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194
dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAg
ICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAq
d2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAo
R3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJp
bl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAg
ICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworCisv
KiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAg
ICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVu
dF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91
bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGll
bnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRf
Y2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAg
IHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRp
YyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p
bnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVu
dF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2
ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcs
IFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19s
aXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitz
dGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9p
bnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAo
WHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBk
YXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7
ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3Bs
YXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZlbnQg
KmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAg
ICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9p
ZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBY
RXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7
CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGlj
IERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAg
ICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRp
YWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7
CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2lu
dCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAgICAg
ICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1Nv
dXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0
KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNrID0g
WFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4g
KGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdT
b3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYg
KHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAg
ICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsK
KyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAo
KTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rp
c3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdTb3Vy
Y2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0
YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0gMDsK
KworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAg
R0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmlj
IGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0
IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVu
dCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRp
bWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFj
ayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVO
VFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQo
YWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0
dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsK
KyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3Bh
dGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFy
c2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJf
Y2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsKKyAg
WHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxh
eSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25D
b250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50
cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2
ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMg
Y291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNv
IHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUg
cmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsu
IFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisg
IHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBw
UHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUK
K2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlw
ZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlw
ZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAgICAg
IHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAg
ICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAgIChH
dGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEg
Ki8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xh
c3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91
bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0
YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRC
aW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0
a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVf
Y2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9D
TEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6
ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOworCisg
IG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNz
LT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRi
aW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsK
KyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAwOwor
ICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0a194
dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJp
bjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBn
aW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERF
QlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYKKwor
ICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0YmluID0g
R1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9y
ZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2lu
ZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxs
b2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwg
JmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFs
bG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4t
PndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lk
Z2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAq
LworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsK
KworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0
ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NL
RVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndpZHRo
KTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dp
ZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVk
IHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0X2Fk
ZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitHdGtX
aWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAq
IGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFz
c2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RL
X1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5V
TEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUgdGhl
IFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93Owor
CisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFM
X1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xP
Uk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgp
LT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAgLyog
SWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAq
ICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiZ3Rr
X3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYK
KyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0K
KworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRp
c3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMp
IHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2
ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBsb29wLgorICAgICAqLworCisgICAgLyogdGhl
IGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLwor
ICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdT
b3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0K
KyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMp
OworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0gZ19z
b3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBj
bnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJl
ciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3Bv
bGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19J
TjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRo
aXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250
ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxf
ZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAg
LyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMg
Ki8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwK
KyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1l
cl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisKKyAg
LyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBC
dWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVu
dC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4
dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4t
PnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikp
OworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9z
ZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAg
eHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTEla
RUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2lu
ZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRn
ZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAg
ICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRi
aW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKwor
I2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxu
IiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhl
aWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJh
ZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGgg
PD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmco
YXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0
aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFy
Z3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNv
Y2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24u
eCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53
aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0
OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30K
Kworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQor
eworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlmCisK
KyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBv
biBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9
IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQs
IEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAg
ICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdU
S19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKwor
c3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAg
R3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRi
aW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAh
PSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsKKwor
ICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsK
KyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJv
eSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBu
dW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0
aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAg
ICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVtX3dp
ZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUg
WHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBnX21h
aW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9s
bF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRf
cmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9
IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0
cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24g
b2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVn
aW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwg
CisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgQ29s
b3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRB
cHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAgaW50
ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgor
ICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRf
d2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVu
dC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRj
bGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRl
ZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2Vu
ZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVh
dGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNl
dEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3Bs
YXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2Ms
IG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBU
UlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNsaWVu
dC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29s
b3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRl
IHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3Jl
YXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93IGVt
YmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAg
ICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAgICAg
ICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAg
ICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xpZW50
X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwo
ImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisK
KyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdz
W25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0Tndp
ZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsK
KworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOwor
ICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBY
dE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tu
XSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJn
c1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRB
cmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxk
X3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0Up
OworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRv
cF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0
cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGli
U3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQt
Pnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAgICAg
ICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1i
ZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0
UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZl
bnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAg
ICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAg
eHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQo
Y2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsK
KworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hp
bGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVj
dE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAo
WHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRB
ZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3Ry
dWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAg
ICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRf
Zm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5j
KHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVu
dF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0
aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3Bs
YXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndp
bmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0
LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdl
dCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBv
cmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9y
IHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5
LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGll
bnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQp
OworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRD
bGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0
UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVF
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2
ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRv
cF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitz
dGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1
bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBB
dG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lO
Rk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3Rv
Y29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5
IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAgICAg
ICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVw
bGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9
CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3
LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4
dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50
LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJl
YWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgor
ICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNl
bmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRl
ZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RF
QUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZ
X09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJF
RF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9E
QUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0
IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVN
QkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAgWEV2
ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisK
KyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsK
KyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIGlu
XG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAg
ICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJY
VEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMu
dHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9
IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlz
cGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50
KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4ZXZl
bnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAor
ICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1
Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoK
KyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGlj
IHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2lu
dGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0g
KFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7
CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdl
ICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAg
ICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4
dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7Cisg
ICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJl
YWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3
LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6Cisg
ICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAg
ICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQ
cmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxu
Iik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAg
ICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitz
ZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAg
ICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAg
ZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAgICAg
ICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAgICBs
b25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2lu
ZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRp
c3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2
ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5
cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50
ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0g
MzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVu
dC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRh
aWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGll
bnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQg
KGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxz
ZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVH
X1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixl
cnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKworc3RhdGljIGludCAgICAgICAgICAgICAKK2Vy
cm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQoreworICB0
cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9l
cnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJy
b3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lk
KQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBl
ZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdp
bmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAg
cmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0
X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhF
dmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGll
bnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7CisK
KyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAg
ICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lk
Z2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2lu
ZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5l
cl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2Vy
X2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlm
KGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBu
ZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwg
ZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAg
eHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQor
ICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAg
LyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAg
LyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5k
b3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRv
bi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAw
LCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8q
IEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRf
Zm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBYV2lu
ZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xp
ZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOwor
ICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7
CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5
TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAor
ICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsK
KworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0
dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAg
VFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9j
dXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9l
cnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdl
dCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBf
ZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlN
YXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgIChY
dEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAg
dW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJf
dHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRv
dyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRv
dyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7Cisg
IHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBt
b3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1
c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEp
OworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZw
YXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAg
ICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisg
IGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRv
d1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9h
ZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUo
KHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlR3RrLmgiCisjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZUd0ay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdp
bkluZm8qIFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgo
dW5zaWduZWQgaSkgCit7IAorICAgIFBsdWdpbkRhdGFiYXNlR3RrICpkYiA9IFBsdWdpbkRhdGFi
YXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQ
bHVnaW5JbmZvOworICAgIFBsdWdpblBhY2thZ2VHdGsqIHBhY2thZ2UgPSBkYi0+cGx1Z2lucygp
W2ldOworCisgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICBpbmZvLT5maWxl
ID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3Jp
cHRpb24oKTsKKworICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3Jp
cHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7
CisgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWlt
ZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBNaW1l
Q2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgIGluZm8tPm1pbWVz
LmFwcGVuZChtaW1lKTsKKyAgICAgICAgCisgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7
CisgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICBtaW1lLT5wbHVnaW4g
PSBpbmZvOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5t
aW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisK
KyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKwordW5zaWduZWQgUGx1Z0luSW5mb1N0b3Jl
OjpwbHVnaW5Db3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFBsdWdpbkRhdGFiYXNlR3RrOjpp
bnN0YWxsZWRQbHVnaW5zKCktPnBsdWdpbnMoKS5zaXplKCk7Cit9CisKK1N0cmluZyBQbHVnSW5J
bmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb24gR1RLKworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUo
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBtaW1lVHlwZSkgCit7CisgICAgcmV0dXJuIFBsdWdpbkRh
dGFiYXNlR3RrOjppbnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVU
eXBlKTsKK30KKwordm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKK3sK
KyAgICBQbHVnaW5EYXRhYmFzZUd0azo6aW5zdGFsbGVkUGx1Z2lucygpLT5yZWZyZXNoKCk7CisK
KyAgICBpZiAocmVsb2FkT3BlblBhZ2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiByZWxvYWQgb3Bl
biBwYWdlcworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzMDAwNSkKKysrIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQCBERVBFTkRQQVRI
ICs9IGVkaXRpbmcvcXQgaGlzdG9yeS9xdCBsb2FkCiBndGstcG9ydCB7CiAgICAgeDExOnBsdWdp
bnMgewogICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgTElCUyArPSAtbFh0CiAg
ICAgfQogCiAgICAgSU5DTFVERVBBVEggKz0gXApAQCAtMTczLDYgKzE3NCw3IEBAIGd0ay1wb3J0
IHsKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsgXAog
ICAgIHBhZ2UvZ3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ayBcCiAg
ICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay93ZWJr
aXQKQEAgLTg2NiwxMyArODY4LDM1IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vz
c29yLmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdUS19E
SVNBQkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpbkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBc
CisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCisKICAgU09VUkNFUyArPSBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAgCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEu
Y3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBwbHVn
aW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBh
Y2thZ2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAg
cGx1Z2lucy9ndGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0g
XAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAorICAgICAgcGx1Z2lucy9ndGsveGVt
YmVkLmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMK
KyAgfQogfQogCiBxdC1wb3J0IHsKQEAgLTk4Niw2ICsxMDEwLDcgQEAgcXQtcG9ydCB7CiB9CiAK
IGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3RrCiAg
ICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2Fy
ZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAzMDAwNSkKKysrIFdlYkNv
cmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNCArMjgsMTkg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXdHdGsuaCIKIAorI2luY2x1
ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgInJ1
bnRpbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCitLSlM6OkJp
bmRpbmdzOjpJbnN0YW5jZSogRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdp
ZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFBsdWdpblZpZXdHdGsqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKICAgICBy
ZXR1cm4gMDsKIH0KIApJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkocmV2aXNpb24g
MzAwMDUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJv
cmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJldmlzaW9uOwogbXkgJG9zWFZlcnNp
b247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFibGVHdGtQbHVnaW5zOwogbXkgJGlz
V3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0CkBAIC00ODcsNiArNDg5LDIzIEBA
IHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitzdWIgZW5hYmxlR3RrUGx1Z2lucygp
Cit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpOworICAgIHJldHVybiAkZW5hYmxl
R3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKQoreworICAg
IHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5zKTsKKworICAgIGlmIChjaGVja0Fy
Z3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5z
ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDE7CisgICAg
fQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5lSXNXeCgpOwpAQCAtODYwLDYgKzg3
OSw3IEBAIHN1YiBidWlsZEd0a1Byb2plY3QoJCRAKQogICAgICAgICByZXR1cm4gYnVpbGRBdXRv
dG9vbHNQcm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bXkgQGJ1aWxkQXJncyA9ICgiQ09ORklHKz1ndGstcG9ydCIsICJDT05GSUctPXF0Iik7CisgICAg
ICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJRys9cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lu
cygpOwogICAgICAgICByZXR1cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdz
KTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19342</attachid>
            <date>2008-02-25 03:51:44 -0800</date>
            <delta_ts>2008-03-24 11:59:04 -0700</delta_ts>
            <desc>64-bit fixes</desc>
            <filename>106_npapi64_fixes.patch</filename>
            <type>text/plain</type>
            <size>2167</size>
            <attacher name="Gwenole Beauchesne">gb.devel</attacher>
            
              <data encoding="base64">MjAwOC0wMi0yNSAgR3dlbm9sZSBCZWF1Y2hlc25lICA8Z2JlYXVjaGVzbmVAc3BsaXR0ZWQtZGVz
a3RvcC5vcmc+CgoJKiA2NC1iaXQgZml4ZXMgdG8gTlBBUEkgR1RLIHN1cHBvcnQuCgotLS0gd2Vi
a2l0LXNhZmFyaS0zLjEtYnJhbmNoLTB+c3ZuMzAzNjcvV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmgubnBhcGk2NAkyMDA4LTAyLTIxIDE0OjM4OjI1LjAwMDAwMDAwMCArMDEw
MAorKysgd2Via2l0LXNhZmFyaS0zLjEtYnJhbmNoLTB+c3ZuMzAzNjcvV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmgJMjAwOC0wMi0yNSAxMDo1NDoyOC4wMDAwMDAwMDAgKzAx
MDAKQEAgLTg4LDEwICs4OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgfTsKIAogICAg
IHN0cnVjdCBQbHVnaW5QYWNrYWdlR3RrSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2Fn
ZUd0ayo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VH
dGsqPihrZXkpLT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
UmVmUHRyPFBsdWdpblBhY2thZ2VHdGs+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CiAK
LSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNvbnN0IGludCBiKSB7IHJl
dHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2VHdGsqPihhKSwgcmVpbnRl
cnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYikpOyB9CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IHVpbnRwdHJfdCBhLCBjb25zdCB1aW50cHRyX3QgYikgeyByZXR1cm4gZXF1
YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlR3RrKj4oYSksIHJlaW50ZXJwcmV0X2Nh
c3Q8UGx1Z2luUGFja2FnZUd0ayo+KGIpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZUd0az4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNr
YWdlR3RrPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZUd0azo6ZXF1YWwoKmEuZ2V0KCksICpi
LmdldCgpKTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOwogICAgIH07Ci0tLSB3ZWJraXQtc2FmYXJpLTMuMS1icmFuY2gt
MH5zdm4zMDM2Ny9XZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwLm5wYXBpNjQJ
MjAwOC0wMi0yNSAxMTowMDozNS4wMDAwMDAwMDAgKzAxMDAKKysrIHdlYmtpdC1zYWZhcmktMy4x
LWJyYW5jaC0wfnN2bjMwMzY3L1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJ
MjAwOC0wMi0yNSAxMTowMToyMS4wMDAwMDAwMDAgKzAxMDAKQEAgLTk0MywxOCArOTQzLDE4IEBA
IE5QRXJyb3IgUGx1Z2luVmlld0d0azo6Z2V0VmFsdWUoTlBOVmFyaWEKIAogICAgICAgICBjYXNl
IE5QTlZUb29sa2l0OiB7CiAjaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAgICAgKigodW5zaWdu
ZWQgbG9uZyAqKXZhbHVlKSA9IDI7CisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAy
OwogI2Vsc2UKLSAgICAgICAgICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSAwOworICAg
ICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMDsKICNlbmRpZgogICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBOUE5WU3VwcG9y
dHNYRW1iZWRCb29sOiB7CiAjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKLSAgICAgICAg
ICAgICooKHVuc2lnbmVkIGxvbmcgKil2YWx1ZSkgPSB0cnVlOworICAgICAgICAgICAgKigodWlu
dDMyICopdmFsdWUpID0gdHJ1ZTsKICNlbHNlCi0gICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25n
ICopdmFsdWUpID0gZmFsc2U7CisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSBmYWxz
ZTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwogICAgICAgICB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19936</attachid>
            <date>2008-03-21 13:58:48 -0700</date>
            <delta_ts>2008-03-24 11:59:04 -0700</delta_ts>
            <desc>Updated patch against r31217</desc>
            <filename>webkit-npapi-gtk2.patch</filename>
            <type>text/plain</type>
            <size>95538</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzMTIxNykKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiAr
MjQwLDcgQEAgZW5kaWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBf
VU5JWAord2ViY29yZV9saWJhZGQgKz0gLWxYdAogZW5kaWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJ
bmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiAzMTIxNykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTg5NCw3ICs4OTQsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwIFwKKwlXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRh
dGFiYXNlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNw
cCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCiAJV2ViQ29yZS9y
ZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5j
cHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05NTQsNiArOTU3
LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIFwKIAlXZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3
ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKK2Vu
ZGlmCisKIHdlYmtpdGd0a19oZWFkZXJzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRHdGsuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDMxMjE3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIGd0ay1wb3J0IHsKICAgICB9CiAgICAgeDExOnBsdWdpbnMg
ewogICAgICAgICBERUZJTkVTICs9IFhQX1VOSVgKKyAgICAgICAgTElCUyArPSAtbFh0CiAgICAg
fQogCiAgICAgSU5DTFVERVBBVEggKz0gXApAQCAtMTgwLDYgKzE4MSw3IEBAIGd0ay1wb3J0IHsK
ICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsgXAogICAg
IHBhZ2UvZ3RrIFwKKyAgICBwbHVnaW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ayBcCiAgICAg
Li4vV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay93ZWJraXQK
QEAgLTkxMCwxMyArOTEyLDM1IEBAIFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29y
LmNwcAogCiBndGstcG9ydCB7CisgICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdUS19ESVNB
QkxFX1BMVUdJTlM9MQorICB9CisgIEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdp
bkRhdGFiYXNlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisg
ICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5oCisKICAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFdpZHRoTWFwLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5jcHAgCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3Bw
IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5z
L2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAgcGx1
Z2lucy9ndGsvbnBhcGkuY3BwCisKKyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0gXAor
ICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmggXAorICAgICAgcGx1Z2lucy9ndGsveGVtYmVk
LmgKKworICAgIFNPVVJDRVMgKz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKKyAg
fQogfQogCiBxdC1wb3J0IHsKQEAgLTEwMjksNiArMTA1Myw3IEBAIHF0LXBvcnQgewogfQogCiBn
dGstcG9ydCB7CisgICAgSU5DTFVERVBBVEggKz0gLi4vV2ViQ29yZS9wbHVnaW5zL2d0awogICAg
IEhFQURFUlMgKz0gXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuaCBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
aCBcCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAkocmV2aXNpb24gMzEyMTcp
CisrKyBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsOCBAQAogICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiB0aGUgYWN0
dWFsIG5wYXBpLmggb3IgbnBydW50aW1lLmgKICAqLwogCisjaW5jbHVkZSAibnBhcGkuaCIKKyNp
bmNsdWRlICJucGZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIm5wcnVudGltZS5oIgogCiAjaWZkZWYg
WFBfVU5JWApJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDMxMjE3KQorKysgV2Vi
Q29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAs
MTUgKzMxLDE3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgor
I2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZy
YW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQorUGFzc1JlZlB0cjxL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5iaW5kaW5n
SW5zdGFuY2UoKTsKIH0KIAogdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMo
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShy
ZXZpc2lvbiAzMTIxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJGVFBEaXJl
Y3RvcnlEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
CkBAIC01OCwyOCArNTYsMTIgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShj
b25zdAogLyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBy
dW4pOiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwogCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNr
YWdlJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5Q
YWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQot
dW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2Fn
ZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxz
ZTsgfQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gZmFsc2U7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJl
Y3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJB
Z2VudCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsdWdp
blZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQot
dm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9p
ZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpIHsgV2lkZ2V0OjpzZXRGb2N1cygpOyB9CiB2b2lkIFBs
dWdpblZpZXc6OnNob3coKSB7IFdpZGdldDo6c2hvdygpOyB9CiB2b2lkIFBsdWdpblZpZXc6Omhp
ZGUoKSB7IFdpZGdldDo6aGlkZSgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1
Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpIHsgV2lkZ2V0OjpzZXRQYXJlbnQo
dmlldyk7IH0KIHZvaWQgUGx1Z2luVmlldzo6YXR0YWNoVG9XaW5kb3coKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqLCBj
b25zdCBjaGFyKiwgdWludDMyLCBjb25zdCBjaGFyKiwgYm9vbCwgdm9pZCosIGJvb2wsIGJvb2wp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KLXZvaWQg
UGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNl
RXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkg
e30KIAogQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZG
OyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAo
KikoKSkgeyB9CkBAIC05Myw4ICs3NSw1IEBAIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgp
IGNvbnN0IHsgbm8KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KIAotdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci0KIH0KIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMzEy
MTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDEwICsyNywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2UuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5E
ZWJ1Zy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIK
KyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsNiArNDcsNyBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmZy
ZWVMaWJyYXJ5U29vbigpCiB7CiAgICAgQVNTRVJUKCFtX2ZyZWVMaWJyYXJ5VGltZXIuaXNBY3Rp
dmUoKSk7CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICBwcmludGYoIlNPT046ICVzIC0gJWRc
biIsIHBhdGgoKS51dGY4KCkuZGF0YSgpLCBtX2xvYWRDb3VudCk7CiAgICAgQVNTRVJUKG1fbG9h
ZENvdW50ID09IDApOwogCiAgICAgbV9mcmVlTGlicmFyeVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
QEAgLTUyLDEyICs1NiwzNyBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5U29vbigp
CiB2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlZChUaW1lcjxQbHVnaW5Q
YWNrYWdlPiopCiB7CiAgICAgQVNTRVJUKG1fbW9kdWxlKTsKKyAgICBwcmludGYoIkZJUkVEOiAl
cyAtICVkXG4iLCBwYXRoKCkudXRmOCgpLmRhdGEoKSwgbV9sb2FkQ291bnQpOwogICAgIEFTU0VS
VChtX2xvYWRDb3VudCA9PSAwKTsKIAogICAgIHVubG9hZE1vZHVsZShtX21vZHVsZSk7CiAgICAg
bV9tb2R1bGUgPSAwOwogfQogCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVn
aW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Cit7CisgICAgLy8gU29ydCBwbHVnLWlucyB0aGF0
IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KKyAgICBib29sIEFhbGxvd3NNdWx0aXBs
ZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRp
cGxlSW5zdGFuY2VzKTsKKyAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21w
YXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3Rh
bmNlcyk7CisgICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlw
bGVJbnN0YW5jZXMpCisgICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAt
MSA6IDE7CisKKyAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3Qu
CisgICAgYm9vbCBBaXNJblByZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJy
ZWRQbHVnaW5QYXRoKHBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBib29sIEJpc0luUHJlZmVycmVk
UGF0aCA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29tcGFyZVRvLnBh
cmVudERpcmVjdG9yeSgpKTsKKyAgICBpZiAoQWlzSW5QcmVmZXJyZWRQYXRoICE9IEJpc0luUHJl
ZmVycmVkUGF0aCkKKyAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkUGF0aCA/IC0xIDogMTsK
KworICAgIGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8u
bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlm
ZjsKKworICAgIGlmIChkaWZmID0gY29tcGFyZUZpbGVWZXJzaW9uKGNvbXBhcmVUby52ZXJzaW9u
KCkpKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIHJldHVybiBzdHJjbXAocGFyZW50RGly
ZWN0b3J5KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpLnV0Zjgo
KS5kYXRhKCkpOworfQorCiBQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgUGxhdGZvcm1GaWxlVGltZSYgbGFzdE1vZGlmaWVkKQogICAgIDogUmVm
Q291bnRlZDxQbHVnaW5QYWNrYWdlPigwKQogICAgICwgbV9wYXRoKHBhdGgpCkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmgJKHJldmlzaW9uIDMxMjE3KQorKysgV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblBhY2thZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUg
IlBsdWdpblF1aXJrU2V0LmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCi0jaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW50
ZXJuYWwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKQEAgLTQ5LDYgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBT
dHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc2NyaXB0aW9uOyB9CiAgICAg
ICAgIFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KICAgICAg
ICAgU3RyaW5nIHBhcmVudERpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50RGlyZWN0
b3J5OyB9CisJU3RyaW5nIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgICAg
ICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fbWltZVRvRGVzY3JpcHRpb25zOyB9CiAgICAgICAgIGNvbnN0IE1JTUVUb0V4
dGVuc2lvbnNNYXAmIG1pbWVUb0V4dGVuc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX21pbWVUb0V4
dGVuc2lvbnM7IH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmgJKHJldmlzaW9uIDMxMjE3KQor
KysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJu
cHJ1bnRpbWVfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGx1Z2luUXVpcmtT
ZXQuaCIKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDMxMjE3KQorKysgV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5
LDkgQEAgdm9pZCBQbHVnaW5WaWV3OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IAogICAgIGlmIChy
ZWN0ICE9IGZyYW1lR2VvbWV0cnkoKSkKICAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5
KHJlY3QpOwogCisgICAgaWYgKHBhcmVudCgpKQorCWluaXQoKTsKKwogICAgIHVwZGF0ZVdpbmRv
dygpOwogICAgIHNldE5QV2luZG93UmVjdChyZWN0KTsKIH0KQEAgLTM5Myw1NSArMzk2LDYgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzcwogICAgICAgICBwYWdlLT5j
aHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBTdHJpbmcobWVzc2FnZSkp
OwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAg
IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBjYXNlIE5QTlZXaW5kb3dO
UE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1f
cGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIFJl
dHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6
IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4K
LSAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCi0gICAgICAgICAgICAgICAgX05Q
Tl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAgICAgdm9pZCoq
IHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogewotICAgICAg
ICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7Ci0KLSAgICAgICAgICAgIGlm
IChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05h
bWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAg
ICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVt
ZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKLQotICAgICAgICAgICAgLy8gUmV0dXJu
IHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgotICAg
ICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgICAgICBfTlBOX1Jl
dGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwotCi0gICAgICAgICAgICB2b2lkKiogdiA9
ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKLQot
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0jZW5kaWYKLQot
ICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICAgICAgUGxhdGZvcm1X
aWRnZXQqIHcgPSByZWludGVycHJldF9jYXN0PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUpOwotCi0g
ICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKLQotICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KIE5QRXJyb3IgUGx1Z2lu
Vmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogewogICAg
IHN3aXRjaCAodmFyaWFibGUpIHsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMzEy
MTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjEsNiArMjIxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2F0dGFj
aGVkVG9XaW5kb3c7CiAgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CiAKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oV0lOKQogICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4gbV9t
ZXNzYWdlVGhyb3R0bGVyOwogICAgICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJvYzsKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L25wYXBpLmNwcAkocmV2aXNpb24gMzEyMTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJQbHVnaW5JbmZv
U3RvcmUuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVkZSAibnBhcGkuaCIgLy8g
I2luY2x1ZGVzIDx3aW5kb3dzLmg+CisjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvbnBmdW5j
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMuaAkocmV2
aXNpb24gMzEyMTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvbnBmdW5jdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBfTlBGVU5DVElPTlNfSF8KICNkZWZpbmUg
X05QRlVOQ1RJT05TX0hfCiAKLSNpbmNsdWRlICJucHJ1bnRpbWVfaW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucGFwaS5oIgogCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIGV4dGVybiAiQyIgewpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDgg
VHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFz
ZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4g
JnBsdWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIGluZm8gPSBu
ZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNb
aV07CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5m
by0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8tPmRlc2MgPSBwYWNr
YWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01h
cCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7Cisg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRv
RGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFz
c0luZm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisKKyAgICAgICAg
ICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLT5kZXNjID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCku
Z2V0KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCkKKyAg
ICAgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAgICAg
ICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lk
IFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9IFBsdWdp
bkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKK30KKwor
fTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZp
c2lvbiAzMTIxNykKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDU3RyaW5nLmgi
CiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPGdka2NvbmZpZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDYgKzY2LDggQEAgVmVjdG9yPFN0cmluZz4gUGx1
Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwogICAgIGdj
aGFyKiBwYXRoOwogCisgICAgcGF0aCA9IDA7CisKICNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdf
WDExKQogICAgIHBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96
aWxsYSIsICJwbHVnaW5zIiwgMCk7CiAgICAgcGF0aHMuYXBwZW5kKHBhdGgpOwpAQCAtMTAwLDcg
KzEwMywyMSBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsCiAKIGJv
b2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb25zdCBTdHJpbmcmIHBh
dGgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGdjaGFyKiBob21lUGF0aDsKKyAgICBib29s
IHJldHZhbCA9IGZhbHNlOworCisgICAgaG9tZVBhdGggPSAwOworCisjaWYgZGVmaW5lZChHREtf
V0lORE9XSU5HX1gxMSkKKyAgICBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9t
ZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCAwKTsKKyNlbGlmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19XSU4zMikKKyAgICBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9t
ZV9kaXIoKSwgIkFwcGxpY2F0aW9uIERhdGEiLCAiTW96aWxsYSIsICJwbHVnaW5zIiwgMCk7Cisj
ZW5kaWYKKworICAgIGlmIChob21lUGF0aCkKKwlyZXR2YWwgPSAoc3RyY21wKGhvbWVQYXRoLCAo
cGF0aC51dGY4KCkpLmRhdGEoKSkgPT0gMCk7CisKKyAgICByZXR1cm4gcmV0dmFsOwogfQogCiB9
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lu
dCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVW
ZXJzaW9uJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgaWYgKCFsb2FkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQ
dHIgTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgTlBQX0dl
dFZhbHVlOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2Ny
aXB0aW9uIiwgKHZvaWQqKikmTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9z
eW1ib2wobV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJk5QUF9HZXRWYWx1ZSk7CisK
KyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBOUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsKKyAgICBn
Y2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7IiwgLTEpOworICAgIGZvciAo
aW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ldWzBdOyBpKyspIHsKKyAgICAg
ICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIsIDMpOwor
CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWltZURhdGFb
Ml0pOworICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMgPSBnX3N0cnNwbGl0KG1pbWVEYXRhWzFd
LCAiLCIsIC0xKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7CisgICAgICAg
IGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisgICAgICAgICAgICBleHRWZWN0
b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5zaW9uc1tqXSkpOworCisgICAgICAgIG1f
bWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rvcik7CisgICAgICAgIG1f
bWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOworCisgICAg
ICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7CisgICAgICAgIGdfc3RyZnJlZXYobWltZURhdGEp
OworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7CisKKyAgICBjaGFyKiBidWZmZXIg
PSAwOworICAgIE5QRXJyb3IgZXJyID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3Ry
aW5nLCAmYnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBt
X25hbWUgPSBidWZmZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IE5QUF9HZXRWYWx1
ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIg
PT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAgICBp
ZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4
KCkpLmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NBTCk7CisgICAgaWYgKCFtX21vZHVsZSkgewor
CXByaW50ZigiREVCVUc6ICVzXG4iLCBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlh
bGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgZ19t
b2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRp
YWxpemUpOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZv
aWQqKikmbV9OUFBfU2h1dGRvd24pOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05Q
UF9TaHV0ZG93bikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5G
dW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUg
PSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6
ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZF
UlNJT05fTUlOT1I7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVu
Y3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3
c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9X
cml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJl
YW07CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFs
bG9jID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVt
RnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFs
dWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBO
UE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9
IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0g
TlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0
SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVl
cjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0
YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJl
bGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5n
SWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5f
R2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcg
PSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlk
ZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5j
cmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRh
aW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNl
b2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9
IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0lu
dm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRl
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9i
cm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1f
YnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7CisgICAgbV9icm93c2Vy
RnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5z
ZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVt
ZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9i
cm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9f
RVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBwcmludGYoIkxPQURFRDogJXNcbiIs
IChtX3BhdGgudXRmOCgpKS5kYXRhKCkpOworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJu
IHRydWU7CisKK2Fib3J0OgorICAgIHByaW50ZigiQUJPUlRFRDogJXNcbiIsIChtX3BhdGgudXRm
OCgpKS5kYXRhKCkpOworICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7IAorICAg
IHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgp
LAorICAgICAgICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1w
bDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBz
aXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2Fn
ZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikK
K3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVn
SW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5o
IgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRl
ICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1
bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxranMvSlNMb2Nr
Lmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KKwor
I2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisj
aW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIK
KyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0
ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtK
Uzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisK
K3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAg
IGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xk
V2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9j
bGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50
c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNp
emUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVj
dC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55
KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKyAgICBp
ZiAobV93aW5kb3cpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93
LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICAgICAg
aWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9u
KEdUS19YVEJJTihtX3dpbmRvdyksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkp
OworICAgICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpbmRvdywgbV93aW5kb3dSZWN0Lndp
ZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
K30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICAv
LyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4iIGltYWdlCisgICAgICAgIC8vcGFpbnRNaXNzaW5n
UGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX2lzV2luZG93ZWQgfHwgY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVz
aXplIFhldmVudHMgaGVyZSAqLworCisgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBl
RHJhd2FibGU7CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAg
aWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9CisKKyAgICBpZiAobV9p
c1dpbmRvd2VkKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKwor
ICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorfQorCit2b2lk
IFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7
CisgICAgTlBFdmVudCBucEV2ZW50OworICAgIAorICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFu
IFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBl
dmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZlbnQ7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkK
KyAgICAgIHJldHVybjsKKworICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBw
YXNzIHRocm91Z2ggKi8KKyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4o
cGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVu
dC0+cGFnZVkoKSkpOworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwg
Jm5wRXZlbnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdl
dDo6c2V0UGFyZW50KHBhcmVudCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCB8fCAhbV9p
c1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFy
ZW50KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRv
dy54ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93
LndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWln
aHQoKTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC50b3AgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0
LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgp
OworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwor
CisgICAgICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIEFTU0VSVChtX3dpbmRvdyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnN0b3Ao
KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hT
ZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hT
ZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBz
dHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgp
OworICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBB
U1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOwor
CisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBE
ZXN0cm95IHRoZSBwbHVnaW4KKyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveSht
X2luc3RhbmNlLCAwKTsKKworICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKworc3RhdGlj
IHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sK
KyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7
CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwo
Y29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7Cisg
ICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAg
cmV0dXJuIGNoYXJhY3RlcnMuCisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAg
IHVybFN0cmluZy5yZXBsYWNlKCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkws
IHVybFN0cmluZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5l
KGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgp
ID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsKK30KKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6
dXNlckFnZW50KCkKK3sKKyNpZiAwCisgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVybiBNb3pp
bGxhVXNlckFnZW50OworI2VuZGlmCisKKyAgICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisg
ICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudCht
X3VybCkudXRmOCgpOworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNy
b2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBi
eXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAg
CisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JM
RiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicg
JiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAg
ICAgIGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBl
bHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9y
IERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAgICAgICAgICAgICAg
cmV0dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBi
eXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFz
aC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAgICAgICAgcmV0dXJu
IGkgKyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMg
aW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiBFT0wg
aXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5LCBzb21lIHNl
cnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNvbWUgc2VydmVy
cyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5nLiA8aGVhZGVyPkNS
TEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBtb3JlIGZvcmdpdmlu
Zy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1IuCisgICAgLy8KKyAg
ICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQgd2lsbCByZXR1
cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNoYXJhY3Rlci4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYg
KGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAg
ICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxGIGlzIGFjcm9zcyBy
ZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCByZWFkLgorICAgICAg
ICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmll
bGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0
ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7CisKKyAgICAgICAg
aWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFtZVtpXSA8PSAn
eicpCisgICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOworICAgICAgICBlbHNl
IGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBuYW1lW2ldIDw9
ICdaJykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1lW2ldID09ICct
JykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
aW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9y
PGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBjaGFyKiBieXRl
cyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0cmluZyBsYXN0
S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8gTG9vcCBvdmUg
cmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkg
bW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0
aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAgICAgaW50IGxp
bmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1vdmUgYnl0ZXMg
dG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBieSBmaW5k
RU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVvbCA9PSAnXHIn
KSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5j
ZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAgICAgbGVuZ3Ro
IC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQorICAgICAg
ICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVyCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICpsaW5lID09
ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVh
ZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAgICAgICAgICAg
IC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
TWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAg
ICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtleSk7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgpOworCisgICAg
ICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFsdWUgKyBuZXdW
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBC
cmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsKKyAgICAgICAg
ICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9IGVvbDsgY29s
b24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1l
ZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkgPSBjYXBpdGFs
aXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxpbmUpKTsKKyAg
ICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBmb3IgKGNvbG9u
Kys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKmNv
bG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9s
KQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVvbCAtIGNvbG9uKTsK
KworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFz
dEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkgeworICAgICAg
ICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7CisgICAgICAgICAgICAgICAgICAg
IHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30KKworTlBFcnJv
ciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5
RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykKK3sKKyAgICBp
ZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAgIHJldHVybiBOUEVSUl9JTlZBTElEX1BB
UkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0OworCisgICAgSFRU
UEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICAK
KyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisg
ICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICAgICAg
ZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAgICAgLy8gR2V0IGZpbGUg
aW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCks
IChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIp
KSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCS8vRklYTUUg
LSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAgICAgRklMRSogZmlsZUhhbmRs
ZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIiKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChmaWxlSGFuZGxlID09IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9O
T1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXplKCk7CisKKyAgICAgICAgaW50IGJ5
dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAg
ICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0
IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAgICAgICBpZiAo
c3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0RGF0YSsrOwor
ICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShidWZmZXIpOwor
ICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwg
ZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24pOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247
CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250
ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAgICAgICAgIC8v
IGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUg
dGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBk
YXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0cmluZyBjb250
ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKTsKKworICAgICAg
ICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChpbnQpZGF0YUxlbmd0
aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1MZW5ndGgi
KTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOworICAgICAgICAgICAg
ICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmllbGRzKTsKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5z
ZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3Qs
IHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6
OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICAgICAg
Y2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisgICAgICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQp
IHsKKyAgICAgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3BsYXlUb0FwcGxpY2F0
aW9uQ29udGV4dCAoR1RLX1hUQklOKG1fd2luZG93KS0+eHRjbGllbnQueHRkaXNwbGF5KTsKKwor
ICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgICAgICB9
CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7CisjaWYgUExBVEZPUk0oR1RL
KQorICAgICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IDI7CisjZWxzZQorICAg
ICAgICAgICAgKigodW5zaWduZWQgbG9uZyAqKXZhbHVlKSA9IDA7CisjZW5kaWYKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBO
VlN1cHBvcnRzWEVtYmVkQm9vbDogeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisg
ICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNlCisgICAg
ICAgICAgICAqKCh1bnNpZ25lZCBsb25nICopdmFsdWUpID0gZmFsc2U7CisjZW5kaWYKKyAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisJ
ICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7CisKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVu
dEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4g
dmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAg
ICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0
YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0g
KHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1f
aXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAg
ICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAg
IGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAg
ICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5F
bGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsK
KworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisjZW5kaWYK
KworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgdm9pZCog
dyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworI2lmZGVmIEdES19XSU5ET1dJ
TkdfWDExCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhjb250
YWluaW5nV2luZG93KCktPndpbmRvdyk7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJ
TjMyCisgICAgICAgICAgICAqKChIV05EICopdykgPSBHREtfV0lORE9XSU5HX0hXTkQoY29udGFp
bmluZ1dpbmRvdygpLT53aW5kb3cpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAgIGlu
dmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3QgcihyZWN0
LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9t
IC0gcmVjdC0+dG9wKTsKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAg
ICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAgICAg
Z3RrX3dpZGdldF9xdWV1ZV9kcmF3KGNvbnRhaW5pbmdXaW5kb3coKSk7Cit9CisKK1BsdWdpblZp
ZXc6On5QbHVnaW5WaWV3KCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBkZWxldGVBbGxWYWx1ZXMo
bV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFt
Q291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQp
OworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhp
cyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQo
KTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRydWU7CisK
KyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQbHVnaW5T
dGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAgICAgIG1f
c3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0
YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAm
bV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgIGlm
IChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIG1fd2luZG93ID0gZ3RrX3NvY2tldF9uZXcoKTsK
KyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52
aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSksIG1fd2luZG93KTsKKyAgICAgICAgc2V0R3RrV2lk
Z2V0KG1fd2luZG93KTsKKyAgICB9IGVsc2UgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAgICBt
X3dpbmRvdyA9IGd0a194dGJpbl9uZXcobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5n
V2luZG93KCktPndpbmRvdywgMCk7CisJc2V0R3RrV2lkZ2V0KG1fd2luZG93KTsKKyAgICB9Cisj
ZWxzZQorICAgIG1fd2luZG93ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRv
dygpKSwgbV93aW5kb3cpOworICAgIHNldEd0a1dpZGdldChtX3dpbmRvdyk7CisjZW5kaWYKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgZ3RrX3dpZGdldF9zaG93IChtX3dpbmRvdyk7CisK
KyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkK
KyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KiB3cyA9IGdfbmV3MChOUFNldFdpbmRvd0Nh
bGxiYWNrU3RydWN0LCAxKTsKKworICAgIHdzLT50eXBlID0gMDsKKworICAgIGlmIChtX25lZWRz
WEVtYmVkKSB7CisgICAgICAgIHdzLT5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExBWShtX3dp
bmRvdy0+d2luZG93KTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VBTChn
ZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbChHREtfRFJBV0FCTEUobV93aW5kb3ctPndpbmRvdykpKTsK
KyAgICAgICAgd3MtPmRlcHRoID0gZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxF
KG1fd2luZG93LT53aW5kb3cpKS0+ZGVwdGg7CisgICAgICAgIHdzLT5jb2xvcm1hcCA9IEdES19D
T0xPUk1BUF9YQ09MT1JNQVAoZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChHREtfRFJBV0FCTEUo
bV93aW5kb3ctPndpbmRvdykpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3cy0+ZGlzcGxheSA9
IEdUS19YVEJJTihtX3dpbmRvdyktPnh0ZGlzcGxheTsKKyAgICAgICAgd3MtPnZpc3VhbCA9IEdU
S19YVEJJTihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0dmlzdWFsOworICAgICAgICB3cy0+ZGVwdGgg
PSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVudC54dGRlcHRoOworICAgICAgICB3cy0+Y29s
b3JtYXAgPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVudC54dGNvbG9ybWFwOworCisgICAg
ICAgIFhGbHVzaCAod3MtPmRpc3BsYXkpOworICAgIH0KKworICAgIG1fbnBXaW5kb3cud3NfaW5m
byA9IHdzOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworICAgICAg
ICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7CisjaWYgZGVmaW5lZChHREtf
V0lORE9XSU5HX1gxMSkKKwlpZiAobV9uZWVkc1hFbWJlZCkKKwkgICAgbV9ucFdpbmRvdy53aW5k
b3cgPSAodm9pZCopR0RLX1dJTkRPV19YV0lORE9XKG1fd2luZG93LT53aW5kb3cpOworCWVsc2UK
KwkgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopR1RLX1hUQklOKG1fd2luZG93KS0+eHR3
aW5kb3c7CisjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfV0lOMzIpCisgICAgICAgIG1fbnBX
aW5kb3cud2luZG93ID0gKHZvaWQqKUdES19XSU5ET1dfSFdORChtX3dpbmRvdy0+d2luZG93KTsK
KyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93
VHlwZURyYXdhYmxlOworICAgICAgICBtX25wV2luZG93LndpbmRvdyA9IDA7CisgICAgfQorCisg
ICAgaWYgKCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJz
dFNldFdpbmRvd0NhbGwpKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnko
KSk7CisKKyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsy
eHRiaW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NDEgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5k
ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0
YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0Ug
QkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAq
IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4g
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1v
emlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNl
bnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxp
bWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5p
dGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3Rl
bXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFy
ZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5
LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBv
ZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3Ig
bGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNh
c2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBp
bnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhl
ciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGlu
ZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3Zl
IGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9u
cyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQor
ICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwg
dGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioq
KiAqLworIAorLyoKKyAqIFRoZSBHdGtYdEJpbiB3aWRnZXQgYWxsb3dzIGZvciBYdCB0b29sa2l0
IGNvZGUgdG8gYmUgdXNlZAorICogaW5zaWRlIGEgR1RLIGFwcGxpY2F0aW9uLiAgCisgKi8KKwor
I3VuZGVmIEdUS19ESVNBQkxFX0RFUFJFQ0FURUQKKworI2luY2x1ZGUgInhlbWJlZC5oIgorI2lu
Y2x1ZGUgImd0azJ4dGJpbi5oIgorI2luY2x1ZGUgPGd0ay9ndGttYWluLmg+CisjaW5jbHVkZSA8
Z3RrL2d0a3ByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2luY2x1ZGUgPGdsaWIu
aD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qIFhsaWIvWHQgc3R1ZmYgKi8KKyNpbmNsdWRlIDxYMTEv
WGxpYi5oPgorI2luY2x1ZGUgPFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9TaGVsbC5oPgor
I2luY2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvU3RyaW5nRGVmcy5oPgor
CisvKiB1bmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJv
dXQgd2lkZ2V0CisgICBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gKi8KKyN1bmRlZiBERUJVR19Y
VEJJTgorCisjZGVmaW5lIFhUQklOX01BWF9FVkVOVFMgMzAKKworc3RhdGljIHZvaWQgICAgICAg
ICAgICBndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpOworc3RhdGlj
IHZvaWQgICAgICAgICAgICBndGtfeHRiaW5faW5pdCAgICAgICAoR3RrWHRCaW4gICAgICAqeHRi
aW4pOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fcmVhbGl6ZSAgICAoR3RrV2lk
Z2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl91bnJl
YWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOworc3RhdGljIHZvaWQgICAgICAgICAg
ICBndGtfeHRiaW5fZGVzdHJveSAgICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CitzdGF0aWMg
dm9pZCAgICAgICAgICAgIGd0a194dGJpbl9zaHV0ZG93biAgIChHdGtPYmplY3QgICAgICAqb2Jq
ZWN0KTsKKworLyogWHQgYXdhcmUgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGll
bnRfaW5pdCAgICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeHRkZXB0aCk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9jbGllbnRfY3JlYXRlICAgIChYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBlbWJlZGVyLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoICk7CitzdGF0aWMgdm9pZCAgICAgICB4
dF9jbGllbnRfdW5yZWFsaXplIChYdENsaWVudCogeHRjbGllbnQpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lk
ICAgICAgIHh0X2NsaWVudF9zZXRfaW5mbyAgKFdpZGdldCB4dHBsdWcsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CitzdGF0aWMg
dm9pZCAgICAgICB4dF9jbGllbnRfZXZlbnRfaGFuZGxlciAoV2lkZ2V0IHcsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu
dCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlIChX
aWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAg
ICB4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIgICAgICAgKFdpZGdldCB3LCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB1c2VyX2Rh
dGEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WEV2ZW50ICpldmVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXIo
IFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhICk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9h
ZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVyIHVzZXJf
ZGF0YSk7IAorc3RhdGljIHZvaWQgICAgICAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdl
dCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsKK3N0YXRpYyB2b2lkICAgICAgIHNlbmRfeGVtYmVk
X21lc3NhZ2UgKFh0Q2xpZW50ICp4dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgbWVzc2FnZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb25nIGRhdGExLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgZGF0YTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25nIHRpbWUpOyAgCitzdGF0aWMgaW50ICAgICAgICBlcnJvcl9oYW5kbGVyICAgICAgIChEaXNw
bGF5ICpkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhF
cnJvckV2ZW50ICplcnJvcik7CisvKiBGb3IgZXJyb3IgdHJhcCBvZiBYRW1iZWQgKi8KK3N0YXRp
YyB2b2lkICAgICAgIHRyYXBfZXJyb3JzKHZvaWQpOworc3RhdGljIGludCAgICAgICAgdW50cmFw
X2Vycm9yKHZvaWQpOworc3RhdGljIGludCAgICAgICAgKCpvbGRfZXJyb3JfaGFuZGxlcikgKERp
c3BsYXkgKiwgWEVycm9yRXZlbnQgKik7CitzdGF0aWMgaW50ICAgICAgICB0cmFwcGVkX2Vycm9y
X2NvZGUgPSAwOworCitzdGF0aWMgR3RrV2lkZ2V0Q2xhc3MgKnBhcmVudF9jbGFzcyA9IE5VTEw7
CisKK3N0YXRpYyBEaXNwbGF5ICAgICAgICAgKnh0ZGlzcGxheSA9IE5VTEw7CitzdGF0aWMgU3Ry
aW5nICAgICAgICAgICpmYWxsYmFjayA9IE5VTEw7CitzdGF0aWMgZ2Jvb2xlYW4gICAgICAgICB4
dF9pc19pbml0aWFsaXplZCA9IEZBTFNFOworc3RhdGljIGdpbnQgICAgICAgICAgICAgbnVtX3dp
ZGdldHMgPSAwOworCitzdGF0aWMgR1BvbGxGRCAgICAgICAgICB4dF9ldmVudF9wb2xsX2ZkOwor
c3RhdGljIGdpbnQgICAgICAgICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CitzdGF0aWMg
Z3VpbnQgICAgICAgICAgICB0YWcgPSAwOworCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X3By
ZXBhcmUgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAqdGltZW91dCkKK3sgICAKKyAgaW50IG1hc2s7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIoKTsK
KyAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgIEdES19USFJFQURTX0xFQVZFKCk7CisK
KyAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50
X2NoZWNrIChHU291cmNlKiAgc291cmNlX2RhdGEpCit7CisgIEdES19USFJFQURTX0VOVEVSICgp
OworCisgIGlmICh4dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgJiBHX0lPX0lOKSB7CisgICAgaW50
IG1hc2s7CisgICAgbWFzayA9IFhQZW5kaW5nKHh0ZGlzcGxheSk7CisgICAgR0RLX1RIUkVBRFNf
TEVBVkUgKCk7CisgICAgcmV0dXJuIChnYm9vbGVhbiltYXNrOworICB9CisKKyAgR0RLX1RIUkVB
RFNfTEVBVkUgKCk7CisgIHJldHVybiBGQUxTRTsKK30gICAKKworc3RhdGljIGdib29sZWFuCit4
dF9ldmVudF9kaXNwYXRjaCAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAgICAg
ICAgICBHU291cmNlRnVuYyBjYWxsX2JhY2ssCisgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
ICB1c2VyX2RhdGEpCit7CisgIFhFdmVudCBldmVudDsKKyAgWHRBcHBDb250ZXh0IGFjOworICBp
bnQgaSA9IDA7CisKKyAgYWMgPSBYdERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCh4dGRpc3Bs
YXkpOworCisgIEdES19USFJFQURTX0VOVEVSICgpOworCisgIC8qIFByb2Nlc3Mgb25seSByZWFs
IFggdHJhZmZpYyBoZXJlLiAgV2Ugb25seSBsb29rIGZvciBkYXRhIG9uIHRoZQorICAgKiBwaXBl
LCBsaW1pdCBpdCB0byBYVEJJTl9NQVhfRVZFTlRTIGFuZCBvbmx5IGNhbGwKKyAgICogWHRBcHBQ
cm9jZXNzRXZlbnQgc28gdGhhdCBpdCB3aWxsIGxvb2sgZm9yIFggZXZlbnRzLiAgVGhlcmUncyBu
bworICAgKiB0aW1lciBwcm9jZXNzaW5nIGhlcmUgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgdGlt
ZXIgY2FsbGJhY2sgdGhhdAorICAgKiBkb2VzIGl0LiAgKi8KKyAgZm9yIChpPTA7IGkgPCBYVEJJ
Tl9NQVhfRVZFTlRTICYmIFhQZW5kaW5nKHh0ZGlzcGxheSk7IGkrKykgeworICAgIFh0QXBwUHJv
Y2Vzc0V2ZW50KGFjLCBYdElNWEV2ZW50KTsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgp
OworCisgIHJldHVybiBUUlVFOyAgCit9CisKK3N0YXRpYyBHU291cmNlRnVuY3MgeHRfZXZlbnRf
ZnVuY3MgPSB7CisgIHh0X2V2ZW50X3ByZXBhcmUsCisgIHh0X2V2ZW50X2NoZWNrLAorICB4dF9l
dmVudF9kaXNwYXRjaCwKKyAgZ19mcmVlLAorICAoR1NvdXJjZUZ1bmMpTlVMTCwKKyAgKEdTb3Vy
Y2VEdW1teU1hcnNoYWwpTlVMTAorfTsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wb2xs
aW5nX3RpbWVyX2NhbGxiYWNrKGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgRGlzcGxheSAqIGRp
c3BsYXk7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGV2ZW50c1RvUHJvY2VzcyA9IDIwOwor
CisgIGRpc3BsYXkgPSAoRGlzcGxheSAqKXVzZXJfZGF0YTsKKyAgYWMgPSBYdERpc3BsYXlUb0Fw
cGxpY2F0aW9uQ29udGV4dChkaXNwbGF5KTsKKworICAvKiBXZSBuZWVkIHRvIHByb2Nlc3MgbWFu
eSBYdCBldmVudHMgaGVyZS4gSWYgd2UganVzdCBwcm9jZXNzCisgICAgIG9uZSBldmVudCB3ZSBt
aWdodCBzdGFydmUgb25lIG9yIG1vcmUgWHQgY29uc3VtZXJzLiBPbiB0aGUgb3RoZXIgaGFuZAor
ICAgICB0aGlzIGNvdWxkIGhhbmcgdGhlIHdob2xlIGFwcCBpZiBYdCBldmVudHMgY29tZSBwb3Vy
aW5nIGluLiBTbyBwcm9jZXNzCisgICAgIHVwIHRvIDIwIFh0IGV2ZW50cyByaWdodCBub3cgYW5k
IHNhdmUgdGhlIHJlc3QgZm9yIGxhdGVyLiBUaGlzIGlzIGEgaGFjaywKKyAgICAgYnV0IGl0IG91
Z2h0YSB3b3JrLiBXZSAqcmVhbGx5KiBzaG91bGQgaGF2ZSBvdXQgb2YgcHJvY2VzcyBwbHVnaW5z
LgorICAqLworICB3aGlsZSAoZXZlbnRzVG9Qcm9jZXNzLS0gJiYgWHRBcHBQZW5kaW5nKGFjKSkK
KyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTUFsbCk7CisgIHJldHVybiBUUlVFOworfQor
CitHdGtUeXBlCitndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpCit7CisgIHN0YXRpYyBHdGtUeXBl
IHh0YmluX3R5cGUgPSAwOworCisgIGlmICgheHRiaW5fdHlwZSkgeworICAgICAgc3RhdGljIGNv
bnN0IEd0a1R5cGVJbmZvIHh0YmluX2luZm8gPQorICAgICAgeworICAgICAgICAiR3RrWHRCaW4i
LAorICAgICAgICBzaXplb2YgKEd0a1h0QmluKSwKKyAgICAgICAgc2l6ZW9mIChHdGtYdEJpbkNs
YXNzKSwKKyAgICAgICAgKEd0a0NsYXNzSW5pdEZ1bmMpIGd0a194dGJpbl9jbGFzc19pbml0LAor
ICAgICAgICAoR3RrT2JqZWN0SW5pdEZ1bmMpIGd0a194dGJpbl9pbml0LAorICAgICAgICAvKiBy
ZXNlcnZlZF8xICovIE5VTEwsCisgICAgICAgIC8qIHJlc2VydmVkXzIgKi8gTlVMTCwKKyAgICAg
ICAgKEd0a0NsYXNzSW5pdEZ1bmMpIE5VTEwKKyAgICAgIH07CisgICAgICB4dGJpbl90eXBlID0g
Z3RrX3R5cGVfdW5pcXVlIChHVEtfVFlQRV9TT0NLRVQsICZ4dGJpbl9pbmZvKTsKKyAgICB9Cisg
IHJldHVybiB4dGJpbl90eXBlOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX2NsYXNzX2lu
aXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKQoreworICBHdGtXaWRnZXRDbGFzcyAqd2lkZ2V0X2Ns
YXNzOworICBHdGtPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzOworCisgIHBhcmVudF9jbGFzcyA9
IGd0a190eXBlX2NsYXNzIChHVEtfVFlQRV9TT0NLRVQpOworCisgIHdpZGdldF9jbGFzcyA9IEdU
S19XSURHRVRfQ0xBU1MgKGtsYXNzKTsKKyAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gZ3RrX3h0
YmluX3JlYWxpemU7CisgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gZ3RrX3h0YmluX3VucmVh
bGl6ZTsKKworICBvYmplY3RfY2xhc3MgPSBHVEtfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisgIG9i
amVjdF9jbGFzcy0+ZGVzdHJveSA9IGd0a194dGJpbl9kZXN0cm95OworfQorCitzdGF0aWMgdm9p
ZAorZ3RrX3h0YmluX2luaXQgKEd0a1h0QmluICp4dGJpbikKK3sKKyAgeHRiaW4tPnh0ZGlzcGxh
eSA9IE5VTEw7CisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gTlVMTDsKKyAgeHRiaW4tPnh0d2lu
ZG93ID0gMDsKKyAgeHRiaW4tPnggPSAwOworICB4dGJpbi0+eSA9IDA7Cit9CisKK3N0YXRpYyB2
b2lkCitndGtfeHRiaW5fcmVhbGl6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQpCit7CisgIEd0a1h0Qmlu
ICAgICAqeHRiaW47CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgMjAwLCAy
MDAgfTsKKyAgZ2ludCAgeCwgeSwgdywgaCwgZDsgLyogZ2VvbWV0cnkgb2Ygd2luZG93ICovCisK
KyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZWFsaXplKClcbiIpOwor
I2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RLX0lTX1hUQklOICh3aWRnZXQpKTsKKwor
ICB4dGJpbiA9IEdUS19YVEJJTiAod2lkZ2V0KTsKKworICAvKiBjYWN1bGF0ZSB0aGUgYWxsb2Nh
dGlvbiBiZWZvcmUgcmVhbGl6ZSAqLworICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh4dGJpbi0+
cGFyZW50X3dpbmRvdywgJngsICZ5LCAmdywgJmgsICZkKTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9
IHc7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0gaDsKKyAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
ICh3aWRnZXQsICZhbGxvY2F0aW9uKTsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50Zigi
aW5pdGlhbCBhbGxvY2F0aW9uICVkICVkICVkICVkXG4iLCB4LCB5LCB3LCBoKTsKKyNlbmRpZgor
CisgIHh0YmluLT53aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgeHRiaW4tPmhl
aWdodCA9IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisKKyAgLyogdXNlIEd0a1NvY2tldCdz
IHJlYWxpemUgKi8KKyAgKCpHVEtfV0lER0VUX0NMQVNTKHBhcmVudF9jbGFzcyktPnJlYWxpemUp
KHdpZGdldCk7CisKKyAgLyogY3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0ICovCisgIHh0X2Ns
aWVudF9jcmVhdGUoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgICBndGtfc29ja2V0X2dldF9p
ZChHVEtfU09DS0VUKHh0YmluKSksIAorICAgICAgIHh0YmluLT5oZWlnaHQsIAorICAgICAgIHh0
YmluLT53aWR0aCk7CisgIHh0YmluLT54dHdpbmRvdyA9IFh0V2luZG93KHh0YmluLT54dGNsaWVu
dC5jaGlsZF93aWRnZXQpOworCisgIGdka19mbHVzaCgpOworCisgIC8qIG5vdyB0aGF0IHdlIGhh
dmUgY3JlYXRlZCB0aGUgeHQgY2xpZW50LCBhZGQgaXQgdG8gdGhlIHNvY2tldC4gKi8KKyAgZ3Rr
X3NvY2tldF9hZGRfaWQoR1RLX1NPQ0tFVCh3aWRnZXQpLCB4dGJpbi0+eHR3aW5kb3cpOworfQor
CisKKworR3RrV2lkZ2V0KgorZ3RrX3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93
LCBTdHJpbmcgKiBmKQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIGdwb2ludGVyIHVzZXJfZGF0
YTsKKworICBhc3NlcnQocGFyZW50X3dpbmRvdyAhPSBOVUxMKTsKKyAgeHRiaW4gPSBndGtfdHlw
ZV9uZXcgKEdUS19UWVBFX1hUQklOKTsKKworICBpZiAoIXh0YmluKQorICAgIHJldHVybiAoR3Rr
V2lkZ2V0KilOVUxMOworCisgIGlmIChmKQorICAgIGZhbGxiYWNrID0gZjsKKworICAvKiBJbml0
aWFsaXplIHRoZSBYdCB0b29sa2l0ICovCisgIHh0YmluLT5wYXJlbnRfd2luZG93ID0gcGFyZW50
X3dpbmRvdzsKKworICB4dF9jbGllbnRfaW5pdCgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAg
R0RLX1ZJU1VBTF9YVklTVUFMKGdka19yZ2JfZ2V0X3Zpc3VhbCgpKSwKKyAgICAgIEdES19DT0xP
Uk1BUF9YQ09MT1JNQVAoZ2RrX3JnYl9nZXRfY29sb3JtYXAoKSksCisgICAgICBnZGtfcmdiX2dl
dF92aXN1YWwoKS0+ZGVwdGgpOworCisgIGlmICgheHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxheSkg
eworICAgIC8qIElmIFh0T3BlbkRpc3BsYXkgZmFpbGVkLCB3ZSBjYW4ndCBnbyBhbnkgZnVydGhl
ci4KKyAgICAgKiAgQmFpbCBvdXQuCisgICAgICovCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBw
cmludGYoImd0a194dGJpbl9pbml0OiBYdE9wZW5EaXNwbGF5KCkgcmV0dXJuZWQgTlVMTC5cbiIp
OworI2VuZGlmCisgICAgZ19mcmVlICh4dGJpbik7CisgICAgcmV0dXJuIChHdGtXaWRnZXQgKilO
VUxMOworICB9CisKKyAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnVubmluZyB3aWRnZXQsIGhv
b2sgdGhpcyBkaXNwbGF5IGludG8gdGhlCisgICAgIG1haW5sb29wICovCisgIGlmICgwID09IG51
bV93aWRnZXRzKSB7CisgICAgaW50ICAgICAgICAgICBjbnVtYmVyOworICAgIC8qCisgICAgICog
aG9vayBYdCBldmVudCBsb29wIGludG8gdGhlIGdsaWIgZXZlbnQgbG9vcC4KKyAgICAgKi8KKwor
ICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZ3RrX2luaXQgaGFzIGFscmVhZHkgYmVlbiBj
YWxsZWQgKi8KKyAgICBHU291cmNlKiBncyA9IGdfc291cmNlX25ldygmeHRfZXZlbnRfZnVuY3Ms
IHNpemVvZihHU291cmNlKSk7CisgICAgICBpZiAoIWdzKSB7CisgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgICB9CisgICAgCisgICAgZ19zb3VyY2Vfc2V0X3ByaW9yaXR5KGdzLCBHREtfUFJJT1JJ
VFlfRVZFTlRTKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FuX3JlY3Vyc2UoZ3MsIFRSVUUpOworICAg
IHRhZyA9IGdfc291cmNlX2F0dGFjaChncywgKEdNYWluQ29udGV4dCopTlVMTCk7CisjaWZkZWYg
Vk1TCisgICAgY251bWJlciA9IFhDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZWxzZQor
ICAgIGNudW1iZXIgPSBDb25uZWN0aW9uTnVtYmVyKHh0ZGlzcGxheSk7CisjZW5kaWYKKyAgICB4
dF9ldmVudF9wb2xsX2ZkLmZkID0gY251bWJlcjsKKyAgICB4dF9ldmVudF9wb2xsX2ZkLmV2ZW50
cyA9IEdfSU9fSU47IAorICAgIHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyA9IDA7ICAgIC8qIGht
bS4uLiBpcyB0aGlzIGNvcnJlY3Q/ICovCisKKyAgICBnX21haW5fY29udGV4dF9hZGRfcG9sbCAo
KEdNYWluQ29udGV4dCopTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4dF9l
dmVudF9wb2xsX2ZkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9M
T1cpOworICAgIC8qIGFkZCBhIHRpbWVyIHNvIHRoYXQgd2UgY2FuIHBvbGwgYW5kIHByb2Nlc3Mg
WHQgdGltZXJzICovCisgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9CisgICAgICBndGtfdGltZW91
dF9hZGQoMjUsCisgICAgICAgICAgICAgICAgICAgICAgKEd0a0Z1bmN0aW9uKXh0X2V2ZW50X3Bv
bGxpbmdfdGltZXJfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgeHRkaXNwbGF5KTsK
KyAgfQorCisgIC8qIEJ1bXAgdXAgb3VyIHVzYWdlIGNvdW50ICovCisgIG51bV93aWRnZXRzKys7
CisKKyAgLyogQnVpbGQgdGhlIGhpZXJhY2h5ICovCisgIHh0YmluLT54dGRpc3BsYXkgPSB4dGJp
bi0+eHRjbGllbnQueHRkaXNwbGF5OworICBndGtfd2lkZ2V0X3NldF9wYXJlbnRfd2luZG93KEdU
S19XSURHRVQoeHRiaW4pLCBwYXJlbnRfd2luZG93KTsKKyAgZ2RrX3dpbmRvd19nZXRfdXNlcl9k
YXRhKHh0YmluLT5wYXJlbnRfd2luZG93LCAmdXNlcl9kYXRhKTsKKyAgaWYgKHVzZXJfZGF0YSkK
KyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHVzZXJfZGF0YSksIEdUS19XSURH
RVQoeHRiaW4pKTsKKworICByZXR1cm4gR1RLX1dJREdFVCAoeHRiaW4pOworfQorCit2b2lkCitn
dGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
IHkpCit7CisgIHh0YmluLT54ID0geDsKKyAgeHRiaW4tPnkgPSB5OworCisgIGlmIChHVEtfV0lE
R0VUX1JFQUxJWkVEICh4dGJpbikpCisgICAgZ2RrX3dpbmRvd19tb3ZlIChHVEtfV0lER0VUICh4
dGJpbiktPndpbmRvdywgeCwgeSk7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9yZXNpemUgKEd0a1dp
ZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB3aWR0aCwKKyAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KQoreworICBBcmcgYXJnc1syXTsKKyAgR3Rr
WHRCaW4gKnh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworICBHdGtBbGxvY2F0aW9uIGFsbG9j
YXRpb247CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9yZXNpemUg
JXAgJWQgJWRcbiIsICh2b2lkICopd2lkZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyNlbmRpZgorCisg
IHh0YmluLT5oZWlnaHQgPSBoZWlnaHQ7CisgIHh0YmluLT53aWR0aCAgPSB3aWR0aDsKKworICAv
LyBBdm9pZCBCYWRWYWx1ZSBlcnJvcnMgaW4gWHRTZXRWYWx1ZXMKKyAgaWYgKGhlaWdodCA8PSAw
IHx8IHdpZHRoIDw9MCkgeworICAgIGhlaWdodCA9IDE7CisgICAgd2lkdGggPSAxOworICB9Cisg
IFh0U2V0QXJnKGFyZ3NbMF0sIFh0TmhlaWdodCwgaGVpZ2h0KTsKKyAgWHRTZXRBcmcoYXJnc1sx
XSwgWHROd2lkdGgsICB3aWR0aCk7CisgIFh0U2V0VmFsdWVzKHh0YmluLT54dGNsaWVudC50b3Bf
d2lkZ2V0LCBhcmdzLCAyKTsKKworICAvKiB3ZSBuZWVkIHRvIHNlbmQgYSBzaXplIGFsbG9jYXRl
IHNvIHRoZSBzb2NrZXQga25vd3MgYWJvdXQgdGhlCisgICAgIHNpemUgY2hhbmdlcyAqLworICBh
bGxvY2F0aW9uLnggPSB4dGJpbi0+eDsKKyAgYWxsb2NhdGlvbi55ID0geHRiaW4tPnk7CisgIGFs
bG9jYXRpb24ud2lkdGggPSB4dGJpbi0+d2lkdGg7CisgIGFsbG9jYXRpb24uaGVpZ2h0ID0geHRi
aW4tPmhlaWdodDsKKworICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUod2lkZ2V0LCAmYWxsb2Nh
dGlvbik7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fdW5yZWFsaXplIChHdGtXaWRnZXQg
Km9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworICBHdGtXaWRnZXQgKndpZGdldDsKKwor
I2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3VucmVhbGl6ZSgpXG4iKTsK
KyNlbmRpZgorCisgIC8qIGd0a19vYmplY3RfZGVzdHJveSgpIHdpbGwgYWxyZWFkeSBob2xkIGEg
cmVmY291bnQgb24gb2JqZWN0CisgICAqLworICB4dGJpbiA9IEdUS19YVEJJTihvYmplY3QpOwor
ICB3aWRnZXQgPSBHVEtfV0lER0VUKG9iamVjdCk7CisKKyAgR1RLX1dJREdFVF9VTlNFVF9GTEFH
UyAod2lkZ2V0LCBHVEtfVklTSUJMRSk7CisgIGlmIChHVEtfV0lER0VUX1JFQUxJWkVEICh3aWRn
ZXQpKSB7CisgICAgeHRfY2xpZW50X3VucmVhbGl6ZSgmKHh0YmluLT54dGNsaWVudCkpOworICB9
CisKKyAgKCpHVEtfV0lER0VUX0NMQVNTIChwYXJlbnRfY2xhc3MpLT51bnJlYWxpemUpKHdpZGdl
dCk7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5fZGVzdHJveSAoR3RrT2JqZWN0ICpvYmpl
Y3QpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50
ZigiZ3RrX3h0YmluX2Rlc3Ryb3koKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWls
IChvYmplY3QgIT0gTlVMTCk7CisgIGdfcmV0dXJuX2lmX2ZhaWwgKEdUS19JU19YVEJJTiAob2Jq
ZWN0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKG9iamVjdCk7CisKKyAgaWYoeHRiaW4tPnh0
d2luZG93KSB7CisgICAgLyogcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyICovCisgICAgeHRfY2xp
ZW50X2Rlc3Ryb3koJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgICB4dGJpbi0+eHR3aW5kb3cgPSAw
OworCisgICAgbnVtX3dpZGdldHMtLTsgLyogcmVkdWNlIG91ciB1c2FnZSBjb3VudCAqLworCisg
ICAgLyogSWYgdGhpcyBpcyB0aGUgbGFzdCBydW5uaW5nIHdpZGdldCwgcmVtb3ZlIHRoZSBYdCBk
aXNwbGF5CisgICAgICAgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWlubG9vcCAqLworICAgIGlmICgw
ID09IG51bV93aWRnZXRzKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigicmVt
b3ZpbmcgdGhlIFh0IGNvbm5lY3Rpb24gZnJvbSB0aGUgbWFpbiBsb29wXG4iKTsKKyNlbmRpZgor
ICAgICAgZ19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwoKEdNYWluQ29udGV4dCopTlVMTCwgJnh0
X2V2ZW50X3BvbGxfZmQpOworICAgICAgZ19zb3VyY2VfcmVtb3ZlKHRhZyk7CisKKyAgICAgIGd0
a190aW1lb3V0X3JlbW92ZSh4dF9wb2xsaW5nX3RpbWVyX2lkKTsKKyAgICAgIHh0X3BvbGxpbmdf
dGltZXJfaWQgPSAwOworICAgIH0KKyAgfQorCisgIEdUS19PQkpFQ1RfQ0xBU1MocGFyZW50X2Ns
YXNzKS0+ZGVzdHJveShvYmplY3QpOworfQorCisvKgorKiBGb2xsb3dpbmcgaXMgdGhlIGltcGxl
bWVudGF0aW9uIG9mIFh0IFhFbWJlZGRlZCBmb3IgY2xpZW50IHNpZGUKKyovCisKKy8qIEluaXRp
YWwgWHQgcGx1Z2luICovCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2luaXQoIFh0Q2xpZW50ICog
eHRjbGllbnQsIAorICAgICAgICAgICAgICAgIFZpc3VhbCAqeHR2aXN1YWwsIAorICAgICAgICAg
ICAgICAgIENvbG9ybWFwIHh0Y29sb3JtYXAsCisgICAgICAgICAgICAgICAgaW50IHh0ZGVwdGgp
Cit7CisgIFh0QXBwQ29udGV4dCAgYXBwX2NvbnRleHQ7CisgIGNoYXIgICAgICAgICAqbUFyZ3Zb
MV07CisgIGludCAgICAgICAgICAgbUFyZ2MgPSAwOworCisgIC8qCisgICAqIEluaXRpYWxpemUg
WHQgc3R1ZmYKKyAgICovCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGll
bnQtPmNoaWxkX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT54dGRpc3BsYXkgID0gTlVMTDsK
KyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSBOVUxMOworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9
IDA7CisgIHh0Y2xpZW50LT54dGRlcHRoID0gMDsKKworICBpZiAoIXh0X2lzX2luaXRpYWxpemVk
KSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoInN0YXJ0aW5nIHVwIFh0IHN0dWZm
XG4iKTsKKyNlbmRpZgorICAgIFh0VG9vbGtpdEluaXRpYWxpemUoKTsKKyAgICBhcHBfY29udGV4
dCA9IFh0Q3JlYXRlQXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgaWYgKGZhbGxiYWNrKQorICAg
ICAgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcyhhcHBfY29udGV4dCwgZmFsbGJhY2spOworCisg
ICAgeHRkaXNwbGF5ID0gWHRPcGVuRGlzcGxheShhcHBfY29udGV4dCwgZ2RrX2dldF9kaXNwbGF5
KCksIE5VTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXcmFwcGVyIiwgTlVMTCwg
MCwgJm1BcmdjLCBtQXJndik7CisgICAgaWYgKHh0ZGlzcGxheSkKKyAgICAgIHh0X2lzX2luaXRp
YWxpemVkID0gVFJVRTsKKyAgfQorICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IHh0ZGlzcGxheTsK
KyAgeHRjbGllbnQtPnh0dmlzdWFsICAgPSB4dHZpc3VhbDsKKyAgeHRjbGllbnQtPnh0Y29sb3Jt
YXAgPSB4dGNvbG9ybWFwOworICB4dGNsaWVudC0+eHRkZXB0aCAgICA9IHh0ZGVwdGg7Cit9CisK
Ky8qIENyZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldHMKKyogICovCitzdGF0aWMgdm9pZAoreHRf
Y2xpZW50X2NyZWF0ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCAsIAorICAgICAgICAgICAgICAgICAg
IFdpbmRvdyBlbWJlZGRlcmlkLCAKKyAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LCAKKyAg
ICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKSAKK3sKKyAgaW50ICAgICAgICAgICBuOworICBB
cmcgICAgICAgICAgIGFyZ3NbNl07CisgIFdpZGdldCAgICAgICAgY2hpbGRfd2lkZ2V0OworICBX
aWRnZXQgICAgICAgIHRvcF93aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYo
Inh0X2NsaWVudF9jcmVhdGUoKSBcbiIpOworI2VuZGlmCisgIHRvcF93aWRnZXQgPSBYdEFwcENy
ZWF0ZVNoZWxsKCJkcmF3aW5nQXJlYSIsICJXcmFwcGVyIiwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSB0b3Bf
d2lkZ2V0OworCisgIC8qIHNldCBzaXplIG9mIFh0IHdpbmRvdyAqLworICBuID0gMDsKKyAgWHRT
ZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOworICBYdFNldEFyZyhhcmdz
W25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRWYWx1ZXModG9wX3dpZGdldCwg
YXJncywgbik7CisKKyAgY2hpbGRfd2lkZ2V0ID0gWHRWYUNyZWF0ZVdpZGdldCgiZm9ybSIsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVdpZGdldENsYXNzLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0LCBOVUxMKTsKKwor
ICBuID0gMDsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROaGVpZ2h0LCAgIGhlaWdodCk7bisrOwor
ICBYdFNldEFyZyhhcmdzW25dLCBYdE53aWR0aCwgICAgd2lkdGgpO24rKzsKKyAgWHRTZXRBcmco
YXJnc1tuXSwgWHROdmlzdWFsLCAgIHh0Y2xpZW50LT54dHZpc3VhbCApOyBuKys7CisgIFh0U2V0
QXJnKGFyZ3Nbbl0sIFh0TmRlcHRoLCAgICB4dGNsaWVudC0+eHRkZXB0aCApOyBuKys7CisgIFh0
U2V0QXJnKGFyZ3Nbbl0sIFh0TmNvbG9ybWFwLCB4dGNsaWVudC0+eHRjb2xvcm1hcCApOyBuKys7
CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmJvcmRlcldpZHRoLCAwKTsgbisrOworICBYdFNldFZh
bHVlcyhjaGlsZF93aWRnZXQsIGFyZ3MsIG4pOworCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3Bs
YXksIEZBTFNFKTsKKyAgeHRjbGllbnQtPm9sZHdpbmRvdyA9IHRvcF93aWRnZXQtPmNvcmUud2lu
ZG93OworICB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyA9IGVtYmVkZGVyaWQ7CisKKyAgLyogdGhp
cyBsaXR0bGUgdHJpY2sgc2VlbXMgdG8gZmluaXNoIGluaXRpYWxpemluZyB0aGUgd2lkZ2V0ICov
CisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49IDYKKyAgWHRSZWdpc3RlckRyYXdhYmxl
KHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZXJpZCwK
KyAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRnZXQpOworI2Vsc2UKKyAgX1h0UmVnaXN0ZXJX
aW5kb3coIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAgICB0b3Bfd2lkZ2V0KTsKKyNl
bmRpZgorICBYdFJlYWxpemVXaWRnZXQoY2hpbGRfd2lkZ2V0KTsKKworICAvKiBsaXN0ZW4gdG8g
YWxsIFh0IGV2ZW50cyAqLworICBYU2VsZWN0SW5wdXQoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisg
ICAgICAgICAgICAgICBYdFdpbmRvdyh0b3Bfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAweDBG
RkZGRik7CisgIHh0X2NsaWVudF9zZXRfaW5mbyAoY2hpbGRfd2lkZ2V0LCAwKTsKKworICBYdE1h
bmFnZUNoaWxkKGNoaWxkX3dpZGdldCk7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBjaGls
ZF93aWRnZXQ7CisKKyAgLyogc2V0IHRoZSBldmVudCBoYW5kbGVyICovCisgIFh0QWRkRXZlbnRI
YW5kbGVyKGNoaWxkX3dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkYgJiB+UmVz
aXplUmVkaXJlY3RNYXNrLAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAgICAgICAg
ICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVu
dCk7CisgIFh0QWRkRXZlbnRIYW5kbGVyKGNoaWxkX3dpZGdldCwgCisgICAgICAgICAgICAgICAg
ICAgIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAg
ICAgICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIp
eHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQp
OworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lk
Cit4dF9jbGllbnRfdW5yZWFsaXplICggWHRDbGllbnQqIHh0Y2xpZW50ICkKK3sKKyNpZiBYbGli
U3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFVucmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVu
dC0+eHRkaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdl
dC0+Y29yZS53aW5kb3cpOworI2Vsc2UKKyAgX1h0VW5yZWdpc3RlcldpbmRvdyh4dGNsaWVudC0+
dG9wX3dpZGdldC0+Y29yZS53aW5kb3csCisgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQt
PnRvcF93aWRnZXQpOworI2VuZGlmCisKKyAgLyogZmx1c2ggdGhlIHF1ZXVlIGJlZm9yZSB3ZSBy
ZXR1cm5pbmcgb3JpZ2luIHRvcF93aWRnZXQtPmNvcmUud2luZG93CisgICAgIG9yIHdlIGNhbiBn
ZXQgWCBlcnJvciBzaW5jZSB0aGUgd2luZG93IGlzIGdvbmUgKi8KKyAgWFN5bmMoeHRjbGllbnQt
Pnh0ZGlzcGxheSwgRmFsc2UpOworCisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRv
dyA9IHh0Y2xpZW50LT5vbGR3aW5kb3c7CisgIFh0VW5yZWFsaXplV2lkZ2V0KHh0Y2xpZW50LT50
b3Bfd2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAgICAKK3h0X2NsaWVudF9kZXN0
cm95ICAgKFh0Q2xpZW50KiB4dGNsaWVudCkKK3sKKyAgaWYoeHRjbGllbnQtPnRvcF93aWRnZXQp
IHsKKyAgICBYdFJlbW92ZUV2ZW50SGFuZGxlcih4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0LCAweDBG
RkZGRiwgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0
X2NsaWVudF9ldmVudF9oYW5kbGVyLCB4dGNsaWVudCk7CisgICAgWHREZXN0cm95V2lkZ2V0KHh0
Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgICB4dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7Cisg
IH0KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9zZXRfaW5mbyAoV2lkZ2V0
IHh0cGx1ZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAgdW5zaWduZWQgbG9uZyBidWZmZXJb
Ml07CisKKyAgQXRvbSBpbmZvQXRvbSA9IFhJbnRlcm5BdG9tKFh0RGlzcGxheSh4dHBsdWcpLCAi
X1hFTUJFRF9JTkZPIiwgRmFsc2UpOyAKKworICBidWZmZXJbMV0gPSAwOyAgICAgICAgICAgICAg
ICAvKiBQcm90b2NvbCB2ZXJzaW9uICovCisgIGJ1ZmZlclsxXSA9IGZsYWdzOworCisgIFhDaGFu
Z2VQcm9wZXJ0eSAoWHREaXNwbGF5KHh0cGx1ZyksIFh0V2luZG93KHh0cGx1ZyksCisgICAgICAg
ICAgICAgICAgICAgaW5mb0F0b20sIGluZm9BdG9tLCAzMiwKKyAgICAgICAgICAgICAgICAgICBQ
cm9wTW9kZVJlcGxhY2UsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilidWZm
ZXIsIDIpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2Fn
ZShXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBY
dENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgc3dpdGNoIChldmVu
dC0+eGNsaWVudC5kYXRhLmxbMV0pCisgIHsKKyAgY2FzZSBYRU1CRURfRU1CRURERURfTk9USUZZ
OgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEU6CisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX1dJTkRPV19BQ1RJVkFU
RVxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfV0lORE9XX0RFQUNUSVZB
VEU6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVE
X1dJTkRPV19ERUFDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJF
RF9NT0RBTElUWV9PTjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50
IGdldCBYRU1CRURfTU9EQUxJVFlfT05cbiIpOworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2Ug
WEVNQkVEX01PREFMSVRZX09GRjoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQg
Y2xpZW50IGdldCBYRU1CRURfTU9EQUxJVFlfT0ZGXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOwor
ICBjYXNlIFhFTUJFRF9GT0NVU19JTjoKKyAgY2FzZSBYRU1CRURfRk9DVVNfT1VUOgorICAgIHsK
KyAgICAgIFhFdmVudCB4ZXZlbnQ7CisgICAgICBtZW1zZXQoJnhldmVudCwgMCwgc2l6ZW9mKHhl
dmVudCkpOworCisgICAgICBpZihldmVudC0+eGNsaWVudC5kYXRhLmxbMV0gPT0gWEVNQkVEX0ZP
Q1VTX0lOKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdv
dCBmb2N1cyBpblxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9j
dXNJbjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgICAg
IHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgb3V0XG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZl
bnQueGZvY3VzLnR5cGUgPSBGb2N1c091dDsKKyAgICAgIH0KKworICAgICAgeGV2ZW50Lnhmb2N1
cy53aW5kb3cgPSBYdFdpbmRvdyh4dHBsdWctPmNoaWxkX3dpZGdldCk7CisgICAgICB4ZXZlbnQu
eGZvY3VzLmRpc3BsYXkgPSBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAg
WFNlbmRFdmVudChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRnZXQpLCAKKyAgICAgICAgICAg
ICAgICAgeGV2ZW50Lnhmb2N1cy53aW5kb3csCisgICAgICAgICAgICAgICAgIEZhbHNlLCBOb0V2
ZW50TWFzaywKKyAgICAgICAgICAgICAgICAgJnhldmVudCApOworICAgICAgWFN5bmMoIFh0RGlz
cGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksIEZhbHNlKTsKKyAgICB9CisgICAgYnJlYWs7Cisg
IGRlZmF1bHQ6CisgICAgYnJlYWs7CisgIH0gLyogRW5kIG9mIFhFbWJlZCBNZXNzYWdlICovCit9
CisKK3N0YXRpYyB2b2lkICAgICAgICAgCit4dF9jbGllbnRfZXZlbnRfaGFuZGxlciggV2lkZ2V0
IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQg
Knh0cGx1ZyA9IChYdENsaWVudCopY2xpZW50X2RhdGE7CisgIAorICBzd2l0Y2goZXZlbnQtPnR5
cGUpCisgICAgeworICAgIGNhc2UgQ2xpZW50TWVzc2FnZToKKyAgICAgIC8qIEhhbmRsZSB4ZW1i
ZWQgbWVzc2FnZSAqLworICAgICAgaWYgKGV2ZW50LT54Y2xpZW50Lm1lc3NhZ2VfdHlwZT09Cisg
ICAgICAgICAgICAgICAgIFhJbnRlcm5BdG9tIChYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRn
ZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9YRU1CRUQiLCBGYWxzZSkpIHsK
KyAgICAgICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSh3LCBjbGllbnRfZGF0YSwg
ZXZlbnQpOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXBhcmVudE5vdGlmeToK
KyAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwcGluZ05vdGlmeToKKyAgICAgIHh0X2NsaWVudF9z
ZXRfaW5mbyAodywgWEVNQkVEX01BUFBFRCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIFVubWFw
Tm90aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCAwKTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9jdXNJbjoKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4dHBsdWcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAs
IDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c091dDoKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgS2V5UHJlc3M6CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICAgIHByaW50ZigiS2V5IFBy
ZXNzIEdvdCFcbiIpOworI2VuZGlmCisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
YnJlYWs7CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0
aWMgdm9pZAorc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgICp4dGNsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAg
bG9uZyAgICAgIGRldGFpbCwgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGF0YTEs
ICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkYXRhMiwgIAorICAgICAgICAgICAg
ICAgICAgICAgbG9uZyAgICAgIHRpbWUpICAgCit7CisgIFhFdmVudCB4ZXZlbnQ7IAorICBXaW5k
b3cgdz1YdFdpbmRvdyh4dGNsaWVudC0+dG9wX3dpZGdldCk7CisgIERpc3BsYXkqIGRweT14dGNs
aWVudC0+eHRkaXNwbGF5OworICBpbnQgZXJyb3Jjb2RlOworCisgIG1lbXNldCgmeGV2ZW50LDAs
c2l6ZW9mKHhldmVudCkpOworICB4ZXZlbnQueGNsaWVudC53aW5kb3cgPSB3OworICB4ZXZlbnQu
eGNsaWVudC50eXBlID0gQ2xpZW50TWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQubWVzc2FnZV90
eXBlID0gWEludGVybkF0b20oZHB5LCJfWEVNQkVEIixGYWxzZSk7CisgIHhldmVudC54Y2xpZW50
LmZvcm1hdCA9IDMyOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMF0gPSB0aW1lOyAKKyAgeGV2
ZW50LnhjbGllbnQuZGF0YS5sWzFdID0gbWVzc2FnZTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5s
WzJdID0gZGV0YWlsOyAKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzNdID0gZGF0YTE7CisgIHhl
dmVudC54Y2xpZW50LmRhdGEubFs0XSA9IGRhdGEyOworCisgIHRyYXBfZXJyb3JzICgpOworICBY
U2VuZEV2ZW50IChkcHksIHcsIEZhbHNlLCBOb0V2ZW50TWFzaywgJnhldmVudCk7CisgIFhTeW5j
IChkcHksRmFsc2UpOworCisgIGlmKChlcnJvcmNvZGUgPSB1bnRyYXBfZXJyb3IoKSkpIHsKKyNp
ZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic2VuZF94ZW1iZWRfbWVzc2FnZSBlcnJvcigl
ZCkhISFcbiIsZXJyb3Jjb2RlKTsKKyNlbmRpZgorICB9Cit9CisKK3N0YXRpYyBpbnQgICAgICAg
ICAgICAgCitlcnJvcl9oYW5kbGVyKERpc3BsYXkgKmRpc3BsYXksIFhFcnJvckV2ZW50ICplcnJv
cikKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0gZXJyb3ItPmVycm9yX2NvZGU7CisgIHJldHVy
biAwOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAKK3RyYXBfZXJyb3JzKHZvaWQpCit7Cisg
IHRyYXBwZWRfZXJyb3JfY29kZSA9MDsKKyAgb2xkX2Vycm9yX2hhbmRsZXIgPSBYU2V0RXJyb3JI
YW5kbGVyKGVycm9yX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50ICAgICAgICAgCit1bnRyYXBf
ZXJyb3Iodm9pZCkKK3sKKyAgWFNldEVycm9ySGFuZGxlcihvbGRfZXJyb3JfaGFuZGxlcik7Cisg
IGlmKHRyYXBwZWRfZXJyb3JfY29kZSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRm
KCJHZXQgWCBXaW5kb3cgRXJyb3IgPSAlZFxuIiwgdHJhcHBlZF9lcnJvcl9jb2RlKTsKKyNlbmRp
ZgorICB9CisgIHJldHVybiB0cmFwcGVkX2Vycm9yX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkICAg
ICAgICAgCit4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgdXNl
cl9kYXRhLCBYRXZlbnQgKmV2ZW50KQoreworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodyk7
CisgIFh0Q2xpZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgV2luZG93IHdpbiA9IFh0V2lu
ZG93KHcpOworCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDcmVhdGVO
b3RpZnk6CisgICAgICBpZihldmVudC0+eGNyZWF0ZXdpbmRvdy5wYXJlbnQgPT0gd2luKSB7Cisg
ICAgICAgIFdpZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KCBkcHksIGV2ZW50LT54Y3JlYXRl
d2luZG93LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9j
dXNfbGlzdGVuZXJfdHJlZShjaGlsZCwgdXNlcl9kYXRhKTsKKyAgICAgIH0KKyAgICAgIGJyZWFr
OworICAgIGNhc2UgRGVzdHJveU5vdGlmeToKKyAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5l
ciggdywgdXNlcl9kYXRhKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6
CisgICAgICBpZihldmVudC0+eHJlcGFyZW50LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgLyog
SSBhbSB0aGUgbmV3IHBhcmVudCAqLworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRXaW5kb3dUb1dp
ZGdldChkcHksIGV2ZW50LT54cmVwYXJlbnQud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQor
ICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsK
KyAgICAgIH0KKyAgICAgIGVsc2UgaWYoZXZlbnQtPnhyZXBhcmVudC53aW5kb3cgPT0gd2luKSB7
CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBjaGlsZCAqLworICAgICAgfQorICAgICAgZWxzZSB7
CisgICAgICAgIC8qIEkgYW0gdGhlIG9sZCBwYXJlbnQgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFr
OworICAgIGNhc2UgQnV0dG9uUmVsZWFzZToKKyNpZiAwCisgICAgICBYU2V0SW5wdXRGb2N1cyhk
cHksIFh0V2luZG93KHh0Y2xpZW50LT5jaGlsZF93aWRnZXQpLCBSZXZlcnRUb1BhcmVudCwgZXZl
bnQtPnhidXR0b24udGltZSk7CisjZW5kaWYKKyAgICAgIHNlbmRfeGVtYmVkX21lc3NhZ2UgKCB4
dGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9GT0NV
UywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7
CisgICAgfSAvKiBFbmQgb2Ygc3dpdGNoKGV2ZW50LT50eXBlKSAqLworfQorCitzdGF0aWMgdm9p
ZAoreHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkK
K3sKKyAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgbG9uZyBldmVudG1hc2s7CisgIFh0Q2xp
ZW50ICp4dGNsaWVudCA9IHVzZXJfZGF0YTsKKyAgaW50IGVycm9yY29kZTsKKworICB0cmFwX2Vy
cm9ycyAoKTsKKyAgWEdldFdpbmRvd0F0dHJpYnV0ZXMoWHREaXNwbGF5KHcpLCBYdFdpbmRvdyh3
KSwgJmF0dHIpOworICBldmVudG1hc2sgPSBhdHRyLnlvdXJfZXZlbnRfbWFzayB8IFN1YnN0cnVj
dHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzazsKKyAgWFNlbGVjdElucHV0KFh0RGlz
cGxheSh3KSwKKyAgICAgICAgICAgICAgIFh0V2luZG93KHcpLCAKKyAgICAgICAgICAgICAgIGV2
ZW50bWFzayk7CisKKyAgWHRBZGRFdmVudEhhbmRsZXIodywgCisgICAgICAgICAgICAgICAgICAg
IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25SZWxlYXNlTWFzaywgCisgICAgICAgICAg
ICAgICAgICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRf
Y2xpZW50X2ZvY3VzX2xpc3RlbmVyLCAKKyAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQpOwor
ICB1bnRyYXBfZXJyb3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X3JlbW92ZV9mb2N1c19saXN0
ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSkKK3sKKyAgaW50IGVycm9yY29kZTsK
KworICB0cmFwX2Vycm9ycyAoKTsKKyAgWHRSZW1vdmVFdmVudEhhbmRsZXIodywgU3Vic3RydWN0
dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrLCBUUlVFLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2ZvY3VzX2xpc3RlbmVyLCB1c2VyX2Rh
dGEpOworCisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfYWRkX2ZvY3Vz
X2xpc3RlbmVyX3RyZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpIAor
eworICBXaW5kb3cgd2luID0gWHRXaW5kb3codHJlZXJvb3QpOworICBXaW5kb3cgKmNoaWxkcmVu
OworICBXaW5kb3cgcm9vdCwgcGFyZW50OworICBEaXNwbGF5ICpkcHkgPSBYdERpc3BsYXkodHJl
ZXJvb3QpOworICB1bnNpZ25lZCBpbnQgaSwgbmNoaWxkcmVuOworCisgIC8qIGVuc3VyZSB3ZSBk
b24ndCBhZGQgbW9yZSB0aGFuIG9uY2UgKi8KKyAgeHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB0
cmVlcm9vdCwgdXNlcl9kYXRhKTsKKyAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCB0cmVlcm9vdCwg
dXNlcl9kYXRhKTsKKyAgdHJhcF9lcnJvcnMoKTsKKyAgaWYoIVhRdWVyeVRyZWUoZHB5LCB3aW4s
ICZyb290LCAmcGFyZW50LCAmY2hpbGRyZW4sICZuY2hpbGRyZW4pKSB7CisgICAgdW50cmFwX2Vy
cm9yKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYodW50cmFwX2Vycm9yKCkpIAorICAgIHJl
dHVybjsKKworICBmb3IoaT0wOyBpPG5jaGlsZHJlbjsgKytpKSB7CisgICAgV2lkZ2V0IGNoaWxk
ID0gWHRXaW5kb3dUb1dpZGdldChkcHksIGNoaWxkcmVuW2ldKTsKKyAgICBpZiAoY2hpbGQpIAor
ICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICB9
CisgIFhGcmVlKCh2b2lkKiljaGlsZHJlbik7CisKKyAgcmV0dXJuOworfQorCkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0
azJ4dGJpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OSBAQAorLyogLSotIE1vZGU6IEMr
KzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAy
IC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyog
KioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwg
Mi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVj
dCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGlj
ZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFz
aXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoK
KyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0
aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBp
cworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwg
RGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgor
ICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVz
ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQ
TCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBM
R1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lz
aCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRl
ciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxs
b3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcg
dGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAq
IGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElm
IHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQg
bWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2Yg
YW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVO
RCBMSUNFTlNFIEJMT0NLICoqKioqICovICAgCisKKyNpZm5kZWYgX19HVEtfWFRCSU5fSF9fCisj
ZGVmaW5lIF9fR1RLX1hUQklOX0hfXworCisjaW5jbHVkZSA8Z3RrL2d0a3NvY2tldC5oPgorI2lu
Y2x1ZGUgPFgxMS9JbnRyaW5zaWMuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRl
IDxYMTEvWGxpYi5oPgorI2lmZGVmIE1PWklMTEFfQ0xJRU5UCisjaW5jbHVkZSAibnNjb3JlLmgi
CisjaWZkZWYgX0lNUExfR1RLWFRCSU5fQVBJCisjZGVmaW5lIEdUS1hUQklOX0FQSSh0eXBlKSBO
U19FWFBPUlRfKHR5cGUpCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfSU1Q
T1JUXyh0eXBlKQorI2VuZGlmCisjZWxzZQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgdHlw
ZQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyog
X19jcGx1c3BsdXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1h0QmluIEd0a1h0QmluOwordHlw
ZWRlZiBzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MgR3RrWHRCaW5DbGFzczsKKworI2RlZmluZSBHVEtf
VFlQRV9YVEJJTiAgICAgICAgICAgICAgICAgIChndGtfeHRiaW5fZ2V0X3R5cGUgKCkpCisjZGVm
aW5lIEdUS19YVEJJTihvYmopICAgICAgICAgICAgICAgICAgKEdUS19DSEVDS19DQVNUICgob2Jq
KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9Y
VEJJTiwgR3RrWHRCaW4pKQorI2RlZmluZSBHVEtfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgICAg
IChHVEtfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJTiwgR3RrWHRCaW5DbGFzcykpCisjZGVm
aW5lIEdUS19JU19YVEJJTihvYmopICAgICAgICAgICAgICAgKEdUS19DSEVDS19UWVBFICgob2Jq
KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9Y
VEJJTikpCisjZGVmaW5lIEdUS19JU19YVEJJTl9DTEFTUyhrbGFzcykgICAgICAgKEdUS19DSEVD
S19DTEFTU19UWVBFICgoa2xhc3MpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKK3R5cGVkZWYgc3RydWN0IF9YdENsaWVudCBYdENs
aWVudDsKKworc3RydWN0IF9YdENsaWVudCB7CisgIERpc3BsYXkJKnh0ZGlzcGxheTsKKyAgV2lk
Z2V0CXRvcF93aWRnZXQ7ICAgIC8qIFRoZSB0b3BsZXZlbCB3aWRnZXQgKi8KKyAgV2lkZ2V0CWNo
aWxkX3dpZGdldDsgIC8qIFRoZSBlbWJlZGRlZCB3aWRnZXQgKi8KKyAgVmlzdWFsCSp4dHZpc3Vh
bDsKKyAgaW50CQl4dGRlcHRoOworICBDb2xvcm1hcAl4dGNvbG9ybWFwOworICBXaW5kb3cJb2xk
d2luZG93OworfTsKKworc3RydWN0IF9HdGtYdEJpbgoreworICBHdGtTb2NrZXQgICAgICBnc29j
a2V0OworICBHZGtXaW5kb3cgICAgICpwYXJlbnRfd2luZG93OworICBEaXNwbGF5ICAgICAgICp4
dGRpc3BsYXk7ICAgICAgICAvKiBYdCBUb29sa2l0IERpc3BsYXkgKi8KKworICBXaW5kb3cgICAg
ICAgICB4dHdpbmRvdzsgICAgICAgICAvKiBYdCBUb29sa2l0IFhXaW5kb3cgKi8KKyAgZ2ludCAg
ICAgICAgICAgeCwgeTsKKyAgZ2ludCAgICAgICAgICAgd2lkdGgsIGhlaWdodDsKKyAgWHRDbGll
bnQJIHh0Y2xpZW50OyAgICAgICAgIC8qIFh0IENsaWVudCBmb3IgWEVtYmVkICovCit9OworICAK
K3N0cnVjdCBfR3RrWHRCaW5DbGFzcworeworICBHdGtTb2NrZXRDbGFzcyB3aWRnZXRfY2xhc3M7
Cit9OworCitHVEtYVEJJTl9BUEkoR3RrVHlwZSkgICAgIGd0a194dGJpbl9nZXRfdHlwZSAodm9p
ZCk7CitHVEtYVEJJTl9BUEkoR3RrV2lkZ2V0ICopIGd0a194dGJpbl9uZXcgKEdka1dpbmRvdyAq
cGFyZW50X3dpbmRvdywgU3RyaW5nICpmKTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICAgZ3Rr
X3h0YmluX3NldF9wb3NpdGlvbiAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeSk7CitH
VEtYVEJJTl9BUEkodm9pZCkgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRn
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAg
ICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50
ICAgICAgIGhlaWdodCk7CisKK3R5cGVkZWYgc3RydWN0IF9YdFRNUmVjIHsKKyAgICBYdFRyYW5z
bGF0aW9ucyAgdHJhbnNsYXRpb25zOyAgICAgICAvKiBwcml2YXRlIHRvIFRyYW5zbGF0aW9uIE1h
bmFnZXIgICAgKi8KKyAgICBYdEJvdW5kQWN0aW9ucyAgcHJvY190YWJsZTsgICAgICAgICAvKiBw
cm9jZWR1cmUgYmluZGluZ3MgZm9yIGFjdGlvbnMgICAgKi8KKyAgICBzdHJ1Y3QgX1h0U3RhdGVS
ZWMgKmN1cnJlbnRfc3RhdGU7ICAvKiBUcmFuc2xhdGlvbiBNYW5hZ2VyIHN0YXRlIHB0ciAgICAg
Ki8KKyAgICB1bnNpZ25lZCBsb25nICAgbGFzdEV2ZW50VGltZTsKK30gWHRUTVJlYywgKlh0VE07
ICAgCisKK3R5cGVkZWYgc3RydWN0IF9Db3JlUGFydCB7CisgICAgV2lkZ2V0ICAgICAgICAgIHNl
bGY7ICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byB3aWRnZXQgaXRzZWxmICAgICAgICAgICov
CisgICAgV2lkZ2V0Q2xhc3MgICAgIHdpZGdldF9jbGFzczsgICAgICAgLyogcG9pbnRlciB0byBX
aWRnZXQncyBDbGFzc1JlYyAgICAgICovCisgICAgV2lkZ2V0ICAgICAgICAgIHBhcmVudDsgICAg
ICAgICAgICAgLyogcGFyZW50IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICovCisgICAgWHJt
TmFtZSAgICAgICAgIHhybV9uYW1lOyAgICAgICAgICAgLyogd2lkZ2V0IHJlc291cmNlIG5hbWUg
cXVhcmtpZmllZCAgICovCisgICAgQm9vbGVhbiAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsgICAg
LyogbWFya2VkIGZvciBkZXN0cm95ICAgICAgICAgICAgICAgICovCisgICAgWHRDYWxsYmFja0xp
c3QgIGRlc3Ryb3lfY2FsbGJhY2tzOyAgLyogd2hvIHRvIGNhbGwgd2hlbiB3aWRnZXQgZGVzdHJv
eWVkICovCisgICAgWHRQb2ludGVyICAgICAgIGNvbnN0cmFpbnRzOyAgICAgICAgLyogY29uc3Ry
YWludCByZWNvcmQgICAgICAgICAgICAgICAgICovCisgICAgUG9zaXRpb24gICAgICAgIHgsIHk7
ICAgICAgICAgICAgICAgLyogd2luZG93IHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICovCisg
ICAgRGltZW5zaW9uICAgICAgIHdpZHRoLCBoZWlnaHQ7ICAgICAgLyogd2luZG93IGRpbWVuc2lv
bnMgICAgICAgICAgICAgICAgICovCisgICAgRGltZW5zaW9uICAgICAgIGJvcmRlcl93aWR0aDsg
ICAgICAgLyogd2luZG93IGJvcmRlciB3aWR0aCAgICAgICAgICAgICAgICovCisgICAgQm9vbGVh
biAgICAgICAgIG1hbmFnZWQ7ICAgICAgICAgICAgLyogaXMgd2lkZ2V0IGdlb21ldHJ5IG1hbmFn
ZWQ/ICAgICAgICovCisgICAgQm9vbGVhbiAgICAgICAgIHNlbnNpdGl2ZTsgICAgICAgICAgLyog
aXMgd2lkZ2V0IHNlbnNpdGl2ZSB0byB1c2VyIGV2ZW50cyovCisgICAgQm9vbGVhbiAgICAgICAg
IGFuY2VzdG9yX3NlbnNpdGl2ZTsgLyogYXJlIGFsbCBhbmNlc3RvcnMgc2Vuc2l0aXZlPyAgICAg
ICovCisgICAgWHRFdmVudFRhYmxlICAgIGV2ZW50X3RhYmxlOyAgICAgICAgLyogcHJpdmF0ZSB0
byBldmVudCBkaXNwYXRjaGVyICAgICAgICovCisgICAgWHRUTVJlYyAgICAgICAgIHRtOyAgICAg
ICAgICAgICAgICAgLyogdHJhbnNsYXRpb24gbWFuYWdlbWVudCAgICAgICAgICAgICovCisgICAg
WHRUcmFuc2xhdGlvbnMgIGFjY2VsZXJhdG9yczsgICAgICAgLyogYWNjZWxlcmF0b3IgdHJhbnNs
YXRpb25zICAgICAgICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJvcmRlcl9waXhlbDsgICAg
ICAgLyogd2luZG93IGJvcmRlciBwaXhlbCAgICAgICAgICAgICAgICovCisgICAgUGl4bWFwICAg
ICAgICAgIGJvcmRlcl9waXhtYXA7ICAgICAgLyogd2luZG93IGJvcmRlciBwaXhtYXAgb3IgTlVM
TCAgICAgICovCisgICAgV2lkZ2V0TGlzdCAgICAgIHBvcHVwX2xpc3Q7ICAgICAgICAgLyogbGlz
dCBvZiBwb3B1cHMgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAgICAgIG51
bV9wb3B1cHM7ICAgICAgICAgLyogaG93IG1hbnkgcG9wdXBzICAgICAgICAgICAgICAgICAgICov
CisgICAgU3RyaW5nICAgICAgICAgIG5hbWU7ICAgICAgICAgICAgICAgLyogd2lkZ2V0IHJlc291
cmNlIG5hbWUgICAgICAgICAgICAgICovCisgICAgU2NyZWVuICAgICAgICAgICpzY3JlZW47ICAg
ICAgICAgICAgLyogd2luZG93J3Mgc2NyZWVuICAgICAgICAgICAgICAgICAgICovCisgICAgQ29s
b3JtYXAgICAgICAgIGNvbG9ybWFwOyAgICAgICAgICAgLyogY29sb3JtYXAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovCisgICAgV2luZG93ICAgICAgICAgIHdpbmRvdzsgICAgICAgICAgICAg
Lyogd2luZG93IElEICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ2FyZGluYWwgICAg
ICAgIGRlcHRoOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHBsYW5lcyBpbiB3aW5kb3cgICAg
ICAgICovCisgICAgUGl4ZWwgICAgICAgICAgIGJhY2tncm91bmRfcGl4ZWw7ICAgLyogd2luZG93
IGJhY2tncm91bmQgcGl4ZWwgICAgICAgICAgICovCisgICAgUGl4bWFwICAgICAgICAgIGJhY2tn
cm91bmRfcGl4bWFwOyAgLyogd2luZG93IGJhY2tncm91bmQgcGl4bWFwIG9yIE5VTEwgICovCisg
ICAgQm9vbGVhbiAgICAgICAgIHZpc2libGU7ICAgICAgICAgICAgLyogaXMgd2luZG93IG1hcHBl
ZCBhbmQgbm90IG9jY2x1ZGVkPyovCisgICAgQm9vbGVhbiAgICAgICAgIG1hcHBlZF93aGVuX21h
bmFnZWQ7LyogbWFwIHdpbmRvdyBpZiBpdCdzIG1hbmFnZWQ/ICAgICAgICovCit9IENvcmVQYXJ0
OworCit0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjIHsKKyAgICBDb3JlUGFydCAgICBjb3JlOwor
IH0gV2lkZ2V0UmVjLCBDb3JlUmVjOyAgIAorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9fR1RLX1hUQklOX0hfXyAqLworCkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hl
bWJlZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKiAtKi0gTW9kZTogQysrOyB0
YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSot
CisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioq
KiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAv
TEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRv
IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNl
Iik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAor
ICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywK
KyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICog
VGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIFhFTUJFRCBEZWNsYXJhdGlvbi4KKyAqCisgKiBUaGUg
SW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5
c3RlbXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVy
IGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2
ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cyBvZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIg
b3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNo
IGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJs
ZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9m
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVp
dGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICog
dXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEws
IGluZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFi
b3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlz
aW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0
ZQorICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1Q
TCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAq
KioqKiAqLworCisvKiBYRU1CRUQgbWVzc2FnZXMgKi8KKyNkZWZpbmUgWEVNQkVEX0VNQkVEREVE
X05PVElGWSAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfQUNUSVZBVEUgICAgICAg
ICAgMQorI2RlZmluZSBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEUgICAgICAgIDIKKyNkZWZpbmUg
WEVNQkVEX1JFUVVFU1RfRk9DVVMgICAgICAgICAgICAzCisjZGVmaW5lIFhFTUJFRF9GT0NVU19J
TiAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBYRU1CRURfRk9DVVNfT1VUICAgICAgICAgICAg
ICAgIDUKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX05FWFQgICAgICAgICAgICAgICA2CisjZGVmaW5l
IFhFTUJFRF9GT0NVU19QUkVWICAgICAgICAgICAgICAgNworI2RlZmluZSBYRU1CRURfR1JBQl9L
RVkgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWEVNQkVEX1VOR1JBQl9LRVkgICAgICAgICAg
ICAgICA5CisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PTiAgICAgICAgICAgICAgMTAKKyNkZWZp
bmUgWEVNQkVEX01PREFMSVRZX09GRiAgICAgICAgICAgICAxMQorCisvKiBOb24gc3RhbmRhcmQg
bWVzc2FnZXMqLworI2RlZmluZSBYRU1CRURfR1RLX0dSQUJfS0VZICAgICAgICAgICAgIDEwOCAK
KyNkZWZpbmUgWEVNQkVEX0dUS19VTkdSQUJfS0VZICAgICAgICAgICAxMDkKKworLyogRGV0YWls
cyBmb3IgIFhFTUJFRF9GT0NVU19JTjogKi8KKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0NVUlJFTlQg
ICAgICAgICAgICAwCisjZGVmaW5lIFhFTUJFRF9GT0NVU19GSVJTVCAgICAgICAgICAgICAgMQor
I2RlZmluZSBYRU1CRURfRk9DVVNfTEFTVCAgICAgICAgICAgICAgIDIKKworLyogRmxhZ3MgZm9y
IF9YRU1CRURfSU5GTyAqLworI2RlZmluZSBYRU1CRURfTUFQUEVEICAgICAgICAgICAgICAgICAg
ICgxIDw8IDApCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJ
KHJldmlzaW9uIDMxMjE3KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMzAgKzY2LDYgQEAgaW50IFBsdWdpblBhY2thZ2U6
OmNvbXBhcmVGaWxlVmVyc2lvbihjbwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUGx1Z2luUGFj
a2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Ci17Ci0g
ICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4K
LSAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICBib29sIEJhbGxvd3NN
dWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NNdWx0aXBsZUlu
c3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0gICAgICAgIHJldHVybiBBYWxs
b3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBsdWctaW5zIGlu
IGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJblByZWZlcnJlZFBhdGggPSBQ
bHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKHBhcmVudERpcmVjdG9yeSgpKTsK
LSAgICBib29sIEJpc0luUHJlZmVycmVkUGF0aCA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJl
ZFBsdWdpblBhdGgoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKLSAgICBpZiAoQWlzSW5Q
cmVmZXJyZWRQYXRoICE9IEJpc0luUHJlZmVycmVkUGF0aCkKLSAgICAgICAgcmV0dXJuIEFpc0lu
UHJlZmVycmVkUGF0aCA/IC0xIDogMTsKLQotICAgIGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51
dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChk
aWZmKQotICAgICAgICByZXR1cm4gZGlmZjsKLQotICAgIGlmIChkaWZmID0gY29tcGFyZUZpbGVW
ZXJzaW9uKGNvbXBhcmVUby52ZXJzaW9uKCkpKQotICAgICAgICByZXR1cm4gZGlmZjsKLQotICAg
IHJldHVybiBzdHJjbXAocGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRv
LnBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCkpOwotfQotCiBib29sIFBsdWdpblBhY2th
Z2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQogewogICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1v
ZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJlZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMzEyMTcp
CisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NTgsNiArODU4LDU4IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdChjb25z
dCBjaGEKICAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9u
LCBub3RpZnlEYXRhKTsKIH0KIAorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgewor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjYXNlIE5QTlZXaW5kb3dO
UE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVS
Ul9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2Jq
ZWN0ID0gbV9wYXJlbnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAg
ICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmli
ZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGlt
ZS5odG1sPgorICAgICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAg
ICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgICAg
ICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHdpbmRvd1Njcmlw
dE9iamVjdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7
CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwor
CisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9l
bGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2Jq
ZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAg
ICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVz
Y3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1
bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAg
ICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAg
ICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5T
Y3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAg
ICAgICAgIFBsYXRmb3JtV2lkZ2V0KiB3ID0gcmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybVdpZGdl
dCo+KHZhbHVlKTsKKworICAgICAgICAgICAgKncgPSBjb250YWluaW5nV2luZG93KCk7CisKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQor
CiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKIHsKICAgICBp
ZiAoIXJlY3QpIHsKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAzMTIxNykKKysrIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDYgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgogICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgogICogIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0
d290b2FzdHMuZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTYsNiArNTcsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50
KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3Bs
dWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1l
KTsKQEAgLTE2MSw5ICsxNjMsMzAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hX
aWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJh
bWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGlu
ZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRh
KGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXIt
PnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcp
IHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJhbWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcg
dGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBk
b25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAgICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQg
b2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRo
IG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgorICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBs
b2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAgICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVu
Y29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAoIXVzZXJDaG9zZW4pCisgICAgICAgICAgICBl
bmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAg
ICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAg
ICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAg
ICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxl
bmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBpZiAoIW1f
aGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9uc2UoKSk7CisgICAgICAgICAgICBtX2hhc1Nl
bnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3BsdWdpblZp
ZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI1OSw5ICsyODIsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBv
bGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCi1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYs
IGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50
U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
VmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBQbHVnaW5W
aWV3OjpjcmVhdGUoY29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAo
cGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQor
ICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDIs
OCArMzI5LDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdp
bldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsKKyAgICBtX3Bs
dWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAog
V2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJ
bnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCkBAIC02MzAsMTQgKzY1Niwx
NCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6OmdlbmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBT
ZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0
IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUKLSAgICAvLyB3aGVuIHRoZSBmaXJzdCBi
aXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3
aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgotICAgIFN0cmluZyBlbmNvZGluZyA9IGRv
Y3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0g
IWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChlbmNvZGluZy5pc051bGwoKSkKLSAgICAgICAg
ZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7
Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5n
LCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAgICAgICBjb21taXR0
ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9wbHVn
aW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7Cisg
ICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIApA
QCAtNzYwLDkgKzc4NiwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJs
ZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
JikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50
TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlk
RmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2Vu
dFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKSW5kZXg6IFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlz
aW9uIDMxMjE3KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw2ICszMyw4IEBACiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRl
ICJQbHVnaW5WaWV3LmgiCisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRX
ZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNzksNiArMTgyLDEwIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpT
dHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3Qg
ZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAg
ICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBX
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAzMTIxNykKKysrIFdlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMg
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1Niw3IEBAIG15
ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NYVmVyc2lvbjsKIG15ICRpc1F0OwogbXkgJGlz
R3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBteSAkaXNXeDsKIAogIyBWYXJpYWJsZXMgZm9y
IFdpbjMyIHN1cHBvcnQKQEAgLTQ5Myw2ICs0OTUsMjMgQEAgc3ViIGRldGVybWluZUlzR3RrKCkK
ICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICBkZXRlcm1pbmVFbmFi
bGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRlbmFibGVHdGtQbHVnaW5zOworfQorCitzdWIg
ZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgcmV0dXJuIGlmIGRlZmluZWQoJGVu
YWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNoZWNrQXJndigiLS1kaXNhYmxlLWd0ay1wbHVn
aW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAwOworICAgIH0gZWxzZSB7Cisg
ICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsKKyAgICB9Cit9CisKIHN1YiBpc1d4KCkKIHsK
ICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC04NjQsNiArODgzLDcgQEAgc3ViIGJ1aWxkR3RrUHJv
amVjdCgkJEApCiAKICAgICBpZiAodXNlUW1ha2UoKSkgewogICAgICAgICBteSBAYnVpbGRBcmdz
ID0gKCJDT05GSUcrPWd0ay1wb3J0IiwgIkNPTkZJRy09cXQiKTsKKyAgICAgICAgcHVzaCBAYnVp
bGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBlbmFibGVHdGtQbHVnaW5zKCk7CiAgICAgICAg
IHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xlYW4sIEBidWlsZEFyZ3MpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHJldHVybiBidWlsZEF1dG90b29sc1Byb2plY3QoJGNsZWFuLCBAYnVpbGRB
cmdzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20011</attachid>
            <date>2008-03-24 11:59:04 -0700</date>
            <delta_ts>2008-03-26 13:48:04 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>webkit-npapi-gtk2.patch</filename>
            <type>text/plain</type>
            <size>96705</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMxMjQ2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDgtMDMt
MjQgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhlbW9ua2V5LmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAgICAgICBBZGQgLWxYdCB0byB3ZWJjb3Jl
X2xpYmFkZCB3aGVuIHRhcmdldHRpbmcgWDExLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
CisKIDIwMDgtMDMtMjEgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhlbW9ua2V5LmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIuCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBHTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzEyNDYpCisrKyBHTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw3IEBAIGVuZGlmCiAKIGlmIFRBUkdF
VF9YMTEKIGdsb2JhbF9jcHBmbGFncyArPSAtRFhQX1VOSVgKK3dlYmNvcmVfbGliYWRkICs9IC1s
WHQKIGVuZGlmCiAKIGlmICFFTkFCTEVfREVCVUcKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMTI0NikKKysrIFdlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMDgtMDMtMjQg
IFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhlbW9ua2V5LmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAgICAgICBBZGQgbmV3IGZpbGVzIGZvciBwbHVn
LWlucyBpbXBsZW1lbnRhdGlvbiB0byBidWlsZC4KKyAgICAgICAgT25seSBhZGQgZ3RrMnh0Ymlu
IGZvciBYMTEgdGFyZ2V0LgorICAgICAgICBSZW1vdmUgbm93IGltcGxlbWVudGVkIG1ldGhvZHMg
ZnJvbSBHVEsrIFRlbXBvcmFyeUxpbmtTdHVicy4KKyAgICAgICAgQWRkIFBsdWdpblZpZXc6Omdl
dFZhbHVlIHRvIFF0IFRlbXBvcmFyeUxpbmtTdHVicy4KKyAgICAgICAgTW92ZSBQbHVnaW5QYWNr
YWdlOjpjb21wYXJlIHRvIGNyb3NzLXBsYXRmb3JtIGNvZGUuCisgICAgICAgIE1vdmUgUGx1Z2lu
Vmlldzo6Z2V0VmFsdWUgdG8gcGVyLXBsYXRmb3JtIGltcGxlbWVudGF0aW9uLgorICAgICAgICBB
ZGQgbV9uZWVkc1hFbWJlZCB2YXJpYWJsZSBmb3IgR1RLKyBwbHVnLWlucyBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byBidWlsZCBwbHVnLWluIHN1cHBvcnQgZm9yIEdU
SysuCisgICAgICAgIEFkZCBndGsyeHRiaW4uW2NoXSBhbmQgeGVtYmVkLmggZnJvbSBHZWNrbyBm
b3IgcGx1Zy1pbnMgdXNpbmcgWHQuCisgICAgICAgIEluY2x1ZGUgZ2RrY29uZmlnLmggZm9yIEdE
S19XSU5ET1dfKiBkZWZpbmVzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAqIHBsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6
CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHA6CisgICAgICAgICogcGx1
Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5j
cHA6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHA6CisgICAgICAg
ICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6CisgICAgICAgICogcGx1Z2lucy9ndGsv
Z3RrMnh0YmluLmM6CisgICAgICAgICogcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmg6CisgICAgICAg
ICogcGx1Z2lucy9ndGsveGVtYmVkLmg6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luRGF0
YWJhc2VHdGsuY3BwOgorCiAyMDA4LTAzLTI0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gMzEyNDYpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC04
OTQsNyArODk0LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblN0cmVhbS5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBcCiAJV2Vi
Q29yZS9wbHVnaW5zL25wYXBpLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRh
R3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAor
CVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJs
ZUxheW91dC5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JpZGkuY3BwIFwKIAlXZWJDb3JlL3Jl
bmRlcmluZy9icmVha19saW5lcy5jcHAgXApAQCAtOTU0LDYgKzk1NywxMSBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAJV2ViQ29yZS94
bWwvWE1MU2VyaWFsaXplci5jcHAKIAoraWYgVEFSR0VUX1gxMQord2ViY29yZV9zb3VyY2VzICs9
IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCitlbmRpZgorCiB3ZWJraXRndGtf
aGVhZGVycyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzMTI0
NikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQs
NyBAQCBndGstcG9ydCB7CiAgICAgfQogICAgIHgxMTpwbHVnaW5zIHsKICAgICAgICAgREVGSU5F
UyArPSBYUF9VTklYCisgICAgICAgIExJQlMgKz0gLWxYdAogICAgIH0KIAogICAgIElOQ0xVREVQ
QVRIICs9IFwKQEAgLTE4MCw2ICsxODEsNyBAQCBndGstcG9ydCB7CiAgICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMveGJtIFwKICAgICBsb2FkZXIvZ3RrIFwKICAgICBwYWdlL2d0ayBcCisgICAg
cGx1Z2lucy9ndGsgXAogICAgIC4uL1dlYktpdC9ndGsgXAogICAgIC4uL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQgXAogICAgIC4uL1dlYktpdC9ndGsvd2Via2l0CkBAIC05MTAsMTMgKzkxMiwz
NSBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nvci5jcHAKIAogZ3RrLXBvcnQg
eworICAhcGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElTQUJMRV9QTFVHSU5TPTEKKyAg
fQorICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5oIFwK
KyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAorICAgIHBsdWdpbnMvZ3RrL1Bs
dWdpblZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1h
cC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJh
Y2tMaXN0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwIAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcCBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJh
c2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisgICAg
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL25wYXBpLmNw
cAorCisgIHgxMTpwbHVnaW5zIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgIHBsdWdpbnMvZ3Rr
L2d0azJ4dGJpbi5oIFwKKyAgICAgIHBsdWdpbnMvZ3RrL3hlbWJlZC5oCisKKyAgICBTT1VSQ0VT
ICs9IFwKKyAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisgIH0KIH0KIAogcXQtcG9ydCB7
CkBAIC0xMDI5LDYgKzEwNTMsNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElO
Q0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwKICAg
ICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAgICAu
Li9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXApJbmRleDogV2ViQ29y
ZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2d0ay9G
cmFtZUd0ay5jcHAJKHJldmlzaW9uIDMxMjQ2KQorKysgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTUgKzMxLDE3IEBACiAjaW5jbHVk
ZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9v
dC5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0
YW5jZUZvcldpZGdldChXaWRnZXQqKQorUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKIH0KIAogdm9p
ZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMTI0NikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
Vmlldy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCkBAIC01OCwyOCArNTYsNyBAQCBW
ZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAvKiBDb21wbGV0ZWx5IGVt
cHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCiAvKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWludCBQbHVn
aW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdCB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci11bnNpZ25lZCBQbHVnaW5QYWNrYWdl
OjpoYXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVn
aW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1Z2luUGFja2Fn
ZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFBsdWdpblBhY2th
Z2U6OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBQbHVn
aW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3Qq
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lv
bihOUFJlZ2lvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmZvcmNl
UmVkcmF3KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNldEZvY3Vz
KCkgeyBXaWRnZXQ6OnNldEZvY3VzKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygpIHsgV2lk
Z2V0OjpzaG93KCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpIHsgV2lkZ2V0OjpoaWRlKCk7
IH0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogdmlldykgeyBXaWRnZXQ6OnNldFBhcmVudCh2aWV3KTsgfQotdm9pZCBQbHVnaW5W
aWV3OjphdHRhY2hUb1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5W
aWV3OjpkZXRhY2hGcm9tV2luZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1OUEVycm9yIFBs
dWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1aW50MzIsIGNv
bnN0IGNoYXIqLCBib29sLCB2b2lkKiwgYm9vbCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgfQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaW5k
b3coKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lk
IFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQotUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSB7fQogCiBDb2xvciBXZWJDb3JlOjpm
b2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0
Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KQEAgLTkzLDggKzcw
LDUgQEAgU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBubwogCiBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUo
Y29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogCi12b2lkIFBs
dWdpbkRhdGE6OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdp
bkRhdGE6OnJlZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQogfQogCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMTI0NikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTYsNiArOTYsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29u
c3QgY2hhCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91
c2VFdmVudChNb3VzZUV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitOUEVycm9yIFBsdWdp
blZpZXc6OmdldFZhbHVlIChOUE5WYXJpYWJsZSwgdm9pZCopIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KIFBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkg
e30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBh
Y2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNw
cAkocmV2aXNpb24gMzEyNDYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNp
bmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTgsNiArNjEsMzAgQEAgdm9pZCBQ
bHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZQogICAgIG1fbW9kdWxlID0gMDsKIH0K
IAoraW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFy
ZVRvKSBjb25zdAoreworICAgIC8vIFNvcnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBp
bnN0YW5jZXMgZmlyc3QuCisgICAgYm9vbCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Cisg
ICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNv
bnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChB
YWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQorICAg
ICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID8gLTEgOiAxOworCisgICAgLy8g
U29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5Q
cmVmZXJyZWRQYXRoID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChwYXJl
bnREaXJlY3RvcnkoKSk7CisgICAgYm9vbCBCaXNJblByZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRh
YmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7
CisgICAgaWYgKEFpc0luUHJlZmVycmVkUGF0aCAhPSBCaXNJblByZWZlcnJlZFBhdGgpCisgICAg
ICAgIHJldHVybiBBaXNJblByZWZlcnJlZFBhdGggPyAtMSA6IDE7CisKKyAgICBpbnQgZGlmZiA9
IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICBpZiAoZGlm
ZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKSkKKyAgICAgICAgcmV0
dXJuIGRpZmY7CisKKyAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5k
YXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKK30KKwog
UGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBs
YXRmb3JtRmlsZVRpbWUmIGxhc3RNb2RpZmllZCkKICAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luUGFj
a2FnZT4oMCkKICAgICAsIG1fcGF0aChwYXRoKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
cmV2aXNpb24gMzEyNDYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5Myw1NSArMzkzLDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29u
c3QgY2hhciogbWVzcwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dCht
X3BhcmVudEZyYW1lLCBTdHJpbmcobWVzc2FnZSkpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6
OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBpZiAo
bV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAgICAgICAgICAgTlBP
YmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5Q
T2JqZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBi
ZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgICAgIGlmICh3aW5kb3dTY3Jp
cHRPYmplY3QpCi0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0
T2JqZWN0KTsKLQotICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAg
ICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlBs
dWdpbkVsZW1lbnROUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlw
dE9iamVjdCA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBw
bGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+
aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVj
dCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmpl
Y3QoKTsKLQotICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJl
dGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVj
dHMvcGx1Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9i
amVjdCkKLSAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmpl
Y3QpOwotCi0gICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAg
ICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05P
X0VSUk9SOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdp
bmRvdzogewotICAgICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVycHJldF9jYXN0
PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUpOwotCi0gICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdX
aW5kb3coKTsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKLSAgICB9Ci19Ci0KIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUg
dmFyaWFibGUsIHZvaWQqIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMzEyNDYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2F0dGFjaGVkVG9XaW5kb3c7CiAgICAgICAgIGJvb2wg
bV9oYXZlSW5pdGlhbGl6ZWQ7CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGJvb2wgbV9u
ZWVkc1hFbWJlZDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBPd25QdHI8
UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOwogICAgICAgICBX
TkRQUk9DIG1fcGx1Z2luV25kUHJvYzsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRh
R3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0
ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNs
dWRlICJQbHVnaW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVn
aW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2lu
RGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFj
a2FnZSo+ICZwbHVnaW5zID0gZGItPnBsdWdpbnMoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5JbmZvKiBp
bmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBw
bHVnaW5zW2ldOworCisgICAgICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAg
ICAgIGluZm8tPmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLT5kZXNj
ID0gcGFja2FnZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlw
dGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9u
cygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBN
aW1lQ2xhc3NJbmZvOworICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworCisg
ICAgICAgICAgICBtaW1lLT50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZS0+ZGVz
YyA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisgICAg
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5z
aW9ucygpLmdldChtaW1lLT50eXBlKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+
IDApCisgICAgICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAg
ICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30K
Kwordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIg
PSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGRiLT5yZWZyZXNoKCk7
Cit9CisKK307CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNw
cAkocmV2aXNpb24gMzEyNDYpCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNl
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ1N0
cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDxnZGtjb25maWcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NSw2ICs2Niw4IEBAIFZlY3RvcjxTdHJp
bmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGwKICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsK
ICAgICBnY2hhciogcGF0aDsKIAorICAgIHBhdGggPSAwOworCiAjaWYgZGVmaW5lZChHREtfV0lO
RE9XSU5HX1gxMSkKICAgICBwYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2Rpcigp
LCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIDApOwogICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKQEAg
LTEwMCw3ICsxMDMsMjEgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bAogCiBib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBnY2hhciogaG9tZVBhdGg7Cisg
ICAgYm9vbCByZXR2YWwgPSBmYWxzZTsKKworICAgIGhvbWVQYXRoID0gMDsKKworI2lmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgMCk7CisjZWxpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfV0lOMzIpCisgICAgaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X2hvbWVfZGlyKCksICJBcHBsaWNhdGlvbiBEYXRhIiwgIk1vemlsbGEiLCAicGx1Z2lucyIs
IDApOworI2VuZGlmCisKKyAgICBpZiAoaG9tZVBhdGgpCisJcmV0dmFsID0gKHN0cmNtcChob21l
UGF0aCwgKHBhdGgudXRmOCgpKS5kYXRhKCkpID09IDApOworCisgICAgcmV0dXJuIHJldHZhbDsK
IH0KIAogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIkNT
dHJpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIm5wcnVudGlt
ZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3Jt
TW9kdWxlVmVyc2lvbiYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQoreworICAgIGlmICgh
bG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOUF9HZXRNSU1FRGVzY3JpcHRp
b25GdW5jUHRyIE5QX0dldE1JTUVEZXNjcmlwdGlvbjsKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRy
IE5QUF9HZXRWYWx1ZTsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldE1J
TUVEZXNjcmlwdGlvbiIsICh2b2lkKiopJk5QX0dldE1JTUVEZXNjcmlwdGlvbik7CisgICAgZ19t
b2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiLCAodm9pZCoqKSZOUFBfR2V0VmFs
dWUpOworCisgICAgY29uc3QgZ2NoYXIqIHR5cGVzID0gTlBfR2V0TUlNRURlc2NyaXB0aW9uKCk7
CisgICAgZ2NoYXIqKiBtaW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsrKSB7
CisgICAgICAgIGdjaGFyKiogbWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWVEZXNjc1tpXSwgIjoi
LCAzKTsKKworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1p
bWVEYXRhWzJdKTsKKyAgICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdChtaW1l
RGF0YVsxXSwgIiwiLCAtMSk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0VmVjdG9yOwor
ICAgICAgICBmb3IgKGludCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQorICAgICAgICAgICAg
ZXh0VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0pKTsKKworICAg
ICAgICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVEYXRhWzBdLCBleHRWZWN0b3IpOworICAg
ICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsK
KworICAgICAgICBnX3N0cmZyZWV2KGV4dGVuc2lvbnMpOworICAgICAgICBnX3N0cmZyZWV2KG1p
bWVEYXRhKTsKKyAgICB9CisgICAgZ19zdHJmcmVldihtaW1lRGVzY3MpOworCisgICAgY2hhciog
YnVmZmVyID0gMDsKKyAgICBOUEVycm9yIGVyciA9IE5QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2lu
TmFtZVN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgbV9uYW1lID0gYnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBOUFBf
R2V0VmFsdWUoMCwgTlBQVnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBp
ZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVy
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCit7
CisgICAgaWYgKG1faXNMb2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbV9tb2R1bGUgPSBnX21vZHVsZV9vcGVuKChtX3Bh
dGgudXRmOCgpKS5kYXRhKCksIEdfTU9EVUxFX0JJTkRfTE9DQUwpOworICAgIGlmICghbV9tb2R1
bGUpIHsKKwlwcmludGYoIkRFQlVHOiAlc1xuIiwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5Q
X0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJvciBucEVycjsKKwor
ICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZO
UF9Jbml0aWFsaXplKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93
biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8
fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1f
cGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5j
cy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6
ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24g
PSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRV
Ukw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJv
d3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1
bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUg
PSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0
cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAg
bV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0g
TlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7
CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAg
bV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNz
LnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVy
ZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVy
ZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJl
ZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0g
TlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0
SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5Q
Tl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2Vu
YWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50
aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIg
PSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlz
c3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRm
OGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2Vy
RnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5p
bnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0g
X05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9F
dmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVy
dHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5Owor
ICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1f
YnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2Vy
RnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVu
Y3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxp
emUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5Q
RVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgcHJpbnRmKCJMT0FERUQ6
ICVzXG4iLCAobV9wYXRoLnV0ZjgoKSkuZGF0YSgpKTsKKyAgICBtX2xvYWRDb3VudCsrOworICAg
IHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICBwcmludGYoIkFCT1JURUQ6ICVzXG4iLCAobV9w
YXRoLnV0ZjgoKSkuZGF0YSgpKTsKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAor
eyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1fcGF0aC5pbXBsKCkt
Pmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisgICAgcmV0dXJuIFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMp
LCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIFBsdWdp
blBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2th
Z2UmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29s
bGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCisj
aW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNs
dWRlICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8a2pz
L0pTTG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorCisjaW5jbHVkZSA8Z2RrY29uZmln
Lmg+CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorI2luY2x1ZGUgImd0azJ4dGJp
bi5oIgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5H
X1dJTjMyCisjaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+CisjZW5kaWYKKwordXNpbmcgS0pTOjpF
eGVjU3RhdGU7Cit1c2luZyBLSlM6OkludGVycHJldGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1
c2luZyBLSlM6OkpTT2JqZWN0OwordXNpbmcgS0pTOjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3Ry
aW5nOworCit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QK
K3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRS
ZWN0IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVj
dCA9IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0
cnkoKS5zaXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1f
Y2xpcFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisg
ICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRv
d1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07
CisgICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSht
X3dpbmRvdywgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisg
ICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9w
b3NpdGlvbihHVEtfWFRCSU4obV93aW5kb3cpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpKTsKKyAgICAgICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aW5kb3csIG1fd2luZG93
UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYK
KyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKQoreworICAgIGlmIChtX3dp
bmRvdykKKwlndGtfd2lkZ2V0X2dyYWJfZm9jdXMobV93aW5kb3cpOworCisgICAgV2lkZ2V0Ojpz
ZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAgIG1faXNWaXNp
YmxlID0gdHJ1ZTsKKworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cgJiYgbV93aW5kb3cpCisJ
Z3RrX3dpZGdldF9zaG93KG1fd2luZG93KTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisKKyAg
ICBpZiAobV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfaGlkZSht
X3dpbmRvdyk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpw
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVn
aW4iIGltYWdlCisgICAgICAgIC8vcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzV2luZG93ZWQgfHwgY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOUEV2ZW50
IG5wRXZlbnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLworCisg
ICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisKKyAgICBBU1NFUlQo
cGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxM
b2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2Us
ICZucEV2ZW50KTsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICBzZXRO
UFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3Rh
bmNlLCAmbnBFdmVudCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJv
YXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50Owor
ICAgIAorICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2gg
Ki8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlm
ICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkK
KyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5w
RXZlbnQ7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgIHJldHVybjsKKworICAgIC8q
IEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8KKyAgICBJbnRQ
b2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2lu
ZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgS0pT
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVu
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQo
U2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisK
KyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV93aW5kb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFBsdWdp
blZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICgh
bV9pc1N0YXJ0ZWQgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9u
KCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgp
OworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93
LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQg
PSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNs
aXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90
dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFu
Y2UsICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKwordm9p
ZCBQbHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdygpCit7CisgICAgaWYgKG1fYXR0YWNoZWRUb1dp
bmRvdykKKwlyZXR1cm47CisKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSB0cnVlOworICAgIGlm
IChtX2lzVmlzaWJsZSAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X3Nob3cobV93aW5kb3cpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OmRldGFjaEZyb21XaW5kb3coKQoreworICAgIGlmICghbV9h
dHRhY2hlZFRvV2luZG93KQorCXJldHVybjsKKworICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX3dp
bmRvdykKKwlndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworICAgIG1fYXR0YWNoZWRUb1dpbmRv
dyA9IGZhbHNlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQoreworICAgIGlmICghbV9p
c1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0
cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0
cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAgICBkaXNjb25u
ZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlz
RW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisgICAgS0pTOjpKU0xvY2s6
OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBEZXN0cm95IHRoZSBwbHVnaW4K
KyAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKwor
ICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0Fy
cmF5KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0Fy
cmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShz
dHJpbmdBcnJheSk7Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVS
TCwgY29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMu
CisgICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVybFN0cmluZy5yZXBsYWNl
KCdccicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFy
PiYgYnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0g
PT0gJ1xuJzsKK30KKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKK3sKKyAg
ICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJl
bnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX3VybCkudXRmOCgpOworCisgICAgcmV0dXJu
IG1fdXNlckFnZW50LmRhdGEoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRl
ckZpcnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0
IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZm
ZXIuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkr
KykgeworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisg
ICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAg
ICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUg
cG9zaXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5l
LgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykg
eworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicp
CisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxu
XG4iICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAg
ICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAg
ICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgz
NzU4MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVP
TChjb25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBD
UkxGIHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8v
IGluc3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24K
KyAgICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBu
ZWVkcworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JM
RiwgTEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBF
T0xGIGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0
aGUgZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAg
ICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7
CisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcwor
ICAgICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisg
ICAgICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3Ro
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUg
U3RyaW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJl
c3VsdDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKysp
IHsKKyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAm
JiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b0FT
Q0lJVXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVy
ICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRv
QVNDSUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVb
aV07CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6
ZUNoYXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVD
aGFyYWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJz
ZVJGQzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBj
b25zdCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBo
ZWFkZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0
aGUgaGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdo
aWxlICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hh
ciogbGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOwor
ICAgICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRo
ZSB0ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9s
ICsgMTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisg
ICAgICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEg
c3Bhbm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAg
ICAgIGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdy
ZSBhdCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBl
bHNlIGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8g
Q29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0
S2V5LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdu
b3JlIGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9m
IHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVl
ID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3
VmFsdWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMu
c2V0KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9IGxpbmU7ICpj
b2xvbiAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAg
Ly8gZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbG9uID09IGVv
bCkgCisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBj
b250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUo
U3RyaW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1
ZTsKKworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisr
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAn
XHQnKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAgICAgU3RyaW5n
IG9sZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAg
PSBvbGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7CisgICAgICAgICAg
ICAgICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXA7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChs
YXN0S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3Qo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNo
YXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRp
b24sIGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1
ZXN0IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsK
KyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAg
IFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0
c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0
cmluZyg4KTsKKworICAgICAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgICAgIGlmICghZ19maWxl
X3Rlc3QgKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1Rf
RVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRv
IGJ1ZmZlcgorICAgICAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0Zjgo
KSkuZGF0YSgpLCAiciIpOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gMCkK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgICAgICAvL2J1
ZmZlci5yZXNpemUoKTsKKworICAgICAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRh
dGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICAgICAgZmNsb3NlKGZpbGVIYW5kbGUpOwor
CisgICAgICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9G
SUxFX05PVF9GT1VORDsKKworCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBidWZmZXIucmVzaXplKGxlbik7CisgICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgp
LCBidWYsIGxlbik7CisgICAgfQorCisgICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIu
ZGF0YSgpOworICAgIGludCBwb3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBp
ZiAoYWxsb3dIZWFkZXJzKSB7CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZl
cikpIHsKKyAgICAgICAgICAgIHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0
aC0tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRp
b25BZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24g
IT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hl
cmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUg
aGVhZGVyCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJG
aWVsZHMoYnVmZmVyLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxl
bmd0aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNv
bWV0aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hl
biB0aGV5IHBvc3QsCisgICAgICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBu
b3QgbGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAg
ICAgLy8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5n
dGguCisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMu
Z2V0KCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVu
Z3RoLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRl
bnRMZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMucmVtb3ZlKCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9z
dERhdGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRh
TGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2Fk
UmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJh
bWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkws
IHVybCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhl
YWRlckZpZWxkcyhoZWFkZXJGaWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFM
ZW5ndGgpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisg
ICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5
RGF0YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFy
aWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBkZWZp
bmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsK
KyAgICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgICAgICoodm9p
ZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4obV93
aW5kb3cpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2Ug
TlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICAqKCh1aW50MzIg
Kil2YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IDA7
CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogeworI2lmIGRlZmluZWQoR0RL
X1dJTkRPV0lOR19YMTEpCisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOwor
I2Vsc2UKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDog
eworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOworCisgICAgICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9w
YXJlbnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTog
PGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgor
ICAgICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBO
X1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiog
diA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisJICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisK
KyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAg
ICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5o
YXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkK
KyAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1
Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8v
IFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhl
cmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRt
bD4KKyAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAg
X05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9p
ZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmpl
Y3Q7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZv
aWQqIHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyNpZmRlZiBHREtfV0lO
RE9XSU5HX1gxMQorICAgICAgICAgICAgKigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1co
Y29udGFpbmluZ1dpbmRvdygpLT53aW5kb3cpOworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lO
R19XSU4zMgorICAgICAgICAgICAgKigoSFdORCAqKXcpID0gR0RLX1dJTkRPV0lOR19IV05EKGNv
bnRhaW5pbmdXaW5kb3coKS0+d2luZG93KTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAg
ICBpbnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIo
cmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJv
dHRvbSAtIHJlY3QtPnRvcCk7CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKK30KKwor
dm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkK
KyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAg
ICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhjb250YWluaW5nV2luZG93KCkpOworfQorCitQbHVn
aW5WaWV3Ojp+UGx1Z2luVmlldygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFs
dWVzKG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9w
YXJhbUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNv
dW50KTsKKworICAgIG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2lu
KHRoaXMpOworCisgICAgaWYgKG1fcGx1Z2luICYmICEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRh
aW5zKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpKQorICAgICAgICBtX3BsdWdpbi0+dW5s
b2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUlu
aXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVl
OworCisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1
Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAg
ICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVn
aW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJl
ZCwgJm1fbmVlZHNYRW1iZWQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAg
ICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICBtX3dpbmRvdyA9IGd0a19zb2NrZXRfbmV3
KCk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFt
ZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLCBtX3dpbmRvdyk7CisgICAgICAgIHNldEd0
a1dpZGdldChtX3dpbmRvdyk7CisgICAgfSBlbHNlIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAg
ICAgbV93aW5kb3cgPSBndGtfeHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFp
bmluZ1dpbmRvdygpLT53aW5kb3csIDApOworCXNldEd0a1dpZGdldChtX3dpbmRvdyk7CisgICAg
fQorI2Vsc2UKKyAgICBtX3dpbmRvdyA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdX
aW5kb3coKSksIG1fd2luZG93KTsKKyAgICBzZXRHdGtXaWRnZXQobV93aW5kb3cpOworI2VuZGlm
CisgICAgc2hvdyAoKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiBkZWZpbmVkKEdE
S19XSU5ET1dJTkdfWDExKQorCU5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Qgd3M7CisKKwl3cy50
eXBlID0gMDsKKworCWlmIChtX25lZWRzWEVtYmVkKSB7CisJICAgIHdzLmRpc3BsYXkgPSBHREtf
V0lORE9XX1hESVNQTEFZKG1fd2luZG93LT53aW5kb3cpOworCSAgICB3cy52aXN1YWwgPSBHREtf
VklTVUFMX1hWSVNVQUwoZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2lu
ZG93LT53aW5kb3cpKSk7CisJICAgIHdzLmRlcHRoID0gZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwo
R0RLX0RSQVdBQkxFKG1fd2luZG93LT53aW5kb3cpKS0+ZGVwdGg7CisJICAgIHdzLmNvbG9ybWFw
ID0gR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19E
UkFXQUJMRShtX3dpbmRvdy0+d2luZG93KSkpOworCX0gZWxzZSB7CisJICAgIHdzLmRpc3BsYXkg
PSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGRpc3BsYXk7CisJICAgIHdzLnZpc3VhbCA9IEdUS19Y
VEJJTihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0dmlzdWFsOworCSAgICB3cy5kZXB0aCA9IEdUS19Y
VEJJTihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0ZGVwdGg7CisJICAgIHdzLmNvbG9ybWFwID0gR1RL
X1hUQklOKG1fd2luZG93KS0+eHRjbGllbnQueHRjb2xvcm1hcDsKKworCSAgICBYRmx1c2ggKHdz
LmRpc3BsYXkpOworCX0KKworCW1fbnBXaW5kb3cud3NfaW5mbyA9ICZ3czsKKyNlbmRpZgorICAg
IH0KKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0g
TlBXaW5kb3dUeXBlV2luZG93OworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisJaWYg
KG1fbmVlZHNYRW1iZWQpCisJICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKUdES19XSU5E
T1dfWFdJTkRPVyhtX3dpbmRvdy0+d2luZG93KTsKKwllbHNlCisJICAgIG1fbnBXaW5kb3cud2lu
ZG93ID0gKHZvaWQqKUdUS19YVEJJTihtX3dpbmRvdyktPnh0d2luZG93OworI2VsaWYgZGVmaW5l
ZChHREtfV0lORE9XSU5HX1dJTjMyKQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lk
KilHREtfV0lORE9XX0hXTkQobV93aW5kb3ctPndpbmRvdyk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAg
ICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcGx1Z2luLT5x
dWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisg
ICAgICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMg
PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTQxIEBA
CisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJz
dG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJz
aW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24K
KyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgor
ICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUK
KyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBX
aWRnZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAy
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBv
cgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
KyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
CisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKyAKKy8qCisgKiBUaGUg
R3RrWHRCaW4gd2lkZ2V0IGFsbG93cyBmb3IgWHQgdG9vbGtpdCBjb2RlIHRvIGJlIHVzZWQKKyAq
IGluc2lkZSBhIEdUSyBhcHBsaWNhdGlvbi4gIAorICovCisKKyN1bmRlZiBHVEtfRElTQUJMRV9E
RVBSRUNBVEVECisKKyNpbmNsdWRlICJ4ZW1iZWQuaCIKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIK
KyNpbmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorI2luY2x1ZGUgPGd0ay9ndGtwcml2YXRlLmg+Cisj
aW5jbHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0
Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor
CisvKiBYbGliL1h0IHN0dWZmICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxY
MTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmlu
c2ljLmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KKworLyogdW5jb21tZW50IHRoaXMg
aWYgeW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHdpZGdldAorICAgY3JlYXRp
b24gYW5kIGRlc3RydWN0aW9uICovCisjdW5kZWYgREVCVUdfWFRCSU4KKworI2RlZmluZSBYVEJJ
Tl9NQVhfRVZFTlRTIDMwCisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2NsYXNz
X2luaXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3Rr
X3h0YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0YmluKTsKK3N0YXRpYyB2b2lkICAg
ICAgICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOwor
c3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5yZWFsaXplICAgIChHdGtXaWRnZXQg
ICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2Rlc3Ryb3kg
ICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtf
eHRiaW5fc2h1dGRvd24gICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CisKKy8qIFh0IGF3YXJl
IFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2luaXQgICAgICAoWHRDbGll
bnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
aXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbG9ybWFwIHh0Y29sb3JtYXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHh0ZGVwdGgpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2NyZWF0ZSAg
ICAoWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXaW5kb3cgZW1iZWRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB3aWR0aCApOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3VucmVhbGl6ZSAo
WHRDbGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9kZXN0cm95
ICAgKFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfc2V0
X2luZm8gIChXaWRnZXQgeHRwbHVnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50
X2V2ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAg
ICAgeHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAoV2lkZ2V0IHcsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVu
dF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2ZvY3VzX2xp
c3RlbmVyICAgICAgIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9kYXRhLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3Rh
dGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVy
IHVzZXJfZGF0YSApOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3Ry
ZWUgKCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpOyAKK3N0YXRpYyB2b2lk
ICAgICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJf
ZGF0YSk7CitzdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAq
eHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1l
c3NhZ2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXRh
aWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGEyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lKTsgIAorc3RhdGlj
IGludCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlzcGxheSAqZGlzcGxheSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXJyb3JFdmVudCAqZXJyb3IpOwor
LyogRm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB0cmFwX2Vy
cm9ycyh2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgIHVudHJhcF9lcnJvcih2b2lkKTsKK3N0YXRp
YyBpbnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChEaXNwbGF5ICosIFhFcnJvckV2ZW50
ICopOworc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJvcl9jb2RlID0gMDsKKworc3RhdGlj
IEd0a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitzdGF0aWMgRGlzcGxheSAg
ICAgICAgICp4dGRpc3BsYXkgPSBOVUxMOworc3RhdGljIFN0cmluZyAgICAgICAgICAqZmFsbGJh
Y2sgPSBOVUxMOworc3RhdGljIGdib29sZWFuICAgICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBG
QUxTRTsKK3N0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93aWRnZXRzID0gMDsKKworc3RhdGlj
IEdQb2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsKK3N0YXRpYyBnaW50ICAgICAgICAg
ICAgIHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworc3RhdGljIGd1aW50ICAgICAgICAgICAgdGFn
ID0gMDsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wcmVwYXJlIChHU291cmNlKiAgc291
cmNlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgKnRpbWVvdXQpCit7ICAgCisg
IGludCBtYXNrOworCisgIEdES19USFJFQURTX0VOVEVSKCk7CisgIG1hc2sgPSBYUGVuZGluZyh4
dGRpc3BsYXkpOworICBHREtfVEhSRUFEU19MRUFWRSgpOworCisgIHJldHVybiAoZ2Jvb2xlYW4p
bWFzazsKK30KKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9jaGVjayAoR1NvdXJjZSogIHNv
dXJjZV9kYXRhKQoreworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKworICBpZiAoeHRfZXZlbnRf
cG9sbF9mZC5yZXZlbnRzICYgR19JT19JTikgeworICAgIGludCBtYXNrOworICAgIG1hc2sgPSBY
UGVuZGluZyh4dGRpc3BsYXkpOworICAgIEdES19USFJFQURTX0xFQVZFICgpOworICAgIHJldHVy
biAoZ2Jvb2xlYW4pbWFzazsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOworICByZXR1
cm4gRkFMU0U7Cit9ICAgCisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfZGlzcGF0Y2ggKEdT
b3VyY2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMgY2Fs
bF9iYWNrLAorICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgdXNlcl9kYXRhKQoreworICBY
RXZlbnQgZXZlbnQ7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGkgPSAwOworCisgIGFjID0g
WHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNwbGF5KTsKKworICBHREtfVEhSRUFE
U19FTlRFUiAoKTsKKworICAvKiBQcm9jZXNzIG9ubHkgcmVhbCBYIHRyYWZmaWMgaGVyZS4gIFdl
IG9ubHkgbG9vayBmb3IgZGF0YSBvbiB0aGUKKyAgICogcGlwZSwgbGltaXQgaXQgdG8gWFRCSU5f
TUFYX0VWRU5UUyBhbmQgb25seSBjYWxsCisgICAqIFh0QXBwUHJvY2Vzc0V2ZW50IHNvIHRoYXQg
aXQgd2lsbCBsb29rIGZvciBYIGV2ZW50cy4gIFRoZXJlJ3Mgbm8KKyAgICogdGltZXIgcHJvY2Vz
c2luZyBoZXJlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHRpbWVyIGNhbGxiYWNrIHRoYXQKKyAg
ICogZG9lcyBpdC4gICovCisgIGZvciAoaT0wOyBpIDwgWFRCSU5fTUFYX0VWRU5UUyAmJiBYUGVu
ZGluZyh4dGRpc3BsYXkpOyBpKyspIHsKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTVhF
dmVudCk7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKworICByZXR1cm4gVFJVRTsg
IAorfQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50X2Z1bmNzID0geworICB4dF9ldmVu
dF9wcmVwYXJlLAorICB4dF9ldmVudF9jaGVjaywKKyAgeHRfZXZlbnRfZGlzcGF0Y2gsCisgIGdf
ZnJlZSwKKyAgKEdTb3VyY2VGdW5jKU5VTEwsCisgIChHU291cmNlRHVtbXlNYXJzaGFsKU5VTEwK
K307CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjayhn
cG9pbnRlciB1c2VyX2RhdGEpCit7CisgIERpc3BsYXkgKiBkaXNwbGF5OworICBYdEFwcENvbnRl
eHQgYWM7CisgIGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsKKworICBkaXNwbGF5ID0gKERpc3Bs
YXkgKil1c2VyX2RhdGE7CisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoZGlz
cGxheSk7CisKKyAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1hbnkgWHQgZXZlbnRzIGhlcmUuIElm
IHdlIGp1c3QgcHJvY2VzcworICAgICBvbmUgZXZlbnQgd2UgbWlnaHQgc3RhcnZlIG9uZSBvciBt
b3JlIFh0IGNvbnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQKKyAgICAgdGhpcyBjb3VsZCBoYW5n
IHRoZSB3aG9sZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91cmluZyBpbi4gU28gcHJvY2Vzcwor
ICAgICB1cCB0byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFuZCBzYXZlIHRoZSByZXN0IGZvciBs
YXRlci4gVGhpcyBpcyBhIGhhY2ssCisgICAgIGJ1dCBpdCBvdWdodGEgd29yay4gV2UgKnJlYWxs
eSogc2hvdWxkIGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lucy4KKyAgKi8KKyAgd2hpbGUgKGV2
ZW50c1RvUHJvY2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykpCisgICAgWHRBcHBQcm9jZXNzRXZl
bnQoYWMsIFh0SU1BbGwpOworICByZXR1cm4gVFJVRTsKK30KKworR3RrVHlwZQorZ3RrX3h0Ymlu
X2dldF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR3RrVHlwZSB4dGJpbl90eXBlID0gMDsKKwor
ICBpZiAoIXh0YmluX3R5cGUpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBHdGtUeXBlSW5mbyB4dGJp
bl9pbmZvID0KKyAgICAgIHsKKyAgICAgICAgIkd0a1h0QmluIiwKKyAgICAgICAgc2l6ZW9mIChH
dGtYdEJpbiksCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW5DbGFzcyksCisgICAgICAgIChHdGtD
bGFzc0luaXRGdW5jKSBndGtfeHRiaW5fY2xhc3NfaW5pdCwKKyAgICAgICAgKEd0a09iamVjdElu
aXRGdW5jKSBndGtfeHRiaW5faW5pdCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMSAqLyBOVUxMLAor
ICAgICAgICAvKiByZXNlcnZlZF8yICovIE5VTEwsCisgICAgICAgIChHdGtDbGFzc0luaXRGdW5j
KSBOVUxMCisgICAgICB9OworICAgICAgeHRiaW5fdHlwZSA9IGd0a190eXBlX3VuaXF1ZSAoR1RL
X1RZUEVfU09DS0VULCAmeHRiaW5faW5mbyk7CisgICAgfQorICByZXR1cm4geHRiaW5fdHlwZTsK
K30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICpr
bGFzcykKK3sKKyAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9jbGFzczsKKyAgR3RrT2JqZWN0Q2xh
c3MgKm9iamVjdF9jbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBndGtfdHlwZV9jbGFzcyAoR1RL
X1RZUEVfU09DS0VUKTsKKworICB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTIChrbGFz
cyk7CisgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194dGJpbl9yZWFsaXplOworICB3aWRn
ZXRfY2xhc3MtPnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJlYWxpemU7CisKKyAgb2JqZWN0X2Ns
YXNzID0gR1RLX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBvYmplY3RfY2xhc3MtPmRlc3Ryb3kg
PSBndGtfeHRiaW5fZGVzdHJveTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9pbml0IChH
dGtYdEJpbiAqeHRiaW4pCit7CisgIHh0YmluLT54dGRpc3BsYXkgPSBOVUxMOworICB4dGJpbi0+
cGFyZW50X3dpbmRvdyA9IE5VTEw7CisgIHh0YmluLT54dHdpbmRvdyA9IDA7CisgIHh0YmluLT54
ID0gMDsKKyAgeHRiaW4tPnkgPSAwOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX3JlYWxp
emUgKEd0a1dpZGdldCAqd2lkZ2V0KQoreworICBHdGtYdEJpbiAgICAgKnh0YmluOworICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDIwMCwgMjAwIH07CisgIGdpbnQgIHgsIHks
IHcsIGgsIGQ7IC8qIGdlb21ldHJ5IG9mIHdpbmRvdyAqLworCisjaWZkZWYgREVCVUdfWFRCSU4K
KyAgcHJpbnRmKCJndGtfeHRiaW5fcmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJu
X2lmX2ZhaWwgKEdUS19JU19YVEJJTiAod2lkZ2V0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4g
KHdpZGdldCk7CisKKyAgLyogY2FjdWxhdGUgdGhlIGFsbG9jYXRpb24gYmVmb3JlIHJlYWxpemUg
Ki8KKyAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoeHRiaW4tPnBhcmVudF93aW5kb3csICZ4LCAm
eSwgJncsICZoLCAmZCk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB3OworICBhbGxvY2F0aW9uLmhl
aWdodCA9IGg7CisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSAod2lkZ2V0LCAmYWxsb2NhdGlv
bik7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImluaXRpYWwgYWxsb2NhdGlvbiAl
ZCAlZCAlZCAlZFxuIiwgeCwgeSwgdywgaCk7CisjZW5kaWYKKworICB4dGJpbi0+d2lkdGggPSB3
aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgIHh0YmluLT5oZWlnaHQgPSB3aWRnZXQtPmFsbG9j
YXRpb24uaGVpZ2h0OworCisgIC8qIHVzZSBHdGtTb2NrZXQncyByZWFsaXplICovCisgICgqR1RL
X1dJREdFVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWFsaXplKSh3aWRnZXQpOworCisgIC8qIGNy
ZWF0ZSB0aGUgWHQgY2xpZW50IHdpZGdldCAqLworICB4dF9jbGllbnRfY3JlYXRlKCYoeHRiaW4t
Pnh0Y2xpZW50KSwgCisgICAgICAgZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVCh4dGJpbikp
LCAKKyAgICAgICB4dGJpbi0+aGVpZ2h0LCAKKyAgICAgICB4dGJpbi0+d2lkdGgpOworICB4dGJp
bi0+eHR3aW5kb3cgPSBYdFdpbmRvdyh4dGJpbi0+eHRjbGllbnQuY2hpbGRfd2lkZ2V0KTsKKwor
ICBnZGtfZmx1c2goKTsKKworICAvKiBub3cgdGhhdCB3ZSBoYXZlIGNyZWF0ZWQgdGhlIHh0IGNs
aWVudCwgYWRkIGl0IHRvIHRoZSBzb2NrZXQuICovCisgIGd0a19zb2NrZXRfYWRkX2lkKEdUS19T
T0NLRVQod2lkZ2V0KSwgeHRiaW4tPnh0d2luZG93KTsKK30KKworCisKK0d0a1dpZGdldCoKK2d0
a194dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3RyaW5nICogZikKK3sKKyAg
R3RrWHRCaW4gKnh0YmluOworICBncG9pbnRlciB1c2VyX2RhdGE7CisKKyAgYXNzZXJ0KHBhcmVu
dF93aW5kb3cgIT0gTlVMTCk7CisgIHh0YmluID0gZ3RrX3R5cGVfbmV3IChHVEtfVFlQRV9YVEJJ
Tik7CisKKyAgaWYgKCF4dGJpbikKKyAgICByZXR1cm4gKEd0a1dpZGdldCopTlVMTDsKKworICBp
ZiAoZikKKyAgICBmYWxsYmFjayA9IGY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgWHQgdG9vbGtp
dCAqLworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IHBhcmVudF93aW5kb3c7CisKKyAgeHRfY2xp
ZW50X2luaXQoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgIEdES19WSVNVQUxfWFZJU1VBTChn
ZGtfcmdiX2dldF92aXN1YWwoKSksCisgICAgICBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdka19y
Z2JfZ2V0X2NvbG9ybWFwKCkpLAorICAgICAgZ2RrX3JnYl9nZXRfdmlzdWFsKCktPmRlcHRoKTsK
KworICBpZiAoIXh0YmluLT54dGNsaWVudC54dGRpc3BsYXkpIHsKKyAgICAvKiBJZiBYdE9wZW5E
aXNwbGF5IGZhaWxlZCwgd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIuCisgICAgICogIEJhaWwgb3V0
LgorICAgICAqLworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJndGtfeHRiaW5faW5p
dDogWHRPcGVuRGlzcGxheSgpIHJldHVybmVkIE5VTEwuXG4iKTsKKyNlbmRpZgorICAgIGdfZnJl
ZSAoeHRiaW4pOworICAgIHJldHVybiAoR3RrV2lkZ2V0ICopTlVMTDsKKyAgfQorCisgIC8qIElm
IHRoaXMgaXMgdGhlIGZpcnN0IHJ1bm5pbmcgd2lkZ2V0LCBob29rIHRoaXMgZGlzcGxheSBpbnRv
IHRoZQorICAgICBtYWlubG9vcCAqLworICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgeworICAgIGlu
dCAgICAgICAgICAgY251bWJlcjsKKyAgICAvKgorICAgICAqIGhvb2sgWHQgZXZlbnQgbG9vcCBp
bnRvIHRoZSBnbGliIGV2ZW50IGxvb3AuCisgICAgICovCisKKyAgICAvKiB0aGUgYXNzdW1wdGlv
biBpcyB0aGF0IGd0a19pbml0IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkICovCisgICAgR1NvdXJj
ZSogZ3MgPSBnX3NvdXJjZV9uZXcoJnh0X2V2ZW50X2Z1bmNzLCBzaXplb2YoR1NvdXJjZSkpOwor
ICAgICAgaWYgKCFncykgeworICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIAorICAg
IGdfc291cmNlX3NldF9wcmlvcml0eShncywgR0RLX1BSSU9SSVRZX0VWRU5UUyk7CisgICAgZ19z
b3VyY2Vfc2V0X2Nhbl9yZWN1cnNlKGdzLCBUUlVFKTsKKyAgICB0YWcgPSBnX3NvdXJjZV9hdHRh
Y2goZ3MsIChHTWFpbkNvbnRleHQqKU5VTEwpOworI2lmZGVmIFZNUworICAgIGNudW1iZXIgPSBY
Q29ubmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2Vsc2UKKyAgICBjbnVtYmVyID0gQ29ubmVj
dGlvbk51bWJlcih4dGRpc3BsYXkpOworI2VuZGlmCisgICAgeHRfZXZlbnRfcG9sbF9mZC5mZCA9
IGNudW1iZXI7CisgICAgeHRfZXZlbnRfcG9sbF9mZC5ldmVudHMgPSBHX0lPX0lOOyAKKyAgICB4
dF9ldmVudF9wb2xsX2ZkLnJldmVudHMgPSAwOyAgICAvKiBobW0uLi4gaXMgdGhpcyBjb3JyZWN0
PyAqLworCisgICAgZ19tYWluX2NvbnRleHRfYWRkX3BvbGwgKChHTWFpbkNvbnRleHQqKU5VTEws
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHRfZXZlbnRfcG9sbF9mZCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfTE9XKTsKKyAgICAvKiBhZGQgYSB0
aW1lciBzbyB0aGF0IHdlIGNhbiBwb2xsIGFuZCBwcm9jZXNzIFh0IHRpbWVycyAqLworICAgIHh0
X3BvbGxpbmdfdGltZXJfaWQgPQorICAgICAgZ3RrX3RpbWVvdXRfYWRkKDI1LAorICAgICAgICAg
ICAgICAgICAgICAgIChHdGtGdW5jdGlvbil4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNr
LAorICAgICAgICAgICAgICAgICAgICAgIHh0ZGlzcGxheSk7CisgIH0KKworICAvKiBCdW1wIHVw
IG91ciB1c2FnZSBjb3VudCAqLworICBudW1fd2lkZ2V0cysrOworCisgIC8qIEJ1aWxkIHRoZSBo
aWVyYWNoeSAqLworICB4dGJpbi0+eHRkaXNwbGF5ID0geHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxh
eTsKKyAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhHVEtfV0lER0VUKHh0YmluKSwgcGFy
ZW50X3dpbmRvdyk7CisgIGdka193aW5kb3dfZ2V0X3VzZXJfZGF0YSh4dGJpbi0+cGFyZW50X3dp
bmRvdywgJnVzZXJfZGF0YSk7CisgIGlmICh1c2VyX2RhdGEpCisgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUih1c2VyX2RhdGEpLCBHVEtfV0lER0VUKHh0YmluKSk7CisKKyAgcmV0
dXJuIEdUS19XSURHRVQgKHh0YmluKTsKK30KKwordm9pZAorZ3RrX3h0YmluX3NldF9wb3NpdGlv
biAoR3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4
LAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KQoreworICB4dGJpbi0+eCA9
IHg7CisgIHh0YmluLT55ID0geTsKKworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAoeHRiaW4p
KQorICAgIGdka193aW5kb3dfbW92ZSAoR1RLX1dJREdFVCAoeHRiaW4pLT53aW5kb3csIHgsIHkp
OworfQorCit2b2lkCitndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIGhlaWdodCkKK3sKKyAgQXJnIGFyZ3NbMl07CisgIEd0a1h0QmluICp4dGJpbiA9IEdUS19Y
VEJJTiAod2lkZ2V0KTsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworCisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVzaXplICVwICVkICVkXG4iLCAodm9pZCAq
KXdpZGdldCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKworICB4dGJpbi0+aGVpZ2h0ID0gaGVp
Z2h0OworICB4dGJpbi0+d2lkdGggID0gd2lkdGg7CisKKyAgLy8gQXZvaWQgQmFkVmFsdWUgZXJy
b3JzIGluIFh0U2V0VmFsdWVzCisgIGlmIChoZWlnaHQgPD0gMCB8fCB3aWR0aCA8PTApIHsKKyAg
ICBoZWlnaHQgPSAxOworICAgIHdpZHRoID0gMTsKKyAgfQorICBYdFNldEFyZyhhcmdzWzBdLCBY
dE5oZWlnaHQsIGhlaWdodCk7CisgIFh0U2V0QXJnKGFyZ3NbMV0sIFh0TndpZHRoLCAgd2lkdGgp
OworICBYdFNldFZhbHVlcyh4dGJpbi0+eHRjbGllbnQudG9wX3dpZGdldCwgYXJncywgMik7CisK
KyAgLyogd2UgbmVlZCB0byBzZW5kIGEgc2l6ZSBhbGxvY2F0ZSBzbyB0aGUgc29ja2V0IGtub3dz
IGFib3V0IHRoZQorICAgICBzaXplIGNoYW5nZXMgKi8KKyAgYWxsb2NhdGlvbi54ID0geHRiaW4t
Png7CisgIGFsbG9jYXRpb24ueSA9IHh0YmluLT55OworICBhbGxvY2F0aW9uLndpZHRoID0geHRi
aW4tPndpZHRoOworICBhbGxvY2F0aW9uLmhlaWdodCA9IHh0YmluLT5oZWlnaHQ7CisKKyAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKHdpZGdldCwgJmFsbG9jYXRpb24pOworfQorCitzdGF0aWMg
dm9pZAorZ3RrX3h0YmluX3VucmVhbGl6ZSAoR3RrV2lkZ2V0ICpvYmplY3QpCit7CisgIEd0a1h0
QmluICp4dGJpbjsKKyAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgor
ICBwcmludGYoImd0a194dGJpbl91bnJlYWxpemUoKVxuIik7CisjZW5kaWYKKworICAvKiBndGtf
b2JqZWN0X2Rlc3Ryb3koKSB3aWxsIGFscmVhZHkgaG9sZCBhIHJlZmNvdW50IG9uIG9iamVjdAor
ICAgKi8KKyAgeHRiaW4gPSBHVEtfWFRCSU4ob2JqZWN0KTsKKyAgd2lkZ2V0ID0gR1RLX1dJREdF
VChvYmplY3QpOworCisgIEdUS19XSURHRVRfVU5TRVRfRkxBR1MgKHdpZGdldCwgR1RLX1ZJU0lC
TEUpOworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAod2lkZ2V0KSkgeworICAgIHh0X2NsaWVu
dF91bnJlYWxpemUoJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgfQorCisgICgqR1RLX1dJREdFVF9D
TEFTUyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKSh3aWRnZXQpOworfQorCitzdGF0aWMgdm9p
ZAorZ3RrX3h0YmluX2Rlc3Ryb3kgKEd0a09iamVjdCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAq
eHRiaW47CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9kZXN0cm95
KClcbiIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOwor
ICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9iamVjdCkpOworCisgIHh0YmluID0g
R1RLX1hUQklOIChvYmplY3QpOworCisgIGlmKHh0YmluLT54dHdpbmRvdykgeworICAgIC8qIHJl
bW92ZSB0aGUgZXZlbnQgaGFuZGxlciAqLworICAgIHh0X2NsaWVudF9kZXN0cm95KCYoeHRiaW4t
Pnh0Y2xpZW50KSk7CisgICAgeHRiaW4tPnh0d2luZG93ID0gMDsKKworICAgIG51bV93aWRnZXRz
LS07IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KKworICAgIC8qIElmIHRoaXMgaXMgdGhl
IGxhc3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQgZGlzcGxheQorICAgICAgIGNvbm5l
Y3Rpb24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KKyAgICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgewor
I2lmZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoInJlbW92aW5nIHRoZSBYdCBjb25uZWN0
aW9uIGZyb20gdGhlIG1haW4gbG9vcFxuIik7CisjZW5kaWYKKyAgICAgIGdfbWFpbl9jb250ZXh0
X3JlbW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4dF9ldmVudF9wb2xsX2ZkKTsKKyAg
ICAgIGdfc291cmNlX3JlbW92ZSh0YWcpOworCisgICAgICBndGtfdGltZW91dF9yZW1vdmUoeHRf
cG9sbGluZ190aW1lcl9pZCk7CisgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKKyAgICB9
CisgIH0KKworICBHVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmRlc3Ryb3kob2JqZWN0
KTsKK30KKworLyoKKyogRm9sbG93aW5nIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBYdCBYRW1i
ZWRkZWQgZm9yIGNsaWVudCBzaWRlCisqLworCisvKiBJbml0aWFsIFh0IHBsdWdpbiAqLworc3Rh
dGljIHZvaWQKK3h0X2NsaWVudF9pbml0KCBYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAg
ICAgICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNv
bG9ybWFwLAorICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKQoreworICBYdEFwcENvbnRleHQg
IGFwcF9jb250ZXh0OworICBjaGFyICAgICAgICAgKm1Bcmd2WzFdOworICBpbnQgICAgICAgICAg
IG1BcmdjID0gMDsKKworICAvKgorICAgKiBJbml0aWFsaXplIFh0IHN0dWZmCisgICAqLworICB4
dGNsaWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBO
VUxMOworICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dHZpc3Vh
bCAgID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSAwOworICB4dGNsaWVudC0+eHRk
ZXB0aCA9IDA7CisKKyAgaWYgKCF4dF9pc19pbml0aWFsaXplZCkgeworI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJzdGFydGluZyB1cCBYdCBzdHVmZlxuIik7CisjZW5kaWYKKyAgICBY
dFRvb2xraXRJbml0aWFsaXplKCk7CisgICAgYXBwX2NvbnRleHQgPSBYdENyZWF0ZUFwcGxpY2F0
aW9uQ29udGV4dCgpOworICAgIGlmIChmYWxsYmFjaykKKyAgICAgIFh0QXBwU2V0RmFsbGJhY2tS
ZXNvdXJjZXMoYXBwX2NvbnRleHQsIGZhbGxiYWNrKTsKKworICAgIHh0ZGlzcGxheSA9IFh0T3Bl
bkRpc3BsYXkoYXBwX2NvbnRleHQsIGdka19nZXRfZGlzcGxheSgpLCBOVUxMLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiV3JhcHBlciIsIE5VTEwsIDAsICZtQXJnYywgbUFyZ3YpOwor
ICAgIGlmICh4dGRpc3BsYXkpCisgICAgICB4dF9pc19pbml0aWFsaXplZCA9IFRSVUU7CisgIH0K
KyAgeHRjbGllbnQtPnh0ZGlzcGxheSAgPSB4dGRpc3BsYXk7CisgIHh0Y2xpZW50LT54dHZpc3Vh
bCAgID0geHR2aXN1YWw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0geHRjb2xvcm1hcDsKKyAg
eHRjbGllbnQtPnh0ZGVwdGggICAgPSB4dGRlcHRoOworfQorCisvKiBDcmVhdGUgdGhlIFh0IGNs
aWVudCB3aWRnZXRzCisqICAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9jcmVhdGUgKCBYdENs
aWVudCogeHRjbGllbnQgLCAKKyAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRkZXJpZCwg
CisgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgaW50
IHdpZHRoICkgCit7CisgIGludCAgICAgICAgICAgbjsKKyAgQXJnICAgICAgICAgICBhcmdzWzZd
OworICBXaWRnZXQgICAgICAgIGNoaWxkX3dpZGdldDsKKyAgV2lkZ2V0ICAgICAgICB0b3Bfd2lk
Z2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJ4dF9jbGllbnRfY3JlYXRlKCkg
XG4iKTsKKyNlbmRpZgorICB0b3Bfd2lkZ2V0ID0gWHRBcHBDcmVhdGVTaGVsbCgiZHJhd2luZ0Fy
ZWEiLCAiV3JhcHBlciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNh
dGlvblNoZWxsV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwgMCk7CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gdG9wX3dpZGdldDsKKworICAvKiBzZXQg
c2l6ZSBvZiBYdCB3aW5kb3cgKi8KKyAgbiA9IDA7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0Tmhl
aWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROd2lkdGgsICAgIHdp
ZHRoKTtuKys7CisgIFh0U2V0VmFsdWVzKHRvcF93aWRnZXQsIGFyZ3MsIG4pOworCisgIGNoaWxk
X3dpZGdldCA9IFh0VmFDcmVhdGVXaWRnZXQoImZvcm0iLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb21wb3NpdGVXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9wX3dpZGdldCwgTlVMTCk7CisKKyAgbiA9IDA7CisgIFh0U2V0QXJn
KGFyZ3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwg
WHROd2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TnZpc3VhbCwg
ICB4dGNsaWVudC0+eHR2aXN1YWwgKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5kZXB0
aCwgICAgeHRjbGllbnQtPnh0ZGVwdGggKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5j
b2xvcm1hcCwgeHRjbGllbnQtPnh0Y29sb3JtYXAgKTsgbisrOworICBYdFNldEFyZyhhcmdzW25d
LCBYdE5ib3JkZXJXaWR0aCwgMCk7IG4rKzsKKyAgWHRTZXRWYWx1ZXMoY2hpbGRfd2lkZ2V0LCBh
cmdzLCBuKTsKKworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7CisgIHh0Y2xp
ZW50LT5vbGR3aW5kb3cgPSB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdzsKKyAgdG9wX3dpZGdldC0+
Y29yZS53aW5kb3cgPSBlbWJlZGRlcmlkOworCisgIC8qIHRoaXMgbGl0dGxlIHRyaWNrIHNlZW1z
IHRvIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHdpZGdldCAqLworI2lmIFhsaWJTcGVjaWZpY2F0
aW9uUmVsZWFzZSA+PSA2CisgIFh0UmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5
LCAKKyAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAg
ICB0b3Bfd2lkZ2V0KTsKKyNlbHNlCisgIF9YdFJlZ2lzdGVyV2luZG93KCBlbWJlZGRlcmlkLAor
ICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZW5kaWYKKyAgWHRSZWFsaXplV2lk
Z2V0KGNoaWxkX3dpZGdldCk7CisKKyAgLyogbGlzdGVuIHRvIGFsbCBYdCBldmVudHMgKi8KKyAg
WFNlbGVjdElucHV0KHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgWHRXaW5k
b3codG9wX3dpZGdldCksIAorICAgICAgICAgICAgICAgMHgwRkZGRkYpOworICB4dF9jbGllbnRf
c2V0X2luZm8gKGNoaWxkX3dpZGdldCwgMCk7CisKKyAgWHRNYW5hZ2VDaGlsZChjaGlsZF93aWRn
ZXQpOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gY2hpbGRfd2lkZ2V0OworCisgIC8qIHNl
dCB0aGUgZXZlbnQgaGFuZGxlciAqLworICBYdEFkZEV2ZW50SGFuZGxlcihjaGlsZF93aWRnZXQs
CisgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGICYgflJlc2l6ZVJlZGlyZWN0TWFzaywKKyAg
ICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFu
ZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOworICBYdEFkZEV2ZW50SGFu
ZGxlcihjaGlsZF93aWRnZXQsIAorICAgICAgICAgICAgICAgICAgICBTdWJzdHJ1Y3R1cmVOb3Rp
ZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAK
KyAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0
ZW5lciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgWFN5bmMoeHRjbGllbnQt
Pnh0ZGlzcGxheSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X3VucmVhbGl6
ZSAoIFh0Q2xpZW50KiB4dGNsaWVudCApCit7CisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNl
ID49IDYKKyAgWHRVbnJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93KTsKKyNl
bHNlCisgIF9YdFVucmVnaXN0ZXJXaW5kb3coeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2lu
ZG93LAorICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyNlbmRp
ZgorCisgIC8qIGZsdXNoIHRoZSBxdWV1ZSBiZWZvcmUgd2UgcmV0dXJuaW5nIG9yaWdpbiB0b3Bf
d2lkZ2V0LT5jb3JlLndpbmRvdworICAgICBvciB3ZSBjYW4gZ2V0IFggZXJyb3Igc2luY2UgdGhl
IHdpbmRvdyBpcyBnb25lICovCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZhbHNlKTsK
KworICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSB4dGNsaWVudC0+b2xkd2lu
ZG93OworICBYdFVucmVhbGl6ZVdpZGdldCh4dGNsaWVudC0+dG9wX3dpZGdldCk7Cit9CisKK3N0
YXRpYyB2b2lkICAgICAgICAgICAgCit4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRj
bGllbnQpCit7CisgIGlmKHh0Y2xpZW50LT50b3Bfd2lkZ2V0KSB7CisgICAgWHRSZW1vdmVFdmVu
dEhhbmRsZXIoeHRjbGllbnQtPmNoaWxkX3dpZGdldCwgMHgwRkZGRkYsIFRSVUUsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxl
ciwgeHRjbGllbnQpOworICAgIFh0RGVzdHJveVdpZGdldCh4dGNsaWVudC0+dG9wX3dpZGdldCk7
CisgICAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lk
ICAgICAgICAgCit4dF9jbGllbnRfc2V0X2luZm8gKFdpZGdldCB4dHBsdWcsIHVuc2lnbmVkIGxv
bmcgZmxhZ3MpCit7CisgIHVuc2lnbmVkIGxvbmcgYnVmZmVyWzJdOworCisgIEF0b20gaW5mb0F0
b20gPSBYSW50ZXJuQXRvbShYdERpc3BsYXkoeHRwbHVnKSwgIl9YRU1CRURfSU5GTyIsIEZhbHNl
KTsgCisKKyAgYnVmZmVyWzFdID0gMDsgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgdmVyc2lv
biAqLworICBidWZmZXJbMV0gPSBmbGFnczsKKworICBYQ2hhbmdlUHJvcGVydHkgKFh0RGlzcGxh
eSh4dHBsdWcpLCBYdFdpbmRvdyh4dHBsdWcpLAorICAgICAgICAgICAgICAgICAgIGluZm9BdG9t
LCBpbmZvQXRvbSwgMzIsCisgICAgICAgICAgICAgICAgICAgUHJvcE1vZGVSZXBsYWNlLAorICAg
ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCAyKTsKK30KKworc3RhdGlj
IHZvaWQKK3h0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UoV2lkZ2V0IHcsIFh0UG9pbnRl
ciBjbGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChY
dENsaWVudCopY2xpZW50X2RhdGE7CisgIHN3aXRjaCAoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFd
KQorICB7CisgIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElGWToKKyAgICBicmVhazsKKyAgY2Fz
ZSBYRU1CRURfV0lORE9XX0FDVElWQVRFOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRm
KCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAg
YnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFOgorI2lmZGVmIERFQlVHX1hU
QklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURVxu
Iik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT046CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01PREFMSVRZ
X09OXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PRkY6
CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01P
REFMSVRZX09GRlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfRk9DVVNf
SU46CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKKyAgICB7CisgICAgICBYRXZlbnQgeGV2ZW50
OworICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4ZXZlbnQpKTsKKworICAgICAgaWYo
ZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9GT0NVU19JTikgeworI2lmZGVmIERF
QlVHX1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgaW5cbiIpOworI2Vu
ZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzSW47CisgICAgICB9CisgICAg
ICBlbHNlIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290
IGZvY3VzIG91dFxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9j
dXNPdXQ7CisgICAgICB9CisKKyAgICAgIHhldmVudC54Zm9jdXMud2luZG93ID0gWHRXaW5kb3co
eHRwbHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgeGV2ZW50Lnhmb2N1cy5kaXNwbGF5ID0gWHRE
aXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIFhTZW5kRXZlbnQoWHREaXNwbGF5
KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAgIHhldmVudC54Zm9jdXMu
d2luZG93LAorICAgICAgICAgICAgICAgICBGYWxzZSwgTm9FdmVudE1hc2ssCisgICAgICAgICAg
ICAgICAgICZ4ZXZlbnQgKTsKKyAgICAgIFhTeW5jKCBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93
aWRnZXQpLCBGYWxzZSk7CisgICAgfQorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGJyZWFr
OworICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLworfQorCitzdGF0aWMgdm9pZCAgICAg
ICAgIAoreHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50
X2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQq
KWNsaWVudF9kYXRhOworICAKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNl
IENsaWVudE1lc3NhZ2U6CisgICAgICAvKiBIYW5kbGUgeGVtYmVkIG1lc3NhZ2UgKi8KKyAgICAg
IGlmIChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQorICAgICAgICAgICAgICAgICBYSW50
ZXJuQXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7CisgICAgICAgIHh0X2NsaWVudF9o
YW5kbGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEsIGV2ZW50KTsKKyAgICAgIH0KKyAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBicmVhazsKKyAgICBj
YXNlIE1hcHBpbmdOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIFhFTUJFRF9N
QVBQRUQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm1hcE5vdGlmeToKKyAgICAgIHh0X2Ns
aWVudF9zZXRfaW5mbyAodywgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzSW46Cisg
ICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRm9jdXNPdXQ6CisgICAgICBicmVhazsKKyAgICBjYXNlIEtleVByZXNzOgorI2lm
ZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoIktleSBQcmVzcyBHb3QhXG4iKTsKKyNlbmRp
ZgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0gLyogRW5k
IG9mIHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3NlbmRfeGVtYmVk
X21lc3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICBsb25n
ICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkZXRhaWwsIAor
ICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGExLCAgCisgICAgICAgICAgICAgICAg
ICAgICBsb25nICAgICAgZGF0YTIsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICB0
aW1lKSAgIAoreworICBYRXZlbnQgeGV2ZW50OyAKKyAgV2luZG93IHc9WHRXaW5kb3coeHRjbGll
bnQtPnRvcF93aWRnZXQpOworICBEaXNwbGF5KiBkcHk9eHRjbGllbnQtPnh0ZGlzcGxheTsKKyAg
aW50IGVycm9yY29kZTsKKworICBtZW1zZXQoJnhldmVudCwwLHNpemVvZih4ZXZlbnQpKTsKKyAg
eGV2ZW50LnhjbGllbnQud2luZG93ID0gdzsKKyAgeGV2ZW50LnhjbGllbnQudHlwZSA9IENsaWVu
dE1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IFhJbnRlcm5BdG9tKGRw
eSwiX1hFTUJFRCIsRmFsc2UpOworICB4ZXZlbnQueGNsaWVudC5mb3JtYXQgPSAzMjsKKyAgeGV2
ZW50LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCisgIHhldmVudC54Y2xpZW50LmRhdGEubFsx
XSA9IG1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFsyXSA9IGRldGFpbDsgCisgIHhl
dmVudC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxb
NF0gPSBkYXRhMjsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWFNlbmRFdmVudCAoZHB5LCB3LCBG
YWxzZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOworICBYU3luYyAoZHB5LEZhbHNlKTsKKworICBp
ZigoZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
ICBwcmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3IoJWQpISEhXG4iLGVycm9yY29kZSk7
CisjZW5kaWYKKyAgfQorfQorCitzdGF0aWMgaW50ICAgICAgICAgICAgIAorZXJyb3JfaGFuZGxl
cihEaXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJyb3IpCit7CisgIHRyYXBwZWRfZXJy
b3JfY29kZSA9IGVycm9yLT5lcnJvcl9jb2RlOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZv
aWQgICAgICAgICAgCit0cmFwX2Vycm9ycyh2b2lkKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUg
PTA7CisgIG9sZF9lcnJvcl9oYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihlcnJvcl9oYW5kbGVy
KTsKK30KKworc3RhdGljIGludCAgICAgICAgIAordW50cmFwX2Vycm9yKHZvaWQpCit7CisgIFhT
ZXRFcnJvckhhbmRsZXIob2xkX2Vycm9yX2hhbmRsZXIpOworICBpZih0cmFwcGVkX2Vycm9yX2Nv
ZGUpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiR2V0IFggV2luZG93IEVycm9y
ID0gJWRcbiIsIHRyYXBwZWRfZXJyb3JfY29kZSk7CisjZW5kaWYKKyAgfQorICByZXR1cm4gdHJh
cHBlZF9lcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X2Zv
Y3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSwgWEV2ZW50ICpldmVu
dCkKK3sKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHcpOworICBYdENsaWVudCAqeHRjbGll
bnQgPSB1c2VyX2RhdGE7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh3KTsKKworICBzd2l0Y2go
ZXZlbnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ3JlYXRlTm90aWZ5OgorICAgICAgaWYoZXZl
bnQtPnhjcmVhdGV3aW5kb3cucGFyZW50ID09IHdpbikgeworICAgICAgICBXaWRnZXQgY2hpbGQ9
WHRXaW5kb3dUb1dpZGdldCggZHB5LCBldmVudC0+eGNyZWF0ZXdpbmRvdy53aW5kb3cpOworICAg
ICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoY2hp
bGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIERlc3Ryb3lO
b3RpZnk6CisgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHcsIHVzZXJfZGF0YSk7Cisg
ICAgICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgaWYoZXZlbnQtPnhy
ZXBhcmVudC5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBwYXJlbnQg
Ki8KKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoZHB5LCBldmVudC0+eHJl
cGFyZW50LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9j
dXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBlbHNl
IGlmKGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRo
ZSBuZXcgY2hpbGQgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBJIGFtIHRo
ZSBvbGQgcGFyZW50ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRvblJl
bGVhc2U6CisjaWYgMAorICAgICAgWFNldElucHV0Rm9jdXMoZHB5LCBYdFdpbmRvdyh4dGNsaWVu
dC0+Y2hpbGRfd2lkZ2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2ZW50LT54YnV0dG9uLnRpbWUpOwor
I2VuZGlmCisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRjbGllbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0gLyogRW5kIG9mIHN3
aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0
ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7CisgIFhXaW5kb3dBdHRyaWJ1
dGVzIGF0dHI7CisgIGxvbmcgZXZlbnRtYXNrOworICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2Vy
X2RhdGE7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhHZXRXaW5k
b3dBdHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3codyksICZhdHRyKTsKKyAgZXZlbnRt
YXNrID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0
dG9uUmVsZWFzZU1hc2s7CisgIFhTZWxlY3RJbnB1dChYdERpc3BsYXkodyksCisgICAgICAgICAg
ICAgICBYdFdpbmRvdyh3KSwgCisgICAgICAgICAgICAgICBldmVudG1hc2spOworCisgIFh0QWRk
RXZlbnRIYW5kbGVyKHcsIAorICAgICAgICAgICAgICAgICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlN
YXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAg
ICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5l
ciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgdW50cmFwX2Vycm9yKCk7Cit9
CisKK3N0YXRpYyB2b2lkCit4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9p
bnRlciB1c2VyX2RhdGEpCit7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMgKCk7
CisgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0
b25SZWxlYXNlTWFzaywgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5k
bGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgdXNlcl9kYXRhKTsKKworICB1bnRyYXBfZXJy
b3IoKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lk
Z2V0IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKSAKK3sKKyAgV2luZG93IHdpbiA9IFh0
V2luZG93KHRyZWVyb290KTsKKyAgV2luZG93ICpjaGlsZHJlbjsKKyAgV2luZG93IHJvb3QsIHBh
cmVudDsKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHRyZWVyb290KTsKKyAgdW5zaWduZWQg
aW50IGksIG5jaGlsZHJlbjsKKworICAvKiBlbnN1cmUgd2UgZG9uJ3QgYWRkIG1vcmUgdGhhbiBv
bmNlICovCisgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJfZGF0YSk7
CisgIHh0X2FkZF9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJfZGF0YSk7CisgIHRyYXBf
ZXJyb3JzKCk7CisgIGlmKCFYUXVlcnlUcmVlKGRweSwgd2luLCAmcm9vdCwgJnBhcmVudCwgJmNo
aWxkcmVuLCAmbmNoaWxkcmVuKSkgeworICAgIHVudHJhcF9lcnJvcigpOworICAgIHJldHVybjsK
KyAgfQorCisgIGlmKHVudHJhcF9lcnJvcigpKSAKKyAgICByZXR1cm47CisKKyAgZm9yKGk9MDsg
aTxuY2hpbGRyZW47ICsraSkgeworICAgIFdpZGdldCBjaGlsZCA9IFh0V2luZG93VG9XaWRnZXQo
ZHB5LCBjaGlsZHJlbltpXSk7CisgICAgaWYgKGNoaWxkKSAKKyAgICAgIHh0X2FkZF9mb2N1c19s
aXN0ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgfQorICBYRnJlZSgodm9pZCopY2hp
bGRyZW4pOworCisgIHJldHVybjsKK30KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsy
eHRiaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5k
ZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0
YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0Ug
QkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAq
IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4g
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1v
emlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNl
bnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxp
bWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5p
dGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3Rl
bXMsIEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFy
ZSBDb3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5
LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBv
ZgorICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3Ig
bGF0ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNh
c2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBp
bnN0ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhl
ciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNl
IHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGlu
ZGljYXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3Zl
IGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9u
cyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQor
ICogdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwg
dGhlIEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioq
KiAqLyAgIAorCisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2RlZmluZSBfX0dUS19YVEJJTl9I
X18KKworI2luY2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmluc2lj
Lmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpZmRl
ZiBNT1pJTExBX0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgorI2lmZGVmIF9JTVBMX0dUS1hU
QklOX0FQSQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQT1JUXyh0eXBlKQorI2Vs
c2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8odHlwZSkKKyNlbmRpZgor
I2Vsc2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKKyNlbmRpZgorCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5
cGVkZWYgc3RydWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJp
bkNsYXNzIEd0a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZUEVfWFRCSU4gICAgICAgICAg
ICAgICAgICAoZ3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmluZSBHVEtfWFRCSU4ob2JqKSAg
ICAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiksIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluKSkKKyNk
ZWZpbmUgR1RLX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR1RLX0NIRUNLX0NMQVNTX0NB
U1QgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmluZSBHVEtfSVNfWFRCSU4ob2Jq
KSAgICAgICAgICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQorI2RlZmluZSBHVEtf
SVNfWFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNz
KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9Y
VEJJTikpCit0eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGllbnQ7CisKK3N0cnVjdCBfWHRD
bGllbnQgeworICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdldAl0b3Bfd2lkZ2V0OyAgICAv
KiBUaGUgdG9wbGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGlsZF93aWRnZXQ7ICAvKiBUaGUg
ZW1iZWRkZWQgd2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7CisgIGludAkJeHRkZXB0aDsK
KyAgQ29sb3JtYXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdpbmRvdzsKK307CisKK3N0cnVj
dCBfR3RrWHRCaW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tldDsKKyAgR2RrV2luZG93ICAg
ICAqcGFyZW50X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRkaXNwbGF5OyAgICAgICAgLyog
WHQgVG9vbGtpdCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAgICAgeHR3aW5kb3c7ICAgICAg
ICAgLyogWHQgVG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAgICAgICAgIHgsIHk7CisgIGdp
bnQgICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50CSB4dGNsaWVudDsgICAgICAg
ICAvKiBYdCBDbGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitzdHJ1Y3QgX0d0a1h0QmluQ2xh
c3MKK3sKKyAgR3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOworfTsKKworR1RLWFRCSU5fQVBJ
KEd0a1R5cGUpICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpOworR1RLWFRCSU5fQVBJKEd0
a1dpZGdldCAqKSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmlu
ZyAqZik7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24g
KEd0a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RLWFRCSU5fQVBJKHZvaWQpICAg
ICAgIGd0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpOworCit0
eXBlZGVmIHN0cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xhdGlvbnMgIHRyYW5zbGF0aW9u
czsgICAgICAgLyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5hZ2VyICAgICovCisgICAgWHRC
b3VuZEFjdGlvbnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJvY2VkdXJlIGJpbmRpbmdzIGZv
ciBhY3Rpb25zICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVjICpjdXJyZW50X3N0YXRlOyAg
LyogVHJhbnNsYXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICovCisgICAgdW5zaWduZWQgbG9u
ZyAgIGxhc3RFdmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAgIAorCit0eXBlZGVmIHN0cnVj
dCBfQ29yZVBhcnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxmOyAgICAgICAgICAgICAgIC8q
IHBvaW50ZXIgdG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLworICAgIFdpZGdldENsYXNzICAg
ICB3aWRnZXRfY2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lkZ2V0J3MgQ2xhc3NSZWMgICAg
ICAqLworICAgIFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAgICAgICAgIC8qIHBhcmVudCB3
aWRnZXQgICAgICAgICAgICAgICAgICAgICAqLworICAgIFhybU5hbWUgICAgICAgICB4cm1fbmFt
ZTsgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1YXJraWZpZWQgICAqLworICAg
IEJvb2xlYW4gICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8qIG1hcmtlZCBmb3IgZGVzdHJv
eSAgICAgICAgICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0ICBkZXN0cm95X2NhbGxiYWNr
czsgIC8qIHdobyB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3llZCAqLworICAgIFh0UG9pbnRl
ciAgICAgICBjb25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFpbnQgcmVjb3JkICAgICAgICAg
ICAgICAgICAqLworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAgICAgICAgICAgICAgIC8qIHdp
bmRvdyBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICB3
aWR0aCwgaGVpZ2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25zICAgICAgICAgICAgICAgICAq
LworICAgIERpbWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAgICAgIC8qIHdpbmRvdyBib3Jk
ZXIgd2lkdGggICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBtYW5hZ2VkOyAg
ICAgICAgICAgIC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2VkPyAgICAgICAqLworICAgIEJv
b2xlYW4gICAgICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlzIHdpZGdldCBzZW5zaXRpdmUg
dG8gdXNlciBldmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBhbmNlc3Rvcl9zZW5zaXRpdmU7
IC8qIGFyZSBhbGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAqLworICAgIFh0RXZlbnRUYWJs
ZSAgICBldmVudF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8gZXZlbnQgZGlzcGF0Y2hlciAg
ICAgICAqLworICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAgICAgICAgICAgIC8qIHRyYW5z
bGF0aW9uIG1hbmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0VHJhbnNsYXRpb25zICBhY2Nl
bGVyYXRvcnM7ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0aW9ucyAgICAgICAgICAqLwor
ICAgIFBpeGVsICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIg
cGl4ZWwgICAgICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBib3JkZXJfcGl4bWFw
OyAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwgICAgICAqLworICAgIFdpZGdl
dExpc3QgICAgICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qgb2YgcG9wdXBzICAgICAgICAg
ICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1fcG9wdXBzOyAgICAgICAgIC8q
IGhvdyBtYW55IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLworICAgIFN0cmluZyAgICAgICAg
ICBuYW1lOyAgICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lICAgICAgICAgICAg
ICAqLworICAgIFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAgICAgICAgIC8qIHdpbmRvdydz
IHNjcmVlbiAgICAgICAgICAgICAgICAgICAqLworICAgIENvbG9ybWFwICAgICAgICBjb2xvcm1h
cDsgICAgICAgICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAg
IFdpbmRvdyAgICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8qIHdpbmRvdyBJRCAgICAgICAg
ICAgICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBkZXB0aDsgICAgICAgICAg
ICAgIC8qIG51bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAgICAqLworICAgIFBpeGVsICAg
ICAgICAgICBiYWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeGVsICAg
ICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3JvdW5kX3BpeG1hcDsgIC8qIHdp
bmRvdyBiYWNrZ3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAgIEJvb2xlYW4gICAgICAgICB2
aXNpYmxlOyAgICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQgYW5kIG5vdCBvY2NsdWRlZD8q
LworICAgIEJvb2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5hZ2VkOy8qIG1hcCB3aW5kb3cg
aWYgaXQncyBtYW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dpZGdldFJlYyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9IFdpZGdldFJlYywgQ29yZVJl
YzsgICAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8K
KyNlbmRpZiAvKiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0
ay94ZW1iZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQt
dGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpz
aGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9D
SyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UK
KyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRh
dGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAy
MDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVE
IG1lc3NhZ2VzICovCisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAor
I2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVE
X1dJTkRPV19ERUFDVElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VT
ICAgICAgICAgICAgMworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQK
KyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJF
RF9GT0NVU19ORVhUICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAg
ICAgICAgICAgICAgIDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4
CisjZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1C
RURfTU9EQUxJVFlfT04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9P
RkYgICAgICAgICAgICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUg
WEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtf
VU5HUkFCX0tFWSAgICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNf
SU46ICovCisjZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmlu
ZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X0xBU1QgICAgICAgICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNk
ZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAzMTI0NikKKysr
IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDMwICs2Niw2IEBAIGludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24o
Y28KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3Qg
UGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAotewotICAgIC8vIFNvcnQgcGx1Zy1pbnMg
dGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCi0gICAgYm9vbCBBYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dN
dWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAh
Y29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJ
bnN0YW5jZXMpOwotICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011
bHRpcGxlSW5zdGFuY2VzKQotICAgICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ID8gLTEgOiAxOwotCi0gICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZp
cnN0LgotICAgIGJvb2wgQWlzSW5QcmVmZXJyZWRQYXRoID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luUGF0aChwYXJlbnREaXJlY3RvcnkoKSk7Ci0gICAgYm9vbCBCaXNJblByZWZl
cnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbXBhcmVU
by5wYXJlbnREaXJlY3RvcnkoKSk7Ci0gICAgaWYgKEFpc0luUHJlZmVycmVkUGF0aCAhPSBCaXNJ
blByZWZlcnJlZFBhdGgpCi0gICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZFBhdGggPyAtMSA6
IDE7Ci0KLSAgICBpbnQgZGlmZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFy
ZVRvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJu
IGRpZmY7Ci0KLSAgICBpZiAoZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVy
c2lvbigpKSkKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVu
dERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51
dGY4KCkuZGF0YSgpKTsKLX0KLQogYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlz
dGVkKCkKIHsKICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1Z2lu
TWluUmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDMxMjQ2KQorKysgV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDYgKzg1OCw1OCBA
QCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhCiAgICAgcmV0dXJuIGxv
YWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7CiB9CiAK
K05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQq
IHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkgICAgaWYg
KG1faXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKwor
ICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUt
PndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBp
cyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3
Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAg
IGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmpl
Y3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoq
KXZhbHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFT
Y3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAg
ICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShl
bWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAg
ICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQq
PihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFs
dWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDov
L3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAg
ICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZv
aWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICBQbGF0Zm9ybVdpZGdl
dCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1XaWRnZXQqPih2YWx1ZSk7CisKKyAgICAg
ICAgICAgICp3ID0gY29udGFpbmluZ1dpbmRvdygpOworCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwogdm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiB7CiAgICAgaWYgKCFyZWN0KSB7CkluZGV4OiBX
ZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwko
cmV2aXNpb24gMzEyNDYpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDA4LTAzLTI0ICBSb2RuZXkgRGF3ZXMgIDxkb2JleUB3YXlvZnRo
ZW1vbmtleS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISEpCisKKyAg
ICAgICAgSGFuZGxlIGNyZWF0aW5nIHBsdWctaW5zIGFuZCBwYXNzaW5nIGRhdGEgdG8gdGhlbS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oOgorCiAyMDA4LTAz
LTIwICBBbHAgVG9rZXIgIDxhbHBAYXRva2VyLmNvbT4KIAogICAgICAgICBHVEsrIGJ1aWxkIGZp
eC4gQmFjayBvdXQgcjMxMTgzLiBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlZCBBUEkgc3R5bGUK
SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShyZXZpc2lvbiAzMTI0NikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENv
cHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTYsNiArNTcsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZy
YW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkK
ICAgICAsIG1fdXNlckFnZW50KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2MSw5
ICsxNjMsMzAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZs
ID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNl
LnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0
aCk7CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCku
dGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAg
QVNTRVJUKGxvYWRlci0+ZnJhbWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5n
IG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMg
bm9ybWFsbHkgZG9uZQorICAgICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyBy
ZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxp
a2UgYWJvdXQ6YmxhbmspLgorICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJy
aWRlRW5jb2RpbmcoKTsKKyAgICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVs
bCgpOworICAgICAgICBpZiAoIXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxv
YWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2Fk
ZXIqIGZyYW1lTG9hZGVyID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxv
YWRlci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0
YSkKKyAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAg
fQorCisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3Bv
bnNlVG9QbHVnaW4pIHsKKyAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGxvYWRlci0+cmVzcG9uc2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRv
UGx1Z2luID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2Vp
dmVEYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJikKQEAgLTI1OSw5ICsyODIsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEZWNpZGVQbwogICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9u
KShQb2xpY3lVc2UpOwogfQogCi1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVn
aW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRn
ZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2lu
U2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3OjpjcmVhdGUo
Y29yZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJh
bVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+
c3RhdHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1
cm4gcGx1Z2luVmlldzsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDIsOCArMzI5LDcgQEAg
UGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBz
dGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFt
ZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxl
bWVudCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCkBAIC02MzAsMTQgKzY1NiwxNCBAQCBTdHJpbmcg
RnJhbWVMb2FkZXJDbGllbnQ6OmdlbmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0g
ICAgQVNTRVJUKGRvY3VtZW50TG9hZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBl
bmNvZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0
aGF0IGlzIG5vcm1hbGx5IGRvbmUKLSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBp
cyByZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEg
KGxpa2UgYWJvdXQ6YmxhbmspLgotICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVy
LT5vdmVycmlkZUVuY29kaW5nKCk7Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlz
TnVsbCgpOwotICAgIGlmIChlbmNvZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBk
b2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1l
bnRMb2FkZXItPmZyYW1lTG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2Vu
KTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3Vt
ZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRG
aW5pc2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzYwLDkgKzc4
NiwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3Vt
ZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBp
ZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7
CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9Q
bHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0
RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDMxMjQ2KQor
KysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCkBAIC0zMiw2ICszMyw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3
LmgiCisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNzksNiArMTgyLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2Vy
QWdlbnQ7CisKKyAgICAgICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAg
ICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9o
YXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXRUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAz
MTI0NikKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDExIEBACisyMDA4LTAzLTI0ICBSb2RuZXkgRGF3ZXMgIDxkb2JleUB3YXlvZnRoZW1vbmtleS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISEpCisKKyAgICAgICAgQWRk
IGFuIGFyZ3VtZW50IHRvIGRpc2FibGUgR1RLKyBwbHVnLWlucyB0byBhdm9pZCBsaW5raW5nIHdp
dGggbGliWHQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMDgtMDMt
MjEgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhlbW9ua2V5LmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBIb2xnZXIuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZp
c2lvbiAzMTI0NikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NY
VmVyc2lvbjsKIG15ICRpc1F0OwogbXkgJGlzR3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBt
eSAkaXNXeDsKIAogIyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBvcnQKQEAgLTQ5Myw2ICs0OTUs
MjMgQEAgc3ViIGRldGVybWluZUlzR3RrKCkKICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVn
aW5zKCkKK3sKKyAgICBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRl
bmFibGVHdGtQbHVnaW5zOworfQorCitzdWIgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7
CisgICAgcmV0dXJuIGlmIGRlZmluZWQoJGVuYWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNo
ZWNrQXJndigiLS1kaXNhYmxlLWd0ay1wbHVnaW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1Bs
dWdpbnMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsK
KyAgICB9Cit9CisKIHN1YiBpc1d4KCkKIHsKICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC04NjQs
NiArODgzLDcgQEAgc3ViIGJ1aWxkR3RrUHJvamVjdCgkJEApCiAKICAgICBpZiAodXNlUW1ha2Uo
KSkgewogICAgICAgICBteSBAYnVpbGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0IiwgIkNPTkZJ
Ry09cXQiKTsKKyAgICAgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBl
bmFibGVHdGtQbHVnaW5zKCk7CiAgICAgICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xl
YW4sIEBidWlsZEFyZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBidWlsZEF1dG90
b29sc1Byb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20098</attachid>
            <date>2008-03-26 13:48:04 -0700</date>
            <delta_ts>2008-04-17 06:12:16 -0700</delta_ts>
            <desc>Updated patch against r31326</desc>
            <filename>webkit-npapi-gtk2.patch</filename>
            <type>text/plain</type>
            <size>97659</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMxMzI2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDgtMDMt
MjQgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhlbW9ua2V5LmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAgICAgICBBZGQgLWxYdCB0byB3ZWJjb3Jl
X2xpYmFkZCB3aGVuIHRhcmdldHRpbmcgWDExLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
CisKIDIwMDgtMDMtMjEgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhlbW9ua2V5LmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIuCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBHTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzEzMjYpCisrKyBHTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw3IEBAIGVuZGlmCiAKIGlmIFRBUkdF
VF9YMTEKIGdsb2JhbF9jcHBmbGFncyArPSAtRFhQX1VOSVgKK3dlYmNvcmVfbGliYWRkICs9IC1s
WHQgLWxuc3ByNAogZW5kaWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJbmRleDogV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMxMzI2KQor
KysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAw
OC0wMy0yNiAgUm9kbmV5IERhd2VzICA8ZG9iZXlAd2F5b2Z0aGVtb25rZXkuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEhKQorCisgICAgICAgIEFkZCBuZXcgZmlsZXMg
Zm9yIHBsdWctaW5zIGltcGxlbWVudGF0aW9uIHRvIGJ1aWxkLgorICAgICAgICBPbmx5IGFkZCBn
dGsyeHRiaW4gZm9yIFgxMSB0YXJnZXQuCisgICAgICAgIFJlbW92ZSBub3cgaW1wbGVtZW50ZWQg
bWV0aG9kcyBmcm9tIEdUSysgVGVtcG9yYXJ5TGlua1N0dWJzLgorICAgICAgICBBZGQgUGx1Z2lu
Vmlldzo6Z2V0VmFsdWUgdG8gUXQgVGVtcG9yYXJ5TGlua1N0dWJzLgorICAgICAgICBNb3ZlIFBs
dWdpblBhY2thZ2U6OmNvbXBhcmUgdG8gY3Jvc3MtcGxhdGZvcm0gY29kZS4KKyAgICAgICAgTW92
ZSBQbHVnaW5WaWV3OjpnZXRWYWx1ZSB0byBwZXItcGxhdGZvcm0gaW1wbGVtZW50YXRpb24uCisg
ICAgICAgIEFkZCBtX25lZWRzWEVtYmVkIHZhcmlhYmxlIGZvciBHVEsrIHBsdWctaW5zIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBBZGQgbmV3IGZpbGVzIHRvIGJ1aWxkIHBsdWctaW4gc3VwcG9y
dCBmb3IgR1RLKy4KKyAgICAgICAgQWRkIGd0azJ4dGJpbi5bY2hdIGFuZCB4ZW1iZWQuaCBmcm9t
IEdlY2tvIGZvciBwbHVnLWlucyB1c2luZyBYdC4KKyAgICAgICAgSW5jbHVkZSBnZGtjb25maWcu
aCBmb3IgR0RLX1dJTkRPV18qIGRlZmluZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAgICogcGx1
Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5W
aWV3LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAg
ICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5E
YXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcDoK
KyAgICAgICAgKiBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcDoKKyAgICAgICAgKiBwbHVn
aW5zL2d0ay9ndGsyeHRiaW4uYzoKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaDoK
KyAgICAgICAgKiBwbHVnaW5zL2d0ay94ZW1iZWQuaDoKKyAgICAgICAgKiBwbHVnaW5zL2d0ay9Q
bHVnaW5EYXRhYmFzZUd0ay5jcHA6CisKIDIwMDgtMDMtMjUgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxz
ZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBUdXJuIG9uIGxpbmstdGltZS1jb2RlZ2VuIGlu
IGh0bWwgYW5kIHJlbmRlcmluZyByZWxhdGVkIGZpbGVzLgpJbmRleDogV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAz
MTMyNikKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTg5OCw3
ICs4OTgsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
U3RyZWFtLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIFwKIAlXZWJDb3Jl
L3BsdWdpbnMvbnBhcGkuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsu
Y3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisJV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5
b3V0LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdlYkNvcmUvcmVuZGVy
aW5nL2JyZWFrX2xpbmVzLmNwcCBcCkBAIC05NTgsNiArOTYxLDExIEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlXZWJDb3JlL3htbC9Y
TUxTZXJpYWxpemVyLmNwcAogCitpZiBUQVJHRVRfWDExCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAor
CVdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKK2VuZGlmCisKIHdlYmtpdGd0a19oZWFk
ZXJzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDMxMzI2KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBA
IGd0ay1wb3J0IHsKICAgICB9CiAgICAgeDExOnBsdWdpbnMgewogICAgICAgICBERUZJTkVTICs9
IFhQX1VOSVgKKyAgICAgICAgTElCUyArPSAtbFh0CiAgICAgfQogCiAgICAgSU5DTFVERVBBVEgg
Kz0gXApAQCAtMTgwLDYgKzE4MSw3IEBAIGd0ay1wb3J0IHsKICAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy94Ym0gXAogICAgIGxvYWRlci9ndGsgXAogICAgIHBhZ2UvZ3RrIFwKKyAgICBwbHVn
aW5zL2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ayBcCiAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydCBcCiAgICAgLi4vV2ViS2l0L2d0ay93ZWJraXQKQEAgLTkxNSwxMyArOTE3LDM1IEBA
IFNPVVJDRVMgKz0gXAogICAgIHhtbC9YU0xUUHJvY2Vzc29yLmNwcAogCiBndGstcG9ydCB7Cisg
ICFwbHVnaW5zIHsKKyAgICBERUZJTkVTICs9IEdUS19ESVNBQkxFX1BMVUdJTlM9MQorICB9Cisg
IEhFQURFUlMgKz0gXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmggXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5oCisKICAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlVHJlZU5vZGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xp
c3QuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9Q
bHVnSW5JbmZvU3RvcmVHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0
ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKKyAgICBwbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvbnBhcGkuY3BwCisK
KyAgeDExOnBsdWdpbnMgeworICAgIEhFQURFUlMgKz0gXAorICAgICAgcGx1Z2lucy9ndGsvZ3Rr
Mnh0YmluLmggXAorICAgICAgcGx1Z2lucy9ndGsveGVtYmVkLmgKKworICAgIFNPVVJDRVMgKz0g
XAorICAgICAgcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKKyAgfQogfQogCiBxdC1wb3J0IHsKQEAg
LTEwMzQsNiArMTA1OCw3IEBAIHF0LXBvcnQgewogfQogCiBndGstcG9ydCB7CisgICAgSU5DTFVE
RVBBVEggKz0gLi4vV2ViQ29yZS9wbHVnaW5zL2d0awogICAgIEhFQURFUlMgKz0gXAogICAgICAg
ICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBcCiAgICAgICAgIC4uL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBcCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvZ3RrL0ZyYW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1l
R3RrLmNwcAkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwxNSArMzEsMTcgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAicnVudGltZV9yb290Lmgi
CiAjaW5jbHVkZSAicnVudGltZS5oIgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1Jl
ZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNl
Rm9yV2lkZ2V0KFdpZGdldCopCitQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBG
cmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwogfQogCiB2b2lkIEZy
YW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMxMzI2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsOCArMzMsNiBAQAogI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
UGFja2FnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKQEAgLTU4LDI4ICs1Niw3IEBAIFZlY3Rv
cjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIC8qIENvbXBsZXRlbHkgZW1wdHkg
c3R1YnMgKG1vc3RseSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KIC8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IFBsdWdpblBh
Y2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhh
c2goKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBh
Y2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6
bG9hZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFBsdWdpblZp
ZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5Q
UmVnaW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRy
YXcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKSB7
IFdpZGdldDo6c2V0Rm9jdXMoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzaG93KCkgeyBXaWRnZXQ6
OnNob3coKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkgeyBXaWRnZXQ6OmhpZGUoKTsgfQot
dm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jikg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxW
aWV3KiB2aWV3KSB7IFdpZGdldDo6c2V0UGFyZW50KHZpZXcpOyB9Ci12b2lkIFBsdWdpblZpZXc6
OmF0dGFjaFRvV2luZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6
OmRldGFjaEZyb21XaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLU5QRXJyb3IgUGx1Z2lu
Vmlldzo6aGFuZGxlUG9zdChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVpbnQzMiwgY29uc3Qg
Y2hhciosIGJvb2wsIHZvaWQqLCBib29sLCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBOUEVSUl9HRU5FUklDX0VSUk9SOyB9Ci12b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXli
b2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci1QbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpIHt9CiAKIENvbG9yIFdlYkNvcmU6OmZvY3Vz
UmluZ0NvbG9yKCkgeyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1
c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpAQCAtOTMsOCArNzAsNSBA
QCBTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdCB7IG5vCiAKIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25z
dCBTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiAKLXZvaWQgUGx1Z2lu
RGF0YTo6aW5pdFBsdWdpbnMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luRGF0
YTo6cmVmcmVzaCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMxMzI2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Niw2ICs5Niw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdChjb25zdCBj
aGEKIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CiB2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVu
dCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KE1vdXNlRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK05QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VmFsdWUgKE5QTlZhcmlhYmxlLCB2b2lkKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgfQogUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSB7fQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCShy
ZXZpc2lvbiAzMTMyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcsMTYgKzI3LDMwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJucHJ1bnRp
bWVfaW1wbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNr
YWdlKCkKIHsKKyAgICAvLyBUaGlzIGRlc3RydWN0b3IgZ2V0cyBjYWxsZWQgZHVyaW5nIHJlZnJl
c2goKSBpZiBQbHVnaW5EYXRhYmFzZSdzCisgICAgLy8gUGx1Z2luU2V0IGhhc2ggaXMgYWxyZWFk
eSBwb3B1bGF0ZWQsIGFzIGl0IHJlbW92ZXMgaXRlbXMgZnJvbQorICAgIC8vIHRoZSBoYXNoIHRh
YmxlLiBDYWxsaW5nIHRoZSBkZXN0cnVjdG9yIG9uIGEgbG9hZGVkIHBsdWctaW4gb2YKKyAgICAv
LyBjb3Vyc2Ugd291bGQgY2F1c2UgYSBjcmFzaCwgc28gd2UgY2hlY2sgdG8gY2FsbCB1bmxvYWQg
YmVmb3JlIHdlCisgICAgLy8gQVNTRVJULgorICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBwcm9iYWJs
eSBhIGJldHRlciB3YXkgdG8gZml4IHRoaXMuCisgICAgaWYgKG1fbG9hZENvdW50ID09IDApCisJ
dW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgZWxzZQorCXVubG9hZCgpOworCiAgICAgQVNT
RVJUKCFtX2lzTG9hZGVkKTsKIH0KIApAQCAtNTgsNiArNzIsMzAgQEAgdm9pZCBQbHVnaW5QYWNr
YWdlOjpmcmVlTGlicmFyeVRpbWVyRmlyZQogICAgIG1fbW9kdWxlID0gMDsKIH0KIAoraW50IFBs
dWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25z
dAoreworICAgIC8vIFNvcnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMg
Zmlyc3QuCisgICAgYm9vbCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBC
YWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1
cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID8gLTEgOiAxOworCisgICAgLy8gU29ydCBwbHVn
LWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWRQ
YXRoID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChwYXJlbnREaXJlY3Rv
cnkoKSk7CisgICAgYm9vbCBCaXNJblByZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQ
cmVmZXJyZWRQbHVnaW5QYXRoKGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7CisgICAgaWYg
KEFpc0luUHJlZmVycmVkUGF0aCAhPSBCaXNJblByZWZlcnJlZFBhdGgpCisgICAgICAgIHJldHVy
biBBaXNJblByZWZlcnJlZFBhdGggPyAtMSA6IDE7CisKKyAgICBpbnQgZGlmZiA9IHN0cmNtcChu
YW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICBpZiAoZGlmZiA9IGNvbXBh
cmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKSkKKyAgICAgICAgcmV0dXJuIGRpZmY7
CisKKyAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNv
bXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKK30KKwogUGx1Z2luUGFj
a2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFBsYXRmb3JtRmls
ZVRpbWUmIGxhc3RNb2RpZmllZCkKICAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luUGFja2FnZT4oMCkK
ICAgICAsIG1fcGF0aChwYXRoKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24g
MzEzMjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5Myw1NSArMzkzLDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciog
bWVzcwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZy
YW1lLCBTdHJpbmcobWVzc2FnZSkpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVl
KE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBpZiAobV9pc0phdmFT
Y3JpcHRQYXVzZWQpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAg
c3dpdGNoICh2YXJpYWJsZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAg
ICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHdp
bmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7
Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5l
ZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3Bs
dWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3Qp
Ci0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsK
LQotICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAgICAgKnYg
PSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBO
UEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1l
bnROUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9
IDA7Ci0KLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8
fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFt
ZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKLQot
ICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBh
cyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2lu
L25wcnVudGltZS5odG1sPgotICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAg
ICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwotCi0g
ICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAgICAqdiA9IHBs
dWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwot
ICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewot
ICAgICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVycHJldF9jYXN0PFBsYXRmb3Jt
V2lkZ2V0Kj4odmFsdWUpOwotCi0gICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsK
LQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9
Ci19Ci0KIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdp
blZpZXcuaAkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBtX2F0dGFjaGVkVG9XaW5kb3c7CiAgICAgICAgIGJvb2wgbV9oYXZlSW5p
dGlhbGl6ZWQ7CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJl
ZDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBPd25QdHI8UGx1Z2luTWVz
c2FnZVRocm90dGxlcldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOwogICAgICAgICBXTkRQUk9DIG1f
cGx1Z2luV25kUHJvYzsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRy
b2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGF0YS5oIgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVn
aW5QYWNrYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucygpCit7CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6
Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+ICZw
bHVnaW5zID0gZGItPnBsdWdpbnMoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3
IFBsdWdpbkluZm87CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ld
OworCisgICAgICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgICAgIGluZm8t
PmZpbGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLT5kZXNjID0gcGFja2Fn
ZS0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAm
IG1pbWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAg
ICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rl
c2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJ
bmZvOworICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworCisgICAgICAgICAg
ICBtaW1lLT50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdl
dChtaW1lLT50eXBlKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4
dGVuc2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApCisgICAg
ICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgICAg
IG1pbWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGRiLT5yZWZyZXNoKCk7Cit9CisKK307
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNp
b24gMzEzMjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgog
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02NSw2ICs2Niw4IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdp
bkRhdGFiYXNlOjpkZWZhdWx0UGwKICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKICAgICBnY2hh
ciogcGF0aDsKIAorICAgIHBhdGggPSAwOworCiAjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkKICAgICBwYXRoID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAiLm1vemls
bGEiLCAicGx1Z2lucyIsIDApOwogICAgIHBhdGhzLmFwcGVuZChwYXRoKTsKQEAgLTEwMCw3ICsx
MDMsMjEgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogCiBib29s
IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBnY2hhciogaG9tZVBhdGg7CisgICAgYm9vbCBy
ZXR2YWwgPSBmYWxzZTsKKworICAgIGhvbWVQYXRoID0gMDsKKworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpCisgICAgaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVf
ZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgMCk7CisjZWxpZiBkZWZpbmVkKEdES19XSU5E
T1dJTkdfV0lOMzIpCisgICAgaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVf
ZGlyKCksICJBcHBsaWNhdGlvbiBEYXRhIiwgIk1vemlsbGEiLCAicGx1Z2lucyIsIDApOworI2Vu
ZGlmCisKKyAgICBpZiAoaG9tZVBhdGgpCisJcmV0dmFsID0gKHN0cmNtcChob21lUGF0aCwgKHBh
dGgudXRmOCgpKS5kYXRhKCkpID09IDApOworCisgICAgcmV0dXJuIHJldHZhbDsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxl
VmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0
ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBl
UmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBC
ZWNhdXNlIGEgc2luZ2xlIHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3
ZSBjYW5ub3QgcmVsaWFibHkgdW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90
IHVubG9hZCB0aGUgSmF2YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBv
bmx5IFZNCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4p
OworCisgICAgICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVn
aW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0
aCB0aGUgSmF2YSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250
Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luUGFj
a2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgTlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0ciBOUF9HZXRNSU1FRGVzY3Jp
cHRpb247CisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBOUFBfR2V0VmFsdWU7CisKKyAgICBnX21v
ZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZO
UF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5Q
X0dldFZhbHVlIiwgKHZvaWQqKikmTlBQX0dldFZhbHVlKTsKKworICAgIGNvbnN0IGdjaGFyKiB0
eXBlcyA9IE5QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0g
Z19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNj
c1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRh
ID0gZ19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRl
c2NyaXB0aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFy
KiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4
dGVuc2lvbnNbal07IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpm
cm9tVVRGOChleHRlbnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFk
ZChtaW1lRGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMu
YWRkKG1pbWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRl
bnNpb25zKTsKKyAgICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3Ry
ZnJlZXYobWltZURlc2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBl
cnIgPSBOUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZidWZmZXIpOworICAg
IGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKwor
ICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNj
cmlwdGlvblN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikK
KyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7Cisg
ICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IG1fbW9kdWxlID0gZ19tb2R1bGVfb3BlbigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVM
RV9CSU5EX0xPQ0FMKTsKKyAgICBpZiAoIW1fbW9kdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5Q
X0luaXRpYWxpemU7CisgICAgTlBFcnJvciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJvbCht
X21vZHVsZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAgICBn
X21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1No
dXRkb3duKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUFBfU2h1dGRvd24pCisg
ICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVv
ZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1
Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2Vy
RnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVu
Y3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFk
ID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9O
ZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9i
cm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJv
d3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50
ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1B
bGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9i
cm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVy
bG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVl
ID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZh
bHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVS
ZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0
ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJh
dzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93
c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQ
b3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZh
bHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0
cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZp
ZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlm
aWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05Q
Tl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0g
X05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05Q
Tl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5f
UmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVu
Y3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJl
bW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5o
YXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhv
ZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0g
X05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9F
bnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAm
bV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAg
ICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKwor
YWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWdu
ZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAg
ICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21w
dXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1
bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVh
bChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQoreworICAg
IHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5j
bHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19w
cm94eS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5o
IgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNp
bmNsdWRlIDxranMvdmFsdWUuaD4KKworI2luY2x1ZGUgPGdka2NvbmZpZy5oPgorCisjaWYgZGVm
aW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRl
IDxnZGsvZ2RreC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorI2luY2x1
ZGUgPGdkay9nZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNp
bmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09i
amVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcg
c3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OworCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFw
YXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
cGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dS
ZWN0ID0gbV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0
OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5k
b3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsK
KyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUo
LW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93
aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGlmIChtX3dp
bmRvdykgeworICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aW5kb3csICZhbGxv
Y2F0aW9uKTsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBpZiAoIW1f
bmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hU
QklOKG1fd2luZG93KSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAg
ICAgICAgICBndGtfeHRiaW5fcmVzaXplKG1fd2luZG93LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwg
bV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2
b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisJZ3RrX3dp
ZGdldF9ncmFiX2ZvY3VzKG1fd2luZG93KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisK
KyAgICBpZiAobV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfc2hv
dyhtX3dpbmRvdyk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpoaWRlKCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgaWYgKG1fYXR0YWNo
ZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworCisg
ICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0
YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAg
ICAgICAvL3BhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAg
IC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cu
dHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0Zy
YW1lVmlldygpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsK
KyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAg
IG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7Cisg
ICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZy
YW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
ICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQp
OworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAKKyAgICAvKiBG
SVhNRTogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCisKKyAgICBLSlM6
OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNl
RXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAg
aWYgKCFtX2lzV2luZG93ZWQpCisgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRTogU3ludGhl
c2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChl
dmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9w
QWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCkt
PmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBh
cmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVu
dCkKKyAgICAgICAgaW5pdCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fd2luZG93KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdp
bmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8
ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25w
V2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBX
aW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0
LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25w
V2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9
IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVp
Z2h0KCk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgewor
ICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRv
dyk7CisKKyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
YXR0YWNoVG9XaW5kb3coKQoreworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cpCisJcmV0dXJu
OworCisgICAgbV9hdHRhY2hlZFRvV2luZG93ID0gdHJ1ZTsKKyAgICBpZiAobV9pc1Zpc2libGUg
JiYgbV93aW5kb3cpCisJZ3RrX3dpZGdldF9zaG93KG1fd2luZG93KTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjpkZXRhY2hGcm9tV2luZG93KCkKK3sKKyAgICBpZiAoIW1fYXR0YWNoZWRUb1dpbmRv
dykKKwlyZXR1cm47CisKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93aW5kb3cpCisJZ3RrX3dp
ZGdldF9oaWRlKG1fd2luZG93KTsKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSBmYWxzZTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFt
cyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJh
dG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5T
dHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0
KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisg
ICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNl
LT5wZGF0YSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3Ry
aW5nQXJyYXksIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJpbmdBcnJheSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAg
ZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwor
fQorCitzdGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIq
IHJlbGF0aXZlVVJMU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVS
TFN0cmluZzsKKworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgorICAgIHVybFN0cmlu
Zy5yZXBsYWNlKCdcbicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisK
KyAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sK
KyAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisK
K2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fdXNlckFn
ZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRl
cigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5k
YXRhKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGlu
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9
IGJ1ZmZlci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAg
Ly8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0
ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVy
biBpICsgMjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVy
IDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYg
KGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAg
IGkgKz0gMjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAg
ICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4Nyku
CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0
ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAv
LyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IC0xOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciog
Ynl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAg
c3BlY2lmaWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZv
cnR1bmF0ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3Jz
ZSB5ZXQsIHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90
aCAoZS5nLiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0
byBiZSBtb3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAg
Ly8gQ1IuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91
bmQgb3IgaXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1p
bmF0aW5nIGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMgKyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8v
IChDUkxGIGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8g
bmV4dCByZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFs
aXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29s
IGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVD
aGFyIGM7CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAn
YScgJiYgbmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVb
aV0pOworICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49
ICdBJyAmJiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFt
ZVtpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAg
IGlmIChuYW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0
cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFs
c2U7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJG
aWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9s
OworICAgIFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwor
CisgICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Ig
d2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZp
bmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRl
czsKKyAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAg
ICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBh
cyByZXR1cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAg
IGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0
ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYu
CisKKyAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxl
bmd0aCA9PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBv
ZiB0aGUgaGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUg
PT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBv
ZiB0aGUgcHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkg
eworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29u
dGludWUKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMg
aGVhZGVyCisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxk
cy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxp
bmVMZW5ndGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBj
dXJyZW50VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFy
KiBjb2xvbjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYm
IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGxhc3RLZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBj
b2xvbiAtIGxpbmUpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoY29sb24gPT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29s
b24sIGVvbCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhl
YWRlckZpZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5p
c051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7Cisg
ICAgICAgICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0bXAg
Kz0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlckZp
ZWxkczsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVy
bCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wg
ZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93
SGVhZGVycykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAgIHJldHVy
biBOUEVSUl9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRS
ZXF1ZXN0OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPGNo
YXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcgZmlsZW5h
bWUoYnVmLCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8v
LyIpKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAg
ICAgICAgLy8gR2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklM
RV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKKworCS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAg
ICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIi
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IDApCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXplKCk7
CisKKyAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZp
bGVIYW5kbGUpOworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBpZiAo
Ynl0ZXNSZWFkIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7
CisKKwlyZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVy
LnJlc2l6ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOwor
ICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBp
bnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVy
cykgeworICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAg
ICAgICBwb3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJs
YW5rTGluZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRk
bGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAg
ICAgICAgICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwg
bG9jYXRpb24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIu
c2l6ZSgpIC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lu
cyBsaWtlIHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAor
ICAgICAgICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4g
U28gd2Ugd2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0
ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAg
ICAgICAgIFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1M
ZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50
KCksIChpbnQpZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92
ZSgiQ29udGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0
aW9uOworICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3Qu
cmVzb3VyY2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVh
ZGVyRmllbGRzKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhU
VFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7CisgICAg
ZnJhbWVMb2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2Fk
KGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCitO
UEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9X
SU5HX1gxMSkKKyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisgICAgICAgICAgICBp
ZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBY
dERpc3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1fd2luZG93KS0+eHRjbGll
bnQueHRkaXNwbGF5KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7
CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMjsK
KyNlbHNlCisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IE5QTlZTdXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDEx
KQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNlCisgICAgICAg
ICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1f
aXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAg
ICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndp
bmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBl
eHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1v
emlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlm
ICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qo
d2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZh
bHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3Jp
cHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAgICBO
UE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1fZWxl
bWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJl
ZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAg
ICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPiht
X2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUg
aXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAg
ICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2Jq
ZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQq
Kil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAg
IGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAg
ICAgICAgICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKGNvbnRhaW5pbmdXaW5k
b3coKS0+d2luZG93KTsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyAgICAg
ICAgICAgICooKEhXTkQgKil3KSA9IEdES19XSU5ET1dJTkdfSFdORChjb250YWluaW5nV2luZG93
KCktPndpbmRvdyk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0
KE5QUmVjdCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJl
Y3QtPnRvcCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50
b3ApOworICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6Zm9yY2VSZWRyYXcoKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193
aWRnZXRfcXVldWVfZHJhdyhtX3dpbmRvdyk7CisgICAgZWxzZQorICAgICAgICBndGtfd2lkZ2V0
X3F1ZXVlX2RyYXcoY29udGFpbmluZ1dpbmRvdygpKTsKK30KKworUGx1Z2luVmlldzo6flBsdWdp
blZpZXcoKQoreworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3Rz
KTsKKworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7Cisg
ICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBt
X3BhcmVudEZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAg
IGlmIChtX3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a0RvbnRVbmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICgh
bV9wbHVnaW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5v
dEZpbmRQbHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdp
bi0+bG9hZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFzdGFydCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90
TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+
cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVt
YmVkKTsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaWYgKG1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgbV93aW5kb3cgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29u
dGFpbmluZ1dpbmRvdygpKSwgbV93aW5kb3cpOworICAgICAgICBzZXRHdGtXaWRnZXQobV93aW5k
b3cpOworICAgIH0gZWxzZSBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fd2luZG93ID0g
Z3RrX3h0YmluX25ldyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKS0+
d2luZG93LCAwKTsKKwlzZXRHdGtXaWRnZXQobV93aW5kb3cpOworICAgIH0KKyNlbHNlCisgICAg
bV93aW5kb3cgPSBndGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLCBtX3dp
bmRvdyk7CisgICAgc2V0R3RrV2lkZ2V0KG1fd2luZG93KTsKKyNlbmRpZgorICAgIHNob3cgKCk7
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkKKwlOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0IHdzOworCisJd3MudHlwZSA9IDA7CisKKwlp
ZiAobV9uZWVkc1hFbWJlZCkgeworCSAgICB3cy5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExB
WShtX3dpbmRvdy0+d2luZG93KTsKKwkgICAgd3MudmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFM
KGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpbmRvdy0+d2luZG93KSkp
OworCSAgICB3cy5kZXB0aCA9IGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRSht
X3dpbmRvdy0+d2luZG93KSktPmRlcHRoOworCSAgICB3cy5jb2xvcm1hcCA9IEdES19DT0xPUk1B
UF9YQ09MT1JNQVAoZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChHREtfRFJBV0FCTEUobV93aW5k
b3ctPndpbmRvdykpKTsKKwl9IGVsc2UgeworCSAgICB3cy5kaXNwbGF5ID0gR1RLX1hUQklOKG1f
d2luZG93KS0+eHRkaXNwbGF5OworCSAgICB3cy52aXN1YWwgPSBHVEtfWFRCSU4obV93aW5kb3cp
LT54dGNsaWVudC54dHZpc3VhbDsKKwkgICAgd3MuZGVwdGggPSBHVEtfWFRCSU4obV93aW5kb3cp
LT54dGNsaWVudC54dGRlcHRoOworCSAgICB3cy5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpbmRv
dyktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisKKwkgICAgWEZsdXNoICh3cy5kaXNwbGF5KTsKKwl9
CisKKwltX25wV2luZG93LndzX2luZm8gPSAmd3M7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAo
bV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdp
bmRvdzsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorCWlmIChtX25lZWRzWEVtYmVk
KQorCSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX1hXSU5ET1cobV93
aW5kb3ctPndpbmRvdyk7CisJZWxzZQorCSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilH
VEtfWFRCSU4obV93aW5kb3cpLT54dHdpbmRvdzsKKyNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19XSU4zMikKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopR0RLX1dJTkRPV19I
V05EKG1fd2luZG93LT53aW5kb3cpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cu
d2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICBzZXROUFdp
bmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVz
TG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L2d0azJ4dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0MSBAQAorLyogLSotIE1vZGU6
IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0
OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAor
LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9H
UEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3Vi
amVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAi
TGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
YmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgor
ICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVu
dGF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29k
ZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0
aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRp
YWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMp
OgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJl
IHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAi
TEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRo
ZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ug
d2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1
bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8g
YWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRp
bmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UK
KyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwu
IElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGll
bnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMg
b2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioq
IEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisgCisvKgorICogVGhlIEd0a1h0QmluIHdpZGdl
dCBhbGxvd3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsg
YXBwbGljYXRpb24uICAKKyAqLworCisjdW5kZWYgR1RLX0RJU0FCTEVfREVQUkVDQVRFRAorCisj
aW5jbHVkZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0a21haW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9n
ZGt4Lmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUg
PHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBz
dHVmZiAqLworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+Cisj
aW5jbHVkZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1
ZGUgPFgxMS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRl
YnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVj
dGlvbiAqLworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAz
MAorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJp
bkNsYXNzICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAg
ICAgIChHdGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194
dGJpbl9yZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAg
ICAgICAgICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7
CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3Qg
ICAgICAqb2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3du
ICAgKEd0a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3Vh
bCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNv
bG9ybWFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRl
cHRoKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICog
eHRjbGllbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93
IGVtYmVkZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhl
aWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgg
KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNs
aWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCog
eHRjbGllbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0
IHh0cGx1ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVy
IChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9o
YW5kbGVfeGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2
ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAo
V2lkZ2V0IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAg
IHh0X2FkZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRy
ZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1v
dmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGlj
IHZvaWQgICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVy
cm9yX2hhbmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0
cmFwIG9mIFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7Citz
dGF0aWMgaW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAo
Km9sZF9lcnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBp
bnQgICAgICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFz
cyAqcGFyZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNw
bGF5ID0gTlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0
YXRpYyBnYm9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMg
Z2ludCAgICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAg
ICAgIHh0X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5n
X3RpbWVyX2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRp
YyBnYm9vbGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAg
ICAgICAgICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKwor
ICBHREtfVEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAg
R0RLX1RIUkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sK
KyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50
cyAmIEdfSU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNw
bGF5KTsKKyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1h
c2s7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAg
IAorCitzdGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNl
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAg
ICAgICAgICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50Owor
ICBYdEFwcENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBw
bGljYXRpb25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisK
KyAgLyogUHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9y
IGRhdGEgb24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5k
IG9ubHkgY2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBm
b3IgWCBldmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5j
ZSB3ZSBhbHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAq
LworICBmb3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5
KTsgaSsrKSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisK
KyAgR0RLX1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGlj
IEdTb3VyY2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAg
eHRfZXZlbnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291
cmNlRnVuYylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMg
Z2Jvb2xlYW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9k
YXRhKQoreworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQg
ZXZlbnRzVG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRh
OworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8q
IFdlIG5lZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nl
c3MKKyAgICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1l
cnMuIE9uIHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBw
IGlmIFh0IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAg
WHQgZXZlbnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMg
YSBoYWNrLAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZl
IG91dCBvZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3Mt
LSAmJiBYdEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxs
KTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9p
ZCkKK3sKKyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90
eXBlKSB7CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAg
ICB7CisgICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAg
ICAgICBzaXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykg
Z3RrX3h0YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0
YmluX2luaXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVz
ZXJ2ZWRfMiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAg
fTsKKyAgICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwg
Jnh0YmluX2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2
b2lkCitndGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0
a1dpZGdldENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xh
c3M7CisKKyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7
CisKKyAgd2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRf
Y2xhc3MtPnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJl
YWxpemUgPSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpF
Q1RfQ0xBU1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rl
c3Ryb3k7Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0Ymlu
KQoreworICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cg
PSBOVUxMOworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0Ymlu
LT55ID0gMDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQg
KndpZGdldCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBn
ZW9tZXRyeSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3Rr
X3h0YmluX3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtf
SVNfWFRCSU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisg
IC8qIGNhY3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5k
b3dfZ2V0X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQp
OworICBhbGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBn
dGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIs
IHgsIHksIHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0
aW9uLndpZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsK
KworICAvKiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1Mo
cGFyZW50X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNs
aWVudCB3aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAor
ICAgICAgIGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRi
aW4tPmhlaWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0g
WHRXaW5kb3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7
CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0
byB0aGUgc29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCks
IHh0YmluLT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChH
ZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJp
bjsKKyAgZ3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5V
TEwpOworICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgh
eHRiaW4pCisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFs
bGJhY2sgPSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4t
PnBhcmVudF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRi
aW4tPnh0Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlz
dWFsKCkpLAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1h
cCgpKSwKKyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJp
bi0+eHRjbGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQs
IHdlIGNhbid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNp
ZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3Bs
YXkoKSByZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAg
ICByZXR1cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBm
aXJzdCBydW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFp
bmxvb3AgKi8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNu
dW1iZXI7CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBl
dmVudCBsb29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtf
aW5pdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3Vy
Y2VfbmV3KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3Mp
IHsKKyAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRf
cHJpb3JpdHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5f
cmVjdXJzZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5D
b250ZXh0KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1i
ZXIoeHRkaXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRk
aXNwbGF5KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAg
IHh0X2V2ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9m
ZC5yZXZlbnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdf
bWFpbl9jb250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3
ZSBjYW4gcG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVy
X2lkID0KKyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAo
R3RrRnVuY3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAg
ICAgICAgICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291
bnQgKi8KKyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAg
eHRiaW4tPnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRn
ZXRfc2V0X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOwor
ICBnZGtfd2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2Rh
dGEpOworICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIodXNlcl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VU
ICh4dGJpbik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4
dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+
eSA9IHk7CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2lu
ZG93X21vdmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAor
Z3RrX3h0YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBn
aW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7
CisgIEFyZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7
CisgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHBy
aW50ZigiZ3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRo
LCBoZWlnaHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4t
PndpZHRoICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZh
bHVlcworICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsK
KyAgICB3aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWln
aHQpOworICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1
ZXMoeHRiaW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQg
dG8gc2VuZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAg
ICAgc2l6ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0
aW9uLnkgPSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAg
YWxsb2NhdGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJp
bl91bnJlYWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47Cisg
IEd0a1dpZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtf
eHRiaW5fdW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95
KCkgd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0Ymlu
ID0gR1RLX1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKwor
ICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdU
S19XSURHRVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYo
eHRiaW4tPnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9j
bGFzcyktPnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9k
ZXN0cm95IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRp
ZgorCisgIGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZf
ZmFpbCAoR1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2Jq
ZWN0KTsKKworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50
IGhhbmRsZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOwor
ICAgIHh0YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ug
b3VyIHVzYWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcg
d2lkZ2V0LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhl
IG1haW5sb29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19Y
VEJJTgorICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBt
YWluIGxvb3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgo
R01haW5Db250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9y
ZW1vdmUodGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJf
aWQpOworICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RL
X09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisq
IEZvbGxvd2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGll
bnQgc2lkZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9j
bGllbnRfaW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFs
ICp4dHZpc3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAg
ICAgICAgICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsK
KyAgY2hhciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisK
KyAgLyoKKyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93
aWRnZXQgPSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGll
bnQtPnh0ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7Cisg
IHh0Y2xpZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisg
IGlmICgheHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
Zigic3RhcnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlh
bGl6ZSgpOworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsK
KyAgICBpZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9j
b250ZXh0LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9j
b250ZXh0LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNw
bGF5KQorICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54
dGRpc3BsYXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFs
OworICB4dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRl
cHRoICAgID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cwor
KiAgKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50
ICwgCisgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAg
ICAgICAgIGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAorewor
ICBpbnQgICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAg
ICAgICBjaGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVm
IERFQlVHX1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYK
KyAgdG9wX3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIi
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdl
dENsYXNzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlz
cGxheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNs
aWVudC0+dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2lu
ZG93ICovCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0
KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBY
dFNldFZhbHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZh
Q3JlYXRlV2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcG9zaXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRvcF93aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5o
ZWlnaHQsICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3
aWR0aCk7bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0
dmlzdWFsICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50
LT54dGRlcHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xp
ZW50LT54dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lk
dGgsIDApOyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAg
WFN5bmMoeHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93
ID0gdG9wX3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0g
ZW1iZWRkZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5p
dGlhbGl6aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0g
NgorICBYdFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAg
ICAgICAgICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7
CisjZWxzZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAg
ICAgICAgIHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRn
ZXQpOworCisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4
dGNsaWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQp
LCAKKyAgICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGls
ZF93aWRnZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGll
bnQtPmNoaWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhh
bmRsZXIgKi8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAg
ICAgIFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50
X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lk
Z2V0LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRv
blJlbGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAg
ICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZB
TFNFKTsKK30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCog
eHRjbGllbnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5y
ZWdpc3RlckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAg
ICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJl
Z2lzdGVyV2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAg
ICAgICAgICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVz
aCB0aGUgcXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53
aW5kb3cKKyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29u
ZSAqLworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQt
PnRvcF93aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJl
YWxpemVXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAg
ICAgICAgIAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBp
Zih4dGNsaWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xp
ZW50LT5jaGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsK
KyAgICBYdERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50
LT50b3Bfd2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRf
Y2xpZW50X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQorewor
ICB1bnNpZ25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0
b20oWHREaXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZl
clsxXSA9IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVy
WzFdID0gZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRX
aW5kb3coeHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMy
LAorICAgICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAg
ICAodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGll
bnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEs
IFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVu
dF9kYXRhOworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNl
IFhFTUJFRF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRP
V19BQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdl
dCBYRU1CRURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNl
IFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50
ZigiWHQgY2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisg
ICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5k
aWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVH
X1hUQklOCisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIp
OworI2VuZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhF
TUJFRF9GT0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNl
dCgmeGV2ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50
LmRhdGEubFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAg
ICAgICBwcmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4
ZXZlbnQueGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZk
ZWYgREVCVUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIp
OworI2VuZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAg
fQorCisgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRf
d2lkZ2V0KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWct
PmNoaWxkX3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxk
X3dpZGdldCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAg
ICAgICAgICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50
ICk7CisgICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2Up
OworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQg
b2YgWEVtYmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVu
dF9ldmVudF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQg
KmV2ZW50KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsK
KyAgCisgIHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdl
OgorICAgICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhj
bGllbnQubWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlz
cGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiX1hFTUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9t
ZXNzYWdlKHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90
aWZ5OgorICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAg
IGJyZWFrOworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8g
KHcsIDApOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1i
ZWRfbWVzc2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURf
UkVRVUVTVF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3Vz
T3V0OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJ
TgorICAgICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZl
bnQtPnR5cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENs
aWVudCAgKnh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2Us
CisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAg
IGRhdGEyLCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAg
WEV2ZW50IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0
KTsKKyAgRGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7
CisKKyAgbWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50
LndpbmRvdyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4
ZXZlbnQueGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZh
bHNlKTsKKyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRh
dGEubFswXSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOwor
ICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5k
YXRhLmxbM10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisK
KyAgdHJhcF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRN
YXNrLCAmeGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9
IHVudHJhcF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5k
X3hlbWJlZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0K
K30KKworc3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlz
cGxheSwgWEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJv
ci0+ZXJyb3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAor
dHJhcF9lcnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJy
b3JfaGFuZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRp
YyBpbnQgICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVy
KG9sZF9lcnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFw
cGVkX2Vycm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29k
ZTsKK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lcigg
V2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3Bs
YXkgKmRweSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRh
OworICBXaW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQor
ICAgIHsKKyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2lu
ZG93LnBhcmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRn
ZXQoIGRweSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxk
KQorICAgICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEp
OworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAg
eHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50
ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdp
ZGdldCBjaGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cp
OworICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3Ry
ZWUoIGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJl
cGFyZW50LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICov
CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAq
LworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAK
KyAgICAgIFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdl
dCksIFJldmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAg
c2VuZF94ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5
cGUpICovCit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3
LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBs
b25nIGV2ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQg
ZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhY
dERpc3BsYXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91
cl9ldmVudF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNr
OworICBYU2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3co
dyksIAorICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3
LCAKKyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJl
bGVhc2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAg
ICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAg
ICAgICAgICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9p
ZAoreHRfcmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRh
KQoreworICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2
ZW50SGFuZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ss
IFRSVUUsIAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRf
Zm9jdXNfbGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0
YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwg
WHRQb2ludGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9v
dCk7CisgIFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3Bs
YXkgKmRweSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRy
ZW47CisKKyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9y
ZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9j
dXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBp
ZighWFF1ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGls
ZHJlbikpIHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1
bnRyYXBfZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyAr
K2kpIHsKKyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5b
aV0pOworICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSgg
Y2hpbGQsIHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICBy
ZXR1cm47Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTU5IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6
IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9
Mjp0YWJzdG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisg
KiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZl
cnNpb24KKyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwv
CisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUKKyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJY
dEJpbiBXaWRnZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVy
IG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRz
IG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQ
TCIpLCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2Yg
dGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0
aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24g
b2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisg
KiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkg
dGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhl
IExHUEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lm
bmRlZiBfX0dUS19YVEJJTl9IX18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRl
IDxndGsvZ3Rrc29ja2V0Lmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUg
PFgxMS9YdXRpbC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElF
TlQKKyNpbmNsdWRlICJuc2NvcmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZp
bmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdU
S1hUQklOX0FQSSh0eXBlKSBOU19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5l
IEdUS1hUQklOX0FQSSh0eXBlKSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBf
R3RrWHRCaW4gR3RrWHRCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJp
bkNsYXNzOworCisjZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194
dGJpbl9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAg
ICAoR1RLX0NIRUNLX0NBU1QgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJ
Tl9DTEFTUyhrbGFzcykgICAgICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklO
LCBHdGtYdEJpbkNsYXNzKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAg
ICAoR1RLX0NIRUNLX1RZUEUgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNT
KGtsYXNzKSAgICAgICAoR1RLX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRl
ZiBzdHJ1Y3QgX1h0Q2xpZW50IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlz
cGxheQkqeHRkaXNwbGF5OworICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVs
IHdpZGdldCAqLworICBXaWRnZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdl
dCAqLworICBWaXN1YWwJKnh0dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0
Y29sb3JtYXA7CisgIFdpbmRvdwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7
CisgIEd0a1NvY2tldCAgICAgIGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5k
b3c7CisgIERpc3BsYXkgICAgICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlz
cGxheSAqLworCisgIFdpbmRvdyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xr
aXQgWFdpbmRvdyAqLworICBnaW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3
aWR0aCwgaGVpZ2h0OworICBYdENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50
IGZvciBYRW1iZWQgKi8KK307CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1Nv
Y2tldENsYXNzIHdpZGdldF9jbGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAg
Z3RrX3h0YmluX2dldF90eXBlICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3Rr
X3h0YmluX25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRC
SU5fQVBJKHZvaWQpICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRi
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp
bnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2ludCAgICAgICB5KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5f
cmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3Qg
X1h0VE1SZWMgeworICAgIFh0VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHBy
aXZhdGUgdG8gVHJhbnNsYXRpb24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBw
cm9jX3RhYmxlOyAgICAgICAgIC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAq
LworICAgIHN0cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9u
IE1hbmFnZXIgc3RhdGUgcHRyICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRU
aW1lOworfSBYdFRNUmVjLCAqWHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsK
KyAgICBXaWRnZXQgICAgICAgICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdp
ZGdldCBpdHNlbGYgICAgICAgICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNz
OyAgICAgICAvKiBwb2ludGVyIHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRn
ZXQgICAgICAgICAgcGFyZW50OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAg
ICAgICAgICAgICAgKi8KKyAgICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAv
KiB3aWRnZXQgcmVzb3VyY2UgbmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAg
ICAgYmVpbmdfZGVzdHJveWVkOyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAg
ICAgKi8KKyAgICBYdENhbGxiYWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8g
Y2FsbCB3aGVuIHdpZGdldCBkZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3Ry
YWludHM7ICAgICAgICAvKiBjb25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAg
ICBQb3NpdGlvbiAgICAgICAgeCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24g
ICAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsg
ICAgICAvKiB3aW5kb3cgZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNp
b24gICAgICAgYm9yZGVyX3dpZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAg
ICAgICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBp
cyB3aWRnZXQgZ2VvbWV0cnkgbWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAg
c2Vuc2l0aXZlOyAgICAgICAgICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRz
Ki8KKyAgICBCb29sZWFuICAgICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFu
Y2VzdG9ycyBzZW5zaXRpdmU/ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFi
bGU7ICAgICAgICAvKiBwcml2YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBY
dFRNUmVjICAgICAgICAgdG07ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2Vt
ZW50ICAgICAgICAgICAgKi8KKyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAg
ICAvKiBhY2NlbGVyYXRvciB0cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAg
ICAgICAgYm9yZGVyX3BpeGVsOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAg
ICAgICAgKi8KKyAgICBQaXhtYXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5k
b3cgYm9yZGVyIHBpeG1hcCBvciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9w
dXBfbGlzdDsgICAgICAgICAvKiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8K
KyAgICBDYXJkaW5hbCAgICAgICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1
cHMgICAgICAgICAgICAgICAgICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAg
ICAgICAgICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3Jl
ZW4gICAgICAgICAgKnNjcmVlbjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAg
ICAgICAgICAgICAgKi8KKyAgICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAv
KiBjb2xvcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAg
ICAgd2luZG93OyAgICAgICAgICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBDYXJkaW5hbCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIg
b2YgcGxhbmVzIGluIHdpbmRvdyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dy
b3VuZF9waXhlbDsgICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAg
ICBQaXhtYXAgICAgICAgICAgYmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3Vu
ZCBwaXhtYXAgb3IgTlVMTCAgKi8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAg
ICAgICAvKiBpcyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFu
ICAgICAgICAgbWFwcGVkX3doZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdl
ZD8gICAgICAgKi8KK30gQ29yZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgewor
ICAgIENvcmVQYXJ0ICAgIGNvcmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19H
VEtfWFRCSU5fSF9fICovCisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQg
QEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmls
OyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRh
YnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZl
cnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0
aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
bgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAq
CisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVNQkVEIERl
Y2xhcmF0aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwg
Q29kZSBpcworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBi
eSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIElu
aXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9y
KHMpOgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5
IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRo
ZSAiTEdQTCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9y
IHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5
b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cisg
KiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3Qg
dG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVs
ZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3Rp
Y2UKKyAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExH
UEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNp
cGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVy
bXMgb2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoq
KioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdlcyAqLwor
I2RlZmluZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVE
X1dJTkRPV19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVBQ1RJ
VkFURSAgICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAgICAgIDMK
KyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFhFTUJF
RF9GT0NVU19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNfTkVYVCAg
ICAgICAgICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAgICAgICA3
CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBYRU1C
RURfVU5HUkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09O
ICAgICAgICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAgICAgICAg
IDExCisKKy8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9HVEtfR1JB
Ql9LRVkgICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkgICAg
ICAgICAgIDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLworI2RlZmlu
ZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X0ZJUlNUICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAgICAgICAg
ICAgICAgMgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhFTUJFRF9N
QVBQRUQgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93
aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5QYWNrYWdlV2luLmNwcAkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJDb3JlL3BsdWdp
bnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwzMCArNjYs
NiBAQCBpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvCiAgICAgcmV0dXJu
IDA7CiB9CiAKLWludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2Um
IGNvbXBhcmVUbykgY29uc3QKLXsKLSAgICAvLyBTb3J0IHBsdWctaW5zIHRoYXQgYWxsb3cgbXVs
dGlwbGUgaW5zdGFuY2VzIGZpcnN0LgotICAgIGJvb2wgQWFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ID0gIXF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5j
ZXMpOwotICAgIGJvb2wgQmFsbG93c011bHRpcGxlSW5zdGFuY2VzID0gIWNvbXBhcmVUby5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAg
ICBpZiAoQWFsbG93c011bHRpcGxlSW5zdGFuY2VzICE9IEJhbGxvd3NNdWx0aXBsZUluc3RhbmNl
cykKLSAgICAgICAgcmV0dXJuIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA/IC0xIDogMTsKLQot
ICAgIC8vIFNvcnQgcGx1Zy1pbnMgaW4gYSBwcmVmZXJyZWQgcGF0aCBmaXJzdC4KLSAgICBib29s
IEFpc0luUHJlZmVycmVkUGF0aCA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBh
dGgocGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGJvb2wgQmlzSW5QcmVmZXJyZWRQYXRoID0gUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb21wYXJlVG8ucGFyZW50RGlyZWN0
b3J5KCkpOwotICAgIGlmIChBaXNJblByZWZlcnJlZFBhdGggIT0gQmlzSW5QcmVmZXJyZWRQYXRo
KQotICAgICAgICByZXR1cm4gQWlzSW5QcmVmZXJyZWRQYXRoID8gLTEgOiAxOwotCi0gICAgaW50
IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAg
aWYgKGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSkpCi0gICAg
ICAgIHJldHVybiBkaWZmOwotCi0gICAgcmV0dXJuIHN0cmNtcChwYXJlbnREaXJlY3RvcnkoKS51
dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSk7
Ci19Ci0KIGJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCiB7CiAgICAg
c3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBzbFBsdWdpbk1pblJlcXVpcmVkKDB4
NTFCRTAwMDAsIDB4MDAwMTAwMDApOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdX
aW4uY3BwCShyZXZpc2lvbiAzMTMyNikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmll
d1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OCw2ICs4NTgsNTggQEAgTlBFcnJvciBQbHVn
aW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYQogICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJl
cXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOwogfQogCitOUEVycm9yIFBsdWdp
blZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAg
ICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisg
ICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlw
dFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgICAgIE5Q
T2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHRO
UE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8g
YmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9w
cm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2Ny
aXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1Njcmlw
dE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAg
ICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZQ
bHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQor
CQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICAgICAgTlBPYmplY3QqIHBs
dWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Rh
Z05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNj
cmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+
Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVk
IHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdp
blNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5T
Y3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Cisg
ICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZu
ZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVy
cHJldF9jYXN0PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUpOworCisgICAgICAgICAgICAqdyA9IGNv
bnRhaW5pbmdXaW5kb3coKTsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VO
RVJJQ19FUlJPUjsKKyAgICB9Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3Qo
TlBSZWN0KiByZWN0KQogewogICAgIGlmICghcmVjdCkgewpJbmRleDogV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDMxMzI2
KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBA
QAorMjAwOC0wMy0yNiAgUm9kbmV5IERhd2VzICA8ZG9iZXlAd2F5b2Z0aGVtb25rZXkuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEhKQorCisgICAgICAgIEhhbmRsZSBj
cmVhdGluZyBwbHVnLWlucyBhbmQgcGFzc2luZyBkYXRhIHRvIHRoZW0uCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaDoKKwogMjAwOC0wMy0yNSAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4KSW5k
ZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwCShyZXZpc2lvbiAzMTMyNikKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICog
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHly
aWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+Cisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTYsNiArNTcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1l
KiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAg
ICAsIG1fdXNlckFnZW50KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2MSw5ICsx
NjMsMzAgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIs
IGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRl
eHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7
CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4
dEVuY29kaW5nTmFtZSgpOworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgQVNT
RVJUKGxvYWRlci0+ZnJhbWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9u
IHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9y
bWFsbHkgZG9uZQorICAgICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNl
aXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2Ug
YWJvdXQ6YmxhbmspLgorICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJyaWRl
RW5jb2RpbmcoKTsKKyAgICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgp
OworICAgICAgICBpZiAoIXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRl
ci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2FkZXIq
IGZyYW1lTG9hZGVyID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxvYWRl
ci0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0YSkK
KyAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQor
CisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNl
VG9QbHVnaW4pIHsKKyAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNl
KGxvYWRlci0+cmVzcG9uc2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1
Z2luID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVE
YXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlcios
IHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JikKQEAgLTI1OSw5ICsyODIsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
ZWNpZGVQbwogICAgIChjb3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQ
b2xpY3lVc2UpOwogfQogCi1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4o
Y29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRnZXQq
IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6
ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3OjpjcmVhdGUoY29y
ZShtX2ZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZh
bHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3Rh
dHVzKCkgPT0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4g
cGx1Z2luVmlldzsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDIsOCArMzI5LDcgQEAgUGFz
c1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0
aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxv
YWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVu
dCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCkBAIC01OTksMTQgKzYyNSwxNCBAQCBTdHJpbmcgRnJh
bWVMb2FkZXJDbGllbnQ6OmdlbmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAg
QVNTRVJUKGRvY3VtZW50TG9hZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbmNv
ZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0
IGlzIG5vcm1hbGx5IGRvbmUKLSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyBy
ZWNlaXZlZCwgZXZlbiBmb3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxp
a2UgYWJvdXQ6YmxhbmspLgotICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5v
dmVycmlkZUVuY29kaW5nKCk7Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVs
bCgpOwotICAgIGlmIChlbmNvZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBkb2N1
bWVudExvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1lbnRM
b2FkZXItPmZyYW1lTG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsK
KworICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50
TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5p
c2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2Vu
dFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzIzLDkgKzc0OSwx
MyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50
RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAo
bV9wbHVnaW5WaWV3KSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7Cisg
ICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVn
aW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93
bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDMxMzI2KQorKysg
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1
c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFi
b3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCkBAIC0zMiw2ICszMyw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3Lmgi
CisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0xNzAsNiArMTczLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdl
bnQ7CisKKyAgICAgICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAg
ICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXRUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMTMy
NikKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEx
IEBACisyMDA4LTAzLTI2ICBSb2RuZXkgRGF3ZXMgIDxkb2JleUB3YXlvZnRoZW1vbmtleS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISEpCisKKyAgICAgICAgQWRkIGFu
IGFyZ3VtZW50IHRvIGRpc2FibGUgR1RLKyBwbHVnLWlucyB0byBhdm9pZCBsaW5raW5nIHdpdGgg
bGliWHQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMDgtMDMtMjUg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQg
Zml4CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAzMTMyNikKKysr
IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2
ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NYVmVyc2lvbjsKIG15ICRp
c1F0OwogbXkgJGlzR3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBteSAkaXNXeDsKIAogIyBW
YXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBvcnQKQEAgLTQ5Myw2ICs0OTUsMjMgQEAgc3ViIGRldGVy
bWluZUlzR3RrKCkKICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVnaW5zKCkKK3sKKyAgICBk
ZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRlbmFibGVHdGtQbHVnaW5z
OworfQorCitzdWIgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgcmV0dXJuIGlm
IGRlZmluZWQoJGVuYWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNoZWNrQXJndigiLS1kaXNh
YmxlLWd0ay1wbHVnaW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1BsdWdpbnMgPSAwOworICAg
IH0gZWxzZSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsKKyAgICB9Cit9CisKIHN1
YiBpc1d4KCkKIHsKICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC04NjQsNiArODgzLDcgQEAgc3Vi
IGJ1aWxkR3RrUHJvamVjdCgkJEApCiAKICAgICBpZiAodXNlUW1ha2UoKSkgewogICAgICAgICBt
eSBAYnVpbGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0IiwgIkNPTkZJRy09cXQiKTsKKyAgICAg
ICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBlbmFibGVHdGtQbHVnaW5z
KCk7CiAgICAgICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xlYW4sIEBidWlsZEFyZ3Mp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBidWlsZEF1dG90b29sc1Byb2plY3QoJGNs
ZWFuLCBAYnVpbGRBcmdzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20604</attachid>
            <date>2008-04-16 15:15:30 -0700</date>
            <delta_ts>2008-04-17 06:12:39 -0700</delta_ts>
            <desc>alternative updated version of patch (against 31893, despite the filename)</desc>
            <filename>webkit-31326-plugin.patch</filename>
            <type>text/plain</type>
            <size>95453</size>
            <attacher name="Adam Williamson">adamw</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzMTMyNikKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiAr
MjQwLDcgQEAgZW5kaWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBf
VU5JWAord2ViY29yZV9saWJhZGQgKz0gLWxYdCAtbG5zcHI0CiBlbmRpZgogCiBpZiAhRU5BQkxF
X0RFQlVHCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDMxMzI2KQorKysgV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtODk4LDcgKzg5OCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKIAlXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgXAorCVdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKIAlX
ZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmlu
Zy9iaWRpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIFwKQEAgLTk1
OCw2ICs5NjEsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCiAKK2lmIFRBUkdF
VF9YMTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYworZW5kaWYKKwogd2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVs
cGVyLmgKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgZ3RrLXBvcnQgewogICAgIH0KICAgICB4MTE6
cGx1Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICBMSUJTICs9IC1s
WHQKICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0xODAsNiArMTgxLDcgQEAgZ3Rr
LXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBcCiAgICAgbG9hZGVyL2d0
ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAgICAuLi9XZWJLaXQvZ3Rr
IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3Rr
L3dlYmtpdApAQCAtOTE1LDEzICs5MTcsMzUgQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCiAKIGd0ay1wb3J0IHsKKyAgIXBsdWdpbnMgeworICAgIERFRklORVMgKz0g
R1RLX0RJU0FCTEVfUExVR0lOUz0xCisgIH0KKyAgSEVBREVSUyArPSBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z2luRGF0YWJhc2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcCAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwK
KyAgICBwbHVnaW5zL2d0ay9ucGFwaS5jcHAKKworICB4MTE6cGx1Z2lucyB7CisgICAgSEVBREVS
UyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCisgICAgICBwbHVnaW5zL2d0
ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYworICB9CiB9CiAKIHF0LXBvcnQgewpAQCAtMTAzNCw2ICsxMDU4LDcgQEAgcXQtcG9ydCB7
CiB9CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMv
Z3RrCiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAzMTMyNikKKysr
IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTMwLDE1ICszMSwxNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJranNfcHJveHku
aCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
PiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikKK1Bhc3NSZWZQ
dHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZv
cldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+Ymlu
ZGluZ0luc3RhbmNlKCk7CiB9CiAKIHZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cAkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKIApAQCAtNTgsMjggKzU2LDcgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJh
eShjb25zdAogLyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0
byBydW4pOiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwogCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5Q
YWNrYWdlJikgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVn
aW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsg
fQotdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFj
a2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBm
YWxzZTsgfQotYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gZmFsc2U7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IElu
dFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVz
ZXJBZ2VudCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBs
dWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQot
dm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpIHsgV2lkZ2V0OjpzZXRGb2N1cygpOyB9Ci12b2lk
IFBsdWdpblZpZXc6OnNob3coKSB7IFdpZGdldDo6c2hvdygpOyB9Ci12b2lkIFBsdWdpblZpZXc6
OmhpZGUoKSB7IFdpZGdldDo6aGlkZSgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQg
UGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpIHsgV2lkZ2V0OjpzZXRQYXJl
bnQodmlldyk7IH0KLXZvaWQgUGx1Z2luVmlldzo6YXR0YWNoVG9XaW5kb3coKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIq
LCBjb25zdCBjaGFyKiwgdWludDMyLCBjb25zdCBjaGFyKiwgYm9vbCwgdm9pZCosIGJvb2wsIGJv
b2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KLXZv
aWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1v
dXNlRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBsdWdpblZpZXc6On5QbHVnaW5WaWV3
KCkge30KIAogQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAw
MEZGOyB9CiB2b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9p
ZCAoKikoKSkgeyB9CkBAIC05Myw4ICs3MCw1IEBAIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0
aCgpIGNvbnN0IHsgbm8KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KIAotdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9Ci0KIH0KIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24g
MzEzMjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDE2ICsyNywzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVn
aW5EZWJ1Zy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwu
aCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCiB7
CisgICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYg
UGx1Z2luRGF0YWJhc2UncworICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxh
dGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2Fs
bGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8gY291cnNl
IHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3
ZQorICAgIC8vIEFTU0VSVC4KKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0
ZXIgd2F5IHRvIGZpeCB0aGlzLgorICAgIGlmIChtX2xvYWRDb3VudCA9PSAwKQorCXVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOworICAgIGVsc2UKKwl1bmxvYWQoKTsKKwogICAgIEFTU0VSVCghbV9p
c0xvYWRlZCk7CiB9CiAKQEAgLTU4LDYgKzU4LDMwIEBACiAgICAgbV9tb2R1bGUgPSAwOwogfQog
CitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJl
VG8pIGNvbnN0Cit7CisgICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGlu
c3RhbmNlcyBmaXJzdC4KKyAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAg
ICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgaWYgKEFh
bGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCisgICAg
ICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7CisKKyAgICAvLyBT
b3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCisgICAgYm9vbCBBaXNJblBy
ZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3Rvcnko
cGFyZW50RGlyZWN0b3J5KCkpOworICAgIGJvb2wgQmlzSW5QcmVmZXJyZWRQYXRoID0gUGx1Z2lu
RGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbXBhcmVUby5wYXJlbnREaXJl
Y3RvcnkoKSk7CisgICAgaWYgKEFpc0luUHJlZmVycmVkUGF0aCAhPSBCaXNJblByZWZlcnJlZFBh
dGgpCisgICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZFBhdGggPyAtMSA6IDE7CisKKyAgICBp
bnQgZGlmZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAg
ICBpZiAoZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKSkKKyAg
ICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgp
LnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgp
KTsKK30KKwogUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQogICAgIDogbV9wYXRoKHBhdGgpCiAgICAgLCBt
X21vZHVsZVZlcnNpb24oMCkKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAz
MTMyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzkzLDU1ICszOTMsNiBAQCB2b2lkIFBsdWdpblZpZXc6OnN0YXR1cyhjb25zdCBjaGFyKiBt
ZXNzCiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5zZXRTdGF0dXNiYXJUZXh0KG1fcGFyZW50RnJh
bWUsIFN0cmluZyhtZXNzYWdlKSk7CiB9CiAKLU5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUo
TlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQotewotICAgIGlmIChtX2lzSmF2YVNj
cmlwdFBhdXNlZCkKLSAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0KLSAgICBz
d2l0Y2ggKHZhcmlhYmxlKSB7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAg
ICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7Ci0gICAgICAgICAgICBOUE9iamVjdCogd2lu
ZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsK
LQotICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkK
LSAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwot
Ci0gICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAgICAqdiA9
IHdpbmRvd1NjcmlwdE9iamVjdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVu
dE5QT2JqZWN0OiB7Ci0gICAgICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0g
MDsKLQotICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8
IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1l
KG9iamVjdFRhZykpCi0gICAgICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOwotCi0g
ICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFz
IGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4v
bnBydW50aW1lLmh0bWw+Ci0gICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQotICAg
ICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7Ci0KLSAg
ICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKLSAgICAgICAgICAgICp2ID0gcGx1
Z2luU2NyaXB0T2JqZWN0OwotCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0g
ICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7Ci0g
ICAgICAgICAgICBQbGF0Zm9ybVdpZGdldCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1X
aWRnZXQqPih2YWx1ZSk7Ci0KLSAgICAgICAgICAgICp3ID0gY29udGFpbmluZ1dpbmRvdygpOwot
Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotICAgIH0K
LX0KLQogTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZShOUFBWYXJpYWJsZSB2YXJpYWJsZSwg
dm9pZCogdmFsdWUpCiB7CiAgICAgc3dpdGNoICh2YXJpYWJsZSkgewpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlldy5oCShyZXZpc2lvbiAzMTMyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsyMjEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fYXR0YWNoZWRUb1dpbmRvdzsKICAgICAgICAgYm9vbCBtX2hhdmVJbml0
aWFsaXplZDsKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYm9vbCBtX25lZWRzWEVtYmVk
OworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIE93blB0cjxQbHVnaW5NZXNz
YWdlVGhyb3R0bGVyV2luPiBtX21lc3NhZ2VUaHJvdHRsZXI7CiAgICAgICAgIFdORFBST0MgbV9w
bHVnaW5XbmRQcm9jOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJv
bGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6Omlu
aXRQbHVnaW5zKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFzZTo6
aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gJnBs
dWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcg
UGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNbaV07
CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby0+
ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8tPmRlc2MgPSBwYWNrYWdl
LT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYg
bWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAg
ICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVz
Y3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0lu
Zm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisKKyAgICAgICAgICAg
IG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0
KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0
ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAg
ICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAgICAgICAg
bWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBs
dWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9IFBsdWdpbkRh
dGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKK30KKworfTsK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lv
biAzMTMyNikKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAj
aW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPGdka2NvbmZpZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDYgKzY2LDggQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2lu
RGF0YWJhc2U6OmRlZmF1bHRQbAogICAgIFZlY3RvcjxTdHJpbmc+IHBhdGhzOwogICAgIGdjaGFy
KiBwYXRoOwogCisgICAgZGlyZWN0b3J5ID0gTlVMTDsKKwogI2lmIGRlZmluZWQoR0RLX1dJTkRP
V0lOR19YMTEpCiAgICAgcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwg
Ii5tb3ppbGxhIiwgInBsdWdpbnMiLCAwKTsKICAgICBwYXRocy5hcHBlbmQocGF0aCk7CkBAIC0x
MDAsNyArMTAzLDIxIEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGwK
IAogYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5QYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZ2NoYXIqIGhvbWVEaXJlY3Rvcnk7
CisgICAgYm9vbCByZXR2YWwgPSBmYWxzZTsKKworICAgIGhvbWVEaXJlY3RvcnkgPSBOVUxMOwor
CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBob21lRGlyZWN0b3J5ID0gZ19i
dWlsZF9maWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIE5V
TEwpOworI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQorICAgIGhvbWVEaXJlY3Rv
cnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICJBcHBsaWNhdGlvbiBEYXRh
IiwgIk1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOworI2VuZGlmCisKKyAgICBpZiAoaG9tZURp
cmVjdG9yeSkKKwlyZXR2YWwgPSAoc3RyY21wKGhvbWVEaXJlY3RvcnksIChkaXJlY3RvcnkudXRm
OCgpKS5kYXRhKCkpID09IDApOworCisgICAgcmV0dXJuIHJldHZhbDsKIH0KIAogfQpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lv
bihjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5l
UXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0
cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNl
IGEgc2luZ2xlIHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5u
b3QgcmVsaWFibHkgdW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9h
ZCB0aGUgSmF2YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZN
CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisg
ICAgICAgIC8vIFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNh
dXNlcyBiYWQgc2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUg
SmF2YSBwbHVnLWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRv
WmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6
ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgTlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0ciBOUF9HZXRNSU1FRGVzY3JpcHRpb247
CisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBOUFBfR2V0VmFsdWU7CisKKyAgICBnX21vZHVsZV9z
eW1ib2wobV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZOUF9HZXRN
SU1FRGVzY3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZh
bHVlIiwgKHZvaWQqKikmTlBQX0dldFZhbHVlKTsKKworICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9
IE5QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJz
cGxpdCh0eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAm
JiBtaW1lRGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19z
dHJzcGxpdChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0
aW9uID0gU3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0
ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lv
bnNbal07IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRG
OChleHRlbnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1l
RGF0YVswXSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1p
bWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25z
KTsKKyAgICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYo
bWltZURlc2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBO
UFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZidWZmZXIpOworICAgIGlmIChl
cnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1
ZmZlciA9IDA7CisgICAgZXJyID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlv
blN0cmluZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAg
ICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFBsdWdpblBhY2thZ2U6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAg
IG1fbG9hZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9k
dWxlID0gZ19tb2R1bGVfb3BlbigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5E
X0xPQ0FMKTsKKyAgICBpZiAoIW1fbW9kdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRp
YWxpemU7CisgICAgTlBFcnJvciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVs
ZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAgICBnX21vZHVs
ZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3du
KTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAg
IGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3Bs
dWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVu
Y3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3Mp
OworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9z
dHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBO
X1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJl
YW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2Vy
RnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1
bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBO
X1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2Vy
RnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2Fk
cGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5v
dGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlm
eSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBO
X0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lv
bjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVu
Y3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNF
bmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0g
X05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lk
ZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3Mu
Z2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1f
YnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7Cisg
ICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNT
dHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4
RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9D
cmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRh
aW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFz
ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1f
YnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0
cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXBy
b3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9w
ZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9O
UE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9T
ZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJh
dGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVn
aW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3Rv
IGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6
CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1
bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFz
aENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1f
bGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFz
aChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25l
ZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25z
dCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQoreworICAgIHJldHVy
biBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9CkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5WaWV3LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5o
IgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRl
IDxranMvdmFsdWUuaD4KKworI2luY2x1ZGUgPGdka2NvbmZpZy5oPgorCisjaWYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1gxMSkKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsv
Z2RreC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorI2luY2x1ZGUgPGdk
ay9nZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNpbmcgS0pT
OjpJbnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09iamVjdDsK
K3VzaW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcgc3RkOjpt
aW47CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit2
b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQo
KSB8fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50
KCktPmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0g
bV93aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisg
ICAgbV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJh
bWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBt
X2NsaXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2lu
ZG93UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dS
ZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGlmIChtX3dpbmRvdykg
eworICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aW5kb3csICZhbGxvY2F0aW9u
KTsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBpZiAoIW1fbmVlZHNY
RW1iZWQpIHsKKyAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1f
d2luZG93KSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAg
ICBndGtfeHRiaW5fcmVzaXplKG1fd2luZG93LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5k
b3dSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIFBs
dWdpblZpZXc6OnNldEZvY3VzKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisJZ3RrX3dpZGdldF9n
cmFiX2ZvY3VzKG1fd2luZG93KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisKKyAgICBp
ZiAobV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfc2hvdyhtX3dp
bmRvdyk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRl
KCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgaWYgKG1fYXR0YWNoZWRUb1dp
bmRvdyAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworCisgICAgV2lk
Z2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQp
IHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICAv
L3BhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5l
ZWQgdG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9
IE5QV2luZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmll
dygpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQor
CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2Vv
bWV0cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7Cisg
ICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBt
X3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAg
IH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqIGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAKKyAgICAvKiBGSVhNRTog
U3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCisKKyAgICBLSlM6OkpTTG9j
azo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQo
TW91c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgaWYgKCFt
X2lzV2luZG93ZWQpCisgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBh
biBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+
cGFnZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9j
a3MgZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50
KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkK
K3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAg
ICAgICAgaW5pdCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1Jl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFtX2lz
V2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJl
bnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93
LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cu
d2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdo
dCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93
LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qu
d2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7
CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisK
KyAgICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6YXR0YWNo
VG9XaW5kb3coKQoreworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cpCisJcmV0dXJuOworCisg
ICAgbV9hdHRhY2hlZFRvV2luZG93ID0gdHJ1ZTsKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93
aW5kb3cpCisJZ3RrX3dpZGdldF9zaG93KG1fd2luZG93KTsKK30KKwordm9pZCBQbHVnaW5WaWV3
OjpkZXRhY2hGcm9tV2luZG93KCkKK3sKKyAgICBpZiAoIW1fYXR0YWNoZWRUb1dpbmRvdykKKwly
ZXR1cm47CisKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93aW5kb3cpCisJZ3RrX3dpZGdldF9o
aWRlKG1fd2luZG93KTsKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSBmYWxzZTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3OjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9IG1f
c3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGVu
ZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+
ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQo
KSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9p
c1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFs
bExvY2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0
YSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJy
YXksIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJpbmdBcnJheSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZmFzdEZy
ZWUoc3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOworfQorCitz
dGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0
aXZlVVJMU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmlu
ZzsKKworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgorICAgIHVybFN0cmluZy5yZXBs
YWNlKCdcbicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisKKyAgICBy
ZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
c3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBy
ZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK2NvbnN0
IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fdXNlckFnZW50Lmlz
TnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51
c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZl
ci5kYXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3Vw
cG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0g
PT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsg
MjsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JM
RidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVz
W2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0g
MjsKKyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7Cisg
ICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0g
PT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBw
b3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOwor
fQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lm
aWNhdGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0
ZWx5LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQs
IHNvbWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5n
LiA8aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBt
b3JlIGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1Iu
CisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3Ig
aXQgd2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5n
IGNoYXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMg
KyBpOworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxG
IGlzIGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCBy
ZWFkLgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZD
ODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0
YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7
CisKKyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYg
bmFtZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOwor
ICAgICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAm
JiBuYW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChu
YW1lW2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMo
Y29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25z
dCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAg
IFN0cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAg
Ly8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2Fu
J3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0wo
Ynl0ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAg
ICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8v
IE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1
cm5lZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgo
KmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsg
Ly8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAg
ICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9
PSAwKQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUg
aGVhZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAn
IHx8ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUg
cHJldmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAg
ICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVy
CisgICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQo
bGFzdEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5n
dGgpOworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50
VmFsdWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xv
bjsKKyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9u
ICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAg
IC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RL
ZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAt
IGxpbmUpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAg
ICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
Y29sb24gPT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVv
bCAtIGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZp
ZWxkcy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwo
KSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdmFs
dWU7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsK
K30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29u
c3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwg
dm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVy
cykKK3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAgIHJldHVybiBOUEVS
Ul9JTlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0
OworCisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcgZmlsZW5hbWUoYnVm
LCBsZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQor
ICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAgICAg
Ly8gR2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5hbWUudXRm
OCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNU
X0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsK
KworCS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAgICAgRklM
RSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIiKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IDApCisgICAgICAgICAgICByZXR1cm4g
TlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXplKCk7CisKKyAg
ICAgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5k
bGUpOworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBpZiAoYnl0ZXNS
ZWFkIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwly
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6
ZShsZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0K
KworICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9z
dERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgewor
ICAgICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBw
b3N0RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGlu
ZShidWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2Yg
dGhlIGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAg
ICAgIGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRp
b24pOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgp
IC0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtl
IHRvIHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAg
ICAgICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ug
d2lsbCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRy
dW5jYXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAg
IFN0cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgi
KTsKKworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChp
bnQpZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29u
dGVudC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwor
ICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxv
YWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmll
bGRzKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5
KEZvcm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1l
TG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCitOUEVycm9y
IFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkK
K3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkKKyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisgICAgICAgICAgICBpZiAoIW1f
bmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3Bs
YXlUb0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1fd2luZG93KS0+eHRjbGllbnQueHRk
aXNwbGF5KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9S
OworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7CisjaWYg
UExBVEZPUk0oR1RLKQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMjsKKyNlbHNl
CisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZT
dXBwb3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAg
ICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgICAgICAq
KCh1aW50MzIgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZh
U2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICAg
ICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1Nj
cmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3Rl
ZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5k
b3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93
U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwor
ICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
TlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVz
ZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAgICBOUE9iamVj
dCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+
aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1
Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1l
bnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhw
ZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAo
cGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBs
dWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1
ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2Ug
TlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4odmFsdWUpOworCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAgICAgICAg
ICAgICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKGNvbnRhaW5pbmdXaW5kb3coKS0+
d2luZG93KTsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyAgICAgICAgICAg
ICooKEhXTkQgKil3KSA9IEdES19XSU5ET1dJTkdfSFdORChjb250YWluaW5nV2luZG93KCktPndp
bmRvdyk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVj
dCogcmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRv
cCwgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOwor
ICAgIFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9y
Y2VSZWRyYXcoKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193aWRnZXRf
cXVldWVfZHJhdyhtX3dpbmRvdyk7CisgICAgZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVl
X2RyYXcoY29udGFpbmluZ1dpbmRvdygpKTsKK30KKworUGx1Z2luVmlldzo6flBsdWdpblZpZXco
KQoreworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKwor
ICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJl
ZVN0cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBtX3BhcmVu
dEZyYW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmICht
X3BsdWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRV
bmxvYWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBs
dWdpblZpZXc6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVn
aW4pIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQ
bHVnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9h
ZCgpKSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFzdGFydCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBs
dWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2
YWx1ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsK
KworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaWYgKG1fbmVlZHNYRW1iZWQp
IHsKKyAgICAgICAgbV93aW5kb3cgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmlu
Z1dpbmRvdygpKSwgbV93aW5kb3cpOworICAgICAgICBzZXRHdGtXaWRnZXQobV93aW5kb3cpOwor
ICAgIH0gZWxzZSBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fd2luZG93ID0gZ3RrX3h0
YmluX25ldyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKS0+d2luZG93
LCAwKTsKKwlzZXRHdGtXaWRnZXQobV93aW5kb3cpOworICAgIH0KKyNlbHNlCisgICAgbV93aW5k
b3cgPSBndGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlO
RVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLCBtX3dpbmRvdyk7
CisgICAgc2V0R3RrV2lkZ2V0KG1fd2luZG93KTsKKyNlbmRpZgorICAgIHNob3cgKCk7CisKKyAg
ICBpZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKwlO
UFNldFdpbmRvd0NhbGxiYWNrU3RydWN0IHdzOworCisJd3MudHlwZSA9IDA7CisKKwlpZiAobV9u
ZWVkc1hFbWJlZCkgeworCSAgICB3cy5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExBWShtX3dp
bmRvdy0+d2luZG93KTsKKwkgICAgd3MudmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKGdka19k
cmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpbmRvdy0+d2luZG93KSkpOworCSAg
ICB3cy5kZXB0aCA9IGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpbmRv
dy0+d2luZG93KSktPmRlcHRoOworCSAgICB3cy5jb2xvcm1hcCA9IEdES19DT0xPUk1BUF9YQ09M
T1JNQVAoZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChHREtfRFJBV0FCTEUobV93aW5kb3ctPndp
bmRvdykpKTsKKwl9IGVsc2UgeworCSAgICB3cy5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2luZG93
KS0+eHRkaXNwbGF5OworCSAgICB3cy52aXN1YWwgPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNs
aWVudC54dHZpc3VhbDsKKwkgICAgd3MuZGVwdGggPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNs
aWVudC54dGRlcHRoOworCSAgICB3cy5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpbmRvdyktPnh0
Y2xpZW50Lnh0Y29sb3JtYXA7CisKKwkgICAgWEZsdXNoICh3cy5kaXNwbGF5KTsKKwl9CisKKwlt
X25wV2luZG93LndzX2luZm8gPSAmd3M7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobV9pc1dp
bmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsK
KyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorCWlmIChtX25lZWRzWEVtYmVkKQorCSAg
ICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX1hXSU5ET1cobV93aW5kb3ct
PndpbmRvdyk7CisJZWxzZQorCSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHVEtfWFRC
SU4obV93aW5kb3cpLT54dHdpbmRvdzsKKyNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19XSU4z
MikKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopR0RLX1dJTkRPV19IV05EKG1f
d2luZG93LT53aW5kb3cpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRv
dy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93
ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICBzZXROUFdpbmRvd1Jl
Y3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVk
U3VjY2Vzc2Z1bGx5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0MSBAQAorLyogLSotIE1vZGU6IEMrKzsg
dGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0q
LQorICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioq
KiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4w
L0xHUEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0
byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5z
ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgK
KyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
CisgKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAq
IFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9u
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCisgCisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxv
d3MgZm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGlj
YXRpb24uICAKKyAqLworCisjdW5kZWYgR1RLX0RJU0FCTEVfREVQUkVDQVRFRAorCisjaW5jbHVk
ZSAieGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21h
aW4uaD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90
aW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAq
LworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVk
ZSA8WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgx
MS9TdHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2lu
ZyBpbmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAq
LworI3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitz
dGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNz
ICprbGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChH
dGtYdEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9y
ZWFsaXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAg
ICAgZ3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAq
b2JqZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0
a09iamVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2
b2lkICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGll
bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVk
ZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7
CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGll
bnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1
ZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGZsYWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRn
ZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2lu
dGVyIGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVf
eGVtYmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsK
K3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0
IHcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2Fk
ZF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRp
YyB2b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290
LCBYdFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9j
dXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQg
ICAgICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hh
bmRsZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9m
IFhFbWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMg
aW50ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9l
cnJvcl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAg
ICAgIHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFy
ZW50X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0g
TlVMTDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBn
Ym9vbGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAg
ICAgICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0
X2V2ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVy
X2lkID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9v
bGVhbgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtf
VEhSRUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RI
UkVBRFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RL
X1RIUkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdf
SU9fSU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsK
KyAgICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cisg
IH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitz
dGF0aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEs
CisgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAg
ICAgICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFw
cENvbnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRp
b25Db250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyog
UHJvY2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEg
b24gdGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkg
Y2FsbAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBl
dmVudHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBh
bHJlYWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBm
b3IgKGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsr
KSB7CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RL
X1RIUkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3Vy
Y2VGdW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZl
bnRfY2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVu
YylOVUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xl
YW4KK3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRz
VG9Qcm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBh
YyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5l
ZWQgdG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAg
ICAgb25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9u
IHRoZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0
IGV2ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZl
bnRzIHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNr
LAorICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBv
ZiBwcm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBY
dEFwcFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAg
cmV0dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sK
KyAgc3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7
CisgICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7Cisg
ICAgICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBz
aXplb2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0
YmluX2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2lu
aXQsCisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRf
MiAqLyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAg
ICAgIHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0Ymlu
X2luZm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitn
dGtfeHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdl
dENsYXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisK
KyAgcGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAg
d2lkZ2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3Mt
PnJlYWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUg
PSBndGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xB
U1MgKGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7
Cit9CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQorewor
ICB4dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxM
OworICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0g
MDsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdl
dCkKK3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRy
eSBvZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0Ymlu
X3JlYWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRC
SU4gKHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNh
Y3VsYXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0
X2dlb21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBh
bGxvY2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHks
IHcsIGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndp
ZHRoOworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAv
KiB1c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50
X2NsYXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3
aWRnZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAg
IGd0a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhl
aWdodCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5k
b3coeHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAg
Lyogbm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUg
c29ja2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0Ymlu
LT54dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5k
b3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAg
Z3BvaW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOwor
ICB4dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4p
CisgICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sg
PSBmOworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVu
dF93aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0
Y2xpZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkp
LAorICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwK
KyAgICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRj
bGllbnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNh
bid0IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBE
RUJVR19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSBy
ZXR1cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1
cm4gKEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBy
dW5uaW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3Ag
Ki8KKyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7
CisgICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBs
b29wLgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBo
YXMgYWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3
KCZ4dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3Jp
dHkoZ3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJz
ZShncywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0
KilOVUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRk
aXNwbGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5
KTsKKyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2
ZW50X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZl
bnRzID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9j
b250ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4g
cG9sbCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0K
KyAgICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVu
Y3Rpb24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAg
ICAgICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8K
KyAgbnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4t
Pnh0ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0
X3BhcmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtf
d2luZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOwor
ICBpZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNl
cl9kYXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJp
bik7Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7
CisKKyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21v
dmUgKEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0
YmluX3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAg
ICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFy
ZyBhcmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0
a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50Zigi
Z3RrX3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWln
aHQpOworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRo
ICA9IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcwor
ICBpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3
aWR0aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOwor
ICBYdFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRi
aW4tPnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2Vu
ZCBhIHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6
ZSBjaGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkg
PSB4dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2Nh
dGlvbi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0
ZSh3aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJl
YWxpemUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dp
ZGdldCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5f
dW5yZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2ls
bCBhbHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RL
X1hUQklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtf
V0lER0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURH
RVRfUkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4t
Pnh0Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcykt
PnVucmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95
IChHdGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisg
IGdfcmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAo
R1RLX0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsK
KworICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRs
ZXIgKi8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0
YmluLT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVz
YWdlIGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0
LCByZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5s
b29wICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgor
ICAgICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxv
b3BcbiIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5D
b250ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUo
dGFnKTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOwor
ICAgICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVD
VF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxv
d2luZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lk
ZQorKi8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRf
aW5pdCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZp
c3VhbCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAg
ICAgICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hh
ciAgICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoK
KyAgICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQg
PSBOVUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0
ZGlzcGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xp
ZW50LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgh
eHRfaXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3Rh
cnRpbmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgp
OworICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBp
ZiAoZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0
LCBmYWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0
LCBnZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IldyYXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQor
ICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3Bs
YXkgID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4
dGNsaWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAg
ID0geHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8K
K3N0YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisg
ICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAg
IGludCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQg
ICAgICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBj
aGlsZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVH
X1hUQklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9w
X3dpZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNz
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+
dG9wX3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICov
CisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7
CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZh
bHVlcyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRl
V2lkZ2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9z
aXRlV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93
aWRnZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQs
ICAgaGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7
bisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFs
ICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRl
cHRoICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54
dGNvbG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDAp
OyBuKys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMo
eHRjbGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9w
X3dpZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRk
ZXJpZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6
aW5nIHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBY
dFJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAg
ICAgICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxz
ZQorICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAg
IHRvcF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOwor
CisgIC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVu
dC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAg
ICAgICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRn
ZXQsIDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNo
aWxkX3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIg
Ki8KKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAweDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRS
VUUsIAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50
X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAK
KyAgICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVh
c2VNYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAg
IChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAg
ICAgICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsK
K30KKworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGll
bnQgKQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3Rl
ckRyYXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0
Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVy
V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAg
ICAgICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUg
cXVldWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cK
KyAgICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLwor
ICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93
aWRnZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVX
aWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAg
IAoreHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNs
aWVudC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5j
aGlsZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAo
WHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBY
dERlc3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bf
d2lkZ2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50
X3NldF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNp
Z25lZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHRE
aXNwbGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9
IDA7ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0g
ZmxhZ3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3co
eHRwbHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAg
ICAgICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5z
aWduZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFu
ZGxlX3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVu
dCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRh
OworICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJF
RF9FTUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJ
VkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1C
RURfV0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJF
RF9XSU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQg
Y2xpZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJl
YWs7CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAg
cHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAg
ICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2Vu
ZGlmCisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9G
T0NVU19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2
ZW50LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEu
bFsxXSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBw
cmludGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQu
eGZvY3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVC
VUdfWFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2Vu
ZGlmCisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisg
ICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0
KTsKKyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxk
X3dpZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdl
dCksIAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAg
ICAgICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7Cisg
ICAgICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAg
IH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVt
YmVkIE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVu
dF9oYW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50
KQoreworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisg
IHN3aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAg
ICAgLyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQu
bWVzc2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4
dHBsdWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hF
TUJFRCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdl
KHcsIGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNl
IFJlcGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5Ogor
ICAgICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDAp
OworICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVz
c2FnZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVT
VF9GT0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0Ogor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAg
ICAgcHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5
cGUpICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAg
Knh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAg
ICAgICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAg
IGxvbmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEy
LCAgCisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50
IHhldmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAg
RGlzcGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAg
bWVtc2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRv
dyA9IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQu
eGNsaWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsK
KyAgeGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFsw
XSA9IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZl
bnQueGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxb
M10gPSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJh
cF9lcnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAm
eGV2ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJh
cF9lcnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJl
ZF9tZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKwor
c3RhdGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwg
WEVycm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJy
b3JfY29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9l
cnJvcnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFu
ZGxlciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQg
ICAgICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9l
cnJvcl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vy
cm9yX2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30K
Kworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0
IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRw
eSA9IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBX
aW5kb3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsK
KyAgICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBh
cmVudCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRw
eSwgZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAg
ICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVt
b3ZlX2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdp
bikgeworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBj
aGlsZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAg
ICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNo
aWxkLCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50
LndpbmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAg
ICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAg
ICAgfQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAg
IFhTZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJl
dmVydFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94
ZW1iZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhF
TUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICov
Cit9CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBv
aW50ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2
ZW50bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jj
b2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3Bs
YXkodyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVu
dF9tYXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBY
U2VsZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAor
ICAgICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAg
ICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VN
YXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChY
dEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAg
ICAgICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRf
cmVtb3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQorewor
ICBpbnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFu
ZGxlcih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUs
IAorICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNf
bGlzdGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2
b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2lu
dGVyIHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7Cisg
IFdpbmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRw
eSA9IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisK
KyAgLyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVf
Zm9jdXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlz
dGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1
ZXJ5VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikp
IHsKKyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBf
ZXJyb3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsK
KyAgICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOwor
ICAgIGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQs
IHVzZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47
Cit9CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBA
CisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsg
Yy1iYXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJz
dG9wPTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJz
aW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24K
KyAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgor
ICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUK
KyAqIExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBX
aWRnZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAy
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBv
cgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
KyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
CisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBf
X0dUS19YVEJJTl9IX18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsv
Z3Rrc29ja2V0Lmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9Y
dXRpbC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNp
bmNsdWRlICJuc2NvcmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RL
WFRCSU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklO
X0FQSSh0eXBlKSBOU19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hU
QklOX0FQSSh0eXBlKSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRC
aW4gR3RrWHRCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNz
OworCisjZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9n
ZXRfdHlwZSAoKSkKKyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RL
X0NIRUNLX0NBU1QgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFT
UyhrbGFzcykgICAgICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtY
dEJpbkNsYXNzKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RL
X0NIRUNLX1RZUEUgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdUS19UWVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNz
KSAgICAgICAoR1RLX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1
Y3QgX1h0Q2xpZW50IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkq
eHRkaXNwbGF5OworICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdl
dCAqLworICBXaWRnZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLwor
ICBWaXN1YWwJKnh0dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3Jt
YXA7CisgIFdpbmRvdwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0
a1NvY2tldCAgICAgIGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7Cisg
IERpc3BsYXkgICAgICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAq
LworCisgIFdpbmRvdyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdp
bmRvdyAqLworICBnaW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwg
aGVpZ2h0OworICBYdENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBY
RW1iZWQgKi8KK307CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENs
YXNzIHdpZGdldF9jbGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0
YmluX2dldF90eXBlICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0Ymlu
X25ldyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJ
KHZvaWQpICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAg
ICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2ludCAgICAgICB5KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXpl
IChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1S
ZWMgeworICAgIFh0VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUg
dG8gVHJhbnNsYXRpb24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3Rh
YmxlOyAgICAgICAgIC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAg
IHN0cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFn
ZXIgc3RhdGUgcHRyICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOwor
fSBYdFRNUmVjLCAqWHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBX
aWRnZXQgICAgICAgICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBp
dHNlbGYgICAgICAgICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAg
ICAvKiBwb2ludGVyIHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAg
ICAgICAgcGFyZW50OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAg
ICAgICAgKi8KKyAgICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRn
ZXQgcmVzb3VyY2UgbmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVp
bmdfZGVzdHJveWVkOyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8K
KyAgICBYdENhbGxiYWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3
aGVuIHdpZGdldCBkZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7
ICAgICAgICAvKiBjb25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3Np
dGlvbiAgICAgICAgeCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAg
ICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAv
KiB3aW5kb3cgZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAg
ICAgYm9yZGVyX3dpZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAg
ICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRn
ZXQgZ2VvbWV0cnkgbWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0
aXZlOyAgICAgICAgICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAg
ICBCb29sZWFuICAgICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9y
cyBzZW5zaXRpdmU/ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAg
ICAgICAvKiBwcml2YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVj
ICAgICAgICAgdG07ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAg
ICAgICAgICAgKi8KKyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBh
Y2NlbGVyYXRvciB0cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAg
Ym9yZGVyX3BpeGVsOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAg
Ki8KKyAgICBQaXhtYXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9y
ZGVyIHBpeG1hcCBvciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlz
dDsgICAgICAgICAvKiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBD
YXJkaW5hbCAgICAgICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAg
ICAgICAgICAgICAgICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAg
ICAvKiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAg
ICAgICAgKnNjcmVlbjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAg
ICAgICAgKi8KKyAgICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xv
cm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2lu
ZG93OyAgICAgICAgICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8K
KyAgICBDYXJkaW5hbCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxh
bmVzIGluIHdpbmRvdyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9w
aXhlbDsgICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXht
YXAgICAgICAgICAgYmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXht
YXAgb3IgTlVMTCAgKi8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAv
KiBpcyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAg
ICAgbWFwcGVkX3doZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAg
ICAgKi8KK30gQ29yZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENv
cmVQYXJ0ICAgIGNvcmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRC
SU5fSF9fICovCisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8q
IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh
c2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9
MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246
IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZp
bGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICog
MS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m
IHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBT
b2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICog
TGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVNQkVEIERlY2xhcmF0
aW9uLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBp
cworICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwg
RGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgor
ICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVz
ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQ
TCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBM
R1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lz
aCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRl
ciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxs
b3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcg
dGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAq
IGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElm
IHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQg
bWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2Yg
YW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVO
RCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdlcyAqLworI2RlZmlu
ZSBYRU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX1dJTkRP
V19BQ1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSAg
ICAgICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAgICAgIDMKKyNkZWZp
bmUgWEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFhFTUJFRF9GT0NV
U19PVVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNfTkVYVCAgICAgICAg
ICAgICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAgICAgICA3CisjZGVm
aW5lIFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBYRU1CRURfVU5H
UkFCX0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09OICAgICAg
ICAgICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAgICAgICAgIDExCisK
Ky8qIE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9HVEtfR1JBQl9LRVkg
ICAgICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkgICAgICAgICAg
IDEwOQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLworI2RlZmluZSBYRU1C
RURfRk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0ZJUlNU
ICAgICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAgICAgICAgICAgICAg
MgorCisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhFTUJFRF9NQVBQRUQg
ICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luUGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5QYWNrYWdlV2luLmNwcAkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2lu
L1BsdWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwzMCArNjYsNiBAQAog
ICAgIHJldHVybiAwOwogfQogCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVn
aW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Ci17Ci0gICAgLy8gU29ydCBwbHVnLWlucyB0aGF0
IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KLSAgICBib29sIEFhbGxvd3NNdWx0aXBs
ZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRp
cGxlSW5zdGFuY2VzKTsKLSAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21w
YXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3Rh
bmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlw
bGVJbnN0YW5jZXMpCi0gICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAt
MSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3Qu
Ci0gICAgYm9vbCBBaXNJblByZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJy
ZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGJvb2wgQmlzSW5QcmVm
ZXJyZWRQYXRoID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNv
bXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7Ci0gICAgaWYgKEFpc0luUHJlZmVycmVkUGF0aCAh
PSBCaXNJblByZWZlcnJlZFBhdGgpCi0gICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZFBhdGgg
PyAtMSA6IDE7Ci0KLSAgICBpbnQgZGlmZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwg
Y29tcGFyZVRvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAg
cmV0dXJuIGRpZmY7Ci0KLSAgICBpZiAoZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJl
VG8udmVyc2lvbigpKSkKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICByZXR1cm4gc3RyY21w
KHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3Rv
cnkoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQogYm9vbCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJs
YWNrbGlzdGVkKCkKIHsKICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNs
UGx1Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDMxMzI2KQorKysgV2ViQ29yZS9w
bHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODU4LDYgKzg1
OCw1OCBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhCiAgICAgcmV0
dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7
CiB9CiAKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkg
ICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50
RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2
YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRw
Oi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAg
ICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAo
dm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9p
c0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAg
ICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAg
aWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFn
TmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAg
ICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVs
ZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+Cisg
ICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5f
UmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2
ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0Owor
CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgor
CisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICBQbGF0Zm9y
bVdpZGdldCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1XaWRnZXQqPih2YWx1ZSk7CisK
KyAgICAgICAgICAgICp3ID0gY29udGFpbmluZ1dpbmRvdygpOworCisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwogdm9pZCBQbHVnaW5W
aWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiB7CiAgICAgaWYgKCFyZWN0KSB7Cklu
ZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmNwcAkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTU2LDYgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVudChXZWJLaXRXZWJGcmFt
ZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAg
ICAgLCBtX3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFtZSk7CkBAIC0xNjEsOSAr
MTYzLDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVy
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZyYW1lTG9hZGVyICpmbCA9
IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50
ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgp
OworICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRl
eHRFbmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIEFT
U0VSVChsb2FkZXItPmZyYW1lKCkpOworICAgICAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBv
biB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5v
cm1hbGx5IGRvbmUKKyAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMgcmVj
ZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChsaWtl
IGFib3V0OmJsYW5rKS4KKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gbG9hZGVyLT5vdmVycmlk
ZUVuY29kaW5nKCk7CisgICAgICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwo
KTsKKyAgICAgICAgaWYgKCF1c2VyQ2hvc2VuKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2Fk
ZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAgICAgIEZyYW1lTG9hZGVy
KiBmcmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgZnJhbWVMb2Fk
ZXItPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAgICAgICAgaWYgKGRhdGEp
CisgICAgICAgICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0K
KworICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25z
ZVRvUGx1Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25z
ZShsb2FkZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZl
RGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpCkBAIC0yNTksOSArMjgyLDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGVjaWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipwb2xpY3lGdW5jdGlvbiko
UG9saWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2lu
KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKQorV2lkZ2V0
KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNp
emUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gUGx1Z2luVmlldzo6Y3JlYXRlKGNv
cmUobV9mcmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1W
YWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYgKHBsdWdpblZpZXctPnN0
YXR1cygpID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkKKyAgICAgICAgcmV0dXJu
IHBsdWdpblZpZXc7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzAyLDggKzMyOSw3IEBAIFBh
c3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9wbHVnaW5WaWV3ID0gc3Rh
dGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdpbldpZGdldCk7CiB9CiAKIFdpZGdldCogRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1l
bnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtNTk5LDE0ICs2MjUsMTQgQEAgU3RyaW5nIEZy
YW1lTG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewotICAg
IEFTU0VSVChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8gU2V0dGluZyB0aGUgZW5j
b2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhh
dCBpcyBub3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0IG9mIGRhdGEgaXMg
cmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0aCBubyBkYXRhIChs
aWtlIGFib3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+
b3ZlcnJpZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051
bGwoKTsKLSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAgIGVuY29kaW5nID0gZG9j
dW1lbnRMb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGRvY3VtZW50
TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7
CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgY29tbWl0dGVkTG9hZChkb2N1bWVu
dExvYWRlciwgMCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmlu
aXNoTG9hZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1Nl
bnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiAKQEAgLTcyMyw5ICs3NDks
MTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUbwogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVu
dEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYg
KG1fcGx1Z2luVmlldykgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOwor
ICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1
Z2luID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzdGFydERv
d25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZpc2lvbiAzMTMyNikKKysr
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBS
dXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxh
Ym9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlldy5o
IgorCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0V2ViRnJhbWU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewpAQCAtMTcwLDYgKzE3MywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
ICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIG1fdXNlckFn
ZW50OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAg
ICAgV2ViQ29yZTo6UGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0ZGlycy5wbQkocmV2aXNpb24gMzEzMjYpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtp
dGRpcnMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBteSAkY3VycmVudFNWTlJl
dmlzaW9uOwogbXkgJG9zWFZlcnNpb247CiBteSAkaXNRdDsKIG15ICRpc0d0azsKK215ICRlbmFi
bGVHdGtQbHVnaW5zOwogbXkgJGlzV3g7CiAKICMgVmFyaWFibGVzIGZvciBXaW4zMiBzdXBwb3J0
CkBAIC00OTMsNiArNDk1LDIzIEBAIHN1YiBkZXRlcm1pbmVJc0d0aygpCiAgICAgfQogfQogCitz
dWIgZW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygp
OworICAgIHJldHVybiAkZW5hYmxlR3RrUGx1Z2luczsKK30KKworc3ViIGRldGVybWluZUVuYWJs
ZUd0a1BsdWdpbnMoKQoreworICAgIHJldHVybiBpZiBkZWZpbmVkKCRlbmFibGVHdGtQbHVnaW5z
KTsKKworICAgIGlmIChjaGVja0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1Z2lucyIpKSB7CisgICAg
ICAgICRlbmFibGVHdGtQbHVnaW5zID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAkZW5hYmxl
R3RrUGx1Z2lucyA9IDE7CisgICAgfQorfQorCiBzdWIgaXNXeCgpCiB7CiAgICAgZGV0ZXJtaW5l
SXNXeCgpOwpAQCAtODY0LDYgKzg4Myw3IEBAIHN1YiBidWlsZEd0a1Byb2plY3QoJCRAKQogCiAg
ICAgaWYgKHVzZVFtYWtlKCkpIHsKICAgICAgICAgbXkgQGJ1aWxkQXJncyA9ICgiQ09ORklHKz1n
dGstcG9ydCIsICJDT05GSUctPXF0Iik7CisgICAgICAgIHB1c2ggQGJ1aWxkQXJncywgIkNPTkZJ
Rys9cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lucygpOwogICAgICAgICByZXR1cm4gYnVpbGRR
TWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsKICAgICB9IGVsc2UgewogICAgICAgICBy
ZXR1cm4gYnVpbGRBdXRvdG9vbHNQcm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CgotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCTIwMDgtMDQtMTEgMjM6NTg6
MDguMDAwMDAwMDAwICswMTAwCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAubmV3CTIwMDgtMDQtMTYgMjI6MDQ6MDcuMDAwMDAwMDAwICswMTAwCkBAIC03NSwx
MSArNzUsMTEgQEAKIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3Rv
cmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KIFZlY3Rv
cjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CiBib29sIFBsdWdpbkRh
dGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUo
Y29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gZmFsc2U7IH0KIHVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdCB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNv
bnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gZmFsc2U7IH0KIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpIHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZp
bGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNv
bnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIGNvbnN0IGNoYXIqIFBsdWdpblZp
ZXc6OnVzZXJBZ2VudCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgUGx1
Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkBA
IC05Niw2ICs5Niw3IEBACiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0IHsg
bm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitOUEVy
cm9yIFBsdWdpblZpZXc6OmdldFZhbHVlIChOUE5WYXJpYWJsZSwgdm9pZCopIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KIFBsdWdpblZpZXc6On5QbHVn
aW5WaWV3KCkge30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20617</attachid>
            <date>2008-04-17 01:22:17 -0700</date>
            <delta_ts>2008-04-17 06:00:19 -0700</delta_ts>
            <desc>patch for Plugin updated to r31990</desc>
            <filename>my_pl_patch.txt</filename>
            <type>text/plain</type>
            <size>26196</size>
            <attacher name="Sriram Neelakandan">sriram.neelakandan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC05MTMsNyArOTEzLDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5WaWV3LmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcCBcCisJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5j
cHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JpZGku
Y3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAgXApAQCAtOTc0LDYgKzk3
NywxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcCBcCiAJV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5jcHAKIAoraWYgVEFSR0VUX1gxMQor
d2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCitl
bmRpZgorCiB3ZWJraXRndGtfaGVhZGVycyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xp
cGJvYXJkR3RrLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaApJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiAzMTk5MCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBndGstcG9ydCB7CiAgICAgfQogICAgIHgxMTpwbHVnaW5z
IHsKICAgICAgICAgREVGSU5FUyArPSBYUF9VTklYCisgICAgICAgIExJQlMgKz0gLWxYdAogICAg
IH0KIAogICAgIElOQ0xVREVQQVRIICs9IFwKQEAgLTE4MSw2ICsxODIsNyBAQCBndGstcG9ydCB7
CiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtIFwKICAgICBsb2FkZXIvZ3RrIFwKICAg
ICBwYWdlL2d0ayBcCisgICAgcGx1Z2lucy9ndGsgXAogICAgIC4uL1dlYktpdC9ndGsgXAogICAg
IC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQgXAogICAgIC4uL1dlYktpdC9ndGsvd2Via2l0
CkBAIC05MzEsMTMgKzkzMywzNSBAQCBTT1VSQ0VTICs9IFwKICAgICB4bWwvWFNMVFByb2Nlc3Nv
ci5jcHAKIAogZ3RrLXBvcnQgeworICAhcGx1Z2lucyB7CisgICAgREVGSU5FUyArPSBHVEtfRElT
QUJMRV9QTFVHSU5TPTEKKyAgfQorICBIRUFERVJTICs9IFwKKyAgICBwbHVnaW5zL2d0ay9QbHVn
aW5EYXRhYmFzZUd0ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmggXAor
ICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuaAorCiAgIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhXaWR0aE1hcC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuY3BwIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNw
cCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z0luSW5mb1N0b3JlR3RrLmNwcCBcCisgICAgcGx1Z2lu
cy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5QYWNr
YWdlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAgXAorICAgIHBs
dWdpbnMvZ3RrL25wYXBpLmNwcAorCisgIHgxMTpwbHVnaW5zIHsKKyAgICBIRUFERVJTICs9IFwK
KyAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oIFwKKyAgICAgIHBsdWdpbnMvZ3RrL3hlbWJl
ZC5oCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgIHBsdWdpbnMvZ3RrL2d0azJ4dGJpbi5jCisg
IH0KIH0KIAogcXQtcG9ydCB7CkBAIC0xMDUxLDYgKzEwNzUsNyBAQCBxdC1wb3J0IHsKIH0KIAog
Z3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsKICAg
ICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
R3RrLmggXAogICAgICAgICAuLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVy
LmggXApJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29y
ZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTUg
KzMxLDE3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2lu
Y2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1l
OjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQorUGFzc1JlZlB0cjxLSlM6
OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0
KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5iaW5kaW5nSW5z
dGFuY2UoKTsKIH0KIAogdm9pZCBGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAJKHJldmlzaW9uIDMxOTkw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDEwICs4OSwyMSBAQCBib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRp
bWUoY29uc3QgU3RyaW5nJiwgdGltZV90JikKK2Jvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUo
Y29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIG1vZGlmaWVkVGltZSkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBnY2hhciogZmlsZW5hbWUgPSBnX2Zp
bGVuYW1lX2Zyb21fdXRmOChwYXRoLnV0ZjgoKS5kYXRhKCksIC0xLCAwLCAwLCAwKTsKKyAgICBp
ZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdHJ1Y3Qgc3RhdCBz
dGF0UmVzdWx0OworICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZpbGVuYW1lLCAmc3RhdFJlc3Vs
dCk7CisgICAgZ19mcmVlKGZpbGVuYW1lKTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1vZGlmaWVkVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7
CisgICAgcmV0dXJuIHRydWU7CisKIH0KIAogU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMTk5
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCkBAIC01OCwyOCAr
NTYsNyBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAvKiBDb21w
bGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAK
LWludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNo
SW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci11bnNpZ25lZCBQbHVn
aW5QYWNrYWdlOjpoYXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQot
Ym9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1
Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFBs
dWdpblBhY2thZ2U6OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQot
dm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQotY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVj
dChOUFJlY3QqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlZ2lvbihOUFJlZ2lvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZp
ZXc6OmZvcmNlUmVkcmF3KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6
OnNldEZvY3VzKCkgeyBXaWRnZXQ6OnNldEZvY3VzKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2hv
dygpIHsgV2lkZ2V0OjpzaG93KCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpIHsgV2lkZ2V0
OjpoaWRlKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQoU2Nyb2xsVmlldyogdmlldykgeyBXaWRnZXQ6OnNldFBhcmVudCh2aWV3KTsgfQotdm9p
ZCBQbHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9p
ZCBQbHVnaW5WaWV3OjpkZXRhY2hGcm9tV2luZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1O
UEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1
aW50MzIsIGNvbnN0IGNoYXIqLCBib29sLCB2b2lkKiwgYm9vbCwgYm9vbCkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgfQotdm9pZCBQbHVnaW5WaWV3Ojp1
cGRhdGVXaW5kb3coKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmll
dzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSB7fQogCiBDb2xvciBX
ZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2Vi
Q29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KQEAg
LTkzLDggKzcwLDUgQEAgU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBubwog
CiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVu
dHNPZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQog
Ci12b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQogfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lv
biAzMTk5MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRs
ZVBvc3QoY29uc3QgY2hhCiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0IHsg
bm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50
KEtleWJvYXJkRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitOUEVy
cm9yIFBsdWdpblZpZXc6OmdldFZhbHVlIChOUE5WYXJpYWJsZSwgdm9pZCopIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KIFBsdWdpblZpZXc6On5QbHVn
aW5WaWV3KCkge30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiAzMTk5MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxNyBAQAogCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2lu
Y2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8
c3RkbGliLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmbmRlZiBOREVCVUcKK1dURkxv
Z0NoYW5uZWwgTG9nV2ViQ29yZVBsdWdpbnMgPSAgeyAweDAwMDAwMDAwLCAiIiwgV1RGTG9nQ2hh
bm5lbE9uIH07CisjZW5kaWYKKwogUGx1Z2luRGF0YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKCkKIHsKICAgICBzdGF0aWMgUGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAw
OwpAQCAtMTA2LDggKzExMiwxMiBAQCBib29sIFBsdWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAg
ICAgICAgICAgIHJlbW92ZShvbGRQYWNrYWdlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChhZGQoUGx1Z2luUGFja2FnZTo6Y3JlYXRlUGFja2FnZSgqaXQsIGxhc3RNb2RpZmllZCkp
KQorICAgICAgICBpZiAoYWRkKFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0LCBsYXN0
TW9kaWZpZWQpKSkgewogICAgICAgICAgICAgcGx1Z2luU2V0Q2hhbmdlZCA9IHRydWU7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAJTE9HKFdlYkNvcmVQbHVnaW5zLCJDcmVhdGVkIFBsdWdpbiBw
YWNrYWdlIGZvciAlc1xuIiwoaXQtPnV0ZjgoKSkuZGF0YSgpKTsKKyNlbmRpZgorCX0KICAgICB9
CiAKICAgICAvLyBDYWNoZSBhbGwgdGhlIHBhdGhzIHdlIGZvdW5kIHdpdGggdGhlaXIgdGltZXN0
YW1wcyBmb3IgbmV4dCB0aW1lLgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2
aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDE2ICsyNywzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJQbHVnaW5EZWJ1Zy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2Fn
ZSgpCiB7CisgICAgLy8gVGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNo
KCkgaWYgUGx1Z2luRGF0YWJhc2UncworICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkg
cG9wdWxhdGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1zIGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJs
ZS4gQ2FsbGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8g
Y291cnNlIHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJl
Zm9yZSB3ZQorICAgIC8vIEFTU0VSVC4KKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkg
YSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLgorICAgIGlmIChtX2xvYWRDb3VudCA9PSAwKQorCXVu
bG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIGVsc2UKKwl1bmxvYWQoKTsKKwogICAgIEFTU0VS
VCghbV9pc0xvYWRlZCk7CiB9CiAKQEAgLTU4LDYgKzcyLDMxIEBAIHZvaWQgUGx1Z2luUGFja2Fn
ZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmUKICAgICBtX21vZHVsZSA9IDA7CiB9CiAKKworaW50IFBs
dWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25z
dAoreworICAgIC8vIFNvcnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMg
Zmlyc3QuCisgICAgYm9vbCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29u
dGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBC
YWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1
cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID8gLTEgOiAxOworCisgICAgLy8gU29ydCBwbHVn
LWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWRE
aXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFy
ZW50RGlyZWN0b3J5KCkpOworICAgIGJvb2wgQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVn
aW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERp
cmVjdG9yeSgpKTsKKyAgICBpZiAoQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVm
ZXJyZWREaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/
IC0xIDogMTsKKworICAgIGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBj
b21wYXJlVG8ubmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChkaWZmKQorICAgICAgICBy
ZXR1cm4gZGlmZjsKKworICAgIGlmIChkaWZmID0gY29tcGFyZUZpbGVWZXJzaW9uKGNvbXBhcmVU
by52ZXJzaW9uKCkpKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIHJldHVybiBzdHJjbXAo
cGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9y
eSgpLnV0ZjgoKS5kYXRhKCkpOworfQorCiBQbHVnaW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNv
bnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90JiBsYXN0TW9kaWZpZWQpCiAgICAgOiBtX3Bh
dGgocGF0aCkKICAgICAsIG1fbW9kdWxlVmVyc2lvbigwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3
LmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5Myw1NSArMzkzLDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdGF0
dXMoY29uc3QgY2hhciogbWVzcwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFy
VGV4dChtX3BhcmVudEZyYW1lLCBTdHJpbmcobWVzc2FnZSkpOwogfQogCi1OUEVycm9yIFBsdWdp
blZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAg
ICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOwotCi0gICAgc3dpdGNoICh2YXJpYWJsZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQotICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAgICAgICAg
ICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1Nj
cmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3Rl
ZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgICAgIGlmICh3aW5k
b3dTY3JpcHRPYmplY3QpCi0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93
U2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwot
ICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
TlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdp
blNjcmlwdE9iamVjdCA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05h
bWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxl
bWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAgIHBsdWdpblNjcmlw
dE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0
TlBPYmplY3QoKTsKLQotICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRv
IGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
cHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICAgICAgaWYgKHBsdWdpblNj
cmlwdE9iamVjdCkKLSAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3Jp
cHRPYmplY3QpOwotCi0gICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAg
ICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIE5QTlZuZXRz
Y2FwZVdpbmRvdzogewotICAgICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVycHJl
dF9jYXN0PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUpOwotCi0gICAgICAgICAgICAqdyA9IGNvbnRh
aW5pbmdXaW5kb3coKTsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAg
ICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKLSAgICB9Ci19Ci0KIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2F0dGFjaGVkVG9XaW5kb3c7CiAgICAgICAg
IGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGJv
b2wgbV9uZWVkc1hFbWJlZDsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICBP
d25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlcldpbj4gbV9tZXNzYWdlVGhyb3R0bGVyOwogICAg
ICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJvYzsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAzMTk5MCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgor
I2luY2x1ZGUgPGdka2NvbmZpZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYwLDYg
KzYxLDggQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogICAgIFZl
Y3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOwogICAgIGdjaGFyKiBkaXJlY3Rvcnk7CiAKKyAgICBk
aXJlY3RvcnkgPSAwOworCiAjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKICAgICBkaXJl
Y3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJw
bHVnaW5zIiwgTlVMTCk7CiAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7CkBAIC02
OSw5ICs3Miw5IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGwKICAg
ICBpZiAobW96UGF0aCkgewogICAgICAgICBnY2hhcioqIHBsdWdpblBhdGhzID0gZ19zdHJzcGxp
dChtb3pQYXRoLCAiOiIsIC0xKTsKIAotICAgICAgICBmb3IgKGdpbnQgaSA9IDA7IHBsdWdpblBh
dGhzW2ldOyBpKyspCisgICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07IGkr
KykgewogICAgICAgICAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKHBsdWdpblBhdGhzW2ldKTsKLQor
CX0KICAgICAgICAgZ19zdHJmcmVldihwbHVnaW5QYXRocyk7CiAgICAgfQogCkBAIC05NSw3ICs5
OCwyMSBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsCiAKIGJvb2wg
UGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
ZGlyZWN0b3J5KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICBnY2hhciogaG9tZVBhdGg7Cisg
ICAgYm9vbCByZXR2YWwgPSBmYWxzZTsKKworICAgIGhvbWVQYXRoID0gMDsKKworI2lmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5zIiwgMCk7CisjZWxpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfV0lOMzIpCisgICAgaG9tZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdf
Z2V0X2hvbWVfZGlyKCksICJBcHBsaWNhdGlvbiBEYXRhIiwgIk1vemlsbGEiLCAicGx1Z2lucyIs
IDApOworI2VuZGlmCisKKyAgICBpZiAoaG9tZVBhdGgpCisJcmV0dmFsID0gKHN0cmNtcChob21l
UGF0aCwgKGRpcmVjdG9yeS51dGY4KCkpLmRhdGEoKSkgPT0gMCk7CisKKyAgICByZXR1cm4gcmV0
dmFsOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5j
cHAJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdl
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMzAgQEAgaW50IFBsdWdpblBhY2th
Z2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUAogICAgIHJldHVybiBzdHJjbXAocGFyZW50RGlyZWN0
b3J5KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5k
YXRhKCkpOwogfQogCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNr
YWdlJiBjb21wYXJlVG8pIGNvbnN0Cit7CisgICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93
IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KKyAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3Rh
bmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5z
dGFuY2VzKTsKKyAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8u
cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7
CisgICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0
YW5jZXMpCisgICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7
CisKKyAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCisgICAg
Ym9vbCBBaXNJblByZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVn
aW5QYXRoKHBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBib29sIEJpc0luUHJlZmVycmVkUGF0aCA9
IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpblBhdGgoY29tcGFyZVRvLnBhcmVudERp
cmVjdG9yeSgpKTsKKyAgICBpZiAoQWlzSW5QcmVmZXJyZWRQYXRoICE9IEJpc0luUHJlZmVycmVk
UGF0aCkKKyAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkUGF0aCA/IC0xIDogMTsKKworICAg
IGludCBkaWZmID0gc3RyY21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKwor
ICAgIGlmIChkaWZmID0gY29tcGFyZUZpbGVWZXJzaW9uKGNvbXBhcmVUby52ZXJzaW9uKCkpKQor
ICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIHJldHVybiBzdHJjbXAocGFyZW50RGlyZWN0b3J5
KCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRh
KCkpOworfQorCiBib29sIFBsdWdpblBhY2thZ2U6OmlzUGx1Z2luQmxhY2tsaXN0ZWQoKQogewog
ICAgIHN0YXRpYyBjb25zdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gc2xQbHVnaW5NaW5SZXF1aXJl
ZCgweDUxQkUwMDAwLCAweDAwMDEwMDAwKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
blZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNiArODU4LDU4IEBAIE5QRXJyb3Ig
UGx1Z2luVmlldzo6aGFuZGxlUG9zdChjb25zdCBjaGEKICAgICByZXR1cm4gbG9hZChmcmFtZUxv
YWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKIH0KIAorTlBFcnJvciBQ
bHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7
CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFT
Y3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAg
ICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+d2luZG93U2Ny
aXB0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVk
IHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHdpbmRv
d1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dT
Y3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Cisg
ICAgICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBO
UE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNl
ZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgICAgIE5QT2JqZWN0
KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5o
YXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8
fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVn
aW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVu
dCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBl
Y3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemls
bGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChw
bHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1
Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVl
OworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBO
UE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIFBsYXRmb3JtV2lkZ2V0KiB3ID0gcmVp
bnRlcnByZXRfY2FzdDxQbGF0Zm9ybVdpZGdldCo+KHZhbHVlKTsKKworICAgICAgICAgICAgKncg
PSBjb250YWluaW5nV2luZG93KCk7CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVS
ZWN0KE5QUmVjdCogcmVjdCkKIHsKICAgICBpZiAoIXJlY3QpIHsKSW5kZXg6IFdlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lv
biAzMTk5MCkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogIENvcHlyaWdodCAoQykg
MjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICogIENvcHlyaWdodCAoQykgMjAwNyBD
aHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNTcsNiArNTgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogRnJhbWVMb2Fk
ZXJDbGllbnQ6OkZyYW1lTG9hZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICA6
IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fdXNlckFnZW50
KCIiKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKQEAgLTE2Miw5ICsxNjQsMzAgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCiB7Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxv
YWRlcigpOwotICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUo
KSwgZmFsc2UpOwotICAgIGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OworCisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgQVNTRVJUKGxvYWRlci0+ZnJh
bWUoKSk7CisgICAgICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2Fk
ZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQorICAg
ICAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBmb3Ig
dGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6YmxhbmspLgor
ICAgICAgICBTdHJpbmcgZW5jb2RpbmcgPSBsb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKKyAg
ICAgICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgICAgICBpZiAo
IXVzZXJDaG9zZW4pCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50
ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2Rpbmco
ZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAgICAgIGZy
YW1lTG9hZGVyLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisgICAgaWYgKG1fcGx1
Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAg
ICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9u
c2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0
aCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
IGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKQEAgLTI2MCw5ICsy
ODMsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQbwogICAgIChj
b3JlKG1fZnJhbWUpLT5sb2FkZXIoKS0+KnBvbGljeUZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQog
Ci1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYs
IEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpCitXaWRnZXQqIEZyYW1lTG9hZGVyQ2xp
ZW50OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sIGxvYWRNYW51YWxseSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFBsdWdp
blZpZXcqIHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3OjpjcmVhdGUoY29yZShtX2ZyYW1lKSwgcGx1
Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUs
IGxvYWRNYW51YWxseSk7CisKKyAgICBpZiAocGx1Z2luVmlldy0+c3RhdHVzKCkgPT0gUGx1Z2lu
U3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5KQorICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKwog
ICAgIHJldHVybiAwOwogfQogCkBAIC0yOTAsOCArMzE3LDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4g
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVj
dERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5W
aWV3Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3Jl
YXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwm
IGJhc2VVUkwsCkBAIC01ODcsMTQgKzYxMywxNCBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6
OmdlbmVyYXRlZE1JTUVUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGlu
ZyhEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50
TG9hZGVyLT5mcmFtZSgpKTsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbmNvZGluZyBvbiB0aGUgZnJh
bWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsgZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRv
bmUKLSAgICAvLyB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgZGF0YSBpcyByZWNlaXZlZCwgZXZlbiBm
b3IgdGhlIGNhc2Ugb2YgYSBkb2N1bWVudCB3aXRoIG5vIGRhdGEgKGxpa2UgYWJvdXQ6Ymxhbmsp
LgotICAgIFN0cmluZyBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5vdmVycmlkZUVuY29kaW5n
KCk7Ci0gICAgYm9vbCB1c2VyQ2hvc2VuID0gIWVuY29kaW5nLmlzTnVsbCgpOwotICAgIGlmIChl
bmNvZGluZy5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcgPSBkb2N1bWVudExvYWRlci0+cmVz
cG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgZG9jdW1lbnRMb2FkZXItPmZyYW1lTG9h
ZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKworICAgIGlmICghbV9w
bHVnaW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7Cisg
ICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVn
aW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzEwLDkgKzczNiwxMyBAQCB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNl
dE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7
CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2lu
VmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAg
ICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw2
ICszMyw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJGcmFtZSBXZWJLaXRXZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xNzAsNiArMTczLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRX
ZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jl
c3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAg
Ly8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVn
aW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMu
cG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZp
c2lvbiAzMTk5MCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01NSw2ICs1Niw3IEBAIG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkb3NY
VmVyc2lvbjsKIG15ICRpc1F0OwogbXkgJGlzR3RrOworbXkgJGVuYWJsZUd0a1BsdWdpbnM7CiBt
eSAkaXNXeDsKIAogIyBWYXJpYWJsZXMgZm9yIFdpbjMyIHN1cHBvcnQKQEAgLTQ5NCw2ICs0OTYs
MjMgQEAgc3ViIGRldGVybWluZUlzR3RrKCkKICAgICB9CiB9CiAKK3N1YiBlbmFibGVHdGtQbHVn
aW5zKCkKK3sKKyAgICBkZXRlcm1pbmVFbmFibGVHdGtQbHVnaW5zKCk7CisgICAgcmV0dXJuICRl
bmFibGVHdGtQbHVnaW5zOworfQorCitzdWIgZGV0ZXJtaW5lRW5hYmxlR3RrUGx1Z2lucygpCit7
CisgICAgcmV0dXJuIGlmIGRlZmluZWQoJGVuYWJsZUd0a1BsdWdpbnMpOworCisgICAgaWYgKGNo
ZWNrQXJndigiLS1kaXNhYmxlLWd0ay1wbHVnaW5zIikpIHsKKyAgICAgICAgJGVuYWJsZUd0a1Bs
dWdpbnMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMTsK
KyAgICB9Cit9CisKIHN1YiBpc1d4KCkKIHsKICAgICBkZXRlcm1pbmVJc1d4KCk7CkBAIC04NjUs
NiArODg0LDcgQEAgc3ViIGJ1aWxkR3RrUHJvamVjdCgkJEApCiAKICAgICBpZiAodXNlUW1ha2Uo
KSkgewogICAgICAgICBteSBAYnVpbGRBcmdzID0gKCJDT05GSUcrPWd0ay1wb3J0IiwgIkNPTkZJ
Ry09cXQiKTsKKyAgICAgICAgcHVzaCBAYnVpbGRBcmdzLCAiQ09ORklHKz1wbHVnaW5zIiBpZiBl
bmFibGVHdGtQbHVnaW5zKCk7CiAgICAgICAgIHJldHVybiBidWlsZFFNYWtlUHJvamVjdCgkY2xl
YW4sIEBidWlsZEFyZ3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBidWlsZEF1dG90
b29sc1Byb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20621</attachid>
            <date>2008-04-17 06:00:19 -0700</date>
            <delta_ts>2008-05-02 04:04:27 -0700</delta_ts>
            <desc>Updated patch against r31990 - fixed missing files</desc>
            <filename>my_patch.txt</filename>
            <type>text/plain</type>
            <size>97172</size>
            <attacher name="Sriram Neelakandan">sriram.neelakandan</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzMTk5MCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiAr
MjQwLDcgQEAgZW5kaWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBf
VU5JWAord2ViY29yZV9saWJhZGQgKz0gLWxYdCAtbG5zcHI0CiBlbmRpZgogCiBpZiAhRU5BQkxF
X0RFQlVHCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtOTEzLDcgKzkxMywxMCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKIAlXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgXAorCVdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKIAlX
ZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmlu
Zy9iaWRpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIFwKQEAgLTk3
NCw2ICs5NzcsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCiAKK2lmIFRBUkdF
VF9YMTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYworZW5kaWYKKwogd2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVs
cGVyLmgKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgZ3RrLXBvcnQgewogICAgIH0KICAgICB4MTE6
cGx1Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICBMSUJTICs9IC1s
WHQKICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0xODEsNiArMTgyLDcgQEAgZ3Rr
LXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBcCiAgICAgbG9hZGVyL2d0
ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAgICAuLi9XZWJLaXQvZ3Rr
IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3Rr
L3dlYmtpdApAQCAtOTMxLDEzICs5MzMsMzUgQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCiAKIGd0ay1wb3J0IHsKKyAgIXBsdWdpbnMgeworICAgIERFRklORVMgKz0g
R1RLX0RJU0FCTEVfUExVR0lOUz0xCisgIH0KKyAgSEVBREVSUyArPSBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z2luRGF0YWJhc2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcCAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwK
KyAgICBwbHVnaW5zL2d0ay9ucGFwaS5jcHAKKworICB4MTE6cGx1Z2lucyB7CisgICAgSEVBREVS
UyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCisgICAgICBwbHVnaW5zL2d0
ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYworICB9CiB9CiAKIHF0LXBvcnQgewpAQCAtMTA1MSw2ICsxMDc1LDcgQEAgcXQtcG9ydCB7
CiB9CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMv
Z3RrCiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAzMTk5MCkKKysr
IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTMwLDE1ICszMSwxNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJranNfcHJveHku
aCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
PiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikKK1Bhc3NSZWZQ
dHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZv
cldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+Ymlu
ZGluZ0luc3RhbmNlKCk7CiB9CiAKIHZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lv
biAzMTk5MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSwxMCArODksMjEgQEAgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldEZpbGVNb2RpZmlj
YXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCitib29sIGdldEZpbGVNb2RpZmljYXRp
b25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiBtb2RpZmllZFRpbWUpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZ2NoYXIqIGZpbGVuYW1l
ID0gZ19maWxlbmFtZV9mcm9tX3V0ZjgocGF0aC51dGY4KCkuZGF0YSgpLCAtMSwgMCwgMCwgMCk7
CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RydWN0
IHN0YXQgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZSwgJnN0
YXRSZXN1bHQpOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0LnN0
X210aW1lOworICAgIHJldHVybiB0cnVlOworCiB9CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNp
b24gMzE5OTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgog
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIApAQCAt
NTgsMjggKzU2LDcgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAog
LyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAq
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJikg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdW5zaWdu
ZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNv
bnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQot
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFs
c2U7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQ
bHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVn
aW5WaWV3OjpzZXRGb2N1cygpIHsgV2lkZ2V0OjpzZXRGb2N1cygpOyB9Ci12b2lkIFBsdWdpblZp
ZXc6OnNob3coKSB7IFdpZGdldDo6c2hvdygpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmhpZGUoKSB7
IFdpZGdldDo6aGlkZSgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmll
dzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpIHsgV2lkZ2V0OjpzZXRQYXJlbnQodmlldyk7
IH0KLXZvaWQgUGx1Z2luVmlldzo6YXR0YWNoVG9XaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLXZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgdWludDMyLCBjb25zdCBjaGFyKiwgYm9vbCwgdm9pZCosIGJvb2wsIGJvb2wpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KLXZvaWQgUGx1Z2lu
Vmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkge30KIAog
Q29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2
b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkg
eyB9CkBAIC05Myw4ICs3MCw1IEBAIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0
IHsgbm8KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0
aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KIAotdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotdm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0K
IH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAko
cmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3
OjpoYW5kbGVQb3N0KGNvbnN0IGNoYQogdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3coKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9h
cmRFdmVudChLZXlib2FyZEV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsdWdp
blZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZSAoTlBOVmFyaWFibGUsIHZvaWQqKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOyB9CiBQbHVnaW5WaWV3
Ojp+UGx1Z2luVmlldygpIHt9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTcgQEAKIAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkNTdHJpbmcu
aCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZm5kZWYgTkRFQlVH
CitXVEZMb2dDaGFubmVsIExvZ1dlYkNvcmVQbHVnaW5zID0gIHsgMHgwMDAwMDAwMCwgIiIsIFdU
RkxvZ0NoYW5uZWxPbiB9OworI2VuZGlmCisKIFBsdWdpbkRhdGFiYXNlKiBQbHVnaW5EYXRhYmFz
ZTo6aW5zdGFsbGVkUGx1Z2lucygpCiB7CiAgICAgc3RhdGljIFBsdWdpbkRhdGFiYXNlKiBwbHVn
aW5zID0gMDsKQEAgLTEwNiw4ICsxMTIsMTIgQEAgYm9vbCBQbHVnaW5EYXRhYmFzZTo6cmVmcmVz
aCgpCiAgICAgICAgICAgICByZW1vdmUob2xkUGFja2FnZS5nZXQoKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoYWRkKFBsdWdpblBhY2thZ2U6OmNyZWF0ZVBhY2thZ2UoKml0LCBsYXN0TW9k
aWZpZWQpKSkKKyAgICAgICAgaWYgKGFkZChQbHVnaW5QYWNrYWdlOjpjcmVhdGVQYWNrYWdlKCpp
dCwgbGFzdE1vZGlmaWVkKSkpIHsKICAgICAgICAgICAgIHBsdWdpblNldENoYW5nZWQgPSB0cnVl
OworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgCUxPRyhXZWJDb3JlUGx1Z2lucywiQ3JlYXRlZCBQ
bHVnaW4gcGFja2FnZSBmb3IgJXNcbiIsKGl0LT51dGY4KCkpLmRhdGEoKSk7CisjZW5kaWYKKwl9
CiAgICAgfQogCiAgICAgLy8gQ2FjaGUgYWxsIHRoZSBwYXRocyB3ZSBmb3VuZCB3aXRoIHRoZWly
IHRpbWVzdGFtcHMgZm9yIG5leHQgdGltZS4KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5Q
YWNrYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5j
cHAJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNiArMjcsMzAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRGVidWcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIm5w
cnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGx1Z2luUGFja2FnZTo6flBsdWdp
blBhY2thZ2UoKQogeworICAgIC8vIFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGNhbGxlZCBkdXJpbmcg
cmVmcmVzaCgpIGlmIFBsdWdpbkRhdGFiYXNlJ3MKKyAgICAvLyBQbHVnaW5TZXQgaGFzaCBpcyBh
bHJlYWR5IHBvcHVsYXRlZCwgYXMgaXQgcmVtb3ZlcyBpdGVtcyBmcm9tCisgICAgLy8gdGhlIGhh
c2ggdGFibGUuIENhbGxpbmcgdGhlIGRlc3RydWN0b3Igb24gYSBsb2FkZWQgcGx1Zy1pbiBvZgor
ICAgIC8vIGNvdXJzZSB3b3VsZCBjYXVzZSBhIGNyYXNoLCBzbyB3ZSBjaGVjayB0byBjYWxsIHVu
bG9hZCBiZWZvcmUgd2UKKyAgICAvLyBBU1NFUlQuCisgICAgLy8gRklYTUU6IFRoZXJlIGlzIHBy
b2JhYmx5IGEgYmV0dGVyIHdheSB0byBmaXggdGhpcy4KKyAgICBpZiAobV9sb2FkQ291bnQgPT0g
MCkKKwl1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICBlbHNlCisJdW5sb2FkKCk7CisKICAg
ICBBU1NFUlQoIW1faXNMb2FkZWQpOwogfQogCkBAIC01OCw2ICs3MiwzMSBAQCB2b2lkIFBsdWdp
blBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJlCiAgICAgbV9tb2R1bGUgPSAwOwogfQogCisK
K2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmIGNvbXBhcmVU
bykgY29uc3QKK3sKKyAgICAvLyBTb3J0IHBsdWctaW5zIHRoYXQgYWxsb3cgbXVsdGlwbGUgaW5z
dGFuY2VzIGZpcnN0LgorICAgIGJvb2wgQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID0gIXF1aXJr
cygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAg
IGJvb2wgQmFsbG93c011bHRpcGxlSW5zdGFuY2VzID0gIWNvbXBhcmVUby5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBpZiAoQWFs
bG93c011bHRpcGxlSW5zdGFuY2VzICE9IEJhbGxvd3NNdWx0aXBsZUluc3RhbmNlcykKKyAgICAg
ICAgcmV0dXJuIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA/IC0xIDogMTsKKworICAgIC8vIFNv
cnQgcGx1Zy1pbnMgaW4gYSBwcmVmZXJyZWQgcGF0aCBmaXJzdC4KKyAgICBib29sIEFpc0luUHJl
ZmVycmVkRGlyZWN0b3J5ID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0
b3J5KHBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBib29sIEJpc0luUHJlZmVycmVkRGlyZWN0b3J5
ID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbXBhcmVUby5w
YXJlbnREaXJlY3RvcnkoKSk7CisgICAgaWYgKEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ICE9IEJp
c0luUHJlZmVycmVkRGlyZWN0b3J5KQorICAgICAgICByZXR1cm4gQWlzSW5QcmVmZXJyZWREaXJl
Y3RvcnkgPyAtMSA6IDE7CisKKyAgICBpbnQgZGlmZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRh
dGEoKSwgY29tcGFyZVRvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoZGlmZikKKyAg
ICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICBpZiAoZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihj
b21wYXJlVG8udmVyc2lvbigpKSkKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICByZXR1cm4g
c3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnRE
aXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKK30KKwogUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFj
a2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQogICAg
IDogbV9wYXRoKHBhdGgpCiAgICAgLCBtX21vZHVsZVZlcnNpb24oMCkKSW5kZXg6IFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNTUgKzM5Myw2IEBAIHZvaWQgUGx1Z2luVmll
dzo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3MKICAgICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0
YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZSwgU3RyaW5nKG1lc3NhZ2UpKTsKIH0KIAotTlBFcnJv
ciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUp
Ci17Ci0gICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQotICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKLQotICAgIHN3aXRjaCAodmFyaWFibGUpIHsKLSNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKLSAg
ICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53
aW5kb3dTY3JpcHROUE9iamVjdCgpOwotCi0gICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMg
ZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5t
b3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+Ci0gICAgICAgICAgICBp
ZiAod2luZG93U2NyaXB0T2JqZWN0KQotICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0
KHdpbmRvd1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2
YWx1ZTsKLSAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKLSAgICAgICAgICAgIE5QT2JqZWN0
KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0gICAgICAgICAgICBpZiAobV9lbGVtZW50LT5o
YXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8
fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgICBwbHVn
aW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVu
dCktPmdldE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBl
Y3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemls
bGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgICAgIGlmIChw
bHVnaW5TY3JpcHRPYmplY3QpCi0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1
Z2luU2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVl
OwotICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBO
UE5WbmV0c2NhcGVXaW5kb3c6IHsKLSAgICAgICAgICAgIFBsYXRmb3JtV2lkZ2V0KiB3ID0gcmVp
bnRlcnByZXRfY2FzdDxQbGF0Zm9ybVdpZGdldCo+KHZhbHVlKTsKLQotICAgICAgICAgICAgKncg
PSBjb250YWluaW5nV2luZG93KCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCiBOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVl
KE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHZhcmlh
YmxlKSB7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDYgKzIyMSwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9hdHRhY2hlZFRvV2luZG93Owog
ICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOwogCisjaWYgUExBVEZPUk0oR1RLKQorICAg
ICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VUaHJvdHRsZXJXaW4+IG1fbWVzc2FnZVRocm90dGxl
cjsKICAgICAgICAgV05EUFJPQyBtX3BsdWdpblduZFByb2M7CkluZGV4OiBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luRGF0YUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpbkRhdGFHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgICAgQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+Citu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQorewor
ICAgIHByaW50ZigiSW5pdCBwbHVnaW5zIGNhbGxlZCBcbiIpOworICAgIFBsdWdpbkRhdGFiYXNl
ICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgY29uc3QgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiAmcGx1Z2lucyA9IGRiLT5wbHVnaW5zKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
UGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOworICAgICAgICBQbHVnaW5QYWNrYWdl
KiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKKworICAgICAgICBpbmZvLT5uYW1lID0gcGFja2FnZS0+
bmFtZSgpOworICAgICAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsKKyAgICAg
ICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgY29uc3Qg
TUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdlLT5taW1l
VG9EZXNjcmlwdGlvbnMoKTsKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgICAgIGZvciAoTUlN
RVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8q
IG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIGluZm8tPm1pbWVzLmFwcGVu
ZChtaW1lKTsKKworICAgICAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAgICAgICAg
ICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS0+cGx1Z2luID0g
aW5mbzsKKworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2Ut
Pm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSAi
LCI7CisKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25zW2ldOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZv
KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgUGx1Z2lu
RGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBk
Yi0+cmVmcmVzaCgpOworfQorCit9OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5E
YXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5EYXRhYmFzZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVk
ZSA8Z2RrY29uZmlnLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsNiArNjEsOCBA
QCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsCiAgICAgVmVjdG9yPFN0
cmluZz4gZGlyZWN0b3JpZXM7CiAgICAgZ2NoYXIqIGRpcmVjdG9yeTsKIAorICAgIGRpcmVjdG9y
eSA9IDA7CisKICNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQogICAgIGRpcmVjdG9yeSA9
IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMi
LCBOVUxMKTsKICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKQEAgLTY5LDkgKzcy
LDkgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogICAgIGlmICht
b3pQYXRoKSB7CiAgICAgICAgIGdjaGFyKiogcGx1Z2luUGF0aHMgPSBnX3N0cnNwbGl0KG1velBh
dGgsICI6IiwgLTEpOwogCi0gICAgICAgIGZvciAoZ2ludCBpID0gMDsgcGx1Z2luUGF0aHNbaV07
IGkrKykKKyAgICAgICAgZm9yIChnaW50IGkgPSAwOyBwbHVnaW5QYXRoc1tpXTsgaSsrKSB7CiAg
ICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQocGx1Z2luUGF0aHNbaV0pOwotCisJfQogICAg
ICAgICBnX3N0cmZyZWV2KHBsdWdpblBhdGhzKTsKICAgICB9CiAKQEAgLTk1LDcgKzk4LDIxIEBA
IFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGwKIAogYm9vbCBQbHVnaW5E
YXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnkpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGdjaGFyKiBob21lUGF0aDsKKyAgICBib29s
IHJldHZhbCA9IGZhbHNlOworCisgICAgaG9tZVBhdGggPSAwOworCisjaWYgZGVmaW5lZChHREtf
V0lORE9XSU5HX1gxMSkKKyAgICBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9t
ZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCAwKTsKKyNlbGlmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19XSU4zMikKKyAgICBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9t
ZV9kaXIoKSwgIkFwcGxpY2F0aW9uIERhdGEiLCAiTW96aWxsYSIsICJwbHVnaW5zIiwgMCk7Cisj
ZW5kaWYKKworICAgIGlmIChob21lUGF0aCkKKwlyZXR2YWwgPSAoc3RyY21wKGhvbWVQYXRoLCAo
ZGlyZWN0b3J5LnV0ZjgoKSkuZGF0YSgpKSA9PSAwKTsKKworICAgIHJldHVybiByZXR2YWw7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5E
ZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21w
YXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uJikgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBsdWdpblBhY2th
Z2U6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGlmIChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAg
ICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNzIGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1z
LCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9hZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdl
IGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2luLCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0
byBvdXIgb25seSBWTQorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2Fk
UGx1Z2luKTsKKworICAgICAgICAvLyBTZXR0aW5nIHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVt
cHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGluZyByZXBhaW50IHByb2JsZW1zCisgICAgICAg
IC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1
aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9sbGluZyk7CisgICAgfQorfQorCitib29sIFBs
dWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7CisgICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIE5QX0dldE1JTUVEZXNjcmlwdGlvbkZ1bmNQdHIgTlBfR2V0TUlN
RURlc2NyaXB0aW9uOworICAgIE5QUF9HZXRWYWx1ZVByb2NQdHIgTlBQX0dldFZhbHVlOworCisg
ICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0TUlNRURlc2NyaXB0aW9uIiwgKHZv
aWQqKikmTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1
bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJk5QUF9HZXRWYWx1ZSk7CisKKyAgICBjb25zdCBn
Y2hhciogdHlwZXMgPSBOUF9HZXRNSU1FRGVzY3JpcHRpb24oKTsKKyAgICBnY2hhcioqIG1pbWVE
ZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7IiwgLTEpOworICAgIGZvciAoaW50IGkgPSAwOyBt
aW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ldWzBdOyBpKyspIHsKKyAgICAgICAgZ2NoYXIqKiBt
aW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2NzW2ldLCAiOiIsIDMpOworCisgICAgICAgIFN0
cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgobWltZURhdGFbMl0pOworICAgICAg
ICBnY2hhcioqIGV4dGVuc2lvbnMgPSBnX3N0cnNwbGl0KG1pbWVEYXRhWzFdLCAiLCIsIC0xKTsK
KworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRWZWN0b3I7CisgICAgICAgIGZvciAoaW50IGog
PSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisgICAgICAgICAgICBleHRWZWN0b3IuYXBwZW5kKFN0
cmluZzo6ZnJvbVVURjgoZXh0ZW5zaW9uc1tqXSkpOworCisgICAgICAgIG1fbWltZVRvRXh0ZW5z
aW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rvcik7CisgICAgICAgIG1fbWltZVRvRGVzY3Jp
cHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3JpcHRpb24pOworCisgICAgICAgIGdfc3RyZnJl
ZXYoZXh0ZW5zaW9ucyk7CisgICAgICAgIGdfc3RyZnJlZXYobWltZURhdGEpOworICAgIH0KKyAg
ICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7CisKKyAgICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5Q
RXJyb3IgZXJyID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5OYW1lU3RyaW5nLCAmYnVmZmVy
KTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBtX25hbWUgPSBidWZm
ZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVyciA9IE5QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1
Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9f
RVJST1IpCisgICAgICAgIG1fZGVzY3JpcHRpb24gPSBidWZmZXI7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRl
ZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29wZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwg
R19NT0RVTEVfQklORF9MT0NBTCk7CisKKyAgICBpZiAoIW1fbW9kdWxlKSB7CisJcHJpbnRmKCJN
b2R1bGUgTG9hZCBGYWlsZWQgOiVzLCBFcnJvcjolc1xuIiwgKG1fcGF0aC51dGY4KCkpLmRhdGEo
KSwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKwl9CisKKyAgICBt
X2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRyIE5QX0luaXRpYWxp
emU7CisgICAgTlBFcnJvciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwg
Ik5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAgICBnX21vZHVsZV9z
eW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQX1NodXRkb3duKTsK
KworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdv
dG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdp
bkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3Mp
OworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOwor
ICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVy
bCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1Jl
cXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07
CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVu
Y3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNz
LnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1Vz
ZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVu
Y3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1
Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlm
eSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9
IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dl
dFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAg
IG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAg
IG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3Mu
cHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAg
IG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFi
bGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05Q
Tl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50
aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0
c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAg
bV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJp
bmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJv
bUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVh
dGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5P
YmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9i
amVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJv
d3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5n
ZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJv
cGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3Bl
cnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0
eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5f
SGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRF
eGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7
CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5G
dW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFi
b3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6Cisg
ICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNp
Z25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENv
ZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFz
dE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChy
ZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkg
LyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQ
bHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQoreworICAgIHJldHVybiBh
Lm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNs
dWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgor
I2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2luY2x1
ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxr
anMvdmFsdWUuaD4KKworI2luY2x1ZGUgPGdka2NvbmZpZy5oPgorCisjaWYgZGVmaW5lZChHREtf
V0lORE9XSU5HX1gxMSkKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2Rr
eC5oPgorI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorI2luY2x1ZGUgPGdkay9n
ZGt3aW4zMi5oPgorI2VuZGlmCisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJ
bnRlcnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09iamVjdDsKK3Vz
aW5nIEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47
CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit2b2lk
IFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQoKSB8
fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCkt
PmlzRnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93
aW5kb3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAg
bV93aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVH
ZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2Ns
aXBSZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93
UmVjdC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0
LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGlmIChtX3dpbmRvdykgewor
ICAgICAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUobV93aW5kb3csICZhbGxvY2F0aW9uKTsK
KyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBpZiAoIW1fbmVlZHNYRW1i
ZWQpIHsKKyAgICAgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1fd2lu
ZG93KSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAgICBn
dGtfeHRiaW5fcmVzaXplKG1fd2luZG93LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dS
ZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIFBsdWdp
blZpZXc6OnNldEZvY3VzKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisJZ3RrX3dpZGdldF9ncmFi
X2ZvY3VzKG1fd2luZG93KTsKKworICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpzaG93KCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisKKyAgICBpZiAo
bV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfc2hvdyhtX3dpbmRv
dyk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkK
K3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRv
dyAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworCisgICAgV2lkZ2V0
OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsK
KyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICAvL3Bh
aW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5lZWQg
dG8gc3ludGhlc2l6ZSBYZXZlbnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZURyYXdhYmxlOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygp
KTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAg
S0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2lu
LT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorCisg
ICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0
cnkoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAg
ICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0K
K30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQoreworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAKKyAgICAvKiBGSVhNRTogU3lu
dGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCisKKyAgICBLSlM6OkpTTG9jazo6
RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91
c2VFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgaWYgKCFtX2lz
V2luZG93ZWQpCisgICAgICByZXR1cm47CisKKyAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBhbiBY
RXZlbnQgdG8gcGFzcyB0aHJvdWdoICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+cGFn
ZVgoKSwgZXZlbnQtPnBhZ2VZKCkpKTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3Mg
ZHJvcEFsbExvY2tzOworICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZucEV2ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sK
KyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAg
ICAgaW5pdCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFtX2lzV2lu
ZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQo
KSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93Lngg
PSBwLngoKTsKKyAgICBtX25wV2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lk
dGggPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgp
OworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNs
aXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lk
dGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisK
KyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBL
SlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisKKyAg
ICAgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
QVNTRVJUKG1fd2luZG93KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6YXR0YWNoVG9X
aW5kb3coKQoreworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cpCisJcmV0dXJuOworCisgICAg
bV9hdHRhY2hlZFRvV2luZG93ID0gdHJ1ZTsKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93aW5k
b3cpCisJZ3RrX3dpZGdldF9zaG93KG1fd2luZG93KTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpk
ZXRhY2hGcm9tV2luZG93KCkKK3sKKyAgICBpZiAoIW1fYXR0YWNoZWRUb1dpbmRvdykKKwlyZXR1
cm47CisKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93aW5kb3cpCisJZ3RrX3dpZGdldF9oaWRl
KG1fd2luZG93KTsKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSBmYWxzZTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpzdG9wKCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9IG1fc3Ry
ZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGVuZCA9
IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46
Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAgZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7
CisgICAgfQorCisgICAgQVNTRVJUKG1fc3RyZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0
YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzOworCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9
IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXks
IGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJpbmdBcnJheSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZmFzdEZyZWUo
c3RyaW5nQXJyYXlbaV0pOworCisgICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOworfQorCitzdGF0
aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZl
VVJMU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsK
KworICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgorICAgIHVybFN0cmluZy5yZXBsYWNl
KCdcbicsICIiKTsKKyAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7CisKKyAgICByZXR1
cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3Rh
cnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICByZXR1
cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Cit9CisKK2NvbnN0IGNo
YXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVs
bCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2Vy
QWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5k
YXRhKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYnVmZmVyLnNpemUoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBpKyspIHsKKyAgICAgICAgLy8gU3VwcG9y
dCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgorICAgICAgICBpZiAoYnl0ZXNbaV0gPT0g
J1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBpICsgMjsK
KyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidz
IG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGluZS4KKyAgICAgICAgaWYgKGJ5dGVzW2ld
ID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGkgKz0gMjsK
KyAgICAgICAgICAgIGlmIChpID09IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAg
ICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8vIFN1
cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJcblxuIiAoMzg4MDM4NykuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0g
J1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICAvLyBTdXBwb3J0
IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAoMzc1ODExMykuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGkgKyAyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQor
CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRFT0woY29uc3QgY2hhciogYnl0ZXMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEhUVFAgc3BlY2lmaWNh
dGlvbiBFT0wgaXMgZGVmaW5lZCBhcworICAgIC8vIGEgQ1JMRiBwYWlyLiBVbmZvcnR1bmF0ZWx5
LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgTEYKKyAgICAvLyBpbnN0ZWFkLiBXb3JzZSB5ZXQsIHNv
bWUgc2VydmVycyB3aWxsIHVzZSBhIGNvbWJpbmF0aW9uCisgICAgLy8gb2YgYm90aCAoZS5nLiA8
aGVhZGVyPkNSTEZMRjxib2R5PiksIHNvIGZpbmRFT0wgbmVlZHMKKyAgICAvLyB0byBiZSBtb3Jl
IGZvcmdpdmluZy4gSXQgd2lsbCBub3cgYWNjZXB0IENSTEYsIExGIG9yCisgICAgLy8gQ1IuCisg
ICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIE5VTEwgaWYgRU9MRiBpcyBub3QgZm91bmQgb3IgaXQg
d2lsbCByZXR1cm4KKyAgICAvLyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIGNo
YXJhY3Rlci4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBp
OworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gQ2hlY2sg
dG8gc2VlIGlmIHNwYW5uaW5nIGJ1ZmZlciBib3VuZHMKKyAgICAgICAgICAgIC8vIChDUkxGIGlz
IGFjcm9zcyByZWFkcykuIElmIHNvLCB3YWl0IGZvcgorICAgICAgICAgICAgLy8gbmV4dCByZWFk
LgorICAgICAgICAgICAgaWYgKGkgKyAxID09IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIy
SGVhZGVyRmllbGROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBib29sIGNhcGl0YWxp
emVDaGFyYWN0ZXIgPSB0cnVlOworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFVDaGFyIGM7CisK
KyAgICAgICAgaWYgKGNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnYScgJiYgbmFt
ZVtpXSA8PSAneicpCisgICAgICAgICAgICBjID0gdG9BU0NJSVVwcGVyKG5hbWVbaV0pOworICAg
ICAgICBlbHNlIGlmICghY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdBJyAmJiBu
YW1lW2ldIDw9ICdaJykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJTG93ZXIobmFtZVtpXSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSBuYW1lW2ldOworCisgICAgICAgIGlmIChuYW1l
W2ldID09ICctJykKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVyID0gZmFsc2U7CisKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChjKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBj
aGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7CisgICAgY29uc3QgY2hhciogZW9sOworICAgIFN0
cmluZyBsYXN0S2V5OworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworCisgICAgLy8g
TG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3Qg
ZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKKyAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0
ZXMsIGxlbmd0aCkpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKKyAgICAg
ICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIE1v
dmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5l
ZCBieSBmaW5kRU9MLgorICAgICAgICBieXRlcyA9IGVvbCArIDE7CisgICAgICAgIGlmICgoKmVv
bCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQorICAgICAgICAgICAgYnl0ZXMrKzsgLy8g
U2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCisKKyAgICAg
ICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOworICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAw
KQorICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVh
ZGVyCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8
ICpsaW5lID09ICdcdCcpIHsKKyAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJl
dmlvdXMgaGVhZGVyCisgICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgeworICAgICAg
ICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCisg
ICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFz
dEtleSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgp
OworCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50VmFs
dWUgKyBuZXdWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xvbjsK
KyAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9uICE9
IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAorICAgICAgICAgICAgICAgIC8v
IG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGxhc3RLZXkg
PSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAtIGxp
bmUpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBm
b3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29s
b24gPT0gZW9sKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVvbCAt
IGNvbG9uKTsKKworICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZpZWxk
cy5nZXQobGFzdEtleSk7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwoKSkg
eworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIHRtcCArPSAiLCAiOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdmFsdWU7
CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlckZpZWxkczsKK30K
KworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3Qg
Y2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9p
ZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycykK
K3sKKyAgICBpZiAoIXVybCB8fCAhbGVuIHx8ICFidWYpCisgICAgICAgIHJldHVybiBOUEVSUl9J
TlZBTElEX1BBUkFNOworCisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0Owor
CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKKyAgICAKKyAgICBpZiAoZmlsZSkgeworICAgICAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBs
ZW4pOworCisgICAgICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAg
ICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAgICAgICAgLy8g
R2V0IGZpbGUgaW5mbworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgp
KS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lT
X1JFR1VMQVIpKSkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKwor
CS8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICAgICAgRklMRSog
ZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIiKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChmaWxlSGFuZGxlID09IDApCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAgICAgLy9idWZmZXIucmVzaXplKCk7CisKKyAgICAg
ICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUp
OworCisgICAgICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgICAgICBpZiAoYnl0ZXNSZWFk
IDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKwlyZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShs
ZW4pOworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKwor
ICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERh
dGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAg
ICAgICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0
RGF0YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShi
dWZmZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhl
IGJ1ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAg
IGhlYWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24p
OworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0g
bG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRv
IHNldCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAg
ICAgICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2ls
bCByZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5j
YXRlIHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0
cmluZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKTsK
KworICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChpbnQp
ZGF0YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVu
dC1MZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOworICAg
ICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0
KCkuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VS
ZXF1ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRS
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmllbGRz
KTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KEZv
cm1EYXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7CisgICAgZnJhbWVMb2Fk
UmVxdWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9h
ZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCitOUEVycm9yIFBs
dWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sK
KyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkK
KyAgICAgICAgY2FzZSBOUE5WeHRBcHBDb250ZXh0OiB7CisgICAgICAgICAgICBpZiAoIW1fbmVl
ZHNYRW1iZWQpIHsKKyAgICAgICAgICAgICAgICAqKHZvaWQgKiopdmFsdWUgPSBYdERpc3BsYXlU
b0FwcGxpY2F0aW9uQ29udGV4dCAoR1RLX1hUQklOKG1fd2luZG93KS0+eHRjbGllbnQueHRkaXNw
bGF5KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwor
ICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMjsKKyNlbHNlCisg
ICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAwOworI2VuZGlmCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZTdXBw
b3J0c1hFbWJlZEJvb2w6IHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAg
ICAgICAgKigodWludDMyICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgICAgICAqKCh1
aW50MzIgKil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZhU2Ny
aXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICAgICAg
TlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1Njcmlw
dE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0
byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dT
Y3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2Ny
aXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAg
ICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBO
VlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQp
CisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAgICBOUE9iamVjdCog
cGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFz
VGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwg
bV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1Z2lu
U2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQp
LT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0
ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxh
Lm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1
Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdp
blNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsK
KyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBO
Vm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odmFsdWUpOworCisjaWZkZWYgR0RLX1dJTkRPV0lOR19YMTEKKyAgICAgICAgICAg
ICooKFhJRCAqKXcpID0gR0RLX1dJTkRPV19YV0lORE9XKGNvbnRhaW5pbmdXaW5kb3coKS0+d2lu
ZG93KTsKKyNlbmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyAgICAgICAgICAgICoo
KEhXTkQgKil3KSA9IEdES19XSU5ET1dJTkdfSFdORChjb250YWluaW5nV2luZG93KCktPndpbmRv
dyk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJS
T1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCog
cmVjdCkKK3sKKyAgICBpZiAoIXJlY3QpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByKHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwg
cmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20gLSByZWN0LT50b3ApOworICAg
IFdpZGdldDo6aW52YWxpZGF0ZVJlY3Qocik7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VS
ZWRyYXcoKQoreworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAgIGd0a193aWRnZXRfcXVl
dWVfZHJhdyhtX3dpbmRvdyk7CisgICAgZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2Ry
YXcoY29udGFpbmluZ1dpbmRvdygpKTsKK30KKworUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKQor
eworICAgIHN0b3AoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzKTsKKworICAg
IGZyZWVTdHJpbmdBcnJheShtX3BhcmFtTmFtZXMsIG1fcGFyYW1Db3VudCk7CisgICAgZnJlZVN0
cmluZ0FycmF5KG1fcGFyYW1WYWx1ZXMsIG1fcGFyYW1Db3VudCk7CisKKyAgICBtX3BhcmVudEZy
YW1lLT5jbGVhbnVwU2NyaXB0T2JqZWN0c0ZvclBsdWdpbih0aGlzKTsKKworICAgIGlmIChtX3Bs
dWdpbiAmJiAhKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRVbmxv
YWRQbHVnaW4pKSkKKyAgICAgICAgbV9wbHVnaW4tPnVubG9hZCgpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4p
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVn
aW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgp
KSB7CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0
dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFz
dGFydCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdp
bjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1
ZShtX2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKwor
I2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsK
KyAgICAgICAgbV93aW5kb3cgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dp
bmRvdygpKSwgbV93aW5kb3cpOworICAgICAgICBzZXRHdGtXaWRnZXQobV93aW5kb3cpOworICAg
IH0gZWxzZSBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fd2luZG93ID0gZ3RrX3h0Ymlu
X25ldyhtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKS0+d2luZG93LCAw
KTsKKwlzZXRHdGtXaWRnZXQobV93aW5kb3cpOworICAgIH0KKyNlbHNlCisgICAgbV93aW5kb3cg
PSBndGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
bV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLCBtX3dpbmRvdyk7Cisg
ICAgc2V0R3RrV2lkZ2V0KG1fd2luZG93KTsKKyNlbmRpZgorICAgIHNob3cgKCk7CisKKyAgICBp
ZiAobV9pc1dpbmRvd2VkKSB7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKwlOUFNl
dFdpbmRvd0NhbGxiYWNrU3RydWN0IHdzOworCisJd3MudHlwZSA9IDA7CisKKwlpZiAobV9uZWVk
c1hFbWJlZCkgeworCSAgICB3cy5kaXNwbGF5ID0gR0RLX1dJTkRPV19YRElTUExBWShtX3dpbmRv
dy0+d2luZG93KTsKKwkgICAgd3MudmlzdWFsID0gR0RLX1ZJU1VBTF9YVklTVUFMKGdka19kcmF3
YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpbmRvdy0+d2luZG93KSkpOworCSAgICB3
cy5kZXB0aCA9IGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpbmRvdy0+
d2luZG93KSktPmRlcHRoOworCSAgICB3cy5jb2xvcm1hcCA9IEdES19DT0xPUk1BUF9YQ09MT1JN
QVAoZ2RrX2RyYXdhYmxlX2dldF9jb2xvcm1hcChHREtfRFJBV0FCTEUobV93aW5kb3ctPndpbmRv
dykpKTsKKwl9IGVsc2UgeworCSAgICB3cy5kaXNwbGF5ID0gR1RLX1hUQklOKG1fd2luZG93KS0+
eHRkaXNwbGF5OworCSAgICB3cy52aXN1YWwgPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVu
dC54dHZpc3VhbDsKKwkgICAgd3MuZGVwdGggPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVu
dC54dGRlcHRoOworCSAgICB3cy5jb2xvcm1hcCA9IEdUS19YVEJJTihtX3dpbmRvdyktPnh0Y2xp
ZW50Lnh0Y29sb3JtYXA7CisKKwkgICAgWEZsdXNoICh3cy5kaXNwbGF5KTsKKwl9CisKKwltX25w
V2luZG93LndzX2luZm8gPSAmd3M7CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRv
d2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZVdpbmRvdzsKKyNp
ZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorCWlmIChtX25lZWRzWEVtYmVkKQorCSAgICBt
X25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX1hXSU5ET1cobV93aW5kb3ctPndp
bmRvdyk7CisJZWxzZQorCSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHVEtfWFRCSU4o
bV93aW5kb3cpLT54dHdpbmRvdzsKKyNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19XSU4zMikK
KyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopR0RLX1dJTkRPV19IV05EKG1fd2lu
ZG93LT53aW5kb3cpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9ucFdpbmRvdy50
eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAgIG1fbnBXaW5kb3cud2luZG93ID0g
MDsKKyAgICB9CisKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3Qo
ZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3Vj
Y2Vzc2Z1bGx5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvZ3RrL2d0azJ4dGJpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsv
Z3RrMnh0YmluLmMJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJp
bi5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk0MSBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFi
LXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQor
ICogdmltOmV4cGFuZHRhYjpzaGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiog
QkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xH
UEwgMi4xCisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0
aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIp
OyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAq
IHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAq
IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisg
KiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LiBTZWUgdGhlIExpY2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRo
ZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBHdGsyWHRCaW4gV2lkZ2V0IEltcGxlbWVudGF0aW9uLgor
ICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICog
U3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxv
cGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAq
IEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAor
ICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFy
ZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUg
dGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3Ro
ZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHBy
b3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBv
dGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBk
byBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVz
ZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9u
ZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNF
TlNFIEJMT0NLICoqKioqICovCisgCisvKgorICogVGhlIEd0a1h0QmluIHdpZGdldCBhbGxvd3Mg
Zm9yIFh0IHRvb2xraXQgY29kZSB0byBiZSB1c2VkCisgKiBpbnNpZGUgYSBHVEsgYXBwbGljYXRp
b24uICAKKyAqLworCisjdW5kZWYgR1RLX0RJU0FCTEVfREVQUkVDQVRFRAorCisjaW5jbHVkZSAi
eGVtYmVkLmgiCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z3RrL2d0a21haW4u
aD4KKyNpbmNsdWRlIDxndGsvZ3RrcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+Cisj
aW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90aW1l
Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogWGxpYi9YdCBzdHVmZiAqLwor
I2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8
WDExL1NoZWxsLmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9T
dHJpbmdEZWZzLmg+CisKKy8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IGRlYnVnZ2luZyBp
bmZvcm1hdGlvbiBhYm91dCB3aWRnZXQKKyAgIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiAqLwor
I3VuZGVmIERFQlVHX1hUQklOCisKKyNkZWZpbmUgWFRCSU5fTUFYX0VWRU5UUyAzMAorCitzdGF0
aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICpr
bGFzcyk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9pbml0ICAgICAgIChHdGtY
dEJpbiAgICAgICp4dGJpbik7CitzdGF0aWMgdm9pZCAgICAgICAgICAgIGd0a194dGJpbl9yZWFs
aXplICAgIChHdGtXaWRnZXQgICAgICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAg
Z3RrX3h0YmluX3VucmVhbGl6ZSAgICAoR3RrV2lkZ2V0ICAgICAgKndpZGdldCk7CitzdGF0aWMg
dm9pZCAgICAgICAgICAgIGd0a194dGJpbl9kZXN0cm95ICAgIChHdGtPYmplY3QgICAgICAqb2Jq
ZWN0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX3NodXRkb3duICAgKEd0a09i
amVjdCAgICAgICpvYmplY3QpOworCisvKiBYdCBhd2FyZSBYRW1iZWQgKi8KK3N0YXRpYyB2b2lk
ICAgICAgIHh0X2NsaWVudF9pbml0ICAgICAgKFh0Q2xpZW50ICogeHRjbGllbnQsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3VhbCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9ybWFwLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKTsKK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9jcmVhdGUgICAgKFh0Q2xpZW50ICogeHRjbGllbnQs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZXIs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGggKTsKK3N0YXRp
YyB2b2lkICAgICAgIHh0X2NsaWVudF91bnJlYWxpemUgKFh0Q2xpZW50KiB4dGNsaWVudCk7Citz
dGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGllbnQp
Oworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3NldF9pbmZvICAoV2lkZ2V0IHh0cGx1Zywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZs
YWdzKTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9ldmVudF9oYW5kbGVyIChXaWRnZXQg
dywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVy
IGNsaWVudF9kYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9oYW5kbGVfeGVt
YmVkX21lc3NhZ2UgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0
YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9mb2N1c19saXN0ZW5lciAgICAgICAoV2lkZ2V0IHcs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQ
b2ludGVyIHVzZXJfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2FkZF9m
b2N1c19saXN0ZW5lciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEgKTsKK3N0YXRpYyB2
b2lkICAgICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0IHRyZWVyb290LCBY
dFBvaW50ZXIgdXNlcl9kYXRhKTsgCitzdGF0aWMgdm9pZCAgICAgICB4dF9yZW1vdmVfZm9jdXNf
bGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpOworc3RhdGljIHZvaWQgICAg
ICAgc2VuZF94ZW1iZWRfbWVzc2FnZSAoWHRDbGllbnQgKnh0Y2xpZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZXNzYWdlLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGF0YTEsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgdGltZSk7ICAKK3N0YXRpYyBpbnQgICAgICAgIGVycm9yX2hhbmRs
ZXIgICAgICAgKERpc3BsYXkgKmRpc3BsYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWEVycm9yRXZlbnQgKmVycm9yKTsKKy8qIEZvciBlcnJvciB0cmFwIG9mIFhF
bWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgdHJhcF9lcnJvcnModm9pZCk7CitzdGF0aWMgaW50
ICAgICAgICB1bnRyYXBfZXJyb3Iodm9pZCk7CitzdGF0aWMgaW50ICAgICAgICAoKm9sZF9lcnJv
cl9oYW5kbGVyKSAoRGlzcGxheSAqLCBYRXJyb3JFdmVudCAqKTsKK3N0YXRpYyBpbnQgICAgICAg
IHRyYXBwZWRfZXJyb3JfY29kZSA9IDA7CisKK3N0YXRpYyBHdGtXaWRnZXRDbGFzcyAqcGFyZW50
X2NsYXNzID0gTlVMTDsKKworc3RhdGljIERpc3BsYXkgICAgICAgICAqeHRkaXNwbGF5ID0gTlVM
TDsKK3N0YXRpYyBTdHJpbmcgICAgICAgICAgKmZhbGxiYWNrID0gTlVMTDsKK3N0YXRpYyBnYm9v
bGVhbiAgICAgICAgIHh0X2lzX2luaXRpYWxpemVkID0gRkFMU0U7CitzdGF0aWMgZ2ludCAgICAg
ICAgICAgICBudW1fd2lkZ2V0cyA9IDA7CisKK3N0YXRpYyBHUG9sbEZEICAgICAgICAgIHh0X2V2
ZW50X3BvbGxfZmQ7CitzdGF0aWMgZ2ludCAgICAgICAgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lk
ID0gMDsKK3N0YXRpYyBndWludCAgICAgICAgICAgIHRhZyA9IDA7CisKK3N0YXRpYyBnYm9vbGVh
bgoreHRfZXZlbnRfcHJlcGFyZSAoR1NvdXJjZSogIHNvdXJjZV9kYXRhLAorICAgICAgICAgICAg
ICAgICAgIGdpbnQgICAgICp0aW1lb3V0KQoreyAgIAorICBpbnQgbWFzazsKKworICBHREtfVEhS
RUFEU19FTlRFUigpOworICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAgR0RLX1RIUkVB
RFNfTEVBVkUoKTsKKworICByZXR1cm4gKGdib29sZWFuKW1hc2s7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgoreHRfZXZlbnRfY2hlY2sgKEdTb3VyY2UqICBzb3VyY2VfZGF0YSkKK3sKKyAgR0RLX1RI
UkVBRFNfRU5URVIgKCk7CisKKyAgaWYgKHh0X2V2ZW50X3BvbGxfZmQucmV2ZW50cyAmIEdfSU9f
SU4pIHsKKyAgICBpbnQgbWFzazsKKyAgICBtYXNrID0gWFBlbmRpbmcoeHRkaXNwbGF5KTsKKyAg
ICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgICByZXR1cm4gKGdib29sZWFuKW1hc2s7CisgIH0K
KworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKyAgcmV0dXJuIEZBTFNFOworfSAgIAorCitzdGF0
aWMgZ2Jvb2xlYW4KK3h0X2V2ZW50X2Rpc3BhdGNoIChHU291cmNlKiAgc291cmNlX2RhdGEsCisg
ICAgICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jIGNhbGxfYmFjaywKKyAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgIHVzZXJfZGF0YSkKK3sKKyAgWEV2ZW50IGV2ZW50OworICBYdEFwcENv
bnRleHQgYWM7CisgIGludCBpID0gMDsKKworICBhYyA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25D
b250ZXh0KHh0ZGlzcGxheSk7CisKKyAgR0RLX1RIUkVBRFNfRU5URVIgKCk7CisKKyAgLyogUHJv
Y2VzcyBvbmx5IHJlYWwgWCB0cmFmZmljIGhlcmUuICBXZSBvbmx5IGxvb2sgZm9yIGRhdGEgb24g
dGhlCisgICAqIHBpcGUsIGxpbWl0IGl0IHRvIFhUQklOX01BWF9FVkVOVFMgYW5kIG9ubHkgY2Fs
bAorICAgKiBYdEFwcFByb2Nlc3NFdmVudCBzbyB0aGF0IGl0IHdpbGwgbG9vayBmb3IgWCBldmVu
dHMuICBUaGVyZSdzIG5vCisgICAqIHRpbWVyIHByb2Nlc3NpbmcgaGVyZSBzaW5jZSB3ZSBhbHJl
YWR5IGhhdmUgYSB0aW1lciBjYWxsYmFjayB0aGF0CisgICAqIGRvZXMgaXQuICAqLworICBmb3Ig
KGk9MDsgaSA8IFhUQklOX01BWF9FVkVOVFMgJiYgWFBlbmRpbmcoeHRkaXNwbGF5KTsgaSsrKSB7
CisgICAgWHRBcHBQcm9jZXNzRXZlbnQoYWMsIFh0SU1YRXZlbnQpOworICB9CisKKyAgR0RLX1RI
UkVBRFNfTEVBVkUgKCk7CisKKyAgcmV0dXJuIFRSVUU7ICAKK30KKworc3RhdGljIEdTb3VyY2VG
dW5jcyB4dF9ldmVudF9mdW5jcyA9IHsKKyAgeHRfZXZlbnRfcHJlcGFyZSwKKyAgeHRfZXZlbnRf
Y2hlY2ssCisgIHh0X2V2ZW50X2Rpc3BhdGNoLAorICBnX2ZyZWUsCisgIChHU291cmNlRnVuYylO
VUxMLAorICAoR1NvdXJjZUR1bW15TWFyc2hhbClOVUxMCit9OworCitzdGF0aWMgZ2Jvb2xlYW4K
K3h0X2V2ZW50X3BvbGxpbmdfdGltZXJfY2FsbGJhY2soZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
ICBEaXNwbGF5ICogZGlzcGxheTsKKyAgWHRBcHBDb250ZXh0IGFjOworICBpbnQgZXZlbnRzVG9Q
cm9jZXNzID0gMjA7CisKKyAgZGlzcGxheSA9IChEaXNwbGF5ICopdXNlcl9kYXRhOworICBhYyA9
IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KGRpc3BsYXkpOworCisgIC8qIFdlIG5lZWQg
dG8gcHJvY2VzcyBtYW55IFh0IGV2ZW50cyBoZXJlLiBJZiB3ZSBqdXN0IHByb2Nlc3MKKyAgICAg
b25lIGV2ZW50IHdlIG1pZ2h0IHN0YXJ2ZSBvbmUgb3IgbW9yZSBYdCBjb25zdW1lcnMuIE9uIHRo
ZSBvdGhlciBoYW5kCisgICAgIHRoaXMgY291bGQgaGFuZyB0aGUgd2hvbGUgYXBwIGlmIFh0IGV2
ZW50cyBjb21lIHBvdXJpbmcgaW4uIFNvIHByb2Nlc3MKKyAgICAgdXAgdG8gMjAgWHQgZXZlbnRz
IHJpZ2h0IG5vdyBhbmQgc2F2ZSB0aGUgcmVzdCBmb3IgbGF0ZXIuIFRoaXMgaXMgYSBoYWNrLAor
ICAgICBidXQgaXQgb3VnaHRhIHdvcmsuIFdlICpyZWFsbHkqIHNob3VsZCBoYXZlIG91dCBvZiBw
cm9jZXNzIHBsdWdpbnMuCisgICovCisgIHdoaWxlIChldmVudHNUb1Byb2Nlc3MtLSAmJiBYdEFw
cFBlbmRpbmcoYWMpKQorICAgIFh0QXBwUHJvY2Vzc0V2ZW50KGFjLCBYdElNQWxsKTsKKyAgcmV0
dXJuIFRSVUU7Cit9CisKK0d0a1R5cGUKK2d0a194dGJpbl9nZXRfdHlwZSAodm9pZCkKK3sKKyAg
c3RhdGljIEd0a1R5cGUgeHRiaW5fdHlwZSA9IDA7CisKKyAgaWYgKCF4dGJpbl90eXBlKSB7Cisg
ICAgICBzdGF0aWMgY29uc3QgR3RrVHlwZUluZm8geHRiaW5faW5mbyA9CisgICAgICB7CisgICAg
ICAgICJHdGtYdEJpbiIsCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW4pLAorICAgICAgICBzaXpl
b2YgKEd0a1h0QmluQ2xhc3MpLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgZ3RrX3h0Ymlu
X2NsYXNzX2luaXQsCisgICAgICAgIChHdGtPYmplY3RJbml0RnVuYykgZ3RrX3h0YmluX2luaXQs
CisgICAgICAgIC8qIHJlc2VydmVkXzEgKi8gTlVMTCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMiAq
LyBOVUxMLAorICAgICAgICAoR3RrQ2xhc3NJbml0RnVuYykgTlVMTAorICAgICAgfTsKKyAgICAg
IHh0YmluX3R5cGUgPSBndGtfdHlwZV91bmlxdWUgKEdUS19UWVBFX1NPQ0tFVCwgJnh0YmluX2lu
Zm8pOworICAgIH0KKyAgcmV0dXJuIHh0YmluX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitndGtf
eHRiaW5fY2xhc3NfaW5pdCAoR3RrWHRCaW5DbGFzcyAqa2xhc3MpCit7CisgIEd0a1dpZGdldENs
YXNzICp3aWRnZXRfY2xhc3M7CisgIEd0a09iamVjdENsYXNzICpvYmplY3RfY2xhc3M7CisKKyAg
cGFyZW50X2NsYXNzID0gZ3RrX3R5cGVfY2xhc3MgKEdUS19UWVBFX1NPQ0tFVCk7CisKKyAgd2lk
Z2V0X2NsYXNzID0gR1RLX1dJREdFVF9DTEFTUyAoa2xhc3MpOworICB3aWRnZXRfY2xhc3MtPnJl
YWxpemUgPSBndGtfeHRiaW5fcmVhbGl6ZTsKKyAgd2lkZ2V0X2NsYXNzLT51bnJlYWxpemUgPSBn
dGtfeHRiaW5fdW5yZWFsaXplOworCisgIG9iamVjdF9jbGFzcyA9IEdUS19PQkpFQ1RfQ0xBU1Mg
KGtsYXNzKTsKKyAgb2JqZWN0X2NsYXNzLT5kZXN0cm95ID0gZ3RrX3h0YmluX2Rlc3Ryb3k7Cit9
CisKK3N0YXRpYyB2b2lkCitndGtfeHRiaW5faW5pdCAoR3RrWHRCaW4gKnh0YmluKQoreworICB4
dGJpbi0+eHRkaXNwbGF5ID0gTlVMTDsKKyAgeHRiaW4tPnBhcmVudF93aW5kb3cgPSBOVUxMOwor
ICB4dGJpbi0+eHR3aW5kb3cgPSAwOworICB4dGJpbi0+eCA9IDA7CisgIHh0YmluLT55ID0gMDsK
K30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9yZWFsaXplIChHdGtXaWRnZXQgKndpZGdldCkK
K3sKKyAgR3RrWHRCaW4gICAgICp4dGJpbjsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyAwLCAwLCAyMDAsIDIwMCB9OworICBnaW50ICB4LCB5LCB3LCBoLCBkOyAvKiBnZW9tZXRyeSBv
ZiB3aW5kb3cgKi8KKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3RrX3h0YmluX3Jl
YWxpemUoKVxuIik7CisjZW5kaWYKKworICBnX3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4g
KHdpZGdldCkpOworCisgIHh0YmluID0gR1RLX1hUQklOICh3aWRnZXQpOworCisgIC8qIGNhY3Vs
YXRlIHRoZSBhbGxvY2F0aW9uIGJlZm9yZSByZWFsaXplICovCisgIGdka193aW5kb3dfZ2V0X2dl
b21ldHJ5KHh0YmluLT5wYXJlbnRfd2luZG93LCAmeCwgJnksICZ3LCAmaCwgJmQpOworICBhbGxv
Y2F0aW9uLndpZHRoID0gdzsKKyAgYWxsb2NhdGlvbi5oZWlnaHQgPSBoOworICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUgKHdpZGdldCwgJmFsbG9jYXRpb24pOworCisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgcHJpbnRmKCJpbml0aWFsIGFsbG9jYXRpb24gJWQgJWQgJWQgJWRcbiIsIHgsIHksIHcs
IGgpOworI2VuZGlmCisKKyAgeHRiaW4tPndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRo
OworICB4dGJpbi0+aGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKworICAvKiB1
c2UgR3RrU29ja2V0J3MgcmVhbGl6ZSAqLworICAoKkdUS19XSURHRVRfQ0xBU1MocGFyZW50X2Ns
YXNzKS0+cmVhbGl6ZSkod2lkZ2V0KTsKKworICAvKiBjcmVhdGUgdGhlIFh0IGNsaWVudCB3aWRn
ZXQgKi8KKyAgeHRfY2xpZW50X2NyZWF0ZSgmKHh0YmluLT54dGNsaWVudCksIAorICAgICAgIGd0
a19zb2NrZXRfZ2V0X2lkKEdUS19TT0NLRVQoeHRiaW4pKSwgCisgICAgICAgeHRiaW4tPmhlaWdo
dCwgCisgICAgICAgeHRiaW4tPndpZHRoKTsKKyAgeHRiaW4tPnh0d2luZG93ID0gWHRXaW5kb3co
eHRiaW4tPnh0Y2xpZW50LmNoaWxkX3dpZGdldCk7CisKKyAgZ2RrX2ZsdXNoKCk7CisKKyAgLyog
bm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB4dCBjbGllbnQsIGFkZCBpdCB0byB0aGUgc29j
a2V0LiAqLworICBndGtfc29ja2V0X2FkZF9pZChHVEtfU09DS0VUKHdpZGdldCksIHh0YmluLT54
dHdpbmRvdyk7Cit9CisKKworCitHdGtXaWRnZXQqCitndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cg
KnBhcmVudF93aW5kb3csIFN0cmluZyAqIGYpCit7CisgIEd0a1h0QmluICp4dGJpbjsKKyAgZ3Bv
aW50ZXIgdXNlcl9kYXRhOworCisgIGFzc2VydChwYXJlbnRfd2luZG93ICE9IE5VTEwpOworICB4
dGJpbiA9IGd0a190eXBlX25ldyAoR1RLX1RZUEVfWFRCSU4pOworCisgIGlmICgheHRiaW4pCisg
ICAgcmV0dXJuIChHdGtXaWRnZXQqKU5VTEw7CisKKyAgaWYgKGYpCisgICAgZmFsbGJhY2sgPSBm
OworCisgIC8qIEluaXRpYWxpemUgdGhlIFh0IHRvb2xraXQgKi8KKyAgeHRiaW4tPnBhcmVudF93
aW5kb3cgPSBwYXJlbnRfd2luZG93OworCisgIHh0X2NsaWVudF9pbml0KCYoeHRiaW4tPnh0Y2xp
ZW50KSwgCisgICAgICBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX3JnYl9nZXRfdmlzdWFsKCkpLAor
ICAgICAgR0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfcmdiX2dldF9jb2xvcm1hcCgpKSwKKyAg
ICAgIGdka19yZ2JfZ2V0X3Zpc3VhbCgpLT5kZXB0aCk7CisKKyAgaWYgKCF4dGJpbi0+eHRjbGll
bnQueHRkaXNwbGF5KSB7CisgICAgLyogSWYgWHRPcGVuRGlzcGxheSBmYWlsZWQsIHdlIGNhbid0
IGdvIGFueSBmdXJ0aGVyLgorICAgICAqICBCYWlsIG91dC4KKyAgICAgKi8KKyNpZmRlZiBERUJV
R19YVEJJTgorICAgIHByaW50ZigiZ3RrX3h0YmluX2luaXQ6IFh0T3BlbkRpc3BsYXkoKSByZXR1
cm5lZCBOVUxMLlxuIik7CisjZW5kaWYKKyAgICBnX2ZyZWUgKHh0YmluKTsKKyAgICByZXR1cm4g
KEd0a1dpZGdldCAqKU5VTEw7CisgIH0KKworICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBydW5u
aW5nIHdpZGdldCwgaG9vayB0aGlzIGRpc3BsYXkgaW50byB0aGUKKyAgICAgbWFpbmxvb3AgKi8K
KyAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyAgICBpbnQgICAgICAgICAgIGNudW1iZXI7Cisg
ICAgLyoKKyAgICAgKiBob29rIFh0IGV2ZW50IGxvb3AgaW50byB0aGUgZ2xpYiBldmVudCBsb29w
LgorICAgICAqLworCisgICAgLyogdGhlIGFzc3VtcHRpb24gaXMgdGhhdCBndGtfaW5pdCBoYXMg
YWxyZWFkeSBiZWVuIGNhbGxlZCAqLworICAgIEdTb3VyY2UqIGdzID0gZ19zb3VyY2VfbmV3KCZ4
dF9ldmVudF9mdW5jcywgc2l6ZW9mKEdTb3VyY2UpKTsKKyAgICAgIGlmICghZ3MpIHsKKyAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHko
Z3MsIEdES19QUklPUklUWV9FVkVOVFMpOworICAgIGdfc291cmNlX3NldF9jYW5fcmVjdXJzZShn
cywgVFJVRSk7CisgICAgdGFnID0gZ19zb3VyY2VfYXR0YWNoKGdzLCAoR01haW5Db250ZXh0KilO
VUxMKTsKKyNpZmRlZiBWTVMKKyAgICBjbnVtYmVyID0gWENvbm5lY3Rpb25OdW1iZXIoeHRkaXNw
bGF5KTsKKyNlbHNlCisgICAgY251bWJlciA9IENvbm5lY3Rpb25OdW1iZXIoeHRkaXNwbGF5KTsK
KyNlbmRpZgorICAgIHh0X2V2ZW50X3BvbGxfZmQuZmQgPSBjbnVtYmVyOworICAgIHh0X2V2ZW50
X3BvbGxfZmQuZXZlbnRzID0gR19JT19JTjsgCisgICAgeHRfZXZlbnRfcG9sbF9mZC5yZXZlbnRz
ID0gMDsgICAgLyogaG1tLi4uIGlzIHRoaXMgY29ycmVjdD8gKi8KKworICAgIGdfbWFpbl9jb250
ZXh0X2FkZF9wb2xsICgoR01haW5Db250ZXh0KilOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnh0X2V2ZW50X3BvbGxfZmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHX1BSSU9SSVRZX0xPVyk7CisgICAgLyogYWRkIGEgdGltZXIgc28gdGhhdCB3ZSBjYW4gcG9s
bCBhbmQgcHJvY2VzcyBYdCB0aW1lcnMgKi8KKyAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0KKyAg
ICAgIGd0a190aW1lb3V0X2FkZCgyNSwKKyAgICAgICAgICAgICAgICAgICAgICAoR3RrRnVuY3Rp
b24peHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAg
ICB4dGRpc3BsYXkpOworICB9CisKKyAgLyogQnVtcCB1cCBvdXIgdXNhZ2UgY291bnQgKi8KKyAg
bnVtX3dpZGdldHMrKzsKKworICAvKiBCdWlsZCB0aGUgaGllcmFjaHkgKi8KKyAgeHRiaW4tPnh0
ZGlzcGxheSA9IHh0YmluLT54dGNsaWVudC54dGRpc3BsYXk7CisgIGd0a193aWRnZXRfc2V0X3Bh
cmVudF93aW5kb3coR1RLX1dJREdFVCh4dGJpbiksIHBhcmVudF93aW5kb3cpOworICBnZGtfd2lu
ZG93X2dldF91c2VyX2RhdGEoeHRiaW4tPnBhcmVudF93aW5kb3csICZ1c2VyX2RhdGEpOworICBp
ZiAodXNlcl9kYXRhKQorICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIodXNlcl9k
YXRhKSwgR1RLX1dJREdFVCh4dGJpbikpOworCisgIHJldHVybiBHVEtfV0lER0VUICh4dGJpbik7
Cit9CisKK3ZvaWQKK2d0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0a1h0QmluICp4dGJpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdpbnQgICAgICAgeSkKK3sKKyAgeHRiaW4tPnggPSB4OworICB4dGJpbi0+eSA9IHk7CisK
KyAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQgKHh0YmluKSkKKyAgICBnZGtfd2luZG93X21vdmUg
KEdUS19XSURHRVQgKHh0YmluKS0+d2luZG93LCB4LCB5KTsKK30KKwordm9pZAorZ3RrX3h0Ymlu
X3Jlc2l6ZSAoR3RrV2lkZ2V0ICp3aWRnZXQsCisgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpCit7CisgIEFyZyBh
cmdzWzJdOworICBHdGtYdEJpbiAqeHRiaW4gPSBHVEtfWFRCSU4gKHdpZGdldCk7CisgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbjsKKworI2lmZGVmIERFQlVHX1hUQklOCisgIHByaW50ZigiZ3Rr
X3h0YmluX3Jlc2l6ZSAlcCAlZCAlZFxuIiwgKHZvaWQgKil3aWRnZXQsIHdpZHRoLCBoZWlnaHQp
OworI2VuZGlmCisKKyAgeHRiaW4tPmhlaWdodCA9IGhlaWdodDsKKyAgeHRiaW4tPndpZHRoICA9
IHdpZHRoOworCisgIC8vIEF2b2lkIEJhZFZhbHVlIGVycm9ycyBpbiBYdFNldFZhbHVlcworICBp
ZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0wKSB7CisgICAgaGVpZ2h0ID0gMTsKKyAgICB3aWR0
aCA9IDE7CisgIH0KKyAgWHRTZXRBcmcoYXJnc1swXSwgWHROaGVpZ2h0LCBoZWlnaHQpOworICBY
dFNldEFyZyhhcmdzWzFdLCBYdE53aWR0aCwgIHdpZHRoKTsKKyAgWHRTZXRWYWx1ZXMoeHRiaW4t
Pnh0Y2xpZW50LnRvcF93aWRnZXQsIGFyZ3MsIDIpOworCisgIC8qIHdlIG5lZWQgdG8gc2VuZCBh
IHNpemUgYWxsb2NhdGUgc28gdGhlIHNvY2tldCBrbm93cyBhYm91dCB0aGUKKyAgICAgc2l6ZSBj
aGFuZ2VzICovCisgIGFsbG9jYXRpb24ueCA9IHh0YmluLT54OworICBhbGxvY2F0aW9uLnkgPSB4
dGJpbi0+eTsKKyAgYWxsb2NhdGlvbi53aWR0aCA9IHh0YmluLT53aWR0aDsKKyAgYWxsb2NhdGlv
bi5oZWlnaHQgPSB4dGJpbi0+aGVpZ2h0OworCisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSh3
aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl91bnJlYWxp
emUgKEd0a1dpZGdldCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRiaW47CisgIEd0a1dpZGdl
dCAqd2lkZ2V0OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fdW5y
ZWFsaXplKClcbiIpOworI2VuZGlmCisKKyAgLyogZ3RrX29iamVjdF9kZXN0cm95KCkgd2lsbCBh
bHJlYWR5IGhvbGQgYSByZWZjb3VudCBvbiBvYmplY3QKKyAgICovCisgIHh0YmluID0gR1RLX1hU
QklOKG9iamVjdCk7CisgIHdpZGdldCA9IEdUS19XSURHRVQob2JqZWN0KTsKKworICBHVEtfV0lE
R0VUX1VOU0VUX0ZMQUdTICh3aWRnZXQsIEdUS19WSVNJQkxFKTsKKyAgaWYgKEdUS19XSURHRVRf
UkVBTElaRUQgKHdpZGdldCkpIHsKKyAgICB4dF9jbGllbnRfdW5yZWFsaXplKCYoeHRiaW4tPnh0
Y2xpZW50KSk7CisgIH0KKworICAoKkdUS19XSURHRVRfQ0xBU1MgKHBhcmVudF9jbGFzcyktPnVu
cmVhbGl6ZSkod2lkZ2V0KTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9kZXN0cm95IChH
dGtPYmplY3QgKm9iamVjdCkKK3sKKyAgR3RrWHRCaW4gKnh0YmluOworCisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fZGVzdHJveSgpXG4iKTsKKyNlbmRpZgorCisgIGdf
cmV0dXJuX2lmX2ZhaWwgKG9iamVjdCAhPSBOVUxMKTsKKyAgZ19yZXR1cm5faWZfZmFpbCAoR1RL
X0lTX1hUQklOIChvYmplY3QpKTsKKworICB4dGJpbiA9IEdUS19YVEJJTiAob2JqZWN0KTsKKwor
ICBpZih4dGJpbi0+eHR3aW5kb3cpIHsKKyAgICAvKiByZW1vdmUgdGhlIGV2ZW50IGhhbmRsZXIg
Ki8KKyAgICB4dF9jbGllbnRfZGVzdHJveSgmKHh0YmluLT54dGNsaWVudCkpOworICAgIHh0Ymlu
LT54dHdpbmRvdyA9IDA7CisKKyAgICBudW1fd2lkZ2V0cy0tOyAvKiByZWR1Y2Ugb3VyIHVzYWdl
IGNvdW50ICovCisKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJ1bm5pbmcgd2lkZ2V0LCBy
ZW1vdmUgdGhlIFh0IGRpc3BsYXkKKyAgICAgICBjb25uZWN0aW9uIGZyb20gdGhlIG1haW5sb29w
ICovCisgICAgaWYgKDAgPT0gbnVtX3dpZGdldHMpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAg
ICAgcHJpbnRmKCJyZW1vdmluZyB0aGUgWHQgY29ubmVjdGlvbiBmcm9tIHRoZSBtYWluIGxvb3Bc
biIpOworI2VuZGlmCisgICAgICBnX21haW5fY29udGV4dF9yZW1vdmVfcG9sbCgoR01haW5Db250
ZXh0KilOVUxMLCAmeHRfZXZlbnRfcG9sbF9mZCk7CisgICAgICBnX3NvdXJjZV9yZW1vdmUodGFn
KTsKKworICAgICAgZ3RrX3RpbWVvdXRfcmVtb3ZlKHh0X3BvbGxpbmdfdGltZXJfaWQpOworICAg
ICAgeHRfcG9sbGluZ190aW1lcl9pZCA9IDA7CisgICAgfQorICB9CisKKyAgR1RLX09CSkVDVF9D
TEFTUyhwYXJlbnRfY2xhc3MpLT5kZXN0cm95KG9iamVjdCk7Cit9CisKKy8qCisqIEZvbGxvd2lu
ZyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgWHQgWEVtYmVkZGVkIGZvciBjbGllbnQgc2lkZQor
Ki8KKworLyogSW5pdGlhbCBYdCBwbHVnaW4gKi8KK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaW5p
dCggWHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgVmlzdWFsICp4dHZpc3Vh
bCwgCisgICAgICAgICAgICAgICAgQ29sb3JtYXAgeHRjb2xvcm1hcCwKKyAgICAgICAgICAgICAg
ICBpbnQgeHRkZXB0aCkKK3sKKyAgWHRBcHBDb250ZXh0ICBhcHBfY29udGV4dDsKKyAgY2hhciAg
ICAgICAgICptQXJndlsxXTsKKyAgaW50ICAgICAgICAgICBtQXJnYyA9IDA7CisKKyAgLyoKKyAg
ICogSW5pdGlhbGl6ZSBYdCBzdHVmZgorICAgKi8KKyAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBO
VUxMOworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0ZGlz
cGxheSAgPSBOVUxMOworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IE5VTEw7CisgIHh0Y2xpZW50
LT54dGNvbG9ybWFwID0gMDsKKyAgeHRjbGllbnQtPnh0ZGVwdGggPSAwOworCisgIGlmICgheHRf
aXNfaW5pdGlhbGl6ZWQpIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50Zigic3RhcnRp
bmcgdXAgWHQgc3R1ZmZcbiIpOworI2VuZGlmCisgICAgWHRUb29sa2l0SW5pdGlhbGl6ZSgpOwor
ICAgIGFwcF9jb250ZXh0ID0gWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAo
ZmFsbGJhY2spCisgICAgICBYdEFwcFNldEZhbGxiYWNrUmVzb3VyY2VzKGFwcF9jb250ZXh0LCBm
YWxsYmFjayk7CisKKyAgICB4dGRpc3BsYXkgPSBYdE9wZW5EaXNwbGF5KGFwcF9jb250ZXh0LCBn
ZGtfZ2V0X2Rpc3BsYXkoKSwgTlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldy
YXBwZXIiLCBOVUxMLCAwLCAmbUFyZ2MsIG1Bcmd2KTsKKyAgICBpZiAoeHRkaXNwbGF5KQorICAg
ICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBUUlVFOworICB9CisgIHh0Y2xpZW50LT54dGRpc3BsYXkg
ID0geHRkaXNwbGF5OworICB4dGNsaWVudC0+eHR2aXN1YWwgICA9IHh0dmlzdWFsOworICB4dGNs
aWVudC0+eHRjb2xvcm1hcCA9IHh0Y29sb3JtYXA7CisgIHh0Y2xpZW50LT54dGRlcHRoICAgID0g
eHRkZXB0aDsKK30KKworLyogQ3JlYXRlIHRoZSBYdCBjbGllbnQgd2lkZ2V0cworKiAgKi8KK3N0
YXRpYyB2b2lkCit4dF9jbGllbnRfY3JlYXRlICggWHRDbGllbnQqIHh0Y2xpZW50ICwgCisgICAg
ICAgICAgICAgICAgICAgV2luZG93IGVtYmVkZGVyaWQsIAorICAgICAgICAgICAgICAgICAgIGlu
dCBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCApIAoreworICBpbnQgICAg
ICAgICAgIG47CisgIEFyZyAgICAgICAgICAgYXJnc1s2XTsKKyAgV2lkZ2V0ICAgICAgICBjaGls
ZF93aWRnZXQ7CisgIFdpZGdldCAgICAgICAgdG9wX3dpZGdldDsKKworI2lmZGVmIERFQlVHX1hU
QklOCisgIHByaW50ZigieHRfY2xpZW50X2NyZWF0ZSgpIFxuIik7CisjZW5kaWYKKyAgdG9wX3dp
ZGdldCA9IFh0QXBwQ3JlYXRlU2hlbGwoImRyYXdpbmdBcmVhIiwgIldyYXBwZXIiLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHRjbGllbnQtPnh0ZGlzcGxheSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICB4dGNsaWVudC0+dG9w
X3dpZGdldCA9IHRvcF93aWRnZXQ7CisKKyAgLyogc2V0IHNpemUgb2YgWHQgd2luZG93ICovCisg
IG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAgaGVpZ2h0KTtuKys7Cisg
IFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisrOworICBYdFNldFZhbHVl
cyh0b3Bfd2lkZ2V0LCBhcmdzLCBuKTsKKworICBjaGlsZF93aWRnZXQgPSBYdFZhQ3JlYXRlV2lk
Z2V0KCJmb3JtIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRl
V2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF93aWRn
ZXQsIE5VTEwpOworCisgIG4gPSAwOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5oZWlnaHQsICAg
aGVpZ2h0KTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TndpZHRoLCAgICB3aWR0aCk7bisr
OworICBYdFNldEFyZyhhcmdzW25dLCBYdE52aXN1YWwsICAgeHRjbGllbnQtPnh0dmlzdWFsICk7
IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROZGVwdGgsICAgIHh0Y2xpZW50LT54dGRlcHRo
ICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROY29sb3JtYXAsIHh0Y2xpZW50LT54dGNv
bG9ybWFwICk7IG4rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROYm9yZGVyV2lkdGgsIDApOyBu
Kys7CisgIFh0U2V0VmFsdWVzKGNoaWxkX3dpZGdldCwgYXJncywgbik7CisKKyAgWFN5bmMoeHRj
bGllbnQtPnh0ZGlzcGxheSwgRkFMU0UpOworICB4dGNsaWVudC0+b2xkd2luZG93ID0gdG9wX3dp
ZGdldC0+Y29yZS53aW5kb3c7CisgIHRvcF93aWRnZXQtPmNvcmUud2luZG93ID0gZW1iZWRkZXJp
ZDsKKworICAvKiB0aGlzIGxpdHRsZSB0cmljayBzZWVtcyB0byBmaW5pc2ggaW5pdGlhbGl6aW5n
IHRoZSB3aWRnZXQgKi8KKyNpZiBYbGliU3BlY2lmaWNhdGlvblJlbGVhc2UgPj0gNgorICBYdFJl
Z2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwgCisgICAgICAgICAgICAgICAgICAg
ICBlbWJlZGRlcmlkLAorICAgICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZWxzZQor
ICBfWHRSZWdpc3RlcldpbmRvdyggZW1iZWRkZXJpZCwKKyAgICAgICAgICAgICAgICAgICAgIHRv
cF93aWRnZXQpOworI2VuZGlmCisgIFh0UmVhbGl6ZVdpZGdldChjaGlsZF93aWRnZXQpOworCisg
IC8qIGxpc3RlbiB0byBhbGwgWHQgZXZlbnRzICovCisgIFhTZWxlY3RJbnB1dCh4dGNsaWVudC0+
eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgIFh0V2luZG93KHRvcF93aWRnZXQpLCAKKyAgICAg
ICAgICAgICAgIDB4MEZGRkZGKTsKKyAgeHRfY2xpZW50X3NldF9pbmZvIChjaGlsZF93aWRnZXQs
IDApOworCisgIFh0TWFuYWdlQ2hpbGQoY2hpbGRfd2lkZ2V0KTsKKyAgeHRjbGllbnQtPmNoaWxk
X3dpZGdldCA9IGNoaWxkX3dpZGdldDsKKworICAvKiBzZXQgdGhlIGV2ZW50IGhhbmRsZXIgKi8K
KyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAw
eDBGRkZGRiAmIH5SZXNpemVSZWRpcmVjdE1hc2ssCisgICAgICAgICAgICAgICAgICAgIFRSVUUs
IAorICAgICAgICAgICAgICAgICAgICAoWHRFdmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hh
bmRsZXIsIHh0Y2xpZW50KTsKKyAgWHRBZGRFdmVudEhhbmRsZXIoY2hpbGRfd2lkZ2V0LCAKKyAg
ICAgICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VN
YXNrLCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChY
dEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAg
ICAgICB4dGNsaWVudCk7CisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZBTFNFKTsKK30K
Kworc3RhdGljIHZvaWQKK3h0X2NsaWVudF91bnJlYWxpemUgKCBYdENsaWVudCogeHRjbGllbnQg
KQoreworI2lmIFhsaWJTcGVjaWZpY2F0aW9uUmVsZWFzZSA+PSA2CisgIFh0VW5yZWdpc3RlckRy
YXdhYmxlKHh0Y2xpZW50LT54dGRpc3BsYXksCisgICAgICAgICAgICAgICAgICAgICAgIHh0Y2xp
ZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdyk7CisjZWxzZQorICBfWHRVbnJlZ2lzdGVyV2lu
ZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdywKKyAgICAgICAgICAgICAgICAg
ICAgICB4dGNsaWVudC0+dG9wX3dpZGdldCk7CisjZW5kaWYKKworICAvKiBmbHVzaCB0aGUgcXVl
dWUgYmVmb3JlIHdlIHJldHVybmluZyBvcmlnaW4gdG9wX3dpZGdldC0+Y29yZS53aW5kb3cKKyAg
ICAgb3Igd2UgY2FuIGdldCBYIGVycm9yIHNpbmNlIHRoZSB3aW5kb3cgaXMgZ29uZSAqLworICBY
U3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGYWxzZSk7CisKKyAgeHRjbGllbnQtPnRvcF93aWRn
ZXQtPmNvcmUud2luZG93ID0geHRjbGllbnQtPm9sZHdpbmRvdzsKKyAgWHRVbnJlYWxpemVXaWRn
ZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgICAgIAor
eHRfY2xpZW50X2Rlc3Ryb3kgICAoWHRDbGllbnQqIHh0Y2xpZW50KQoreworICBpZih4dGNsaWVu
dC0+dG9wX3dpZGdldCkgeworICAgIFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHh0Y2xpZW50LT5jaGls
ZF93aWRnZXQsIDB4MEZGRkZGLCBUUlVFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWHRF
dmVudEhhbmRsZXIpeHRfY2xpZW50X2V2ZW50X2hhbmRsZXIsIHh0Y2xpZW50KTsKKyAgICBYdERl
c3Ryb3lXaWRnZXQoeHRjbGllbnQtPnRvcF93aWRnZXQpOworICAgIHh0Y2xpZW50LT50b3Bfd2lk
Z2V0ID0gTlVMTDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X3Nl
dF9pbmZvIChXaWRnZXQgeHRwbHVnLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICB1bnNpZ25l
ZCBsb25nIGJ1ZmZlclsyXTsKKworICBBdG9tIGluZm9BdG9tID0gWEludGVybkF0b20oWHREaXNw
bGF5KHh0cGx1ZyksICJfWEVNQkVEX0lORk8iLCBGYWxzZSk7IAorCisgIGJ1ZmZlclsxXSA9IDA7
ICAgICAgICAgICAgICAgIC8qIFByb3RvY29sIHZlcnNpb24gKi8KKyAgYnVmZmVyWzFdID0gZmxh
Z3M7CisKKyAgWENoYW5nZVByb3BlcnR5IChYdERpc3BsYXkoeHRwbHVnKSwgWHRXaW5kb3coeHRw
bHVnKSwKKyAgICAgICAgICAgICAgICAgICBpbmZvQXRvbSwgaW5mb0F0b20sIDMyLAorICAgICAg
ICAgICAgICAgICAgIFByb3BNb2RlUmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgY2hhciAqKWJ1ZmZlciwgMik7Cit9CisKK3N0YXRpYyB2b2lkCit4dF9jbGllbnRfaGFuZGxl
X3hlbWJlZF9tZXNzYWdlKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFhFdmVudCAq
ZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNsaWVudF9kYXRhOwor
ICBzd2l0Y2ggKGV2ZW50LT54Y2xpZW50LmRhdGEubFsxXSkKKyAgeworICBjYXNlIFhFTUJFRF9F
TUJFRERFRF9OT1RJRlk6CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19BQ1RJVkFU
RToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xpZW50IGdldCBYRU1CRURf
V0lORE9XX0FDVElWQVRFXG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9X
SU5ET1dfREVBQ1RJVkFURToKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiWHQgY2xp
ZW50IGdldCBYRU1CRURfV0lORE9XX0RFQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJlYWs7
CisgIGNhc2UgWEVNQkVEX01PREFMSVRZX09OOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJp
bnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PTlxuIik7CisjZW5kaWYKKyAgICBi
cmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT0ZGOgorI2lmZGVmIERFQlVHX1hUQklOCisg
ICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9NT0RBTElUWV9PRkZcbiIpOworI2VuZGlm
CisgICAgYnJlYWs7CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX0lOOgorICBjYXNlIFhFTUJFRF9GT0NV
U19PVVQ6CisgICAgeworICAgICAgWEV2ZW50IHhldmVudDsKKyAgICAgIG1lbXNldCgmeGV2ZW50
LCAwLCBzaXplb2YoeGV2ZW50KSk7CisKKyAgICAgIGlmKGV2ZW50LT54Y2xpZW50LmRhdGEubFsx
XSA9PSBYRU1CRURfRk9DVVNfSU4pIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmlu
dGYoIlhURU1CRUQgZ290IGZvY3VzIGluXG4iKTsKKyNlbmRpZgorICAgICAgICB4ZXZlbnQueGZv
Y3VzLnR5cGUgPSBGb2N1c0luOworICAgICAgfQorICAgICAgZWxzZSB7CisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgICAgICAgcHJpbnRmKCJYVEVNQkVEIGdvdCBmb2N1cyBvdXRcbiIpOworI2VuZGlm
CisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzT3V0OworICAgICAgfQorCisgICAg
ICB4ZXZlbnQueGZvY3VzLndpbmRvdyA9IFh0V2luZG93KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsK
KyAgICAgIHhldmVudC54Zm9jdXMuZGlzcGxheSA9IFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dp
ZGdldCk7CisgICAgICBYU2VuZEV2ZW50KFh0RGlzcGxheSh4dHBsdWctPmNoaWxkX3dpZGdldCks
IAorICAgICAgICAgICAgICAgICB4ZXZlbnQueGZvY3VzLndpbmRvdywKKyAgICAgICAgICAgICAg
ICAgRmFsc2UsIE5vRXZlbnRNYXNrLAorICAgICAgICAgICAgICAgICAmeGV2ZW50ICk7CisgICAg
ICBYU3luYyggWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgRmFsc2UpOworICAgIH0K
KyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgfSAvKiBFbmQgb2YgWEVtYmVk
IE1lc3NhZ2UgKi8KK30KKworc3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9ldmVudF9o
YW5kbGVyKCBXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYRXZlbnQgKmV2ZW50KQor
eworICBYdENsaWVudCAqeHRwbHVnID0gKFh0Q2xpZW50KiljbGllbnRfZGF0YTsKKyAgCisgIHN3
aXRjaChldmVudC0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBDbGllbnRNZXNzYWdlOgorICAgICAg
LyogSGFuZGxlIHhlbWJlZCBtZXNzYWdlICovCisgICAgICBpZiAoZXZlbnQtPnhjbGllbnQubWVz
c2FnZV90eXBlPT0KKyAgICAgICAgICAgICAgICAgWEludGVybkF0b20gKFh0RGlzcGxheSh4dHBs
dWctPmNoaWxkX3dpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1hFTUJF
RCIsIEZhbHNlKSkgeworICAgICAgICB4dF9jbGllbnRfaGFuZGxlX3hlbWJlZF9tZXNzYWdlKHcs
IGNsaWVudF9kYXRhLCBldmVudCk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIFJl
cGFyZW50Tm90aWZ5OgorICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBwaW5nTm90aWZ5OgorICAg
ICAgeHRfY2xpZW50X3NldF9pbmZvICh3LCBYRU1CRURfTUFQUEVEKTsKKyAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVW5tYXBOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIDApOwor
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGb2N1c0luOgorICAgICAgc2VuZF94ZW1iZWRfbWVzc2Fn
ZSAoIHh0cGx1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU1CRURfUkVRVUVTVF9G
T0NVUywgMCwgMCwgMCwgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzT3V0OgorICAg
ICAgYnJlYWs7CisgICAgY2FzZSBLZXlQcmVzczoKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAg
cHJpbnRmKCJLZXkgUHJlc3MgR290IVxuIik7CisjZW5kaWYKKyAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUp
ICovCit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAgKnh0
Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICBsb25nICAgICAgZGV0YWlsLCAKKyAgICAgICAgICAgICAgICAgICAgIGxv
bmcgICAgICBkYXRhMSwgIAorICAgICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGEyLCAg
CisgICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgdGltZSkgICAKK3sKKyAgWEV2ZW50IHhl
dmVudDsgCisgIFdpbmRvdyB3PVh0V2luZG93KHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyAgRGlz
cGxheSogZHB5PXh0Y2xpZW50LT54dGRpc3BsYXk7CisgIGludCBlcnJvcmNvZGU7CisKKyAgbWVt
c2V0KCZ4ZXZlbnQsMCxzaXplb2YoeGV2ZW50KSk7CisgIHhldmVudC54Y2xpZW50LndpbmRvdyA9
IHc7CisgIHhldmVudC54Y2xpZW50LnR5cGUgPSBDbGllbnRNZXNzYWdlOworICB4ZXZlbnQueGNs
aWVudC5tZXNzYWdlX3R5cGUgPSBYSW50ZXJuQXRvbShkcHksIl9YRU1CRUQiLEZhbHNlKTsKKyAg
eGV2ZW50LnhjbGllbnQuZm9ybWF0ID0gMzI7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFswXSA9
IHRpbWU7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbMV0gPSBtZXNzYWdlOworICB4ZXZlbnQu
eGNsaWVudC5kYXRhLmxbMl0gPSBkZXRhaWw7IAorICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbM10g
PSBkYXRhMTsKKyAgeGV2ZW50LnhjbGllbnQuZGF0YS5sWzRdID0gZGF0YTI7CisKKyAgdHJhcF9l
cnJvcnMgKCk7CisgIFhTZW5kRXZlbnQgKGRweSwgdywgRmFsc2UsIE5vRXZlbnRNYXNrLCAmeGV2
ZW50KTsKKyAgWFN5bmMgKGRweSxGYWxzZSk7CisKKyAgaWYoKGVycm9yY29kZSA9IHVudHJhcF9l
cnJvcigpKSkgeworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJzZW5kX3hlbWJlZF9t
ZXNzYWdlIGVycm9yKCVkKSEhIVxuIixlcnJvcmNvZGUpOworI2VuZGlmCisgIH0KK30KKworc3Rh
dGljIGludCAgICAgICAgICAgICAKK2Vycm9yX2hhbmRsZXIoRGlzcGxheSAqZGlzcGxheSwgWEVy
cm9yRXZlbnQgKmVycm9yKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPSBlcnJvci0+ZXJyb3Jf
Y29kZTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICAgICAgICAgIAordHJhcF9lcnJv
cnModm9pZCkKK3sKKyAgdHJhcHBlZF9lcnJvcl9jb2RlID0wOworICBvbGRfZXJyb3JfaGFuZGxl
ciA9IFhTZXRFcnJvckhhbmRsZXIoZXJyb3JfaGFuZGxlcik7Cit9CisKK3N0YXRpYyBpbnQgICAg
ICAgICAKK3VudHJhcF9lcnJvcih2b2lkKQoreworICBYU2V0RXJyb3JIYW5kbGVyKG9sZF9lcnJv
cl9oYW5kbGVyKTsKKyAgaWYodHJhcHBlZF9lcnJvcl9jb2RlKSB7CisjaWZkZWYgREVCVUdfWFRC
SU4KKyAgICBwcmludGYoIkdldCBYIFdpbmRvdyBFcnJvciA9ICVkXG4iLCB0cmFwcGVkX2Vycm9y
X2NvZGUpOworI2VuZGlmCisgIH0KKyAgcmV0dXJuIHRyYXBwZWRfZXJyb3JfY29kZTsKK30KKwor
c3RhdGljIHZvaWQgICAgICAgICAKK3h0X2NsaWVudF9mb2N1c19saXN0ZW5lciggV2lkZ2V0IHcs
IFh0UG9pbnRlciB1c2VyX2RhdGEsIFhFdmVudCAqZXZlbnQpCit7CisgIERpc3BsYXkgKmRweSA9
IFh0RGlzcGxheSh3KTsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBXaW5k
b3cgd2luID0gWHRXaW5kb3codyk7CisKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAg
ICBjYXNlIENyZWF0ZU5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54Y3JlYXRld2luZG93LnBhcmVu
dCA9PSB3aW4pIHsKKyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoIGRweSwg
ZXZlbnQtPnhjcmVhdGV3aW5kb3cud2luZG93KTsKKyAgICAgICAgaWYgKGNoaWxkKQorICAgICAg
ICAgIHh0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlKGNoaWxkLCB1c2VyX2RhdGEpOworICAgICAg
fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBEZXN0cm95Tm90aWZ5OgorICAgICAgeHRfcmVtb3Zl
X2ZvY3VzX2xpc3RlbmVyKCB3LCB1c2VyX2RhdGEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBS
ZXBhcmVudE5vdGlmeToKKyAgICAgIGlmKGV2ZW50LT54cmVwYXJlbnQucGFyZW50ID09IHdpbikg
eworICAgICAgICAvKiBJIGFtIHRoZSBuZXcgcGFyZW50ICovCisgICAgICAgIFdpZGdldCBjaGls
ZD1YdFdpbmRvd1RvV2lkZ2V0KGRweSwgZXZlbnQtPnhyZXBhcmVudC53aW5kb3cpOworICAgICAg
ICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoIGNoaWxk
LCB1c2VyX2RhdGEpOworICAgICAgfQorICAgICAgZWxzZSBpZihldmVudC0+eHJlcGFyZW50Lndp
bmRvdyA9PSB3aW4pIHsKKyAgICAgICAgLyogSSBhbSB0aGUgbmV3IGNoaWxkICovCisgICAgICB9
CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogSSBhbSB0aGUgb2xkIHBhcmVudCAqLworICAgICAg
fQorICAgICAgYnJlYWs7CisgICAgY2FzZSBCdXR0b25SZWxlYXNlOgorI2lmIDAKKyAgICAgIFhT
ZXRJbnB1dEZvY3VzKGRweSwgWHRXaW5kb3coeHRjbGllbnQtPmNoaWxkX3dpZGdldCksIFJldmVy
dFRvUGFyZW50LCBldmVudC0+eGJ1dHRvbi50aW1lKTsKKyNlbmRpZgorICAgICAgc2VuZF94ZW1i
ZWRfbWVzc2FnZSAoIHh0Y2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTUJF
RF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICBicmVhazsKKyAgICB9IC8qIEVuZCBvZiBzd2l0Y2goZXZlbnQtPnR5cGUpICovCit9
CisKK3N0YXRpYyB2b2lkCit4dF9hZGRfZm9jdXNfbGlzdGVuZXIoIFdpZGdldCB3LCBYdFBvaW50
ZXIgdXNlcl9kYXRhKQoreworICBYV2luZG93QXR0cmlidXRlcyBhdHRyOworICBsb25nIGV2ZW50
bWFzazsKKyAgWHRDbGllbnQgKnh0Y2xpZW50ID0gdXNlcl9kYXRhOworICBpbnQgZXJyb3Jjb2Rl
OworCisgIHRyYXBfZXJyb3JzICgpOworICBYR2V0V2luZG93QXR0cmlidXRlcyhYdERpc3BsYXko
dyksIFh0V2luZG93KHcpLCAmYXR0cik7CisgIGV2ZW50bWFzayA9IGF0dHIueW91cl9ldmVudF9t
YXNrIHwgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNrOworICBYU2Vs
ZWN0SW5wdXQoWHREaXNwbGF5KHcpLAorICAgICAgICAgICAgICAgWHRXaW5kb3codyksIAorICAg
ICAgICAgICAgICAgZXZlbnRtYXNrKTsKKworICBYdEFkZEV2ZW50SGFuZGxlcih3LCAKKyAgICAg
ICAgICAgICAgICAgICAgU3Vic3RydWN0dXJlTm90aWZ5TWFzayB8IEJ1dHRvblJlbGVhc2VNYXNr
LCAKKyAgICAgICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2
ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlzdGVuZXIsIAorICAgICAgICAgICAgICAgICAg
ICB4dGNsaWVudCk7CisgIHVudHJhcF9lcnJvcigpOworfQorCitzdGF0aWMgdm9pZAoreHRfcmVt
b3ZlX2ZvY3VzX2xpc3RlbmVyKFdpZGdldCB3LCBYdFBvaW50ZXIgdXNlcl9kYXRhKQoreworICBp
bnQgZXJyb3Jjb2RlOworCisgIHRyYXBfZXJyb3JzICgpOworICBYdFJlbW92ZUV2ZW50SGFuZGxl
cih3LCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIFRSVUUsIAor
ICAgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZm9jdXNfbGlz
dGVuZXIsIHVzZXJfZGF0YSk7CisKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisKK3N0YXRpYyB2b2lk
Cit4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSAoIFdpZGdldCB0cmVlcm9vdCwgWHRQb2ludGVy
IHVzZXJfZGF0YSkgCit7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh0cmVlcm9vdCk7CisgIFdp
bmRvdyAqY2hpbGRyZW47CisgIFdpbmRvdyByb290LCBwYXJlbnQ7CisgIERpc3BsYXkgKmRweSA9
IFh0RGlzcGxheSh0cmVlcm9vdCk7CisgIHVuc2lnbmVkIGludCBpLCBuY2hpbGRyZW47CisKKyAg
LyogZW5zdXJlIHdlIGRvbid0IGFkZCBtb3JlIHRoYW4gb25jZSAqLworICB4dF9yZW1vdmVfZm9j
dXNfbGlzdGVuZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB4dF9hZGRfZm9jdXNfbGlzdGVu
ZXIoIHRyZWVyb290LCB1c2VyX2RhdGEpOworICB0cmFwX2Vycm9ycygpOworICBpZighWFF1ZXJ5
VHJlZShkcHksIHdpbiwgJnJvb3QsICZwYXJlbnQsICZjaGlsZHJlbiwgJm5jaGlsZHJlbikpIHsK
KyAgICB1bnRyYXBfZXJyb3IoKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZih1bnRyYXBfZXJy
b3IoKSkgCisgICAgcmV0dXJuOworCisgIGZvcihpPTA7IGk8bmNoaWxkcmVuOyArK2kpIHsKKyAg
ICBXaWRnZXQgY2hpbGQgPSBYdFdpbmRvd1RvV2lkZ2V0KGRweSwgY2hpbGRyZW5baV0pOworICAg
IGlmIChjaGlsZCkgCisgICAgICB4dF9hZGRfZm9jdXNfbGlzdGVuZXJfdHJlZSggY2hpbGQsIHVz
ZXJfZGF0YSk7CisgIH0KKyAgWEZyZWUoKHZvaWQqKWNoaWxkcmVuKTsKKworICByZXR1cm47Cit9
CisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU5IEBACisv
KiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1i
YXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9w
PTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9u
OiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAq
IDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICog
U29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAq
IExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRn
ZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgor
ICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBs
YXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJv
dmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwg
YW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lv
biBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
dGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBv
ciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAq
IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisg
KgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8gICAKKworI2lmbmRlZiBfX0dU
S19YVEJJTl9IX18KKyNkZWZpbmUgX19HVEtfWFRCSU5fSF9fCisKKyNpbmNsdWRlIDxndGsvZ3Rr
c29ja2V0Lmg+CisjaW5jbHVkZSA8WDExL0ludHJpbnNpYy5oPgorI2luY2x1ZGUgPFgxMS9YdXRp
bC5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaWZkZWYgTU9aSUxMQV9DTElFTlQKKyNpbmNs
dWRlICJuc2NvcmUuaCIKKyNpZmRlZiBfSU1QTF9HVEtYVEJJTl9BUEkKKyNkZWZpbmUgR1RLWFRC
SU5fQVBJKHR5cGUpIE5TX0VYUE9SVF8odHlwZSkKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklOX0FQ
SSh0eXBlKSBOU19JTVBPUlRfKHR5cGUpCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEdUS1hUQklO
X0FQSSh0eXBlKSB0eXBlCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW4g
R3RrWHRCaW47Cit0eXBlZGVmIHN0cnVjdCBfR3RrWHRCaW5DbGFzcyBHdGtYdEJpbkNsYXNzOwor
CisjZGVmaW5lIEdUS19UWVBFX1hUQklOICAgICAgICAgICAgICAgICAgKGd0a194dGJpbl9nZXRf
dHlwZSAoKSkKKyNkZWZpbmUgR1RLX1hUQklOKG9iaikgICAgICAgICAgICAgICAgICAoR1RLX0NI
RUNLX0NBU1QgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJpbikpCisjZGVmaW5lIEdUS19YVEJJTl9DTEFTUyhr
bGFzcykgICAgICAgICAgKEdUS19DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1hUQklOLCBHdGtYdEJp
bkNsYXNzKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOKG9iaikgICAgICAgICAgICAgICAoR1RLX0NI
RUNLX1RZUEUgKChvYmopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19UWVBFX1hUQklOKSkKKyNkZWZpbmUgR1RLX0lTX1hUQklOX0NMQVNTKGtsYXNzKSAg
ICAgICAoR1RLX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQordHlwZWRlZiBzdHJ1Y3Qg
X1h0Q2xpZW50IFh0Q2xpZW50OworCitzdHJ1Y3QgX1h0Q2xpZW50IHsKKyAgRGlzcGxheQkqeHRk
aXNwbGF5OworICBXaWRnZXQJdG9wX3dpZGdldDsgICAgLyogVGhlIHRvcGxldmVsIHdpZGdldCAq
LworICBXaWRnZXQJY2hpbGRfd2lkZ2V0OyAgLyogVGhlIGVtYmVkZGVkIHdpZGdldCAqLworICBW
aXN1YWwJKnh0dmlzdWFsOworICBpbnQJCXh0ZGVwdGg7CisgIENvbG9ybWFwCXh0Y29sb3JtYXA7
CisgIFdpbmRvdwlvbGR3aW5kb3c7Cit9OworCitzdHJ1Y3QgX0d0a1h0QmluCit7CisgIEd0a1Nv
Y2tldCAgICAgIGdzb2NrZXQ7CisgIEdka1dpbmRvdyAgICAgKnBhcmVudF93aW5kb3c7CisgIERp
c3BsYXkgICAgICAgKnh0ZGlzcGxheTsgICAgICAgIC8qIFh0IFRvb2xraXQgRGlzcGxheSAqLwor
CisgIFdpbmRvdyAgICAgICAgIHh0d2luZG93OyAgICAgICAgIC8qIFh0IFRvb2xraXQgWFdpbmRv
dyAqLworICBnaW50ICAgICAgICAgICB4LCB5OworICBnaW50ICAgICAgICAgICB3aWR0aCwgaGVp
Z2h0OworICBYdENsaWVudAkgeHRjbGllbnQ7ICAgICAgICAgLyogWHQgQ2xpZW50IGZvciBYRW1i
ZWQgKi8KK307CisgIAorc3RydWN0IF9HdGtYdEJpbkNsYXNzCit7CisgIEd0a1NvY2tldENsYXNz
IHdpZGdldF9jbGFzczsKK307CisKK0dUS1hUQklOX0FQSShHdGtUeXBlKSAgICAgZ3RrX3h0Ymlu
X2dldF90eXBlICh2b2lkKTsKK0dUS1hUQklOX0FQSShHdGtXaWRnZXQgKikgZ3RrX3h0YmluX25l
dyAoR2RrV2luZG93ICpwYXJlbnRfd2luZG93LCBTdHJpbmcgKmYpOworR1RLWFRCSU5fQVBJKHZv
aWQpICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uIChHdGtYdEJpbiAqeHRiaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAg
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2lu
dCAgICAgICB5KTsKK0dUS1hUQklOX0FQSSh2b2lkKSAgICAgICBndGtfeHRiaW5fcmVzaXplIChH
dGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnaW50ICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgaGVpZ2h0KTsKKwordHlwZWRlZiBzdHJ1Y3QgX1h0VE1SZWMg
eworICAgIFh0VHJhbnNsYXRpb25zICB0cmFuc2xhdGlvbnM7ICAgICAgIC8qIHByaXZhdGUgdG8g
VHJhbnNsYXRpb24gTWFuYWdlciAgICAqLworICAgIFh0Qm91bmRBY3Rpb25zICBwcm9jX3RhYmxl
OyAgICAgICAgIC8qIHByb2NlZHVyZSBiaW5kaW5ncyBmb3IgYWN0aW9ucyAgICAqLworICAgIHN0
cnVjdCBfWHRTdGF0ZVJlYyAqY3VycmVudF9zdGF0ZTsgIC8qIFRyYW5zbGF0aW9uIE1hbmFnZXIg
c3RhdGUgcHRyICAgICAqLworICAgIHVuc2lnbmVkIGxvbmcgICBsYXN0RXZlbnRUaW1lOworfSBY
dFRNUmVjLCAqWHRUTTsgICAKKwordHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKKyAgICBXaWRn
ZXQgICAgICAgICAgc2VsZjsgICAgICAgICAgICAgICAvKiBwb2ludGVyIHRvIHdpZGdldCBpdHNl
bGYgICAgICAgICAgKi8KKyAgICBXaWRnZXRDbGFzcyAgICAgd2lkZ2V0X2NsYXNzOyAgICAgICAv
KiBwb2ludGVyIHRvIFdpZGdldCdzIENsYXNzUmVjICAgICAgKi8KKyAgICBXaWRnZXQgICAgICAg
ICAgcGFyZW50OyAgICAgICAgICAgICAvKiBwYXJlbnQgd2lkZ2V0ICAgICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBYcm1OYW1lICAgICAgICAgeHJtX25hbWU7ICAgICAgICAgICAvKiB3aWRnZXQg
cmVzb3VyY2UgbmFtZSBxdWFya2lmaWVkICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgYmVpbmdf
ZGVzdHJveWVkOyAgICAvKiBtYXJrZWQgZm9yIGRlc3Ryb3kgICAgICAgICAgICAgICAgKi8KKyAg
ICBYdENhbGxiYWNrTGlzdCAgZGVzdHJveV9jYWxsYmFja3M7ICAvKiB3aG8gdG8gY2FsbCB3aGVu
IHdpZGdldCBkZXN0cm95ZWQgKi8KKyAgICBYdFBvaW50ZXIgICAgICAgY29uc3RyYWludHM7ICAg
ICAgICAvKiBjb25zdHJhaW50IHJlY29yZCAgICAgICAgICAgICAgICAgKi8KKyAgICBQb3NpdGlv
biAgICAgICAgeCwgeTsgICAgICAgICAgICAgICAvKiB3aW5kb3cgcG9zaXRpb24gICAgICAgICAg
ICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAgd2lkdGgsIGhlaWdodDsgICAgICAvKiB3
aW5kb3cgZGltZW5zaW9ucyAgICAgICAgICAgICAgICAgKi8KKyAgICBEaW1lbnNpb24gICAgICAg
Ym9yZGVyX3dpZHRoOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHdpZHRoICAgICAgICAgICAgICAg
Ki8KKyAgICBCb29sZWFuICAgICAgICAgbWFuYWdlZDsgICAgICAgICAgICAvKiBpcyB3aWRnZXQg
Z2VvbWV0cnkgbWFuYWdlZD8gICAgICAgKi8KKyAgICBCb29sZWFuICAgICAgICAgc2Vuc2l0aXZl
OyAgICAgICAgICAvKiBpcyB3aWRnZXQgc2Vuc2l0aXZlIHRvIHVzZXIgZXZlbnRzKi8KKyAgICBC
b29sZWFuICAgICAgICAgYW5jZXN0b3Jfc2Vuc2l0aXZlOyAvKiBhcmUgYWxsIGFuY2VzdG9ycyBz
ZW5zaXRpdmU/ICAgICAgKi8KKyAgICBYdEV2ZW50VGFibGUgICAgZXZlbnRfdGFibGU7ICAgICAg
ICAvKiBwcml2YXRlIHRvIGV2ZW50IGRpc3BhdGNoZXIgICAgICAgKi8KKyAgICBYdFRNUmVjICAg
ICAgICAgdG07ICAgICAgICAgICAgICAgICAvKiB0cmFuc2xhdGlvbiBtYW5hZ2VtZW50ICAgICAg
ICAgICAgKi8KKyAgICBYdFRyYW5zbGF0aW9ucyAgYWNjZWxlcmF0b3JzOyAgICAgICAvKiBhY2Nl
bGVyYXRvciB0cmFuc2xhdGlvbnMgICAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYm9y
ZGVyX3BpeGVsOyAgICAgICAvKiB3aW5kb3cgYm9yZGVyIHBpeGVsICAgICAgICAgICAgICAgKi8K
KyAgICBQaXhtYXAgICAgICAgICAgYm9yZGVyX3BpeG1hcDsgICAgICAvKiB3aW5kb3cgYm9yZGVy
IHBpeG1hcCBvciBOVUxMICAgICAgKi8KKyAgICBXaWRnZXRMaXN0ICAgICAgcG9wdXBfbGlzdDsg
ICAgICAgICAvKiBsaXN0IG9mIHBvcHVwcyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBDYXJk
aW5hbCAgICAgICAgbnVtX3BvcHVwczsgICAgICAgICAvKiBob3cgbWFueSBwb3B1cHMgICAgICAg
ICAgICAgICAgICAgKi8KKyAgICBTdHJpbmcgICAgICAgICAgbmFtZTsgICAgICAgICAgICAgICAv
KiB3aWRnZXQgcmVzb3VyY2UgbmFtZSAgICAgICAgICAgICAgKi8KKyAgICBTY3JlZW4gICAgICAg
ICAgKnNjcmVlbjsgICAgICAgICAgICAvKiB3aW5kb3cncyBzY3JlZW4gICAgICAgICAgICAgICAg
ICAgKi8KKyAgICBDb2xvcm1hcCAgICAgICAgY29sb3JtYXA7ICAgICAgICAgICAvKiBjb2xvcm1h
cCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBXaW5kb3cgICAgICAgICAgd2luZG93
OyAgICAgICAgICAgICAvKiB3aW5kb3cgSUQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAg
ICBDYXJkaW5hbCAgICAgICAgZGVwdGg7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgcGxhbmVz
IGluIHdpbmRvdyAgICAgICAgKi8KKyAgICBQaXhlbCAgICAgICAgICAgYmFja2dyb3VuZF9waXhl
bDsgICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhlbCAgICAgICAgICAgKi8KKyAgICBQaXhtYXAg
ICAgICAgICAgYmFja2dyb3VuZF9waXhtYXA7ICAvKiB3aW5kb3cgYmFja2dyb3VuZCBwaXhtYXAg
b3IgTlVMTCAgKi8KKyAgICBCb29sZWFuICAgICAgICAgdmlzaWJsZTsgICAgICAgICAgICAvKiBp
cyB3aW5kb3cgbWFwcGVkIGFuZCBub3Qgb2NjbHVkZWQ/Ki8KKyAgICBCb29sZWFuICAgICAgICAg
bWFwcGVkX3doZW5fbWFuYWdlZDsvKiBtYXAgd2luZG93IGlmIGl0J3MgbWFuYWdlZD8gICAgICAg
Ki8KK30gQ29yZVBhcnQ7CisKK3R5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgeworICAgIENvcmVQ
YXJ0ICAgIGNvcmU7CisgfSBXaWRnZXRSZWMsIENvcmVSZWM7ICAgCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX19HVEtfWFRCSU5f
SF9fICovCisKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsveGVtYmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qIC0q
LSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2lj
LW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9Mjog
Ki8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1Q
TCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
YXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4x
ICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0
d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGlj
ZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVNQkVEIERlY2xhcmF0aW9u
LgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwor
ICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoK
KyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIp
LAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BM
IGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0
aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFu
ZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlv
dSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5
IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55
IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdlcyAqLworI2RlZmluZSBY
RU1CRURfRU1CRURERURfTk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19B
Q1RJVkFURSAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSAgICAg
ICAgMgorI2RlZmluZSBYRU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAgICAgIDMKKyNkZWZpbmUg
WEVNQkVEX0ZPQ1VTX0lOICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFhFTUJFRF9GT0NVU19P
VVQgICAgICAgICAgICAgICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNfTkVYVCAgICAgICAgICAg
ICAgIDYKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAgICAgICA3CisjZGVmaW5l
IFhFTUJFRF9HUkFCX0tFWSAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBYRU1CRURfVU5HUkFC
X0tFWSAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09OICAgICAgICAg
ICAgICAxMAorI2RlZmluZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAgICAgICAgIDExCisKKy8q
IE5vbiBzdGFuZGFyZCBtZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9HVEtfR1JBQl9LRVkgICAg
ICAgICAgICAgMTA4IAorI2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkgICAgICAgICAgIDEw
OQorCisvKiBEZXRhaWxzIGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLworI2RlZmluZSBYRU1CRURf
Rk9DVVNfQ1VSUkVOVCAgICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0ZJUlNUICAg
ICAgICAgICAgICAxCisjZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAgICAgICAgICAgICAgMgor
CisvKiBGbGFncyBmb3IgX1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhFTUJFRF9NQVBQRUQgICAg
ICAgICAgICAgICAgICAgKDEgPDwgMCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
UGFja2FnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5Q
YWNrYWdlV2luLmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1Bs
dWdpblBhY2thZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwzMCBAQCBpbnQg
UGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QCiAgICAgcmV0dXJuIHN0cmNtcChw
YXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5
KCkudXRmOCgpLmRhdGEoKSk7CiB9CiAKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0
IFBsdWdpblBhY2thZ2UmIGNvbXBhcmVUbykgY29uc3QKK3sKKyAgICAvLyBTb3J0IHBsdWctaW5z
IHRoYXQgYWxsb3cgbXVsdGlwbGUgaW5zdGFuY2VzIGZpcnN0LgorICAgIGJvb2wgQWFsbG93c011
bHRpcGxlSW5zdGFuY2VzID0gIXF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93
TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGJvb2wgQmFsbG93c011bHRpcGxlSW5zdGFuY2VzID0g
IWNvbXBhcmVUby5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxl
SW5zdGFuY2VzKTsKKyAgICBpZiAoQWFsbG93c011bHRpcGxlSW5zdGFuY2VzICE9IEJhbGxvd3NN
dWx0aXBsZUluc3RhbmNlcykKKyAgICAgICAgcmV0dXJuIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNl
cyA/IC0xIDogMTsKKworICAgIC8vIFNvcnQgcGx1Zy1pbnMgaW4gYSBwcmVmZXJyZWQgcGF0aCBm
aXJzdC4KKyAgICBib29sIEFpc0luUHJlZmVycmVkUGF0aCA9IFBsdWdpbkRhdGFiYXNlOjppc1By
ZWZlcnJlZFBsdWdpblBhdGgocGFyZW50RGlyZWN0b3J5KCkpOworICAgIGJvb2wgQmlzSW5QcmVm
ZXJyZWRQYXRoID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChjb21wYXJl
VG8ucGFyZW50RGlyZWN0b3J5KCkpOworICAgIGlmIChBaXNJblByZWZlcnJlZFBhdGggIT0gQmlz
SW5QcmVmZXJyZWRQYXRoKQorICAgICAgICByZXR1cm4gQWlzSW5QcmVmZXJyZWRQYXRoID8gLTEg
OiAxOworCisgICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBh
cmVUby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGRpZmYpCisgICAgICAgIHJldHVy
biBkaWZmOworCisgICAgaWYgKGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZl
cnNpb24oKSkpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgcmV0dXJuIHN0cmNtcChwYXJl
bnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCku
dXRmOCgpLmRhdGEoKSk7Cit9CisKIGJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xp
c3RlZCgpCiB7CiAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiBzbFBsdWdp
bk1pblJlcXVpcmVkKDB4NTFCRTAwMDAsIDB4MDAwMTAwMDApOwpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMv
d2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lvbiAzMTk5MCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OCw2ICs4NTgsNTgg
QEAgTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYQogICAgIHJldHVybiBs
b2FkKGZyYW1lTG9hZFJlcXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOwogfQog
CitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCisgICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisJICAgIGlm
IChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisK
KyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZyYW1l
LT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUg
aXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAg
ICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2Jq
ZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQq
Kil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZh
U2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICAg
ICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlmICht
X2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAg
ICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50
Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZh
bHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6
Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAg
ICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFp
bk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2
b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKworICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisjZW5kaWYKKworICAg
ICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgUGxhdGZvcm1XaWRn
ZXQqIHcgPSByZWludGVycHJldF9jYXN0PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUpOworCisgICAg
ICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKKworICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6
aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQogewogICAgIGlmICghcmVjdCkgewpJbmRleDog
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAJKHJldmlzaW9uIDMxOTkwKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCkBAIC01Nyw2ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZy
YW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwg
bV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYyLDkgKzE2NCwz
MCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2Fk
ZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAg
ICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5j
b2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBBU1NFUlQo
bG9hZGVyLT5mcmFtZSgpKTsKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhl
IGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxs
eSBkb25lCisgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVk
LCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91
dDpibGFuaykuCisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNv
ZGluZygpOworICAgICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Cisg
ICAgICAgIGlmICghdXNlckNob3NlbikKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5y
ZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJh
bWVMb2FkZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9hZGVyLT5z
ZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGlmIChkYXRhKQorICAg
ICAgICAgICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAg
ICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1Bs
dWdpbikgeworICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9h
ZGVyLT5yZXNwb25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4g
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEo
ZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpA
QCAtMjYwLDkgKzI4MywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lk
ZVBvCiAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGlj
eVVzZSk7CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25z
dCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IFBsdWdpblZpZXc6OmNyZWF0ZShjb3JlKG1f
ZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVz
LCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMo
KSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVn
aW5WaWV3OworCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5MCw4ICszMTcsNyBAQCBQYXNzUmVm
UHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOworICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19j
YXN0PFBsdWdpblZpZXcqPihwbHVnaW5XaWRnZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVy
Q2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50Kiwg
Y29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTU4NywxNCArNjEzLDE0IEBAIFN0cmluZyBGcmFtZUxv
YWRlckNsaWVudDo6Z2VuZXJhdGVkTUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6Zmlu
aXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NF
UlQoZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5n
IG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMg
bm9ybWFsbHkgZG9uZQotICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2Vp
dmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBh
Ym91dDpibGFuaykuCi0gICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJy
aWRlRW5jb2RpbmcoKTsKLSAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7
Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50
TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRl
ci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworCisg
ICAgaWYgKCFtX3BsdWdpblZpZXcpCisgICAgICAgIGNvbW1pdHRlZExvYWQoZG9jdW1lbnRMb2Fk
ZXIsIDAsIDApOworICAgIGVsc2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExv
YWRpbmcoKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVz
cG9uc2VUb1BsdWdpbiA9IGZhbHNlOworICAgIH0KIH0KIAogCkBAIC03MTAsOSArNzM2LDEzIEBA
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG8KICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJv
cihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX3Bs
dWdpblZpZXcpIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICAg
ICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9
IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c3RhcnREb3dubG9h
ZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4g
PHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEs
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKIAorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTE3MCw2ICsxNzMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAg
ICAgIFdlYktpdFdlYkZyYW1lKiBtX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBtX3VzZXJBZ2VudDsK
KworICAgICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisgICAgICAgIFdl
YkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgYm9vbCBtX2hhc1NlbnRS
ZXNwb25zZVRvUGx1Z2luOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0ZGlycy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRp
cnMucG0JKHJldmlzaW9uIDMxOTkwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJz
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNSBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU2LDcgQEAgbXkgJGN1cnJlbnRTVk5SZXZpc2lv
bjsKIG15ICRvc1hWZXJzaW9uOwogbXkgJGlzUXQ7CiBteSAkaXNHdGs7CitteSAkZW5hYmxlR3Rr
UGx1Z2luczsKIG15ICRpc1d4OwogCiAjIFZhcmlhYmxlcyBmb3IgV2luMzIgc3VwcG9ydApAQCAt
NDk0LDYgKzQ5NiwyMyBAQCBzdWIgZGV0ZXJtaW5lSXNHdGsoKQogICAgIH0KIH0KIAorc3ViIGVu
YWJsZUd0a1BsdWdpbnMoKQoreworICAgIGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKTsKKyAg
ICByZXR1cm4gJGVuYWJsZUd0a1BsdWdpbnM7Cit9CisKK3N1YiBkZXRlcm1pbmVFbmFibGVHdGtQ
bHVnaW5zKCkKK3sKKyAgICByZXR1cm4gaWYgZGVmaW5lZCgkZW5hYmxlR3RrUGx1Z2lucyk7CisK
KyAgICBpZiAoY2hlY2tBcmd2KCItLWRpc2FibGUtZ3RrLXBsdWdpbnMiKSkgeworICAgICAgICAk
ZW5hYmxlR3RrUGx1Z2lucyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGVuYWJsZUd0a1Bs
dWdpbnMgPSAxOworICAgIH0KK30KKwogc3ViIGlzV3goKQogewogICAgIGRldGVybWluZUlzV3go
KTsKQEAgLTg2NSw2ICs4ODQsNyBAQCBzdWIgYnVpbGRHdGtQcm9qZWN0KCQkQCkKIAogICAgIGlm
ICh1c2VRbWFrZSgpKSB7CiAgICAgICAgIG15IEBidWlsZEFyZ3MgPSAoIkNPTkZJRys9Z3RrLXBv
cnQiLCAiQ09ORklHLT1xdCIpOworICAgICAgICBwdXNoIEBidWlsZEFyZ3MsICJDT05GSUcrPXBs
dWdpbnMiIGlmIGVuYWJsZUd0a1BsdWdpbnMoKTsKICAgICAgICAgcmV0dXJuIGJ1aWxkUU1ha2VQ
cm9qZWN0KCRjbGVhbiwgQGJ1aWxkQXJncyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJu
IGJ1aWxkQXV0b3Rvb2xzUHJvamVjdCgkY2xlYW4sIEBidWlsZEFyZ3MpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20639</attachid>
            <date>2008-04-17 14:48:41 -0700</date>
            <delta_ts>2008-04-17 14:48:41 -0700</delta_ts>
            <desc>fixes sri&apos;s latest patch: this one doesn&apos;t break the Qt build</desc>
            <filename>webkit-31990-plugin.patch</filename>
            <type>text/plain</type>
            <size>98090</size>
            <attacher name="Adam Williamson">adamw</attacher>
            
              <data encoding="base64">SW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAzMTk5MCkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiAr
MjQwLDcgQEAgZW5kaWYKIAogaWYgVEFSR0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBf
VU5JWAord2ViY29yZV9saWJhZGQgKz0gLWxYdCAtbG5zcHI0CiBlbmRpZgogCiBpZiAhRU5BQkxF
X0RFQlVHCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDMxOTkwKQorKysgV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtOTEzLDcgKzkxMywxMCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKIAlXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luVmlldy5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgXAorCVdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsv
UGx1Z2luRGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2th
Z2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKIAlX
ZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmlu
Zy9iaWRpLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIFwKQEAgLTk3
NCw2ICs5NzcsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCiAKK2lmIFRBUkdF
VF9YMTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYworZW5kaWYKKwogd2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVs
cGVyLmgKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnBybwkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgZ3RrLXBvcnQgewogICAgIH0KICAgICB4MTE6
cGx1Z2lucyB7CiAgICAgICAgIERFRklORVMgKz0gWFBfVU5JWAorICAgICAgICBMSUJTICs9IC1s
WHQKICAgICB9CiAKICAgICBJTkNMVURFUEFUSCArPSBcCkBAIC0xODEsNiArMTgyLDcgQEAgZ3Rr
LXBvcnQgewogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibSBcCiAgICAgbG9hZGVyL2d0
ayBcCiAgICAgcGFnZS9ndGsgXAorICAgIHBsdWdpbnMvZ3RrIFwKICAgICAuLi9XZWJLaXQvZ3Rr
IFwKICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0IFwKICAgICAuLi9XZWJLaXQvZ3Rr
L3dlYmtpdApAQCAtOTMxLDEzICs5MzMsMzUgQEAgU09VUkNFUyArPSBcCiAgICAgeG1sL1hTTFRQ
cm9jZXNzb3IuY3BwCiAKIGd0ay1wb3J0IHsKKyAgIXBsdWdpbnMgeworICAgIERFRklORVMgKz0g
R1RLX0RJU0FCTEVfUExVR0lOUz0xCisgIH0KKyAgSEVBREVSUyArPSBcCisgICAgcGx1Z2lucy9n
dGsvUGx1Z2luRGF0YWJhc2VHdGsuaCBcCisgICAgcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0
ay5oIFwKKyAgICBwbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmgKKwogICBTT1VSQ0VTICs9IFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNrTGlzdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmNwcCAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdJbkluZm9TdG9yZUd0ay5jcHAgXAorICAg
IHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisgICAgcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAgXAorICAgIHBsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwK
KyAgICBwbHVnaW5zL2d0ay9ucGFwaS5jcHAKKworICB4MTE6cGx1Z2lucyB7CisgICAgSEVBREVS
UyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRiaW4uaCBcCisgICAgICBwbHVnaW5zL2d0
ay94ZW1iZWQuaAorCisgICAgU09VUkNFUyArPSBcCisgICAgICBwbHVnaW5zL2d0ay9ndGsyeHRi
aW4uYworICB9CiB9CiAKIHF0LXBvcnQgewpAQCAtMTA1MSw2ICsxMDc1LDcgQEAgcXQtcG9ydCB7
CiB9CiAKIGd0ay1wb3J0IHsKKyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMv
Z3RrCiAgICAgSEVBREVSUyArPSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZEd0ay5oIFwKICAgICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEhlbHBlci5oIFwKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShyZXZpc2lvbiAzMTk5MCkKKysr
IFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTMwLDE1ICszMSwxNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJranNfcHJveHku
aCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlICJydW50aW1lLmgiCiAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
PiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KikKK1Bhc3NSZWZQ
dHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZv
cldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+Ymlu
ZGluZ0luc3RhbmNlKCk7CiB9CiAKIHZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmpl
Y3RzKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lv
biAzMTk5MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSwxMCArODksMjEgQEAgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldEZpbGVNb2RpZmlj
YXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCitib29sIGdldEZpbGVNb2RpZmljYXRp
b25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiBtb2RpZmllZFRpbWUpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZ2NoYXIqIGZpbGVuYW1l
ID0gZ19maWxlbmFtZV9mcm9tX3V0ZjgocGF0aC51dGY4KCkuZGF0YSgpLCAtMSwgMCwgMCwgMCk7
CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RydWN0
IHN0YXQgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZSwgJnN0
YXRSZXN1bHQpOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtb2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0LnN0
X210aW1lOworICAgIHJldHVybiB0cnVlOworCiB9CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNp
b24gMzE5OTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiRlRQRGlyZWN0b3J5
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgog
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIApAQCAt
NTgsMjggKzU2LDcgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdAog
LyogQ29tcGxldGVseSBlbXB0eSBzdHVicyAobW9zdGx5IHRvIGFsbG93IERSVCB0byBydW4pOiAq
LwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwogCi1pbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJikg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5QYWNrYWdl
OjpmZXRjaEluZm8oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdW5zaWdu
ZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNv
bnN0IFBsdWdpblBhY2thZ2UmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQot
Ym9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFs
c2U7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxp
ZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQ
bHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVn
aW5WaWV3OjpzZXRGb2N1cygpIHsgV2lkZ2V0OjpzZXRGb2N1cygpOyB9Ci12b2lkIFBsdWdpblZp
ZXc6OnNob3coKSB7IFdpZGdldDo6c2hvdygpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmhpZGUoKSB7
IFdpZGdldDo6aGlkZSgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmll
dzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpIHsgV2lkZ2V0OjpzZXRQYXJlbnQodmlldyk7
IH0KLXZvaWQgUGx1Z2luVmlldzo6YXR0YWNoVG9XaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLXZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqLCBjb25zdCBj
aGFyKiwgdWludDMyLCBjb25zdCBjaGFyKiwgYm9vbCwgdm9pZCosIGJvb2wsIGJvb2wpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KLXZvaWQgUGx1Z2lu
Vmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBs
dWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQq
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkge30KIAog
Q29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2
b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkg
eyB9CkBAIC05Myw4ICs3MCw1IEBAIFN0cmluZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0
IHsgbm8KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0
aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KIAotdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotdm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0K
IH0KIApJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAzMTk5MCkK
KysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDExICsyOSwxNyBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorI2lmbmRlZiBOREVCVUcKK1dURkxvZ0NoYW5uZWwgTG9nV2ViQ29yZVBsdWdpbnMgPSAg
eyAweDAwMDAwMDAwLCAiIiwgV1RGTG9nQ2hhbm5lbE9uIH07CisjZW5kaWYKKwogUGx1Z2luRGF0
YWJhc2UqIFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCkKIHsKICAgICBzdGF0aWMg
UGx1Z2luRGF0YWJhc2UqIHBsdWdpbnMgPSAwOwpAQCAtMTA2LDggKzExMiwxMiBAQCBib29sIFBs
dWdpbkRhdGFiYXNlOjpyZWZyZXNoKCkKICAgICAgICAgICAgIHJlbW92ZShvbGRQYWNrYWdlLmdl
dCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhZGQoUGx1Z2luUGFja2FnZTo6Y3JlYXRl
UGFja2FnZSgqaXQsIGxhc3RNb2RpZmllZCkpKQorICAgICAgICBpZiAoYWRkKFBsdWdpblBhY2th
Z2U6OmNyZWF0ZVBhY2thZ2UoKml0LCBsYXN0TW9kaWZpZWQpKSkgewogICAgICAgICAgICAgcGx1
Z2luU2V0Q2hhbmdlZCA9IHRydWU7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAJTE9HKFdlYkNv
cmVQbHVnaW5zLCJDcmVhdGVkIFBsdWdpbiBwYWNrYWdlIGZvciAlc1xuIiwoaXQtPnV0ZjgoKSku
ZGF0YSgpKTsKKyNlbmRpZgorCX0KICAgICB9CiAKICAgICAvLyBDYWNoZSBhbGwgdGhlIHBhdGhz
IHdlIGZvdW5kIHdpdGggdGhlaXIgdGltZXN0YW1wcyBmb3IgbmV4dCB0aW1lLgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE2ICsyNywzMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAorI2luY2x1
ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
bHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCiB7CisgICAgLy8gVGhpcyBkZXN0cnVjdG9y
IGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1Z2luRGF0YWJhc2UncworICAgIC8v
IFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1z
IGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBh
IGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8gY291cnNlIHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNv
IHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQorICAgIC8vIEFTU0VSVC4KKyAgICAv
LyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLgorICAg
IGlmIChtX2xvYWRDb3VudCA9PSAwKQorCXVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIGVs
c2UKKwl1bmxvYWQoKTsKKwogICAgIEFTU0VSVCghbV9pc0xvYWRlZCk7CiB9CiAKQEAgLTU4LDYg
KzcyLDMxIEBAIHZvaWQgUGx1Z2luUGFja2FnZTo6ZnJlZUxpYnJhcnlUaW1lckZpcmUKICAgICBt
X21vZHVsZSA9IDA7CiB9CiAKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1
Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAoreworICAgIC8vIFNvcnQgcGx1Zy1pbnMgdGhh
dCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCisgICAgYm9vbCBBYWxsb3dzTXVsdGlw
bGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0
aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhY29t
cGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0
YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011bHRp
cGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2VzID8g
LTEgOiAxOworCisgICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZpcnN0
LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQ
cmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0b3J5KCkpOworICAgIGJvb2wgQmlz
SW5QcmVmZXJyZWREaXJlY3RvcnkgPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5E
aXJlY3RvcnkoY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBpZiAoQWlzSW5QcmVm
ZXJyZWREaXJlY3RvcnkgIT0gQmlzSW5QcmVmZXJyZWREaXJlY3RvcnkpCisgICAgICAgIHJldHVy
biBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA/IC0xIDogMTsKKworICAgIGludCBkaWZmID0gc3Ry
Y21wKG5hbWUoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ubmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZjsKKworICAgIGlmIChkaWZmID0g
Y29tcGFyZUZpbGVWZXJzaW9uKGNvbXBhcmVUby52ZXJzaW9uKCkpKQorICAgICAgICByZXR1cm4g
ZGlmZjsKKworICAgIHJldHVybiBzdHJjbXAocGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEo
KSwgY29tcGFyZVRvLnBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCkpOworfQorCiBQbHVn
aW5QYWNrYWdlOjpQbHVnaW5QYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgdGltZV90
JiBsYXN0TW9kaWZpZWQpCiAgICAgOiBtX3BhdGgocGF0aCkKICAgICAsIG1fbW9kdWxlVmVyc2lv
bigwKQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw1NSArMzkz
LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVzcwogICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1lLCBTdHJpbmcobWVz
c2FnZSkpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZh
cmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCi0g
ICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc3dpdGNoICh2YXJpYWJs
ZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAgICBjYXNlIE5QTlZX
aW5kb3dOUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVj
dCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0KLSAgICAgICAgICAg
IC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVk
IGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUu
aHRtbD4KLSAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCi0gICAgICAgICAgICAg
ICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAgICAg
dm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRP
YmplY3Q7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsK
LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogewot
ICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7Ci0KLSAgICAgICAg
ICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhh
c1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQot
ICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVn
SW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKLQotICAgICAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgotICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAgICAgICAgICAgICBf
TlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwotCi0gICAgICAgICAgICB2b2lk
KiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVj
dDsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0jZW5k
aWYKLQotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAgICAgICAgICAgUGxh
dGZvcm1XaWRnZXQqIHcgPSByZWludGVycHJldF9jYXN0PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUp
OwotCi0gICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKLQotICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19Ci0KIE5QRXJyb3Ig
UGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQog
ewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5W
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkocmV2aXNp
b24gMzE5OTApCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsNiArMjIxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X2F0dGFjaGVkVG9XaW5kb3c7CiAgICAgICAgIGJvb2wgbV9oYXZlSW5pdGlhbGl6ZWQ7CiAKKyNp
ZiBQTEFURk9STShHVEspCisgICAgICAgIGJvb2wgbV9uZWVkc1hFbWJlZDsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oV0lOKQogICAgICAgICBPd25QdHI8UGx1Z2luTWVzc2FnZVRocm90dGxlcldp
bj4gbV9tZXNzYWdlVGhyb3R0bGVyOwogICAgICAgICBXTkRQUk9DIG1fcGx1Z2luV25kUHJvYzsK
SW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisj
aW5jbHVkZSA8c3RkaW8uaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRh
Ojppbml0UGx1Z2lucygpCit7CisgICAgcHJpbnRmKCJJbml0IHBsdWdpbnMgY2FsbGVkIFxuIik7
CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdp
bnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+ICZwbHVnaW5zID0gZGItPnBs
dWdpbnMoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Cisg
ICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOworCisgICAgICAgIGlu
Zm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgICAgIGluZm8tPmZpbGUgPSBwYWNrYWdl
LT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+ZGVzY3JpcHRpb24o
KTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1pbWVUb0Rlc2NyaXB0
aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAgICBNSU1FVG9EZXNj
cmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQo
KTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICAg
ICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworCisgICAgICAgICAgICBtaW1lLT50eXBlID0g
aXQtPmZpcnN0OworICAgICAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBl
eHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldChtaW1lLT50eXBlKTsK
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVuc2lvbnMuc2l6ZSgp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgICAg
IG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVz
ICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBt
X3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQbHVnaW5EYXRhOjpyZWZy
ZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFs
bGVkUGx1Z2lucygpOworICAgIGRiLT5yZWZyZXNoKCk7Cit9CisKK307CkluZGV4OiBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBsdWdp
blBhY2thZ2UuaCIKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC02MCw2ICs2MSw4IEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZh
dWx0UGwKICAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllczsKICAgICBnY2hhciogZGlyZWN0
b3J5OwogCisgICAgZGlyZWN0b3J5ID0gMDsKKwogI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19Y
MTEpCiAgICAgZGlyZWN0b3J5ID0gZ19idWlsZF9maWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAi
Lm1vemlsbGEiLCAicGx1Z2lucyIsIE5VTEwpOwogICAgIGRpcmVjdG9yaWVzLmFwcGVuZChkaXJl
Y3RvcnkpOwpAQCAtNjksOSArNzIsOSBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6
ZGVmYXVsdFBsCiAgICAgaWYgKG1velBhdGgpIHsKICAgICAgICAgZ2NoYXIqKiBwbHVnaW5QYXRo
cyA9IGdfc3Ryc3BsaXQobW96UGF0aCwgIjoiLCAtMSk7CiAKLSAgICAgICAgZm9yIChnaW50IGkg
PSAwOyBwbHVnaW5QYXRoc1tpXTsgaSsrKQorICAgICAgICBmb3IgKGdpbnQgaSA9IDA7IHBsdWdp
blBhdGhzW2ldOyBpKyspIHsKICAgICAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChwbHVnaW5Q
YXRoc1tpXSk7Ci0KKwl9CiAgICAgICAgIGdfc3RyZnJlZXYocGx1Z2luUGF0aHMpOwogICAgIH0K
IApAQCAtOTUsNyArOTgsMjEgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1
bHRQbAogCiBib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgZ2NoYXIq
IGhvbWVQYXRoOworICAgIGJvb2wgcmV0dmFsID0gZmFsc2U7CisKKyAgICBob21lUGF0aCA9IDA7
CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgIGhvbWVQYXRoID0gZ19idWls
ZF9maWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAiLm1vemlsbGEiLCAicGx1Z2lucyIsIDApOwor
I2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQorICAgIGhvbWVQYXRoID0gZ19idWls
ZF9maWxlbmFtZShnX2dldF9ob21lX2RpcigpLCAiQXBwbGljYXRpb24gRGF0YSIsICJNb3ppbGxh
IiwgInBsdWdpbnMiLCAwKTsKKyNlbmRpZgorCisgICAgaWYgKGhvbWVQYXRoKQorCXJldHZhbCA9
IChzdHJjbXAoaG9tZVBhdGgsIChkaXJlY3RvcnkudXRmOCgpKS5kYXRhKCkpID09IDApOworCisg
ICAgcmV0dXJuIHJldHZhbDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVn
aW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5o
IgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50
IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24mKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBl
KG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHByb2Nlc3MgY2Fubm90
IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkgdW5sb2FkIGEKKyAg
ICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBwbHVnaW4sIG9yIHdl
J2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8vIFNldHRpbmcgdGhlIHdp
bmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIHJlcGFp
bnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWluLgorICAgICAgICBt
X3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsK
KyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAo
IWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBfR2V0TUlNRURlc2NyaXB0
aW9uRnVuY1B0ciBOUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAgTlBQX0dldFZhbHVlUHJvY1B0
ciBOUFBfR2V0VmFsdWU7CisKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRN
SU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZOUF9HZXRNSU1FRGVzY3JpcHRpb24pOworICAgIGdf
bW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwgKHZvaWQqKikmTlBQX0dldFZh
bHVlKTsKKworICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9IE5QX0dldE1JTUVEZXNjcmlwdGlvbigp
OworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0eXBlcywgIjsiLCAtMSk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1lRGVzY3NbaV1bMF07IGkrKykg
eworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxpdChtaW1lRGVzY3NbaV0sICI6
IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nOjpmcm9tVVRGOCht
aW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9ucyA9IGdfc3Ryc3BsaXQobWlt
ZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dFZlY3RvcjsK
KyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07IGorKykKKyAgICAgICAgICAg
IGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRlbnNpb25zW2pdKSk7CisKKyAg
ICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVswXSwgZXh0VmVjdG9yKTsKKyAg
ICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRhWzBdLCBkZXNjcmlwdGlvbik7
CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAgICAgICAgZ19zdHJmcmVldiht
aW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURlc2NzKTsKKworICAgIGNoYXIq
IGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBOUFBfR2V0VmFsdWUoMCwgTlBQVnBsdWdp
bk5hbWVTdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisg
ICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9IDA7CisgICAgZXJyID0gTlBQ
X0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmluZywgJmJ1ZmZlcik7CisgICAg
aWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZmZl
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQor
eworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gZ19tb2R1bGVfb3BlbigobV9w
YXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FMKTsKKworICAgIGlmICghbV9t
b2R1bGUpIHsKKwlwcmludGYoIk1vZHVsZSBMb2FkIEZhaWxlZCA6JXMsIEVycm9yOiVzXG4iLCAo
bV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCX0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6
ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgZ19tb2R1
bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lkKiopJk5QX0luaXRpYWxp
emUpOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1NodXRkb3duIiwgKHZvaWQq
KikmbV9OUFBfU2h1dGRvd24pOworCisgICAgaWYgKCFOUF9Jbml0aWFsaXplIHx8ICFtX05QUF9T
aHV0ZG93bikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNldCgmbV9wbHVnaW5GdW5j
cywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdpbkZ1bmNzLnNpemUgPSBz
aXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5zaXplID0gc2l6ZW9m
IChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVyc2lvbiA9IE5QX1ZFUlNJ
T05fTUlOT1I7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBOX0dldFVSTDsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAgbV9icm93c2VyRnVuY3Mu
cmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93c2VyRnVuY3MubmV3c3Ry
ZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53cml0ZSA9IE5QTl9Xcml0
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBOX0Rlc3Ryb3lTdHJlYW07
CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsKKyAgICBtX2Jyb3dzZXJG
dW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWFsbG9j
ID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZyZWUgPSBOUE5fTWVtRnJl
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1GbHVzaDsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdpbnM7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3Muc2V0dmFsdWUg
PSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlY3QgPSBOUE5f
SW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxpZGF0ZXJlZ2lvbiA9IE5Q
Tl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZvcmNlcmVkcmF3ID0gTlBO
X0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFFbnYgPSBOUE5fR2V0SmF2
YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5QTl9HZXRKYXZhUGVlcjsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1
cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRl
ID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVh
c2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7CisgICAgbV9icm93c2Vy
RnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcjsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9OUE5fR2V0U3RyaW5nSWRl
bnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0
SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlmaWVyaXNzdHJpbmcgPSBf
TlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50
aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5jcmVh
dGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXRhaW5v
YmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNlb2Jq
ZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZSA9IF9O
UE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1bHQgPSBfTlBOX0ludm9r
ZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBfTlBOX0V2YWx1YXRlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQcm9wZXJ0eTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CisgICAgbV9icm93
c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OworICAgIG1fYnJv
d3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7CisgICAgbV9icm93c2VyRnVu
Y3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRl
eGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5lbnVtZXJh
dGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5pdGlhbGl6ZSgmbV9icm93
c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBFcnIgIT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3VudCsrOworICAgIHJldHVy
biB0cnVlOworCithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdAoreyAK
KyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1fcGF0aC5pbXBsKCktPmhh
c2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCAy
ICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIFBsdWdpblBh
Y2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0IFBsdWdpblBhY2thZ2Um
IGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1fZGVzY3JpcHRpb247Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1M
UGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGx1Z2luRGVi
dWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCisjaW5j
bHVkZSAia2pzX3Byb3h5LmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRl
ICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCisjaW5jbHVkZSA8a2pzL0pT
TG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorCisjaW5jbHVkZSA8Z2RrY29uZmlnLmg+
CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorI2luY2x1ZGUgImd0azJ4dGJpbi5o
IgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5HX1dJ
TjMyCisjaW5jbHVkZSA8Z2RrL2dka3dpbjMyLmg+CisjZW5kaWYKKwordXNpbmcgS0pTOjpFeGVj
U3RhdGU7Cit1c2luZyBLSlM6OkludGVycHJldGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1c2lu
ZyBLSlM6OkpTT2JqZWN0OwordXNpbmcgS0pTOjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3RyaW5n
OworCit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sK
KyAgICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFt
ZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0
IG9sZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9
IG1fY2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29u
dGVudHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnko
KS5zaXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xp
cFJlY3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAg
R3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1Jl
Y3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpIH07Cisg
ICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShtX3dp
bmRvdywgJmFsbG9jYXRpb24pOworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAg
ICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgZ3RrX3h0YmluX3NldF9wb3Np
dGlvbihHVEtfWFRCSU4obV93aW5kb3cpLCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3Qu
eSgpKTsKKyAgICAgICAgICAgIGd0a194dGJpbl9yZXNpemUobV93aW5kb3csIG1fd2luZG93UmVj
dC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisjZW5kaWYKKyAg
ICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKQoreworICAgIGlmIChtX3dpbmRv
dykKKwlndGtfd2lkZ2V0X2dyYWJfZm9jdXMobV93aW5kb3cpOworCisgICAgV2lkZ2V0OjpzZXRG
b2N1cygpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNob3coKQoreworICAgIG1faXNWaXNpYmxl
ID0gdHJ1ZTsKKworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cgJiYgbV93aW5kb3cpCisJZ3Rr
X3dpZGdldF9zaG93KG1fd2luZG93KTsKKworICAgIFdpZGdldDo6c2hvdygpOworfQorCit2b2lk
IFBsdWdpblZpZXc6OmhpZGUoKQoreworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisKKyAgICBp
ZiAobV9hdHRhY2hlZFRvV2luZG93ICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfaGlkZShtX3dp
bmRvdyk7CisKKyAgICBXaWRnZXQ6OmhpZGUoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKCFtX2lzU3RhcnRlZCkgeworICAgICAgICAvLyBEcmF3IHRoZSAibWlzc2luZyBwbHVnaW4i
IGltYWdlCisgICAgICAgIC8vcGFpbnRNaXNzaW5nUGx1Z2luSWNvbihjb250ZXh0LCByZWN0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2lzV2luZG93ZWQgfHwgY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOUEV2ZW50IG5w
RXZlbnQ7CisgICAgLyogTmVlZCB0byBzeW50aGVzaXplIFhldmVudHMgaGVyZSAqLworCisgICAg
bV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisKKyAgICBBU1NFUlQocGFy
ZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2Nr
czsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZu
cEV2ZW50KTsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKQorICAgICAgICBzZXROUFdp
bmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVu
Y3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxs
TG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNl
LCAmbnBFdmVudCk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2ZW50OworICAg
IAorICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8K
KworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgIGlmICgh
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50KSkKKyAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZl
bnQ7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgIHJldHVybjsKKworICAgIC8qIEZJ
WE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8KKyAgICBJbnRQb2lu
dCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93
KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisgICAgS0pTOjpK
U0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAg
ICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICgh
bV93aW5kb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFBsdWdpblZp
ZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9p
c1N0YXJ0ZWQgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFw
YXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
OworICAgIG1fbnBXaW5kb3cueCA9IHAueCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOwor
CisgICAgbV9ucFdpbmRvdy53aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93Lmhl
aWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9t
ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0
d2luZG93KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tz
OworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2Us
ICZtX25wV2luZG93KTsKKworICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdygpCit7CisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRv
dykKKwlyZXR1cm47CisKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSB0cnVlOworICAgIGlmICht
X2lzVmlzaWJsZSAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X3Nob3cobV93aW5kb3cpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmRldGFjaEZyb21XaW5kb3coKQoreworICAgIGlmICghbV9hdHRh
Y2hlZFRvV2luZG93KQorCXJldHVybjsKKworICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX3dpbmRv
dykKKwlndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworICAgIG1fYXR0YWNoZWRUb1dpbmRvdyA9
IGZhbHNlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0
YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVh
bT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVh
bT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVm
UHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0
U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1w
dHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworCisgICAgS0pTOjpKU0xvY2s6OkRy
b3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAgICAvLyBEZXN0cm95IHRoZSBwbHVnaW4KKyAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKworICAg
IG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5
KGNoYXIqKiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KQorICAgICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJp
bmdBcnJheSk7Cit9CisKK3N0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwg
Y29uc3QgY2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCit7CisgICAgU3RyaW5nIHVybFN0cmluZyA9
IHJlbGF0aXZlVVJMU3RyaW5nOworCisgICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMuCisg
ICAgdXJsU3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOworICAgIHVybFN0cmluZy5yZXBsYWNlKCdc
cicsICIiKTsKKworICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0g
J1xuJzsKK30KKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKK3sKKyAgICBp
ZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRG
cmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX3VybCkudXRmOCgpOworCisgICAgcmV0dXJuIG1f
dXNlckFnZW50LmRhdGEoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRlckZp
cnN0QmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0IGNo
YXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIu
c2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykg
eworICAgICAgICAvLyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisgICAg
ICAgIGlmIChieXRlc1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAg
ICAgICAgcmV0dXJuIGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9z
aXRpb24gYWZ0ZXIgMiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5lLgor
ICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykgewor
ICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicpCisg
ICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxuXG4i
ICgzODgwMzg3KS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICBl
bHNlIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4
MTEzKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVPTChj
b25zdCBjaGFyKiBieXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGluZyB0
byB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBDUkxG
IHBhaXIuIFVuZm9ydHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8vIGlu
c3RlYWQuIFdvcnNlIHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24KKyAg
ICAvLyBvZiBib3RoIChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVk
cworICAgIC8vIHRvIGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwg
TEYgb3IKKyAgICAvLyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBFT0xG
IGlzIG5vdCBmb3VuZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0aGUg
Zmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAg
ICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7Cisg
ICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcworICAg
ICAgICAgICAgLy8gKENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisgICAg
ICAgICAgICAvLyBuZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQor
eworICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJlc3Vs
dDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsK
KyAgICAgICAgVUNoYXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBu
YW1lW2ldID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJ
VXBwZXIobmFtZVtpXSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYm
IG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvQVND
SUlMb3dlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07
CisKKyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNo
YXJhY3RlciA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFy
YWN0ZXIgPSBmYWxzZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJG
QzgyMkhlYWRlckZpZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25z
dCBjaGFyKiBlb2w7CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFk
ZXJGaWVsZHM7CisKKyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUg
aGVhZGVyLCBvciB3ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxl
ICgoZW9sID0gZmluZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciog
bGluZSA9IGJ5dGVzOworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAg
ICAgICAKKyAgICAgICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0
ZXJtaW5hdG9yIGFzIHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsg
MTsKKyAgICAgICAgaWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAg
ICAgICAgICBieXRlcysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bh
bm5pbmcgQ1JMRi4KKworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAg
IGlmIChsaW5lTGVuZ3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBh
dCB0aGUgZW5kIG9mIHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNl
IGlmICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29u
dGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3Jl
IGl0IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRo
ZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0g
aGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFs
dWUobGluZSwgbGluZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0
KGxhc3RLZXksIGN1cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIKKyAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9IGxpbmU7ICpjb2xv
biAhPSAnOicgJiYgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgLy8g
ZW1wdHkgbG9vcAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkg
CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250
aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgbGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoU3Ry
aW5nKGxpbmUsIGNvbG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQn
KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gIiI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IFN0cmluZyhjb2xvbiwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAgICAgU3RyaW5nIG9s
ZFZhbHVlID0gaGVhZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAo
IW9sZFZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBv
bGRWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7CisgICAgICAgICAgICAg
ICAgICAgIHRtcCArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXA7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0
S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gaGVhZGVyRmllbGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29u
c3QgY2hhciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIq
IGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24s
IGJvb2wgYWxsb3dIZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKKyAg
ICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0
IGZyYW1lTG9hZFJlcXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIFN0
cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dp
dGgoImZpbGU6Ly8vIikpCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmlu
Zyg4KTsKKworICAgICAgICAvLyBHZXQgZmlsZSBpbmZvCisgICAgICAgIGlmICghZ19maWxlX3Rl
c3QgKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgKEdGaWxlVGVzdCkoR19GSUxFX1RFU1RfRVhJ
U1RTIHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOworCisJLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRvIGJ1
ZmZlcgorICAgICAgICBGSUxFKiBmaWxlSGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSku
ZGF0YSgpLCAiciIpOworICAgICAgICAKKyAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gMCkKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAgICAgICAvL2J1ZmZl
ci5yZXNpemUoKTsKKworICAgICAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEo
KSwgMSwgMCwgZmlsZUhhbmRsZSk7CisKKyAgICAgICAgZmNsb3NlKGZpbGVIYW5kbGUpOworCisg
ICAgICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxF
X05PVF9GT1VORDsKKworCXJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBidWZmZXIucmVzaXplKGxlbik7CisgICAgICAgIG1lbWNweShidWZmZXIuZGF0YSgpLCBi
dWYsIGxlbik7CisgICAgfQorCisgICAgY29uc3QgY2hhciogcG9zdERhdGEgPSBidWZmZXIuZGF0
YSgpOworICAgIGludCBwb3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBpZiAo
YWxsb3dIZWFkZXJzKSB7CisgICAgICAgIGlmIChzdGFydHNXaXRoQmxhbmtMaW5lKGJ1ZmZlcikp
IHsKKyAgICAgICAgICAgIHBvc3REYXRhKys7CisgICAgICAgICAgICBwb3N0RGF0YUxlbmd0aC0t
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGxvY2F0aW9uID0gbG9jYXRpb25B
ZnRlckZpcnN0QmxhbmtMaW5lKGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0g
LTEpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYmxhbmsgbGluZSBpcyBzb21ld2hlcmUg
aW4gdGhlIG1pZGRsZSBvZiB0aGUgYnVmZmVyLCBldmVyeXRoaW5nIGJlZm9yZSBpcyB0aGUgaGVh
ZGVyCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzID0gcGFyc2VSRkM4MjJIZWFkZXJGaWVs
ZHMoYnVmZmVyLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZGF0YUxlbmd0
aCA9IGJ1ZmZlci5zaXplKCkgLSBsb2NhdGlvbjsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0
aW1lcyBwbHVnaW5zIGxpa2UgdG8gc2V0IENvbnRlbnQtTGVuZ3RoIHRoZW1zZWx2ZXMgd2hlbiB0
aGV5IHBvc3QsCisgICAgICAgICAgICAgICAgLy8gYnV0IFdlYkZvdW5kYXRpb24gZG9lcyBub3Qg
bGlrZSB0aGF0LiBTbyB3ZSB3aWxsIHJlbW92ZSB0aGUgaGVhZGVyCisgICAgICAgICAgICAgICAg
Ly8gYW5kIGluc3RlYWQgdHJ1bmNhdGUgdGhlIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBsZW5ndGgu
CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRMZW5ndGggPSBoZWFkZXJGaWVsZHMuZ2V0
KCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50TGVuZ3Ro
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoID0gbWluKGNvbnRlbnRM
ZW5ndGgudG9JbnQoKSwgKGludClkYXRhTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJG
aWVsZHMucmVtb3ZlKCJDb250ZW50LUxlbmd0aCIpOworCisgICAgICAgICAgICAgICAgcG9zdERh
dGEgKz0gbG9jYXRpb247CisgICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRhTGVu
Z3RoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVy
bCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRl
ckZpZWxkcyhoZWFkZXJGaWVsZHMpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5n
dGgpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOworCisgICAg
cmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0
YSk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBkZWZpbmVk
KEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsKKyAg
ICAgICAgICAgIGlmICghbV9uZWVkc1hFbWJlZCkgeworICAgICAgICAgICAgICAgICoodm9pZCAq
Kil2YWx1ZSA9IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4obV93aW5k
b3cpLT54dGNsaWVudC54dGRpc3BsYXkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBO
VlRvb2xraXQ6IHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICAqKCh1aW50MzIgKil2
YWx1ZSkgPSAyOworI2Vsc2UKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IDA7Cisj
ZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVkQm9vbDogeworI2lmIGRlZmluZWQoR0RLX1dJ
TkRPV0lOR19YMTEpCisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworI2Vs
c2UKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewor
CSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VS
Uk9SOworCisgICAgICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJl
bnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJu
IHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAg
ICAgICAgICAgaWYgKHdpbmRvd1NjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1Jl
dGFpbk9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9
ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisJICAgIGlmICht
X2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAg
ICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAg
ICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNU
YWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAg
ICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0lu
RWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJl
dHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6
IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4K
KyAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05Q
Tl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoq
IHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7
CisKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlm
CisKKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZvaWQq
IHcgPSByZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSk7CisKKyNpZmRlZiBHREtfV0lORE9X
SU5HX1gxMQorICAgICAgICAgICAgKigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1coY29u
dGFpbmluZ1dpbmRvdygpLT53aW5kb3cpOworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19X
SU4zMgorICAgICAgICAgICAgKigoSFdORCAqKXcpID0gR0RLX1dJTkRPV0lOR19IV05EKGNvbnRh
aW5pbmdXaW5kb3coKS0+d2luZG93KTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52
YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBp
bnZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVj
dC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRv
bSAtIHJlY3QtPnRvcCk7CisgICAgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKK30KKwordm9p
ZCBQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdygpCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAg
ICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhjb250YWluaW5nV2luZG93KCkpOworfQorCitQbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fcmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJh
bUNvdW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50
KTsKKworICAgIG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRo
aXMpOworCisgICAgaWYgKG1fcGx1Z2luICYmICEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpKQorICAgICAgICBtX3BsdWdpbi0+dW5sb2Fk
KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRp
YWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOwor
CisgICAgaWYgKCFtX3BsdWdpbikgeworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2lu
U3RhdHVzQ2FuTm90RmluZFBsdWdpbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fcGx1Z2luLT5sb2FkKCkpIHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBt
X3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXN0YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5T
dGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBs
dWdpbkZ1bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwg
Jm1fbmVlZHNYRW1iZWQpOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBp
ZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICBtX3dpbmRvdyA9IGd0a19zb2NrZXRfbmV3KCk7
CisgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFtZS0+
dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLCBtX3dpbmRvdyk7CisgICAgICAgIHNldEd0a1dp
ZGdldChtX3dpbmRvdyk7CisgICAgfSBlbHNlIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAg
bV93aW5kb3cgPSBndGtfeHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmlu
Z1dpbmRvdygpLT53aW5kb3csIDApOworCXNldEd0a1dpZGdldChtX3dpbmRvdyk7CisgICAgfQor
I2Vsc2UKKyAgICBtX3dpbmRvdyA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihtX3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5k
b3coKSksIG1fd2luZG93KTsKKyAgICBzZXRHdGtXaWRnZXQobV93aW5kb3cpOworI2VuZGlmCisg
ICAgc2hvdyAoKTsKKworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyNpZiBkZWZpbmVkKEdES19X
SU5ET1dJTkdfWDExKQorCU5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3Qgd3M7CisKKwl3cy50eXBl
ID0gMDsKKworCWlmIChtX25lZWRzWEVtYmVkKSB7CisJICAgIHdzLmRpc3BsYXkgPSBHREtfV0lO
RE9XX1hESVNQTEFZKG1fd2luZG93LT53aW5kb3cpOworCSAgICB3cy52aXN1YWwgPSBHREtfVklT
VUFMX1hWSVNVQUwoZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2luZG93
LT53aW5kb3cpKSk7CisJICAgIHdzLmRlcHRoID0gZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RL
X0RSQVdBQkxFKG1fd2luZG93LT53aW5kb3cpKS0+ZGVwdGg7CisJICAgIHdzLmNvbG9ybWFwID0g
R0RLX0NPTE9STUFQX1hDT0xPUk1BUChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19EUkFX
QUJMRShtX3dpbmRvdy0+d2luZG93KSkpOworCX0gZWxzZSB7CisJICAgIHdzLmRpc3BsYXkgPSBH
VEtfWFRCSU4obV93aW5kb3cpLT54dGRpc3BsYXk7CisJICAgIHdzLnZpc3VhbCA9IEdUS19YVEJJ
TihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0dmlzdWFsOworCSAgICB3cy5kZXB0aCA9IEdUS19YVEJJ
TihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0ZGVwdGg7CisJICAgIHdzLmNvbG9ybWFwID0gR1RLX1hU
QklOKG1fd2luZG93KS0+eHRjbGllbnQueHRjb2xvcm1hcDsKKworCSAgICBYRmx1c2ggKHdzLmRp
c3BsYXkpOworCX0KKworCW1fbnBXaW5kb3cud3NfaW5mbyA9ICZ3czsKKyNlbmRpZgorICAgIH0K
KworICAgIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBX
aW5kb3dUeXBlV2luZG93OworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisJaWYgKG1f
bmVlZHNYRW1iZWQpCisJICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKUdES19XSU5ET1df
WFdJTkRPVyhtX3dpbmRvdy0+d2luZG93KTsKKwllbHNlCisJICAgIG1fbnBXaW5kb3cud2luZG93
ID0gKHZvaWQqKUdUS19YVEJJTihtX3dpbmRvdyktPnh0d2luZG93OworI2VsaWYgZGVmaW5lZChH
REtfV0lORE9XSU5HX1dJTjMyKQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilH
REtfV0lORE9XX0hXTkQobV93aW5kb3ctPndpbmRvdyk7CisjZW5kaWYKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAg
bV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAgIH0KKworICAgIGlmICghKG1fcGx1Z2luLT5xdWly
a3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAg
ICAgIHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uYwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTQxIEBACisv
KiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDI7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1i
YXNpYy1vZmZzZXQ6IDIgLSotCisgKiB2aW06ZXhwYW5kdGFiOnNoaWZ0d2lkdGg9Mjp0YWJzdG9w
PTI6ICovCisgCisvKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9u
OiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAq
IDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICog
U29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBiYXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAq
IExpY2Vuc2UuCisgKgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIEd0azJYdEJpbiBXaWRn
ZXQgSW1wbGVtZW50YXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBP
cmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9ucyBj
cmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCisg
KiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQ29u
dHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgor
ICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBs
YXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJv
dmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxl
IG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwg
YW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lv
biBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGgg
dGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBv
ciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAq
IHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisg
KgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKyAKKy8qCisgKiBUaGUgR3Rr
WHRCaW4gd2lkZ2V0IGFsbG93cyBmb3IgWHQgdG9vbGtpdCBjb2RlIHRvIGJlIHVzZWQKKyAqIGlu
c2lkZSBhIEdUSyBhcHBsaWNhdGlvbi4gIAorICovCisKKyN1bmRlZiBHVEtfRElTQUJMRV9ERVBS
RUNBVEVECisKKyNpbmNsdWRlICJ4ZW1iZWQuaCIKKyNpbmNsdWRlICJndGsyeHRiaW4uaCIKKyNp
bmNsdWRlIDxndGsvZ3RrbWFpbi5oPgorI2luY2x1ZGUgPGd0ay9ndGtwcml2YXRlLmg+CisjaW5j
bHVkZSA8Z2RrL2dka3guaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+
CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisv
KiBYbGliL1h0IHN0dWZmICovCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEv
WHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvU2hlbGwuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmluc2lj
Lmg+CisjaW5jbHVkZSA8WDExL1N0cmluZ0RlZnMuaD4KKworLyogdW5jb21tZW50IHRoaXMgaWYg
eW91IHdhbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHdpZGdldAorICAgY3JlYXRpb24g
YW5kIGRlc3RydWN0aW9uICovCisjdW5kZWYgREVCVUdfWFRCSU4KKworI2RlZmluZSBYVEJJTl9N
QVhfRVZFTlRTIDMwCisKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2NsYXNzX2lu
aXQgKEd0a1h0QmluQ2xhc3MgKmtsYXNzKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0
YmluX2luaXQgICAgICAgKEd0a1h0QmluICAgICAgKnh0YmluKTsKK3N0YXRpYyB2b2lkICAgICAg
ICAgICAgZ3RrX3h0YmluX3JlYWxpemUgICAgKEd0a1dpZGdldCAgICAgICp3aWRnZXQpOworc3Rh
dGljIHZvaWQgICAgICAgICAgICBndGtfeHRiaW5fdW5yZWFsaXplICAgIChHdGtXaWRnZXQgICAg
ICAqd2lkZ2V0KTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgZ3RrX3h0YmluX2Rlc3Ryb3kgICAg
KEd0a09iamVjdCAgICAgICpvYmplY3QpOworc3RhdGljIHZvaWQgICAgICAgICAgICBndGtfeHRi
aW5fc2h1dGRvd24gICAoR3RrT2JqZWN0ICAgICAgKm9iamVjdCk7CisKKy8qIFh0IGF3YXJlIFhF
bWJlZCAqLworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2luaXQgICAgICAoWHRDbGllbnQg
KiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXN1
YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bG9ybWFwIHh0Y29sb3JtYXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHh0ZGVwdGgpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2NyZWF0ZSAgICAo
WHRDbGllbnQgKiB4dGNsaWVudCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXaW5kb3cgZW1iZWRlciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCB3aWR0aCApOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X3VucmVhbGl6ZSAoWHRD
bGllbnQqIHh0Y2xpZW50KTsKK3N0YXRpYyB2b2lkICAgICAgIHh0X2NsaWVudF9kZXN0cm95ICAg
KFh0Q2xpZW50KiB4dGNsaWVudCk7CitzdGF0aWMgdm9pZCAgICAgICB4dF9jbGllbnRfc2V0X2lu
Zm8gIChXaWRnZXQgeHRwbHVnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2V2
ZW50X2hhbmRsZXIgKFdpZGdldCB3LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAg
eHRfY2xpZW50X2hhbmRsZV94ZW1iZWRfbWVzc2FnZSAoV2lkZ2V0IHcsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9k
YXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhFdmVudCAqZXZlbnQpOworc3RhdGljIHZvaWQgICAgICAgeHRfY2xpZW50X2ZvY3VzX2xpc3Rl
bmVyICAgICAgIChXaWRnZXQgdywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdXNlcl9kYXRhLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQpOworc3RhdGlj
IHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVz
ZXJfZGF0YSApOworc3RhdGljIHZvaWQgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUg
KCBXaWRnZXQgdHJlZXJvb3QsIFh0UG9pbnRlciB1c2VyX2RhdGEpOyAKK3N0YXRpYyB2b2lkICAg
ICAgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lcihXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0
YSk7CitzdGF0aWMgdm9pZCAgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlIChYdENsaWVudCAqeHRj
bGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIG1lc3Nh
Z2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkZXRhaWws
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkYXRhMSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRhdGEyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lKTsgIAorc3RhdGljIGlu
dCAgICAgICAgZXJyb3JfaGFuZGxlciAgICAgICAoRGlzcGxheSAqZGlzcGxheSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRXJyb3JFdmVudCAqZXJyb3IpOworLyog
Rm9yIGVycm9yIHRyYXAgb2YgWEVtYmVkICovCitzdGF0aWMgdm9pZCAgICAgICB0cmFwX2Vycm9y
cyh2b2lkKTsKK3N0YXRpYyBpbnQgICAgICAgIHVudHJhcF9lcnJvcih2b2lkKTsKK3N0YXRpYyBp
bnQgICAgICAgICgqb2xkX2Vycm9yX2hhbmRsZXIpIChEaXNwbGF5ICosIFhFcnJvckV2ZW50ICop
Oworc3RhdGljIGludCAgICAgICAgdHJhcHBlZF9lcnJvcl9jb2RlID0gMDsKKworc3RhdGljIEd0
a1dpZGdldENsYXNzICpwYXJlbnRfY2xhc3MgPSBOVUxMOworCitzdGF0aWMgRGlzcGxheSAgICAg
ICAgICp4dGRpc3BsYXkgPSBOVUxMOworc3RhdGljIFN0cmluZyAgICAgICAgICAqZmFsbGJhY2sg
PSBOVUxMOworc3RhdGljIGdib29sZWFuICAgICAgICAgeHRfaXNfaW5pdGlhbGl6ZWQgPSBGQUxT
RTsKK3N0YXRpYyBnaW50ICAgICAgICAgICAgIG51bV93aWRnZXRzID0gMDsKKworc3RhdGljIEdQ
b2xsRkQgICAgICAgICAgeHRfZXZlbnRfcG9sbF9mZDsKK3N0YXRpYyBnaW50ICAgICAgICAgICAg
IHh0X3BvbGxpbmdfdGltZXJfaWQgPSAwOworc3RhdGljIGd1aW50ICAgICAgICAgICAgdGFnID0g
MDsKKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9wcmVwYXJlIChHU291cmNlKiAgc291cmNl
X2RhdGEsCisgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgKnRpbWVvdXQpCit7ICAgCisgIGlu
dCBtYXNrOworCisgIEdES19USFJFQURTX0VOVEVSKCk7CisgIG1hc2sgPSBYUGVuZGluZyh4dGRp
c3BsYXkpOworICBHREtfVEhSRUFEU19MRUFWRSgpOworCisgIHJldHVybiAoZ2Jvb2xlYW4pbWFz
azsKK30KKworc3RhdGljIGdib29sZWFuCit4dF9ldmVudF9jaGVjayAoR1NvdXJjZSogIHNvdXJj
ZV9kYXRhKQoreworICBHREtfVEhSRUFEU19FTlRFUiAoKTsKKworICBpZiAoeHRfZXZlbnRfcG9s
bF9mZC5yZXZlbnRzICYgR19JT19JTikgeworICAgIGludCBtYXNrOworICAgIG1hc2sgPSBYUGVu
ZGluZyh4dGRpc3BsYXkpOworICAgIEdES19USFJFQURTX0xFQVZFICgpOworICAgIHJldHVybiAo
Z2Jvb2xlYW4pbWFzazsKKyAgfQorCisgIEdES19USFJFQURTX0xFQVZFICgpOworICByZXR1cm4g
RkFMU0U7Cit9ICAgCisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfZGlzcGF0Y2ggKEdTb3Vy
Y2UqICBzb3VyY2VfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMgY2FsbF9i
YWNrLAorICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgdXNlcl9kYXRhKQoreworICBYRXZl
bnQgZXZlbnQ7CisgIFh0QXBwQ29udGV4dCBhYzsKKyAgaW50IGkgPSAwOworCisgIGFjID0gWHRE
aXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoeHRkaXNwbGF5KTsKKworICBHREtfVEhSRUFEU19F
TlRFUiAoKTsKKworICAvKiBQcm9jZXNzIG9ubHkgcmVhbCBYIHRyYWZmaWMgaGVyZS4gIFdlIG9u
bHkgbG9vayBmb3IgZGF0YSBvbiB0aGUKKyAgICogcGlwZSwgbGltaXQgaXQgdG8gWFRCSU5fTUFY
X0VWRU5UUyBhbmQgb25seSBjYWxsCisgICAqIFh0QXBwUHJvY2Vzc0V2ZW50IHNvIHRoYXQgaXQg
d2lsbCBsb29rIGZvciBYIGV2ZW50cy4gIFRoZXJlJ3Mgbm8KKyAgICogdGltZXIgcHJvY2Vzc2lu
ZyBoZXJlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHRpbWVyIGNhbGxiYWNrIHRoYXQKKyAgICog
ZG9lcyBpdC4gICovCisgIGZvciAoaT0wOyBpIDwgWFRCSU5fTUFYX0VWRU5UUyAmJiBYUGVuZGlu
Zyh4dGRpc3BsYXkpOyBpKyspIHsKKyAgICBYdEFwcFByb2Nlc3NFdmVudChhYywgWHRJTVhFdmVu
dCk7CisgIH0KKworICBHREtfVEhSRUFEU19MRUFWRSAoKTsKKworICByZXR1cm4gVFJVRTsgIAor
fQorCitzdGF0aWMgR1NvdXJjZUZ1bmNzIHh0X2V2ZW50X2Z1bmNzID0geworICB4dF9ldmVudF9w
cmVwYXJlLAorICB4dF9ldmVudF9jaGVjaywKKyAgeHRfZXZlbnRfZGlzcGF0Y2gsCisgIGdfZnJl
ZSwKKyAgKEdTb3VyY2VGdW5jKU5VTEwsCisgIChHU291cmNlRHVtbXlNYXJzaGFsKU5VTEwKK307
CisKK3N0YXRpYyBnYm9vbGVhbgoreHRfZXZlbnRfcG9sbGluZ190aW1lcl9jYWxsYmFjayhncG9p
bnRlciB1c2VyX2RhdGEpCit7CisgIERpc3BsYXkgKiBkaXNwbGF5OworICBYdEFwcENvbnRleHQg
YWM7CisgIGludCBldmVudHNUb1Byb2Nlc3MgPSAyMDsKKworICBkaXNwbGF5ID0gKERpc3BsYXkg
Kil1c2VyX2RhdGE7CisgIGFjID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQoZGlzcGxh
eSk7CisKKyAgLyogV2UgbmVlZCB0byBwcm9jZXNzIG1hbnkgWHQgZXZlbnRzIGhlcmUuIElmIHdl
IGp1c3QgcHJvY2VzcworICAgICBvbmUgZXZlbnQgd2UgbWlnaHQgc3RhcnZlIG9uZSBvciBtb3Jl
IFh0IGNvbnN1bWVycy4gT24gdGhlIG90aGVyIGhhbmQKKyAgICAgdGhpcyBjb3VsZCBoYW5nIHRo
ZSB3aG9sZSBhcHAgaWYgWHQgZXZlbnRzIGNvbWUgcG91cmluZyBpbi4gU28gcHJvY2VzcworICAg
ICB1cCB0byAyMCBYdCBldmVudHMgcmlnaHQgbm93IGFuZCBzYXZlIHRoZSByZXN0IGZvciBsYXRl
ci4gVGhpcyBpcyBhIGhhY2ssCisgICAgIGJ1dCBpdCBvdWdodGEgd29yay4gV2UgKnJlYWxseSog
c2hvdWxkIGhhdmUgb3V0IG9mIHByb2Nlc3MgcGx1Z2lucy4KKyAgKi8KKyAgd2hpbGUgKGV2ZW50
c1RvUHJvY2Vzcy0tICYmIFh0QXBwUGVuZGluZyhhYykpCisgICAgWHRBcHBQcm9jZXNzRXZlbnQo
YWMsIFh0SU1BbGwpOworICByZXR1cm4gVFJVRTsKK30KKworR3RrVHlwZQorZ3RrX3h0YmluX2dl
dF90eXBlICh2b2lkKQoreworICBzdGF0aWMgR3RrVHlwZSB4dGJpbl90eXBlID0gMDsKKworICBp
ZiAoIXh0YmluX3R5cGUpIHsKKyAgICAgIHN0YXRpYyBjb25zdCBHdGtUeXBlSW5mbyB4dGJpbl9p
bmZvID0KKyAgICAgIHsKKyAgICAgICAgIkd0a1h0QmluIiwKKyAgICAgICAgc2l6ZW9mIChHdGtY
dEJpbiksCisgICAgICAgIHNpemVvZiAoR3RrWHRCaW5DbGFzcyksCisgICAgICAgIChHdGtDbGFz
c0luaXRGdW5jKSBndGtfeHRiaW5fY2xhc3NfaW5pdCwKKyAgICAgICAgKEd0a09iamVjdEluaXRG
dW5jKSBndGtfeHRiaW5faW5pdCwKKyAgICAgICAgLyogcmVzZXJ2ZWRfMSAqLyBOVUxMLAorICAg
ICAgICAvKiByZXNlcnZlZF8yICovIE5VTEwsCisgICAgICAgIChHdGtDbGFzc0luaXRGdW5jKSBO
VUxMCisgICAgICB9OworICAgICAgeHRiaW5fdHlwZSA9IGd0a190eXBlX3VuaXF1ZSAoR1RLX1RZ
UEVfU09DS0VULCAmeHRiaW5faW5mbyk7CisgICAgfQorICByZXR1cm4geHRiaW5fdHlwZTsKK30K
Kworc3RhdGljIHZvaWQKK2d0a194dGJpbl9jbGFzc19pbml0IChHdGtYdEJpbkNsYXNzICprbGFz
cykKK3sKKyAgR3RrV2lkZ2V0Q2xhc3MgKndpZGdldF9jbGFzczsKKyAgR3RrT2JqZWN0Q2xhc3Mg
Km9iamVjdF9jbGFzczsKKworICBwYXJlbnRfY2xhc3MgPSBndGtfdHlwZV9jbGFzcyAoR1RLX1RZ
UEVfU09DS0VUKTsKKworICB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTIChrbGFzcyk7
CisgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IGd0a194dGJpbl9yZWFsaXplOworICB3aWRnZXRf
Y2xhc3MtPnVucmVhbGl6ZSA9IGd0a194dGJpbl91bnJlYWxpemU7CisKKyAgb2JqZWN0X2NsYXNz
ID0gR1RLX09CSkVDVF9DTEFTUyAoa2xhc3MpOworICBvYmplY3RfY2xhc3MtPmRlc3Ryb3kgPSBn
dGtfeHRiaW5fZGVzdHJveTsKK30KKworc3RhdGljIHZvaWQKK2d0a194dGJpbl9pbml0IChHdGtY
dEJpbiAqeHRiaW4pCit7CisgIHh0YmluLT54dGRpc3BsYXkgPSBOVUxMOworICB4dGJpbi0+cGFy
ZW50X3dpbmRvdyA9IE5VTEw7CisgIHh0YmluLT54dHdpbmRvdyA9IDA7CisgIHh0YmluLT54ID0g
MDsKKyAgeHRiaW4tPnkgPSAwOworfQorCitzdGF0aWMgdm9pZAorZ3RrX3h0YmluX3JlYWxpemUg
KEd0a1dpZGdldCAqd2lkZ2V0KQoreworICBHdGtYdEJpbiAgICAgKnh0YmluOworICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDIwMCwgMjAwIH07CisgIGdpbnQgIHgsIHksIHcs
IGgsIGQ7IC8qIGdlb21ldHJ5IG9mIHdpbmRvdyAqLworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAg
cHJpbnRmKCJndGtfeHRiaW5fcmVhbGl6ZSgpXG4iKTsKKyNlbmRpZgorCisgIGdfcmV0dXJuX2lm
X2ZhaWwgKEdUS19JU19YVEJJTiAod2lkZ2V0KSk7CisKKyAgeHRiaW4gPSBHVEtfWFRCSU4gKHdp
ZGdldCk7CisKKyAgLyogY2FjdWxhdGUgdGhlIGFsbG9jYXRpb24gYmVmb3JlIHJlYWxpemUgKi8K
KyAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoeHRiaW4tPnBhcmVudF93aW5kb3csICZ4LCAmeSwg
JncsICZoLCAmZCk7CisgIGFsbG9jYXRpb24ud2lkdGggPSB3OworICBhbGxvY2F0aW9uLmhlaWdo
dCA9IGg7CisgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZSAod2lkZ2V0LCAmYWxsb2NhdGlvbik7
CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImluaXRpYWwgYWxsb2NhdGlvbiAlZCAl
ZCAlZCAlZFxuIiwgeCwgeSwgdywgaCk7CisjZW5kaWYKKworICB4dGJpbi0+d2lkdGggPSB3aWRn
ZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgIHh0YmluLT5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRp
b24uaGVpZ2h0OworCisgIC8qIHVzZSBHdGtTb2NrZXQncyByZWFsaXplICovCisgICgqR1RLX1dJ
REdFVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5yZWFsaXplKSh3aWRnZXQpOworCisgIC8qIGNyZWF0
ZSB0aGUgWHQgY2xpZW50IHdpZGdldCAqLworICB4dF9jbGllbnRfY3JlYXRlKCYoeHRiaW4tPnh0
Y2xpZW50KSwgCisgICAgICAgZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVCh4dGJpbikpLCAK
KyAgICAgICB4dGJpbi0+aGVpZ2h0LCAKKyAgICAgICB4dGJpbi0+d2lkdGgpOworICB4dGJpbi0+
eHR3aW5kb3cgPSBYdFdpbmRvdyh4dGJpbi0+eHRjbGllbnQuY2hpbGRfd2lkZ2V0KTsKKworICBn
ZGtfZmx1c2goKTsKKworICAvKiBub3cgdGhhdCB3ZSBoYXZlIGNyZWF0ZWQgdGhlIHh0IGNsaWVu
dCwgYWRkIGl0IHRvIHRoZSBzb2NrZXQuICovCisgIGd0a19zb2NrZXRfYWRkX2lkKEdUS19TT0NL
RVQod2lkZ2V0KSwgeHRiaW4tPnh0d2luZG93KTsKK30KKworCisKK0d0a1dpZGdldCoKK2d0a194
dGJpbl9uZXcgKEdka1dpbmRvdyAqcGFyZW50X3dpbmRvdywgU3RyaW5nICogZikKK3sKKyAgR3Rr
WHRCaW4gKnh0YmluOworICBncG9pbnRlciB1c2VyX2RhdGE7CisKKyAgYXNzZXJ0KHBhcmVudF93
aW5kb3cgIT0gTlVMTCk7CisgIHh0YmluID0gZ3RrX3R5cGVfbmV3IChHVEtfVFlQRV9YVEJJTik7
CisKKyAgaWYgKCF4dGJpbikKKyAgICByZXR1cm4gKEd0a1dpZGdldCopTlVMTDsKKworICBpZiAo
ZikKKyAgICBmYWxsYmFjayA9IGY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgWHQgdG9vbGtpdCAq
LworICB4dGJpbi0+cGFyZW50X3dpbmRvdyA9IHBhcmVudF93aW5kb3c7CisKKyAgeHRfY2xpZW50
X2luaXQoJih4dGJpbi0+eHRjbGllbnQpLCAKKyAgICAgIEdES19WSVNVQUxfWFZJU1VBTChnZGtf
cmdiX2dldF92aXN1YWwoKSksCisgICAgICBHREtfQ09MT1JNQVBfWENPTE9STUFQKGdka19yZ2Jf
Z2V0X2NvbG9ybWFwKCkpLAorICAgICAgZ2RrX3JnYl9nZXRfdmlzdWFsKCktPmRlcHRoKTsKKwor
ICBpZiAoIXh0YmluLT54dGNsaWVudC54dGRpc3BsYXkpIHsKKyAgICAvKiBJZiBYdE9wZW5EaXNw
bGF5IGZhaWxlZCwgd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIuCisgICAgICogIEJhaWwgb3V0Lgor
ICAgICAqLworI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJndGtfeHRiaW5faW5pdDog
WHRPcGVuRGlzcGxheSgpIHJldHVybmVkIE5VTEwuXG4iKTsKKyNlbmRpZgorICAgIGdfZnJlZSAo
eHRiaW4pOworICAgIHJldHVybiAoR3RrV2lkZ2V0ICopTlVMTDsKKyAgfQorCisgIC8qIElmIHRo
aXMgaXMgdGhlIGZpcnN0IHJ1bm5pbmcgd2lkZ2V0LCBob29rIHRoaXMgZGlzcGxheSBpbnRvIHRo
ZQorICAgICBtYWlubG9vcCAqLworICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgeworICAgIGludCAg
ICAgICAgICAgY251bWJlcjsKKyAgICAvKgorICAgICAqIGhvb2sgWHQgZXZlbnQgbG9vcCBpbnRv
IHRoZSBnbGliIGV2ZW50IGxvb3AuCisgICAgICovCisKKyAgICAvKiB0aGUgYXNzdW1wdGlvbiBp
cyB0aGF0IGd0a19pbml0IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkICovCisgICAgR1NvdXJjZSog
Z3MgPSBnX3NvdXJjZV9uZXcoJnh0X2V2ZW50X2Z1bmNzLCBzaXplb2YoR1NvdXJjZSkpOworICAg
ICAgaWYgKCFncykgeworICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorICAgIAorICAgIGdf
c291cmNlX3NldF9wcmlvcml0eShncywgR0RLX1BSSU9SSVRZX0VWRU5UUyk7CisgICAgZ19zb3Vy
Y2Vfc2V0X2Nhbl9yZWN1cnNlKGdzLCBUUlVFKTsKKyAgICB0YWcgPSBnX3NvdXJjZV9hdHRhY2go
Z3MsIChHTWFpbkNvbnRleHQqKU5VTEwpOworI2lmZGVmIFZNUworICAgIGNudW1iZXIgPSBYQ29u
bmVjdGlvbk51bWJlcih4dGRpc3BsYXkpOworI2Vsc2UKKyAgICBjbnVtYmVyID0gQ29ubmVjdGlv
bk51bWJlcih4dGRpc3BsYXkpOworI2VuZGlmCisgICAgeHRfZXZlbnRfcG9sbF9mZC5mZCA9IGNu
dW1iZXI7CisgICAgeHRfZXZlbnRfcG9sbF9mZC5ldmVudHMgPSBHX0lPX0lOOyAKKyAgICB4dF9l
dmVudF9wb2xsX2ZkLnJldmVudHMgPSAwOyAgICAvKiBobW0uLi4gaXMgdGhpcyBjb3JyZWN0PyAq
LworCisgICAgZ19tYWluX2NvbnRleHRfYWRkX3BvbGwgKChHTWFpbkNvbnRleHQqKU5VTEwsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHRfZXZlbnRfcG9sbF9mZCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfTE9XKTsKKyAgICAvKiBhZGQgYSB0aW1l
ciBzbyB0aGF0IHdlIGNhbiBwb2xsIGFuZCBwcm9jZXNzIFh0IHRpbWVycyAqLworICAgIHh0X3Bv
bGxpbmdfdGltZXJfaWQgPQorICAgICAgZ3RrX3RpbWVvdXRfYWRkKDI1LAorICAgICAgICAgICAg
ICAgICAgICAgIChHdGtGdW5jdGlvbil4dF9ldmVudF9wb2xsaW5nX3RpbWVyX2NhbGxiYWNrLAor
ICAgICAgICAgICAgICAgICAgICAgIHh0ZGlzcGxheSk7CisgIH0KKworICAvKiBCdW1wIHVwIG91
ciB1c2FnZSBjb3VudCAqLworICBudW1fd2lkZ2V0cysrOworCisgIC8qIEJ1aWxkIHRoZSBoaWVy
YWNoeSAqLworICB4dGJpbi0+eHRkaXNwbGF5ID0geHRiaW4tPnh0Y2xpZW50Lnh0ZGlzcGxheTsK
KyAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyhHVEtfV0lER0VUKHh0YmluKSwgcGFyZW50
X3dpbmRvdyk7CisgIGdka193aW5kb3dfZ2V0X3VzZXJfZGF0YSh4dGJpbi0+cGFyZW50X3dpbmRv
dywgJnVzZXJfZGF0YSk7CisgIGlmICh1c2VyX2RhdGEpCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUih1c2VyX2RhdGEpLCBHVEtfV0lER0VUKHh0YmluKSk7CisKKyAgcmV0dXJu
IEdUS19XSURHRVQgKHh0YmluKTsKK30KKwordm9pZAorZ3RrX3h0YmluX3NldF9wb3NpdGlvbiAo
R3RrWHRCaW4gKnh0YmluLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB4LAor
ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICB5KQoreworICB4dGJpbi0+eCA9IHg7
CisgIHh0YmluLT55ID0geTsKKworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAoeHRiaW4pKQor
ICAgIGdka193aW5kb3dfbW92ZSAoR1RLX1dJREdFVCAoeHRiaW4pLT53aW5kb3csIHgsIHkpOwor
fQorCit2b2lkCitndGtfeHRiaW5fcmVzaXplIChHdGtXaWRnZXQgKndpZGdldCwKKyAgICAgICAg
ICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
IGhlaWdodCkKK3sKKyAgQXJnIGFyZ3NbMl07CisgIEd0a1h0QmluICp4dGJpbiA9IEdUS19YVEJJ
TiAod2lkZ2V0KTsKKyAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworCisjaWZkZWYgREVCVUdf
WFRCSU4KKyAgcHJpbnRmKCJndGtfeHRiaW5fcmVzaXplICVwICVkICVkXG4iLCAodm9pZCAqKXdp
ZGdldCwgd2lkdGgsIGhlaWdodCk7CisjZW5kaWYKKworICB4dGJpbi0+aGVpZ2h0ID0gaGVpZ2h0
OworICB4dGJpbi0+d2lkdGggID0gd2lkdGg7CisKKyAgLy8gQXZvaWQgQmFkVmFsdWUgZXJyb3Jz
IGluIFh0U2V0VmFsdWVzCisgIGlmIChoZWlnaHQgPD0gMCB8fCB3aWR0aCA8PTApIHsKKyAgICBo
ZWlnaHQgPSAxOworICAgIHdpZHRoID0gMTsKKyAgfQorICBYdFNldEFyZyhhcmdzWzBdLCBYdE5o
ZWlnaHQsIGhlaWdodCk7CisgIFh0U2V0QXJnKGFyZ3NbMV0sIFh0TndpZHRoLCAgd2lkdGgpOwor
ICBYdFNldFZhbHVlcyh4dGJpbi0+eHRjbGllbnQudG9wX3dpZGdldCwgYXJncywgMik7CisKKyAg
Lyogd2UgbmVlZCB0byBzZW5kIGEgc2l6ZSBhbGxvY2F0ZSBzbyB0aGUgc29ja2V0IGtub3dzIGFi
b3V0IHRoZQorICAgICBzaXplIGNoYW5nZXMgKi8KKyAgYWxsb2NhdGlvbi54ID0geHRiaW4tPng7
CisgIGFsbG9jYXRpb24ueSA9IHh0YmluLT55OworICBhbGxvY2F0aW9uLndpZHRoID0geHRiaW4t
PndpZHRoOworICBhbGxvY2F0aW9uLmhlaWdodCA9IHh0YmluLT5oZWlnaHQ7CisKKyAgZ3RrX3dp
ZGdldF9zaXplX2FsbG9jYXRlKHdpZGdldCwgJmFsbG9jYXRpb24pOworfQorCitzdGF0aWMgdm9p
ZAorZ3RrX3h0YmluX3VucmVhbGl6ZSAoR3RrV2lkZ2V0ICpvYmplY3QpCit7CisgIEd0a1h0Qmlu
ICp4dGJpbjsKKyAgR3RrV2lkZ2V0ICp3aWRnZXQ7CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBw
cmludGYoImd0a194dGJpbl91bnJlYWxpemUoKVxuIik7CisjZW5kaWYKKworICAvKiBndGtfb2Jq
ZWN0X2Rlc3Ryb3koKSB3aWxsIGFscmVhZHkgaG9sZCBhIHJlZmNvdW50IG9uIG9iamVjdAorICAg
Ki8KKyAgeHRiaW4gPSBHVEtfWFRCSU4ob2JqZWN0KTsKKyAgd2lkZ2V0ID0gR1RLX1dJREdFVChv
YmplY3QpOworCisgIEdUS19XSURHRVRfVU5TRVRfRkxBR1MgKHdpZGdldCwgR1RLX1ZJU0lCTEUp
OworICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCAod2lkZ2V0KSkgeworICAgIHh0X2NsaWVudF91
bnJlYWxpemUoJih4dGJpbi0+eHRjbGllbnQpKTsKKyAgfQorCisgICgqR1RLX1dJREdFVF9DTEFT
UyAocGFyZW50X2NsYXNzKS0+dW5yZWFsaXplKSh3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZAor
Z3RrX3h0YmluX2Rlc3Ryb3kgKEd0a09iamVjdCAqb2JqZWN0KQoreworICBHdGtYdEJpbiAqeHRi
aW47CisKKyNpZmRlZiBERUJVR19YVEJJTgorICBwcmludGYoImd0a194dGJpbl9kZXN0cm95KClc
biIpOworI2VuZGlmCisKKyAgZ19yZXR1cm5faWZfZmFpbCAob2JqZWN0ICE9IE5VTEwpOworICBn
X3JldHVybl9pZl9mYWlsIChHVEtfSVNfWFRCSU4gKG9iamVjdCkpOworCisgIHh0YmluID0gR1RL
X1hUQklOIChvYmplY3QpOworCisgIGlmKHh0YmluLT54dHdpbmRvdykgeworICAgIC8qIHJlbW92
ZSB0aGUgZXZlbnQgaGFuZGxlciAqLworICAgIHh0X2NsaWVudF9kZXN0cm95KCYoeHRiaW4tPnh0
Y2xpZW50KSk7CisgICAgeHRiaW4tPnh0d2luZG93ID0gMDsKKworICAgIG51bV93aWRnZXRzLS07
IC8qIHJlZHVjZSBvdXIgdXNhZ2UgY291bnQgKi8KKworICAgIC8qIElmIHRoaXMgaXMgdGhlIGxh
c3QgcnVubmluZyB3aWRnZXQsIHJlbW92ZSB0aGUgWHQgZGlzcGxheQorICAgICAgIGNvbm5lY3Rp
b24gZnJvbSB0aGUgbWFpbmxvb3AgKi8KKyAgICBpZiAoMCA9PSBudW1fd2lkZ2V0cykgeworI2lm
ZGVmIERFQlVHX1hUQklOCisgICAgICBwcmludGYoInJlbW92aW5nIHRoZSBYdCBjb25uZWN0aW9u
IGZyb20gdGhlIG1haW4gbG9vcFxuIik7CisjZW5kaWYKKyAgICAgIGdfbWFpbl9jb250ZXh0X3Jl
bW92ZV9wb2xsKChHTWFpbkNvbnRleHQqKU5VTEwsICZ4dF9ldmVudF9wb2xsX2ZkKTsKKyAgICAg
IGdfc291cmNlX3JlbW92ZSh0YWcpOworCisgICAgICBndGtfdGltZW91dF9yZW1vdmUoeHRfcG9s
bGluZ190aW1lcl9pZCk7CisgICAgICB4dF9wb2xsaW5nX3RpbWVyX2lkID0gMDsKKyAgICB9Cisg
IH0KKworICBHVEtfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmRlc3Ryb3kob2JqZWN0KTsK
K30KKworLyoKKyogRm9sbG93aW5nIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBYdCBYRW1iZWRk
ZWQgZm9yIGNsaWVudCBzaWRlCisqLworCisvKiBJbml0aWFsIFh0IHBsdWdpbiAqLworc3RhdGlj
IHZvaWQKK3h0X2NsaWVudF9pbml0KCBYdENsaWVudCAqIHh0Y2xpZW50LCAKKyAgICAgICAgICAg
ICAgICBWaXN1YWwgKnh0dmlzdWFsLCAKKyAgICAgICAgICAgICAgICBDb2xvcm1hcCB4dGNvbG9y
bWFwLAorICAgICAgICAgICAgICAgIGludCB4dGRlcHRoKQoreworICBYdEFwcENvbnRleHQgIGFw
cF9jb250ZXh0OworICBjaGFyICAgICAgICAgKm1Bcmd2WzFdOworICBpbnQgICAgICAgICAgIG1B
cmdjID0gMDsKKworICAvKgorICAgKiBJbml0aWFsaXplIFh0IHN0dWZmCisgICAqLworICB4dGNs
aWVudC0+dG9wX3dpZGdldCA9IE5VTEw7CisgIHh0Y2xpZW50LT5jaGlsZF93aWRnZXQgPSBOVUxM
OworICB4dGNsaWVudC0+eHRkaXNwbGF5ICA9IE5VTEw7CisgIHh0Y2xpZW50LT54dHZpc3VhbCAg
ID0gTlVMTDsKKyAgeHRjbGllbnQtPnh0Y29sb3JtYXAgPSAwOworICB4dGNsaWVudC0+eHRkZXB0
aCA9IDA7CisKKyAgaWYgKCF4dF9pc19pbml0aWFsaXplZCkgeworI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJzdGFydGluZyB1cCBYdCBzdHVmZlxuIik7CisjZW5kaWYKKyAgICBYdFRv
b2xraXRJbml0aWFsaXplKCk7CisgICAgYXBwX2NvbnRleHQgPSBYdENyZWF0ZUFwcGxpY2F0aW9u
Q29udGV4dCgpOworICAgIGlmIChmYWxsYmFjaykKKyAgICAgIFh0QXBwU2V0RmFsbGJhY2tSZXNv
dXJjZXMoYXBwX2NvbnRleHQsIGZhbGxiYWNrKTsKKworICAgIHh0ZGlzcGxheSA9IFh0T3BlbkRp
c3BsYXkoYXBwX2NvbnRleHQsIGdka19nZXRfZGlzcGxheSgpLCBOVUxMLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiV3JhcHBlciIsIE5VTEwsIDAsICZtQXJnYywgbUFyZ3YpOworICAg
IGlmICh4dGRpc3BsYXkpCisgICAgICB4dF9pc19pbml0aWFsaXplZCA9IFRSVUU7CisgIH0KKyAg
eHRjbGllbnQtPnh0ZGlzcGxheSAgPSB4dGRpc3BsYXk7CisgIHh0Y2xpZW50LT54dHZpc3VhbCAg
ID0geHR2aXN1YWw7CisgIHh0Y2xpZW50LT54dGNvbG9ybWFwID0geHRjb2xvcm1hcDsKKyAgeHRj
bGllbnQtPnh0ZGVwdGggICAgPSB4dGRlcHRoOworfQorCisvKiBDcmVhdGUgdGhlIFh0IGNsaWVu
dCB3aWRnZXRzCisqICAqLworc3RhdGljIHZvaWQKK3h0X2NsaWVudF9jcmVhdGUgKCBYdENsaWVu
dCogeHRjbGllbnQgLCAKKyAgICAgICAgICAgICAgICAgICBXaW5kb3cgZW1iZWRkZXJpZCwgCisg
ICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgaW50IHdp
ZHRoICkgCit7CisgIGludCAgICAgICAgICAgbjsKKyAgQXJnICAgICAgICAgICBhcmdzWzZdOwor
ICBXaWRnZXQgICAgICAgIGNoaWxkX3dpZGdldDsKKyAgV2lkZ2V0ICAgICAgICB0b3Bfd2lkZ2V0
OworCisjaWZkZWYgREVCVUdfWFRCSU4KKyAgcHJpbnRmKCJ4dF9jbGllbnRfY3JlYXRlKCkgXG4i
KTsKKyNlbmRpZgorICB0b3Bfd2lkZ2V0ID0gWHRBcHBDcmVhdGVTaGVsbCgiZHJhd2luZ0FyZWEi
LCAiV3JhcHBlciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlv
blNoZWxsV2lkZ2V0Q2xhc3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4dGNs
aWVudC0+eHRkaXNwbGF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg
MCk7CisgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0ID0gdG9wX3dpZGdldDsKKworICAvKiBzZXQgc2l6
ZSBvZiBYdCB3aW5kb3cgKi8KKyAgbiA9IDA7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TmhlaWdo
dCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHROd2lkdGgsICAgIHdpZHRo
KTtuKys7CisgIFh0U2V0VmFsdWVzKHRvcF93aWRnZXQsIGFyZ3MsIG4pOworCisgIGNoaWxkX3dp
ZGdldCA9IFh0VmFDcmVhdGVXaWRnZXQoImZvcm0iLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wb3NpdGVXaWRnZXRDbGFzcywgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9wX3dpZGdldCwgTlVMTCk7CisKKyAgbiA9IDA7CisgIFh0U2V0QXJnKGFy
Z3Nbbl0sIFh0TmhlaWdodCwgICBoZWlnaHQpO24rKzsKKyAgWHRTZXRBcmcoYXJnc1tuXSwgWHRO
d2lkdGgsICAgIHdpZHRoKTtuKys7CisgIFh0U2V0QXJnKGFyZ3Nbbl0sIFh0TnZpc3VhbCwgICB4
dGNsaWVudC0+eHR2aXN1YWwgKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5kZXB0aCwg
ICAgeHRjbGllbnQtPnh0ZGVwdGggKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBYdE5jb2xv
cm1hcCwgeHRjbGllbnQtPnh0Y29sb3JtYXAgKTsgbisrOworICBYdFNldEFyZyhhcmdzW25dLCBY
dE5ib3JkZXJXaWR0aCwgMCk7IG4rKzsKKyAgWHRTZXRWYWx1ZXMoY2hpbGRfd2lkZ2V0LCBhcmdz
LCBuKTsKKworICBYU3luYyh4dGNsaWVudC0+eHRkaXNwbGF5LCBGQUxTRSk7CisgIHh0Y2xpZW50
LT5vbGR3aW5kb3cgPSB0b3Bfd2lkZ2V0LT5jb3JlLndpbmRvdzsKKyAgdG9wX3dpZGdldC0+Y29y
ZS53aW5kb3cgPSBlbWJlZGRlcmlkOworCisgIC8qIHRoaXMgbGl0dGxlIHRyaWNrIHNlZW1zIHRv
IGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHdpZGdldCAqLworI2lmIFhsaWJTcGVjaWZpY2F0aW9u
UmVsZWFzZSA+PSA2CisgIFh0UmVnaXN0ZXJEcmF3YWJsZSh4dGNsaWVudC0+eHRkaXNwbGF5LCAK
KyAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVyaWQsCisgICAgICAgICAgICAgICAgICAgICB0
b3Bfd2lkZ2V0KTsKKyNlbHNlCisgIF9YdFJlZ2lzdGVyV2luZG93KCBlbWJlZGRlcmlkLAorICAg
ICAgICAgICAgICAgICAgICAgdG9wX3dpZGdldCk7CisjZW5kaWYKKyAgWHRSZWFsaXplV2lkZ2V0
KGNoaWxkX3dpZGdldCk7CisKKyAgLyogbGlzdGVuIHRvIGFsbCBYdCBldmVudHMgKi8KKyAgWFNl
bGVjdElucHV0KHh0Y2xpZW50LT54dGRpc3BsYXksIAorICAgICAgICAgICAgICAgWHRXaW5kb3co
dG9wX3dpZGdldCksIAorICAgICAgICAgICAgICAgMHgwRkZGRkYpOworICB4dF9jbGllbnRfc2V0
X2luZm8gKGNoaWxkX3dpZGdldCwgMCk7CisKKyAgWHRNYW5hZ2VDaGlsZChjaGlsZF93aWRnZXQp
OworICB4dGNsaWVudC0+Y2hpbGRfd2lkZ2V0ID0gY2hpbGRfd2lkZ2V0OworCisgIC8qIHNldCB0
aGUgZXZlbnQgaGFuZGxlciAqLworICBYdEFkZEV2ZW50SGFuZGxlcihjaGlsZF93aWRnZXQsCisg
ICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGICYgflJlc2l6ZVJlZGlyZWN0TWFzaywKKyAgICAg
ICAgICAgICAgICAgICAgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxl
cil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwgeHRjbGllbnQpOworICBYdEFkZEV2ZW50SGFuZGxl
cihjaGlsZF93aWRnZXQsIAorICAgICAgICAgICAgICAgICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlN
YXNrIHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAg
ICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5l
ciwgCisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgWFN5bmMoeHRjbGllbnQtPnh0
ZGlzcGxheSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAoreHRfY2xpZW50X3VucmVhbGl6ZSAo
IFh0Q2xpZW50KiB4dGNsaWVudCApCit7CisjaWYgWGxpYlNwZWNpZmljYXRpb25SZWxlYXNlID49
IDYKKyAgWHRVbnJlZ2lzdGVyRHJhd2FibGUoeHRjbGllbnQtPnh0ZGlzcGxheSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93KTsKKyNlbHNl
CisgIF9YdFVucmVnaXN0ZXJXaW5kb3coeHRjbGllbnQtPnRvcF93aWRnZXQtPmNvcmUud2luZG93
LAorICAgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50LT50b3Bfd2lkZ2V0KTsKKyNlbmRpZgor
CisgIC8qIGZsdXNoIHRoZSBxdWV1ZSBiZWZvcmUgd2UgcmV0dXJuaW5nIG9yaWdpbiB0b3Bfd2lk
Z2V0LT5jb3JlLndpbmRvdworICAgICBvciB3ZSBjYW4gZ2V0IFggZXJyb3Igc2luY2UgdGhlIHdp
bmRvdyBpcyBnb25lICovCisgIFhTeW5jKHh0Y2xpZW50LT54dGRpc3BsYXksIEZhbHNlKTsKKwor
ICB4dGNsaWVudC0+dG9wX3dpZGdldC0+Y29yZS53aW5kb3cgPSB4dGNsaWVudC0+b2xkd2luZG93
OworICBYdFVucmVhbGl6ZVdpZGdldCh4dGNsaWVudC0+dG9wX3dpZGdldCk7Cit9CisKK3N0YXRp
YyB2b2lkICAgICAgICAgICAgCit4dF9jbGllbnRfZGVzdHJveSAgIChYdENsaWVudCogeHRjbGll
bnQpCit7CisgIGlmKHh0Y2xpZW50LT50b3Bfd2lkZ2V0KSB7CisgICAgWHRSZW1vdmVFdmVudEhh
bmRsZXIoeHRjbGllbnQtPmNoaWxkX3dpZGdldCwgMHgwRkZGRkYsIFRSVUUsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgIChYdEV2ZW50SGFuZGxlcil4dF9jbGllbnRfZXZlbnRfaGFuZGxlciwg
eHRjbGllbnQpOworICAgIFh0RGVzdHJveVdpZGdldCh4dGNsaWVudC0+dG9wX3dpZGdldCk7Cisg
ICAgeHRjbGllbnQtPnRvcF93aWRnZXQgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkICAg
ICAgICAgCit4dF9jbGllbnRfc2V0X2luZm8gKFdpZGdldCB4dHBsdWcsIHVuc2lnbmVkIGxvbmcg
ZmxhZ3MpCit7CisgIHVuc2lnbmVkIGxvbmcgYnVmZmVyWzJdOworCisgIEF0b20gaW5mb0F0b20g
PSBYSW50ZXJuQXRvbShYdERpc3BsYXkoeHRwbHVnKSwgIl9YRU1CRURfSU5GTyIsIEZhbHNlKTsg
CisKKyAgYnVmZmVyWzFdID0gMDsgICAgICAgICAgICAgICAgLyogUHJvdG9jb2wgdmVyc2lvbiAq
LworICBidWZmZXJbMV0gPSBmbGFnczsKKworICBYQ2hhbmdlUHJvcGVydHkgKFh0RGlzcGxheSh4
dHBsdWcpLCBYdFdpbmRvdyh4dHBsdWcpLAorICAgICAgICAgICAgICAgICAgIGluZm9BdG9tLCBp
bmZvQXRvbSwgMzIsCisgICAgICAgICAgICAgICAgICAgUHJvcE1vZGVSZXBsYWNlLAorICAgICAg
ICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCAyKTsKK30KKworc3RhdGljIHZv
aWQKK3h0X2NsaWVudF9oYW5kbGVfeGVtYmVkX21lc3NhZ2UoV2lkZ2V0IHcsIFh0UG9pbnRlciBj
bGllbnRfZGF0YSwgWEV2ZW50ICpldmVudCkKK3sKKyAgWHRDbGllbnQgKnh0cGx1ZyA9IChYdENs
aWVudCopY2xpZW50X2RhdGE7CisgIHN3aXRjaCAoZXZlbnQtPnhjbGllbnQuZGF0YS5sWzFdKQor
ICB7CisgIGNhc2UgWEVNQkVEX0VNQkVEREVEX05PVElGWToKKyAgICBicmVhazsKKyAgY2FzZSBY
RU1CRURfV0lORE9XX0FDVElWQVRFOgorI2lmZGVmIERFQlVHX1hUQklOCisgICAgcHJpbnRmKCJY
dCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfQUNUSVZBVEVcbiIpOworI2VuZGlmCisgICAgYnJl
YWs7CisgIGNhc2UgWEVNQkVEX1dJTkRPV19ERUFDVElWQVRFOgorI2lmZGVmIERFQlVHX1hUQklO
CisgICAgcHJpbnRmKCJYdCBjbGllbnQgZ2V0IFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURVxuIik7
CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfTU9EQUxJVFlfT046CisjaWZkZWYg
REVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01PREFMSVRZX09O
XG4iKTsKKyNlbmRpZgorICAgIGJyZWFrOworICBjYXNlIFhFTUJFRF9NT0RBTElUWV9PRkY6Cisj
aWZkZWYgREVCVUdfWFRCSU4KKyAgICBwcmludGYoIlh0IGNsaWVudCBnZXQgWEVNQkVEX01PREFM
SVRZX09GRlxuIik7CisjZW5kaWYKKyAgICBicmVhazsKKyAgY2FzZSBYRU1CRURfRk9DVVNfSU46
CisgIGNhc2UgWEVNQkVEX0ZPQ1VTX09VVDoKKyAgICB7CisgICAgICBYRXZlbnQgeGV2ZW50Owor
ICAgICAgbWVtc2V0KCZ4ZXZlbnQsIDAsIHNpemVvZih4ZXZlbnQpKTsKKworICAgICAgaWYoZXZl
bnQtPnhjbGllbnQuZGF0YS5sWzFdID09IFhFTUJFRF9GT0NVU19JTikgeworI2lmZGVmIERFQlVH
X1hUQklOCisgICAgICAgIHByaW50ZigiWFRFTUJFRCBnb3QgZm9jdXMgaW5cbiIpOworI2VuZGlm
CisgICAgICAgIHhldmVudC54Zm9jdXMudHlwZSA9IEZvY3VzSW47CisgICAgICB9CisgICAgICBl
bHNlIHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgICAgICBwcmludGYoIlhURU1CRUQgZ290IGZv
Y3VzIG91dFxuIik7CisjZW5kaWYKKyAgICAgICAgeGV2ZW50Lnhmb2N1cy50eXBlID0gRm9jdXNP
dXQ7CisgICAgICB9CisKKyAgICAgIHhldmVudC54Zm9jdXMud2luZG93ID0gWHRXaW5kb3coeHRw
bHVnLT5jaGlsZF93aWRnZXQpOworICAgICAgeGV2ZW50Lnhmb2N1cy5kaXNwbGF5ID0gWHREaXNw
bGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KTsKKyAgICAgIFhTZW5kRXZlbnQoWHREaXNwbGF5KHh0
cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwgCisgICAgICAgICAgICAgICAgIHhldmVudC54Zm9jdXMud2lu
ZG93LAorICAgICAgICAgICAgICAgICBGYWxzZSwgTm9FdmVudE1hc2ssCisgICAgICAgICAgICAg
ICAgICZ4ZXZlbnQgKTsKKyAgICAgIFhTeW5jKCBYdERpc3BsYXkoeHRwbHVnLT5jaGlsZF93aWRn
ZXQpLCBGYWxzZSk7CisgICAgfQorICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIGJyZWFrOwor
ICB9IC8qIEVuZCBvZiBYRW1iZWQgTWVzc2FnZSAqLworfQorCitzdGF0aWMgdm9pZCAgICAgICAg
IAoreHRfY2xpZW50X2V2ZW50X2hhbmRsZXIoIFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2Rh
dGEsIFhFdmVudCAqZXZlbnQpCit7CisgIFh0Q2xpZW50ICp4dHBsdWcgPSAoWHRDbGllbnQqKWNs
aWVudF9kYXRhOworICAKKyAgc3dpdGNoKGV2ZW50LT50eXBlKQorICAgIHsKKyAgICBjYXNlIENs
aWVudE1lc3NhZ2U6CisgICAgICAvKiBIYW5kbGUgeGVtYmVkIG1lc3NhZ2UgKi8KKyAgICAgIGlm
IChldmVudC0+eGNsaWVudC5tZXNzYWdlX3R5cGU9PQorICAgICAgICAgICAgICAgICBYSW50ZXJu
QXRvbSAoWHREaXNwbGF5KHh0cGx1Zy0+Y2hpbGRfd2lkZ2V0KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJfWEVNQkVEIiwgRmFsc2UpKSB7CisgICAgICAgIHh0X2NsaWVudF9oYW5k
bGVfeGVtYmVkX21lc3NhZ2UodywgY2xpZW50X2RhdGEsIGV2ZW50KTsKKyAgICAgIH0KKyAgICAg
IGJyZWFrOworICAgIGNhc2UgUmVwYXJlbnROb3RpZnk6CisgICAgICBicmVhazsKKyAgICBjYXNl
IE1hcHBpbmdOb3RpZnk6CisgICAgICB4dF9jbGllbnRfc2V0X2luZm8gKHcsIFhFTUJFRF9NQVBQ
RUQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBVbm1hcE5vdGlmeToKKyAgICAgIHh0X2NsaWVu
dF9zZXRfaW5mbyAodywgMCk7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZvY3VzSW46CisgICAg
ICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRwbHVnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTLCAwLCAwLCAwLCAwKTsKKyAgICAgIGJyZWFrOworICAg
IGNhc2UgRm9jdXNPdXQ6CisgICAgICBicmVhazsKKyAgICBjYXNlIEtleVByZXNzOgorI2lmZGVm
IERFQlVHX1hUQklOCisgICAgICBwcmludGYoIktleSBQcmVzcyBHb3QhXG4iKTsKKyNlbmRpZgor
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0gLyogRW5kIG9m
IHN3aXRjaChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3NlbmRfeGVtYmVkX21l
c3NhZ2UgKFh0Q2xpZW50ICAqeHRjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICBsb25nICAg
ICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICBkZXRhaWwsIAorICAg
ICAgICAgICAgICAgICAgICAgbG9uZyAgICAgIGRhdGExLCAgCisgICAgICAgICAgICAgICAgICAg
ICBsb25nICAgICAgZGF0YTIsICAKKyAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICB0aW1l
KSAgIAoreworICBYRXZlbnQgeGV2ZW50OyAKKyAgV2luZG93IHc9WHRXaW5kb3coeHRjbGllbnQt
PnRvcF93aWRnZXQpOworICBEaXNwbGF5KiBkcHk9eHRjbGllbnQtPnh0ZGlzcGxheTsKKyAgaW50
IGVycm9yY29kZTsKKworICBtZW1zZXQoJnhldmVudCwwLHNpemVvZih4ZXZlbnQpKTsKKyAgeGV2
ZW50LnhjbGllbnQud2luZG93ID0gdzsKKyAgeGV2ZW50LnhjbGllbnQudHlwZSA9IENsaWVudE1l
c3NhZ2U7CisgIHhldmVudC54Y2xpZW50Lm1lc3NhZ2VfdHlwZSA9IFhJbnRlcm5BdG9tKGRweSwi
X1hFTUJFRCIsRmFsc2UpOworICB4ZXZlbnQueGNsaWVudC5mb3JtYXQgPSAzMjsKKyAgeGV2ZW50
LnhjbGllbnQuZGF0YS5sWzBdID0gdGltZTsgCisgIHhldmVudC54Y2xpZW50LmRhdGEubFsxXSA9
IG1lc3NhZ2U7CisgIHhldmVudC54Y2xpZW50LmRhdGEubFsyXSA9IGRldGFpbDsgCisgIHhldmVu
dC54Y2xpZW50LmRhdGEubFszXSA9IGRhdGExOworICB4ZXZlbnQueGNsaWVudC5kYXRhLmxbNF0g
PSBkYXRhMjsKKworICB0cmFwX2Vycm9ycyAoKTsKKyAgWFNlbmRFdmVudCAoZHB5LCB3LCBGYWxz
ZSwgTm9FdmVudE1hc2ssICZ4ZXZlbnQpOworICBYU3luYyAoZHB5LEZhbHNlKTsKKworICBpZigo
ZXJyb3Jjb2RlID0gdW50cmFwX2Vycm9yKCkpKSB7CisjaWZkZWYgREVCVUdfWFRCSU4KKyAgICBw
cmludGYoInNlbmRfeGVtYmVkX21lc3NhZ2UgZXJyb3IoJWQpISEhXG4iLGVycm9yY29kZSk7Cisj
ZW5kaWYKKyAgfQorfQorCitzdGF0aWMgaW50ICAgICAgICAgICAgIAorZXJyb3JfaGFuZGxlcihE
aXNwbGF5ICpkaXNwbGF5LCBYRXJyb3JFdmVudCAqZXJyb3IpCit7CisgIHRyYXBwZWRfZXJyb3Jf
Y29kZSA9IGVycm9yLT5lcnJvcl9jb2RlOworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg
ICAgICAgICAgCit0cmFwX2Vycm9ycyh2b2lkKQoreworICB0cmFwcGVkX2Vycm9yX2NvZGUgPTA7
CisgIG9sZF9lcnJvcl9oYW5kbGVyID0gWFNldEVycm9ySGFuZGxlcihlcnJvcl9oYW5kbGVyKTsK
K30KKworc3RhdGljIGludCAgICAgICAgIAordW50cmFwX2Vycm9yKHZvaWQpCit7CisgIFhTZXRF
cnJvckhhbmRsZXIob2xkX2Vycm9yX2hhbmRsZXIpOworICBpZih0cmFwcGVkX2Vycm9yX2NvZGUp
IHsKKyNpZmRlZiBERUJVR19YVEJJTgorICAgIHByaW50ZigiR2V0IFggV2luZG93IEVycm9yID0g
JWRcbiIsIHRyYXBwZWRfZXJyb3JfY29kZSk7CisjZW5kaWYKKyAgfQorICByZXR1cm4gdHJhcHBl
ZF9lcnJvcl9jb2RlOworfQorCitzdGF0aWMgdm9pZCAgICAgICAgIAoreHRfY2xpZW50X2ZvY3Vz
X2xpc3RlbmVyKCBXaWRnZXQgdywgWHRQb2ludGVyIHVzZXJfZGF0YSwgWEV2ZW50ICpldmVudCkK
K3sKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHcpOworICBYdENsaWVudCAqeHRjbGllbnQg
PSB1c2VyX2RhdGE7CisgIFdpbmRvdyB3aW4gPSBYdFdpbmRvdyh3KTsKKworICBzd2l0Y2goZXZl
bnQtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ3JlYXRlTm90aWZ5OgorICAgICAgaWYoZXZlbnQt
PnhjcmVhdGV3aW5kb3cucGFyZW50ID09IHdpbikgeworICAgICAgICBXaWRnZXQgY2hpbGQ9WHRX
aW5kb3dUb1dpZGdldCggZHB5LCBldmVudC0+eGNyZWF0ZXdpbmRvdy53aW5kb3cpOworICAgICAg
ICBpZiAoY2hpbGQpCisgICAgICAgICAgeHRfYWRkX2ZvY3VzX2xpc3RlbmVyX3RyZWUoY2hpbGQs
IHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIERlc3Ryb3lOb3Rp
Znk6CisgICAgICB4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoIHcsIHVzZXJfZGF0YSk7CisgICAg
ICBicmVhazsKKyAgICBjYXNlIFJlcGFyZW50Tm90aWZ5OgorICAgICAgaWYoZXZlbnQtPnhyZXBh
cmVudC5wYXJlbnQgPT0gd2luKSB7CisgICAgICAgIC8qIEkgYW0gdGhlIG5ldyBwYXJlbnQgKi8K
KyAgICAgICAgV2lkZ2V0IGNoaWxkPVh0V2luZG93VG9XaWRnZXQoZHB5LCBldmVudC0+eHJlcGFy
ZW50LndpbmRvdyk7CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICB4dF9hZGRfZm9jdXNf
bGlzdGVuZXJfdHJlZSggY2hpbGQsIHVzZXJfZGF0YSk7CisgICAgICB9CisgICAgICBlbHNlIGlm
KGV2ZW50LT54cmVwYXJlbnQud2luZG93ID09IHdpbikgeworICAgICAgICAvKiBJIGFtIHRoZSBu
ZXcgY2hpbGQgKi8KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAvKiBJIGFtIHRoZSBv
bGQgcGFyZW50ICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRvblJlbGVh
c2U6CisjaWYgMAorICAgICAgWFNldElucHV0Rm9jdXMoZHB5LCBYdFdpbmRvdyh4dGNsaWVudC0+
Y2hpbGRfd2lkZ2V0KSwgUmV2ZXJ0VG9QYXJlbnQsIGV2ZW50LT54YnV0dG9uLnRpbWUpOworI2Vu
ZGlmCisgICAgICBzZW5kX3hlbWJlZF9tZXNzYWdlICggeHRjbGllbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWEVNQkVEX1JFUVVFU1RfRk9DVVMsIDAsIDAsIDAsIDApOworICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0gLyogRW5kIG9mIHN3aXRj
aChldmVudC0+dHlwZSkgKi8KK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0ZW5l
ciggV2lkZ2V0IHcsIFh0UG9pbnRlciB1c2VyX2RhdGEpCit7CisgIFhXaW5kb3dBdHRyaWJ1dGVz
IGF0dHI7CisgIGxvbmcgZXZlbnRtYXNrOworICBYdENsaWVudCAqeHRjbGllbnQgPSB1c2VyX2Rh
dGE7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMgKCk7CisgIFhHZXRXaW5kb3dB
dHRyaWJ1dGVzKFh0RGlzcGxheSh3KSwgWHRXaW5kb3codyksICZhdHRyKTsKKyAgZXZlbnRtYXNr
ID0gYXR0ci55b3VyX2V2ZW50X21hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrIHwgQnV0dG9u
UmVsZWFzZU1hc2s7CisgIFhTZWxlY3RJbnB1dChYdERpc3BsYXkodyksCisgICAgICAgICAgICAg
ICBYdFdpbmRvdyh3KSwgCisgICAgICAgICAgICAgICBldmVudG1hc2spOworCisgIFh0QWRkRXZl
bnRIYW5kbGVyKHcsIAorICAgICAgICAgICAgICAgICAgICBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNr
IHwgQnV0dG9uUmVsZWFzZU1hc2ssIAorICAgICAgICAgICAgICAgICAgICBUUlVFLCAKKyAgICAg
ICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVyKXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwg
CisgICAgICAgICAgICAgICAgICAgIHh0Y2xpZW50KTsKKyAgdW50cmFwX2Vycm9yKCk7Cit9CisK
K3N0YXRpYyB2b2lkCit4dF9yZW1vdmVfZm9jdXNfbGlzdGVuZXIoV2lkZ2V0IHcsIFh0UG9pbnRl
ciB1c2VyX2RhdGEpCit7CisgIGludCBlcnJvcmNvZGU7CisKKyAgdHJhcF9lcnJvcnMgKCk7Cisg
IFh0UmVtb3ZlRXZlbnRIYW5kbGVyKHcsIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgfCBCdXR0b25S
ZWxlYXNlTWFzaywgVFJVRSwgCisgICAgICAgICAgICAgICAgICAgICAgKFh0RXZlbnRIYW5kbGVy
KXh0X2NsaWVudF9mb2N1c19saXN0ZW5lciwgdXNlcl9kYXRhKTsKKworICB1bnRyYXBfZXJyb3Io
KTsKK30KKworc3RhdGljIHZvaWQKK3h0X2FkZF9mb2N1c19saXN0ZW5lcl90cmVlICggV2lkZ2V0
IHRyZWVyb290LCBYdFBvaW50ZXIgdXNlcl9kYXRhKSAKK3sKKyAgV2luZG93IHdpbiA9IFh0V2lu
ZG93KHRyZWVyb290KTsKKyAgV2luZG93ICpjaGlsZHJlbjsKKyAgV2luZG93IHJvb3QsIHBhcmVu
dDsKKyAgRGlzcGxheSAqZHB5ID0gWHREaXNwbGF5KHRyZWVyb290KTsKKyAgdW5zaWduZWQgaW50
IGksIG5jaGlsZHJlbjsKKworICAvKiBlbnN1cmUgd2UgZG9uJ3QgYWRkIG1vcmUgdGhhbiBvbmNl
ICovCisgIHh0X3JlbW92ZV9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJfZGF0YSk7Cisg
IHh0X2FkZF9mb2N1c19saXN0ZW5lciggdHJlZXJvb3QsIHVzZXJfZGF0YSk7CisgIHRyYXBfZXJy
b3JzKCk7CisgIGlmKCFYUXVlcnlUcmVlKGRweSwgd2luLCAmcm9vdCwgJnBhcmVudCwgJmNoaWxk
cmVuLCAmbmNoaWxkcmVuKSkgeworICAgIHVudHJhcF9lcnJvcigpOworICAgIHJldHVybjsKKyAg
fQorCisgIGlmKHVudHJhcF9lcnJvcigpKSAKKyAgICByZXR1cm47CisKKyAgZm9yKGk9MDsgaTxu
Y2hpbGRyZW47ICsraSkgeworICAgIFdpZGdldCBjaGlsZCA9IFh0V2luZG93VG9XaWRnZXQoZHB5
LCBjaGlsZHJlbltpXSk7CisgICAgaWYgKGNoaWxkKSAKKyAgICAgIHh0X2FkZF9mb2N1c19saXN0
ZW5lcl90cmVlKCBjaGlsZCwgdXNlcl9kYXRhKTsKKyAgfQorICBYRnJlZSgodm9pZCopY2hpbGRy
ZW4pOworCisgIHJldHVybjsKK30KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRi
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4dGJpbi5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTkgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogMjsgaW5kZW50
LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKyAqIHZpbTpleHBhbmR0YWI6
c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxP
Q0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemls
bGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNl
CisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0
YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBp
cyB0aGUgR3RrMlh0QmluIFdpZGdldCBJbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgSW5pdGlh
bCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIFN1biBNaWNyb3N5c3RlbXMs
IEluYy4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBD
b3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgor
ICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0
ZXIgKHRoZSAiR1BMIiksIG9yCisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2Ug
dGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0
ZWFkCisgKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIg
dmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0
aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlv
dXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGlj
YXRlIHlvdXIKKyAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICog
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSB1bmRlcgorICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhl
IEdQTCBvciB0aGUgTEdQTC4KKyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAq
LyAgIAorCisjaWZuZGVmIF9fR1RLX1hUQklOX0hfXworI2RlZmluZSBfX0dUS19YVEJJTl9IX18K
KworI2luY2x1ZGUgPGd0ay9ndGtzb2NrZXQuaD4KKyNpbmNsdWRlIDxYMTEvSW50cmluc2ljLmg+
CisjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpZmRlZiBN
T1pJTExBX0NMSUVOVAorI2luY2x1ZGUgIm5zY29yZS5oIgorI2lmZGVmIF9JTVBMX0dUS1hUQklO
X0FQSQorI2RlZmluZSBHVEtYVEJJTl9BUEkodHlwZSkgTlNfRVhQT1JUXyh0eXBlKQorI2Vsc2UK
KyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIE5TX0lNUE9SVF8odHlwZSkKKyNlbmRpZgorI2Vs
c2UKKyNkZWZpbmUgR1RLWFRCSU5fQVBJKHR5cGUpIHR5cGUKKyNlbmRpZgorCisjaWZkZWYgX19j
cGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKK3R5cGVk
ZWYgc3RydWN0IF9HdGtYdEJpbiBHdGtYdEJpbjsKK3R5cGVkZWYgc3RydWN0IF9HdGtYdEJpbkNs
YXNzIEd0a1h0QmluQ2xhc3M7CisKKyNkZWZpbmUgR1RLX1RZUEVfWFRCSU4gICAgICAgICAgICAg
ICAgICAoZ3RrX3h0YmluX2dldF90eXBlICgpKQorI2RlZmluZSBHVEtfWFRCSU4ob2JqKSAgICAg
ICAgICAgICAgICAgIChHVEtfQ0hFQ0tfQ0FTVCAoKG9iaiksIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4sIEd0a1h0QmluKSkKKyNkZWZp
bmUgR1RLX1hUQklOX0NMQVNTKGtsYXNzKSAgICAgICAgICAoR1RLX0NIRUNLX0NMQVNTX0NBU1Qg
KChrbGFzcyksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X1RZUEVfWFRCSU4sIEd0a1h0QmluQ2xhc3MpKQorI2RlZmluZSBHVEtfSVNfWFRCSU4ob2JqKSAg
ICAgICAgICAgICAgIChHVEtfQ0hFQ0tfVFlQRSAoKG9iaiksIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfWFRCSU4pKQorI2RlZmluZSBHVEtfSVNf
WFRCSU5fQ0xBU1Moa2xhc3MpICAgICAgIChHVEtfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9YVEJJ
TikpCit0eXBlZGVmIHN0cnVjdCBfWHRDbGllbnQgWHRDbGllbnQ7CisKK3N0cnVjdCBfWHRDbGll
bnQgeworICBEaXNwbGF5CSp4dGRpc3BsYXk7CisgIFdpZGdldAl0b3Bfd2lkZ2V0OyAgICAvKiBU
aGUgdG9wbGV2ZWwgd2lkZ2V0ICovCisgIFdpZGdldAljaGlsZF93aWRnZXQ7ICAvKiBUaGUgZW1i
ZWRkZWQgd2lkZ2V0ICovCisgIFZpc3VhbAkqeHR2aXN1YWw7CisgIGludAkJeHRkZXB0aDsKKyAg
Q29sb3JtYXAJeHRjb2xvcm1hcDsKKyAgV2luZG93CW9sZHdpbmRvdzsKK307CisKK3N0cnVjdCBf
R3RrWHRCaW4KK3sKKyAgR3RrU29ja2V0ICAgICAgZ3NvY2tldDsKKyAgR2RrV2luZG93ICAgICAq
cGFyZW50X3dpbmRvdzsKKyAgRGlzcGxheSAgICAgICAqeHRkaXNwbGF5OyAgICAgICAgLyogWHQg
VG9vbGtpdCBEaXNwbGF5ICovCisKKyAgV2luZG93ICAgICAgICAgeHR3aW5kb3c7ICAgICAgICAg
LyogWHQgVG9vbGtpdCBYV2luZG93ICovCisgIGdpbnQgICAgICAgICAgIHgsIHk7CisgIGdpbnQg
ICAgICAgICAgIHdpZHRoLCBoZWlnaHQ7CisgIFh0Q2xpZW50CSB4dGNsaWVudDsgICAgICAgICAv
KiBYdCBDbGllbnQgZm9yIFhFbWJlZCAqLworfTsKKyAgCitzdHJ1Y3QgX0d0a1h0QmluQ2xhc3MK
K3sKKyAgR3RrU29ja2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOworfTsKKworR1RLWFRCSU5fQVBJKEd0
a1R5cGUpICAgICBndGtfeHRiaW5fZ2V0X3R5cGUgKHZvaWQpOworR1RLWFRCSU5fQVBJKEd0a1dp
ZGdldCAqKSBndGtfeHRiaW5fbmV3IChHZGtXaW5kb3cgKnBhcmVudF93aW5kb3csIFN0cmluZyAq
Zik7CitHVEtYVEJJTl9BUEkodm9pZCkgICAgICAgIGd0a194dGJpbl9zZXRfcG9zaXRpb24gKEd0
a1h0QmluICp4dGJpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2ludCAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnaW50ICAgICAgIHkpOworR1RLWFRCSU5fQVBJKHZvaWQpICAgICAg
IGd0a194dGJpbl9yZXNpemUgKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgICAgICAgd2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICBoZWlnaHQpOworCit0eXBl
ZGVmIHN0cnVjdCBfWHRUTVJlYyB7CisgICAgWHRUcmFuc2xhdGlvbnMgIHRyYW5zbGF0aW9uczsg
ICAgICAgLyogcHJpdmF0ZSB0byBUcmFuc2xhdGlvbiBNYW5hZ2VyICAgICovCisgICAgWHRCb3Vu
ZEFjdGlvbnMgIHByb2NfdGFibGU7ICAgICAgICAgLyogcHJvY2VkdXJlIGJpbmRpbmdzIGZvciBh
Y3Rpb25zICAgICovCisgICAgc3RydWN0IF9YdFN0YXRlUmVjICpjdXJyZW50X3N0YXRlOyAgLyog
VHJhbnNsYXRpb24gTWFuYWdlciBzdGF0ZSBwdHIgICAgICovCisgICAgdW5zaWduZWQgbG9uZyAg
IGxhc3RFdmVudFRpbWU7Cit9IFh0VE1SZWMsICpYdFRNOyAgIAorCit0eXBlZGVmIHN0cnVjdCBf
Q29yZVBhcnQgeworICAgIFdpZGdldCAgICAgICAgICBzZWxmOyAgICAgICAgICAgICAgIC8qIHBv
aW50ZXIgdG8gd2lkZ2V0IGl0c2VsZiAgICAgICAgICAqLworICAgIFdpZGdldENsYXNzICAgICB3
aWRnZXRfY2xhc3M7ICAgICAgIC8qIHBvaW50ZXIgdG8gV2lkZ2V0J3MgQ2xhc3NSZWMgICAgICAq
LworICAgIFdpZGdldCAgICAgICAgICBwYXJlbnQ7ICAgICAgICAgICAgIC8qIHBhcmVudCB3aWRn
ZXQgICAgICAgICAgICAgICAgICAgICAqLworICAgIFhybU5hbWUgICAgICAgICB4cm1fbmFtZTsg
ICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lIHF1YXJraWZpZWQgICAqLworICAgIEJv
b2xlYW4gICAgICAgICBiZWluZ19kZXN0cm95ZWQ7ICAgIC8qIG1hcmtlZCBmb3IgZGVzdHJveSAg
ICAgICAgICAgICAgICAqLworICAgIFh0Q2FsbGJhY2tMaXN0ICBkZXN0cm95X2NhbGxiYWNrczsg
IC8qIHdobyB0byBjYWxsIHdoZW4gd2lkZ2V0IGRlc3Ryb3llZCAqLworICAgIFh0UG9pbnRlciAg
ICAgICBjb25zdHJhaW50czsgICAgICAgIC8qIGNvbnN0cmFpbnQgcmVjb3JkICAgICAgICAgICAg
ICAgICAqLworICAgIFBvc2l0aW9uICAgICAgICB4LCB5OyAgICAgICAgICAgICAgIC8qIHdpbmRv
dyBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAqLworICAgIERpbWVuc2lvbiAgICAgICB3aWR0
aCwgaGVpZ2h0OyAgICAgIC8qIHdpbmRvdyBkaW1lbnNpb25zICAgICAgICAgICAgICAgICAqLwor
ICAgIERpbWVuc2lvbiAgICAgICBib3JkZXJfd2lkdGg7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIg
d2lkdGggICAgICAgICAgICAgICAqLworICAgIEJvb2xlYW4gICAgICAgICBtYW5hZ2VkOyAgICAg
ICAgICAgIC8qIGlzIHdpZGdldCBnZW9tZXRyeSBtYW5hZ2VkPyAgICAgICAqLworICAgIEJvb2xl
YW4gICAgICAgICBzZW5zaXRpdmU7ICAgICAgICAgIC8qIGlzIHdpZGdldCBzZW5zaXRpdmUgdG8g
dXNlciBldmVudHMqLworICAgIEJvb2xlYW4gICAgICAgICBhbmNlc3Rvcl9zZW5zaXRpdmU7IC8q
IGFyZSBhbGwgYW5jZXN0b3JzIHNlbnNpdGl2ZT8gICAgICAqLworICAgIFh0RXZlbnRUYWJsZSAg
ICBldmVudF90YWJsZTsgICAgICAgIC8qIHByaXZhdGUgdG8gZXZlbnQgZGlzcGF0Y2hlciAgICAg
ICAqLworICAgIFh0VE1SZWMgICAgICAgICB0bTsgICAgICAgICAgICAgICAgIC8qIHRyYW5zbGF0
aW9uIG1hbmFnZW1lbnQgICAgICAgICAgICAqLworICAgIFh0VHJhbnNsYXRpb25zICBhY2NlbGVy
YXRvcnM7ICAgICAgIC8qIGFjY2VsZXJhdG9yIHRyYW5zbGF0aW9ucyAgICAgICAgICAqLworICAg
IFBpeGVsICAgICAgICAgICBib3JkZXJfcGl4ZWw7ICAgICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4
ZWwgICAgICAgICAgICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBib3JkZXJfcGl4bWFwOyAg
ICAgIC8qIHdpbmRvdyBib3JkZXIgcGl4bWFwIG9yIE5VTEwgICAgICAqLworICAgIFdpZGdldExp
c3QgICAgICBwb3B1cF9saXN0OyAgICAgICAgIC8qIGxpc3Qgb2YgcG9wdXBzICAgICAgICAgICAg
ICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBudW1fcG9wdXBzOyAgICAgICAgIC8qIGhv
dyBtYW55IHBvcHVwcyAgICAgICAgICAgICAgICAgICAqLworICAgIFN0cmluZyAgICAgICAgICBu
YW1lOyAgICAgICAgICAgICAgIC8qIHdpZGdldCByZXNvdXJjZSBuYW1lICAgICAgICAgICAgICAq
LworICAgIFNjcmVlbiAgICAgICAgICAqc2NyZWVuOyAgICAgICAgICAgIC8qIHdpbmRvdydzIHNj
cmVlbiAgICAgICAgICAgICAgICAgICAqLworICAgIENvbG9ybWFwICAgICAgICBjb2xvcm1hcDsg
ICAgICAgICAgIC8qIGNvbG9ybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFdp
bmRvdyAgICAgICAgICB3aW5kb3c7ICAgICAgICAgICAgIC8qIHdpbmRvdyBJRCAgICAgICAgICAg
ICAgICAgICAgICAgICAqLworICAgIENhcmRpbmFsICAgICAgICBkZXB0aDsgICAgICAgICAgICAg
IC8qIG51bWJlciBvZiBwbGFuZXMgaW4gd2luZG93ICAgICAgICAqLworICAgIFBpeGVsICAgICAg
ICAgICBiYWNrZ3JvdW5kX3BpeGVsOyAgIC8qIHdpbmRvdyBiYWNrZ3JvdW5kIHBpeGVsICAgICAg
ICAgICAqLworICAgIFBpeG1hcCAgICAgICAgICBiYWNrZ3JvdW5kX3BpeG1hcDsgIC8qIHdpbmRv
dyBiYWNrZ3JvdW5kIHBpeG1hcCBvciBOVUxMICAqLworICAgIEJvb2xlYW4gICAgICAgICB2aXNp
YmxlOyAgICAgICAgICAgIC8qIGlzIHdpbmRvdyBtYXBwZWQgYW5kIG5vdCBvY2NsdWRlZD8qLwor
ICAgIEJvb2xlYW4gICAgICAgICBtYXBwZWRfd2hlbl9tYW5hZ2VkOy8qIG1hcCB3aW5kb3cgaWYg
aXQncyBtYW5hZ2VkPyAgICAgICAqLworfSBDb3JlUGFydDsKKwordHlwZWRlZiBzdHJ1Y3QgX1dp
ZGdldFJlYyB7CisgICAgQ29yZVBhcnQgICAgY29yZTsKKyB9IFdpZGdldFJlYywgQ29yZVJlYzsg
ICAKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNl
bmRpZiAvKiBfX0dUS19YVEJJTl9IX18gKi8KKwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94
ZW1iZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFi
cy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlm
dHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq
KioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAq
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRo
ZSBYRU1CRUQgRGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAy
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBv
cgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
KyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
CisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1l
c3NhZ2VzICovCisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2Rl
ZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJ
TkRPV19ERUFDVElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAg
ICAgICAgICAgMworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNk
ZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9G
T0NVU19ORVhUICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAg
ICAgICAgICAgIDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4Cisj
ZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURf
TU9EQUxJVFlfT04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYg
ICAgICAgICAgICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVN
QkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5H
UkFCX0tFWSAgICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46
ICovCisjZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBY
RU1CRURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xB
U1QgICAgICAgICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZp
bmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAzMTk5MCkKKysrIFdl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDYgKzkwLDMwIEBAIGludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblAK
ICAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBh
cmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAoraW50IFBsdWdpblBh
Y2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAorewor
ICAgIC8vIFNvcnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3Qu
CisgICAgYm9vbCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgYm9vbCBCYWxsb3dz
TXVsdGlwbGVJbnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1
aXJrRG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJ
bnN0YW5jZXMgIT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQorICAgICAgICByZXR1cm4gQWFs
bG93c011bHRpcGxlSW5zdGFuY2VzID8gLTEgOiAxOworCisgICAgLy8gU29ydCBwbHVnLWlucyBp
biBhIHByZWZlcnJlZCBwYXRoIGZpcnN0LgorICAgIGJvb2wgQWlzSW5QcmVmZXJyZWRQYXRoID0g
UGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luUGF0aChwYXJlbnREaXJlY3RvcnkoKSk7
CisgICAgYm9vbCBCaXNJblByZWZlcnJlZFBhdGggPSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJy
ZWRQbHVnaW5QYXRoKGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7CisgICAgaWYgKEFpc0lu
UHJlZmVycmVkUGF0aCAhPSBCaXNJblByZWZlcnJlZFBhdGgpCisgICAgICAgIHJldHVybiBBaXNJ
blByZWZlcnJlZFBhdGggPyAtMSA6IDE7CisKKyAgICBpbnQgZGlmZiA9IHN0cmNtcChuYW1lKCku
dXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAo
ZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICBpZiAoZGlmZiA9IGNvbXBhcmVGaWxl
VmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKSkKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAg
ICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVU
by5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKK30KKwogYm9vbCBQbHVnaW5QYWNr
YWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKIHsKICAgICBzdGF0aWMgY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uIHNsUGx1Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAwMCwgMHgwMDAxMDAwMCk7
CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDMxOTkw
KQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODU4LDYgKzg1OCw1OCBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29u
c3QgY2hhCiAgICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlv
biwgbm90aWZ5RGF0YSk7CiB9CiAKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFy
aWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFyaWFibGUpIHsK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgY2FzZSBOUE5WV2luZG93
TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9i
amVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAg
ICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3Jp
YmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRp
bWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAg
ICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAg
ICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3Jp
cHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDog
eworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklD
X0VSUk9SOworCisgICAgICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsK
KworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1f
ZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAg
ICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRl
c2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBy
dW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAg
ICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAg
ICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2lu
U2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAg
ICAgICAgICBQbGF0Zm9ybVdpZGdldCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGxhdGZvcm1XaWRn
ZXQqPih2YWx1ZSk7CisKKyAgICAgICAgICAgICp3ID0gY29udGFpbmluZ1dpbmRvdygpOworCisg
ICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30K
Kwogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCiB7CiAgICAg
aWYgKCFyZWN0KSB7CkluZGV4OiBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMzE5OTApCisrKyBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Miw2ICsyLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5A
dHdvdG9hc3RzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTU3LDYgKzU4LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIEZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVu
dChXZWJLaXRXZWJGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9w
bHVnaW5WaWV3KDApCiAgICAgLCBtX3VzZXJBZ2VudCgiIikKIHsKICAgICBBU1NFUlQobV9mcmFt
ZSk7CkBAIC0xNjIsOSArMTY0LDMwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
V2lsbFN1Ym0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVu
dExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIEZy
YW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBmbC0+c2V0RW5jb2Rp
bmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAgICBmbC0+YWRkRGF0
YShkYXRhLCBsZW5ndGgpOworICAgIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nID0gbG9hZGVy
LT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgIGlmICghbV9wbHVnaW5WaWV3
KSB7CisgICAgICAgIEFTU0VSVChsb2FkZXItPmZyYW1lKCkpOworICAgICAgICAvLyBTZXR0aW5n
IHRoZSBlbmNvZGluZyBvbiB0aGUgZnJhbWUgbG9hZGVyIGlzIG91ciB3YXkgdG8gZ2V0IHdvcmsg
ZG9uZSB0aGF0IGlzIG5vcm1hbGx5IGRvbmUKKyAgICAgICAgLy8gd2hlbiB0aGUgZmlyc3QgYml0
IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQgd2l0
aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KKyAgICAgICAgU3RyaW5nIGVuY29kaW5nID0g
bG9hZGVyLT5vdmVycmlkZUVuY29kaW5nKCk7CisgICAgICAgIGJvb2wgdXNlckNob3NlbiA9ICFl
bmNvZGluZy5pc051bGwoKTsKKyAgICAgICAgaWYgKCF1c2VyQ2hvc2VuKQorICAgICAgICAgICAg
ZW5jb2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworCisgICAg
ICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAg
ICAgICAgZnJhbWVMb2FkZXItPnNldEVuY29kaW5nKGVuY29kaW5nLCB1c2VyQ2hvc2VuKTsKKyAg
ICAgICAgaWYgKGRhdGEpCisgICAgICAgICAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBs
ZW5ndGgpOworICAgIH0KKworICAgIGlmIChtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFt
X2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRp
ZFJlY2VpdmVSZXNwb25zZShsb2FkZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5W
aWV3LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgpOworICAgIH0KIH0KIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpCkBAIC0yNjAsOSArMjgzLDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGVjaWRlUG8KICAgICAoY29yZShtX2ZyYW1lKS0+bG9hZGVyKCktPipw
b2xpY3lGdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAotV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcm
LCBib29sKQorV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IElu
dFNpemUmIHBsdWdpblNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJh
bVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gUGx1Z2lu
Vmlldzo6Y3JlYXRlKGNvcmUobV9mcmFtZSksIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFy
YW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworCisgICAgaWYg
KHBsdWdpblZpZXctPnN0YXR1cygpID09IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseSkK
KyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjkw
LDggKzMxNyw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmUKIAog
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVn
aW5XaWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm47CisgICAgbV9w
bHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHBsdWdpbldpZGdldCk7CiB9CiAK
IFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3Qg
SW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAtNTg3LDE0ICs2MTMs
MTQgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVAogCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyKQogewotICAgIEFTU0VSVChkb2N1bWVudExvYWRlci0+ZnJhbWUoKSk7Ci0gICAgLy8g
U2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdl
dCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCi0gICAgLy8gd2hlbiB0aGUgZmlyc3Qg
Yml0IG9mIGRhdGEgaXMgcmVjZWl2ZWQsIGV2ZW4gZm9yIHRoZSBjYXNlIG9mIGEgZG9jdW1lbnQg
d2l0aCBubyBkYXRhIChsaWtlIGFib3V0OmJsYW5rKS4KLSAgICBTdHJpbmcgZW5jb2RpbmcgPSBk
b2N1bWVudExvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOwotICAgIGJvb2wgdXNlckNob3NlbiA9
ICFlbmNvZGluZy5pc051bGwoKTsKLSAgICBpZiAoZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAg
IGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgp
OwotICAgIGRvY3VtZW50TG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhlbmNvZGlu
ZywgdXNlckNob3Nlbik7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykKKyAgICAgICAgY29tbWl0
dGVkTG9hZChkb2N1bWVudExvYWRlciwgMCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fcGx1
Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOwor
ICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiAK
QEAgLTcxMCw5ICs3MzYsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFi
bGVUbwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVu
dExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKG1fcGx1Z2luVmlldykgeworICAgICAgICBtX3BsdWdpblZpZXctPmRp
ZEZhaWwoZXJyb3IpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1Nl
bnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCkluZGV4OiBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCShyZXZp
c2lvbiAzMTk5MCkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogCisjaW5jbHVk
ZSAiUGx1Z2luVmlldy5oIgorCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViRnJhbWUgV2ViS2l0
V2ViRnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTcwLDYgKzE3MywxMCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgV2ViQ29yZTo6
U3RyaW5nIG1fdXNlckFnZW50OworCisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0
IGRhdGEgdG8KKyAgICAgICAgV2ViQ29yZTo6UGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OworICAg
ICAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQkocmV2aXNpb24gMzE5OTApCisrKyBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAj
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTYsNyBAQCBt
eSAkY3VycmVudFNWTlJldmlzaW9uOwogbXkgJG9zWFZlcnNpb247CiBteSAkaXNRdDsKIG15ICRp
c0d0azsKK215ICRlbmFibGVHdGtQbHVnaW5zOwogbXkgJGlzV3g7CiAKICMgVmFyaWFibGVzIGZv
ciBXaW4zMiBzdXBwb3J0CkBAIC00OTQsNiArNDk2LDIzIEBAIHN1YiBkZXRlcm1pbmVJc0d0aygp
CiAgICAgfQogfQogCitzdWIgZW5hYmxlR3RrUGx1Z2lucygpCit7CisgICAgZGV0ZXJtaW5lRW5h
YmxlR3RrUGx1Z2lucygpOworICAgIHJldHVybiAkZW5hYmxlR3RrUGx1Z2luczsKK30KKworc3Vi
IGRldGVybWluZUVuYWJsZUd0a1BsdWdpbnMoKQoreworICAgIHJldHVybiBpZiBkZWZpbmVkKCRl
bmFibGVHdGtQbHVnaW5zKTsKKworICAgIGlmIChjaGVja0FyZ3YoIi0tZGlzYWJsZS1ndGstcGx1
Z2lucyIpKSB7CisgICAgICAgICRlbmFibGVHdGtQbHVnaW5zID0gMDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAkZW5hYmxlR3RrUGx1Z2lucyA9IDE7CisgICAgfQorfQorCiBzdWIgaXNXeCgpCiB7
CiAgICAgZGV0ZXJtaW5lSXNXeCgpOwpAQCAtODY1LDYgKzg4NCw3IEBAIHN1YiBidWlsZEd0a1By
b2plY3QoJCRAKQogCiAgICAgaWYgKHVzZVFtYWtlKCkpIHsKICAgICAgICAgbXkgQGJ1aWxkQXJn
cyA9ICgiQ09ORklHKz1ndGstcG9ydCIsICJDT05GSUctPXF0Iik7CisgICAgICAgIHB1c2ggQGJ1
aWxkQXJncywgIkNPTkZJRys9cGx1Z2lucyIgaWYgZW5hYmxlR3RrUGx1Z2lucygpOwogICAgICAg
ICByZXR1cm4gYnVpbGRRTWFrZVByb2plY3QoJGNsZWFuLCBAYnVpbGRBcmdzKTsKICAgICB9IGVs
c2UgewogICAgICAgICByZXR1cm4gYnVpbGRBdXRvdG9vbHNQcm9qZWN0KCRjbGVhbiwgQGJ1aWxk
QXJncyk7CgotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCTIw
MDgtMDQtMTEgMjM6NTg6MDguMDAwMDAwMDAwICswMTAwCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAubmV3CTIwMDgtMDQtMTYgMjI6MDQ6MDcuMDAwMDAwMDAw
ICswMTAwCkBAIC03NSwxMSArNzUsMTEgQEAKIHZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdp
blBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGly
ZWN0b3JpZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9
CiBib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBT
dHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotaW50IFBsdWdpblBh
Y2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50
ZWQoKTsgcmV0dXJuIDA7IH0KIGJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KIHVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhh
c2goKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiBib29sIFBsdWdpblBh
Y2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KIGJvb2wgUGx1Z2luUGFja2FnZTo6
bG9hZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitpbnQgUGx1Z2luUGFj
a2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgUGx1Z2luVmlldzo6c2V0
TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIGNvbnN0
IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KikgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CkBAIC05Niw2ICs5Niw3IEBACiB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdp
bmRvdygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjpoYW5k
bGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZv
aWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlIChOUE5WYXJpYWJsZSwgdm9p
ZCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KIFBs
dWdpblZpZXc6On5QbHVnaW5WaWV3KCkge30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20769</attachid>
            <date>2008-04-23 03:28:37 -0700</date>
            <delta_ts>2008-04-24 09:01:42 -0700</delta_ts>
            <desc>Adds NPAPI plugin support for Gtk and Qt-x11.</desc>
            <filename>npapi-plugin-gtk-qt.patch</filename>
            <type>text/plain</type>
            <size>126008</size>
            <attacher name="marcoil">marc.ordinasillopis</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDgtMDQt
MjMgIE1hcmMgT3JkaW5hcyBpIExsb3BpcyAgPG1hcmMub3JkaW5hc2lsbG9waXNAY29sbGFib3Jh
LmNvLnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbTogQWRkZWQgbGlicmFyaWVzIFh0IGFuZCBuc3ByNC4KKwogMjAwOC0wNC0yMiAgQWxwIFRv
a2VyICA8YWxwQG51YW50aS5jb20+CiAKICAgICAgICAgR1RLKyBkZWJ1ZyBidWlsZCBmaXggZm9y
IGNoYW5nZXMgaW4gcjMyMjU3LgpJbmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDMyNDMwKQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTI0Niw2ICsyNDYsNyBAQCBlbmRpZgogCiBpZiBUQVJHRVRfWDExCiBnbG9i
YWxfY3BwZmxhZ3MgKz0gLURYUF9VTklYCit3ZWJjb3JlX2xpYmFkZCArPSAtbFh0IC1sbnNwcjQK
IGVuZGlmCiAKIGlmICFFTkFCTEVfREVCVUcKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNDMw
KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTEgQEAKKzIwMDgtMDQtMjMgIE1hcmMgT3JkaW5hcyBpIExsb3BpcyAgPG1hcmMub3JkaW5hc2ls
bG9waXNAY29sbGFib3JhLmNvLnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMuCisKKyAgICAg
ICAgKiB3dGYvUGxhdGZvcm0uaDogU2V0IEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJIGZvciBR
dCBvbiBVbml4LgorCiAyMDA4LTA0LTIxICBLZXZpbiBNY0N1bGxvdWdoICA8a21jY3VsbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0uCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxh
dGZvcm0uaAkocmV2aXNpb24gMzI0MzApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBACiAjZGVmaW5lIEVOQUJMRV9ORVRT
Q0FQRV9QTFVHSU5fQVBJIDAKICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShTWU1CSUFOKSB8fCBQTEFURk9STShXSU4pCiAjZGVmaW5lIEVOQUJMRV9ORVRT
Q0FQRV9QTFVHSU5fQVBJIDEKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBQTEFURk9STShVTklYKQor
I2RlZmluZSBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSSAxCiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKFdJTikKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTM0IEBACisyMDA4LTA0LTIzICBNYXJjIE9yZGluYXMgaSBMbG9w
aXMgIDxtYXJjLm9yZGluYXNpbGxvcGlzQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBOUEFQ
SSBwbHVnaW5zLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHBsdWdpbiBzdXBv
cnQgZmlsZXMgdG8gZ3RrIHNvdXJjZXMuCisgICAgICAgICogV2ViQ29yZS5wcm86IEFkZGVkIFhQ
X1VOSVggZGVmaW5lIGFuZCBzdXBwb3J0IGZpbGVzIHRvIHF0IGJ1aWxkCisgICAgICAgIG9uIHVu
aXguCisgICAgICAgICogYnJpZGdlL25wcnVudGltZV9pbnRlcm5hbC5oOiBBZGRpdGlvbmFsIHVu
ZGVmcyB0aGF0IGNvbmZsaWN0IHdpdGgKKyAgICAgICAgUXQgaGVhZGVycy4KKyAgICAgICAgKiBw
YWdlL2d0ay9GcmFtZUd0ay5jcHA6IENyZWF0ZSBqcyBiaW5kaW5ncyBmb3IgUGx1Z2luVmlldy4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldCk6
CisgICAgICAgICogcGFnZS9xdC9GcmFtZVF0LmNwcDogIENyZWF0ZSBqcyBiaW5kaW5ncyBmb3Ig
UGx1Z2luVmlldy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5j
ZUZvcldpZGdldCk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOiBRdCBGaWxlU3lz
dGVtIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOiBNZW1iZXJz
IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBRdCBwbHVnaW5zIGFuZAorICAgICAgICBOUEFQSSBv
bmVzLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1v
dmVkIGltcGxlbWVudGVkIGZ1bmN0aW9ucy4KKyAgICAgICAgKFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWdpb24pOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHA6IEltcGxl
bWVudGVkIGZ1bmN0aW9ucyBuZWNlc3NhcnkgZm9yCisgICAgICAgIE5QQVBJIHBsdWdpbnMuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpj
bG9zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6dW5sb2FkTW9kdWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwOiBSZW1vdmVkIGltcGxlbWVudGVkIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9XaWRnZXRRdC5jcHA6IERpZmZlcmVudGlhdGUgYmV0d2VlbiBRdCBwbHVnaW5zIGFu
ZAorICAgICAgICBOUEFQSSBvbmVzLgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0ZTo6
V2lkZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmlzTlBBUElQbHVnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRJc05QQVBJUGx1Z2luKToKKyAgICAgICAg
KiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFj
a2FnZTo6flBsdWdpblBhY2thZ2UpOiBVbmxvYWQgdGhlIG1vZHVsZSBiZWZvcmUKKyAgICAgICAg
ZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpjb21wYXJlKTog
TW92ZWQgaGVyZSBhcyBpdCdzIHBsYXRmb3JtCisgICAgICAgIGluZGVwZW5kZW50LgorICAgICAg
ICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6IE1vdmVkIHBsYXRmb3JtLWluZGVwZW5kZW50IGZ1
bmN0aW9ucyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlldyk6
IEluaXRpYWxpemUgbV9ucFdpbmRvdy53c19pbmZvIG9uCisgICAgICAgIFVuaXggcGxhdGZvcm1z
LgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZnJlZVN0cmluZ0FycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OnN0YXJ0c1dpdGhCbGFua0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bG9j
YXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRFT0wpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcu
aDogTW92ZWQgcGxhdGZvcm0taW5kZXBlbmRlbnQgZnVuY3Rpb25zIGhlcmUuCisgICAgICAgIEFk
ZGVkIG1lbWJlciB0byBzaWduYWwgcGx1Z2luIG5lZWRzIFhFbWJlZCBleHRlbnNpb24uCisgICAg
ICAgICogcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YTo6cmVmcmVzaCk6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJl
Y3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQ
bHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAqIHBsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxl
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWly
a3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVh
bCk6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBkYXRlV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGlkZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Omhh
bmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5WaWV3OjpkZXRhY2hGcm9tV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp+UGx1Z2lu
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0KToKKyAgICAgICAgKiBw
bHVnaW5zL2d0ay94ZW1iZWQuaDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9ucGFwaS5jcHA6
CisgICAgICAgIChOUE5fR2V0VmFsdWUpOiBSZXR1cm4gZXJyb3IgaWYgbm8gdmlldyBwcmVzZW50
LgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGE6OnJlZnJlc2gpOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luRGF0YWJhc2VRdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBhdGhz
SW5EaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjphZGRRdFdlYktpdFBsdWdpbkRpcmVj
dG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1vemlsbGFQbHVnaW5EaXJlY3Rvcmllcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9y
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdp
bkRpcmVjdG9yeSk6CisgICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Q
YWNrYWdlOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmVxdWFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbik6Cisg
ICAgICAgICogcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzaG93KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3Vz
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6YXR0YWNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVzZXJBZ2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52
YWxpZGF0ZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3Ojppbml0KToKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVn
aW5QYWNrYWdlV2luLmNwcDogTW92ZWQgcGxhdGZvcm0taW5kZXBlbmRlbnQgY29kZQorICAgICAg
ICB0byBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCisgICAgICAgICogcGx1Z2lucy93aW4vUGx1
Z2luVmlld1dpbi5jcHA6IE1vdmVkIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUgdG8KKyAgICAg
ICAgcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
c3RvcCk6CisgICAgICAgIChQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAg
ICAoUGx1Z2luVmlldzo6Z2V0VmFsdWUpOiBUaGlzIGZ1bmN0aW9uIG5lZWRzIGRpZmZlcmVudAor
ICAgICAgICBpbXBsZW1lbnRhdGlvbnMgb24gZWFjaCBwbGF0Zm9ybS4KKwogMjAwOC0wNC0yMiAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
ZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzI0MzApCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsNyArOTIwLDEwIEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXAogCVdlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcCBc
CisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1
Z2luUGFja2FnZUd0ay5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5j
cHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAgXAogCVdlYkNvcmUv
cmVuZGVyaW5nL2JpZGkuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAg
XApAQCAtOTgxLDYgKzk4NCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50LmNwcCBcCiAJV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5jcHAKK2lmIFRBUkdFVF9Y
MTEKK3dlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9ndGsyeHRiaW4u
YworZW5kaWYKIAogd2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMzI0MzApCisrKyBXZWJDb3JlL1dlYkNv
cmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEwIEBAIGluY2x1ZGUoJCRQV0Qv
Li4vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmkKICNMSUJTICs9IC1MJCRPVVRQVVRfRElSL2xpYiAt
bEphdmFTY3JpcHRDb3JlCiAKIHF0LXBvcnQgeworICAgIHVuaXggeworICAgICAgICBERUZJTkVT
ICs9IFhQX1VOSVgKKyAgICB9CisKIFJFU09VUkNFUyArPSBcCiAgICAgICAgICAgICAkJFBXRC8u
Li9XZWJDb3JlL3BhZ2UvaW5zcGVjdG9yL1dlYktpdC5xcmMgXAogICAgICAgICAgICAgJCRQV0Qv
Li4vV2ViQ29yZS9SZXNvdXJjZXMvV2ViS2l0UmVzb3VyY2VzLnFyYwpAQCAtMTA0Myw3ICsxMDQ3
LDEyIEBAIHF0LXBvcnQgewogICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlpbnRlcmZh
Y2UuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcAogCi0g
ICAgdW5peDogU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9TeXN0ZW1UaW1lUXQuY3BwCisgICAgdW5p
eDogeworICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL3F0L1N5c3RlbVRpbWVRdC5jcHAgXAor
ICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luRGF0YWJhc2VRdC5jcHAgXAorICAg
ICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcCBcCisgICAgICAg
ICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCisgICAgfQogICAgIGVsc2U6
IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVXaW4uY3BwCiAKICAgICAjIEZpbGVz
IGJlbG9uZ2luZyB0byB0aGUgUXQgNC4zIGJ1aWxkCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ucHJ1
bnRpbWVfaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVf
aW50ZXJuYWwuaAkocmV2aXNpb24gMzI0MzApCisrKyBXZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWVf
aW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzgsNCArMzgsMTMgQEAKICAgICAjdW5kZWYgQXV0bwog
ICAgICN1bmRlZiBDb21wbGV4CiAgICAgI3VuZGVmIFN0YXR1cworICAgICN1bmRlZiBDdXJzb3JT
aGFwZQorICAgICN1bmRlZiBGb2N1c0luCisgICAgI3VuZGVmIEZvY3VzT3V0CisgICAgI3VuZGVm
IEtleVByZXNzCisgICAgI3VuZGVmIEtleVJlbGVhc2UKKyAgICAjdW5kZWYgVW5zb3J0ZWQKKyAg
ICAjdW5kZWYgQm9vbAorICAgICN1bmRlZiBGb250Q2hhbmdlCisgICAgI3VuZGVmIEdyYXlTY2Fs
ZQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAkocmV2aXNpb24gMzI0MzApCisrKyBX
ZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0z
MCwxNSArMzEsMTcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAia2pzX3Byb3h5Lmgi
CisjaW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSAicnVudGltZS5oIgogCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4g
RnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCitQYXNzUmVmUHRy
PEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JX
aWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdpZGdldCktPmJpbmRp
bmdJbnN0YW5jZSgpOwogfQogCiB2b2lkIEZyYW1lOjpjbGVhclBsYXRmb3JtU2NyaXB0T2JqZWN0
cygpCkluZGV4OiBXZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNvcmUvcGFn
ZS9xdC9GcmFtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2LDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEg
THRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKQEAgLTM0LDYgKzM1LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAt
OTksNiArMTAyLDkgQEAgc3RhdGljIHZvaWQgZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0Kgog
CiBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0
SW5zdGFuY2VGb3JXaWRnZXQoV2ViQ29yZTo6V2lkZ2V0KiB3aWRnZXQpCiB7CisgICAgaWYgKHdp
ZGdldC0+aXNOUEFQSVBsdWdpbigpKSB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVn
aW5WaWV3Kj4od2lkZ2V0KS0+YmluZGluZ0luc3RhbmNlKCk7CisgICAgfQogICAgIFFXaWRnZXQq
IG5hdGl2ZVdpZGdldCA9IHdpZGdldC0+bmF0aXZlV2lkZ2V0KCk7CiAgICAgaWYgKCFuYXRpdmVX
aWRnZXQpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lz
dGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHJldmlz
aW9uIDMyNDMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDEwIEBACiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPGdtb2R1
bGUuaD4KICNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1
ZGUgPFFMaWJyYXJ5PgorI2VuZGlmCiAKICNpbmNsdWRlIDx0aW1lLmg+CiAKQEAgLTY3LDYgKzcx
LDExIEBAIHN0cnVjdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gewogICAgIH0KIAogfTsKKyNlbGlm
IFBMQVRGT1JNKFFUKQordHlwZWRlZiBRRmlsZSogUGxhdGZvcm1GaWxlSGFuZGxlOwordHlwZWRl
ZiBRTGlicmFyeSogUGxhdGZvcm1Nb2R1bGU7Citjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IDA7Cit0eXBlZGVmIHVuc2lnbmVkIFBsYXRmb3JtTW9k
dWxlVmVyc2lvbjsKICNlbHNlCiB0eXBlZGVmIGludCBQbGF0Zm9ybUZpbGVIYW5kbGU7CiAjaWYg
UExBVEZPUk0oR1RLKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsOSBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgc2V0TmF0aXZlV2lkZ2V0KFFXaWRnZXQgKndpZGdldCk7
CiAgICAgICAgIFFXaWRnZXQqIG5hdGl2ZVdpZGdldCgpIGNvbnN0OwogCisgICAgICAgIHZvaWQg
c2V0SXNOUEFQSVBsdWdpbihib29sKTsKKyAgICAgICAgYm9vbCBpc05QQVBJUGx1Z2luKCkgY29u
c3Q7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CiAgICAg
ICAgIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZ2Vv
bWV0cnlDaGFuZ2VkKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMyNDMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBA
QAogI2luY2x1ZGUgIkZUUERpcmVjdG9yeURvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgot
I2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAKQEAgLTU4LDI4ICs1Niw3IEBAIFZlY3RvcjxjaGFyPiBsb2Fk
UmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKIC8qIENvbXBsZXRlbHkgZW1wdHkgc3R1YnMgKG1vc3Rs
eSB0byBhbGxvdyBEUlQgdG8gcnVuKTogKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBh
cmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gZmFsc2U7IH0KLXVuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhhc2goKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmVxdWFs
KGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQbHVnaW5QYWNrYWdlJikgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNldE5QV2lu
ZG93UmVjdChjb25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1jb25zdCBjaGFy
KiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9
Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCopIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQogdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5QUmVnaW9uKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcoKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0Rm9jdXMoKSB7IFdpZGdldDo6c2V0
Rm9jdXMoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzaG93KCkgeyBXaWRnZXQ6OnNob3coKTsgfQot
dm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkgeyBXaWRnZXQ6OmhpZGUoKTsgfQotdm9pZCBQbHVnaW5W
aWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiB2aWV3KSB7
IFdpZGdldDo6c2V0UGFyZW50KHZpZXcpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmF0dGFjaFRvV2lu
ZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmRldGFjaEZyb21X
aW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLU5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxl
UG9zdChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVpbnQzMiwgY29uc3QgY2hhciosIGJvb2ws
IHZvaWQqLCBib29sLCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOyB9Ci12b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1QbHVnaW5W
aWV3Ojp+UGx1Z2luVmlldygpIHt9CiAKIENvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkg
eyByZXR1cm4gMHhGRjAwMDBGRjsgfQogdm9pZCBXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNo
YW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgfQpAQCAtOTMsOCArNzAsNSBAQCBTdHJpbmcgS1VS
TDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25zdCB7IG5vCiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBTaGFyZWRCdWZmZXI6OmNyZWF0ZVdpdGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CiAKLXZvaWQgUGx1Z2luRGF0YTo6aW5pdFBs
dWdpbnMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQv
RmlsZVN5c3RlbVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVT
eXN0ZW1RdC5jcHAJKHJldmlzaW9uIDMyNDMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxl
U3lzdGVtUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw5IEBACiAKICNpbmNsdWRl
IDxRRGF0ZVRpbWU+CiAjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UVRlbXBvcmFyeUZpbGU+
CiAjaW5jbHVkZSA8UUZpbGVJbmZvPgorI2luY2x1ZGUgPFFEYXRlVGltZT4KICNpbmNsdWRlIDxR
RGlyPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04OCwxMCArOTAsMzUgQEAgU3RyaW5nIHBh
dGhHZXRGaWxlTmFtZShjb25zdCBTdHJpbmcmIHBhdAogICAgIHJldHVybiBRRmlsZUluZm8ocGF0
aCkuZmlsZU5hbWUoKTsKIH0KIAotYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUpCitD
U3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxhdGZvcm1GaWxl
SGFuZGxlJiBoYW5kbGUpCit7CisgICAgUUZpbGUgKnRlbXAgPSBuZXcgUVRlbXBvcmFyeUZpbGUo
UVN0cmluZyhwcmVmaXgpKTsKKyAgICBpZiggdGVtcC0+b3BlbihRSU9EZXZpY2U6OlJlYWRXcml0
ZSkgKSB7CisgICAgICAgIGhhbmRsZSA9IHRlbXA7CisgICAgICAgIHJldHVybiBTdHJpbmcodGVt
cC0+ZmlsZU5hbWUoKSkudXRmOCgpOworICAgIH0KKyAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZv
cm1GaWxlSGFuZGxlOworICAgIHJldHVybiAwOworfQorCit2b2lkIGNsb3NlRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZihoYW5kbGUpIHsKKyAgICAgICAgaGFuZGxl
LT5jbG9zZSgpOworICAgICAgICBkZWxldGUgaGFuZGxlOworICAgIH0KK30KKworaW50IHdyaXRl
VG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgaWYoaGFuZGxlICYmIGhhbmRsZS0+ZXhpc3RzKCkgJiYgaGFuZGxlLT5p
c1dyaXRhYmxlKCkpIHsKKyAgICAgICAgaGFuZGxlLT53cml0ZShkYXRhLCBsZW5ndGgpOworICAg
IH0KK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtb2R1bGUt
PnVubG9hZCgpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNDEgKzcyLDExIEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi12b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVn
aW5QYXRoc0luRGlyZWN0b3JpZXMoSGFzaFNldDxTdHJpbmc+JikgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci1WZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRp
cmVjdG9yaWVzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsg
fQotYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLWludCBQbHVnaW5Q
YWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdCB7IG5vdEltcGxlbWVu
dGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci11bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpo
YXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5Q
YWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1Z2luUGFja2FnZSYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6
OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBQbHVnaW5W
aWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gMDsgfQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihO
UFJlZ2lvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVk
cmF3KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkg
eyBXaWRnZXQ6OnNldEZvY3VzKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygpIHsgV2lkZ2V0
OjpzaG93KCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpIHsgV2lkZ2V0OjpoaWRlKCk7IH0K
LXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xs
VmlldyogdmlldykgeyBXaWRnZXQ6OnNldFBhcmVudCh2aWV3KTsgfQotdm9pZCBQbHVnaW5WaWV3
OjphdHRhY2hUb1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3
OjpkZXRhY2hGcm9tV2luZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1OUEVycm9yIFBsdWdp
blZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1aW50MzIsIGNvbnN0
IGNoYXIqLCBib29sLCB2b2lkKiwgYm9vbCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgfQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3co
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBs
dWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQotUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSB7fQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFZlY3RvcjxTdHJpbmc+IHN1cHBvcnRlZEtleVNpemVzKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsgfQogU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyAmY2hhbGxl
bmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAKLUNTdHJp
bmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5k
bGUmIGhhbmRsZSkgeyBub3RJbXBsZW1lbnRlZCgpOyBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlOyByZXR1cm4gMDsgfQotdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9OwotaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkgeyByZXR1cm4gLTE7IH07Ci0KICNp
ZiAhZGVmaW5lZChRX09TX1dJTikKIC8vIGRlZmluZWQgaW4gd2luL1N5c3RlbVRpbWVXaW4uY3Bw
LCB3aGljaCBpcyBjb21waWxlZCBmb3IgdGhlIFF0L1dpbmRvd3MgcG9ydAogZmxvYXQgdXNlcklk
bGVUaW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMC4wOyB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3F0L1dpZGdldFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1dpZGdldFF0LmNwcAkocmV2aXNpb24gMzI0MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0
L1dpZGdldFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBzdHJ1Y3QgV2lk
Z2V0UHJpdmF0ZQogICAgICAgICAsIGVuYWJsZWQodHJ1ZSkKICAgICAgICAgLCBzdXBwcmVzc0lu
dmFsaWRhdGlvbihmYWxzZSkKICAgICAgICAgLCBtX3dpZGdldCgwKQorICAgICAgICAsIGlzTlBB
UElQbHVnaW4oMCkKICAgICAgICAgLCBtX3BhcmVudFNjcm9sbFZpZXcoMCkgeyB9CiAgICAgfldp
ZGdldFByaXZhdGUoKSB7fQogCkBAIC02Niw2ICs2Nyw3IEBAIHN0cnVjdCBXaWRnZXRQcml2YXRl
CiAKICAgICBib29sIGVuYWJsZWQ7CiAgICAgYm9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbjsKKyAg
ICBib29sIGlzTlBBUElQbHVnaW47CiAgICAgUVJlY3QgbV9nZW9tZXRyeTsKICAgICBRV2lkZ2V0
ICptX3dpZGdldDsgLy9mb3IgcGx1Z2lucwogICAgIFNjcm9sbFZpZXcgKm1fcGFyZW50U2Nyb2xs
VmlldzsKQEAgLTE0MSw2ICsxNDMsMTYgQEAgdm9pZCBXaWRnZXQ6OnNldE5hdGl2ZVdpZGdldChR
V2lkZ2V0ICp3aQogICAgIGRhdGEtPm1fd2lkZ2V0ID0gd2lkZ2V0OwogfQogCitib29sIFdpZGdl
dDo6aXNOUEFQSVBsdWdpbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmlzTlBBUElQbHVn
aW47Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRJc05QQVBJUGx1Z2luKGJvb2wgaXMpCit7CisgICAg
ZGF0YS0+aXNOUEFQSVBsdWdpbiA9IGlzOworfQorCiB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0ICosIGNvbnN0IEludFJlY3QgJnJlY3QpCiB7CiB9CkluZGV4OiBXZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9QbHVn
aW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTYgKzI3LDMwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBs
dWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKCkKIHsKKyAgICAvLyBUaGlzIGRlc3RydWN0b3Ig
Z2V0cyBjYWxsZWQgZHVyaW5nIHJlZnJlc2goKSBpZiBQbHVnaW5EYXRhYmFzZSdzCisgICAgLy8g
UGx1Z2luU2V0IGhhc2ggaXMgYWxyZWFkeSBwb3B1bGF0ZWQsIGFzIGl0IHJlbW92ZXMgaXRlbXMg
ZnJvbQorICAgIC8vIHRoZSBoYXNoIHRhYmxlLiBDYWxsaW5nIHRoZSBkZXN0cnVjdG9yIG9uIGEg
bG9hZGVkIHBsdWctaW4gb2YKKyAgICAvLyBjb3Vyc2Ugd291bGQgY2F1c2UgYSBjcmFzaCwgc28g
d2UgY2hlY2sgdG8gY2FsbCB1bmxvYWQgYmVmb3JlIHdlCisgICAgLy8gQVNTRVJULgorICAgIC8v
IEZJWE1FOiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZml4IHRoaXMuCisgICAg
aWYgKG1fbG9hZENvdW50ID09IDApCisJICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAg
IGVsc2UKKwkgICAgdW5sb2FkKCk7CisKICAgICBBU1NFUlQoIW1faXNMb2FkZWQpOwogfQogCkBA
IC01OCw2ICs3MiwzMSBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmZyZWVMaWJyYXJ5VGltZXJGaXJl
CiAgICAgbV9tb2R1bGUgPSAwOwogfQogCisKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNv
bnN0IFBsdWdpblBhY2thZ2UmIGNvbXBhcmVUbykgY29uc3QKK3sKKyAgICAvLyBTb3J0IHBsdWct
aW5zIHRoYXQgYWxsb3cgbXVsdGlwbGUgaW5zdGFuY2VzIGZpcnN0LgorICAgIGJvb2wgQWFsbG93
c011bHRpcGxlSW5zdGFuY2VzID0gIXF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFs
bG93TXVsdGlwbGVJbnN0YW5jZXMpOworICAgIGJvb2wgQmFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ID0gIWNvbXBhcmVUby5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRp
cGxlSW5zdGFuY2VzKTsKKyAgICBpZiAoQWFsbG93c011bHRpcGxlSW5zdGFuY2VzICE9IEJhbGxv
d3NNdWx0aXBsZUluc3RhbmNlcykKKyAgICAgICAgcmV0dXJuIEFhbGxvd3NNdWx0aXBsZUluc3Rh
bmNlcyA/IC0xIDogMTsKKworICAgIC8vIFNvcnQgcGx1Zy1pbnMgaW4gYSBwcmVmZXJyZWQgcGF0
aCBmaXJzdC4KKyAgICBib29sIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID0gUGx1Z2luRGF0YWJh
c2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KHBhcmVudERpcmVjdG9yeSgpKTsKKyAgICBi
b29sIEJpc0luUHJlZmVycmVkRGlyZWN0b3J5ID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVk
UGx1Z2luRGlyZWN0b3J5KGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7CisgICAgaWYgKEFp
c0luUHJlZmVycmVkRGlyZWN0b3J5ICE9IEJpc0luUHJlZmVycmVkRGlyZWN0b3J5KQorICAgICAg
ICByZXR1cm4gQWlzSW5QcmVmZXJyZWREaXJlY3RvcnkgPyAtMSA6IDE7CisKKyAgICBpbnQgZGlm
ZiA9IHN0cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmY7CisKKyAgICBpZiAo
ZGlmZiA9IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKSkKKyAgICAgICAg
cmV0dXJuIGRpZmY7CisKKyAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0Zjgo
KS5kYXRhKCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKK30K
KwogUGx1Z2luUGFja2FnZTo6UGx1Z2luUGFja2FnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IHRpbWVfdCYgbGFzdE1vZGlmaWVkKQogICAgIDogbV9wYXRoKHBhdGgpCiAgICAgLCBtX21vZHVs
ZVZlcnNpb24oMCkKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDMyNDMwKQor
KysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMs
NTUgKzM5Myw2IEBAIHZvaWQgUGx1Z2luVmlldzo6c3RhdHVzKGNvbnN0IGNoYXIqIG1lc3MKICAg
ICAgICAgcGFnZS0+Y2hyb21lKCktPnNldFN0YXR1c2JhclRleHQobV9wYXJlbnRGcmFtZSwgU3Ry
aW5nKG1lc3NhZ2UpKTsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJp
YWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCi17Ci0gICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1
c2VkKQotICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLQotICAgIHN3aXRjaCAo
dmFyaWFibGUpIHsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAgICAgY2Fz
ZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKLSAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3Jp
cHRPYmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOwotCi0gICAg
ICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRl
c2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBy
dW50aW1lLmh0bWw+Ci0gICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQotICAgICAg
ICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7Ci0KLSAgICAg
ICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKLSAgICAgICAgICAgICp2ID0gd2luZG93
U2NyaXB0T2JqZWN0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmpl
Y3Q6IHsKLSAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRPYmplY3QgPSAwOwotCi0g
ICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVt
ZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkKLSAgICAgICAgICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxI
VE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7Ci0KLSAgICAgICAg
ICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3Jp
YmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRp
bWUuaHRtbD4KLSAgICAgICAgICAgIGlmIChwbHVnaW5TY3JpcHRPYmplY3QpCi0gICAgICAgICAg
ICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2luU2NyaXB0T2JqZWN0KTsKLQotICAgICAgICAg
ICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3Jp
cHRPYmplY3Q7Ci0KLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAg
fQotI2VuZGlmCi0KLSAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKLSAgICAgICAg
ICAgIFBsYXRmb3JtV2lkZ2V0KiB3ID0gcmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybVdpZGdldCo+
KHZhbHVlKTsKLQotICAgICAgICAgICAgKncgPSBjb250YWluaW5nV2luZG93KCk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Ci0gICAgfQotfQotCiBO
UEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlKE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2
YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CkBAIC01OTcsNiArNTQ4LDEwIEBAIFBs
dWdpblZpZXc6OlBsdWdpblZpZXcoRnJhbWUqIHBhcmVudEZyYW0KIAogICAgIHNldFBhcmFtZXRl
cnMocGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogCisjaWZkZWYgWFBfVU5JWAorICAgIG1fbnBX
aW5kb3cud3NfaW5mbyA9IDA7CisjZW5kaWYKKwogICAgIG1fbW9kZSA9IG1fbG9hZE1hbnVhbGx5
ID8gTlBfRlVMTCA6IE5QX0VNQkVEOwogCiAgICAgcmVzaXplKHNpemUpOwpAQCAtNjcxLDQgKzYy
NiwyMjkgQEAgUGx1Z2luVmlldyogUGx1Z2luVmlldzo6Y3JlYXRlKEZyYW1lKiBwYQogICAgIHJl
dHVybiBuZXcgUGx1Z2luVmlldyhwYXJlbnRGcmFtZSwgc2l6ZSwgcGx1Z2luLCBlbGVtZW50LCB1
cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZUNvcHksIGxvYWRNYW51YWxseSk7
CiB9CiAKK3ZvaWQgUGx1Z2luVmlldzo6ZnJlZVN0cmluZ0FycmF5KGNoYXIqKiBzdHJpbmdBcnJh
eSwgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZ0FycmF5KQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBmYXN0RnJl
ZShzdHJpbmdBcnJheVtpXSk7CisKKyAgICBmYXN0RnJlZShzdHJpbmdBcnJheSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQoreworICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0g
J1xuJzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5l
KGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0g
YnVmZmVyLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCAtIDQ7IGkrKykgeworICAgICAgICAv
LyBTdXBwb3J0IGZvciBBY3JvYmF0LiBJdCBzZW5kcyAiXG5cbiIuCisgICAgICAgIGlmIChieXRl
c1tpXSA9PSAnXG4nICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0dXJu
IGkgKyAyOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gYWZ0ZXIg
MiBDUkxGJ3Mgb3IgMSBDUkxGIGlmIGl0IGlzIHRoZSBmaXJzdCBsaW5lLgorICAgICAgICBpZiAo
Ynl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykgeworICAgICAgICAgICAg
aSArPSAyOworICAgICAgICAgICAgaWYgKGkgPT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4g
aTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdcbicpCisgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydCBmb3IgRGlyZWN0b3IuIEl0IHNlbmRzICJcclxuXG4iICgzODgwMzg3KS4K
KyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7CisgICAgICAgICAgICBlbHNlIGlmIChieXRl
c1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQgZm9yIEZsYXNoLiBJdCBzZW5kcyAiXHJcblxyXG4iICgzNzU4MTEzKS4KKyAgICAg
ICAgICAgICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
LTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogZmluZEVPTChjb25zdCBjaGFyKiBi
eXRlcywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRUUCBz
cGVjaWZpY2F0aW9uIEVPTCBpcyBkZWZpbmVkIGFzCisgICAgLy8gYSBDUkxGIHBhaXIuIFVuZm9y
dHVuYXRlbHksIHNvbWUgc2VydmVycyB3aWxsIHVzZSBMRgorICAgIC8vIGluc3RlYWQuIFdvcnNl
IHlldCwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIGEgY29tYmluYXRpb24KKyAgICAvLyBvZiBib3Ro
IChlLmcuIDxoZWFkZXI+Q1JMRkxGPGJvZHk+KSwgc28gZmluZEVPTCBuZWVkcworICAgIC8vIHRv
IGJlIG1vcmUgZm9yZ2l2aW5nLiBJdCB3aWxsIG5vdyBhY2NlcHQgQ1JMRiwgTEYgb3IKKyAgICAv
LyBDUi4KKyAgICAvLworICAgIC8vIEl0IHJldHVybnMgTlVMTCBpZiBFT0xGIGlzIG5vdCBmb3Vu
ZCBvciBpdCB3aWxsIHJldHVybgorICAgIC8vIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgdGVybWlu
YXRpbmcgY2hhcmFjdGVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAgICAgIHJldHVybiBi
eXRlcyArIGk7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInKSB7CisgICAgICAgICAgICAv
LyBDaGVjayB0byBzZWUgaWYgc3Bhbm5pbmcgYnVmZmVyIGJvdW5kcworICAgICAgICAgICAgLy8g
KENSTEYgaXMgYWNyb3NzIHJlYWRzKS4gSWYgc28sIHdhaXQgZm9yCisgICAgICAgICAgICAvLyBu
ZXh0IHJlYWQuCisgICAgICAgICAgICBpZiAoaSArIDEgPT0gbGVuZ3RoKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICByZXR1cm4gYnl0ZXMgKyBpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhcGl0YWxp
emVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGJvb2wg
Y2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7CisgICAgU3RyaW5nIHJlc3VsdDsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgVUNo
YXIgYzsKKworICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdh
JyAmJiBuYW1lW2ldIDw9ICd6JykKKyAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtp
XSk7CisgICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0g
J0EnICYmIG5hbWVbaV0gPD0gJ1onKQorICAgICAgICAgICAgYyA9IHRvQVNDSUlMb3dlcihuYW1l
W2ldKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IG5hbWVbaV07CisKKyAgICAgICAg
aWYgKG5hbWVbaV0gPT0gJy0nKQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRy
dWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxz
ZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgIH0KKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZp
ZWxkcyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IGNvbnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKKyAgICBjb25zdCBjaGFyKiBlb2w7
CisgICAgU3RyaW5nIGxhc3RLZXk7CisgICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7CisK
KyAgICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3
ZSBjYW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcworICAgIHdoaWxlICgoZW9sID0gZmlu
ZEVPTChieXRlcywgbGVuZ3RoKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVz
OworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOworICAgICAgICAKKyAgICAg
ICAgLy8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFz
IHJldHVybmVkIGJ5IGZpbmRFT0wuCisgICAgICAgIGJ5dGVzID0gZW9sICsgMTsKKyAgICAgICAg
aWYgKCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCisgICAgICAgICAgICBieXRl
cysrOyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4K
KworICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7CisgICAgICAgIGlmIChsaW5lTGVu
Z3RoID09IDApCisgICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9m
IHRoZSBoZWFkZXIKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlIGlmICgqbGluZSA9
PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykgeworICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9m
IHRoZSBwcmV2aW91cyBoZWFkZXIKKyAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250
aW51ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBo
ZWFkZXIKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRz
LmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUobGluZSwgbGlu
ZUxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIGN1
cnJlbnRWYWx1ZSArIG5ld1ZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEJyYW5kIG5ldyBoZWFkZXIKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGNvbG9uOworICAgICAgICAgICAgZm9yIChjb2xvbiA9IGxpbmU7ICpjb2xvbiAhPSAnOicgJiYg
Y29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAgICAgICAgLy8gZW1wdHkgbG9vcAor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkgCisgICAgICAgICAg
ICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51ZQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
bGFzdEtleSA9IGNhcGl0YWxpemVSRkM4MjJIZWFkZXJGaWVsZE5hbWUoU3RyaW5nKGxpbmUsIGNv
bG9uIC0gbGluZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKworICAgICAgICAg
ICAgICAgIGZvciAoY29sb24rKzsgY29sb24gIT0gZW9sOyBjb2xvbisrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgqY29sb24gIT0gJyAnICYmICpjb2xvbiAhPSAnXHQnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChjb2xvbiA9PSBlb2wpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFN0cmluZyhjb2xv
biwgZW9sIC0gY29sb24pOworCisgICAgICAgICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaGVh
ZGVyRmllbGRzLmdldChsYXN0S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoIW9sZFZhbHVlLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0bXAgPSBvbGRWYWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdG1wICs9ICIsICI7CisgICAgICAgICAgICAgICAgICAgIHRtcCAr
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXA7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCB2YWx1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGVhZGVyRmll
bGRzOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJs
LCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBm
aWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dI
ZWFkZXJzKQoreworICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0lOVkFMSURfUEFSQU07CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3Q7CisKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxkczsKKyAgICBWZWN0b3I8Y2hh
cj4gYnVmZmVyOworICAgIAorICAgIGlmIChmaWxlKSB7CisgICAgICAgIE5QRXJyb3IgcmVhZFJl
c3VsdCA9IGhhbmRsZVBvc3RSZWFkRmlsZShidWZmZXIsIGxlbiwgYnVmKTsKKyAgICAgICAgaWYo
cmVhZFJlc3VsdCAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgICAgIHJldHVybiByZWFkUmVz
dWx0OworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobGVuKTsKKyAgICAgICAg
bWVtY3B5KGJ1ZmZlci5kYXRhKCksIGJ1ZiwgbGVuKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFy
KiBwb3N0RGF0YSA9IGJ1ZmZlci5kYXRhKCk7CisgICAgaW50IHBvc3REYXRhTGVuZ3RoID0gYnVm
ZmVyLnNpemUoKTsKKworICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKKyAgICAgICAgaWYgKHN0YXJ0
c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgeworICAgICAgICAgICAgcG9zdERhdGErKzsKKyAgICAg
ICAgICAgIHBvc3REYXRhTGVuZ3RoLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
bnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKKyAgICAg
ICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBi
bGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5
dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMg
PSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOworCisg
ICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1M
ZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKKyAgICAgICAgICAgICAgICAvLyBidXQg
V2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBo
ZWFkZXIKKyAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0
byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExl
bmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisK
KyAgICAgICAgICAgICAgICBwb3N0RGF0YSArPSBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBw
b3N0RGF0YUxlbmd0aCA9IGRhdGFMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBNZXRo
b2QoIlBPU1QiKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldFVS
TChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJj
ZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmllbGRzKGhlYWRlckZpZWxkcyk7CisgICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRl
KHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpOworICAgIGZyYW1lTG9hZFJlcXVlc3Quc2V0RnJh
bWVOYW1lKHRhcmdldCk7CisKKyAgICByZXR1cm4gbG9hZChmcmFtZUxvYWRSZXF1ZXN0LCBzZW5k
Tm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5oCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzEsNiArMTcxLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50UGx1
Z2luVmlldyhQbHVnaW5WaWV3Kik7CiAgICAgICAgIE5QRXJyb3IgbG9hZChjb25zdCBGcmFtZUxv
YWRSZXF1ZXN0JiwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCB2b2lkKiBub3RpZnlEYXRhKTsKICAg
ICAgICAgTlBFcnJvciBoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFy
Z2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5
RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVhZGVycyk7CisgICAgICAg
IE5QRXJyb3IgaGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYpOworICAgICAgICBzdGF0aWMgdm9pZCBmcmVlU3RyaW5nQXJy
YXkoY2hhcioqIHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKTsKICAgICAgICAgdm9pZCBzZXRDYWxs
aW5nUGx1Z2luKGJvb2wpIGNvbnN0OwogICAgICAgICBSZWZQdHI8UGx1Z2luUGFja2FnZT4gbV9w
bHVnaW47CiAgICAgICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKQEAgLTIyMSw2ICsyMjMsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fYXR0YWNoZWRUb1dpbmRvdzsKICAg
ICAgICAgYm9vbCBtX2hhdmVJbml0aWFsaXplZDsKIAorI2lmIFBMQVRGT1JNKEdUSykgfHwgZGVm
aW5lZChRX1dTX1gxMSkKKyAgICAgICAgYm9vbCBtX25lZWRzWEVtYmVkOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgICAgIE93blB0cjxQbHVnaW5NZXNzYWdlVGhyb3R0bGVyV2lu
PiBtX21lc3NhZ2VUaHJvdHRsZXI7CiAgICAgICAgIFdORFBST0MgbV9wbHVnaW5XbmRQcm9jOwpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
dWdpbnMvbnBhcGkuY3BwCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ucGFw
aS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsMTEgQEAgdm9pZCBOUE5fRm9yY2VS
ZWRyYXcoTlBQIGluc3RhbmNlKQogCiBOUEVycm9yIE5QTl9HZXRWYWx1ZShOUFAgaW5zdGFuY2Us
IE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKIHsKKyAgICAvLyBGSVhNRTogQWNy
b2JhdCByZWFkZXIgcGx1Z2luIGNhbGxzIE5QTl9HZXRWYWx1ZSBiZWZvcmUgYSBQbHVnaW5WaWV3
CisgICAgLy8gaGFzIGJlZW4gY3JlYXRlZAorICAgIGlmICghaW5zdGFuY2UpCisgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCiAgICAgcmV0dXJuIHBsdWdpblZpZXdGb3JJbnN0
YW5jZShpbnN0YW5jZSktPmdldFZhbHVlKHZhcmlhYmxlLCB2YWx1ZSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVk
ZSA8c3RkaW8uaD4KK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0
UGx1Z2lucygpCit7CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omlu
c3RhbGxlZFBsdWdpbnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+ICZwbHVn
aW5zID0gZGItPnBsdWdpbnMoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
cGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBs
dWdpbkluZm87CisgICAgICAgIFBsdWdpblBhY2thZ2UqIHBhY2thZ2UgPSBwbHVnaW5zW2ldOwor
CisgICAgICAgIGluZm8tPm5hbWUgPSBwYWNrYWdlLT5uYW1lKCk7CisgICAgICAgIGluZm8tPmZp
bGUgPSBwYWNrYWdlLT5maWxlTmFtZSgpOworICAgICAgICBpbmZvLT5kZXNjID0gcGFja2FnZS0+
ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBjb25zdCBNSU1FVG9EZXNjcmlwdGlvbnNNYXAmIG1p
bWVUb0Rlc2NyaXB0aW9ucyA9IHBhY2thZ2UtPm1pbWVUb0Rlc2NyaXB0aW9ucygpOworICAgICAg
ICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1pbWVUb0Rlc2Ny
aXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZv
OworICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworCisgICAgICAgICAgICBt
aW1lLT50eXBlID0gaXQtPmZpcnN0OworICAgICAgICAgICAgbWltZS0+ZGVzYyA9IGl0LT5zZWNv
bmQ7CisgICAgICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOworCisgICAgICAgICAgICBWZWN0
b3I8U3RyaW5nPiBleHRlbnNpb25zID0gcGFja2FnZS0+bWltZVRvRXh0ZW5zaW9ucygpLmdldCht
aW1lLT50eXBlKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4dGVu
c2lvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAg
ICAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzICs9ICIsIjsKKworICAgICAgICAgICAgICAgIG1p
bWUtPnN1ZmZpeGVzICs9IGV4dGVuc2lvbnNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQbHVn
aW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRh
YmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGRiLT5yZWZyZXNoKCk7Cit9CisKK307CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCShyZXZpc2lvbiAzMjQzMCkKKysr
IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUGFja2FnZS5oIgorI2luY2x1ZGUgPGdka2NvbmZpZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTYwLDYgKzYxLDggQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRl
ZmF1bHRQbAogICAgIFZlY3RvcjxTdHJpbmc+IGRpcmVjdG9yaWVzOwogICAgIGdjaGFyKiBkaXJl
Y3Rvcnk7CiAKKyAgICBkaXJlY3RvcnkgPSAwOworCiAjaWYgZGVmaW5lZChHREtfV0lORE9XSU5H
X1gxMSkKICAgICBkaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCks
ICIubW96aWxsYSIsICJwbHVnaW5zIiwgTlVMTCk7CiAgICAgZGlyZWN0b3JpZXMuYXBwZW5kKGRp
cmVjdG9yeSk7CkBAIC05NSw3ICs5OCwyMSBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsCiAKIGJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5KQogewotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBnY2hhciogaG9tZVBhdGg7CisgICAgYm9vbCByZXR2YWwgPSBmYWxzZTsKKworICAgIGhvbWVQ
YXRoID0gMDsKKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaG9tZVBhdGgg
PSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICIubW96aWxsYSIsICJwbHVnaW5z
IiwgMCk7CisjZWxpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfV0lOMzIpCisgICAgaG9tZVBhdGgg
PSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X2hvbWVfZGlyKCksICJBcHBsaWNhdGlvbiBEYXRhIiwg
Ik1vemlsbGEiLCAicGx1Z2lucyIsIDApOworI2VuZGlmCisKKyAgICBpZiAoaG9tZVBhdGgpCisJ
cmV0dmFsID0gKHN0cmNtcChob21lUGF0aCwgKGRpcmVjdG9yeS51dGY4KCkpLmRhdGEoKSkgPT0g
MCk7CisKKyAgICByZXR1cm4gcmV0dmFsOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
YWNrYWdlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2ludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24oY29uc3QgUGxhdGZvcm1N
b2R1bGVWZXJzaW9uJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQoreworICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRN
SU1FVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBhIHNpbmdsZSBwcm9jZXNz
IGNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgVk1zLCBhbmQgd2UgY2Fubm90IHJlbGlhYmx5IHVubG9h
ZCBhCisgICAgICAgIC8vIEphdmEgVk0sIHdlIGNhbm5vdCB1bmxvYWQgdGhlIEphdmEgcGx1Z2lu
LCBvciB3ZSdsbCBsb3NlIHJlZmVyZW5jZSB0byBvdXIgb25seSBWTQorICAgICAgICBtX3F1aXJr
cy5hZGQoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKTsKKworICAgICAgICAvLyBTZXR0aW5n
IHRoZSB3aW5kb3cgcmVnaW9uIHRvIGFuIGVtcHR5IHJlZ2lvbiBjYXVzZXMgYmFkIHNjcm9sbGlu
ZyByZXBhaW50IHByb2JsZW1zCisgICAgICAgIC8vIHdpdGggdGhlIEphdmEgcGx1Zy1pbi4KKyAg
ICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udENsaXBUb1plcm9SZWN0V2hlblNjcm9s
bGluZyk7CisgICAgfQorfQorCitib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpCit7Cisg
ICAgaWYgKCFsb2FkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5QX0dldE1JTUVE
ZXNjcmlwdGlvbkZ1bmNQdHIgTlBfR2V0TUlNRURlc2NyaXB0aW9uOworICAgIE5QUF9HZXRWYWx1
ZVByb2NQdHIgTlBQX0dldFZhbHVlOworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAi
TlBfR2V0TUlNRURlc2NyaXB0aW9uIiwgKHZvaWQqKikmTlBfR2V0TUlNRURlc2NyaXB0aW9uKTsK
KyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9HZXRWYWx1ZSIsICh2b2lkKiopJk5Q
UF9HZXRWYWx1ZSk7CisKKyAgICBjb25zdCBnY2hhciogdHlwZXMgPSBOUF9HZXRNSU1FRGVzY3Jp
cHRpb24oKTsKKyAgICBnY2hhcioqIG1pbWVEZXNjcyA9IGdfc3Ryc3BsaXQodHlwZXMsICI7Iiwg
LTEpOworICAgIGZvciAoaW50IGkgPSAwOyBtaW1lRGVzY3NbaV0gJiYgbWltZURlc2NzW2ldWzBd
OyBpKyspIHsKKyAgICAgICAgZ2NoYXIqKiBtaW1lRGF0YSA9IGdfc3Ryc3BsaXQobWltZURlc2Nz
W2ldLCAiOiIsIDMpOworCisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZzo6ZnJv
bVVURjgobWltZURhdGFbMl0pOworICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnMgPSBnX3N0cnNw
bGl0KG1pbWVEYXRhWzFdLCAiLCIsIC0xKTsKKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRW
ZWN0b3I7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBleHRlbnNpb25zW2pdOyBqKyspCisgICAg
ICAgICAgICBleHRWZWN0b3IuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgoZXh0ZW5zaW9uc1tqXSkp
OworCisgICAgICAgIG1fbWltZVRvRXh0ZW5zaW9ucy5hZGQobWltZURhdGFbMF0sIGV4dFZlY3Rv
cik7CisgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25zLmFkZChtaW1lRGF0YVswXSwgZGVzY3Jp
cHRpb24pOworCisgICAgICAgIGdfc3RyZnJlZXYoZXh0ZW5zaW9ucyk7CisgICAgICAgIGdfc3Ry
ZnJlZXYobWltZURhdGEpOworICAgIH0KKyAgICBnX3N0cmZyZWV2KG1pbWVEZXNjcyk7CisKKyAg
ICBjaGFyKiBidWZmZXIgPSAwOworICAgIE5QRXJyb3IgZXJyID0gTlBQX0dldFZhbHVlKDAsIE5Q
UFZwbHVnaW5OYW1lU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJSX05PX0VS
Uk9SKQorICAgICAgICBtX25hbWUgPSBidWZmZXI7CisKKyAgICBidWZmZXIgPSAwOworICAgIGVy
ciA9IE5QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICZidWZmZXIp
OworICAgIGlmIChlcnIgPT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fZGVzY3JpcHRpb24g
PSBidWZmZXI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjps
b2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkgeworICAgICAgICBtX2xvYWRDb3VudCsrOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX21vZHVsZSA9IGdfbW9kdWxlX29w
ZW4oKG1fcGF0aC51dGY4KCkpLmRhdGEoKSwgR19NT0RVTEVfQklORF9MT0NBTCk7CisKKyAgICBp
ZiAoIW1fbW9kdWxlKSB7CisJICAgIExPRyhQbHVnaW4sIk1vZHVsZSBMb2FkIEZhaWxlZCA6JXMs
IEVycm9yOiVzXG4iLCAobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBnX21vZHVsZV9lcnJvcigpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCX0KKworICAgIG1faXNMb2FkZWQgPSB0cnVlOworCisg
ICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlhbGl6ZTsKKyAgICBOUEVycm9yIG5wRXJy
OworCisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfSW5pdGlhbGl6ZSIsICh2b2lk
KiopJk5QX0luaXRpYWxpemUpOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX1No
dXRkb3duIiwgKHZvaWQqKikmbV9OUFBfU2h1dGRvd24pOworCisgICAgaWYgKCFOUF9Jbml0aWFs
aXplIHx8ICFtX05QUF9TaHV0ZG93bikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAgIG1lbXNl
dCgmbV9wbHVnaW5GdW5jcywgMCwgc2l6ZW9mKG1fcGx1Z2luRnVuY3MpKTsKKyAgICBtX3BsdWdp
bkZ1bmNzLnNpemUgPSBzaXplb2YobV9wbHVnaW5GdW5jcyk7CisKKyAgICBtX2Jyb3dzZXJGdW5j
cy5zaXplID0gc2l6ZW9mIChtX2Jyb3dzZXJGdW5jcyk7CisgICAgbV9icm93c2VyRnVuY3MudmVy
c2lvbiA9IE5QX1ZFUlNJT05fTUlOT1I7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsID0gTlBO
X0dldFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsID0gTlBOX1Bvc3RVUkw7CisgICAg
bV9icm93c2VyRnVuY3MucmVxdWVzdHJlYWQgPSBOUE5fUmVxdWVzdFJlYWQ7CisgICAgbV9icm93
c2VyRnVuY3MubmV3c3RyZWFtID0gTlBOX05ld1N0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy53
cml0ZSA9IE5QTl9Xcml0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5kZXN0cm95c3RyZWFtID0gTlBO
X0Rlc3Ryb3lTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Muc3RhdHVzID0gTlBOX1N0YXR1czsK
KyAgICBtX2Jyb3dzZXJGdW5jcy51YWdlbnQgPSBOUE5fVXNlckFnZW50OworICAgIG1fYnJvd3Nl
ckZ1bmNzLm1lbWFsbG9jID0gTlBOX01lbUFsbG9jOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZy
ZWUgPSBOUE5fTWVtRnJlZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mbHVzaCA9IE5QTl9NZW1G
bHVzaDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1JlbG9hZFBsdWdp
bnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVSTE5vdGlmeTsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxOb3RpZnk7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAgbV9icm93c2Vy
RnVuY3Muc2V0dmFsdWUgPSBOUE5fU2V0VmFsdWU7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxp
ZGF0ZXJlY3QgPSBOUE5fSW52YWxpZGF0ZVJlY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52YWxp
ZGF0ZXJlZ2lvbiA9IE5QTl9JbnZhbGlkYXRlUmVnaW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmZv
cmNlcmVkcmF3ID0gTlBOX0ZvcmNlUmVkcmF3OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFF
bnYgPSBOUE5fR2V0SmF2YUVudjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhUGVlciA9IE5Q
Tl9HZXRKYXZhUGVlcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRl
ID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgbV9icm93c2VyRnVuY3MucG9wcG9w
dXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZTsKKworICAgIG1fYnJv
d3NlckZ1bmNzLnJlbGVhc2V2YXJpYW50dmFsdWUgPSBfTlBOX1JlbGVhc2VWYXJpYW50VmFsdWU7
CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllciA9IF9OUE5fR2V0U3RyaW5n
SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVycyA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcnM7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0aW50aWRlbnRp
ZmllciA9IF9OUE5fR2V0SW50SWRlbnRpZmllcjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pZGVudGlm
aWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKKyAgICBtX2Jyb3dzZXJGdW5j
cy51dGY4ZnJvbWlkZW50aWZpZXIgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcjsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5yZWxlYXNlb2JqZWN0ID0gX05QTl9SZWxlYXNlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1
bmNzLmludm9rZSA9IF9OUE5fSW52b2tlOworICAgIG1fYnJvd3NlckZ1bmNzLmludm9rZURlZmF1
bHQgPSBfTlBOX0ludm9rZURlZmF1bHQ7CisgICAgbV9icm93c2VyRnVuY3MuZXZhbHVhdGUgPSBf
TlBOX0V2YWx1YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHByb3BlcnR5ID0gX05QTl9HZXRQ
cm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVy
dHk7CisgICAgbV9icm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3Bl
cnR5OworICAgIG1fYnJvd3NlckZ1bmNzLmhhc3Byb3BlcnR5ID0gX05QTl9IYXNNZXRob2Q7Cisg
ICAgbV9icm93c2VyRnVuY3MuaGFzbWV0aG9kID0gX05QTl9IYXNQcm9wZXJ0eTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5lbnVtZXJhdGUgPSBfTlBOX0VudW1lcmF0ZTsKKworICAgIG5wRXJyID0gTlBfSW5p
dGlhbGl6ZSgmbV9icm93c2VyRnVuY3MsICZtX3BsdWdpbkZ1bmNzKTsKKyAgICBpZiAobnBFcnIg
IT0gTlBFUlJfTk9fRVJST1IpCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtX2xvYWRDb3Vu
dCsrOworICAgIHJldHVybiB0cnVlOworCithYm9ydDoKKyAgICB1bmxvYWRXaXRob3V0U2h1dGRv
d24oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Vuc2lnbmVkIFBsdWdpblBhY2thZ2U6Omhh
c2goKSBjb25zdAoreyAKKyAgICB1bnNpZ25lZCBoYXNoQ29kZXNbMl0gPSB7CisgICAgICAgIG1f
cGF0aC5pbXBsKCktPmhhc2goKSwKKyAgICAgICAgbV9sYXN0TW9kaWZpZWQKKyAgICB9OworCisg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIq
PihoYXNoQ29kZXMpLCAyICogc2l6ZW9mKHVuc2lnbmVkKSAvIHNpemVvZihVQ2hhcikpOworfQor
Citib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmIGEsIGNvbnN0
IFBsdWdpblBhY2thZ2UmIGIpCit7CisgICAgcmV0dXJuIGEubV9kZXNjcmlwdGlvbiA9PSBiLm1f
ZGVzY3JpcHRpb247Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAia2pzX2JpbmRpbmcu
aCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgor
I2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRl
IDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVlLmg+CisKKyNpbmNsdWRlIDxnZGtj
b25maWcuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisjaW5jbHVkZSAiZ3Rr
Mnh0YmluLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNlbmRpZgorI2lmZGVmIEdES19XSU5E
T1dJTkdfV0lOMzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIuaD4KKyNlbmRpZgorCit1c2luZyBL
SlM6OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0ZXI7Cit1c2luZyBLSlM6OkpTTG9j
azsKK3VzaW5nIEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6OkpTVmFsdWU7Cit1c2luZyBLSlM6
OlVTdHJpbmc7CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKwordm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3coKSBj
b25zdAoreworICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNXaW5kb3dlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKworICAg
IEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVjdDsKKyAgICBJbnRSZWN0IG9sZENs
aXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVW
aWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVH
ZW9tZXRyeSgpLnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9IHdpbmRvd0NsaXBSZWN0KCk7Cisg
ICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgpLCAtbV93aW5kb3dSZWN0LnkoKSk7
CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IG1fd2luZG93UmVjdC54KCksIG1f
d2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCkgfTsKKyAgICBpZiAobV93aW5kb3cpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKG1fd2luZG93LCAmYWxsb2NhdGlvbik7CisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gx
MSkKKyAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICBndGtfeHRiaW5f
c2V0X3Bvc2l0aW9uKEdUS19YVEJJTihtX3dpbmRvdyksIG1fd2luZG93UmVjdC54KCksIG1fd2lu
ZG93UmVjdC55KCkpOworICAgICAgICAgICAgZ3RrX3h0YmluX3Jlc2l6ZShtX3dpbmRvdywgbV93
aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyNl
bmRpZgorICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpCit7CisgICAgaWYg
KG1fd2luZG93KQorCWd0a193aWRnZXRfZ3JhYl9mb2N1cyhtX3dpbmRvdyk7CisKKyAgICBXaWRn
ZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgbV9p
c1Zpc2libGUgPSB0cnVlOworCisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRv
dykKKwlndGtfd2lkZ2V0X3Nob3cobV93aW5kb3cpOworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9
CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsK
KworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cgJiYgbV93aW5kb3cpCisJZ3RrX3dpZGdldF9o
aWRlKG1fd2luZG93KTsKKworICAgIFdpZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgIC8vIERyYXcgdGhlICJtaXNzaW5n
IHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgLy9wYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQs
IHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8
fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5Q
RXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRoZXNpemUgWGV2ZW50cyBoZXJlICov
CisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKworICAgIEFT
U0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdp
bkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0
YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIGlmIChtX2lzV2luZG93ZWQpCisgICAgICAg
IHNldE5QV2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgaWYgKG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5ldmVudCkgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tz
IGRyb3BBbGxMb2NrczsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1f
aW5zdGFuY2UsICZucEV2ZW50KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2ZW50IG5wRXZl
bnQ7CisgICAgCisgICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3MgdGhy
b3VnaCAqLworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7Cisg
ICAgaWYgKCFtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZl
bnQpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqIGV2ZW50KQoreworICAgIE5QRXZl
bnQgbnBFdmVudDsKKworICAgIGlmICghbV9pc1dpbmRvd2VkKQorICAgICAgcmV0dXJuOworCisg
ICAgLyogRklYTUU6IFN5bnRoZXNpemUgYW4gWEV2ZW50IHRvIHBhc3MgdGhyb3VnaCAqLworICAg
IEludFBvaW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRz
VG9XaW5kb3coSW50UG9pbnQoZXZlbnQtPnBhZ2VYKCksIGV2ZW50LT5wYWdlWSgpKSk7CisKKyAg
ICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICBpZiAoIW1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3RhbmNlLCAmbnBFdmVudCkpCisgICAgICAg
IGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBh
cmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50
KTsKKworICAgIGlmIChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFtX3dpbmRvdykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKCFtX2lzU3RhcnRlZCB8fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBwID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9j
YXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55ID0g
cC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
bGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9w
QWxsTG9ja3M7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOwor
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNlKTsKKworICAgICAgICBpZiAoIW1faXNXaW5k
b3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOwor
ICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdygpCit7CisgICAgaWYg
KG1fYXR0YWNoZWRUb1dpbmRvdykKKwlyZXR1cm47CisKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cg
PSB0cnVlOworICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X3No
b3cobV93aW5kb3cpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRldGFjaEZyb21XaW5kb3coKQor
eworICAgIGlmICghbV9hdHRhY2hlZFRvV2luZG93KQorCXJldHVybjsKKworICAgIGlmIChtX2lz
VmlzaWJsZSAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworICAgIG1f
YXR0YWNoZWRUb1dpbmRvdyA9IGZhbHNlOworfQorCit2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQor
eworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8
UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8
UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJl
YW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0KS0+c3RvcCgpOwor
ICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NF
UlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9IGZhbHNlOworICAg
IEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworCisgICAgLy8gQ2xlYXIg
dGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyAmJiAhbV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5z
KFBsdWdpblF1aXJrRG9udFNldE51bGxXaW5kb3dIYW5kbGVPbkRlc3Ryb3kpKSB7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5n
UGx1Z2luKGZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBEZXN0cm95IHRoZSBwbHVnaW4KKyAgICB7
CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVn
aW5GdW5jcygpLT5kZXN0cm95KG1faW5zdGFuY2UsIDApOworICAgICAgICBzZXRDYWxsaW5nUGx1
Z2luKGZhbHNlKTsKKyAgICB9CisKKyAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7Cit9CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBNb3ppbGxhVXNlckFnZW50ID0gIk1vemlsbGEvNS4wIChYMTE7IFU7
IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjguMSkgR2Vja28vMjAwNjEwMTAgRmlyZWZveC8yLjAi
OworCitjb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKQoreworICAgIGlmIChtX3Bs
dWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQp
KQorICAgICAgICByZXR1cm4gTW96aWxsYVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2Vu
dC5pc051bGwoKSkKKyAgICAgICAgbV91c2VyQWdlbnQgPSBtX3BhcmVudEZyYW1lLT5sb2FkZXIo
KS0+dXNlckFnZW50KG1fdXJsKS51dGY4KCk7CisKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0
YSgpOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8
Y2hhcj4mIGJ1ZmZlciwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmKQoreworICAgIFN0cmlu
ZyBmaWxlbmFtZShidWYsIGxlbik7CisKKyAgICBpZiAoZmlsZW5hbWUuc3RhcnRzV2l0aCgiZmls
ZTovLy8iKSkKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoOCk7CisKKyAg
ICAvLyBHZXQgZmlsZSBpbmZvCisgICAgaWYgKCFnX2ZpbGVfdGVzdCAoKGZpbGVuYW1lLnV0Zjgo
KSkuZGF0YSgpLCAoR0ZpbGVUZXN0KShHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9J
U19SRUdVTEFSKSkpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworICAg
IC8vRklYTUUgLSByZWFkIHRoZSBmaWxlIGRhdGEgaW50byBidWZmZXIKKyAgICBGSUxFKiBmaWxl
SGFuZGxlID0gZm9wZW4oKGZpbGVuYW1lLnV0ZjgoKSkuZGF0YSgpLCAiciIpOworICAgIAorICAg
IGlmIChmaWxlSGFuZGxlID09IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKKworICAgIC8vYnVmZmVyLnJlc2l6ZSgpOworCisgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFk
KGJ1ZmZlci5kYXRhKCksIDEsIDAsIGZpbGVIYW5kbGUpOworCisgICAgZmNsb3NlKGZpbGVIYW5k
bGUpOworCisgICAgaWYgKGJ5dGVzUmVhZCA8PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7CisKKwlyZXR1cm4gTlBFUlJfTk9fRVJST1I7Cit9CisKK05QRXJyb3IgUGx1
Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQorewor
ICAgIHN3aXRjaCAodmFyaWFibGUpIHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQor
ICAgICAgICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsKKyAgICAgICAgICAgIGlmICghbV9uZWVk
c1hFbWJlZCkgeworICAgICAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IFh0RGlzcGxheVRv
QXBwbGljYXRpb25Db250ZXh0IChHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVudC54dGRpc3Bs
YXkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7Cisg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBOVlRvb2xraXQ6IHsKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAyOworI2Vsc2UKKyAg
ICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IDA7CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBv
cnRzWEVtYmVkQm9vbDogeworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAg
ICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgICAgICooKHVp
bnQzMiAqKXZhbHVlKSA9IGZhbHNlOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
Tk9fRVJST1I7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
ICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3Jp
cHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJlbnRGcmFtZS0+d2luZG93U2NyaXB0
TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRv
IGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
cHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHdpbmRvd1Nj
cmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdCh3aW5kb3dTY3Jp
cHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAg
ICAgICAgICAqdiA9IHdpbmRvd1NjcmlwdE9iamVjdDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5W
UGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkK
KwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgICAgIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRPYmplY3QgPSAwOworCisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNU
YWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBt
X2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5T
Y3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCkt
PmdldE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3Rl
ZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmIChwbHVn
aW5TY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3QocGx1Z2lu
U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwor
ICAgICAgICAgICAgKnYgPSBwbHVnaW5TY3JpcHRPYmplY3Q7CisKKyAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBOUE5W
bmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIHZvaWQqIHcgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPih2YWx1ZSk7CisKKyNpZmRlZiBHREtfV0lORE9XSU5HX1gxMQorICAgICAgICAgICAg
KigoWElEICopdykgPSBHREtfV0lORE9XX1hXSU5ET1coY29udGFpbmluZ1dpbmRvdygpLT53aW5k
b3cpOworI2VuZGlmCisjaWZkZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorICAgICAgICAgICAgKigo
SFdORCAqKXcpID0gR0RLX1dJTkRPV0lOR19IV05EKGNvbnRhaW5pbmdXaW5kb3coKS0+d2luZG93
KTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiBy
ZWN0KQoreworICAgIGlmICghcmVjdCkgeworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCBy
ZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CisgICAg
V2lkZ2V0OjppbnZhbGlkYXRlUmVjdChyKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdygpCit7CisgICAgaWYgKG1faXNXaW5kb3dlZCkKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1
ZV9kcmF3KG1fd2luZG93KTsKKyAgICBlbHNlCisgICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJh
dyhjb250YWluaW5nV2luZG93KCkpOworfQorCitQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpCit7
CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHMpOworCisgICAg
ZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNvdW50KTsKKyAgICBmcmVlU3Ry
aW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsKKworICAgIG1fcGFyZW50RnJh
bWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMpOworCisgICAgaWYgKG1fcGx1
Z2luICYmICEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udFVubG9h
ZFBsdWdpbikpKQorICAgICAgICBtX3BsdWdpbi0+dW5sb2FkKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6aW5pdCgpCit7CisgICAgaWYgKG1faGF2ZUluaXRpYWxpemVkKQorICAgICAgICByZXR1
cm47CisgICAgbV9oYXZlSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BsdWdpbikg
eworICAgICAgICBBU1NFUlQobV9zdGF0dXMgPT0gUGx1Z2luU3RhdHVzQ2FuTm90RmluZFBsdWdp
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcGx1Z2luLT5sb2FkKCkp
IHsKKyAgICAgICAgbV9wbHVnaW4gPSAwOworICAgICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1
c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0
YXJ0KCkpIHsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2lu
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5j
cygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVl
KG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOworCisj
aWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgewor
ICAgICAgICBtX3dpbmRvdyA9IGd0a19zb2NrZXRfbmV3KCk7CisgICAgICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2lu
ZG93KCkpLCBtX3dpbmRvdyk7CisgICAgICAgIHNldEd0a1dpZGdldChtX3dpbmRvdyk7CisgICAg
fSBlbHNlIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV93aW5kb3cgPSBndGtfeHRiaW5f
bmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLT53aW5kb3csIDAp
OworCXNldEd0a1dpZGdldChtX3dpbmRvdyk7CisgICAgfQorI2Vsc2UKKyAgICBtX3dpbmRvdyA9
IGd0a19zb2NrZXRfbmV3KCk7CisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSksIG1fd2luZG93KTsKKyAg
ICBzZXRHdGtXaWRnZXQobV93aW5kb3cpOworI2VuZGlmCisgICAgc2hvdyAoKTsKKworICAgIGlm
IChtX2lzV2luZG93ZWQpIHsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorCU5QU2V0
V2luZG93Q2FsbGJhY2tTdHJ1Y3Qgd3M7CisKKwl3cy50eXBlID0gMDsKKworCWlmIChtX25lZWRz
WEVtYmVkKSB7CisJICAgIHdzLmRpc3BsYXkgPSBHREtfV0lORE9XX1hESVNQTEFZKG1fd2luZG93
LT53aW5kb3cpOworCSAgICB3cy52aXN1YWwgPSBHREtfVklTVUFMX1hWSVNVQUwoZ2RrX2RyYXdh
YmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2luZG93LT53aW5kb3cpKSk7CisJICAgIHdz
LmRlcHRoID0gZ2RrX2RyYXdhYmxlX2dldF92aXN1YWwoR0RLX0RSQVdBQkxFKG1fd2luZG93LT53
aW5kb3cpKS0+ZGVwdGg7CisJICAgIHdzLmNvbG9ybWFwID0gR0RLX0NPTE9STUFQX1hDT0xPUk1B
UChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19EUkFXQUJMRShtX3dpbmRvdy0+d2luZG93
KSkpOworCX0gZWxzZSB7CisJICAgIHdzLmRpc3BsYXkgPSBHVEtfWFRCSU4obV93aW5kb3cpLT54
dGRpc3BsYXk7CisJICAgIHdzLnZpc3VhbCA9IEdUS19YVEJJTihtX3dpbmRvdyktPnh0Y2xpZW50
Lnh0dmlzdWFsOworCSAgICB3cy5kZXB0aCA9IEdUS19YVEJJTihtX3dpbmRvdyktPnh0Y2xpZW50
Lnh0ZGVwdGg7CisJICAgIHdzLmNvbG9ybWFwID0gR1RLX1hUQklOKG1fd2luZG93KS0+eHRjbGll
bnQueHRjb2xvcm1hcDsKKworCSAgICBYRmx1c2ggKHdzLmRpc3BsYXkpOworCX0KKworCW1fbnBX
aW5kb3cud3NfaW5mbyA9ICZ3czsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX2lzV2luZG93
ZWQpIHsKKyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworI2lm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisJaWYgKG1fbmVlZHNYRW1iZWQpCisJICAgIG1f
bnBXaW5kb3cud2luZG93ID0gKHZvaWQqKUdES19XSU5ET1dfWFdJTkRPVyhtX3dpbmRvdy0+d2lu
ZG93KTsKKwllbHNlCisJICAgIG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKUdUS19YVEJJTiht
X3dpbmRvdyktPnh0d2luZG93OworI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMyKQor
ICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX0hXTkQobV93aW5k
b3ctPndpbmRvdyk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93LnR5
cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAw
OworICAgIH0KKworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5R
dWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHNldE5QV2luZG93UmVjdChm
cmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNj
ZXNzZnVsbHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay94
ZW1iZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFi
cy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpzaGlm
dHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAq
KioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyAq
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlv
bnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRo
ZSBYRU1CRUQgRGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRo
ZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0aW9u
cyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAy
CisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
Q29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBv
cgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBv
ciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2Ug
YWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQ
TCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNp
c2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQ
TCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFi
b3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIK
KyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwu
CisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVEIG1l
c3NhZ2VzICovCisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAorI2Rl
ZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX1dJ
TkRPV19ERUFDVElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VTICAg
ICAgICAgICAgMworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQKKyNk
ZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJFRF9G
T0NVU19ORVhUICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAgICAg
ICAgICAgICAgIDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4Cisj
ZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1CRURf
TU9EQUxJVFlfT04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9PRkYg
ICAgICAgICAgICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUgWEVN
QkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtfVU5H
UkFCX0tFWSAgICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNfSU46
ICovCisjZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmluZSBY
RU1CRURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0xB
U1QgICAgICAgICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNkZWZp
bmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2lu
RGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0
LmNwcAkocmV2aXNpb24gMzI0MzApCisrKyBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChD
KSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAgKzIx
LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogCisj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisK
KyNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KICNpbmNsdWRlIDxxd2Vi
cGx1Z2luZmFjdG9yeS5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzIs
MzYgKzM4LDcxIEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQogI2lmIFFUX1ZFUlNJ
T04gPj0gMHgwNDA0MDAKICAgICBRV2ViUGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PENocm9t
ZUNsaWVudFF0Kj4obV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CiAgICAg
UVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5KCk7Ci0g
ICAgaWYgKCFmYWN0b3J5KQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZhY3RvcnkpIHsKIAot
ICAgIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+IHBsdWdpbnMgPSBmYWN0b3J5LT5w
bHVnaW5zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLmNvdW50KCk7ICsraSkg
ewotICAgICAgICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luJiBwbHVnaW4gPSBwbHVn
aW5zLmF0KGkpOworICAgICAgICBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBxcGx1
Z2lucyA9IGZhY3RvcnktPnBsdWdpbnMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBx
cGx1Z2lucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFFXZWJQbHVnaW5GYWN0
b3J5OjpQbHVnaW4mIHFwbHVnaW4gPSBxcGx1Z2lucy5hdChpKTsKIAotICAgICAgICBQbHVnaW5J
bmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAgICAgIGluZm8tPm5hbWUgPSBwbHVnaW4u
bmFtZTsKLSAgICAgICAgaW5mby0+ZGVzYyA9IHBsdWdpbi5kZXNjcmlwdGlvbjsKKyAgICAgICAg
ICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgICAgIGluZm8t
Pm5hbWUgPSBxcGx1Z2luLm5hbWU7CisgICAgICAgICAgICBpbmZvLT5kZXNjID0gcXBsdWdpbi5k
ZXNjcmlwdGlvbjsKKworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBxcGx1Z2luLm1p
bWVUeXBlcy5jb3VudCgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRV2ViUGx1Z2lu
RmFjdG9yeTo6TWltZVR5cGUmIG1pbWVUeXBlID0gcXBsdWdpbi5taW1lVHlwZXMuYXQoaik7CisK
KyAgICAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lSW5mbyA9IG5ldyBNaW1lQ2xhc3NJ
bmZvOworICAgICAgICAgICAgICAgIG1pbWVJbmZvLT50eXBlID0gbWltZVR5cGUubmFtZTsKKyAg
ICAgICAgICAgICAgICBtaW1lSW5mby0+ZGVzYyA9IG1pbWVUeXBlLmRlc2NyaXB0aW9uOworICAg
ICAgICAgICAgICAgIG1pbWVJbmZvLT5zdWZmaXhlcyA9IG1pbWVUeXBlLmZpbGVFeHRlbnNpb25z
LmpvaW4oIjsgIik7CisKKyAgICAgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZUlu
Zm8pOworICAgICAgICAgICAgfQogCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGx1Z2lu
Lm1pbWVUeXBlcy5jb3VudCgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFFXZWJQbHVnaW5G
YWN0b3J5OjpNaW1lVHlwZSYgbWltZVR5cGUgPSBwbHVnaW4ubWltZVR5cGVzLmF0KGopOworICAg
ICAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZgogCi0gICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lSW5mbyA9IG5ldyBNaW1lQ2xhc3NJ
bmZvOwotICAgICAgICAgICAgbWltZUluZm8tPnR5cGUgPSBtaW1lVHlwZS5uYW1lOwotICAgICAg
ICAgICAgbWltZUluZm8tPmRlc2MgPSBtaW1lVHlwZS5kZXNjcmlwdGlvbjsKLSAgICAgICAgICAg
IG1pbWVJbmZvLT5zdWZmaXhlcyA9IG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmpvaW4oIjsgIik7
CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdp
bnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+ICZwbHVnaW5zID0gZGItPnBs
dWdpbnMoKTsKIAotICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWVJbmZvKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOworICAgICAgICBQbHVnaW5Q
YWNrYWdlKiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKKworICAgICAgICBpbmZvLT5uYW1lID0gcGFj
a2FnZS0+bmFtZSgpOworICAgICAgICBpbmZvLT5maWxlID0gcGFja2FnZS0+ZmlsZU5hbWUoKTsK
KyAgICAgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0aW9uKCk7CisKKyAgICAgICAg
Y29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwYWNrYWdl
LT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICAgICAgTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuZW5kKCk7CisgICAgICAgIGZv
ciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1pbWVUb0Rlc2Ny
aXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIE1pbWVDbGFz
c0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIGluZm8tPm1pbWVz
LmFwcGVuZChtaW1lKTsKKworICAgICAgICAgICAgbWltZS0+dHlwZSA9IGl0LT5maXJzdDsKKyAg
ICAgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgbWltZS0+cGx1
Z2luID0gaW5mbzsKKworICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0ZW5zaW9ucyA9IHBh
Y2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlwZSk7CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhl
cyArPSAiLCI7CisKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyArPSBleHRlbnNpb25z
W2ldOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbV9wbHVnaW5zLmFwcGVu
ZChpbmZvKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkK
IHsKLSAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2lu
RGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBkYi0+cmVmcmVzaCgpOwogfQogCiB9
OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFiYXNlUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhYmFzZVF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhYmFzZVF0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBTdGFp
a29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorCisj
aW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRRmlsZUluZm8+CisjaW5jbHVkZSA8UVN0cmluZ0xp
c3Q+CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0YWJhc2U6OmdldFBsdWdpblBh
dGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRpdmUgc2V0LgorICAgIEhhc2hT
ZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisKKyAgICBRU3RyaW5nTGlzdCBuYW1lRmlsdGVy
czsKKyAgICBuYW1lRmlsdGVycyA8PCAiKi5zbyI7CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5kKCk7CisgICAgZm9yIChWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpbkRpcmVjdG9yaWVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBRRGlyIGRpciA9IFFEaXIoUVN0cmluZygq
aXQpKTsKKyAgICAgICAgaWYgKCFkaXIuZXhpc3RzKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBRRmlsZUluZm9MaXN0IGZsID0gZGlyLmVudHJ5SW5mb0xpc3QobmFtZUZpbHRl
cnMsIFFEaXI6OkZpbGVzKTsKKyAgICAgICAgZm9yZWFjaCAoY29uc3QgUUZpbGVJbmZvIGZpLCBm
bCkgeworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3RyaW5nKGZpLmFic29sdXRlRmls
ZVBhdGgoKSk7CisgICAgICAgICAgICBwYXRocy5hZGQoZmlsZW5hbWUpOworICAgICAgICB9Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCBhZGRRdFdlYktpdFBsdWdpbkRpcmVjdG9yaWVzKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBRU3RyaW5nIHF0UGF0aChnZXRlbnYoIlFUV0VCS0lU
X1BMVUdJTl9QQVRIIikpOworICAgIFFTdHJpbmdMaXN0IHF0UGF0aHMgPSBxdFBhdGguc3BsaXQo
IjoiLCBRU3RyaW5nOjpTa2lwRW1wdHlQYXJ0cyk7CisgICAgZm9yKGludCBpID0gMDsgaSA8IHF0
UGF0aHMuc2l6ZSgpOyBpKyspIHsKKyAgICAJcGF0aHMuYXBwZW5kKHF0UGF0aHMuYXQoaSkpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgYWRkTW96aWxsYVBsdWdpbkRpcmVjdG9yaWVzKFZlY3Rv
cjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBRRGlyIHBhdGggPSBRRGlyOjpob21lKCk7IHBhdGgu
Y2QoIi5tb3ppbGxhL3BsdWdpbnMiKTsgCisgICAgcGF0aHMuYXBwZW5kKHBhdGguYWJzb2x1dGVQ
YXRoKCkpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJvd3Nlci9wbHVnaW5zIik7Cisg
ICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxhL3BsdWdpbnMiKTsKKyAgICBw
YXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIpOworICAgIAorICAgIFFTdHJp
bmcgbW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpKTsKKyAgICBRU3RyaW5nTGlzdCBt
b3pQYXRocyA9IG1velBhdGguc3BsaXQoIjoiLCBRU3RyaW5nOjpTa2lwRW1wdHlQYXJ0cyk7Cisg
ICAgZm9yKGludCBpID0gMDsgaSA8IG1velBhdGhzLnNpemUoKTsgaSsrKSB7CisgICAgCXBhdGhz
LmFwcGVuZChtb3pQYXRocy5hdChpKSk7CisgICAgfQorfQorCitWZWN0b3I8U3RyaW5nPiBQbHVn
aW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiBwYXRoczsKKworICAgIGFkZFF0V2ViS2l0UGx1Z2luRGlyZWN0b3JpZXMocGF0aHMpOwor
ICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhwYXRocyk7CisgICAgCisgICAgcmV0dXJu
IHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisJUURpciBwcmVmUGF0aCA9IFFEaXI6OmhvbWUo
KTsKKwlwcmVmUGF0aC5jZCgiLm1vemlsbGEvcGx1Z2lucyIpOworICAgIHJldHVybiAocGF0aCA9
PSBwcmVmUGF0aC5hYnNvbHV0ZVBhdGgoKSk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246
IFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhYmFzZVF0LmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luUGFja2FnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2lu
UGFja2FnZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5Q
YWNrYWdlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3Mo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNK
YXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgYSBzaW5n
bGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxp
YWJseSB1bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBK
YXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KKyAgICAg
ICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAgICAg
Ly8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJh
ZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBs
dWctaW4uCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVj
dFdoZW5TY3JvbGxpbmcpOworICAgIH0KKyAgICAKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxp
Y2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2lu
IG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEg
dXNlciBhZ2VudAorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFV
c2VyQWdlbnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFs
aWRhdGUpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBs
dXNPbmVNZXNzYWdlcyk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJM
Tm90aWZ5QnVnKTsKKyAgICB9CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8o
KQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOUFBf
R2V0VmFsdWVQcm9jUHRyIGd2ID0gKE5QUF9HZXRWYWx1ZVByb2NQdHIpbV9tb2R1bGUtPnJlc29s
dmUoIk5QX0dldFZhbHVlIik7CisgICAgdHlwZWRlZiBjaGFyICooKk5QUF9HZXRNSU1FRGVzY3Jp
cHRpb25Qcm9jUHRyKSgpOworICAgIE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyIGdtID0K
KyAgICAJKE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKW1fbW9kdWxlLT5yZXNvbHZlKCJO
UF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAoIWdtIHx8ICFndikgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNoYXIgKmJ1ZiA9IDA7CisgICAgTlBFcnJvciBlcnIg
PSBndigwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQgKikmYnVmKTsKKyAgICBpZiAoZXJy
ICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
bV9uYW1lID0gYnVmOworICAgIGVyciA9IGd2KDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmlu
ZywgKHZvaWQgKikmYnVmKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9kZXNjcmlwdGlvbiA9IGJ1ZjsKKworICAg
IFN0cmluZyBzID0gZ20oKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBzLnNwbGl0
KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBlcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtaW1lOworICAgICAgICB0
eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCBmYWxzZSwgbWltZSk7IAorICAgICAgICBpZiAobWlt
ZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBleHRzOworICAgICAg
ICAgICAgbWltZVswXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwgZXh0cyk7CisgICAgICAgICAg
ICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVbMF0sIGV4dHMpOworICAgICAgICAgICAgaWYg
KG1pbWUuc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25z
LmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQorewor
ICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gbmV3IFFMaWJyYXJ5KChRU3RyaW5n
KW1fcGF0aCk7CisgICAgaWYgKCFtX21vZHVsZS0+bG9hZCgpKSB7CisgICAgCUxPRyhQbHVnaW4s
ICIlcyBub3QgbG9hZGVkIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFs
aXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBOUF9J
bml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKW1fbW9kdWxlLT5yZXNvbHZlKCJOUF9J
bml0aWFsaXplIik7CisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilt
X21vZHVsZS0+cmVzb2x2ZSgiTlBfU2h1dGRvd24iKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6
ZSB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQo
Jm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5G
dW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Mu
c2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNp
b24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9H
ZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1f
YnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3Nl
ckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3Jp
dGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9E
ZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Cisg
ICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVl
ID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1
c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5z
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Cisg
ICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1
bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRh
dGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRh
dGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3Jj
ZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52
ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5f
R2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9
IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVw
c2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZp
ZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmll
cmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3Mu
dXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93
c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2Vy
RnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0
ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05Q
Tl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJv
cGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5
OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0
eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAg
IG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93
c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2Vy
RnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRp
YWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQr
KzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNo
KCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3Bh
dGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAg
IHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4o
aGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQ
bHVnaW5QYWNrYWdlJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rl
c2NyaXB0aW9uOworfQorCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNv
bnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Cit7CisgICAg
Ly8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVx
dWFsIHRvLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KKyAgICBp
ZiAobV9tb2R1bGVWZXJzaW9uICE9IGNvbXBhcmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gbV9t
b2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAxIDogLTE7CisgICAgcmV0dXJuIDA7Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5QYWNr
YWdlUXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKKworI2luY2x1ZGUgPFFXaWRnZXQ+CisjaW5jbHVkZSA8UVgxMUVtYmVkQ29u
dGFpbmVyPgorI2luY2x1ZGUgPFFYMTFJbmZvPgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNs
dWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8
a2pzL3ZhbHVlLmg+CisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJv
eHkuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKwordXNpbmcgS0pTOjpFeGVjU3Rh
dGU7Cit1c2luZyBLSlM6OkludGVycHJldGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1c2luZyBL
SlM6OkpTT2JqZWN0OwordXNpbmcgS0pTOjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3RyaW5nOwor
Cit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAg
ICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9s
ZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1f
Y2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVu
dHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5z
aXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJl
Y3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYo
bV93aW5kb3cpIHsKKyAgICAJbV93aW5kb3ctPm1vdmUobV93aW5kb3dSZWN0LngoKSwgbV93aW5k
b3dSZWN0LnkoKSk7CisgICAgCW1fd2luZG93LT5yZXNpemUobV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisgICAgCW1fd2luZG93LT5zZXRGb2N1cyhR
dDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgZWxzZQorICAgIAlXaWRnZXQ6OnNldEZvY3VzKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVl
OworCisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKyAgICAJbV93aW5k
b3ctPnNldFZpc2libGUodHJ1ZSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgaWYg
KG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKyAgICAJbV93aW5kb3ctPnNldFZpc2li
bGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1
Z2luIiBpbWFnZQorICAgICAgICAvL3BhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxW
aWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlm
IChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3dp
bmRvdykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3Rh
cnRlZCB8fCAhbV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7Cisg
ICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAgbV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAg
ICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0
ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7Cisg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
cmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBy
ZWN0LmhlaWdodCgpOworCisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5k
b3cpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7Cisg
ICAgICAgIHNldENhbGxpbmdQbHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5G
dW5jcygpLT5zZXR3aW5kb3cobV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRD
YWxsaW5nUGx1Z2luKGZhbHNlKTsKKworICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0K
K30KKwordm9pZCBQbHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdygpCit7CisgICAgaWYgKG1fYXR0
YWNoZWRUb1dpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hdHRhY2hlZFRvV2luZG93
ID0gdHJ1ZTsKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93aW5kb3cpCisgICAgCW1fd2luZG93
LT5zZXRWaXNpYmxlKHRydWUpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmRldGFjaEZyb21XaW5k
b3coKQoreworICAgIGlmICghbV9hdHRhY2hlZFRvV2luZG93KQorCXJldHVybjsKKworICAgIGlm
IChtX2lzVmlzaWJsZSAmJiBtX3dpbmRvdykKKyAgICAJbV93aW5kb3ctPnNldFZpc2libGUoZmFs
c2UpOworICAgIG1fYXR0YWNoZWRUb1dpbmRvdyA9IGZhbHNlOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1zID0gbV9zdHJlYW1zOwor
ICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0b3IgZW5kID0gc3RyZWFt
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0
b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAoKml0
KS0+c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQpLmdldCgpKTsKKyAgICB9
CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAgICBtX2lzU3RhcnRlZCA9
IGZhbHNlOworCisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisK
KyAgICAvLyBDbGVhciB0aGUgd2luZG93CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRsZU9uRGVzdHJv
eSkpIHsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRvdyk7CisgICAg
ICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIH0KKworICAgIC8vIERlc3Ryb3kgdGhl
IHBsdWdpbgorICAgIHsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7CisgICAgICAg
IHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIH0KKworICAgIG1faW5zdGFuY2UtPnBkYXRh
ID0gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQgPSAiTW96aWxs
YS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAx
MCBGaXJlZm94LzIuMCI7CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCit7
CisgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96
aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50OworCisgICAg
aWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9IG1fcGFyZW50
RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAgIHJldHVybiBt
X3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdFJl
YWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYp
Cit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChmaWxlbmFtZS5z
dGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0
cmluZyg4KTsKKworICAgIGlmKCFmaWxlRXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJu
IE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0
YSBpbnRvIGJ1ZmZlcgorICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5hbWUudXRm
OCgpKS5kYXRhKCksICJyIik7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgLy9idWZmZXIucmVzaXplKCk7
CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhh
bmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9
IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCXJldHVybiBOUEVS
Ul9OT19FUlJPUjsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJs
ZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworICAg
ICAgICBjYXNlIE5QTlZ4RGlzcGxheTogeworICAgICAgICAgICAgaWYgKG1fd2luZG93KQorICAg
ICAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9IG1fd2luZG93LT54MTFJbmZvKCkuZGlzcGxh
eSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICoodm9pZCAqKil2YWx1ZSA9
IGNvbnRhaW5pbmdXaW5kb3coKS0+eDExSW5mbygpLmRpc3BsYXkoKTsKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIE5QTlZ4dEFwcENvbnRleHQ6IHsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WVG9vbGtpdDogeworICAg
ICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMDsKKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRzWEVtYmVk
Qm9vbDogeworICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisjaWYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7CisJICAg
IGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7
CisKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3BhcmVudEZy
YW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFs
dWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDov
L3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAg
ICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZv
aWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNK
YXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAg
ICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAgICAgIGlm
IChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05h
bWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAg
ICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVt
ZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gUmV0dXJu
IHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAg
ICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1Jl
dGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lkKiogdiA9
ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKKwor
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisjZW5kaWYKKwor
ICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgdm9pZCogdyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKyAgICAgICAgICAgICooKFhJRCAqKXcp
ID0gY29udGFpbmluZ1dpbmRvdygpLT53aW5JZCgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WamF2YXNjcmlwdEVuYWJs
ZWRCb29sOiB7CisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwor
dm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVnaW9uKE5Q
UmVnaW9uIHJlZ2lvbikKK3sKKwlub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmZvcmNlUmVkcmF3KCkKK3sKKwlub3RJbXBsZW1lbnRlZCgpOworfQorCitQbHVnaW5WaWV3
Ojp+UGx1Z2luVmlldygpCit7CisgICAgc3RvcCgpOworCisgICAgZGVsZXRlQWxsVmFsdWVzKG1f
cmVxdWVzdHMpOworCisgICAgZnJlZVN0cmluZ0FycmF5KG1fcGFyYW1OYW1lcywgbV9wYXJhbUNv
dW50KTsKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbVZhbHVlcywgbV9wYXJhbUNvdW50KTsK
KworICAgIG1fcGFyZW50RnJhbWUtPmNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHRoaXMp
OworCisgICAgaWYgKG1fcGx1Z2luICYmICEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBs
dWdpblF1aXJrRG9udFVubG9hZFBsdWdpbikpKQorICAgICAgICBtX3BsdWdpbi0+dW5sb2FkKCk7
CisgICAgCisgICAgaWYgKG1fd2luZG93KQorICAgICAgICBkZWxldGUgbV93aW5kb3c7CisgICAg
aWYgKG1fbnBXaW5kb3cud3NfaW5mbykKKyAgICAgICAgZGVsZXRlIChOUFNldFdpbmRvd0NhbGxi
YWNrU3RydWN0ICopbV9ucFdpbmRvdy53c19pbmZvOworfQorCit2b2lkIFBsdWdpblZpZXc6Omlu
aXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4pIHsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4pOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7CisgICAg
ICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RM
b2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFydCgpKSB7
CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbmVlZHNYRW1iZWQgPSBmYWxzZTsKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAgICBtX3BsdWdpbi0+cGx1
Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdpbk5lZWRzWEVtYmVkLCAm
bV9uZWVkc1hFbWJlZCk7CisKKyAgICBpZiAobV9uZWVkc1hFbWJlZCkgeworICAgICAgICBtX3dp
bmRvdyA9IG5ldyBRWDExRW1iZWRDb250YWluZXIoY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICAg
ICAgc2V0TmF0aXZlV2lkZ2V0KG1fd2luZG93KTsKKyAgICAgICAgc2V0SXNOUEFQSVBsdWdpbih0
cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBt
X3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgc2hvdyAoKTsKKworICAgIE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1Y3QgKndz
aSA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0KCk7CisKKyAgICB3c2ktPnR5cGUgPSAw
OworCisgICAgd3NpLT5kaXNwbGF5ID0gbV93aW5kb3ctPngxMUluZm8oKS5kaXNwbGF5KCk7Cisg
ICAgd3NpLT52aXN1YWwgPSAoVmlzdWFsKiltX3dpbmRvdy0+eDExSW5mbygpLnZpc3VhbCgpOwor
ICAgIHdzaS0+ZGVwdGggPSBtX3dpbmRvdy0+eDExSW5mbygpLmRlcHRoKCk7CisgICAgd3NpLT5j
b2xvcm1hcCA9IG1fd2luZG93LT54MTFJbmZvKCkuY29sb3JtYXAoKTsKKyAgICBtX25wV2luZG93
LndzX2luZm8gPSB3c2k7CisKKwltX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5cGVXaW5kb3c7
CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCopbV93aW5kb3ctPndpbklkKCk7CisKKyAg
ICBpZiAoIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0
U2V0V2luZG93Q2FsbCkpKQorICAgICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgp
KTsKKworICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3Bs
dWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUK
ICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5j
cHAJKHJldmlzaW9uIDMyNDMwKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdl
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMzAgKzY2LDYgQEAgaW50IFBsdWdpblBhY2th
Z2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjbwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUGx1Z2lu
UGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Ci17
Ci0gICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJz
dC4KLSAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKLSAgICBib29sIEJhbGxv
d3NNdWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2lu
UXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgaWYgKEFhbGxvd3NNdWx0aXBs
ZUluc3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCi0gICAgICAgIHJldHVybiBB
YWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7Ci0KLSAgICAvLyBTb3J0IHBsdWctaW5z
IGluIGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCi0gICAgYm9vbCBBaXNJblByZWZlcnJlZFBhdGgg
PSBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkocGFyZW50RGlyZWN0
b3J5KCkpOwotICAgIGJvb2wgQmlzSW5QcmVmZXJyZWRQYXRoID0gUGx1Z2luRGF0YWJhc2U6Omlz
UHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKSk7Ci0g
ICAgaWYgKEFpc0luUHJlZmVycmVkUGF0aCAhPSBCaXNJblByZWZlcnJlZFBhdGgpCi0gICAgICAg
IHJldHVybiBBaXNJblByZWZlcnJlZFBhdGggPyAtMSA6IDE7Ci0KLSAgICBpbnQgZGlmZiA9IHN0
cmNtcChuYW1lKCkudXRmOCgpLmRhdGEoKSwgY29tcGFyZVRvLm5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRpZmY7Ci0KLSAgICBpZiAoZGlmZiA9
IGNvbXBhcmVGaWxlVmVyc2lvbihjb21wYXJlVG8udmVyc2lvbigpKSkKLSAgICAgICAgcmV0dXJu
IGRpZmY7Ci0KLSAgICByZXR1cm4gc3RyY21wKHBhcmVudERpcmVjdG9yeSgpLnV0ZjgoKS5kYXRh
KCksIGNvbXBhcmVUby5wYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKTsKLX0KLQogYm9v
bCBQbHVnaW5QYWNrYWdlOjppc1BsdWdpbkJsYWNrbGlzdGVkKCkKIHsKICAgICBzdGF0aWMgY29u
c3QgUGxhdGZvcm1Nb2R1bGVWZXJzaW9uIHNsUGx1Z2luTWluUmVxdWlyZWQoMHg1MUJFMDAwMCwg
MHgwMDAxMDAwMCk7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJl
dmlzaW9uIDMyNDMwKQorKysgV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2Miw3ICs1NjIsNyBAQCB2b2lkIFBsdWdpblZp
ZXc6OnN0b3AoKQogICAgICAgICAgICAgU2V0V2luZG93TG9uZ1B0cihtX3dpbmRvdywgR1dMUF9X
TkRQUk9DLCAoTE9ORyltX3BsdWdpblduZFByb2MpOwogICAgIH0KIAotICAgIEtKUzo6SlNMb2Nr
OjpEcm9wQWxsTG9ja3M7CisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9j
a3M7CiAKICAgICAvLyBDbGVhciB0aGUgd2luZG93CiAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAw
OwpAQCAtNTg4LDMyICs1ODgsNiBAQCB2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQogICAgIG1faW5z
dGFuY2UtPnBkYXRhID0gMDsKIH0KIAotc3RhdGljIHZvaWQgZnJlZVN0cmluZ0FycmF5KGNoYXIq
KiBzdHJpbmdBcnJheSwgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIXN0cmluZ0FycmF5KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAg
ICAgICBmYXN0RnJlZShzdHJpbmdBcnJheVtpXSk7Ci0KLSAgICBmYXN0RnJlZShzdHJpbmdBcnJh
eSk7Ci19Ci0KLXN0YXRpYyBLVVJMIG1ha2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3Qg
Y2hhciogcmVsYXRpdmVVUkxTdHJpbmcpCi17Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHJlbGF0
aXZlVVJMU3RyaW5nOwotCi0gICAgLy8gU3RyaXAgcmV0dXJuIGNoYXJhY3RlcnMuCi0gICAgdXJs
U3RyaW5nLnJlcGxhY2UoJ1xuJywgIiIpOwotICAgIHVybFN0cmluZy5yZXBsYWNlKCdccicsICIi
KTsKLQotICAgIHJldHVybiBLVVJMKGJhc2VVUkwsIHVybFN0cmluZyk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBzdGFydHNXaXRoQmxhbmtMaW5lKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVy
KQotewotICAgIHJldHVybiBidWZmZXIuc2l6ZSgpID4gMCAmJiBidWZmZXJbMF0gPT0gJ1xuJzsK
LX0KIAogY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKIHsKQEAgLTYyNSwyMzcg
KzU5OSw4OSBAQCBjb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKQogICAgIHJldHVy
biBtX3VzZXJBZ2VudC5kYXRhKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxvY2F0aW9uQWZ0
ZXJGaXJzdEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBjb25z
dCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYnVm
ZmVyLnNpemUoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGggLSA0OyBp
KyspIHsKLSAgICAgICAgLy8gU3VwcG9ydCBmb3IgQWNyb2JhdC4gSXQgc2VuZHMgIlxuXG4iLgot
ICAgICAgICBpZiAoYnl0ZXNbaV0gPT0gJ1xuJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAg
ICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgCi0gICAgICAgIC8vIFJldHVybnMgdGhl
IHBvc2l0aW9uIGFmdGVyIDIgQ1JMRidzIG9yIDEgQ1JMRiBpZiBpdCBpcyB0aGUgZmlyc3QgbGlu
ZS4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicp
IHsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGlmIChpID09IDIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBlbHNlIGlmIChieXRlc1tpXSA9PSAnXG4n
KQotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIERpcmVjdG9yLiBJdCBzZW5kcyAiXHJc
blxuIiAoMzg4MDM4NykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAg
ICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xyJyAmJiBieXRlc1tpICsgMV0gPT0gJ1xuJykKLSAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBGbGFzaC4gSXQgc2VuZHMgIlxyXG5cclxuIiAo
Mzc1ODExMykuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRF
T0woY29uc3QgY2hhciogYnl0ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK05QRXJyb3IgUGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBj
b25zdCBjaGFyKiBidWYpCiB7Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNwZWNpZmlj
YXRpb24gRU9MIGlzIGRlZmluZWQgYXMKLSAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0dW5hdGVs
eSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCi0gICAgLy8gaW5zdGVhZC4gV29yc2UgeWV0LCBz
b21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgotICAgIC8vIG9mIGJvdGggKGUuZy4g
PGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCi0gICAgLy8gdG8gYmUgbW9y
ZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgotICAgIC8vIENSLgot
ICAgIC8vCi0gICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5kIG9yIGl0
IHdpbGwgcmV0dXJuCi0gICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBj
aGFyYWN0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsg
aTsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIENoZWNr
IHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCi0gICAgICAgICAgICAvLyAoQ1JMRiBp
cyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKLSAgICAgICAgICAgIC8vIG5leHQgcmVh
ZC4KLSAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0
aWMgaW5saW5lIFN0cmluZyBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICBib29sIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSB0cnVlOwotICAg
IFN0cmluZyByZXN1bHQ7CisgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikp
CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOwogCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBVQ2hhciBj
OworICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGF0
dHJzOworICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykgPT0gMCkK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwogCi0gICAgICAgIGlmIChjYXBp
dGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQotICAg
ICAgICAgICAgYyA9IHRvQVNDSUlVcHBlcihuYW1lW2ldKTsKLSAgICAgICAgZWxzZSBpZiAoIWNh
cGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCi0g
ICAgICAgICAgICBjID0gdG9BU0NJSUxvd2VyKG5hbWVbaV0pOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjID0gbmFtZVtpXTsKKyAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJ
TEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZP
VU5EOwogCi0gICAgICAgIGlmIChuYW1lW2ldID09ICctJykKLSAgICAgICAgICAgIGNhcGl0YWxp
emVDaGFyYWN0ZXIgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYXBpdGFsaXpl
Q2hhcmFjdGVyID0gZmFsc2U7CisgICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhm
aWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBGSUxFX1JFQURfREFUQSwg
RklMRV9TSEFSRV9SRUFELCAwLCBPUEVOX0VYSVNUSU5HLCAwLCAwKTsKKyAgICAKKyAgICBpZiAo
ZmlsZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOwogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7Ci0gICAgfQorICAg
IGJ1ZmZlci5yZXNpemUoYXR0cnMubkZpbGVTaXplTG93KTsKIAotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSFRUUEhlYWRlck1hcCBwYXJzZVJGQzgyMkhlYWRlckZpZWxk
cyhjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGNv
bnN0IGNoYXIqIGJ5dGVzID0gYnVmZmVyLmRhdGEoKTsKLSAgICBjb25zdCBjaGFyKiBlb2w7Ci0g
ICAgU3RyaW5nIGxhc3RLZXk7Ci0gICAgSFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Ci0KLSAg
ICAvLyBMb29wIG92ZSBybGluZXMgdW50aWwgd2UncmUgcGFzdCB0aGUgaGVhZGVyLCBvciB3ZSBj
YW4ndCBmaW5kIGFueSBtb3JlIGVuZC1vZi1saW5lcwotICAgIHdoaWxlICgoZW9sID0gZmluZEVP
TChieXRlcywgbGVuZ3RoKSkpIHsKLSAgICAgICAgY29uc3QgY2hhciogbGluZSA9IGJ5dGVzOwot
ICAgICAgICBpbnQgbGluZUxlbmd0aCA9IGVvbCAtIGJ5dGVzOwotICAgICAgICAKLSAgICAgICAg
Ly8gTW92ZSBieXRlcyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSB0ZXJtaW5hdG9yIGFzIHJl
dHVybmVkIGJ5IGZpbmRFT0wuCi0gICAgICAgIGJ5dGVzID0gZW9sICsgMTsKLSAgICAgICAgaWYg
KCgqZW9sID09ICdccicpICYmICgqYnl0ZXMgPT0gJ1xuJykpCi0gICAgICAgICAgICBieXRlcysr
OyAvLyBTYWZlIHNpbmNlIGZpbmRFT0wgd29uJ3QgcmV0dXJuIGEgc3Bhbm5pbmcgQ1JMRi4KLQot
ICAgICAgICBsZW5ndGggLT0gKGJ5dGVzIC0gbGluZSk7Ci0gICAgICAgIGlmIChsaW5lTGVuZ3Ro
ID09IDApCi0gICAgICAgICAgICAvLyBCbGFuayBsaW5lOyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRo
ZSBoZWFkZXIKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBlbHNlIGlmICgqbGluZSA9PSAn
ICcgfHwgKmxpbmUgPT0gJ1x0JykgewotICAgICAgICAgICAgLy8gQ29udGludWF0aW9uIG9mIHRo
ZSBwcmV2aW91cyBoZWFkZXIKLSAgICAgICAgICAgIGlmIChsYXN0S2V5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIGhlYWRlcjsgaWdub3JlIGl0IGFuZCBjb250aW51
ZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91cyBoZWFk
ZXIKLSAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFZhbHVlID0gaGVhZGVyRmllbGRzLmdl
dChsYXN0S2V5KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VmFsdWUobGluZSwgbGluZUxl
bmd0aCk7CisgICAgRFdPUkQgYnl0ZXNSZWFkOworICAgIGludCByZXR2YWwgPSBSZWFkRmlsZShm
aWxlSGFuZGxlLCBidWZmZXIuZGF0YSgpLCBhdHRycy5uRmlsZVNpemVMb3csICZieXRlc1JlYWQs
IDApOwogCi0gICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnNldChsYXN0S2V5LCBjdXJyZW50
VmFsdWUgKyBuZXdWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBCcmFuZCBuZXcgaGVhZGVyCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBjb2xv
bjsKLSAgICAgICAgICAgIGZvciAoY29sb24gPSBsaW5lOyAqY29sb24gIT0gJzonICYmIGNvbG9u
ICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAgIC8vIGVtcHR5IGxvb3AKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2xvbiA9PSBlb2wpIAotICAgICAgICAgICAgICAg
IC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RL
ZXkgPSBjYXBpdGFsaXplUkZDODIySGVhZGVyRmllbGROYW1lKFN0cmluZyhsaW5lLCBjb2xvbiAt
IGxpbmUpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGNvbG9uKys7IGNvbG9uICE9IGVvbDsgY29sb24rKykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoKmNvbG9uICE9ICcgJyAmJiAqY29sb24gIT0gJ1x0JykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
Y29sb24gPT0gZW9sKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICIiOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBTdHJpbmcoY29sb24sIGVv
bCAtIGNvbG9uKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1ZSA9IGhlYWRlckZp
ZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvbGRWYWx1ZS5pc051bGwo
KSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdG1wID0gb2xkVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgICAgIHRtcCArPSAiLCAiOwotICAgICAgICAgICAgICAgICAgICB0bXAgKz0gdmFs
dWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wOwotICAgICAgICAgICAgICAgIH0K
KyAgICBDbG9zZUhhbmRsZShmaWxlSGFuZGxlKTsKIAotICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcy5zZXQobGFzdEtleSwgdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGhlYWRlckZpZWxkczsKKyAgICBpZiAocmV0dmFsID09IDAgfHwgYnl0
ZXNSZWFkICE9IGF0dHJzLm5GaWxlU2l6ZUxvdykKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVf
Tk9UX0ZPVU5EOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hh
ciogdXJsLCBjb25zdCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Ziwg
Ym9vbCBmaWxlLCB2b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wg
YWxsb3dIZWFkZXJzKQorTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2
YXJpYWJsZSwgdm9pZCogdmFsdWUpCiB7Ci0gICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQot
ICAgICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKyAgICBzd2l0Y2ggKHZhcmlhYmxl
KSB7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNhc2UgTlBOVldp
bmRvd05QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CiAKLSAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJl
cXVlc3Q7CisgICAgICAgICAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0ID0gbV9wYXJl
bnRGcmFtZS0+d2luZG93U2NyaXB0TlBPYmplY3QoKTsKIAotICAgIEhUVFBIZWFkZXJNYXAgaGVh
ZGVyRmllbGRzOwotICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgCi0gICAgaWYgKGZpbGUp
IHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIC8vIFJl
dHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6
IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4K
KyAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05Q
Tl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKIAotICAgICAgICBpZiAoZmlsZW5h
bWUuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkKLSAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5h
bWUuc3Vic3RyaW5nKDgpOworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwor
ICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQogCi0gICAgICAgIC8vIEdl
dCBmaWxlIGluZm8KLSAgICAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBhdHRyczsKLSAg
ICAgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQotICAg
ICAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworICAgICAgICBjYXNlIE5QTlZQ
bHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQor
CQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKIAotICAgICAgICBpZiAoYXR0cnMuZHdGaWxl
QXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgICAgIHJldHVy
biBOUEVSUl9GSUxFX05PVF9GT1VORDsKKyAgICAgICAgICAgIE5QT2JqZWN0KiBwbHVnaW5TY3Jp
cHRPYmplY3QgPSAwOwogCi0gICAgICAgIEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVco
ZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgRklMRV9SRUFEX0RBVEEs
IEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoZmlsZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQt
Pmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcp
IHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBs
dWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVt
ZW50KS0+Z2V0TlBPYmplY3QoKTsKIAotICAgICAgICBidWZmZXIucmVzaXplKGF0dHJzLm5GaWxl
U2l6ZUxvdyk7CisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUg
cmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9q
ZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0
T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9i
amVjdCk7CiAKLSAgICAgICAgRFdPUkQgYnl0ZXNSZWFkOwotICAgICAgICBpbnQgcmV0dmFsID0g
UmVhZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAm
Ynl0ZXNSZWFkLCAwKTsKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAg
ICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OwogCi0gICAgICAgIENsb3NlSGFuZGxl
KGZpbGVIYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAg
ICB9CisjZW5kaWYKIAotICAgICAgICBpZiAocmV0dmFsID09IDAgfHwgYnl0ZXNSZWFkICE9IGF0
dHJzLm5GaWxlU2l6ZUxvdykKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKLSAgICB9IGVsc2UgewotICAgICAgICBidWZmZXIucmVzaXplKGxlbik7Ci0gICAgICAgIG1l
bWNweShidWZmZXIuZGF0YSgpLCBidWYsIGxlbik7Ci0gICAgfQorICAgICAgICBjYXNlIE5QTlZu
ZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVy
cHJldF9jYXN0PFBsYXRmb3JtV2lkZ2V0Kj4odmFsdWUpOwogCi0gICAgY29uc3QgY2hhciogcG9z
dERhdGEgPSBidWZmZXIuZGF0YSgpOwotICAgIGludCBwb3N0RGF0YUxlbmd0aCA9IGJ1ZmZlci5z
aXplKCk7Ci0gICAgCi0gICAgaWYgKGFsbG93SGVhZGVycykgewotICAgICAgICBpZiAoc3RhcnRz
V2l0aEJsYW5rTGluZShidWZmZXIpKSB7Ci0gICAgICAgICAgICBwb3N0RGF0YSsrOwotICAgICAg
ICAgICAgcG9zdERhdGFMZW5ndGgtLTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlu
dCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShidWZmZXIpOwotICAgICAg
ICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJs
YW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwgZXZlcnl0
aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcyA9
IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24pOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250ZW50LUxl
bmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAotICAgICAgICAgICAgICAgIC8vIGJ1dCBX
ZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUgdGhlIGhl
YWRlcgotICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBkYXRhIHRv
IHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgotICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50TGVu
Z3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChpbnQpZGF0YUxlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1MZW5ndGgiKTsKKyAg
ICAgICAgICAgICp3ID0gY29udGFpbmluZ1dpbmRvdygpOwogCi0gICAgICAgICAgICAgICAgcG9z
dERhdGEgKz0gbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgcG9zdERhdGFMZW5ndGggPSBkYXRh
TGVuZ3RoOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwogICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKICAgICB9Ci0KLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVx
dWVzdCgpLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKLSAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnNldFVSTChtYWtlVVJMKG1fYmFzZVVSTCwgdXJsKSk7Ci0gICAgZnJhbWVM
b2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5hZGRIVFRQSGVhZGVyRmllbGRzKGhlYWRlckZp
ZWxkcyk7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQQm9k
eShGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLCBwb3N0RGF0YUxlbmd0aCkpOwotICAgIGZyYW1l
TG9hZFJlcXVlc3Quc2V0RnJhbWVOYW1lKHRhcmdldCk7Ci0KLSAgICByZXR1cm4gbG9hZChmcmFt
ZUxvYWRSZXF1ZXN0LCBzZW5kTm90aWZpY2F0aW9uLCBub3RpZnlEYXRhKTsKIH0KIAogdm9pZCBQ
bHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCkluZGV4OiBXZWJLaXQvZ3Rr
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24g
MzI0MzApCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE4IEBACisyMDA4LTA0LTIzICBNYXJjIE9yZGluYXMgaSBMbG9waXMgIDxtYXJjLm9yZGluYXNp
bGxvcGlzQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBOUEFQSSBwbHVnaW5zLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudDo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6
RnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oOgorCiAyMDA4LTA0LTIwICBTaW1vbiBI
YXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxw
IFRva2VyLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDMyNDMwKQorKysgV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiAr
Miw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3Rv
YXN0cy5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01Nyw2ICs1OCw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2Vi
S2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2lu
VmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpA
QCAtMTYyLDkgKzE2NCwzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxT
dWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxv
YWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1f
cmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0
YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVz
cG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgewor
ICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAgICAgICAgLy8gU2V0dGluZyB0aGUg
ZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUg
dGhhdCBpcyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBk
YXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8g
ZGF0YSAobGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGxvYWRl
ci0+b3ZlcnJpZGVFbmNvZGluZygpOworICAgICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2Rp
bmcuaXNOdWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3NlbikKKyAgICAgICAgICAgIGVuY29k
aW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgICAgICBG
cmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAg
IGZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAg
IGlmIChkYXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNT
ZW50UmVzcG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNl
aXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJl
c3BvbnNlVG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+
ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3Vt
ZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKQpAQCAtMjYwLDkgKzI4MywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5
RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9v
bCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXpl
JiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IFBsdWdpblZpZXc6
OmNyZWF0ZShjb3JlKG1fZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFt
ZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVn
aW5WaWV3LT5zdGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAg
ICAgIHJldHVybiBwbHVnaW5WaWV3OworCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5MCw4ICsz
MTcsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lk
Z2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuOworICAgIG1fcGx1Z2lu
VmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5XaWRnZXQpOwogfQogCiBXaWRn
ZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAgLTU4NywxNCArNjEzLDEzIEBA
IFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlNRVQKIAogdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRl
cikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1lKCkpOwotICAgIC8vIFNldHRp
bmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29y
ayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBv
ZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGgg
bm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1l
bnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5j
b2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICBlbmNv
ZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKLSAg
ICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVz
ZXJDaG9zZW4pOworICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2Fk
KGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3
LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAg
IG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzEw
LDkgKzczNSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFp
bkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChl
cnJvcik7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3Bv
bnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDMy
NDMwKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKQEAgLTMxLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlBsdWdp
blZpZXcuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkZyYW1lIFdlYktpdFdlYkZyYW1l
OwogCkBAIC0xNzAsNiArMTcyLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJL
aXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBt
X3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAg
ICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQ
bHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNDMwKQorKysgV2ViS2l0L3F0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDA4LTA0LTIzICBN
YXJjIE9yZGluYXMgaSBMbG9waXMgIDxtYXJjLm9yZGluYXNpbGxvcGlzQGNvbGxhYm9yYS5jby51
az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBzdXBwb3J0IGZvciBOUEFQSSBwbHVnaW5zLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFF0OjpGcmFtZUxvYWRlckNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmZpbmlzaGVkTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0OjpzZXRNYWluRG9jdW1lbnRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0Ojpjb21taXR0ZWRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0OjpyZWRpcmVjdERhdGFUb1BsdWdpbik6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oOgorCiAyMDA4LTA0LTIzICBCZW5qYW1p
biBNZXllciAgPGJtZXllckB0cm9sbHRlY2guY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uLgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmNwcAkocmV2aXNpb24gMzI0MzApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChD
KSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisj
aW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBA
IC0xMDMsNiArMTA1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKIEZyYW1lTG9hZGVyQ2xpZW50UXQ6
OkZyYW1lTG9hZGVyQ2xpZW50UXQoKQogICAgIDogbV9mcmFtZSgwKQogICAgICwgbV93ZWJGcmFt
ZSgwKQorICAgICwgbV9wbHVnaW5WaWV3KDApCiAgICAgLCBtX2ZpcnN0RGF0YShmYWxzZSkKICAg
ICAsIG1fcG9saWN5RnVuY3Rpb24oMCkKIHsKQEAgLTQ1NywxMCArNDYwLDE3IEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6ZGlkQ2hhbmdlVGl0bGUKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFF0OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKLSAgICBpZiAo
bV9maXJzdERhdGEpIHsKLSAgICAgICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxv
YWRlcigpOwotICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdO
YW1lKCksIGZhbHNlKTsKLSAgICAgICAgbV9maXJzdERhdGEgPSBmYWxzZTsKKyAgICBpZiAoIW1f
cGx1Z2luVmlldykgeworICAgICAgICBpZihtX2ZpcnN0RGF0YSkgeworICAgICAgICAgICAgRnJh
bWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICAgICAgZmwtPnNl
dEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAgICAg
ICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsK
KyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1
Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsK
ICAgICB9CiB9CiAKQEAgLTYwMywyMiArNjEzLDM2IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y2FuQ2FjaGVQYWdlKCkKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRNYWluRG9j
dW1lbnRFcnJvcihXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBpZiAobV9maXJzdERhdGEpIHsKLSAgICAg
ICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNv
ZGluZ05hbWUoKSwgZmFsc2UpOwotICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOworICAgIGlm
ICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmIChtX2ZpcnN0RGF0YSkgeworICAgICAgICAg
ICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNv
ZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICAgICAgbV9maXJzdERhdGEgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJv
cik7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNl
VG9QbHVnaW4gPSBmYWxzZTsKICAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6
Y29tbWl0dGVkTG9hZChXZWJDb3JlOjpEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKLSAgICBpZiAo
bV9maXJzdERhdGEpIHsKLSAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAg
aWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7
CisgICAgICAgIGlmIChtX2ZpcnN0RGF0YSkgeworICAgICAgICAgICAgZmwtPnNldEVuY29kaW5n
KG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBtX2Zp
cnN0RGF0YSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZsLT5hZGREYXRhKGRhdGEsIGxl
bmd0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2hhc1NlbnRSZXNwb25zZVRvUGx1
Z2luKSB7CisgICAgICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVSZXNwb25zZShsb2Fk
ZXItPnJlc3BvbnNlKCkpOworICAgICAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlRGF0YShk
YXRhLCBsZW5ndGgpOwogICAgIH0KLSAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwogfQog
CiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbmNlbGxlZEVy
cm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTg3Nyw3ICs5
MDEsNyBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvCiAgICAgaWYg
KF9taW1lVHlwZSA9PSAiYXBwbGljYXRpb24veC1xdC1wbHVnaW4iIHx8IF9taW1lVHlwZSA9PSAi
YXBwbGljYXRpb24veC1xdC1zdHlsZWQtd2lkZ2V0IikKICAgICAgICAgcmV0dXJuIE9iamVjdENv
bnRlbnRPdGhlclBsdWdpbjsKIAotICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgIGlmICh1cmwu
aXNFbXB0eSgpICYmICFfbWltZVR5cGUubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBPYmplY3RD
b250ZW50Tm9uZTsKIAogICAgIFN0cmluZyBtaW1lVHlwZSA9IF9taW1lVHlwZTsKQEAgLTg5Miw2
ICs5MTYsOSBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvCiAgICAg
aWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkp
CiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50SW1hZ2U7CiAKKyAgICBpZiAoUGx1Z2luRGF0
YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUp
KQorICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworCiAgICAgaWYg
KG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS0+c3VwcG9y
dHNNaW1lVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQ
bHVnaW47CiAKQEAgLTkxNCw3ICs5NDEsNyBAQCBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBx
c3R5bGVTaGVldFByCiAKIGNvbnN0IHVuc2lnbmVkIG51bXFTdHlsZVNoZWV0UHJvcGVydGllcyA9
IHNpemVvZihxc3R5bGVTaGVldFByb3BlcnRpZXMpIC8gc2l6ZW9mKHFzdHlsZVNoZWV0UHJvcGVy
dGllc1swXSk7CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKGNv
bnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAorV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0Ojpj
cmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkp
CiB7CiAvLyAgICAgcURlYnVnKCk8PCItLS0tLS0gQ3JlYXRpbmcgcGx1Z2luIGluIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbiBmb3IgIjw8dXJsLnByZXR0eVVSTCgpIDw8IG1pbWVU
eXBlOwpAQCAtOTU2LDI3ICs5ODMsMzEgQEAgV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0Ojpj
cmVhdGVQbHVnaQogCiAgICAgICAgICAgICB3aWRnZXQtPnNldFN0eWxlU2hlZXQoc3R5bGVTaGVl
dCk7CiAgICAgICAgIH0KLSAgICB9CiAKICNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCi0gICAg
aWYgKCFvYmplY3QpIHsKLSAgICAgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dl
YkZyYW1lLT5wYWdlKCktPnBsdWdpbkZhY3RvcnkoKTsKLSAgICAgICAgaWYgKGZhY3RvcnkpCi0g
ICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWltZVR5cGUsIHF1cmwsIHBhcmFt
cywgdmFsdWVzKTsKLSAgICB9CisgICAgICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgICAgICBR
V2ViUGx1Z2luRmFjdG9yeSogZmFjdG9yeSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+cGx1Z2luRmFj
dG9yeSgpOworICAgICAgICAgICAgaWYgKGZhY3RvcnkpCisgICAgICAgICAgICAgICAgb2JqZWN0
ID0gZmFjdG9yeS0+Y3JlYXRlKG1pbWVUeXBlLCBxdXJsLCBwYXJhbXMsIHZhbHVlcyk7CisgICAg
ICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG9iamVjdCkgewotICAgICAgICBRV2lkZ2V0ICp3aWRn
ZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCAqPihvYmplY3QpOwotICAgICAgICBRV2lkZ2V0ICp2
aWV3ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT52aWV3KCk7Ci0gICAgICAgIGlmICh3aWRnZXQgJiYg
dmlldykgewotICAgICAgICAgICAgd2lkZ2V0LT5zZXRQYXJlbnQodmlldyk7Ci0gICAgICAgICAg
ICBXaWRnZXQqIHc9IG5ldyBXaWRnZXQoKTsKLSAgICAgICAgICAgIHctPnNldE5hdGl2ZVdpZGdl
dCh3aWRnZXQpOwotICAgICAgICAgICAgcmV0dXJuIHc7CisgICAgICAgIGlmIChvYmplY3QpIHsK
KyAgICAgICAgICAgIFFXaWRnZXQgKndpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0ICo+KG9i
amVjdCk7CisgICAgICAgICAgICBRV2lkZ2V0ICp2aWV3ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT52
aWV3KCk7CisgICAgICAgICAgICBpZiAod2lkZ2V0ICYmIHZpZXcpIHsKKyAgICAgICAgICAgICAg
ICB3aWRnZXQtPnNldFBhcmVudCh2aWV3KTsKKyAgICAgICAgICAgICAgICBXaWRnZXQqIHc9IG5l
dyBXaWRnZXQoKTsKKyAgICAgICAgICAgICAgICB3LT5zZXROYXRpdmVXaWRnZXQod2lkZ2V0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBtYWtlIHRoaW5ncyB3b3JrIGZvciB3aWRnZXRsZXNzIHBsdWdpbnMgYXMgd2VsbAor
ICAgICAgICAgICAgZGVsZXRlIG9iamVjdDsKICAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTog
bWFrZSB0aGluZ3Mgd29yayBmb3Igd2lkZ2V0bGVzcyBwbHVnaW5zIGFzIHdlbGwKLSAgICAgICAg
ZGVsZXRlIG9iamVjdDsKKyAgICB9IGVsc2UgeyAvLyBOUEFQSSBQbHVnaW5zCisgICAgICAgIFBs
dWdpblZpZXcqIHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3OjpjcmVhdGUobV9mcmFtZSwgcGx1Z2lu
U2l6ZSwgZWxlbWVudCwgdXJsLAorICAgICAgICAgICAgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMs
IG1pbWVUeXBlLCBsb2FkTWFudWFsbHkpOworICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKICAg
ICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk4NCw4ICsxMDE1LDcgQEAgV2lkZ2V0KiBGcmFtZUxv
YWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJl
ZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuOworICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBs
dWdpblZpZXcqPihwbHVnaW5XaWRnZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25z
dCBLVVJMJiBiYXNlVVJMLApAQCAtMTAwNSw3ICsxMDM1LDYgQEAgUVN0cmluZyBGcmFtZUxvYWRl
ckNsaWVudFF0OjpjaG9vc2VGaWxlKAogICAgIHJldHVybiB3ZWJGcmFtZSgpLT5wYWdlKCktPmNo
b29zZUZpbGUod2ViRnJhbWUoKSwgb2xkRmlsZSk7CiB9CiAKLQogfQogCiAjaW5jbHVkZSAibW9j
X0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCShyZXZpc2lvbiAzMjQzMCkKKysrIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVHJvbGx0ZWNoIEFTQQor
ICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zOCw2ICszOSw3IEBACiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJSZWZDb3VudGVkLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIGNsYXNzIFFXZWJG
cmFtZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjA0LDYgKzIwNiw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAg
ICBib29sIG1fZmlyc3REYXRhOwogICAgICAgICBGcmFtZVBvbGljeUZ1bmN0aW9uIG1fcG9saWN5
RnVuY3Rpb247CisgICAgICAgIC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAg
ICAgICAgV2ViQ29yZTo6UGx1Z2luVmlldyogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1f
aGFzU2VudFJlc3BvbnNlVG9QbHVnaW47CiAgICAgfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20794</attachid>
            <date>2008-04-24 09:01:42 -0700</date>
            <delta_ts>2008-04-30 04:28:36 -0700</delta_ts>
            <desc>Adds NPAPI plugin support for Gtk and Qt-x11, r32489</desc>
            <filename>npapi-plugin-gtk-qt-r32489.patch</filename>
            <type>text/plain</type>
            <size>126855</size>
            <attacher name="marcoil">marc.ordinasillopis</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNDg5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsMTcgQEAKKzIwMDgtMDQt
MjQgIE1hcmMgT3JkaW5hcyBpIExsb3BpcyAgPG1hcmMub3JkaW5hc2lsbG9waXNAY29sbGFib3Jh
LmNvLnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MAorICAgICAgICBB
ZGRlZCBzdXBwb3J0IGZvciBOUEFQSSBwbHVnaW5zIG9uIEd0ayBhbmQgUXQteDExIHBvcnRzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEEKKwogMjAwOC0wNC0yMiAgQWxwIFRva2VyICA8
YWxwQG51YW50aS5jb20+CiAKICAgICAgICAgR1RLKyBkZWJ1ZyBidWlsZCBmaXggZm9yIGNoYW5n
ZXMgaW4gcjMyMjU3LgogCi0gICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IEFkZGVkIFh0IHRvIEd0ayBsaWJyYXJpZXMuCiAKIDIwMDgtMDQtMTggIEph
biBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KIApJbmRleDogR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDMyNDg5
KQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsNyBAQCBl
bmRpZgogCiBpZiBUQVJHRVRfWDExCiBnbG9iYWxfY3BwZmxhZ3MgKz0gLURYUF9VTklYCit3ZWJj
b3JlX2xpYmFkZCArPSAtbFh0CiBlbmRpZgogCiBpZiAhRU5BQkxFX0RFQlVHCkluZGV4OiBXZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MzI0ODkpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
NiBAQAorMjAwOC0wNC0yNCAgTWFyYyBPcmRpbmFzIGkgTGxvcGlzICA8bWFyYy5vcmRpbmFzaWxs
b3Bpc0Bjb2xsYWJvcmEuY28udWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NzUwCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMgb24gR3RrIGFuZCBR
dC14MTEgcG9ydHMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgR3RrIHBsdWdp
biBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogQWRkZWQgUXQgcGx1Z2lucyBmaWxlcywg
ZGVmaW5lZCBYUF9VTklYIGFuZAorICAgICAgICBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQSQor
ICAgICAgICAqIGJyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaDogQWRkaXRpb25hbCB1bmRlZnMg
dGhhdCBjb25mbGljdAorICAgICAgICB3aXRoIFF0IGhlYWRlcnMuCisgICAgICAgICogcGFnZS9n
dGsvRnJhbWVHdGsuY3BwOiBDcmVhdGUganMgYmluZGluZ3MgZm9yIFBsdWdpblZpZXcuCisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAg
ICAgICAqIHBhZ2UvcXQvRnJhbWVRdC5jcHA6IENyZWF0ZSBqcyBiaW5kaW5ncyBmb3IgUGx1Z2lu
Vmlldy4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2xlYXJQbGF0Zm9ybVNjcmlwdE9iamVj
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc2Nvbm5lY3RQbGF0Zm9ybVNjcmlwdE9i
amVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDogUXQgRmlsZVN5c3RlbSBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuaDogTWVtYmVycyB0byBk
aWZmZXJlbnRpYXRlIGJldHdlZW4gUXQgcGx1Z2lucyBhbmQKKyAgICAgICAgTlBBUEkgb25lcy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogUmVtb3ZlZCBp
bXBsZW1lbnRlZCBmdW5jdGlvbnMuCisgICAgICAgIChQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVn
aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwOiBJbXBsZW1lbnRl
ZCBmdW5jdGlvbnMgbmVjZXNzYXJ5IGZvcgorICAgICAgICBOUEFQSSBwbHVnaW5zLgorICAgICAg
ICAoV2ViQ29yZTo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OnVubG9hZE1vZHVsZSk6IERlbGV0ZSBtb2R1bGUgaWYgdW5sb2FkZWQuCisgICAgICAgICogcGxh
dGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDogUmVtb3ZlZCBpbXBsZW1lbnRlZCBmdW5j
dGlvbnMuCisgICAgICAgICogcGxhdGZvcm0vcXQvV2lkZ2V0UXQuY3BwOiBEaWZmZXJlbnRpYXRl
IGJldHdlZW4gUXQgcGx1Z2lucyBhbmQKKyAgICAgICAgTlBBUEkgb25lcy4KKyAgICAgICAgKFdl
YkNvcmU6OldpZGdldFByaXZhdGU6OldpZGdldFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2lkZ2V0Ojppc05QQVBJUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0SXNO
UEFQSVBsdWdpbik6CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6On5QbHVnaW5QYWNrYWdlKTogVW5sb2FkIHRoZSBt
b2R1bGUgYmVmb3JlCisgICAgICAgIGRlc3RydWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luUGFja2FnZTo6Y29tcGFyZSk6IE1vdmVkIGhlcmUgYXMgaXQncyBwbGF0Zm9ybQorICAgICAg
ICBpbmRlcGVuZGVudC4KKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOiBNb3ZlZCBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBmdW5jdGlvbnMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OlBsdWdpblZpZXcpOiBJbml0aWFsaXplIG1fbnBXaW5kb3cud3NfaW5mbyBvbgor
ICAgICAgICBVbml4IHBsYXRmb3Jtcy4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmZy
ZWVTdHJpbmdBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydHNXaXRoQmxhbmtMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OmxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpmaW5kRU9MKToKKyAgICAgICAgKFdlYkNvcmU6OmNhcGl0YWxpemVSRkM4MjJI
ZWFkZXJGaWVsZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VSRkM4MjJIZWFkZXJGaWVs
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdCk6CisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5WaWV3Lmg6IE1vdmVkIHBsYXRmb3JtLWluZGVwZW5kZW50IGZ1bmN0
aW9ucyBoZXJlLgorICAgICAgICBBZGRlZCBtZW1iZXIgdG8gc2lnbmFsIHBsdWdpbiBuZWVkcyBY
RW1iZWQgZXh0ZW5zaW9uLgorICAgICAgICAqIHBsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJlc2gpOgorICAgICAgICAqIHBsdWdpbnMv
Z3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFi
YXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KToKKyAgICAgICAgKiBwbHVnaW5z
L2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
UGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6OmZldGNoSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6Omhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luUGFja2FnZTo6ZXF1YWwpOgorICAgICAgICAqIHBsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnVwZGF0ZVdp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRGb2N1cyk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6cGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6YXR0YWNoVG9X
aW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblZpZXc6OnVzZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpo
YW5kbGVQb3N0UmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aW5pdCk6CisgICAgICAgICogcGx1Z2lucy9ndGsveGVtYmVkLmg6IEFkZGVkLgorICAgICAg
ICAqIHBsdWdpbnMvbnBhcGkuY3BwOgorICAgICAgICAoTlBOX0dldFZhbHVlKTogUmV0dXJuIGVy
cm9yIGlmIG5vIHZpZXcgcHJlc2VudC4KKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpbkRhdGFR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpyZWZyZXNoKToKKyAgICAgICAgKiBwbHVnaW5zL3F0
L1BsdWdpbkRhdGFiYXNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
YWRkUXRXZWJLaXRQbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjphZGRNb3pp
bGxhUGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6
OmRlZmF1bHRQbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRh
YmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAqIHBsdWdpbnMvcXQv
UGx1Z2luUGFja2FnZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNr
YWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6
ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmxvYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpj
b21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luVmlld1F0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0Rm9jdXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5k
b3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmF0dGFjaFRvV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRldGFjaEZyb21XaW5kb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5W
aWV3Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9z
dFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6
flBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAg
ICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHA6IE1vdmVkIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IGNvZGUKKyAgICAgICAgdG8gcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAorICAg
ICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwOiBNb3ZlZCBwbGF0Zm9ybS1pbmRl
cGVuZGVudCBjb2RlIHRvCisgICAgICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6Omdl
dFZhbHVlKTogTW92ZWQgdGhpcyBmdW5jdGlvbiB0byBlYWNoIHBsYXRmb3JtLgorCiAyMDA4LTA0
LTI0ICBTaW1vbiBIYXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnVi
YmVyLXN0YW1wZWQgYnkgTGFycwpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTkyMCw3ICs5MjAsMTAgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCiAJ
V2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvbnBhcGku
Y3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwIFwKIAlXZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFiYXNlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3
R3RrLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcCBcCiAJV2Vi
Q29yZS9yZW5kZXJpbmcvYmlkaS5jcHAgXAogCVdlYkNvcmUvcmVuZGVyaW5nL2JyZWFrX2xpbmVz
LmNwcCBcCkBAIC05ODEsNiArOTg0LDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQuY3BwIFwKIAlXZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAoraWYgVEFS
R0VUX1gxMQord2ViY29yZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL2d0azJ4
dGJpbi5jCitlbmRpZgogCiB3ZWJraXRndGtfaGVhZGVycyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsMTAgQEAgaW5jbHVkZSgk
JFBXRC8uLi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaQogI0xJQlMgKz0gLUwkJE9VVFBVVF9ESVIv
bGliIC1sSmF2YVNjcmlwdENvcmUKIAogcXQtcG9ydCB7CisgICAgdW5peCB7CisgICAgICAgIERF
RklORVMgKz0gWFBfVU5JWCBFTkFCTEVfTkVUU0NBUEVfUExVR0lOX0FQST0xCisgICAgfQorCiBS
RVNPVVJDRVMgKz0gXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViQ29yZS9wYWdlL2luc3BlY3Rv
ci9XZWJLaXQucXJjIFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYkNvcmUvUmVzb3VyY2VzL1dl
YktpdFJlc291cmNlcy5xcmMKQEAgLTEwNDMsNyArMTA0NywxMiBAQCBxdC1wb3J0IHsKICAgICAu
Li9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmNwcCBcCiAgICAgLi4vV2ViS2l0
L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKIAotICAgIHVuaXg6IFNPVVJDRVMgKz0gcGxh
dGZvcm0vcXQvU3lzdGVtVGltZVF0LmNwcAorICAgIHVuaXg6IHsKKyAgICAgICAgU09VUkNFUyAr
PSBwbGF0Zm9ybS9xdC9TeXN0ZW1UaW1lUXQuY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbHVn
aW5zL3F0L1BsdWdpbkRhdGFiYXNlUXQuY3BwIFwKKyAgICAgICAgICAgICAgICAgICBwbHVnaW5z
L3F0L1BsdWdpblBhY2thZ2VRdC5jcHAgXAorICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQv
UGx1Z2luVmlld1F0LmNwcAorICAgIH0KICAgICBlbHNlOiBTT1VSQ0VTICs9IHBsYXRmb3JtL3dp
bi9TeXN0ZW1UaW1lV2luLmNwcAogCiAgICAgIyBGaWxlcyBiZWxvbmdpbmcgdG8gdGhlIFF0IDQu
MyBidWlsZApAQCAtMTA2Miw2ICsxMDcxLDcgQEAgcXQtcG9ydCB7CiB9CiAKIGd0ay1wb3J0IHsK
KyAgICBJTkNMVURFUEFUSCArPSAuLi9XZWJDb3JlL3BsdWdpbnMvZ3RrCiAgICAgSEVBREVSUyAr
PSBcCiAgICAgICAgIC4uL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIFwKICAg
ICAgICAgLi4vV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oIFwKSW5kZXg6
IFdlYkNvcmUvYnJpZGdlL25wcnVudGltZV9pbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYnJpZGdlL25wcnVudGltZV9pbnRlcm5hbC5oCShyZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNv
cmUvYnJpZGdlL25wcnVudGltZV9pbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBDb2xsYWJvcmEgTHRkLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0zOCw0ICszOCwxMyBA
QAogICAgICN1bmRlZiBBdXRvCiAgICAgI3VuZGVmIENvbXBsZXgKICAgICAjdW5kZWYgU3RhdHVz
CisgICAgI3VuZGVmIEN1cnNvclNoYXBlCisgICAgI3VuZGVmIEZvY3VzSW4KKyAgICAjdW5kZWYg
Rm9jdXNPdXQKKyAgICAjdW5kZWYgS2V5UHJlc3MKKyAgICAjdW5kZWYgS2V5UmVsZWFzZQorICAg
ICN1bmRlZiBVbnNvcnRlZAorICAgICN1bmRlZiBCb29sCisgICAgI3VuZGVmIEZvbnRDaGFuZ2UK
KyAgICAjdW5kZWYgR3JheVNjYWxlCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGFnZS9ndGsvRnJh
bWVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCShy
ZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KICAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDE1ICszMSwyMSBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNp
bmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRl
ICJydW50aW1lLmgiCiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQo
V2lkZ2V0KikKK1Bhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+IEZyYW1lOjpjcmVh
dGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIC8vIEZJWE1FOiBJZGVhbGx5IHdlJ2QgaGF2
ZSBhbiBpc1BsdWdpblZpZXcoKSBoZXJlIGJ1dCB3ZSBjYW4ndCBhZGQgdGhhdCB0byB0aGUgb3Bl
biBzb3VyY2UgdHJlZSByaWdodCBub3cuCisgICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KHdpZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOwogfQogCiB2b2lkIEZyYW1lOjpjbGVhclBsYXRm
b3JtU2NyaXB0T2JqZWN0cygpCkluZGV4OiBXZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCShyZXZpc2lvbiAzMjQ4OSkK
KysrIFdlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNiw2ICs2
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKQEAgLTM0LDYgKzM1LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
cldpZGdldC5oIgpAQCAtOTksNiArMTAyLDExIEBAIHN0YXRpYyB2b2lkIGRvU2Nyb2xsKGNvbnN0
IFJlbmRlck9iamVjdCoKIAogUGFzc1JlZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJh
bWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdlYkNvcmU6OldpZGdldCogd2lkZ2V0
KQogeworICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICh3aWRnZXQtPmlzTlBBUElQbHVnaW4oKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFBsdWdpblZpZXcqPih3aWRnZXQpLT5iaW5kaW5nSW5zdGFuY2UoKTsKKwogICAgIFFXaWRn
ZXQqIG5hdGl2ZVdpZGdldCA9IHdpZGdldC0+bmF0aXZlV2lkZ2V0KCk7CiAgICAgaWYgKCFuYXRp
dmVXaWRnZXQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA3LDEwICsxMTUsMTIgQEAgUGFzc1Jl
ZlB0cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbQogCiB2b2lkIEZyYW1lOjpjbGVhclBs
YXRmb3JtU2NyaXB0T2JqZWN0cygpCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9p
ZCBGcmFtZTo6ZGlzY29ubmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCiB7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAogRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rp
b24oKSAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCShyZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMCBA
QAogI2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlIDxnbW9kdWxlLmg+CiAjZW5kaWYKKyNpZiBQ
TEFURk9STShRVCkKKyNpbmNsdWRlIDxRRmlsZT4KKyNpbmNsdWRlIDxRTGlicmFyeT4KKyNlbmRp
ZgogCiAjaW5jbHVkZSA8dGltZS5oPgogCkBAIC02Nyw2ICs3MSwxMSBAQCBzdHJ1Y3QgUGxhdGZv
cm1Nb2R1bGVWZXJzaW9uIHsKICAgICB9CiAKIH07CisjZWxpZiBQTEFURk9STShRVCkKK3R5cGVk
ZWYgUUZpbGUqIFBsYXRmb3JtRmlsZUhhbmRsZTsKK3R5cGVkZWYgUUxpYnJhcnkqIFBsYXRmb3Jt
TW9kdWxlOworY29uc3QgUGxhdGZvcm1GaWxlSGFuZGxlIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGUgPSAwOwordHlwZWRlZiB1bnNpZ25lZCBQbGF0Zm9ybU1vZHVsZVZlcnNpb247CiAjZWxzZQog
dHlwZWRlZiBpbnQgUGxhdGZvcm1GaWxlSGFuZGxlOwogI2lmIFBMQVRGT1JNKEdUSykKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9XaWRnZXQuaAkocmV2aXNpb24gMzI0ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDkgQEAgcHJvdGVjdGVkOgogICAgICAgICB2
b2lkIHNldE5hdGl2ZVdpZGdldChRV2lkZ2V0ICp3aWRnZXQpOwogICAgICAgICBRV2lkZ2V0KiBu
YXRpdmVXaWRnZXQoKSBjb25zdDsKIAorICAgICAgICB2b2lkIHNldElzTlBBUElQbHVnaW4oYm9v
bCk7CisgICAgICAgIGJvb2wgaXNOUEFQSVBsdWdpbigpIGNvbnN0OworCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOwogICAgICAgICBTY3JvbGxWaWV3KiBwYXJl
bnQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShy
ZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJGVFBEaXJl
Y3RvcnlEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRh
LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
CkBAIC01OCwyOCArNTYsNyBAQCBWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNv
bnN0CiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJzIChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1
bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCiAKLWludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2th
Z2UmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBh
Y2thZ2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci11
bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdl
JiwgY29uc3QgUGx1Z2luUGFja2FnZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVj
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFn
ZW50KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVjdChOUFJlY3QqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2lu
Vmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lk
IFBsdWdpblZpZXc6OnNldEZvY3VzKCkgeyBXaWRnZXQ6OnNldEZvY3VzKCk7IH0KLXZvaWQgUGx1
Z2luVmlldzo6c2hvdygpIHsgV2lkZ2V0OjpzaG93KCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGlk
ZSgpIHsgV2lkZ2V0OjpoaWRlKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVn
aW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogdmlldykgeyBXaWRnZXQ6OnNldFBhcmVudCh2
aWV3KTsgfQotdm9pZCBQbHVnaW5WaWV3OjphdHRhY2hUb1dpbmRvdygpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpkZXRhY2hGcm9tV2luZG93KCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci1OUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3QoY29uc3QgY2hhciosIGNv
bnN0IGNoYXIqLCB1aW50MzIsIGNvbnN0IGNoYXIqLCBib29sLCB2b2lkKiwgYm9vbCwgYm9vbCkg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsgfQotdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3coKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZv
aWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KikgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VF
dmVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotUGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSB7
fQogCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7
IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgq
KSgpKSB7IH0KQEAgLTkzLDggKzcwLDUgQEAgU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkg
Y29uc3QgeyBubwogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVh
dGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQogCi12b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Ci12b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9GaWxlU3lzdGVtUXQuY3BwCShyZXZpc2lv
biAzMjQ4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRmlsZVN5c3RlbVF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQAogCiAjaW5jbHVkZSA8UURhdGVUaW1lPgogI2luY2x1
ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFUZW1wb3JhcnlGaWxlPgogI2luY2x1ZGUgPFFGaWxlSW5m
bz4KKyNpbmNsdWRlIDxRRGF0ZVRpbWU+CiAjaW5jbHVkZSA8UURpcj4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtODgsMTAgKzkwLDM2IEBAIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3Qg
U3RyaW5nJiBwYXQKICAgICByZXR1cm4gUUZpbGVJbmZvKHBhdGgpLmZpbGVOYW1lKCk7CiB9CiAK
LWJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlKQorQ1N0cmluZyBvcGVuVGVtcG9yYXJ5
RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQorewor
ICAgIFFGaWxlICp0ZW1wID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFTdHJpbmcocHJlZml4KSk7Cisg
ICAgaWYoIHRlbXAtPm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpICkgeworICAgICAgICBoYW5k
bGUgPSB0ZW1wOworICAgICAgICByZXR1cm4gU3RyaW5nKHRlbXAtPmZpbGVOYW1lKCkpLnV0Zjgo
KTsKKyAgICB9CisgICAgaGFuZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUp
Cit7CisgICAgaWYoaGFuZGxlKSB7CisgICAgICAgIGhhbmRsZS0+Y2xvc2UoKTsKKyAgICAgICAg
ZGVsZXRlIGhhbmRsZTsKKyAgICB9Cit9CisKK2ludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmKGhh
bmRsZSAmJiBoYW5kbGUtPmV4aXN0cygpICYmIGhhbmRsZS0+aXNXcml0YWJsZSgpKSB7CisgICAg
ICAgIGhhbmRsZS0+d3JpdGUoZGF0YSwgbGVuZ3RoKTsKKyAgICB9Cit9CisKK2Jvb2wgdW5sb2Fk
TW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobW9kdWxlLT51bmxvYWQoKSkKKyAgICAgICAgZGVs
ZXRlIG1vZHVsZTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAkocmV2aXNpb24gMzI0ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDQxICs3MiwxMSBAQAog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdm9pZCBQbHVnaW5EYXRhYmFzZTo6Z2V0UGx1
Z2luUGF0aHNJbkRpcmVjdG9yaWVzKEhhc2hTZXQ8U3RyaW5nPiYpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQotVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5E
aXJlY3RvcmllcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
IH0KLWJvb2wgUGx1Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KGNvbnN0
IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1pbnQgUGx1Z2lu
UGFja2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJikgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdW5zaWduZWQgUGx1Z2luUGFja2FnZTo6
aGFzaCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgUGx1Z2lu
UGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYsIGNvbnN0IFBsdWdpblBhY2thZ2Um
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotYm9vbCBQbHVnaW5QYWNrYWdl
Ojpsb2FkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgUGx1Z2lu
Vmlldzo6c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLWNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLXZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0Kikg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24o
TlBSZWdpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3Ojpmb3JjZVJl
ZHJhdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygp
IHsgV2lkZ2V0OjpzZXRGb2N1cygpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNob3coKSB7IFdpZGdl
dDo6c2hvdygpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmhpZGUoKSB7IFdpZGdldDo6aGlkZSgpOyB9
Ci12b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2V0UGFyZW50KFNjcm9s
bFZpZXcqIHZpZXcpIHsgV2lkZ2V0OjpzZXRQYXJlbnQodmlldyk7IH0KLXZvaWQgUGx1Z2luVmll
dzo6YXR0YWNoVG9XaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmll
dzo6ZGV0YWNoRnJvbVdpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotTlBFcnJvciBQbHVn
aW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgdWludDMyLCBjb25z
dCBjaGFyKiwgYm9vbCwgdm9pZCosIGJvb2wsIGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7IH0KLXZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVNb3VzZUV2ZW50KE1vdXNlRXZlbnQqKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLVBsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkge30KLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRLZXlTaXplcygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7IH0KIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRD
aGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcgJmNoYWxs
ZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVybiBTdHJpbmcoKTsgfQogCi1DU3Ry
aW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiBoYW5kbGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgaGFuZGxlID0gaW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZTsgcmV0dXJuIDA7IH0KLXZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfTsKLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIHsgcmV0dXJuIC0xOyB9OwotCiAj
aWYgIWRlZmluZWQoUV9PU19XSU4pCiAvLyBkZWZpbmVkIGluIHdpbi9TeXN0ZW1UaW1lV2luLmNw
cCwgd2hpY2ggaXMgY29tcGlsZWQgZm9yIHRoZSBRdC9XaW5kb3dzIHBvcnQKIGZsb2F0IHVzZXJJ
ZGxlVGltZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDAuMDsgfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9xdC9XaWRnZXRRdC5jcHAJKHJldmlzaW9uIDMyNDg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9XaWRnZXRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgc3RydWN0IFdp
ZGdldFByaXZhdGUKICAgICAgICAgLCBlbmFibGVkKHRydWUpCiAgICAgICAgICwgc3VwcHJlc3NJ
bnZhbGlkYXRpb24oZmFsc2UpCiAgICAgICAgICwgbV93aWRnZXQoMCkKKyAgICAgICAgLCBpc05Q
QVBJUGx1Z2luKDApCiAgICAgICAgICwgbV9wYXJlbnRTY3JvbGxWaWV3KDApIHsgfQogICAgIH5X
aWRnZXRQcml2YXRlKCkge30KIApAQCAtNjYsNiArNjcsNyBAQCBzdHJ1Y3QgV2lkZ2V0UHJpdmF0
ZQogCiAgICAgYm9vbCBlbmFibGVkOwogICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb247Cisg
ICAgYm9vbCBpc05QQVBJUGx1Z2luOwogICAgIFFSZWN0IG1fZ2VvbWV0cnk7CiAgICAgUVdpZGdl
dCAqbV93aWRnZXQ7IC8vZm9yIHBsdWdpbnMKICAgICBTY3JvbGxWaWV3ICptX3BhcmVudFNjcm9s
bFZpZXc7CkBAIC0xNDEsNiArMTQzLDE2IEBAIHZvaWQgV2lkZ2V0OjpzZXROYXRpdmVXaWRnZXQo
UVdpZGdldCAqd2kKICAgICBkYXRhLT5tX3dpZGdldCA9IHdpZGdldDsKIH0KIAorYm9vbCBXaWRn
ZXQ6OmlzTlBBUElQbHVnaW4oKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5pc05QQVBJUGx1
Z2luOworfQorCit2b2lkIFdpZGdldDo6c2V0SXNOUEFQSVBsdWdpbihib29sIGlzKQoreworICAg
IGRhdGEtPmlzTlBBUElQbHVnaW4gPSBpczsKK30KKwogdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCAqLCBjb25zdCBJbnRSZWN0ICZyZWN0KQogewogfQpJbmRleDogV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMzI0ODkpCisrKyBXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE2ICsyNywzMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKIAorI2luY2x1
ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
bHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCiB7CisgICAgLy8gVGhpcyBkZXN0cnVjdG9y
IGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1Z2luRGF0YWJhc2UncworICAgIC8v
IFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVkLCBhcyBpdCByZW1vdmVzIGl0ZW1z
IGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGluZyB0aGUgZGVzdHJ1Y3RvciBvbiBh
IGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8gY291cnNlIHdvdWxkIGNhdXNlIGEgY3Jhc2gsIHNv
IHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQorICAgIC8vIEFTU0VSVC4KKyAgICAv
LyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGZpeCB0aGlzLgorICAg
IGlmIChtX2xvYWRDb3VudCA9PSAwKQorCSAgICB1bmxvYWRXaXRob3V0U2h1dGRvd24oKTsKKyAg
ICBlbHNlCisJICAgIHVubG9hZCgpOworCiAgICAgQVNTRVJUKCFtX2lzTG9hZGVkKTsKIH0KIApA
QCAtNTgsNiArNzIsMzEgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVlTGlicmFyeVRpbWVyRmly
ZQogICAgIG1fbW9kdWxlID0gMDsKIH0KIAorCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZShj
b25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Cit7CisgICAgLy8gU29ydCBwbHVn
LWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4KKyAgICBib29sIEFhbGxv
d3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRB
bGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBib29sIEJhbGxvd3NNdWx0aXBsZUluc3RhbmNl
cyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dNdWx0
aXBsZUluc3RhbmNlcyk7CisgICAgaWYgKEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyAhPSBCYWxs
b3dzTXVsdGlwbGVJbnN0YW5jZXMpCisgICAgICAgIHJldHVybiBBYWxsb3dzTXVsdGlwbGVJbnN0
YW5jZXMgPyAtMSA6IDE7CisKKyAgICAvLyBTb3J0IHBsdWctaW5zIGluIGEgcHJlZmVycmVkIHBh
dGggZmlyc3QuCisgICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFi
YXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJlY3RvcnkoKSk7CisgICAg
Ym9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJl
ZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOworICAgIGlmIChB
aXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERpcmVjdG9yeSkKKyAgICAg
ICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAxOworCisgICAgaW50IGRp
ZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgaWYgKGRpZmYpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgaWYg
KGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSkpCisgICAgICAg
IHJldHVybiBkaWZmOworCisgICAgcmV0dXJuIHN0cmNtcChwYXJlbnREaXJlY3RvcnkoKS51dGY4
KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSk7Cit9
CisKIFBsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKICAgICA6IG1fcGF0aChwYXRoKQogICAgICwgbV9tb2R1
bGVWZXJzaW9uKDApCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAzMjQ4OSkK
KysrIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9y
YSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM5Myw1NSArMzkzLDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hh
ciogbWVzcwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVu
dEZyYW1lLCBTdHJpbmcobWVzc2FnZSkpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZh
bHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBpZiAobV9pc0ph
dmFTY3JpcHRQYXVzZWQpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0g
ICAgc3dpdGNoICh2YXJpYWJsZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3Qq
IHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0
KCk7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRh
aW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3Rz
L3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmpl
Y3QpCi0gICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0
KTsKLQotICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAgICAg
KnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlBsdWdpbkVs
ZW1lbnROUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVj
dCA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFn
KSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFn
TmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0
YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsK
LQotICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgotICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkK
LSAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwot
Ci0gICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAgICAqdiA9
IHBsdWdpblNjcmlwdE9iamVjdDsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzog
ewotICAgICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVycHJldF9jYXN0PFBsYXRm
b3JtV2lkZ2V0Kj4odmFsdWUpOwotCi0gICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3co
KTsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAg
ICB9Ci19Ci0KIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFi
bGUsIHZvaWQqIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKQEAgLTU5Nyw2ICs1
NDgsMTAgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbQogCiAgICAg
c2V0UGFyYW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAKKyNpZmRlZiBYUF9VTklY
CisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gMDsKKyNlbmRpZgorCiAgICAgbV9tb2RlID0gbV9s
b2FkTWFudWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQ7CiAKICAgICByZXNpemUoc2l6ZSk7CkBA
IC02NzEsNCArNjI2LDIyOSBAQCBQbHVnaW5WaWV3KiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJhbWUq
IHBhCiAgICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3KHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4s
IGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9h
ZE1hbnVhbGx5KTsKIH0KIAordm9pZCBQbHVnaW5WaWV3OjpmcmVlU3RyaW5nQXJyYXkoY2hhcioq
IHN0cmluZ0FycmF5LCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5nQXJyYXkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAg
ICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKKworICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5
KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVj
dG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1
ZmZlclswXSA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmly
c3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hh
ciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5z
aXplKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7
CisgICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAg
ICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAg
ICAgICByZXR1cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3Np
dGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisg
ICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7Cisg
ICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIg
KDM4ODAzODcpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAg
ICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgx
MTMpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNv
bnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRv
IHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYg
cGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5z
dGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAg
IC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRz
CisgICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBM
RiBvcgorICAgIC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYg
aXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBm
aXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAg
ICAgcmV0dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAg
ICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAg
ICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAg
ICAgICAgIC8vIG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgYm9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICBVQ2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5h
bWVbaV0gPj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvQVNDSUlV
cHBlcihuYW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYg
bmFtZVtpXSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9BU0NJ
SUxvd2VyKG5hbWVbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gbmFtZVtpXTsK
KworICAgICAgICBpZiAobmFtZVtpXSA9PSAnLScpCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hh
cmFjdGVyID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJh
Y3RlciA9IGZhbHNlOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBhcnNlUkZD
ODIySGVhZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIGNvbnN0
IGNoYXIqIGVvbDsKKyAgICBTdHJpbmcgbGFzdEtleTsKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRl
ckZpZWxkczsKKworICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBo
ZWFkZXIsIG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCisgICAgd2hpbGUg
KChlb2wgPSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgeworICAgICAgICBjb25zdCBjaGFyKiBs
aW5lID0gYnl0ZXM7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7CisgICAg
ICAgIAorICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHRl
cm1pbmF0b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KKyAgICAgICAgYnl0ZXMgPSBlb2wgKyAx
OworICAgICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkKKyAgICAg
ICAgICAgIGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4gYSBzcGFu
bmluZyBDUkxGLgorCisgICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKKyAgICAgICAg
aWYgKGxpbmVMZW5ndGggPT0gMCkKKyAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdlJ3JlIGF0
IHRoZSBlbmQgb2YgdGhlIGhlYWRlcgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2Ug
aWYgKCpsaW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7CisgICAgICAgICAgICAvLyBDb250
aW51YXRpb24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgaWYgKGxhc3RLZXku
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUg
aXQgYW5kIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhl
IHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBo
ZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1
ZShsaW5lLCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQo
bGFzdEtleSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAgICAgICAgICAg
Y29uc3QgY2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsgKmNvbG9u
ICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAvLyBl
bXB0eSBsb29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKSAK
KyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRp
bnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShTdHJp
bmcobGluZSwgY29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwor
CisgICAgICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUg
PSAiIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
U3RyaW5nKGNvbG9uLCBlb2wgLSBjb2xvbik7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgb2xk
VmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIGlmICgh
b2xkVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9s
ZFZhbHVlOworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKKyAgICAgICAgICAgICAg
ICAgICAgdG1wICs9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RL
ZXksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBoZWFkZXJGaWVsZHM7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdChjb25z
dCBjaGFyKiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciog
YnVmLCBib29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwg
Ym9vbCBhbGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQorICAg
ICAgICByZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZyYW1lTG9hZFJlcXVlc3Qg
ZnJhbWVMb2FkUmVxdWVzdDsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworICAg
IFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgTlBF
cnJvciByZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1ZmZlciwgbGVuLCBidWYpOwor
ICAgICAgICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0
dXJuIHJlYWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4p
OworICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAg
IGNvbnN0IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFM
ZW5ndGggPSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAgICAg
ICBpZiAoc3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0RGF0
YSsrOworICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShidWZm
ZXIpOworICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJ1
ZmZlciwgZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIGhl
YWRlckZpZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24pOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0gbG9j
YXRpb247CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNl
dCBDb250ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAgICAg
ICAgIC8vIGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCBy
ZW1vdmUgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRl
IHRoZSBkYXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0cmlu
ZyBjb250ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKTsKKwor
ICAgICAgICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChpbnQpZGF0
YUxlbmd0aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1M
ZW5ndGgiKTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOworICAgICAg
ICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0SFRUUE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1
ZXN0KCkuc2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRSZXF1
ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmllbGRzKTsK
KyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KEZvcm1E
YXRhOjpjcmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7CisgICAgZnJhbWVMb2FkUmVx
dWVzdC5zZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJl
cXVlc3QsIHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDMyNDg5KQorKysgV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3
MSw2ICsxNzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNl
dEN1cnJlbnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKICAgICAgICAgTlBFcnJvciBsb2FkKGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlm
eURhdGEpOwogICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25z
dCBjaGFyKiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2
b2lkKiBub3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJz
KTsKKyAgICAgICAgTlBFcnJvciBoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZm
ZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7CisgICAgICAgIHN0YXRpYyB2b2lkIGZy
ZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwogICAgICAgICB2
b2lkIHNldENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CiAgICAgICAgIFJlZlB0cjxQbHVnaW5Q
YWNrYWdlPiBtX3BsdWdpbjsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwpAQCAtMjIxLDYg
KzIyMywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9hdHRhY2hlZFRv
V2luZG93OwogICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOwogCisjaWYgUExBVEZPUk0o
R1RLKSB8fCBkZWZpbmVkKFFfV1NfWDExKQorICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7Cisj
ZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VU
aHJvdHRsZXJXaW4+IG1fbWVzc2FnZVRocm90dGxlcjsKICAgICAgICAgV05EUFJPQyBtX3BsdWdp
blduZFByb2M7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAJKHJldmlzaW9uIDMyNDg5KQorKysgV2ViQ29yZS9w
bHVnaW5zL25wYXBpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxMSBAQCB2b2lk
IE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCiAKIE5QRXJyb3IgTlBOX0dldFZhbHVlKE5Q
UCBpbnN0YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogeworICAgIC8v
IEZJWE1FOiBBY3JvYmF0IHJlYWRlciBwbHVnaW4gY2FsbHMgTlBOX0dldFZhbHVlIGJlZm9yZSBh
IFBsdWdpblZpZXcKKyAgICAvLyBoYXMgYmVlbiBjcmVhdGVkCisgICAgaWYgKCFpbnN0YW5jZSkK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKICAgICByZXR1cm4gcGx1Z2lu
Vmlld0Zvckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKIH0K
IApJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQor
ICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICAgIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2Uu
aCIKKyNpbmNsdWRlIDxzdGRpby5oPgorbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdp
bkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5E
YXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNr
YWdlKj4gJnBsdWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIGlu
Zm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBs
dWdpbnNbaV07CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAg
ICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8tPmRlc2Mg
PSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0
aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25z
KCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1p
bWVDbGFzc0luZm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisKKyAg
ICAgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLT5kZXNj
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4g
MCkKKyAgICAgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAg
ICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9
IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsK
K30KKworfTsKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YUd0ay5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9u
IDMyNDg5KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNp
bmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8Z2RrY29uZmlnLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsNiArNjEsOCBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5E
YXRhYmFzZTo6ZGVmYXVsdFBsCiAgICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7CiAgICAg
Z2NoYXIqIGRpcmVjdG9yeTsKIAorICAgIGRpcmVjdG9yeSA9IDA7CisKICNpZiBkZWZpbmVkKEdE
S19XSU5ET1dJTkdfWDExKQogICAgIGRpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRf
aG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKICAgICBkaXJlY3Rvcmll
cy5hcHBlbmQoZGlyZWN0b3J5KTsKQEAgLTk1LDcgKzk4LDIxIEBAIFZlY3RvcjxTdHJpbmc+IFBs
dWdpbkRhdGFiYXNlOjpkZWZhdWx0UGwKIAogYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJy
ZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCiB7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIGdjaGFyKiBob21lUGF0aDsKKyAgICBib29sIHJldHZhbCA9IGZhbHNlOwor
CisgICAgaG9tZVBhdGggPSAwOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAg
ICBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxh
IiwgInBsdWdpbnMiLCAwKTsKKyNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19XSU4zMikKKyAg
ICBob21lUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIkFwcGxpY2F0
aW9uIERhdGEiLCAiTW96aWxsYSIsICJwbHVnaW5zIiwgMCk7CisjZW5kaWYKKworICAgIGlmICho
b21lUGF0aCkKKwlyZXR2YWwgPSAoc3RyY21wKGhvbWVQYXRoLCAoZGlyZWN0b3J5LnV0ZjgoKSku
ZGF0YSgpKSA9PSAwKTsKKworICAgIHJldHVybiByZXR2YWw7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25z
dCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24mKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtz
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6Omlz
SmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2lu
Z2xlIHByb2Nlc3MgY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVs
aWFibHkgdW5sb2FkIGEKKyAgICAgICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUg
SmF2YSBwbHVnaW4sIG9yIHdlJ2xsIGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAg
ICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAg
IC8vIFNldHRpbmcgdGhlIHdpbmRvdyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBi
YWQgc2Nyb2xsaW5nIHJlcGFpbnQgcHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBw
bHVnLWluLgorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1Jl
Y3RXaGVuU2Nyb2xsaW5nKTsKKyAgICB9Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJ
bmZvKCkKK3sKKyAgICBpZiAoIWxvYWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
TlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0ciBOUF9HZXRNSU1FRGVzY3JpcHRpb247CisgICAg
TlBQX0dldFZhbHVlUHJvY1B0ciBOUFBfR2V0VmFsdWU7CisKKyAgICBnX21vZHVsZV9zeW1ib2wo
bV9tb2R1bGUsICJOUF9HZXRNSU1FRGVzY3JpcHRpb24iLCAodm9pZCoqKSZOUF9HZXRNSU1FRGVz
Y3JpcHRpb24pOworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dldFZhbHVlIiwg
KHZvaWQqKikmTlBQX0dldFZhbHVlKTsKKworICAgIGNvbnN0IGdjaGFyKiB0eXBlcyA9IE5QX0dl
dE1JTUVEZXNjcmlwdGlvbigpOworICAgIGdjaGFyKiogbWltZURlc2NzID0gZ19zdHJzcGxpdCh0
eXBlcywgIjsiLCAtMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IG1pbWVEZXNjc1tpXSAmJiBtaW1l
RGVzY3NbaV1bMF07IGkrKykgeworICAgICAgICBnY2hhcioqIG1pbWVEYXRhID0gZ19zdHJzcGxp
dChtaW1lRGVzY3NbaV0sICI6IiwgMyk7CisKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0g
U3RyaW5nOjpmcm9tVVRGOChtaW1lRGF0YVsyXSk7CisgICAgICAgIGdjaGFyKiogZXh0ZW5zaW9u
cyA9IGdfc3Ryc3BsaXQobWltZURhdGFbMV0sICIsIiwgLTEpOworCisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGV4dFZlY3RvcjsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGV4dGVuc2lvbnNbal07
IGorKykKKyAgICAgICAgICAgIGV4dFZlY3Rvci5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChleHRl
bnNpb25zW2pdKSk7CisKKyAgICAgICAgbV9taW1lVG9FeHRlbnNpb25zLmFkZChtaW1lRGF0YVsw
XSwgZXh0VmVjdG9yKTsKKyAgICAgICAgbV9taW1lVG9EZXNjcmlwdGlvbnMuYWRkKG1pbWVEYXRh
WzBdLCBkZXNjcmlwdGlvbik7CisKKyAgICAgICAgZ19zdHJmcmVldihleHRlbnNpb25zKTsKKyAg
ICAgICAgZ19zdHJmcmVldihtaW1lRGF0YSk7CisgICAgfQorICAgIGdfc3RyZnJlZXYobWltZURl
c2NzKTsKKworICAgIGNoYXIqIGJ1ZmZlciA9IDA7CisgICAgTlBFcnJvciBlcnIgPSBOUFBfR2V0
VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZidWZmZXIpOworICAgIGlmIChlcnIgPT0g
TlBFUlJfTk9fRVJST1IpCisgICAgICAgIG1fbmFtZSA9IGJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9
IDA7CisgICAgZXJyID0gTlBQX0dldFZhbHVlKDAsIE5QUFZwbHVnaW5EZXNjcmlwdGlvblN0cmlu
ZywgJmJ1ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9k
ZXNjcmlwdGlvbiA9IGJ1ZmZlcjsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdp
blBhY2thZ2U6OmxvYWQoKQoreworICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9h
ZENvdW50Kys7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0g
Z19tb2R1bGVfb3BlbigobV9wYXRoLnV0ZjgoKSkuZGF0YSgpLCBHX01PRFVMRV9CSU5EX0xPQ0FM
KTsKKworICAgIGlmICghbV9tb2R1bGUpIHsKKwkgICAgTE9HKFBsdWdpbiwiTW9kdWxlIExvYWQg
RmFpbGVkIDolcywgRXJyb3I6JXNcbiIsIChtX3BhdGgudXRmOCgpKS5kYXRhKCksIGdfbW9kdWxl
X2Vycm9yKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisJfQorCisgICAgbV9pc0xvYWRlZCA9
IHRydWU7CisKKyAgICBOUF9Jbml0aWFsaXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5Q
RXJyb3IgbnBFcnI7CisKKyAgICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9Jbml0aWFs
aXplIiwgKHZvaWQqKikmTlBfSW5pdGlhbGl6ZSk7CisgICAgZ19tb2R1bGVfc3ltYm9sKG1fbW9k
dWxlLCAiTlBfU2h1dGRvd24iLCAodm9pZCoqKSZtX05QUF9TaHV0ZG93bik7CisKKyAgICBpZiAo
IU5QX0luaXRpYWxpemUgfHwgIW1fTlBQX1NodXRkb3duKQorICAgICAgICBnb3RvIGFib3J0Owor
CisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBzaXplb2YobV9wbHVnaW5GdW5jcykpOwor
ICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZihtX3BsdWdpbkZ1bmNzKTsKKworICAgIG1f
YnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJvd3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dz
ZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5PUjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5n
ZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9z
dFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsK
KyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBOUE5fTmV3U3RyZWFtOworICAgIG1fYnJv
d3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAgIG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lz
dHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBO
UE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVhZ2VudCA9IE5QTl9Vc2VyQWdlbnQ7Cisg
ICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5fTWVtQWxsb2M7CisgICAgbV9icm93c2Vy
RnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAgIG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNo
ID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5f
UmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0
VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBvc3R1cmxub3RpZnkgPSBOUE5fUG9zdFVS
TE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAg
ICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9TZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlkYXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFsaWRhdGVSZWdpb247CisgICAgbV9icm93
c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VSZWRyYXc7CisgICAgbV9icm93c2VyRnVu
Y3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52OworICAgIG1fYnJvd3NlckZ1bmNzLmdldEph
dmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1fYnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNl
bmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlOwor
CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlhbnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZh
cmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRzdHJpbmdpZGVudGlmaWVyID0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50
aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyczsKKyAgICBtX2Jyb3dzZXJGdW5jcy5n
ZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1
bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRlbnRpZmllcklzU3RyaW5nOworICAgIG1f
YnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVy
OworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVjdCA9IF9OUE5fQ3JlYXRlT2JqZWN0Owor
ICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OworICAg
IG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7CisgICAg
bV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZva2U7CisgICAgbV9icm93c2VyRnVuY3Mu
aW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVsdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5l
dmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0cHJvcGVydHkg
PSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldHByb3BlcnR5ID0gX05Q
Tl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5f
UmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3MuaGFzcHJvcGVydHkgPSBfTlBOX0hh
c01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNtZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5
OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IF9OUE5fU2V0RXhjZXB0aW9uOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9OUE5fRW51bWVyYXRlOworCisgICAgbnBF
cnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5jcywgJm1fcGx1Z2luRnVuY3MpOworICAg
IGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgZ290byBhYm9ydDsKKworICAg
IG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7CisKK2Fib3J0OgorICAgIHVubG9hZFdp
dGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordW5zaWduZWQgUGx1Z2lu
UGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsK
KyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAorICAgICAgICBtX2xhc3RNb2RpZmllZAor
ICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRf
Y2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFVD
aGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZXF1YWwoY29uc3QgUGx1Z2luUGFja2Fn
ZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKK3sKKyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0
aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blZpZXdHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmll
d0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgor
I2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJr
anNfYmluZGluZy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5oIgorI2luY2x1ZGUgIm5wcnVudGlt
ZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZS5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5o
IgorI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KKyNpbmNsdWRlIDxranMvdmFsdWUuaD4KKworI2lu
Y2x1ZGUgPGdka2NvbmZpZy5oPgorCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyNp
bmNsdWRlICJndGsyeHRiaW4uaCIKKyNpbmNsdWRlIDxnZGsvZ2RreC5oPgorI2VuZGlmCisjaWZk
ZWYgR0RLX1dJTkRPV0lOR19XSU4zMgorI2luY2x1ZGUgPGdkay9nZGt3aW4zMi5oPgorI2VuZGlm
CisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRlcnByZXRlcjsKK3VzaW5n
IEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5nIEtKUzo6SlNWYWx1ZTsK
K3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47CisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit2b2lkIFBsdWdpblZpZXc6OnVwZGF0
ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQoKSB8fCAhbV9pc1dpbmRvd2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwor
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50
KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5kb3dSZWN0OworICAgIElu
dFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93aW5kb3dSZWN0ID0gSW50
UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9u
KCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBSZWN0ID0gd2luZG93Q2xp
cFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVjdC54KCksIC1tX3dpbmRv
d1JlY3QueSgpKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgbV93aW5kb3dS
ZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93
UmVjdC5oZWlnaHQoKSB9OworICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICBndGtfd2lkZ2V0
X3NpemVfYWxsb2NhdGUobV93aW5kb3csICZhbGxvY2F0aW9uKTsKKyNpZiBkZWZpbmVkKEdES19X
SU5ET1dJTkdfWDExKQorICAgICAgICBpZiAoIW1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgICAg
IGd0a194dGJpbl9zZXRfcG9zaXRpb24oR1RLX1hUQklOKG1fd2luZG93KSwgbV93aW5kb3dSZWN0
LngoKSwgbV93aW5kb3dSZWN0LnkoKSk7CisgICAgICAgICAgICBndGtfeHRiaW5fcmVzaXplKG1f
d2luZG93LCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkK
K3sKKyAgICBpZiAobV93aW5kb3cpCisJZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKG1fd2luZG93KTsK
KworICAgIFdpZGdldDo6c2V0Rm9jdXMoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzaG93KCkK
K3sKKyAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisKKyAgICBpZiAobV9hdHRhY2hlZFRvV2luZG93
ICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfc2hvdyhtX3dpbmRvdyk7CisKKyAgICBXaWRnZXQ6
OnNob3coKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBtX2lzVmlzaWJs
ZSA9IGZhbHNlOworCisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKwln
dGtfd2lkZ2V0X2hpZGUobV93aW5kb3cpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0
aGUgIm1pc3NpbmcgcGx1Z2luIiBpbWFnZQorICAgICAgICAvL3BhaW50TWlzc2luZ1BsdWdpbklj
b24oY29udGV4dCwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9p
c1dpbmRvd2VkIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgTlBFdmVudCBucEV2ZW50OworICAgIC8qIE5lZWQgdG8gc3ludGhlc2l6ZSBYZXZl
bnRzIGhlcmUgKi8KKworICAgIG1fbnBXaW5kb3cudHlwZSA9IE5QV2luZG93VHlwZURyYXdhYmxl
OworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKKworICAgIGlmIChtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQpIHsKKyAgICAgICAgS0pTOjpKU0xvY2s6OkRyb3BB
bGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5l
dmVudChtX2luc3RhbmNlLCAmbnBFdmVudCk7CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dl
ZCkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBpZiAo
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNMb2NrOjpE
cm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIE5Q
RXZlbnQgbnBFdmVudDsKKyAgICAKKyAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBhbiBYRXZlbnQg
dG8gcGFzcyB0aHJvdWdoICovCisKKyAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzIGRyb3BB
bGxMb2NrczsKKyAgICBpZiAoIW1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5ldmVudChtX2luc3Rh
bmNlLCAmbnBFdmVudCkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7
CisgICAgTlBFdmVudCBucEV2ZW50OworCisgICAgaWYgKCFtX2lzV2luZG93ZWQpCisgICAgICBy
ZXR1cm47CisKKyAgICAvKiBGSVhNRTogU3ludGhlc2l6ZSBhbiBYRXZlbnQgdG8gcGFzcyB0aHJv
dWdoICovCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgp
KS0+Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludChldmVudC0+cGFnZVgoKSwgZXZlbnQtPnBhZ2VZ
KCkpKTsKKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAg
IGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2ZW50
KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBh
cmVudChwYXJlbnQpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgaW5pdCgpOworICAgIGVs
c2UgeworICAgICAgICBpZiAoIW1fd2luZG93KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBv
aW50IHAgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5k
b3cocmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25w
V2luZG93LnkgPSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7
CisgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7Cisg
ICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAobV9wbHVnaW4t
PnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJvcEFs
bExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAg
ICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9u
cFdpbmRvdyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworCisgICAgICAgIGlm
ICghbV9pc1dpbmRvd2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVCht
X3dpbmRvdyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmF0dGFjaFRvV2luZG93KCkK
K3sKKyAgICBpZiAobV9hdHRhY2hlZFRvV2luZG93KQorCXJldHVybjsKKworICAgIG1fYXR0YWNo
ZWRUb1dpbmRvdyA9IHRydWU7CisgICAgaWYgKG1faXNWaXNpYmxlICYmIG1fd2luZG93KQorCWd0
a193aWRnZXRfc2hvdyhtX3dpbmRvdyk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6ZGV0YWNoRnJv
bVdpbmRvdygpCit7CisgICAgaWYgKCFtX2F0dGFjaGVkVG9XaW5kb3cpCisJcmV0dXJuOworCisg
ICAgaWYgKG1faXNWaXNpYmxlICYmIG1fd2luZG93KQorCWd0a193aWRnZXRfaGlkZShtX3dpbmRv
dyk7CisgICAgbV9hdHRhY2hlZFRvV2luZG93ID0gZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6c3RvcCgpCit7CisgICAgaWYgKCFtX2lzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7Cisg
ICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1z
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRv
ciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQp
LT5zdG9wKCk7CisgICAgICAgIGRpc2Nvbm5lY3RTdHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0K
KworICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0eSgpKTsKKworICAgIG1faXNTdGFydGVkID0g
ZmFsc2U7CisgICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisKKyAg
ICAvLyBDbGVhciB0aGUgd2luZG93CisgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAwOworI2lmZGVm
IFhQX1VOSVgKKyAgICBpZiAobV9pc1dpbmRvd2VkICYmIG1fbnBXaW5kb3cud3NfaW5mbykgCisg
ICAgICAgICAgIGRlbGV0ZSBtX25wV2luZG93LndzX2luZm87CisgICAgbV9ucFdpbmRvdy53c19p
bmZvID0gMDsKKyNlbmRpZgorICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2lu
ZG93ICYmICFtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVs
bFdpbmRvd0hhbmRsZU9uRGVzdHJveSkpIHsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVl
KTsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNl
LCAmbV9ucFdpbmRvdyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIH0K
KworICAgIC8vIERlc3Ryb3kgdGhlIHBsdWdpbgorICAgIHsKKyAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbih0cnVlKTsKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9p
bnN0YW5jZSwgMCk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIH0KKwor
ICAgIG1faW5zdGFuY2UtPnBkYXRhID0gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIE1vemls
bGFVc2VyQWdlbnQgPSAiTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7IHJ2
OjEuOC4xKSBHZWNrby8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK2NvbnN0IGNoYXIqIFBsdWdp
blZpZXc6OnVzZXJBZ2VudCgpCit7CisgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVybiBNb3pp
bGxhVXNlckFnZW50OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBt
X3VzZXJBZ2VudCA9IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0
ZjgoKTsKKworICAgIHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK05QRXJyb3IgUGx1
Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIg
bGVuLCBjb25zdCBjaGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsK
KworICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxl
bmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKworICAgIC8vIEdldCBmaWxlIGluZm8KKyAg
ICBpZiAoIWdfZmlsZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3Qp
KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgLy9GSVhNRSAtIHJlYWQgdGhlIGZp
bGUgZGF0YSBpbnRvIGJ1ZmZlcgorICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5h
bWUudXRmOCgpKS5kYXRhKCksICJyIik7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUgPT0gMCkK
KyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgLy9idWZmZXIucmVz
aXplKCk7CisKKyAgICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwg
ZmlsZUhhbmRsZSk7CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNS
ZWFkIDw9IDApCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCXJldHVy
biBOUEVSUl9OT19FUlJPUjsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5W
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkg
eworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAgIGNhc2UgTlBOVnh0QXBw
Q29udGV4dDogeworICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAg
ICAgICAgKih2b2lkICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdU
S19YVEJJTihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAg
ICAgICAgY2FzZSBOUE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAg
ICooKHVpbnQzMiAqKXZhbHVlKSA9IDI7CisjZWxzZQorICAgICAgICAgICAgKigodWludDMyICop
dmFsdWUpID0gMDsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYg
ZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVl
KSA9IHRydWU7CisjZWxzZQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gZmFsc2U7
CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNhc2UgTlBOVldpbmRv
d05QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5Q
RVJSX0dFTkVSSUNfRVJST1I7CisKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRP
YmplY3QgPSBtX3BhcmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAg
ICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2Ny
aWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50
aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAg
ICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2Ny
aXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJS
T1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6
IHsKKwkgICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJ
Q19FUlJPUjsKKworICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7
CisKKyAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBt
X2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpKQorICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19j
YXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAg
ICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBk
ZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25w
cnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAg
ICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAg
ICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdp
blNjcmlwdE9iamVjdDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisjZW5kaWYKKworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAg
ICAgICAgICAgdm9pZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworI2lm
ZGVmIEdES19XSU5ET1dJTkdfWDExCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IEdES19XSU5E
T1dfWFdJTkRPVyhjb250YWluaW5nV2luZG93KCktPndpbmRvdyk7CisjZW5kaWYKKyNpZmRlZiBH
REtfV0lORE9XSU5HX1dJTjMyCisgICAgICAgICAgICAqKChIV05EICopdykgPSBHREtfV0lORE9X
SU5HX0hXTkQoY29udGFpbmluZ1dpbmRvdygpLT53aW5kb3cpOworI2VuZGlmCisgICAgICAgICAg
ICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0
KSB7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVm
dCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0
KHIpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBpZiAobV9p
c1dpbmRvd2VkKQorICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV93aW5kb3cpOworICAg
IGVsc2UKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KGNvbnRhaW5pbmdXaW5kb3coKSk7
Cit9CisKK1BsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBk
ZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJh
bU5hbWVzLCBtX3BhcmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVz
LCBtX3BhcmFtQ291bnQpOworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVj
dHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCisgICAgICAgIG1f
cGx1Z2luLT51bmxvYWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBp
ZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFs
aXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0
YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9
IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0
YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKQorICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+Z2V0dmFsdWUobV9pbnN0YW5jZSwgTlBQVnBsdWdp
bk5lZWRzWEVtYmVkLCAmbV9uZWVkc1hFbWJlZCk7CisKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJ
TkdfWDExKQorICAgIGlmIChtX25lZWRzWEVtYmVkKSB7CisgICAgICAgIG1fd2luZG93ID0gZ3Rr
X3NvY2tldF9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUiht
X3BhcmVudEZyYW1lLT52aWV3KCktPmNvbnRhaW5pbmdXaW5kb3coKSksIG1fd2luZG93KTsKKyAg
ICAgICAgc2V0R3RrV2lkZ2V0KG1fd2luZG93KTsKKyAgICB9IGVsc2UgaWYgKG1faXNXaW5kb3dl
ZCkgeworICAgICAgICBtX3dpbmRvdyA9IGd0a194dGJpbl9uZXcobV9wYXJlbnRGcmFtZS0+dmll
dygpLT5jb250YWluaW5nV2luZG93KCktPndpbmRvdywgMCk7CisJc2V0R3RrV2lkZ2V0KG1fd2lu
ZG93KTsKKyAgICB9CisjZWxzZQorICAgIG1fd2luZG93ID0gZ3RrX3NvY2tldF9uZXcoKTsKKyAg
ICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+
Y29udGFpbmluZ1dpbmRvdygpKSwgbV93aW5kb3cpOworICAgIHNldEd0a1dpZGdldChtX3dpbmRv
dyk7CisjZW5kaWYKKyAgICBzaG93ICgpOworCisgICAgaWYgKG1faXNXaW5kb3dlZCkgeworI2lm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisJTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCAq
d3MgPSBuZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworCisJd3MtPnR5cGUgPSAwOwor
CisJaWYgKG1fbmVlZHNYRW1iZWQpIHsKKwkgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hE
SVNQTEFZKG1fd2luZG93LT53aW5kb3cpOworCSAgICB3cy0+dmlzdWFsID0gR0RLX1ZJU1VBTF9Y
VklTVUFMKGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRShtX3dpbmRvdy0+d2lu
ZG93KSkpOworCSAgICB3cy0+ZGVwdGggPSBnZGtfZHJhd2FibGVfZ2V0X3Zpc3VhbChHREtfRFJB
V0FCTEUobV93aW5kb3ctPndpbmRvdykpLT5kZXB0aDsKKwkgICAgd3MtPmNvbG9ybWFwID0gR0RL
X0NPTE9STUFQX1hDT0xPUk1BUChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19EUkFXQUJM
RShtX3dpbmRvdy0+d2luZG93KSkpOworCX0gZWxzZSB7CisJICAgIHdzLT5kaXNwbGF5ID0gR1RL
X1hUQklOKG1fd2luZG93KS0+eHRkaXNwbGF5OworCSAgICB3cy0+dmlzdWFsID0gR1RLX1hUQklO
KG1fd2luZG93KS0+eHRjbGllbnQueHR2aXN1YWw7CisJICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJ
TihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0ZGVwdGg7CisJICAgIHdzLT5jb2xvcm1hcCA9IEdUS19Y
VEJJTihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0Y29sb3JtYXA7CisKKwkgICAgWEZsdXNoICh3cy0+
ZGlzcGxheSk7CisJfQorCisJbV9ucFdpbmRvdy53c19pbmZvID0gd3M7CisjZW5kaWYKKyAgICB9
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZVdpbmRvdzsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorCWlmICht
X25lZWRzWEVtYmVkKQorCSAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9X
X1hXSU5ET1cobV93aW5kb3ctPndpbmRvdyk7CisJZWxzZQorCSAgICBtX25wV2luZG93LndpbmRv
dyA9ICh2b2lkKilHVEtfWFRCSU4obV93aW5kb3cpLT54dHdpbmRvdzsKKyNlbGlmIGRlZmluZWQo
R0RLX1dJTkRPV0lOR19XSU4zMikKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cgPSAodm9pZCop
R0RLX1dJTkRPV19IV05EKG1fd2luZG93LT53aW5kb3cpOworI2VuZGlmCisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlRHJhd2FibGU7CisgICAgICAg
IG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICB9CisKKyAgICBpZiAoIShtX3BsdWdpbi0+cXVp
cmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEZWZlckZpcnN0U2V0V2luZG93Q2FsbCkpKQorICAg
ICAgICBzZXROUFdpbmRvd1JlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIG1fc3RhdHVzID0g
UGx1Z2luU3RhdHVzTG9hZGVkU3VjY2Vzc2Z1bGx5OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9ndGsveGVt
YmVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qIC0qLSBNb2RlOiBDKys7IHRh
Yi13aWR0aDogMjsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0K
KyAqIHZpbTpleHBhbmR0YWI6c2hpZnR3aWR0aD0yOnRhYnN0b3A9MjogKi8KKyAKKy8qICoqKioq
IEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9M
R1BMIDIuMQorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8g
dGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2Ui
KTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisg
KiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisg
KiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAor
ICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBU
aGUgT3JpZ2luYWwgQ29kZSBpcyB0aGUgWEVNQkVEIERlY2xhcmF0aW9uLgorICoKKyAqIFRoZSBJ
bml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworICogU3VuIE1pY3Jvc3lz
dGVtcywgSW5jLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIg
YXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorICogaW4gd2hpY2gg
Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxl
IGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2Yg
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0
aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisgKiB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwg
aW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAqIGFuZCBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRl
CisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBM
LCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoq
KioqICovCisKKy8qIFhFTUJFRCBtZXNzYWdlcyAqLworI2RlZmluZSBYRU1CRURfRU1CRURERURf
Tk9USUZZICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX1dJTkRPV19BQ1RJVkFURSAgICAgICAg
ICAxCisjZGVmaW5lIFhFTUJFRF9XSU5ET1dfREVBQ1RJVkFURSAgICAgICAgMgorI2RlZmluZSBY
RU1CRURfUkVRVUVTVF9GT0NVUyAgICAgICAgICAgIDMKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0lO
ICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFhFTUJFRF9GT0NVU19PVVQgICAgICAgICAgICAg
ICAgNQorI2RlZmluZSBYRU1CRURfRk9DVVNfTkVYVCAgICAgICAgICAgICAgIDYKKyNkZWZpbmUg
WEVNQkVEX0ZPQ1VTX1BSRVYgICAgICAgICAgICAgICA3CisjZGVmaW5lIFhFTUJFRF9HUkFCX0tF
WSAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBYRU1CRURfVU5HUkFCX0tFWSAgICAgICAgICAg
ICAgIDkKKyNkZWZpbmUgWEVNQkVEX01PREFMSVRZX09OICAgICAgICAgICAgICAxMAorI2RlZmlu
ZSBYRU1CRURfTU9EQUxJVFlfT0ZGICAgICAgICAgICAgIDExCisKKy8qIE5vbiBzdGFuZGFyZCBt
ZXNzYWdlcyovCisjZGVmaW5lIFhFTUJFRF9HVEtfR1JBQl9LRVkgICAgICAgICAgICAgMTA4IAor
I2RlZmluZSBYRU1CRURfR1RLX1VOR1JBQl9LRVkgICAgICAgICAgIDEwOQorCisvKiBEZXRhaWxz
IGZvciAgWEVNQkVEX0ZPQ1VTX0lOOiAqLworI2RlZmluZSBYRU1CRURfRk9DVVNfQ1VSUkVOVCAg
ICAgICAgICAgIDAKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX0ZJUlNUICAgICAgICAgICAgICAxCisj
ZGVmaW5lIFhFTUJFRF9GT0NVU19MQVNUICAgICAgICAgICAgICAgMgorCisvKiBGbGFncyBmb3Ig
X1hFTUJFRF9JTkZPICovCisjZGVmaW5lIFhFTUJFRF9NQVBQRUQgICAgICAgICAgICAgICAgICAg
KDEgPDwgMCkKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lucy9ndGsveGVtYmVk
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAJKHJldmlzaW9uIDMyNDg5KQorKysgV2ViQ29yZS9w
bHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDEwICsyMSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKIAorI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogI2luY2x1
ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgPHF3ZWJw
YWdlLmg+CiAjaW5jbHVkZSA8cXdlYnBsdWdpbmZhY3RvcnkuaD4KKyNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTMyLDM2ICszOCw3MSBAQCB2b2lkIFBsdWdpbkRhdGE6OmluaXRQ
bHVnaW5zKCkKICNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAgICAgUVdlYlBhZ2UqIHdlYlBh
Z2UgPSBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRRdCo+KG1fcGFnZS0+Y2hyb21lKCktPmNsaWVu
dCgpKS0+bV93ZWJQYWdlOwogICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0b3J5ID0gd2ViUGFn
ZS0+cGx1Z2luRmFjdG9yeSgpOwotICAgIGlmICghZmFjdG9yeSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChmYWN0b3J5KSB7CiAKLSAgICBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2lu
PiBwbHVnaW5zID0gZmFjdG9yeS0+cGx1Z2lucygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cGx1Z2lucy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgUVdlYlBsdWdpbkZhY3Rvcnk6
OlBsdWdpbiYgcGx1Z2luID0gcGx1Z2lucy5hdChpKTsKKyAgICAgICAgUUxpc3Q8UVdlYlBsdWdp
bkZhY3Rvcnk6OlBsdWdpbj4gcXBsdWdpbnMgPSBmYWN0b3J5LT5wbHVnaW5zKCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcXBsdWdpbnMuY291bnQoKTsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luJiBxcGx1Z2luID0gcXBsdWdpbnMuYXQo
aSk7CiAKLSAgICAgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOwotICAgICAg
ICBpbmZvLT5uYW1lID0gcGx1Z2luLm5hbWU7Ci0gICAgICAgIGluZm8tPmRlc2MgPSBwbHVnaW4u
ZGVzY3JpcHRpb247CisgICAgICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbklu
Zm87CisgICAgICAgICAgICBpbmZvLT5uYW1lID0gcXBsdWdpbi5uYW1lOworICAgICAgICAgICAg
aW5mby0+ZGVzYyA9IHFwbHVnaW4uZGVzY3JpcHRpb247CisKKyAgICAgICAgICAgIGZvciAoaW50
IGogPSAwOyBqIDwgcXBsdWdpbi5taW1lVHlwZXMuY291bnQoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgUVdlYlBsdWdpbkZhY3Rvcnk6Ok1pbWVUeXBlJiBtaW1lVHlwZSA9IHFwbHVn
aW4ubWltZVR5cGVzLmF0KGopOworCisgICAgICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWlt
ZUluZm8gPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgICAgICBtaW1lSW5mby0+dHlw
ZSA9IG1pbWVUeXBlLm5hbWU7CisgICAgICAgICAgICAgICAgbWltZUluZm8tPmRlc2MgPSBtaW1l
VHlwZS5kZXNjcmlwdGlvbjsKKyAgICAgICAgICAgICAgICBtaW1lSW5mby0+c3VmZml4ZXMgPSBt
aW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5qb2luKCI7ICIpOworCisgICAgICAgICAgICAgICAgaW5m
by0+bWltZXMuYXBwZW5kKG1pbWVJbmZvKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IHBsdWdpbi5taW1lVHlwZXMuY291bnQoKTsgKytqKSB7Ci0gICAgICAg
ICAgICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6TWltZVR5cGUmIG1pbWVUeXBlID0gcGx1Z2lu
Lm1pbWVUeXBlcy5hdChqKTsKKyAgICAgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKIAotICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWlt
ZUluZm8gPSBuZXcgTWltZUNsYXNzSW5mbzsKLSAgICAgICAgICAgIG1pbWVJbmZvLT50eXBlID0g
bWltZVR5cGUubmFtZTsKLSAgICAgICAgICAgIG1pbWVJbmZvLT5kZXNjID0gbWltZVR5cGUuZGVz
Y3JpcHRpb247Ci0gICAgICAgICAgICBtaW1lSW5mby0+c3VmZml4ZXMgPSBtaW1lVHlwZS5maWxl
RXh0ZW5zaW9ucy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOworICAgIFBsdWdpbkRhdGFiYXNl
ICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgY29uc3QgVmVj
dG9yPFBsdWdpblBhY2thZ2UqPiAmcGx1Z2lucyA9IGRiLT5wbHVnaW5zKCk7CiAKLSAgICAgICAg
ICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lSW5mbyk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIGlu
Zm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBs
dWdpbnNbaV07CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAg
ICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8tPmRlc2Mg
PSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0
aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25z
KCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1p
bWVDbGFzc0luZm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisKKyAg
ICAgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLT5kZXNj
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNp
b25zKCkuZ2V0KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4g
MCkKKyAgICAgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAg
ICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CiAgICAgfQotI2Vu
ZGlmCiB9CiAKIHZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCiB7Ci0gICAgLy8gbm90aGluZyB0
byBkbworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKIH0KIAogfTsKSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9xdC9QbHVnaW5EYXRhYmFzZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luRGF0YWJhc2VRdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luRGF0YWJhc2VRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtvcyBDb21wdXRpbmcgU2Vydmlj
ZXMgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xs
YWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKworI2luY2x1ZGUgPFFEaXI+CisjaW5j
bHVkZSA8UUZpbGVJbmZvPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIFBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMoSGFz
aFNldDxTdHJpbmc+JiBwYXRocykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgYSBjYXNlIGluc2Vuc2l0aXZlIHNldC4KKyAgICBIYXNoU2V0PFN0cmluZz4gdW5pcXVlRmls
ZW5hbWVzOworCisgICAgUVN0cmluZ0xpc3QgbmFtZUZpbHRlcnM7CisgICAgbmFtZUZpbHRlcnMg
PDwgIiouc28iOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Bs
dWdpbkRpcmVjdG9yaWVzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9wbHVnaW5EaXJlY3Rvcmllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgUURpciBkaXIgPSBRRGlyKFFTdHJpbmcoKml0KSk7CisgICAgICAgIGlmICgh
ZGlyLmV4aXN0cygpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUUZpbGVJbmZv
TGlzdCBmbCA9IGRpci5lbnRyeUluZm9MaXN0KG5hbWVGaWx0ZXJzLCBRRGlyOjpGaWxlcyk7Cisg
ICAgICAgIGZvcmVhY2ggKGNvbnN0IFFGaWxlSW5mbyBmaSwgZmwpIHsKKyAgICAgICAgICAgIFN0
cmluZyBmaWxlbmFtZSA9IFN0cmluZyhmaS5hYnNvbHV0ZUZpbGVQYXRoKCkpOworICAgICAgICAg
ICAgcGF0aHMuYWRkKGZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZv
aWQgYWRkUXRXZWJLaXRQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7
CisgICAgUVN0cmluZyBxdFBhdGgoZ2V0ZW52KCJRVFdFQktJVF9QTFVHSU5fUEFUSCIpKTsKKyAg
ICBRU3RyaW5nTGlzdCBxdFBhdGhzID0gcXRQYXRoLnNwbGl0KCI6IiwgUVN0cmluZzo6U2tpcEVt
cHR5UGFydHMpOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBxdFBhdGhzLnNpemUoKTsgaSsrKSB7
CisgICAgCXBhdGhzLmFwcGVuZChxdFBhdGhzLmF0KGkpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7
CisgICAgUURpciBwYXRoID0gUURpcjo6aG9tZSgpOyBwYXRoLmNkKCIubW96aWxsYS9wbHVnaW5z
Iik7IAorICAgIHBhdGhzLmFwcGVuZChwYXRoLmFic29sdXRlUGF0aCgpKTsKKyAgICBwYXRocy5h
cHBlbmQoIi91c3IvbGliL2Jyb3dzZXIvcGx1Z2lucyIpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vz
ci9sb2NhbC9saWIvbW96aWxsYS9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xp
Yi9tb3ppbGxhL3BsdWdpbnMiKTsKKyAgICAKKyAgICBRU3RyaW5nIG1velBhdGgoZ2V0ZW52KCJN
T1pfUExVR0lOX1BBVEgiKSk7CisgICAgUVN0cmluZ0xpc3QgbW96UGF0aHMgPSBtb3pQYXRoLnNw
bGl0KCI6IiwgUVN0cmluZzo6U2tpcEVtcHR5UGFydHMpOworICAgIGZvcihpbnQgaSA9IDA7IGkg
PCBtb3pQYXRocy5zaXplKCk7IGkrKykgeworICAgIAlwYXRocy5hcHBlbmQobW96UGF0aHMuYXQo
aSkpOworICAgIH0KK30KKworVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQ
bHVnaW5EaXJlY3RvcmllcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7CisKKyAgICBh
ZGRRdFdlYktpdFBsdWdpbkRpcmVjdG9yaWVzKHBhdGhzKTsKKyAgICBhZGRNb3ppbGxhUGx1Z2lu
RGlyZWN0b3JpZXMocGF0aHMpOworICAgIAorICAgIHJldHVybiBwYXRoczsKK30KKworYm9vbCBQ
bHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBw
YXRoKQoreworCVFEaXIgcHJlZlBhdGggPSBRRGlyOjpob21lKCk7CisJcHJlZlBhdGguY2QoIi5t
b3ppbGxhL3BsdWdpbnMiKTsKKyAgICByZXR1cm4gKHBhdGggPT0gcHJlZlBhdGguYWJzb2x1dGVQ
YXRoKCkpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luRGF0YWJhc2VRdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblBhY2thZ2VRdC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgUGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpCit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1p
bWVUeXBlKSkgeworICAgICAgICAvLyBCZWNhdXNlIGEgc2luZ2xlIHByb2Nlc3MgY2Fubm90IGNy
ZWF0ZSBtdWx0aXBsZSBWTXMsIGFuZCB3ZSBjYW5ub3QgcmVsaWFibHkgdW5sb2FkIGEKKyAgICAg
ICAgLy8gSmF2YSBWTSwgd2UgY2Fubm90IHVubG9hZCB0aGUgSmF2YSBwbHVnaW4sIG9yIHdlJ2xs
IGxvc2UgcmVmZXJlbmNlIHRvIG91ciBvbmx5IFZNCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVn
aW5RdWlya0RvbnRVbmxvYWRQbHVnaW4pOworCisgICAgICAgIC8vIFNldHRpbmcgdGhlIHdpbmRv
dyByZWdpb24gdG8gYW4gZW1wdHkgcmVnaW9uIGNhdXNlcyBiYWQgc2Nyb2xsaW5nIHJlcGFpbnQg
cHJvYmxlbXMKKyAgICAgICAgLy8gd2l0aCB0aGUgSmF2YSBwbHVnLWluLgorICAgICAgICBtX3F1
aXJrcy5hZGQoUGx1Z2luUXVpcmtEb250Q2xpcFRvWmVyb1JlY3RXaGVuU2Nyb2xsaW5nKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKG1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1m
bGFzaCIpIHsKKyAgICAgICAgLy8gVGhlIGZsYXNoIHBsdWdpbiBvbmx5IHJlcXVlc3RzIHdpbmRv
d2xlc3MgcGx1Z2lucyBpZiB3ZSByZXR1cm4gYSBtb3ppbGxhIHVzZXIgYWdlbnQKKyAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KTsKKyAgICAgICAg
bV9xdWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVJbnZhbGlkYXRlKTsKKyAgICAgICAgbV9x
dWlya3MuYWRkKFBsdWdpblF1aXJrVGhyb3R0bGVXTVVzZXJQbHVzT25lTWVzc2FnZXMpOworICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtGbGFzaFVSTE5vdGlmeUJ1Zyk7CisgICAgfQor
Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKCkKK3sKKyAgICBpZiAoIWxvYWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBndiA9
IChOUFBfR2V0VmFsdWVQcm9jUHRyKW1fbW9kdWxlLT5yZXNvbHZlKCJOUF9HZXRWYWx1ZSIpOwor
ICAgIHR5cGVkZWYgY2hhciAqKCpOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0cikoKTsKKyAg
ICBOUFBfR2V0TUlNRURlc2NyaXB0aW9uUHJvY1B0ciBnbSA9CisgICAgCShOUFBfR2V0TUlNRURl
c2NyaXB0aW9uUHJvY1B0ciltX21vZHVsZS0+cmVzb2x2ZSgiTlBfR2V0TUlNRURlc2NyaXB0aW9u
Iik7CisgICAgaWYgKCFnbSB8fCAhZ3YpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBjaGFyICpidWYgPSAwOworICAgIE5QRXJyb3IgZXJyID0gZ3YoMCwgTlBQVnBsdWdpbk5h
bWVTdHJpbmcsICh2b2lkICopJmJ1Zik7CisgICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1fbmFtZSA9IGJ1ZjsKKyAgICBl
cnIgPSBndigwLCBOUFBWcGx1Z2luRGVzY3JpcHRpb25TdHJpbmcsICh2b2lkICopJmJ1Zik7Cisg
ICAgaWYgKGVyciAhPSBOUEVSUl9OT19FUlJPUikgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIG1fZGVzY3JpcHRpb24gPSBidWY7CisKKyAgICBTdHJpbmcgcyA9IGdtKCk7Cisg
ICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgcy5zcGxpdChVQ2hhcignOycpLCBmYWxzZSwg
dHlwZXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbWltZTsKKyAgICAgICAgdHlwZXNbaV0uc3BsaXQoVUNoYXIo
JzonKSwgZmFsc2UsIG1pbWUpOyAKKyAgICAgICAgaWYgKG1pbWUuc2l6ZSgpID4gMCkgeworICAg
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0czsKKyAgICAgICAgICAgIG1pbWVbMF0uc3BsaXQo
VUNoYXIoJywnKSwgZmFsc2UsIGV4dHMpOworICAgICAgICAgICAgbV9taW1lVG9FeHRlbnNpb25z
LmFkZChtaW1lWzBdLCBleHRzKTsKKyAgICAgICAgICAgIGlmIChtaW1lLnNpemUoKSA+IDEpIHsK
KyAgICAgICAgICAgICAgICBtX21pbWVUb0Rlc2NyaXB0aW9ucy5hZGQobWltZVswXSwgbWltZVsy
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpsb2FkKCkKK3sKKyAgICBpZiAobV9pc0xvYWRlZCkg
eworICAgICAgICBtX2xvYWRDb3VudCsrOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBtX21vZHVsZSA9IG5ldyBRTGlicmFyeSgoUVN0cmluZyltX3BhdGgpOworICAgIGlmICgh
bV9tb2R1bGUtPmxvYWQoKSkgeworICAgIAlMT0coUGx1Z2luLCAiJXMgbm90IGxvYWRlZCIsIG1f
cGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IG1faXNMb2FkZWQgPSB0cnVlOworCisgICAgTlBfSW5pdGlhbGl6ZUZ1bmNQdHIgTlBfSW5pdGlh
bGl6ZTsKKyAgICBOUEVycm9yIG5wRXJyOworCisgICAgTlBfSW5pdGlhbGl6ZSA9IChOUF9Jbml0
aWFsaXplRnVuY1B0ciltX21vZHVsZS0+cmVzb2x2ZSgiTlBfSW5pdGlhbGl6ZSIpOworICAgIG1f
TlBQX1NodXRkb3duID0gKE5QUF9TaHV0ZG93blByb2NQdHIpbV9tb2R1bGUtPnJlc29sdmUoIk5Q
X1NodXRkb3duIik7CisKKyAgICBpZiAoIU5QX0luaXRpYWxpemUgfHwgIW1fTlBQX1NodXRkb3du
KQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbWVtc2V0KCZtX3BsdWdpbkZ1bmNzLCAwLCBz
aXplb2YobV9wbHVnaW5GdW5jcykpOworICAgIG1fcGx1Z2luRnVuY3Muc2l6ZSA9IHNpemVvZiht
X3BsdWdpbkZ1bmNzKTsKKworICAgIG1fYnJvd3NlckZ1bmNzLnNpemUgPSBzaXplb2YgKG1fYnJv
d3NlckZ1bmNzKTsKKyAgICBtX2Jyb3dzZXJGdW5jcy52ZXJzaW9uID0gTlBfVkVSU0lPTl9NSU5P
UjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR1cmwgPSBOUE5fR2V0VVJMOworICAgIG1fYnJvd3Nl
ckZ1bmNzLnBvc3R1cmwgPSBOUE5fUG9zdFVSTDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZXF1ZXN0
cmVhZCA9IE5QTl9SZXF1ZXN0UmVhZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5uZXdzdHJlYW0gPSBO
UE5fTmV3U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLndyaXRlID0gTlBOX1dyaXRlOworICAg
IG1fYnJvd3NlckZ1bmNzLmRlc3Ryb3lzdHJlYW0gPSBOUE5fRGVzdHJveVN0cmVhbTsKKyAgICBt
X2Jyb3dzZXJGdW5jcy5zdGF0dXMgPSBOUE5fU3RhdHVzOworICAgIG1fYnJvd3NlckZ1bmNzLnVh
Z2VudCA9IE5QTl9Vc2VyQWdlbnQ7CisgICAgbV9icm93c2VyRnVuY3MubWVtYWxsb2MgPSBOUE5f
TWVtQWxsb2M7CisgICAgbV9icm93c2VyRnVuY3MubWVtZnJlZSA9IE5QTl9NZW1GcmVlOworICAg
IG1fYnJvd3NlckZ1bmNzLm1lbWZsdXNoID0gTlBOX01lbUZsdXNoOworICAgIG1fYnJvd3NlckZ1
bmNzLnJlbG9hZHBsdWdpbnMgPSBOUE5fUmVsb2FkUGx1Z2luczsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5nZXR1cmxub3RpZnkgPSBOUE5fR2V0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLnBv
c3R1cmxub3RpZnkgPSBOUE5fUG9zdFVSTE5vdGlmeTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXR2
YWx1ZSA9IE5QTl9HZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5zZXR2YWx1ZSA9IE5QTl9T
ZXRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVjdCA9IE5QTl9JbnZhbGlk
YXRlUmVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZhbGlkYXRlcmVnaW9uID0gTlBOX0ludmFs
aWRhdGVSZWdpb247CisgICAgbV9icm93c2VyRnVuY3MuZm9yY2VyZWRyYXcgPSBOUE5fRm9yY2VS
ZWRyYXc7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YUVudiA9IE5QTl9HZXRKYXZhRW52Owor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldEphdmFQZWVyID0gTlBOX0dldEphdmFQZWVyOworICAgIG1f
YnJvd3NlckZ1bmNzLnB1c2hwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUHVzaFBvcHVwc0VuYWJs
ZWRTdGF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5f
UG9wUG9wdXBzRW5hYmxlZFN0YXRlOworCisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZXZhcmlh
bnR2YWx1ZSA9IF9OUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5n
ZXRzdHJpbmdpZGVudGlmaWVyID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyOworICAgIG1fYnJv
d3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXJzID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
czsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRpbnRpZGVudGlmaWVyID0gX05QTl9HZXRJbnRJZGVu
dGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9OUE5fSWRl
bnRpZmllcklzU3RyaW5nOworICAgIG1fYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9
IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgIG1fYnJvd3NlckZ1bmNzLmNyZWF0ZW9iamVj
dCA9IF9OUE5fQ3JlYXRlT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9
IF9OUE5fUmV0YWluT2JqZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBf
TlBOX1JlbGVhc2VPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlID0gX05QTl9JbnZv
a2U7CisgICAgbV9icm93c2VyRnVuY3MuaW52b2tlRGVmYXVsdCA9IF9OUE5fSW52b2tlRGVmYXVs
dDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5ldmFsdWF0ZSA9IF9OUE5fRXZhbHVhdGU7CisgICAgbV9i
cm93c2VyRnVuY3MuZ2V0cHJvcGVydHkgPSBfTlBOX0dldFByb3BlcnR5OworICAgIG1fYnJvd3Nl
ckZ1bmNzLnNldHByb3BlcnR5ID0gX05QTl9TZXRQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVu
Y3MuaGFzcHJvcGVydHkgPSBfTlBOX0hhc01ldGhvZDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNt
ZXRob2QgPSBfTlBOX0hhc1Byb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlv
biA9IF9OUE5fU2V0RXhjZXB0aW9uOworICAgIG1fYnJvd3NlckZ1bmNzLmVudW1lcmF0ZSA9IF9O
UE5fRW51bWVyYXRlOworCisgICAgbnBFcnIgPSBOUF9Jbml0aWFsaXplKCZtX2Jyb3dzZXJGdW5j
cywgJm1fcGx1Z2luRnVuY3MpOworICAgIGlmIChucEVyciAhPSBOUEVSUl9OT19FUlJPUikKKyAg
ICAgICAgZ290byBhYm9ydDsKKworICAgIG1fbG9hZENvdW50Kys7CisgICAgcmV0dXJuIHRydWU7
CisKK2Fib3J0OgorICAgIHVubG9hZFdpdGhvdXRTaHV0ZG93bigpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordW5zaWduZWQgUGx1Z2luUGFja2FnZTo6aGFzaCgpIGNvbnN0Cit7IAorICAgIHVu
c2lnbmVkIGhhc2hDb2Rlc1syXSA9IHsKKyAgICAgICAgbV9wYXRoLmltcGwoKS0+aGFzaCgpLAor
ICAgICAgICBtX2xhc3RNb2RpZmllZAorICAgIH07CisKKyAgICByZXR1cm4gU3RyaW5nSW1wbDo6
Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIDIgKiBzaXpl
b2YodW5zaWduZWQpIC8gc2l6ZW9mKFVDaGFyKSk7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6
ZXF1YWwoY29uc3QgUGx1Z2luUGFja2FnZSYgYSwgY29uc3QgUGx1Z2luUGFja2FnZSYgYikKK3sK
KyAgICByZXR1cm4gYS5tX2Rlc2NyaXB0aW9uID09IGIubV9kZXNjcmlwdGlvbjsKK30KKworaW50
IFBsdWdpblBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbihjb25zdCBQbGF0Zm9ybU1vZHVsZVZl
cnNpb24mIGNvbXBhcmVWZXJzaW9uKSBjb25zdAoreworICAgIC8vIHJldHVybiAtMSwgMCwgb3Ig
MSBpZiBwbHVnLWluIHZlcnNpb24gaXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0
aGFuCisgICAgLy8gdGhlIHBhc3NlZCB2ZXJzaW9uCisgICAgaWYgKG1fbW9kdWxlVmVyc2lvbiAh
PSBjb21wYXJlVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIG1fbW9kdWxlVmVyc2lvbiA+IGNvbXBh
cmVWZXJzaW9uID8gMSA6IC0xOworICAgIHJldHVybiAwOworfQorCit9CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMv
cXQvUGx1Z2luVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luVmlld1F0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5W
aWV3UXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKKyNpbmNs
dWRlIDxRV2lkZ2V0PgorI2luY2x1ZGUgPFFYMTFFbWJlZENvbnRhaW5lcj4KKyNpbmNsdWRlIDxR
WDExSW5mbz4KKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGVidWcuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSAibnBydW50aW1l
X2ltcGwuaCIKKyNpbmNsdWRlICJydW50aW1lLmgiCisjaW5jbHVkZSAicnVudGltZV9yb290Lmgi
CisjaW5jbHVkZSA8a2pzL0pTTG9jay5oPgorI2luY2x1ZGUgPGtqcy92YWx1ZS5oPgorI2luY2x1
ZGUgImtqc19iaW5kaW5nLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCisKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisKK3VzaW5nIEtKUzo6RXhlY1N0YXRlOwordXNpbmcgS0pTOjpJbnRl
cnByZXRlcjsKK3VzaW5nIEtKUzo6SlNMb2NrOwordXNpbmcgS0pTOjpKU09iamVjdDsKK3VzaW5n
IEtKUzo6SlNWYWx1ZTsKK3VzaW5nIEtKUzo6VVN0cmluZzsKKwordXNpbmcgc3RkOjptaW47CisK
K3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCit2b2lkIFBs
dWdpblZpZXc6OnVwZGF0ZVdpbmRvdygpIGNvbnN0Cit7CisgICAgaWYgKCFwYXJlbnQoKSB8fCAh
bV9pc1dpbmRvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpOworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4ocGFyZW50KCkpOworCisgICAgSW50UmVjdCBvbGRXaW5kb3dSZWN0ID0gbV93aW5k
b3dSZWN0OworICAgIEludFJlY3Qgb2xkQ2xpcFJlY3QgPSBtX2NsaXBSZWN0OworCisgICAgbV93
aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9t
ZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBtX2NsaXBS
ZWN0ID0gd2luZG93Q2xpcFJlY3QoKTsKKyAgICBtX2NsaXBSZWN0Lm1vdmUoLW1fd2luZG93UmVj
dC54KCksIC1tX3dpbmRvd1JlY3QueSgpKTsKKworICAgIGlmKG1fd2luZG93KSB7CisgICAgCW1f
d2luZG93LT5tb3ZlKG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgIAlt
X3dpbmRvdy0+cmVzaXplKG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCkpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRGb2N1cygpCit7CisgICAgaWYg
KG1fd2luZG93KQorICAgIAltX3dpbmRvdy0+c2V0Rm9jdXMoUXQ6Ok90aGVyRm9jdXNSZWFzb24p
OworICAgIGVsc2UKKyAgICAJV2lkZ2V0OjpzZXRGb2N1cygpOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OnNob3coKQoreworICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKworICAgIGlmIChtX2F0dGFj
aGVkVG9XaW5kb3cgJiYgbV93aW5kb3cpCisgICAgCW1fd2luZG93LT5zZXRWaXNpYmxlKHRydWUp
OworCisgICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7
CisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cg
JiYgbV93aW5kb3cpCisgICAgCW1fd2luZG93LT5zZXRWaXNpYmxlKGZhbHNlKTsKKworICAgIFdp
ZGdldDo6aGlkZSgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVk
KSB7CisgICAgICAgIC8vIERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAgICAgICAg
Ly9wYWludE1pc3NpbmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRsZU1v
dXNlRXZlbnQoTW91c2VFdmVudCogZXZlbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAg
IFdpZGdldDo6c2V0UGFyZW50KHBhcmVudCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBp
bml0KCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV93aW5kb3cpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQgfHwgIW1faXNXaW5kb3dl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSW50UG9pbnQgcCA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+
Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpOworICAgIG1fbnBXaW5kb3cueCA9IHAu
eCgpOworICAgIG1fbnBXaW5kb3cueSA9IHAueSgpOworCisgICAgbV9ucFdpbmRvdy53aWR0aCA9
IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisK
KyAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSAwOworICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QudG9wID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gcmVjdC53aWR0aCgp
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gcmVjdC5oZWlnaHQoKTsKKworICAg
IGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KSB7CisgICAgICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBzZXRDYWxsaW5nUGx1
Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1f
aW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7
CisKKyAgICAgICAgQVNTRVJUKG1fd2luZG93KTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6YXR0YWNoVG9XaW5kb3coKQoreworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fYXR0YWNoZWRUb1dpbmRvdyA9IHRydWU7CisgICAgaWYgKG1f
aXNWaXNpYmxlICYmIG1fd2luZG93KQorICAgIAltX3dpbmRvdy0+c2V0VmlzaWJsZSh0cnVlKTsK
K30KKwordm9pZCBQbHVnaW5WaWV3OjpkZXRhY2hGcm9tV2luZG93KCkKK3sKKyAgICBpZiAoIW1f
YXR0YWNoZWRUb1dpbmRvdykKKwlyZXR1cm47CisKKyAgICBpZiAobV9pc1Zpc2libGUgJiYgbV93
aW5kb3cpCisgICAgCW1fd2luZG93LT5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICBtX2F0dGFjaGVk
VG9XaW5kb3cgPSBmYWxzZTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKK3sKKyAgICBp
ZiAoIW1faXNTdGFydGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBIYXNoU2V0PFJlZlB0cjxQ
bHVnaW5TdHJlYW0+ID4gc3RyZWFtcyA9IG1fc3RyZWFtczsKKyAgICBIYXNoU2V0PFJlZlB0cjxQ
bHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGVuZCA9IHN0cmVhbXMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFJlZlB0cjxQbHVnaW5TdHJlYW0+ID46Oml0ZXJhdG9yIGl0ID0gc3RyZWFtcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPnN0b3AoKTsKKyAgICAgICAg
ZGlzY29ubmVjdFN0cmVhbSgoKml0KS5nZXQoKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc3Ry
ZWFtcy5pc0VtcHR5KCkpOworCisgICAgbV9pc1N0YXJ0ZWQgPSBmYWxzZTsKKworICAgIEtKUzo6
SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworCisgICAgLy8gQ2xlYXIgdGhlIHdp
bmRvdworICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKKyAgICBkZWxldGUgbV9ucFdpbmRvdy53
c19pbmZvOworICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IDA7CisgICAgaWYgKG1fcGx1Z2luLT5w
bHVnaW5GdW5jcygpLT5zZXR3aW5kb3cgJiYgIW1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0cm95KSkgeworICAgICAgICBz
ZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+
c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAgICAgICAgc2V0Q2FsbGluZ1Bs
dWdpbihmYWxzZSk7CisgICAgfQorCisgICAgLy8gRGVzdHJveSB0aGUgcGx1Z2luCisgICAgewor
ICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdp
bihmYWxzZSk7CisgICAgfQorCisgICAgbV9pbnN0YW5jZS0+cGRhdGEgPSAwOworfQorCitzdGF0
aWMgY29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3ppbGxhLzUuMCAoWDExOyBVOyBM
aW51eCBpNjg2OyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYxMDEwIEZpcmVmb3gvMi4wIjsK
KworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKK3sKKyAgICBpZiAobV9wbHVn
aW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNNb3ppbGxhVXNlckFnZW50KSkK
KyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisKKyAgICBpZiAobV91c2VyQWdlbnQu
aXNOdWxsKCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJlbnRGcmFtZS0+bG9hZGVyKCkt
PnVzZXJBZ2VudChtX3VybCkudXRmOCgpOworCisgICAgcmV0dXJuIG1fdXNlckFnZW50LmRhdGEo
KTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNo
YXI+JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZikKK3sKKyAgICBTdHJpbmcg
ZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6
Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDgpOworCisgICAg
aWYoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1Rf
Rk9VTkQ7CisKKyAgICAvL0ZJWE1FIC0gcmVhZCB0aGUgZmlsZSBkYXRhIGludG8gYnVmZmVyCisg
ICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51dGY4KCkpLmRhdGEoKSwgInIi
KTsKKyAgICAKKyAgICBpZiAoZmlsZUhhbmRsZSA9PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7CisKKyAgICAvL2J1ZmZlci5yZXNpemUoKTsKKworICAgIGludCBieXRl
c1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxlSGFuZGxlKTsKKworICAgIGZj
bG9zZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQgPD0gMCkKKyAgICAgICAgcmV0
dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0dXJuIE5QRVJSX05PX0VSUk9SOworfQor
CitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lk
KiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2UgTlBOVnhE
aXNwbGF5OiB7CisgICAgICAgICAgICBpZiAobV93aW5kb3cpCisgICAgICAgICAgICAgICAgKih2
b2lkICoqKXZhbHVlID0gbV93aW5kb3ctPngxMUluZm8oKS5kaXNwbGF5KCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gY29udGFpbmluZ1dpbmRv
dygpLT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBOVnh0QXBw
Q29udGV4dDogeworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7CisgICAgICAgICAgICAqKCh1aW50
MzIgKil2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisgICAgICAg
ICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIE5QRVJS
X05PX0VSUk9SOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkgICAgaWYgKG1faXNKYXZhU2Ny
aXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKworICAgICAgICAgICAg
TlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1Njcmlw
dE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0
byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAgICAgICAgIGlmICh3aW5kb3dT
Y3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2Ny
aXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOworICAg
ICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTlBO
VlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQp
CisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAgICAgICAgICBOUE9iamVjdCog
cGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFz
VGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwg
bV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAgICAgICAgICAgICAgcGx1Z2lu
U2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihtX2VsZW1lbnQp
LT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0
ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxh
Lm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAocGx1
Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHBsdWdp
blNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsK
KyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0OworCisgICAgICAgICAgICByZXR1
cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGNhc2UgTlBO
Vm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odmFsdWUpOworICAgICAgICAgICAgKigoWElEICopdykgPSBjb250YWluaW5nV2lu
ZG93KCktPndpbklkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5hYmxlZEJvb2w6IHsKKyAgICAg
ICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6
OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24oTlBSZWdpb24gcmVnaW9uKQor
eworCW5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6Zm9yY2VSZWRyYXco
KQoreworCW5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BsdWdpblZpZXc6On5QbHVnaW5WaWV3KCkK
K3sKKyAgICBzdG9wKCk7CisKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0cyk7CisKKyAg
ICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFtQ291bnQpOworICAgIGZyZWVT
dHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQpOworCisgICAgbV9wYXJlbnRG
cmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhpcyk7CisKKyAgICBpZiAobV9w
bHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250VW5s
b2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQoKTsKKworICAgIGRlbGV0ZSBt
X3dpbmRvdzsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0KCkKK3sKKyAgICBpZiAobV9oYXZl
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhdmVJbml0aWFsaXplZCA9IHRy
dWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXR1cyA9PSBQ
bHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBtX3BsdWdpbiA9IDA7CisgICAg
ICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAgICAgICBtX3N0YXR1cyA9IFBs
dWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX25lZWRzWEVtYmVkID0gZmFsc2U7CisgICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygp
LT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmdldHZhbHVlKG1f
aW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVlZHNYRW1iZWQpOworCisgICAg
aWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgbV93aW5kb3cgPSBuZXcgUVgxMUVtYmVkQ29u
dGFpbmVyKGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgICAgIHNldE5hdGl2ZVdpZGdldChtX3dp
bmRvdyk7CisgICAgICAgIHNldElzTlBBUElQbHVnaW4odHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXND
YW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNob3cgKCk7CisK
KyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICp3c2kgPSBuZXcgTlBTZXRXaW5kb3dDYWxs
YmFja1N0cnVjdCgpOworCisgICAgd3NpLT50eXBlID0gMDsKKworICAgIHdzaS0+ZGlzcGxheSA9
IG1fd2luZG93LT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgIHdzaS0+dmlzdWFsID0gKFZpc3Vh
bCopbV93aW5kb3ctPngxMUluZm8oKS52aXN1YWwoKTsKKyAgICB3c2ktPmRlcHRoID0gbV93aW5k
b3ctPngxMUluZm8oKS5kZXB0aCgpOworICAgIHdzaS0+Y29sb3JtYXAgPSBtX3dpbmRvdy0+eDEx
SW5mbygpLmNvbG9ybWFwKCk7CisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gd3NpOworCisJbV9u
cFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAgIG1fbnBXaW5kb3cud2luZG93
ID0gKHZvaWQqKW1fd2luZG93LT53aW5JZCgpOworCisgICAgaWYgKCEobV9wbHVnaW4tPnF1aXJr
cygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdpbmRvd0NhbGwpKSkKKyAgICAg
ICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBtX3N0YXR1cyA9IFBs
dWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5j
cHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShyZXZpc2lvbiAzMjQ4OSkKKysr
IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY2LDMwICs2Niw2IEBAIGludCBQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24o
Y28KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3Qg
UGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAotewotICAgIC8vIFNvcnQgcGx1Zy1pbnMg
dGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCi0gICAgYm9vbCBBYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250QWxsb3dN
dWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgYm9vbCBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAh
Y29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRG9udEFsbG93TXVsdGlwbGVJ
bnN0YW5jZXMpOwotICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgIT0gQmFsbG93c011
bHRpcGxlSW5zdGFuY2VzKQotICAgICAgICByZXR1cm4gQWFsbG93c011bHRpcGxlSW5zdGFuY2Vz
ID8gLTEgOiAxOwotCi0gICAgLy8gU29ydCBwbHVnLWlucyBpbiBhIHByZWZlcnJlZCBwYXRoIGZp
cnN0LgotICAgIGJvb2wgQWlzSW5QcmVmZXJyZWRQYXRoID0gUGx1Z2luRGF0YWJhc2U6OmlzUHJl
ZmVycmVkUGx1Z2luRGlyZWN0b3J5KHBhcmVudERpcmVjdG9yeSgpKTsKLSAgICBib29sIEJpc0lu
UHJlZmVycmVkUGF0aCA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9y
eShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGlmIChBaXNJblByZWZlcnJlZFBh
dGggIT0gQmlzSW5QcmVmZXJyZWRQYXRoKQotICAgICAgICByZXR1cm4gQWlzSW5QcmVmZXJyZWRQ
YXRoID8gLTEgOiAxOwotCi0gICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRh
KCksIGNvbXBhcmVUby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKGRpZmYpCi0gICAg
ICAgIHJldHVybiBkaWZmOwotCi0gICAgaWYgKGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29t
cGFyZVRvLnZlcnNpb24oKSkpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgcmV0dXJuIHN0
cmNtcChwYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGly
ZWN0b3J5KCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KIGJvb2wgUGx1Z2luUGFja2FnZTo6aXNQbHVn
aW5CbGFja2xpc3RlZCgpCiB7CiAgICAgc3RhdGljIGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lv
biBzbFBsdWdpbk1pblJlcXVpcmVkKDB4NTFCRTAwMDAsIDB4MDAwMTAwMDApOwpJbmRleDogV2Vi
Q29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lvbiAzMjQ4OSkKKysrIFdlYkNv
cmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NjIsNyArNTYyLDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICAgICAgICAgICAg
IFNldFdpbmRvd0xvbmdQdHIobV93aW5kb3csIEdXTFBfV05EUFJPQywgKExPTkcpbV9wbHVnaW5X
bmRQcm9jKTsKICAgICB9CiAKLSAgICBLSlM6OkpTTG9jazo6RHJvcEFsbExvY2tzOworICAgIEtK
Uzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwogCiAgICAgLy8gQ2xlYXIgdGhl
IHdpbmRvdwogICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKQEAgLTU4OCwzMyArNTg4LDYgQEAg
dm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICAgICBtX2luc3RhbmNlLT5wZGF0YSA9IDA7CiB9CiAK
LXN0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5n
dGgpCi17Ci0gICAgaWYgKCFzdHJpbmdBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgZmFzdEZyZWUoc3RyaW5nQXJy
YXlbaV0pOwotCi0gICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwotfQotCi1zdGF0aWMgS1VSTCBt
YWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMU3RyaW5n
KQotewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVSTFN0cmluZzsKLQotICAgIC8v
IFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmluZy5yZXBsYWNlKCdcbicsICIi
KTsKLSAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7Ci0KLSAgICByZXR1cm4gS1VSTChi
YXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3RhcnRzV2l0aEJs
YW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYnVmZmVy
LnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Ci19Ci0KIGNvbnN0IGNoYXIqIFBsdWdp
blZpZXc6OnVzZXJBZ2VudCgpCiB7CiAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlu
cyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCkBAIC02MjUsMjM3ICs1OTgsODcg
QEAgY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkKICAgICByZXR1cm4gbV91c2Vy
QWdlbnQuZGF0YSgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RC
bGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi17Ci0gICAgY29uc3QgY2hhciog
Ynl0ZXMgPSBidWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXpl
KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7Ci0g
ICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KLSAgICAgICAg
aWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCi0gICAgICAgICAg
ICByZXR1cm4gaSArIDI7Ci0gICAgICAgIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlv
biBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCi0gICAg
ICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBpZiAoaSA9PSAyKQotICAgICAgICAgICAgICAg
IHJldHVybiBpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKLSAgICAg
ICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4
ODAzODcpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCi0gICAgICAgICAg
ICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMp
LgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0
IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRo
ZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKLSAgICAvLyBhIENSTEYgcGFp
ci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCi0gICAgLy8gaW5zdGVh
ZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgotICAgIC8v
IG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCi0g
ICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBv
cgotICAgIC8vIENSLgotICAgIC8vCi0gICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMg
bm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCi0gICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJz
dCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQotICAgICAgICAgICAg
cmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKLSAgICAg
ICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCi0gICAgICAg
ICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKLSAgICAgICAg
ICAgIC8vIG5leHQgcmVhZC4KLSAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcg
Y2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCitOUEVy
cm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwg
dWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmKQogewotICAgIGJvb2wgY2FwaXRhbGl6ZUNoYXJh
Y3RlciA9IHRydWU7Ci0gICAgU3RyaW5nIHJlc3VsdDsKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVm
LCBsZW4pOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkr
KykgewotICAgICAgICBVQ2hhciBjOworICAgIGlmIChmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxl
Oi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKIAotICAg
ICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ldID49ICdhJyAmJiBuYW1lW2ld
IDw9ICd6JykKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIobmFtZVtpXSk7Ci0gICAgICAg
IGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0gPj0gJ0EnICYmIG5hbWVb
aV0gPD0gJ1onKQotICAgICAgICAgICAgYyA9IHRvQVNDSUlMb3dlcihuYW1lW2ldKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYyA9IG5hbWVbaV07CisgICAgLy8gR2V0IGZpbGUgaW5mbwor
ICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7CisgICAgaWYgKEdldEZpbGVBdHRy
aWJ1dGVzRXhXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEdldEZp
bGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQorICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7CiAKLSAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nKQotICAgICAgICAgICAg
Y2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNh
cGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICBpZiAoYXR0cnMuZHdGaWxlQXR0cmlidXRl
cyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVf
Tk9UX0ZPVU5EOwogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7Ci0gICAgfQorICAgIEhBTkRM
RSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElT
VElORywgMCwgMCk7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVf
VkFMVUUpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKIAotICAgIHJldHVy
biByZXN1bHQ7Ci19CisgICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNpemVMb3cpOwogCi1z
dGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJIZWFkZXJGaWVsZHMoY29uc3Qg
VmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBjb25zdCBjaGFy
KiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogZW9sOwotICAgIFN0cmlu
ZyBsYXN0S2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOwotCi0gICAgLy8gTG9v
cCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRlciwgb3Igd2UgY2FuJ3QgZmlu
ZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoKGVvbCA9IGZpbmRFT0woYnl0ZXMs
IGxlbmd0aCkpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbmUgPSBieXRlczsKLSAgICAgICAg
aW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKLSAgICAgICAgCi0gICAgICAgIC8vIE1vdmUg
Ynl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWluYXRvciBhcyByZXR1cm5lZCBi
eSBmaW5kRU9MLgotICAgICAgICBieXRlcyA9IGVvbCArIDE7Ci0gICAgICAgIGlmICgoKmVvbCA9
PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQotICAgICAgICAgICAgYnl0ZXMrKzsgLy8gU2Fm
ZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5nIENSTEYuCi0KLSAgICAgICAg
bGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAobGluZUxlbmd0aCA9PSAwKQot
ICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaGVhZGVy
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJyAnIHx8ICps
aW5lID09ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlv
dXMgaGVhZGVyCi0gICAgICAgICAgICBpZiAobGFzdEtleS5pc051bGwoKSkgewotICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBhbmQgY29udGludWUKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAg
ICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRlckZpZWxkcy5nZXQobGFzdEtl
eSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxpbmUsIGxpbmVMZW5ndGgpOwor
ICAgIERXT1JEIGJ5dGVzUmVhZDsKKyAgICBpbnQgcmV0dmFsID0gUmVhZEZpbGUoZmlsZUhhbmRs
ZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAmYnl0ZXNSZWFkLCAwKTsKIAot
ICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtleSwgY3VycmVudFZhbHVlICsg
bmV3VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gQnJhbmQgbmV3IGhlYWRlcgotICAgICAgICAgICAgY29uc3QgY2hhciogY29sb247Ci0gICAg
ICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6JyAmJiBjb2xvbiAhPSBlb2w7
IGNvbG9uKyspIHsKLSAgICAgICAgICAgICAgICAvLyBlbXB0eSBsb29wCi0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKSAKLSAgICAgICAgICAgICAgICAvLyBtYWxm
b3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0S2V5ID0gY2Fw
aXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShTdHJpbmcobGluZSwgY29sb24gLSBsaW5lKSk7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChj
b2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9uID09
IGVvbCkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKGNvbG9uLCBlb2wgLSBjb2xv
bik7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWUgPSBoZWFkZXJGaWVsZHMuZ2V0
KGxhc3RLZXkpOwotICAgICAgICAgICAgICAgIGlmICghb2xkVmFsdWUuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9sZFZhbHVlOwotICAgICAgICAgICAgICAg
ICAgICB0bXAgKz0gIiwgIjsKLSAgICAgICAgICAgICAgICAgICAgdG1wICs9IHZhbHVlOwotICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKLSAgICAgICAgICAgICAgICB9CisgICAgQ2xv
c2VIYW5kbGUoZmlsZUhhbmRsZSk7CiAKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0
KGxhc3RLZXksIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBoZWFkZXJGaWVsZHM7CisgICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAh
PSBhdHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VO
RDsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBjaGFyKiBidWYsIGJvb2wgZmls
ZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0aW9uLCBib29sIGFsbG93SGVh
ZGVycykKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBOVmFyaWFibGUgdmFyaWFibGUs
IHZvaWQqIHZhbHVlKQogewotICAgIGlmICghdXJsIHx8ICFsZW4gfHwgIWJ1ZikKLSAgICAgICAg
cmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBjYXNlIE5QTlZXaW5kb3dOUE9i
amVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9H
RU5FUklDX0VSUk9SOwogCi0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0Owor
ICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUt
PndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CiAKLSAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgIAotICAgIGlmIChmaWxlKSB7Ci0gICAg
ICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisgICAgICAgICAgICAvLyBSZXR1cm4gdmFs
dWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8aHR0cDov
L3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+CisgICAgICAg
ICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5fUmV0YWlu
T2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CiAKLSAgICAgICAgaWYgKGZpbGVuYW1lLnN0YXJ0
c1dpdGgoImZpbGU6Ly8vIikpCi0gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0
cmluZyg4KTsKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAg
ICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KIAotICAgICAgICAvLyBHZXQgZmlsZSBp
bmZvCi0gICAgICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7Ci0gICAgICAgIGlm
IChHZXRGaWxlQXR0cmlidXRlc0V4VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykgPT0gMCkKLSAgICAgICAgICAg
IHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKyAgICAgICAgY2FzZSBOUE5WUGx1Z2luRWxl
bWVudE5QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CiAKLSAgICAgICAgaWYgKGF0dHJzLmR3RmlsZUF0dHJpYnV0
ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJf
RklMRV9OT1RfRk9VTkQ7CisgICAgICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0
ID0gMDsKIAotICAgICAgICBIQU5ETEUgZmlsZUhhbmRsZSA9IENyZWF0ZUZpbGVXKGZpbGVuYW1l
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEZJTEVfUkVBRF9EQVRBLCBGSUxFX1NI
QVJFX1JFQUQsIDAsIE9QRU5fRVhJU1RJTkcsIDAsIDApOwotICAgICAgICAKLSAgICAgICAgaWYg
KGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICByZXR1cm4g
TlBFUlJfRklMRV9OT1RfRk9VTkQ7CisgICAgICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBtX2Vs
ZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBwbHVnaW5TY3Jp
cHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KG1fZWxlbWVudCktPmdl
dE5QT2JqZWN0KCk7CiAKLSAgICAgICAgYnVmZmVyLnJlc2l6ZShhdHRycy5uRmlsZVNpemVMb3cp
OworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVk
LCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1
Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkK
KyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwog
Ci0gICAgICAgIERXT1JEIGJ5dGVzUmVhZDsKLSAgICAgICAgaW50IHJldHZhbCA9IFJlYWRGaWxl
KGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGF0dHJzLm5GaWxlU2l6ZUxvdywgJmJ5dGVzUmVh
ZCwgMCk7CisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAg
ICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKIAotICAgICAgICBDbG9zZUhhbmRsZShmaWxlSGFu
ZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorI2Vu
ZGlmCiAKLSAgICAgICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmls
ZVNpemVMb3cpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOwotICAgICAgICBtZW1jcHkoYnVm
ZmVyLmRhdGEoKSwgYnVmLCBsZW4pOwotICAgIH0KKyAgICAgICAgY2FzZSBOUE5WbmV0c2NhcGVX
aW5kb3c6IHsKKyAgICAgICAgICAgIFBsYXRmb3JtV2lkZ2V0KiB3ID0gcmVpbnRlcnByZXRfY2Fz
dDxQbGF0Zm9ybVdpZGdldCo+KHZhbHVlKTsKIAotICAgIGNvbnN0IGNoYXIqIHBvc3REYXRhID0g
YnVmZmVyLmRhdGEoKTsKLSAgICBpbnQgcG9zdERhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpOwot
ICAgIAotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKLSAgICAgICAgaWYgKHN0YXJ0c1dpdGhCbGFu
a0xpbmUoYnVmZmVyKSkgewotICAgICAgICAgICAgcG9zdERhdGErKzsKLSAgICAgICAgICAgIHBv
c3REYXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgbG9jYXRp
b24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVyKTsKLSAgICAgICAgICAgIGlm
IChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBibGFuayBsaW5l
IGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZmZXIsIGV2ZXJ5dGhpbmcgYmVm
b3JlIGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMgPSBwYXJzZVJG
QzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0aW9uOwotCi0gICAgICAgICAg
ICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQgQ29udGVudC1MZW5ndGggdGhl
bXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAgICAgICAgICAgICAvLyBidXQgV2ViRm91bmRh
dGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVtb3ZlIHRoZSBoZWFkZXIKLSAg
ICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0aGUgZGF0YSB0byB0aGUgcmVx
dWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudExlbmd0aCA9IGhl
YWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMZW5ndGgg
PSBtaW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFMZW5ndGgpOwotICAgICAgICAg
ICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVuZ3RoIik7CisgICAgICAgICAg
ICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKIAotICAgICAgICAgICAgICAgIHBvc3REYXRhICs9
IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKICAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CiAgICAgfQotCi0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5z
ZXRIVFRQTWV0aG9kKCJQT1NUIik7Ci0gICAgZnJhbWVMb2FkUmVxdWVzdC5yZXNvdXJjZVJlcXVl
c3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOwotICAgIGZyYW1lTG9hZFJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxkcyhoZWFkZXJGaWVsZHMpOwot
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoRm9ybURh
dGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsKLSAgICBmcmFtZUxvYWRSZXF1
ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotCi0gICAgcmV0dXJuIGxvYWQoZnJhbWVMb2FkUmVx
dWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7CiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQpJbmRleDogV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNDg5KQor
KysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAwOC0wNC0yNCAgTWFyYyBPcmRpbmFzIGkgTGxvcGlzICA8bWFyYy5vcmRpbmFzaWxsb3Bpc0Bj
b2xsYWJvcmEuY28udWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUwCisg
ICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMgb24gR3RrIGFuZCBRdC14MTEg
cG9ydHMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpGcmFtZUxvYWRlckNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb21taXR0ZWRMb2FkKToK
KyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAg
ICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVjdERhdGFUb1BsdWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmg6CisKIDIwMDgt
MDQtMjMgIENocmlzdGlhbiBEeXdhbiAgPGNocmlzdGlhbkB0d290b2FzdHMuZGU+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxwIFRva2VyLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDMyNDg5KQorKysg
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdh
biA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFi
b3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC01
Nyw2ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFtZUxvYWRlckNsaWVudDo6RnJh
bWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFt
ZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV91c2VyQWdlbnQoIiIpCiB7CiAgICAg
QVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYyLDkgKzE2NCwzMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmNvbW1pdHRl
ZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAg
ZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0g
ICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmcmIHRleHRFbmNv
ZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdOYW1lKCk7CisKKyAgICBpZiAo
IW1fcGx1Z2luVmlldykgeworICAgICAgICBBU1NFUlQobG9hZGVyLT5mcmFtZSgpKTsKKyAgICAg
ICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1lIGxvYWRlciBpcyBvdXIgd2F5
IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25lCisgICAgICAgIC8vIHdoZW4g
dGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBvZiBh
IGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCisgICAgICAgIFN0cmlu
ZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygpOworICAgICAgICBib29sIHVz
ZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisgICAgICAgIGlmICghdXNlckNob3NlbikK
KyAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05h
bWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBsb2FkZXItPmZyYW1l
TG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNvZGluZyhlbmNvZGluZywgdXNl
ckNob3Nlbik7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAgICAgZnJhbWVMb2FkZXItPmFk
ZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7Cisg
ICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgeworICAgICAgICAgICAgbV9w
bHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNwb25zZSgpKTsKKyAgICAg
ICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjYwLDkgKzI4MywxMyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAgICAgKGNvcmUobV9mcmFtZSkt
PmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7CiB9CiAKLVdpZGdldCogRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Y29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBs
dWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUGx1Z2luVmlldyogcGx1Z2lu
VmlldyA9IFBsdWdpblZpZXc6OmNyZWF0ZShjb3JlKG1fZnJhbWUpLCBwbHVnaW5TaXplLCBlbGVt
ZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5
KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBQbHVnaW5TdGF0dXNMb2FkZWRT
dWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworCiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTI5MCw4ICszMTcsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNs
aWVudDo6Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2lu
KFdpZGdldCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuOworICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5X
aWRnZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0
V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwKQEAg
LTU4NywxNCArNjEzLDEzIEBAIFN0cmluZyBGcmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlN
RVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9jdW1lbnRMb2FkZXItPmZyYW1l
KCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRoZSBmcmFtZSBsb2FkZXIgaXMg
b3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFsbHkgZG9uZQotICAgIC8vIHdo
ZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVuIGZvciB0aGUgY2FzZSBv
ZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFuaykuCi0gICAgU3RyaW5n
IGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5jb2RpbmcoKTsKLSAgICBib29s
IHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAgaWYgKGVuY29kaW5nLmlzTnVs
bCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLnRleHRF
bmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5j
b2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgIGlmICghbV9wbHVnaW5WaWV3KQorICAg
ICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAwKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgICAgIG1fcGx1Z2lu
VmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAg
ICB9CiB9CiAKIApAQCAtNzEwLDkgKzczNSwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVy
cm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3KSB7CisgICAgICAgIG1fcGx1
Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAg
ICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikK
SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
R3RrLmgJKHJldmlzaW9uIDMyNDg5KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMxLDYgKzMyLDcgQEAKIAogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkZy
YW1lIFdlYktpdFdlYkZyYW1lOwogCkBAIC0xNzAsNiArMTcyLDEwIEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsKICAgICAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbV91
c2VyQWdlbnQ7CisKKyAgICAgICAgLy8gUGx1Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bwor
ICAgICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZpZXc7CisgICAgICAgIGJvb2wg
bV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvcXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDMy
NDg5KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDA4LTA0LTI0ICBNYXJjIE9yZGluYXMgaSBMbG9waXMgIDxtYXJjLm9yZGluYXNpbGxv
cGlzQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3
NTAKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgTlBBUEkgcGx1Z2lucyBvbiBHdGsgYW5kIFF0
LXgxMSBwb3J0cy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6RnJhbWVMb2Fk
ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpmaW5p
c2hlZExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0
TWFpbkRvY3VtZW50RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0
OjpvYmplY3RDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuaDoKKwogMjAwOC0wNC0yNCAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbi4KSW5k
ZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAJKHJldmlzaW9uIDMyNDg5KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA4IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgpAQCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtMTAzLDYg
KzEwNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiBGcmFtZUxvYWRlckNsaWVudFF0OjpGcmFtZUxv
YWRlckNsaWVudFF0KCkKICAgICA6IG1fZnJhbWUoMCkKICAgICAsIG1fd2ViRnJhbWUoMCkKKyAg
ICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV9maXJzdERhdGEoZmFsc2UpCiAgICAgLCBtX3Bv
bGljeUZ1bmN0aW9uKDApCiB7CkBAIC00NTcsMTAgKzQ2MCwxNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmRpZENoYW5nZVRpdGxlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6Zmlu
aXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7Ci0gICAgaWYgKG1fZmlyc3RE
YXRhKSB7Ci0gICAgICAgIEZyYW1lTG9hZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsK
LSAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBm
YWxzZSk7Ci0gICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgaWYgKCFtX3BsdWdpblZp
ZXcpIHsKKyAgICAgICAgaWYobV9maXJzdERhdGEpIHsKKyAgICAgICAgICAgIEZyYW1lTG9hZGVy
ICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgICAgIGZsLT5zZXRFbmNvZGlu
ZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICAgICAgbV9m
aXJzdERhdGEgPSBmYWxzZTsgCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IG1fcGx1Z2luVmlldy0+ZGlkRmluaXNoTG9hZGluZygpOworICAgICAgICBtX3BsdWdpblZpZXcg
PSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CiAgICAgfQog
fQogCkBAIC02MDMsMjIgKzYxMywzNiBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbkNh
Y2hlUGFnZSgpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6c2V0TWFpbkRvY3VtZW50RXJy
b3IoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgaWYgKG1fZmlyc3REYXRhKSB7Ci0gICAgICAgIGxvYWRl
ci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1l
KCksIGZhbHNlKTsKLSAgICAgICAgbV9maXJzdERhdGEgPSBmYWxzZTsKKyAgICBpZiAoIW1fcGx1
Z2luVmlldykgeworICAgICAgICBpZiAobV9maXJzdERhdGEpIHsKKyAgICAgICAgICAgIGxvYWRl
ci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1l
KCksIGZhbHNlKTsKKyAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZhaWwoZXJyb3IpOworICAg
ICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2lu
ID0gZmFsc2U7CiAgICAgfQogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvbW1pdHRl
ZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBG
cmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgaWYgKG1fZmlyc3RE
YXRhKSB7Ci0gICAgICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05h
bWUoKSwgZmFsc2UpOwotICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOworICAgIGlmICghbV9w
bHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgRnJhbWVMb2FkZXIgKmZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAg
ICBpZiAobV9maXJzdERhdGEpIHsKKyAgICAgICAgICAgIGZsLT5zZXRFbmNvZGluZyhtX3Jlc3Bv
bnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICAgICAgbV9maXJzdERhdGEg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmbC0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikgewor
ICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5yZXNw
b25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVu
Z3RoKTsKICAgICB9Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KIAogV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5jZWxsZWRFcnJvcihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC04NzcsNyArOTAxLDcgQEAg
T2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRRdDo6bwogICAgIGlmIChfbWltZVR5
cGUgPT0gImFwcGxpY2F0aW9uL3gtcXQtcGx1Z2luIiB8fCBfbWltZVR5cGUgPT0gImFwcGxpY2F0
aW9uL3gtcXQtc3R5bGVkLXdpZGdldCIpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3Ro
ZXJQbHVnaW47CiAKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICBpZiAodXJsLmlzRW1wdHko
KSAmJiAhX21pbWVUeXBlLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5v
bmU7CiAKICAgICBTdHJpbmcgbWltZVR5cGUgPSBfbWltZVR5cGU7CkBAIC04OTIsNiArOTE2LDkg
QEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRRdDo6bwogICAgIGlmIChNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAg
ICByZXR1cm4gT2JqZWN0Q29udGVudEltYWdlOwogCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlOjpp
bnN0YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKwogICAgIGlmIChtX2ZyYW1l
LT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCktPnN1cHBvcnRzTWltZVR5
cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwog
CkBAIC05MTQsNyArOTQxLDcgQEAgc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgcXN0eWxlU2hl
ZXRQcgogCiBjb25zdCB1bnNpZ25lZCBudW1xU3R5bGVTaGVldFByb3BlcnRpZXMgPSBzaXplb2Yo
cXN0eWxlU2hlZXRQcm9wZXJ0aWVzKSAvIHNpemVvZihxc3R5bGVTaGVldFByb3BlcnRpZXNbMF0p
OwogCi1XaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRT
aXplJiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGFyYW1OYW1lcywKK1dpZGdldCogRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1
Z2luKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewogLy8g
ICAgIHFEZWJ1ZygpPDwiLS0tLS0tIENyZWF0aW5nIHBsdWdpbiBpbiBGcmFtZUxvYWRlckNsaWVu
dFF0OjpjcmVhdGVQbHVnaW4gZm9yICI8PHVybC5wcmV0dHlVUkwoKSA8PCBtaW1lVHlwZTsKQEAg
LTk1NiwyNyArOTgzLDMxIEBAIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1
Z2kKIAogICAgICAgICAgICAgd2lkZ2V0LT5zZXRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOwogICAg
ICAgICB9Ci0gICAgfQogCiAjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAotICAgIGlmICghb2Jq
ZWN0KSB7Ci0gICAgICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0b3J5ID0gbV93ZWJGcmFtZS0+
cGFnZSgpLT5wbHVnaW5GYWN0b3J5KCk7Ci0gICAgICAgIGlmIChmYWN0b3J5KQotICAgICAgICAg
ICAgb2JqZWN0ID0gZmFjdG9yeS0+Y3JlYXRlKG1pbWVUeXBlLCBxdXJsLCBwYXJhbXMsIHZhbHVl
cyk7Ci0gICAgfQorICAgICAgICBpZiAoIW9iamVjdCkgeworICAgICAgICAgICAgUVdlYlBsdWdp
bkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnBsdWdpbkZhY3RvcnkoKTsK
KyAgICAgICAgICAgIGlmIChmYWN0b3J5KQorICAgICAgICAgICAgICAgIG9iamVjdCA9IGZhY3Rv
cnktPmNyZWF0ZShtaW1lVHlwZSwgcXVybCwgcGFyYW1zLCB2YWx1ZXMpOworICAgICAgICB9CiAj
ZW5kaWYKIAotICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgUVdpZGdldCAqd2lkZ2V0ID0gcW9i
amVjdF9jYXN0PFFXaWRnZXQgKj4ob2JqZWN0KTsKLSAgICAgICAgUVdpZGdldCAqdmlldyA9IG1f
d2ViRnJhbWUtPnBhZ2UoKS0+dmlldygpOwotICAgICAgICBpZiAod2lkZ2V0ICYmIHZpZXcpIHsK
LSAgICAgICAgICAgIHdpZGdldC0+c2V0UGFyZW50KHZpZXcpOwotICAgICAgICAgICAgV2lkZ2V0
KiB3PSBuZXcgV2lkZ2V0KCk7Ci0gICAgICAgICAgICB3LT5zZXROYXRpdmVXaWRnZXQod2lkZ2V0
KTsKLSAgICAgICAgICAgIHJldHVybiB3OworICAgICAgICBpZiAob2JqZWN0KSB7CisgICAgICAg
ICAgICBRV2lkZ2V0ICp3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCAqPihvYmplY3QpOwor
ICAgICAgICAgICAgUVdpZGdldCAqdmlldyA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+dmlldygpOwor
ICAgICAgICAgICAgaWYgKHdpZGdldCAmJiB2aWV3KSB7CisgICAgICAgICAgICAgICAgd2lkZ2V0
LT5zZXRQYXJlbnQodmlldyk7CisgICAgICAgICAgICAgICAgV2lkZ2V0KiB3PSBuZXcgV2lkZ2V0
KCk7CisgICAgICAgICAgICAgICAgdy0+c2V0TmF0aXZlV2lkZ2V0KHdpZGdldCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTog
bWFrZSB0aGluZ3Mgd29yayBmb3Igd2lkZ2V0bGVzcyBwbHVnaW5zIGFzIHdlbGwKKyAgICAgICAg
ICAgIGRlbGV0ZSBvYmplY3Q7CiAgICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhp
bmdzIHdvcmsgZm9yIHdpZGdldGxlc3MgcGx1Z2lucyBhcyB3ZWxsCi0gICAgICAgIGRlbGV0ZSBv
YmplY3Q7CisgICAgfSBlbHNlIHsgLy8gTlBBUEkgUGx1Z2lucworICAgICAgICBQbHVnaW5WaWV3
KiBwbHVnaW5WaWV3ID0gUGx1Z2luVmlldzo6Y3JlYXRlKG1fZnJhbWUsIHBsdWdpblNpemUsIGVs
ZW1lbnQsIHVybCwKKyAgICAgICAgICAgIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlw
ZSwgbG9hZE1hbnVhbGx5KTsKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7CiAgICAgfQogCiAg
ICAgcmV0dXJuIDA7CkBAIC05ODQsOCArMTAxNSw3IEBAIFdpZGdldCogRnJhbWVMb2FkZXJDbGll
bnRRdDo6Y3JlYXRlUGx1Z2kKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpyZWRpcmVjdERh
dGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybjsKKyAgICBtX3BsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3
Kj4ocGx1Z2luV2lkZ2V0KTsKIH0KIAogV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVh
dGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3QgS1VSTCYg
YmFzZVVSTCwKQEAgLTEwMDUsNyArMTAzNSw2IEBAIFFTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y2hvb3NlRmlsZSgKICAgICByZXR1cm4gd2ViRnJhbWUoKS0+cGFnZSgpLT5jaG9vc2VGaWxl
KHdlYkZyYW1lKCksIG9sZEZpbGUpOwogfQogCi0KIH0KIAogI2luY2x1ZGUgIm1vY19GcmFtZUxv
YWRlckNsaWVudFF0LmNwcCIKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMzI0ODkpCisrKyBXZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRyb2xsdGVjaCBBU0EKKyAqIENvcHly
aWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiBjbGFzcyBRV2ViRnJhbWU7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIwNCw2ICsyMDYsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBt
X2ZpcnN0RGF0YTsKICAgICAgICAgRnJhbWVQb2xpY3lGdW5jdGlvbiBtX3BvbGljeUZ1bmN0aW9u
OworICAgICAgICAvLyBQbHVnaW4gdmlldyB0byByZWRpcmVjdCBkYXRhIHRvCisgICAgICAgIFdl
YkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2luVmlldzsKKyAgICAgICAgYm9vbCBtX2hhc1NlbnRS
ZXNwb25zZVRvUGx1Z2luOwogICAgIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20887</attachid>
            <date>2008-04-29 04:42:23 -0700</date>
            <delta_ts>2008-04-29 04:42:23 -0700</delta_ts>
            <desc>64-bit fixes</desc>
            <filename>WebKit-64bit-fixes.patch</filename>
            <type>text/plain</type>
            <size>1162</size>
            <attacher name="Gwenole Beauchesne">gb.devel</attacher>
            
              <data encoding="base64">MjAwOC0wNC0yOSAgR3dlbm9sZSBCZWF1Y2hlc25lICA8Z2JlYXVjaGVzbmVAc3BsaXR0ZWQtZGVz
a3RvcC5vcmc+CgoJKiA2NC1iaXQgZml4ZXMuCgotLS0gV2ViS2l0L1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmguNjRiaXQtZml4ZXMJMjAwOC0wNC0wMiAxMDowMToyOC4wMDAwMDAwMDAg
KzAyMDAKKysrIFdlYktpdC9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5oCTIwMDgtMDQt
MjkgMTE6MDg6MTIuMDAwMDAwMDAwICswMjAwCkBAIC0xMDMsMTAgKzEwMywxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgfTsKIAogICAgIHN0cnVjdCBQbHVnaW5QYWNrYWdlSGFzaCB7Ci0g
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGludCBrZXkpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGtleSktPmhhc2goKTsgfQorICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCB1aW50cHRyX3Qga2V5KSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFBsdWdpblBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgUmVmUHRyPFBsdWdpblBhY2thZ2U+JiBrZXkpIHsgcmV0dXJuIGtl
eS0+aGFzaCgpOyB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgaW50IGEsIGNv
bnN0IGludCBiKSB7IHJldHVybiBlcXVhbChyZWludGVycHJldF9jYXN0PFBsdWdpblBhY2thZ2Uq
PihhKSwgcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYikpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IHVpbnRwdHJfdCBhLCBjb25zdCB1aW50cHRyX3QgYikgeyBy
ZXR1cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYSksIHJlaW50ZXJw
cmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQogICAgICAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGEsIGNvbnN0IFJlZlB0cjxQbHVnaW5QYWNr
YWdlPiYgYikgeyByZXR1cm4gUGx1Z2luUGFja2FnZTo6ZXF1YWwoKmEuZ2V0KCksICpiLmdldCgp
KTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IGZhbHNlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20888</attachid>
            <date>2008-04-29 04:45:18 -0700</date>
            <delta_ts>2008-04-29 04:45:18 -0700</delta_ts>
            <desc>Specialize NPN_GetValue()</desc>
            <filename>WebKit-npapi-getvalue.patch</filename>
            <type>text/plain</type>
            <size>2373</size>
            <attacher name="Gwenole Beauchesne">gb.devel</attacher>
            
              <data encoding="base64">MjAwOC0wNC0yOSAgR3dlbm9sZSBCZWF1Y2hzbmUgIDxnYmVhdWNoZXNuZUBzcGxpdHRlZC1kZXNr
dG9wLm9yZz4KCgkqIFdlYktpdC9XZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwOgoKCSogV2ViS2l0
L1dlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKCShOUE5fR2V0VmFsdWVf
R3RrKTogUmV0dXJuIHZhbGlkIHZhbHVlcyBmb3IgTlBOVlRvb2xraXQgYW5kCglOUE5WU3VwcG9y
dHNYRW1iZWRCb29sIHdoZW4gYSBOVUxMIGluc3RhbmNlIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4K
Ci0tLSBXZWJLaXQvV2ViQ29yZS9wbHVnaW5zL25wYXBpLmNwcC5ucGFwaS1nZXR2YWx1ZQkyMDA4
LTA0LTI5IDEwOjI2OjI0LjAwMDAwMDAwMCArMDIwMAorKysgV2ViS2l0L1dlYkNvcmUvcGx1Z2lu
cy9ucGFwaS5jcHAJMjAwOC0wNC0yOSAxMTozODoyOS4wMDAwMDAwMDAgKzAyMDAKQEAgLTEzNywx
MiArMTM3LDE0IEBAIHZvaWQgTlBOX0ZvcmNlUmVkcmF3KE5QUCBpbnN0YW5jZSkKIAogTlBFcnJv
ciBOUE5fR2V0VmFsdWUoTlBQIGluc3RhbmNlLCBOUE5WYXJpYWJsZSB2YXJpYWJsZSwgdm9pZCog
dmFsdWUpCiB7CisgICAgUGx1Z2luVmlldyogdmlldyA9IHBsdWdpblZpZXdGb3JJbnN0YW5jZShp
bnN0YW5jZSk7CisKICAgICAvLyBGSVhNRTogQWNyb2JhdCByZWFkZXIgcGx1Z2luIGNhbGxzIE5Q
Tl9HZXRWYWx1ZSBiZWZvcmUgYSBQbHVnaW5WaWV3CiAgICAgLy8gaGFzIGJlZW4gY3JlYXRlZAot
ICAgIGlmICghaW5zdGFuY2UpCisgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gTlBFUlJf
R0VORVJJQ19FUlJPUjsKIAotICAgIHJldHVybiBwbHVnaW5WaWV3Rm9ySW5zdGFuY2UoaW5zdGFu
Y2UpLT5nZXRWYWx1ZSh2YXJpYWJsZSwgdmFsdWUpOworICAgIHJldHVybiB2aWV3LT5nZXRWYWx1
ZSh2YXJpYWJsZSwgdmFsdWUpOwogfQogCiBOUEVycm9yIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFu
Y2UsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLS0tIFdlYktpdC9XZWJDb3Jl
L3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwLm5wYXBpLWdldHZhbHVlCTIwMDgtMDQt
MjkgMTA6MjY6MjQuMDAwMDAwMDAwICswMjAwCisrKyBXZWJLaXQvV2ViQ29yZS9wbHVnaW5zL2d0
ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkyMDA4LTA0LTI5IDEzOjIyOjM4LjAwMDAwMDAwMCArMDIw
MApAQCAtMzMsNiArMzMsMjggQEAKICNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgogI2luY2x1
ZGUgIlBsdWdpbkRlYnVnLmgiCiAKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KKworc3RhdGljIE5Q
RXJyb3IgTlBOX0dldFZhbHVlX0d0ayhOUFAgaW5zdGFuY2UsIE5QTlZhcmlhYmxlIHZhcmlhYmxl
LCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7CisgICAgICAgIGNhc2Ug
TlBOVlRvb2xraXQ6CisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAyOworICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworCisgICAgICAgIGNhc2UgTlBOVlN1cHBvcnRz
WEVtYmVkQm9vbDoKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorICAgICAgICAgICAg
KigodWludDMyICopdmFsdWUpID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgICAgICAqKCh1aW50MzIg
Kil2YWx1ZSkgPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VS
Uk9SOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlBOX0dldFZhbHVl
KGluc3RhbmNlLCB2YXJpYWJsZSwgdmFsdWUpOworICAgIH0KK30KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRm
b3JtTW9kdWxlVmVyc2lvbiYpIGNvbnN0CkBAIC0xNDIsNyArMTY0LDcgQEAgYm9vbCBQbHVnaW5Q
YWNrYWdlOjpsb2FkKCkKICAgICBtX2Jyb3dzZXJGdW5jcy5yZWxvYWRwbHVnaW5zID0gTlBOX1Jl
bG9hZFBsdWdpbnM7CiAgICAgbV9icm93c2VyRnVuY3MuZ2V0dXJsbm90aWZ5ID0gTlBOX0dldFVS
TE5vdGlmeTsKICAgICBtX2Jyb3dzZXJGdW5jcy5wb3N0dXJsbm90aWZ5ID0gTlBOX1Bvc3RVUkxO
b3RpZnk7Ci0gICAgbV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWU7CisgICAg
bV9icm93c2VyRnVuY3MuZ2V0dmFsdWUgPSBOUE5fR2V0VmFsdWVfR3RrOwogICAgIG1fYnJvd3Nl
ckZ1bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOwogICAgIG1fYnJvd3NlckZ1bmNzLmludmFs
aWRhdGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OwogICAgIG1fYnJvd3NlckZ1bmNzLmludmFs
aWRhdGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20901</attachid>
            <date>2008-04-30 04:28:36 -0700</date>
            <delta_ts>2008-04-30 04:28:36 -0700</delta_ts>
            <desc>Adds NPAPI plugin support for Gtk and Qt-x11, r32726</desc>
            <filename>npapi-plugin-gtk-qt-r32726.patch</filename>
            <type>text/plain</type>
            <size>130067</size>
            <attacher name="marcoil">marc.ordinasillopis</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyNzI2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDgtMDQt
MzAgIE1hcmMgT3JkaW5hcyBpIExsb3BpcyAgPG1hcmMub3JkaW5hc2lsbG9waXNAY29sbGFib3Jh
LmNvLnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MAorICAgICAgICBB
ZGRlZCBzdXBwb3J0IGZvciBOUEFQSSBwbHVnaW5zIG9uIEd0ayBhbmQgUXQteDExIHBvcnRzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIFh0IGxpYnJhcnkuCisKIDIwMDgtMDQt
MjkgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBCVUlMRCBG
SVggZm9yIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzMjcyNikKKysrIEdOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDcgQEAgZW5kaWYKIAogaWYgVEFS
R0VUX1gxMQogZ2xvYmFsX2NwcGZsYWdzICs9IC1EWFBfVU5JWAord2ViY29yZV9saWJhZGQgKz0g
LWxYdAogZW5kaWYKIAogaWYgIUVOQUJMRV9ERUJVRwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMyNzI2KQorKysgV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMzkgQEAKKzIwMDgtMDQt
MzAgIE1hcmMgT3JkaW5hcyBpIExsb3BpcyAgPG1hcmMub3JkaW5hc2lsbG9waXNAY29sbGFib3Jh
LmNvLnVrPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MAorICAgICAgICBB
ZGRlZCBzdXBwb3J0IGZvciBOUEFQSSBwbHVnaW5zIG9uIEd0ayBhbmQgUXQteDExIHBvcnRzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIEd0ayBwbHVnaW4gZmlsZXMuCisgICAg
ICAgICogV2ViQ29yZS5wcm86IEFkZGVkIFF0IHBsdWdpbnMgZmlsZXMsIGRlZmluZWQgWFBfVU5J
WCBhbmQKKyAgICAgICAgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEkKKyAgICAgICAgKiBicmlk
Z2UvbnBydW50aW1lX2ludGVybmFsLmg6IEFkZGl0aW9uYWwgdW5kZWZzIHRoYXQgY29uZmxpY3QK
KyAgICAgICAgd2l0aCBRdCBoZWFkZXJzLgorICAgICAgICAqIHBhZ2UvZ3RrL0ZyYW1lR3RrLmNw
cDogQ3JlYXRlIGpzIGJpbmRpbmdzIGZvciBQbHVnaW5WaWV3LgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KToKKyAgICAgICAgKiBwYWdlL3F0
L0ZyYW1lUXQuY3BwOiBDcmVhdGUganMgYmluZGluZ3MgZm9yIFBsdWdpblZpZXcuCisgICAgICAg
IChXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpkaXNjb25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6IFF0IEZpbGVTeXN0ZW0gaW1wbGVtZW50YXRpb24u
CisgICAgICAgICogcGxhdGZvcm0vV2lkZ2V0Lmg6IE1lbWJlcnMgdG8gZGlmZmVyZW50aWF0ZSBi
ZXR3ZWVuIFF0IHBsdWdpbnMgYW5kCisgICAgICAgIE5QQVBJIG9uZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6YWRkQ2hpbGQpOiBTZXQgY29udGFpbmluZyB3aW5kb3cgYmVmb3JlIGNhbGxpbmcgc2V0UGFy
ZW50LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1v
dmVkIGltcGxlbWVudGVkIGZ1bmN0aW9ucy4KKyAgICAgICAgKFBsdWdpblZpZXc6OmludmFsaWRh
dGVSZWdpb24pOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHA6IEltcGxl
bWVudGVkIGZ1bmN0aW9ucyBuZWNlc3NhcnkgZm9yCisgICAgICAgIE5QQVBJIHBsdWdpbnMuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpj
bG9zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVUb0ZpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6dW5sb2FkTW9kdWxlKTogRGVsZXRlIG1vZHVsZSBpZiB1bmxvYWRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOiBSZW1vdmVkIGltcGxlbWVudGVk
IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHA6IERpZmZlcmVu
dGlhdGUgYmV0d2VlbiBRdCBwbHVnaW5zIGFuZAorICAgICAgICBOUEFQSSBvbmVzLgorICAgICAg
ICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0ZTo6V2lkZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OmlzTlBBUElQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRJc05QQVBJUGx1Z2luKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6flBsdWdpblBhY2thZ2UpOiBVbmxvYWQg
dGhlIG1vZHVsZSBiZWZvcmUKKyAgICAgICAgZGVzdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5QYWNrYWdlOjpjb21wYXJlKTogTW92ZWQgaGVyZSBhcyBpdCdzIHBsYXRmb3JtCisg
ICAgICAgIGluZGVwZW5kZW50LgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6IE1v
dmVkIHBsYXRmb3JtLWluZGVwZW5kZW50IGZ1bmN0aW9ucyBoZXJlLgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6UGx1Z2luVmlldyk6IEluaXRpYWxpemUgbV9ucFdpbmRvdy53c19pbmZv
IG9uCisgICAgICAgIFVuaXggcGxhdGZvcm1zLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmll
dzo6ZnJlZVN0cmluZ0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0c1dpdGhCbGFua0xp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6bG9jYXRpb25BZnRlckZpcnN0QmxhbmtMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRFT0wpOgorICAgICAgICAoV2ViQ29yZTo6Y2FwaXRhbGl6ZVJG
QzgyMkhlYWRlckZpZWxkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVJGQzgyMkhlYWRl
ckZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVQb3N0KToKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuaDogTW92ZWQgcGxhdGZvcm0taW5kZXBlbmRlbnQg
ZnVuY3Rpb25zIGhlcmUuCisgICAgICAgIEFkZGVkIG1lbWJlciB0byBzaWduYWwgcGx1Z2luIG5l
ZWRzIFhFbWJlZCBleHRlbnNpb24uCisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0
ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisgICAgICAgICogcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YWJhc2VHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3RvcnkpOgorICAgICAgICAqIHBs
dWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5QYWNrYWdlOjpmZXRjaEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpoYXNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblBhY2thZ2U6OmVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blBhY2thZ2U6OmNvbXBhcmVGaWxlVmVyc2lvbik6CisgICAgICAgICogcGx1Z2lucy9ndGsvUGx1
Z2luVmlld0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6dXBk
YXRlV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNldEZvY3VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luVmlldzo6aGlkZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OnNldE5QV2luZG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjphdHRh
Y2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpkZXRhY2hGcm9tV2lu
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6dXNlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZp
ZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpn
ZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojpmb3JjZVJlZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3Ojp+UGx1Z2luVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpwbHVn
X3JlbW92ZWRfY2IpOiBBZGRlZCBjYWxsYmFjayB0byBoYW5kbGUgcGx1ZyByZW1vdmFsLgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgICogcGx1Z2lucy9ndGsv
eGVtYmVkLmg6IEFkZGVkLgorICAgICAgICAqIHBsdWdpbnMvbnBhcGkuY3BwOgorICAgICAgICAo
TlBOX0dldFZhbHVlKTogUmV0dXJuIGVycm9yIGlmIG5vIHZpZXcgcHJlc2VudC4KKyAgICAgICAg
KiBwbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5E
YXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpyZWZyZXNo
KToKKyAgICAgICAgKiBwbHVnaW5zL3F0L1BsdWdpbkRhdGFiYXNlUXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpnZXRQbHVnaW5QYXRoc0luRGlyZWN0b3Jp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkUXRXZWJLaXRQbHVnaW5EaXJlY3Rvcmllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbHVnaW5EaXJlY3Rvcmllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVnaW5EaXJlY3Rvcnkp
OgorICAgICAgICAqIHBsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MpOgorICAgICAgICAo
V2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6ZmV0Y2hJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblBhY2thZ2U6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUGFja2FnZTo6aGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjplcXVhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpjb21wYXJlRmlsZVZlcnNpb24pOgorICAgICAgICAqIHBs
dWdpbnMvcXQvUGx1Z2luVmlld1F0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVn
aW5WaWV3Ojp1cGRhdGVXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2V0
Rm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c2hvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmhhbmRsZUtleWJvYXJkRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRQYXJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6c2V0TlBXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
blZpZXc6OmF0dGFjaFRvV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmRl
dGFjaEZyb21XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3Ojp1c2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpblZpZXc6OmdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Zm9yY2VSZWRyYXcpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6flBsdWdpblZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luVmlldzo6aW5pdCk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdp
bi5jcHA6IE1vdmVkIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUKKyAgICAgICAgdG8gcGx1Z2lu
cy9QbHVnaW5QYWNrYWdlLmNwcAorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwOiBNb3ZlZCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBjb2RlIHRvCisgICAgICAgIHBsdWdpbnMv
UGx1Z2luVmlldy5jcHAKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblZpZXc6OnN0b3ApOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6aGFuZGxlUG9zdFJlYWRGaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsdWdpblZpZXc6OmdldFZhbHVlKTogTW92ZWQgdGhpcyBmdW5jdGlvbiB0byBl
YWNoIHBsYXRmb3JtLgorCiAyMDA4LTA0LTI5ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KIAogICAgICAgICBJbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBtYXNrcyBieSBhZGRpbmcg
Y29kZSB0byBzZXQgbW9yZSBwcmVjaXNlIGNsaXBzIG9uIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXJz
CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQko
d29ya2luZyBjb3B5KQpAQCAtOTI0LDcgKzkyNCwxMCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1
Z2luVmlldy5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ucGFwaS5jcHAgXAorCVdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
RGF0YWJhc2VHdGsuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwIFwKIAlXZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9iaWRp
LmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwIFwKQEAgLTk4Niw2ICs5
ODksMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgXAog
CVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCitpZiBUQVJHRVRfWDExCit3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAorCVdlYkNvcmUvcGx1Z2lucy9ndGsvZ3RrMnh0YmluLmMKK2VuZGlmCiAKIHdl
YmtpdGd0a19oZWFkZXJzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
aCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS5wcm8JKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMCBAQCBpbmNsdWRlKCQkUFdELy4uL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpCiAjTElCUyArPSAtTCQkT1VUUFVUX0RJUi9saWIgLWxKYXZhU2NyaXB0Q29y
ZQogCiBxdC1wb3J0IHsKKyAgICB1bml4IHsKKyAgICAgICAgREVGSU5FUyArPSBYUF9VTklYIEVO
QUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEKKyAgICB9CisKIFJFU09VUkNFUyArPSBcCiAgICAg
ICAgICAgICAkJFBXRC8uLi9XZWJDb3JlL3BhZ2UvaW5zcGVjdG9yL1dlYktpdC5xcmMgXAogICAg
ICAgICAgICAgJCRQV0QvLi4vV2ViQ29yZS9SZXNvdXJjZXMvV2ViS2l0UmVzb3VyY2VzLnFyYwpA
QCAtMTA0OSw3ICsxMDUzLDEyIEBAIHF0LXBvcnQgewogICAgIC4uL1dlYktpdC9xdC9BcGkvcXdl
Ymhpc3RvcnlpbnRlcmZhY2UuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5m
YWN0b3J5LmNwcAogCi0gICAgdW5peDogU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9TeXN0ZW1UaW1l
UXQuY3BwCisgICAgdW5peDogeworICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL3F0L1N5c3Rl
bVRpbWVRdC5jcHAgXAorICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luRGF0YWJh
c2VRdC5jcHAgXAorICAgICAgICAgICAgICAgICAgIHBsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0
LmNwcCBcCisgICAgICAgICAgICAgICAgICAgcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCisg
ICAgfQogICAgIGVsc2U6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVXaW4uY3Bw
CiAKICAgICAjIEZpbGVzIGJlbG9uZ2luZyB0byB0aGUgUXQgNC4zIGJ1aWxkCkBAIC0xMDY4LDYg
KzEwNzcsNyBAQCBxdC1wb3J0IHsKIH0KIAogZ3RrLXBvcnQgeworICAgIElOQ0xVREVQQVRIICs9
IC4uL1dlYkNvcmUvcGx1Z2lucy9ndGsKICAgICBIRUFERVJTICs9IFwKICAgICAgICAgLi4vV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggXAogICAgICAgICAuLi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggXApJbmRleDogV2ViQ29yZS9icmlkZ2UvbnBy
dW50aW1lX2ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbnBydW50aW1l
X2ludGVybmFsLmgJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9icmlkZ2UvbnBydW50aW1l
X2ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IENvbGxhYm9yYSwgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA4IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM4LDQgKzM4LDEzIEBACiAgICAgI3VuZGVmIEF1dG8K
ICAgICAjdW5kZWYgQ29tcGxleAogICAgICN1bmRlZiBTdGF0dXMKKyAgICAjdW5kZWYgQ3Vyc29y
U2hhcGUKKyAgICAjdW5kZWYgRm9jdXNJbgorICAgICN1bmRlZiBGb2N1c091dAorICAgICN1bmRl
ZiBLZXlQcmVzcworICAgICN1bmRlZiBLZXlSZWxlYXNlCisgICAgI3VuZGVmIFVuc29ydGVkCisg
ICAgI3VuZGVmIEJvb2wKKyAgICAjdW5kZWYgRm9udENoYW5nZQorICAgICN1bmRlZiBHcmF5U2Nh
bGUKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDMyNzI2KQorKysg
V2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MzAsMTUgKzMxLDIxIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgImtqc19wcm94eS5o
IgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgInJ1bnRpbWUuaCIKIAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8S0pTOjpCaW5kaW5nczo6SW5zdGFuY2U+
IEZyYW1lOjpjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQorUGFzc1JlZlB0
cjxLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZT4gRnJhbWU6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIDA7CisgICAgLy8gRklYTUU6IElkZWFsbHkgd2UnZCBoYXZlIGFuIGlzUGx1Z2luVmlldygp
IGhlcmUgYnV0IHdlIGNhbid0IGFkZCB0aGF0IHRvIHRoZSBvcGVuIHNvdXJjZSB0cmVlIHJpZ2h0
IG5vdy4KKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KS0+YmluZGluZ0lu
c3RhbmNlKCk7CiB9CiAKIHZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkK
SW5kZXg6IFdlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvcXQvRnJhbWVRdC5jcHAJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9wYWdlL3F0
L0ZyYW1lUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpA
QCAtMzQsNiArMzUsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC05OSw2
ICsxMDIsMTEgQEAgc3RhdGljIHZvaWQgZG9TY3JvbGwoY29uc3QgUmVuZGVyT2JqZWN0KgogCiBQ
YXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6Okluc3RhbmNlPiBGcmFtZTo6Y3JlYXRlU2NyaXB0SW5z
dGFuY2VGb3JXaWRnZXQoV2ViQ29yZTo6V2lkZ2V0KiB3aWRnZXQpCiB7CisgICAgaWYgKHdpZGdl
dC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHdpZGdldC0+aXNO
UEFQSVBsdWdpbigpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KHdp
ZGdldCktPmJpbmRpbmdJbnN0YW5jZSgpOworCiAgICAgUVdpZGdldCogbmF0aXZlV2lkZ2V0ID0g
d2lkZ2V0LT5uYXRpdmVXaWRnZXQoKTsKICAgICBpZiAoIW5hdGl2ZVdpZGdldCkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC0xMDcsMTAgKzExNSwxMiBAQCBQYXNzUmVmUHRyPEtKUzo6QmluZGluZ3M6
Okluc3RhbmNlPiBGcmFtCiAKIHZvaWQgRnJhbWU6OmNsZWFyUGxhdGZvcm1TY3JpcHRPYmplY3Rz
KCkKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEZyYW1lOjpkaXNjb25uZWN0
UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKIHsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBE
cmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9G
aWxlU3lzdGVtLmgJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lz
dGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEwIEBACiAjaWYgUExBVEZPUk0oR1RL
KQogI2luY2x1ZGUgPGdtb2R1bGUuaD4KICNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1
ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFMaWJyYXJ5PgorI2VuZGlmCiAKICNpbmNsdWRlIDx0aW1l
Lmg+CiAKQEAgLTY3LDYgKzcxLDExIEBAIHN0cnVjdCBQbGF0Zm9ybU1vZHVsZVZlcnNpb24gewog
ICAgIH0KIAogfTsKKyNlbGlmIFBMQVRGT1JNKFFUKQordHlwZWRlZiBRRmlsZSogUGxhdGZvcm1G
aWxlSGFuZGxlOwordHlwZWRlZiBRTGlicmFyeSogUGxhdGZvcm1Nb2R1bGU7Citjb25zdCBQbGF0
Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSA9IDA7Cit0eXBlZGVmIHVu
c2lnbmVkIFBsYXRmb3JtTW9kdWxlVmVyc2lvbjsKICNlbHNlCiB0eXBlZGVmIGludCBQbGF0Zm9y
bUZpbGVIYW5kbGU7CiAjaWYgUExBVEZPUk0oR1RLKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9X
aWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCShyZXZpc2lv
biAzMjcyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3Niw2ICsxNzYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgc2V0TmF0aXZlV2lkZ2V0
KFFXaWRnZXQgKndpZGdldCk7CiAgICAgICAgIFFXaWRnZXQqIG5hdGl2ZVdpZGdldCgpIGNvbnN0
OwogCisgICAgICAgIHZvaWQgc2V0SXNOUEFQSVBsdWdpbihib29sKTsKKyAgICAgICAgYm9vbCBp
c05QQVBJUGx1Z2luKCkgY29uc3Q7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChT
Y3JvbGxWaWV3Kik7CiAgICAgICAgIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMzI3MjYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDExICs0
NjksMTEgQEAgdm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IAogCiB2b2lk
IFNjcm9sbFZpZXc6OmFkZENoaWxkKFdpZGdldCogY2hpbGQpCiB7Ci0gICAgY2hpbGQtPnNldFBh
cmVudCh0aGlzKTsKICAgICBjaGlsZC0+c2V0Q29udGFpbmluZ1dpbmRvdyhjb250YWluaW5nV2lu
ZG93KCkpOworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CiAgICAgbV9kYXRhLT5jaGlsZHJl
bi5hZGQoY2hpbGQpOwogCi0gICAgaWYgKGNoaWxkLT5ndGtXaWRnZXQoKSkKKyAgICBpZiAoY2hp
bGQtPmd0a1dpZGdldCgpICYmICFHVEtfSVNfU09DS0VUKGNoaWxkLT5ndGtXaWRnZXQoKSkpCiAg
ICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygp
KSwgY2hpbGQtPmd0a1dpZGdldCgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzMjcyNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDgg
KzMzLDYgQEAKICNpbmNsdWRlICJGVFBEaXJlY3RvcnlEb2N1bWVudC5oIgogI2luY2x1ZGUgIktV
UkwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCkBAIC01OCwyOCArNTYsNyBAQCBWZWN0b3I8Y2hh
cj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0CiAvKiBDb21wbGV0ZWx5IGVtcHR5IHN0dWJz
IChtb3N0bHkgdG8gYWxsb3cgRFJUIHRvIHJ1bik6ICovCiAvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWludCBQbHVnaW5QYWNrYWdl
Ojpjb21wYXJlKGNvbnN0IFBsdWdpblBhY2thZ2UmKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7
IHJldHVybiAwOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmZldGNoSW5mbygpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci11bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotYm9vbCBQbHVnaW5QYWNrYWdl
OjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiwgY29uc3QgUGx1Z2luUGFja2FnZSYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIFBsdWdpblBhY2thZ2U6OmxvYWQo
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBQbHVnaW5WaWV3Ojpz
ZXROUFdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotY29u
c3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQotdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlZ2lvbihOUFJlZ2lv
bikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNldEZvY3VzKCkgeyBXaWRn
ZXQ6OnNldEZvY3VzKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6c2hvdygpIHsgV2lkZ2V0OjpzaG93
KCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGlkZSgpIHsgV2lkZ2V0OjpoaWRlKCk7IH0KLXZvaWQg
UGx1Z2luVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyog
dmlldykgeyBXaWRnZXQ6OnNldFBhcmVudCh2aWV3KTsgfQotdm9pZCBQbHVnaW5WaWV3OjphdHRh
Y2hUb1dpbmRvdygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpkZXRh
Y2hGcm9tV2luZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci1OUEVycm9yIFBsdWdpblZpZXc6
OmhhbmRsZVBvc3QoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1aW50MzIsIGNvbnN0IGNoYXIq
LCBib29sLCB2b2lkKiwgYm9vbCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTlBF
UlJfR0VORVJJQ19FUlJPUjsgfQotdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVXaW5kb3coKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZp
ZXc6OmhhbmRsZU1vdXNlRXZlbnQoTW91c2VFdmVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQot
UGx1Z2luVmlldzo6flBsdWdpblZpZXcoKSB7fQogCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdD
b2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5n
Q29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KQEAgLTkzLDggKzcwLDUgQEAgU3Ry
aW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBubwogCiBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3Ry
aW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogCi12b2lkIFBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpbkRhdGE6OnJl
ZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLQogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3F0L0ZpbGVTeXN0ZW1RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9GaWxlU3lzdGVtUXQuY3BwCShyZXZpc2lvbiAzMjcyNikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
cXQvRmlsZVN5c3RlbVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQAogCiAj
aW5jbHVkZSA8UURhdGVUaW1lPgogI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFUZW1wb3Jh
cnlGaWxlPgogI2luY2x1ZGUgPFFGaWxlSW5mbz4KKyNpbmNsdWRlIDxRRGF0ZVRpbWU+CiAjaW5j
bHVkZSA8UURpcj4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTAsMTQgKzkyLDM5IEBAIFN0
cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXQKIAogU3RyaW5nIGRpcmVjdG9y
eU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBTdHJpbmcoUUZpbGVJbmZvKHBhdGgpLmJhc2VO
YW1lKCkpOworfQorCitDU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IGNoYXIqIHByZWZp
eCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgUUZpbGUgKnRlbXAgPSBuZXcg
UVRlbXBvcmFyeUZpbGUoUVN0cmluZyhwcmVmaXgpKTsKKyAgICBpZiggdGVtcC0+b3BlbihRSU9E
ZXZpY2U6OlJlYWRXcml0ZSkgKSB7CisgICAgICAgIGhhbmRsZSA9IHRlbXA7CisgICAgICAgIHJl
dHVybiBTdHJpbmcodGVtcC0+ZmlsZU5hbWUoKSkudXRmOCgpOworICAgIH0KKyAgICBoYW5kbGUg
PSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworICAgIHJldHVybiAwOworfQorCit2b2lkIGNs
b3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZihoYW5kbGUpIHsK
KyAgICAgICAgaGFuZGxlLT5jbG9zZSgpOworICAgICAgICBkZWxldGUgaGFuZGxlOworICAgIH0K
K30KKworaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgaWYoaGFuZGxlICYmIGhhbmRsZS0+ZXhpc3Rz
KCkgJiYgaGFuZGxlLT5pc1dyaXRhYmxlKCkpIHsKKyAgICAgICAgaGFuZGxlLT53cml0ZShkYXRh
LCBsZW5ndGgpOworICAgIH0KIH0KIAotYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUp
Citib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1vZHVsZS0+dW5sb2FkKCkp
CisgICAgICAgIGRlbGV0ZSBtb2R1bGU7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
cXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw0
MSArNzIsMTEgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLXZvaWQgUGx1Z2luRGF0
YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IH0KLVZlY3RvcjxTdHJpbmc+IFBsdWdpbkRhdGFiYXNlOjpk
ZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOyB9Ci1ib29sIFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRp
cmVjdG9yeShjb25zdCBTdHJpbmcmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsg
fQotaW50IFBsdWdpblBhY2thZ2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KLWJvb2wgUGx1Z2luUGFja2FnZTo6ZmV0
Y2hJbmZvKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXVuc2lnbmVkIFBs
dWdpblBhY2thZ2U6Omhhc2goKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9
Ci1ib29sIFBsdWdpblBhY2thZ2U6OmVxdWFsKGNvbnN0IFBsdWdpblBhY2thZ2UmLCBjb25zdCBQ
bHVnaW5QYWNrYWdlJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLWJvb2wg
UGx1Z2luUGFja2FnZTo6bG9hZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9
Ci12b2lkIFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JikgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9Ci1jb25zdCBjaGFyKiBQbHVnaW5WaWV3Ojp1c2VyQWdlbnQoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci12b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVS
ZWN0KE5QUmVjdCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjppbnZh
bGlkYXRlUmVnaW9uKE5QUmVnaW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2lu
Vmlldzo6Zm9yY2VSZWRyYXcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGx1Z2luVmll
dzo6c2V0Rm9jdXMoKSB7IFdpZGdldDo6c2V0Rm9jdXMoKTsgfQotdm9pZCBQbHVnaW5WaWV3Ojpz
aG93KCkgeyBXaWRnZXQ6OnNob3coKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpoaWRlKCkgeyBXaWRn
ZXQ6OmhpZGUoKTsgfQotdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsdWdpblZpZXc6OnNl
dFBhcmVudChTY3JvbGxWaWV3KiB2aWV3KSB7IFdpZGdldDo6c2V0UGFyZW50KHZpZXcpOyB9Ci12
b2lkIFBsdWdpblZpZXc6OmF0dGFjaFRvV2luZG93KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12
b2lkIFBsdWdpblZpZXc6OmRldGFjaEZyb21XaW5kb3coKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
LU5QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdChjb25zdCBjaGFyKiwgY29uc3QgY2hhcios
IHVpbnQzMiwgY29uc3QgY2hhciosIGJvb2wsIHZvaWQqLCBib29sLCBib29sKSB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOyB9Ci12b2lkIFBsdWdpblZpZXc6
OnVwZGF0ZVdpbmRvdygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KLXZvaWQgUGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KikgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Ci1QbHVnaW5WaWV3Ojp+UGx1Z2luVmlldygpIHt9Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkS2V5U2l6ZXMoKSB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOyB9CiBTdHJpbmcgc2lnbmVk
UHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3Qg
U3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkgeyByZXR1cm4gU3RyaW5n
KCk7IH0KIAotQ1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBjaGFyKiBwcmVmaXgsIFBs
YXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKSB7IG5vdEltcGxlbWVudGVkKCk7IGhhbmRsZSA9IGlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7IHJldHVybiAwOyB9Ci12b2lkIGNsb3NlRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUmKSB7IG5vdEltcGxlbWVudGVkKCk7IH07Ci1pbnQgd3JpdGVUb0ZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IHJldHVy
biAtMTsgfTsKLQogI2lmICFkZWZpbmVkKFFfT1NfV0lOKQogLy8gZGVmaW5lZCBpbiB3aW4vU3lz
dGVtVGltZVdpbi5jcHAsIHdoaWNoIGlzIGNvbXBpbGVkIGZvciB0aGUgUXQvV2luZG93cyBwb3J0
CiBmbG9hdCB1c2VySWRsZVRpbWUoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwLjA7IH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvV2lkZ2V0UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vcXQvV2lkZ2V0UXQuY3BwCShyZXZpc2lvbiAzMjcyNikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vcXQvV2lkZ2V0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3
IEBAIHN0cnVjdCBXaWRnZXRQcml2YXRlCiAgICAgICAgICwgZW5hYmxlZCh0cnVlKQogICAgICAg
ICAsIHN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKQogICAgICAgICAsIG1fd2lkZ2V0KDApCisg
ICAgICAgICwgaXNOUEFQSVBsdWdpbigwKQogICAgICAgICAsIG1fcGFyZW50U2Nyb2xsVmlldygw
KSB7IH0KICAgICB+V2lkZ2V0UHJpdmF0ZSgpIHt9CiAKQEAgLTY5LDYgKzcwLDcgQEAgc3RydWN0
IFdpZGdldFByaXZhdGUKIAogICAgIGJvb2wgZW5hYmxlZDsKICAgICBib29sIHN1cHByZXNzSW52
YWxpZGF0aW9uOworICAgIGJvb2wgaXNOUEFQSVBsdWdpbjsKICAgICBJbnRSZWN0IG1fZ2VvbWV0
cnk7CiAgICAgUVdpZGdldCAqbV93aWRnZXQ7IC8vZm9yIHBsdWdpbnMKICAgICBTY3JvbGxWaWV3
ICptX3BhcmVudFNjcm9sbFZpZXc7CkBAIC0xNDIsNiArMTQ0LDE2IEBAIHZvaWQgV2lkZ2V0Ojpz
ZXROYXRpdmVXaWRnZXQoUVdpZGdldCAqd2kKICAgICBkYXRhLT5tX3dpZGdldCA9IHdpZGdldDsK
IH0KIAorYm9vbCBXaWRnZXQ6OmlzTlBBUElQbHVnaW4oKSBjb25zdAoreworICAgIHJldHVybiBk
YXRhLT5pc05QQVBJUGx1Z2luOworfQorCit2b2lkIFdpZGdldDo6c2V0SXNOUEFQSVBsdWdpbihi
b29sIGlzKQoreworICAgIGRhdGEtPmlzTlBBUElQbHVnaW4gPSBpczsKK30KKwogdm9pZCBXaWRn
ZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCAqLCBjb25zdCBJbnRSZWN0ICZyZWN0KQogewogfQpJ
bmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAkocmV2aXNpb24gMzI3MjYpCisrKyBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDE2ICsyNywzMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKyNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQbHVnaW5QYWNrYWdlOjp+UGx1Z2luUGFja2FnZSgpCiB7CisgICAgLy8g
VGhpcyBkZXN0cnVjdG9yIGdldHMgY2FsbGVkIGR1cmluZyByZWZyZXNoKCkgaWYgUGx1Z2luRGF0
YWJhc2UncworICAgIC8vIFBsdWdpblNldCBoYXNoIGlzIGFscmVhZHkgcG9wdWxhdGVkLCBhcyBp
dCByZW1vdmVzIGl0ZW1zIGZyb20KKyAgICAvLyB0aGUgaGFzaCB0YWJsZS4gQ2FsbGluZyB0aGUg
ZGVzdHJ1Y3RvciBvbiBhIGxvYWRlZCBwbHVnLWluIG9mCisgICAgLy8gY291cnNlIHdvdWxkIGNh
dXNlIGEgY3Jhc2gsIHNvIHdlIGNoZWNrIHRvIGNhbGwgdW5sb2FkIGJlZm9yZSB3ZQorICAgIC8v
IEFTU0VSVC4KKyAgICAvLyBGSVhNRTogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRv
IGZpeCB0aGlzLgorICAgIGlmIChtX2xvYWRDb3VudCA9PSAwKQorCSAgICB1bmxvYWRXaXRob3V0
U2h1dGRvd24oKTsKKyAgICBlbHNlCisJICAgIHVubG9hZCgpOworCiAgICAgQVNTRVJUKCFtX2lz
TG9hZGVkKTsKIH0KIApAQCAtNTgsNiArNzIsMzEgQEAgdm9pZCBQbHVnaW5QYWNrYWdlOjpmcmVl
TGlicmFyeVRpbWVyRmlyZQogICAgIG1fbW9kdWxlID0gMDsKIH0KIAorCitpbnQgUGx1Z2luUGFj
a2FnZTo6Y29tcGFyZShjb25zdCBQbHVnaW5QYWNrYWdlJiBjb21wYXJlVG8pIGNvbnN0Cit7Cisg
ICAgLy8gU29ydCBwbHVnLWlucyB0aGF0IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBmaXJzdC4K
KyAgICBib29sIEFhbGxvd3NNdWx0aXBsZUluc3RhbmNlcyA9ICFxdWlya3MoKS5jb250YWlucyhQ
bHVnaW5RdWlya0RvbnRBbGxvd011bHRpcGxlSW5zdGFuY2VzKTsKKyAgICBib29sIEJhbGxvd3NN
dWx0aXBsZUluc3RhbmNlcyA9ICFjb21wYXJlVG8ucXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVp
cmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7CisgICAgaWYgKEFhbGxvd3NNdWx0aXBsZUlu
c3RhbmNlcyAhPSBCYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMpCisgICAgICAgIHJldHVybiBBYWxs
b3dzTXVsdGlwbGVJbnN0YW5jZXMgPyAtMSA6IDE7CisKKyAgICAvLyBTb3J0IHBsdWctaW5zIGlu
IGEgcHJlZmVycmVkIHBhdGggZmlyc3QuCisgICAgYm9vbCBBaXNJblByZWZlcnJlZERpcmVjdG9y
eSA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShwYXJlbnREaXJl
Y3RvcnkoKSk7CisgICAgYm9vbCBCaXNJblByZWZlcnJlZERpcmVjdG9yeSA9IFBsdWdpbkRhdGFi
YXNlOjppc1ByZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5
KCkpOworICAgIGlmIChBaXNJblByZWZlcnJlZERpcmVjdG9yeSAhPSBCaXNJblByZWZlcnJlZERp
cmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIEFpc0luUHJlZmVycmVkRGlyZWN0b3J5ID8gLTEgOiAx
OworCisgICAgaW50IGRpZmYgPSBzdHJjbXAobmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVU
by5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGRpZmYpCisgICAgICAgIHJldHVybiBk
aWZmOworCisgICAgaWYgKGRpZmYgPSBjb21wYXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNp
b24oKSkpCisgICAgICAgIHJldHVybiBkaWZmOworCisgICAgcmV0dXJuIHN0cmNtcChwYXJlbnRE
aXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRm
OCgpLmRhdGEoKSk7Cit9CisKIFBsdWdpblBhY2thZ2U6OlBsdWdpblBhY2thZ2UoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCB0aW1lX3QmIGxhc3RNb2RpZmllZCkKICAgICA6IG1fcGF0aChwYXRo
KQogICAgICwgbV9tb2R1bGVWZXJzaW9uKDApCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
UGFja2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmgJ
KHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDEwICsxMDMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IH07CiAKICAgICBzdHJ1Y3QgUGx1Z2luUGFja2FnZUhhc2ggewotICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBpbnQga2V5KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFBsdWdp
blBhY2thZ2UqPihrZXkpLT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgdWludHB0cl90IGtleSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNr
YWdlKj4oa2V5KS0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IFJlZlB0cjxQbHVnaW5QYWNrYWdlPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQogCi0g
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikgeyByZXR1
cm4gZXF1YWwocmVpbnRlcnByZXRfY2FzdDxQbHVnaW5QYWNrYWdlKj4oYSksIHJlaW50ZXJwcmV0
X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGIpKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCB1aW50cHRyX3QgYSwgY29uc3QgdWludHB0cl90IGIpIHsgcmV0dXJuIGVxdWFsKHJlaW50
ZXJwcmV0X2Nhc3Q8UGx1Z2luUGFja2FnZSo+KGEpLCByZWludGVycHJldF9jYXN0PFBsdWdpblBh
Y2thZ2UqPihiKSk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFBs
dWdpblBhY2thZ2U+JiBhLCBjb25zdCBSZWZQdHI8UGx1Z2luUGFja2FnZT4mIGIpIHsgcmV0dXJu
IFBsdWdpblBhY2thZ2U6OmVxdWFsKCphLmdldCgpLCAqYi5nZXQoKSk7IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKICAg
ICB9OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMzI3MjYpCisrKyBXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MjAsNyArMTIwLDEwIEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCAK
ICAgICAgICAgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOwogCiAgICAgdXBkYXRlV2lu
ZG93KCk7CisKKyNpZiBQTEFURk9STShXSU4pCiAgICAgc2V0TlBXaW5kb3dSZWN0KHJlY3QpOwor
I2VuZGlmCiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKQEAg
LTM5Myw1NSArMzk2LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdGF0dXMoY29uc3QgY2hhciogbWVz
cwogICAgICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0U3RhdHVzYmFyVGV4dChtX3BhcmVudEZyYW1l
LCBTdHJpbmcobWVzc2FnZSkpOwogfQogCi1OUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5Q
TlZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKLXsKLSAgICBpZiAobV9pc0phdmFTY3Jp
cHRQYXVzZWQpCi0gICAgICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwotCi0gICAgc3dp
dGNoICh2YXJpYWJsZSkgewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgICAg
ICBjYXNlIE5QTlZXaW5kb3dOUE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7Ci0K
LSAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwg
YXMgZGVzY3JpYmVkIGhlcmU6IDxodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdp
bi9ucHJ1bnRpbWUuaHRtbD4KLSAgICAgICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCi0g
ICAgICAgICAgICAgICAgX05QTl9SZXRhaW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKLQot
ICAgICAgICAgICAgdm9pZCoqIHYgPSAodm9pZCoqKXZhbHVlOwotICAgICAgICAgICAgKnYgPSB3
aW5kb3dTY3JpcHRPYmplY3Q7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnRO
UE9iamVjdDogewotICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7
Ci0KLSAgICAgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBt
X2VsZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShv
YmplY3RUYWcpKQotICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19j
YXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKLQotICAg
ICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBk
ZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25w
cnVudGltZS5odG1sPgotICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKLSAgICAg
ICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOwotCi0gICAg
ICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiopdmFsdWU7Ci0gICAgICAgICAgICAqdiA9IHBsdWdp
blNjcmlwdE9iamVjdDsKLQotICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAg
ICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogewotICAg
ICAgICAgICAgUGxhdGZvcm1XaWRnZXQqIHcgPSByZWludGVycHJldF9jYXN0PFBsYXRmb3JtV2lk
Z2V0Kj4odmFsdWUpOwotCi0gICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOwotICAgICAgICB9Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKLSAgICB9Ci19
Ci0KIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWUoTlBQVmFyaWFibGUgdmFyaWFibGUsIHZv
aWQqIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFyaWFibGUpIHsKQEAgLTU5Nyw2ICs1NTEsMTAg
QEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbQogCiAgICAgc2V0UGFy
YW1ldGVycyhwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAKKyNpZmRlZiBYUF9VTklYCisgICAg
bV9ucFdpbmRvdy53c19pbmZvID0gMDsKKyNlbmRpZgorCiAgICAgbV9tb2RlID0gbV9sb2FkTWFu
dWFsbHkgPyBOUF9GVUxMIDogTlBfRU1CRUQ7CiAKICAgICByZXNpemUoc2l6ZSk7CkBAIC02NzEs
NCArNjI5LDIyOSBAQCBQbHVnaW5WaWV3KiBQbHVnaW5WaWV3OjpjcmVhdGUoRnJhbWUqIHBhCiAg
ICAgcmV0dXJuIG5ldyBQbHVnaW5WaWV3KHBhcmVudEZyYW1lLCBzaXplLCBwbHVnaW4sIGVsZW1l
bnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlQ29weSwgbG9hZE1hbnVh
bGx5KTsKIH0KIAordm9pZCBQbHVnaW5WaWV3OjpmcmVlU3RyaW5nQXJyYXkoY2hhcioqIHN0cmlu
Z0FycmF5LCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5nQXJyYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGZh
c3RGcmVlKHN0cmluZ0FycmF5W2ldKTsKKworICAgIGZhc3RGcmVlKHN0cmluZ0FycmF5KTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHN0YXJ0c1dpdGhCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNo
YXI+JiBidWZmZXIpCit7CisgICAgcmV0dXJuIGJ1ZmZlci5zaXplKCkgPiAwICYmIGJ1ZmZlclsw
XSA9PSAnXG4nOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NhdGlvbkFmdGVyRmlyc3RCbGFu
a0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogYnl0
ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGJ1ZmZlci5zaXplKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gNDsgaSsrKSB7CisgICAg
ICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRzICJcblxuIi4KKyAgICAgICAgaWYg
KGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICBy
ZXR1cm4gaSArIDI7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBh
ZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhlIGZpcnN0IGxpbmUuCisgICAgICAg
IGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAxXSA9PSAnXG4nKSB7CisgICAgICAg
ICAgICBpICs9IDI7CisgICAgICAgICAgICBpZiAoaSA9PSAyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNbaV0gPT0gJ1xuJykKKyAgICAgICAg
ICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQgc2VuZHMgIlxyXG5cbiIgKDM4ODAz
ODcpLgorICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09ICdcbicpCisgICAgICAgICAgICAg
ICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJcclxuXHJcbiIgKDM3NTgxMTMpLgor
ICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBmaW5kRU9MKGNvbnN0IGNo
YXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBI
VFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMKKyAgICAvLyBhIENSTEYgcGFpci4g
VW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNlIExGCisgICAgLy8gaW5zdGVhZC4g
V29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBjb21iaW5hdGlvbgorICAgIC8vIG9m
IGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBzbyBmaW5kRU9MIG5lZWRzCisgICAg
Ly8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93IGFjY2VwdCBDUkxGLCBMRiBvcgor
ICAgIC8vIENSLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBOVUxMIGlmIEVPTEYgaXMgbm90
IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCisgICAgLy8gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCB0
ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIGlmIChieXRlc1tpXSA9PSAnXG4nKQorICAgICAgICAgICAgcmV0
dXJuIGJ5dGVzICsgaTsKKyAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdccicpIHsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZmZXIgYm91bmRzCisgICAgICAgICAg
ICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywgd2FpdCBmb3IKKyAgICAgICAgICAg
IC8vIG5leHQgcmVhZC4KKyAgICAgICAgICAgIGlmIChpICsgMSA9PSBsZW5ndGgpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHJldHVybiBieXRlcyArIGk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgY2Fw
aXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
Ym9vbCBjYXBpdGFsaXplQ2hhcmFjdGVyID0gdHJ1ZTsKKyAgICBTdHJpbmcgcmVzdWx0OworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAg
ICBVQ2hhciBjOworCisgICAgICAgIGlmIChjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVbaV0g
Pj0gJ2EnICYmIG5hbWVbaV0gPD0gJ3onKQorICAgICAgICAgICAgYyA9IHRvQVNDSUlVcHBlcihu
YW1lW2ldKTsKKyAgICAgICAgZWxzZSBpZiAoIWNhcGl0YWxpemVDaGFyYWN0ZXIgJiYgbmFtZVtp
XSA+PSAnQScgJiYgbmFtZVtpXSA8PSAnWicpCisgICAgICAgICAgICBjID0gdG9BU0NJSUxvd2Vy
KG5hbWVbaV0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjID0gbmFtZVtpXTsKKworICAg
ICAgICBpZiAobmFtZVtpXSA9PSAnLScpCisgICAgICAgICAgICBjYXBpdGFsaXplQ2hhcmFjdGVy
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9
IGZhbHNlOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBIVFRQSGVhZGVyTWFwIHBhcnNlUkZDODIySGVh
ZGVyRmllbGRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOworICAgIGNvbnN0IGNoYXIq
IGVvbDsKKyAgICBTdHJpbmcgbGFzdEtleTsKKyAgICBIVFRQSGVhZGVyTWFwIGhlYWRlckZpZWxk
czsKKworICAgIC8vIExvb3Agb3ZlIHJsaW5lcyB1bnRpbCB3ZSdyZSBwYXN0IHRoZSBoZWFkZXIs
IG9yIHdlIGNhbid0IGZpbmQgYW55IG1vcmUgZW5kLW9mLWxpbmVzCisgICAgd2hpbGUgKChlb2wg
PSBmaW5kRU9MKGJ5dGVzLCBsZW5ndGgpKSkgeworICAgICAgICBjb25zdCBjaGFyKiBsaW5lID0g
Ynl0ZXM7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0gZW9sIC0gYnl0ZXM7CisgICAgICAgIAor
ICAgICAgICAvLyBNb3ZlIGJ5dGVzIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHRlcm1pbmF0
b3IgYXMgcmV0dXJuZWQgYnkgZmluZEVPTC4KKyAgICAgICAgYnl0ZXMgPSBlb2wgKyAxOworICAg
ICAgICBpZiAoKCplb2wgPT0gJ1xyJykgJiYgKCpieXRlcyA9PSAnXG4nKSkKKyAgICAgICAgICAg
IGJ5dGVzKys7IC8vIFNhZmUgc2luY2UgZmluZEVPTCB3b24ndCByZXR1cm4gYSBzcGFubmluZyBD
UkxGLgorCisgICAgICAgIGxlbmd0aCAtPSAoYnl0ZXMgLSBsaW5lKTsKKyAgICAgICAgaWYgKGxp
bmVMZW5ndGggPT0gMCkKKyAgICAgICAgICAgIC8vIEJsYW5rIGxpbmU7IHdlJ3JlIGF0IHRoZSBl
bmQgb2YgdGhlIGhlYWRlcgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKCps
aW5lID09ICcgJyB8fCAqbGluZSA9PSAnXHQnKSB7CisgICAgICAgICAgICAvLyBDb250aW51YXRp
b24gb2YgdGhlIHByZXZpb3VzIGhlYWRlcgorICAgICAgICAgICAgaWYgKGxhc3RLZXkuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5k
IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBjb250aW51YXRpb24gb2YgdGhlIHByZXZp
b3VzIGhlYWRlcgorICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSBoZWFkZXJG
aWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIFN0cmluZyBuZXdWYWx1ZShsaW5l
LCBsaW5lTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtl
eSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgorICAgICAgICAgICAgY29uc3Qg
Y2hhciogY29sb247CisgICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6
JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAgICAgICAgICAgICAvLyBlbXB0eSBs
b29wCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKSAKKyAgICAg
ICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShTdHJpbmcobGlu
ZSwgY29sb24gLSBsaW5lKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOworCisgICAg
ICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gU3RyaW5n
KGNvbG9uLCBlb2wgLSBjb2xvbik7CisKKyAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWUg
PSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOworICAgICAgICAgICAgICAgIGlmICghb2xkVmFs
dWUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9sZFZhbHVl
OworICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKKyAgICAgICAgICAgICAgICAgICAg
dG1wICs9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIHZh
bHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoZWFk
ZXJGaWVsZHM7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFuZGxlUG9zdChjb25zdCBjaGFy
KiB1cmwsIGNvbnN0IGNoYXIqIHRhcmdldCwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBi
b29sIGZpbGUsIHZvaWQqIG5vdGlmeURhdGEsIGJvb2wgc2VuZE5vdGlmaWNhdGlvbiwgYm9vbCBh
bGxvd0hlYWRlcnMpCit7CisgICAgaWYgKCF1cmwgfHwgIWxlbiB8fCAhYnVmKQorICAgICAgICBy
ZXR1cm4gTlBFUlJfSU5WQUxJRF9QQVJBTTsKKworICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVM
b2FkUmVxdWVzdDsKKworICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmllbGRzOworICAgIFZlY3Rv
cjxjaGFyPiBidWZmZXI7CisgICAgCisgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgTlBFcnJvciBy
ZWFkUmVzdWx0ID0gaGFuZGxlUG9zdFJlYWRGaWxlKGJ1ZmZlciwgbGVuLCBidWYpOworICAgICAg
ICBpZihyZWFkUmVzdWx0ICE9IE5QRVJSX05PX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIHJl
YWRSZXN1bHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOworICAg
ICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOworICAgIH0KKworICAgIGNvbnN0
IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKKyAgICBpbnQgcG9zdERhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpOworCisgICAgaWYgKGFsbG93SGVhZGVycykgeworICAgICAgICBpZiAo
c3RhcnRzV2l0aEJsYW5rTGluZShidWZmZXIpKSB7CisgICAgICAgICAgICBwb3N0RGF0YSsrOwor
ICAgICAgICAgICAgcG9zdERhdGFMZW5ndGgtLTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGludCBsb2NhdGlvbiA9IGxvY2F0aW9uQWZ0ZXJGaXJzdEJsYW5rTGluZShidWZmZXIpOwor
ICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGJsYW5rIGxpbmUgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGJ1ZmZlciwg
ZXZlcnl0aGluZyBiZWZvcmUgaXMgdGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIGhlYWRlckZp
ZWxkcyA9IHBhcnNlUkZDODIySGVhZGVyRmllbGRzKGJ1ZmZlciwgbG9jYXRpb24pOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGRhdGFMZW5ndGggPSBidWZmZXIuc2l6ZSgpIC0gbG9jYXRpb247
CisKKyAgICAgICAgICAgICAgICAvLyBTb21ldGltZXMgcGx1Z2lucyBsaWtlIHRvIHNldCBDb250
ZW50LUxlbmd0aCB0aGVtc2VsdmVzIHdoZW4gdGhleSBwb3N0LAorICAgICAgICAgICAgICAgIC8v
IGJ1dCBXZWJGb3VuZGF0aW9uIGRvZXMgbm90IGxpa2UgdGhhdC4gU28gd2Ugd2lsbCByZW1vdmUg
dGhlIGhlYWRlcgorICAgICAgICAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHRydW5jYXRlIHRoZSBk
YXRhIHRvIHRoZSByZXF1ZXN0ZWQgbGVuZ3RoLgorICAgICAgICAgICAgICAgIFN0cmluZyBjb250
ZW50TGVuZ3RoID0gaGVhZGVyRmllbGRzLmdldCgiQ29udGVudC1MZW5ndGgiKTsKKworICAgICAg
ICAgICAgICAgIGlmICghY29udGVudExlbmd0aC5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxlbmd0aCA9IG1pbihjb250ZW50TGVuZ3RoLnRvSW50KCksIChpbnQpZGF0YUxlbmd0
aCk7CisgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzLnJlbW92ZSgiQ29udGVudC1MZW5ndGgi
KTsKKworICAgICAgICAgICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOworICAgICAgICAgICAg
ICAgIHBvc3REYXRhTGVuZ3RoID0gZGF0YUxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuc2V0SFRU
UE1ldGhvZCgiUE9TVCIpOworICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0VVJMKG1ha2VVUkwobV9iYXNlVVJMLCB1cmwpKTsKKyAgICBmcmFtZUxvYWRSZXF1ZXN0LnJl
c291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZHMoaGVhZGVyRmllbGRzKTsKKyAgICBm
cmFtZUxvYWRSZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnNldEhUVFBCb2R5KEZvcm1EYXRhOjpj
cmVhdGUocG9zdERhdGEsIHBvc3REYXRhTGVuZ3RoKSk7CisgICAgZnJhbWVMb2FkUmVxdWVzdC5z
ZXRGcmFtZU5hbWUodGFyZ2V0KTsKKworICAgIHJldHVybiBsb2FkKGZyYW1lTG9hZFJlcXVlc3Qs
IHNlbmROb3RpZmljYXRpb24sIG5vdGlmeURhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3MSw2ICsx
NzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldEN1cnJl
bnRQbHVnaW5WaWV3KFBsdWdpblZpZXcqKTsKICAgICAgICAgTlBFcnJvciBsb2FkKGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmLCBib29sIHNlbmROb3RpZmljYXRpb24sIHZvaWQqIG5vdGlmeURhdGEp
OwogICAgICAgICBOUEVycm9yIGhhbmRsZVBvc3QoY29uc3QgY2hhciogdXJsLCBjb25zdCBjaGFy
KiB0YXJnZXQsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgYm9vbCBmaWxlLCB2b2lkKiBu
b3RpZnlEYXRhLCBib29sIHNlbmROb3RpZmljYXRpb24sIGJvb2wgYWxsb3dIZWFkZXJzKTsKKyAg
ICAgICAgTlBFcnJvciBoYW5kbGVQb3N0UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVp
bnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1Zik7CisgICAgICAgIHN0YXRpYyB2b2lkIGZyZWVTdHJp
bmdBcnJheShjaGFyKiogc3RyaW5nQXJyYXksIGludCBsZW5ndGgpOwogICAgICAgICB2b2lkIHNl
dENhbGxpbmdQbHVnaW4oYm9vbCkgY29uc3Q7CiAgICAgICAgIFJlZlB0cjxQbHVnaW5QYWNrYWdl
PiBtX3BsdWdpbjsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwpAQCAtMjIxLDYgKzIyMywx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9hdHRhY2hlZFRvV2luZG93
OwogICAgICAgICBib29sIG1faGF2ZUluaXRpYWxpemVkOwogCisjaWYgUExBVEZPUk0oR1RLKSB8
fCBkZWZpbmVkKFFfV1NfWDExKQorICAgICAgICBib29sIG1fbmVlZHNYRW1iZWQ7CisjZW5kaWYK
KwogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgT3duUHRyPFBsdWdpbk1lc3NhZ2VUaHJvdHRs
ZXJXaW4+IG1fbWVzc2FnZVRocm90dGxlcjsKICAgICAgICAgV05EUFJPQyBtX3BsdWdpblduZFBy
b2M7CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvbnBhcGkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGx1Z2lucy9ucGFwaS5jcHAJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViQ29yZS9wbHVnaW5z
L25wYXBpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywxMSBAQCB2b2lkIE5QTl9G
b3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCiAKIE5QRXJyb3IgTlBOX0dldFZhbHVlKE5QUCBpbnN0
YW5jZSwgTlBOVmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogeworICAgIC8vIEZJWE1F
OiBBY3JvYmF0IHJlYWRlciBwbHVnaW4gY2FsbHMgTlBOX0dldFZhbHVlIGJlZm9yZSBhIFBsdWdp
blZpZXcKKyAgICAvLyBoYXMgYmVlbiBjcmVhdGVkCisgICAgaWYgKCFpbnN0YW5jZSkKKyAgICAg
ICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisKICAgICByZXR1cm4gcGx1Z2luVmlld0Zv
ckluc3RhbmNlKGluc3RhbmNlKS0+Z2V0VmFsdWUodmFyaWFibGUsIHZhbHVlKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNp
bmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKyNp
bmNsdWRlIDxzdGRpby5oPgorbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6
OmluaXRQbHVnaW5zKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFz
ZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4g
JnBsdWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIGluZm8gPSBu
ZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNb
aV07CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5m
by0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8tPmRlc2MgPSBwYWNr
YWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01h
cCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7Cisg
ICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRv
RGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFz
c0luZm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisKKyAgICAgICAg
ICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLT5kZXNjID0gaXQt
PnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCku
Z2V0KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCkKKyAg
ICAgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAgICAg
ICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lk
IFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9IFBsdWdp
bkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKK30KKwor
fTsKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0
ay5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHJldmlzaW9uIDMyNzI2
KQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhYmFzZUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRl
ICJQbHVnaW5QYWNrYWdlLmgiCisjaW5jbHVkZSA8Z2RrY29uZmlnLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNjAsNiArNjEsOCBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFz
ZTo6ZGVmYXVsdFBsCiAgICAgVmVjdG9yPFN0cmluZz4gZGlyZWN0b3JpZXM7CiAgICAgZ2NoYXIq
IGRpcmVjdG9yeTsKIAorICAgIGRpcmVjdG9yeSA9IDA7CisKICNpZiBkZWZpbmVkKEdES19XSU5E
T1dJTkdfWDExKQogICAgIGRpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9k
aXIoKSwgIi5tb3ppbGxhIiwgInBsdWdpbnMiLCBOVUxMKTsKICAgICBkaXJlY3Rvcmllcy5hcHBl
bmQoZGlyZWN0b3J5KTsKQEAgLTk1LDcgKzk4LDIxIEBAIFZlY3RvcjxTdHJpbmc+IFBsdWdpbkRh
dGFiYXNlOjpkZWZhdWx0UGwKIAogYm9vbCBQbHVnaW5EYXRhYmFzZTo6aXNQcmVmZXJyZWRQbHVn
aW5EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnkpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIGdjaGFyKiBob21lUGF0aDsKKyAgICBib29sIHJldHZhbCA9IGZhbHNlOworCisgICAg
aG9tZVBhdGggPSAwOworCisjaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICBob21l
UGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIi5tb3ppbGxhIiwgInBs
dWdpbnMiLCAwKTsKKyNlbGlmIGRlZmluZWQoR0RLX1dJTkRPV0lOR19XSU4zMikKKyAgICBob21l
UGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfaG9tZV9kaXIoKSwgIkFwcGxpY2F0aW9uIERh
dGEiLCAiTW96aWxsYSIsICJwbHVnaW5zIiwgMCk7CisjZW5kaWYKKworICAgIGlmIChob21lUGF0
aCkKKwlyZXR2YWwgPSAoc3RyY21wKGhvbWVQYXRoLCAoZGlyZWN0b3J5LnV0ZjgoKSkuZGF0YSgp
KSA9PSAwKTsKKworICAgIHJldHVybiByZXR2YWw7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1
Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdpblBhY2thZ2UuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJucHJ1
bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBQbHVnaW5QYWNrYWdlOjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlN
RVR5cGUobWltZVR5cGUpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBj
YW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywgYW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQg
YQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwg
b3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8gb3VyIG9ubHkgVk0KKyAgICAgICAgbV9xdWlya3Mu
YWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBsdWdpbik7CisKKyAgICAgICAgLy8gU2V0dGluZyB0
aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcg
cmVwYWludCBwcm9ibGVtcworICAgICAgICAvLyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCisgICAg
ICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxp
bmcpOworICAgIH0KKyAgICAKKyAgICBpZiAobWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hv
Y2t3YXZlLWZsYXNoIikgeworICAgICAgICAvLyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVz
dHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdlIHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOwor
ICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAg
ICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVpcmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdl
cyk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsK
KyAgICB9CisKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQoreworICAgIGlm
ICghbG9hZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOUF9HZXRNSU1FRGVzY3Jp
cHRpb25GdW5jUHRyIE5QX0dldE1JTUVEZXNjcmlwdGlvbjsKKyAgICBOUFBfR2V0VmFsdWVQcm9j
UHRyIE5QUF9HZXRWYWx1ZTsKKworICAgIGdfbW9kdWxlX3N5bWJvbChtX21vZHVsZSwgIk5QX0dl
dE1JTUVEZXNjcmlwdGlvbiIsICh2b2lkKiopJk5QX0dldE1JTUVEZXNjcmlwdGlvbik7CisgICAg
Z19tb2R1bGVfc3ltYm9sKG1fbW9kdWxlLCAiTlBfR2V0VmFsdWUiLCAodm9pZCoqKSZOUFBfR2V0
VmFsdWUpOworCisgICAgY29uc3QgZ2NoYXIqIHR5cGVzID0gTlBfR2V0TUlNRURlc2NyaXB0aW9u
KCk7CisgICAgZ2NoYXIqKiBtaW1lRGVzY3MgPSBnX3N0cnNwbGl0KHR5cGVzLCAiOyIsIC0xKTsK
KyAgICBmb3IgKGludCBpID0gMDsgbWltZURlc2NzW2ldICYmIG1pbWVEZXNjc1tpXVswXTsgaSsr
KSB7CisgICAgICAgIGdjaGFyKiogbWltZURhdGEgPSBnX3N0cnNwbGl0KG1pbWVEZXNjc1tpXSwg
IjoiLCAzKTsKKworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4
KG1pbWVEYXRhWzJdKTsKKyAgICAgICAgZ2NoYXIqKiBleHRlbnNpb25zID0gZ19zdHJzcGxpdCht
aW1lRGF0YVsxXSwgIiwiLCAtMSk7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZXh0VmVjdG9y
OworICAgICAgICBmb3IgKGludCBqID0gMDsgZXh0ZW5zaW9uc1tqXTsgaisrKQorICAgICAgICAg
ICAgZXh0VmVjdG9yLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KGV4dGVuc2lvbnNbal0pKTsKKwor
ICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZURhdGFbMF0pOworICAgICAgICBtX21pbWVUb0V4
dGVuc2lvbnMuYWRkKG1pbWVEYXRhWzBdLCBleHRWZWN0b3IpOworICAgICAgICBtX21pbWVUb0Rl
c2NyaXB0aW9ucy5hZGQobWltZURhdGFbMF0sIGRlc2NyaXB0aW9uKTsKKworICAgICAgICBnX3N0
cmZyZWV2KGV4dGVuc2lvbnMpOworICAgICAgICBnX3N0cmZyZWV2KG1pbWVEYXRhKTsKKyAgICB9
CisgICAgZ19zdHJmcmVldihtaW1lRGVzY3MpOworCisgICAgY2hhciogYnVmZmVyID0gMDsKKyAg
ICBOUEVycm9yIGVyciA9IE5QUF9HZXRWYWx1ZSgwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgJmJ1
ZmZlcik7CisgICAgaWYgKGVyciA9PSBOUEVSUl9OT19FUlJPUikKKyAgICAgICAgbV9uYW1lID0g
YnVmZmVyOworCisgICAgYnVmZmVyID0gMDsKKyAgICBlcnIgPSBOUFBfR2V0VmFsdWUoMCwgTlBQ
VnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAmYnVmZmVyKTsKKyAgICBpZiAoZXJyID09IE5QRVJS
X05PX0VSUk9SKQorICAgICAgICBtX2Rlc2NyaXB0aW9uID0gYnVmZmVyOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCit7CisgICAgaWYgKG1faXNM
b2FkZWQpIHsKKyAgICAgICAgbV9sb2FkQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgbV9tb2R1bGUgPSBnX21vZHVsZV9vcGVuKChtX3BhdGgudXRmOCgpKS5kYXRh
KCksIEdfTU9EVUxFX0JJTkRfTE9DQUwpOworCisgICAgaWYgKCFtX21vZHVsZSkgeworCSAgICBM
T0coUGx1Z2luLCJNb2R1bGUgTG9hZCBGYWlsZWQgOiVzLCBFcnJvcjolc1xuIiwgKG1fcGF0aC51
dGY4KCkpLmRhdGEoKSwgZ19tb2R1bGVfZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
Kwl9CisKKyAgICBtX2lzTG9hZGVkID0gdHJ1ZTsKKworICAgIE5QX0luaXRpYWxpemVGdW5jUHRy
IE5QX0luaXRpYWxpemU7CisgICAgTlBFcnJvciBucEVycjsKKworICAgIGdfbW9kdWxlX3N5bWJv
bChtX21vZHVsZSwgIk5QX0luaXRpYWxpemUiLCAodm9pZCoqKSZOUF9Jbml0aWFsaXplKTsKKyAg
ICBnX21vZHVsZV9zeW1ib2wobV9tb2R1bGUsICJOUF9TaHV0ZG93biIsICh2b2lkKiopJm1fTlBQ
X1NodXRkb3duKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6ZSB8fCAhbV9OUFBfU2h1dGRvd24p
CisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQoJm1fcGx1Z2luRnVuY3MsIDAsIHNp
emVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5GdW5jcy5zaXplID0gc2l6ZW9mKG1f
cGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Muc2l6ZSA9IHNpemVvZiAobV9icm93
c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNpb24gPSBOUF9WRVJTSU9OX01JTk9S
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9HZXRVUkw7CisgICAgbV9icm93c2Vy
RnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1fYnJvd3NlckZ1bmNzLnJlcXVlc3Ry
ZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3NlckZ1bmNzLm5ld3N0cmVhbSA9IE5Q
Tl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3JpdGUgPSBOUE5fV3JpdGU7CisgICAg
bV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9EZXN0cm95U3RyZWFtOworICAgIG1f
YnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7CisgICAgbV9icm93c2VyRnVuY3MudWFn
ZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1hbGxvYyA9IE5QTl9N
ZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVlID0gTlBOX01lbUZyZWU7CisgICAg
bV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1c2g7CisgICAgbV9icm93c2VyRnVu
Y3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5zOworICAgIG1fYnJvd3NlckZ1bmNz
LmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7CisgICAgbV9icm93c2VyRnVuY3MucG9z
dHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHZh
bHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLnNldHZhbHVlID0gTlBOX1Nl
dFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWN0ID0gTlBOX0ludmFsaWRh
dGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRhdGVyZWdpb24gPSBOUE5fSW52YWxp
ZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3JjZXJlZHJhdyA9IE5QTl9Gb3JjZVJl
ZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52ID0gTlBOX0dldEphdmFFbnY7Cisg
ICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5fR2V0SmF2YVBlZXI7CisgICAgbV9i
cm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxl
ZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dzZXJGdW5jcy5yZWxlYXNldmFyaWFu
dHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmdl
dHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXI7CisgICAgbV9icm93
c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXJz
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIgPSBfTlBOX0dldEludElkZW50
aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gX05QTl9JZGVu
dGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3MudXRmOGZyb21pZGVudGlmaWVyID0g
X05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0
ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmV0YWlub2JqZWN0ID0g
X05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IF9O
UE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2UgPSBfTlBOX0ludm9r
ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0ID0gX05QTl9JbnZva2VEZWZhdWx0
OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05QTl9FdmFsdWF0ZTsKKyAgICBtX2Jy
b3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJvcGVydHk7CisgICAgbV9icm93c2Vy
RnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OworICAgIG1fYnJvd3NlckZ1bmNz
LnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0eTsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAgIG1fYnJvd3NlckZ1bmNzLmhhc21l
dGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0ZXhjZXB0aW9u
ID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2VyRnVuY3MuZW51bWVyYXRlID0gX05Q
Tl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRpYWxpemUoJm1fYnJvd3NlckZ1bmNz
LCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9IE5QRVJSX05PX0VSUk9SKQorICAg
ICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQrKzsKKyAgICByZXR1cm4gdHJ1ZTsK
KworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3duKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNoKCkgY29uc3QKK3sgCisgICAgdW5z
aWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3BhdGguaW1wbCgpLT5oYXNoKCksCisg
ICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpj
b21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgMiAqIHNpemVv
Zih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKworYm9vbCBQbHVnaW5QYWNrYWdlOjpl
cXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQbHVnaW5QYWNrYWdlJiBiKQorewor
ICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rlc2NyaXB0aW9uOworfQorCitpbnQg
UGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNvbnN0IFBsYXRmb3JtTW9kdWxlVmVy
c2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Cit7CisgICAgLy8gcmV0dXJuIC0xLCAwLCBvciAx
IGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRo
YW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KKyAgICBpZiAobV9tb2R1bGVWZXJzaW9uICE9
IGNvbXBhcmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gbV9tb2R1bGVWZXJzaW9uID4gY29tcGFy
ZVZlcnNpb24gPyAxIDogLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblZpZXdHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay9Q
bHVnaW5WaWV3R3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2th
Z2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisj
aW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJveHkuaCIKKyNpbmNsdWRl
ICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNsdWRlICJydW50
aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8a2pzL3ZhbHVl
Lmg+CisKKyNpbmNsdWRlIDxnZGtjb25maWcuaD4KKworI2lmIGRlZmluZWQoR0RLX1dJTkRPV0lO
R19YMTEpCisjaW5jbHVkZSAiZ3RrMnh0YmluLmgiCisjaW5jbHVkZSA8Z2RrL2dka3guaD4KKyNl
bmRpZgorI2lmZGVmIEdES19XSU5ET1dJTkdfV0lOMzIKKyNpbmNsdWRlIDxnZGsvZ2Rrd2luMzIu
aD4KKyNlbmRpZgorCit1c2luZyBLSlM6OkV4ZWNTdGF0ZTsKK3VzaW5nIEtKUzo6SW50ZXJwcmV0
ZXI7Cit1c2luZyBLSlM6OkpTTG9jazsKK3VzaW5nIEtKUzo6SlNPYmplY3Q7Cit1c2luZyBLSlM6
OkpTVmFsdWU7Cit1c2luZyBLSlM6OlVTdHJpbmc7CisKK3VzaW5nIHN0ZDo6bWluOworCit1c2lu
ZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwordm9pZCBQbHVnaW5W
aWV3Ojp1cGRhdGVXaW5kb3coKSBjb25zdAoreworICAgIGlmICghcGFyZW50KCkgfHwgIW1faXNX
aW5kb3dlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKTsKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHBhcmVudCgpKTsKKworICAgIEludFJlY3Qgb2xkV2luZG93UmVjdCA9IG1fd2luZG93UmVj
dDsKKyAgICBJbnRSZWN0IG9sZENsaXBSZWN0ID0gbV9jbGlwUmVjdDsKKworICAgIG1fd2luZG93
UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnko
KS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSk7CisgICAgbV9jbGlwUmVjdCA9
IHdpbmRvd0NsaXBSZWN0KCk7CisgICAgbV9jbGlwUmVjdC5tb3ZlKC1tX3dpbmRvd1JlY3QueCgp
LCAtbV93aW5kb3dSZWN0LnkoKSk7CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgp
LCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKyAgICBpZiAobV93aW5kb3cpIHsKKyAgICAgICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG1fd2luZG93LCAmYWxsb2NhdGlvbik7CisjaWYgZGVm
aW5lZChHREtfV0lORE9XSU5HX1gxMSkKKyAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7Cisg
ICAgICAgICAgICBndGtfeHRiaW5fc2V0X3Bvc2l0aW9uKEdUS19YVEJJTihtX3dpbmRvdyksIG1f
d2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55KCkpOworICAgICAgICAgICAgZ3RrX3h0Ymlu
X3Jlc2l6ZShtX3dpbmRvdywgbV93aW5kb3dSZWN0LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWln
aHQoKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpz
ZXRGb2N1cygpCit7CisgICAgaWYgKG1fd2luZG93KQorCWd0a193aWRnZXRfZ3JhYl9mb2N1cyht
X3dpbmRvdyk7CisKKyAgICBXaWRnZXQ6OnNldEZvY3VzKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmll
dzo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVlOworCisgICAgaWYgKG1fYXR0YWNo
ZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X3Nob3cobV93aW5kb3cpOworCisg
ICAgV2lkZ2V0OjpzaG93KCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6aGlkZSgpCit7CisgICAg
bV9pc1Zpc2libGUgPSBmYWxzZTsKKworICAgIGlmIChtX2F0dGFjaGVkVG9XaW5kb3cgJiYgbV93
aW5kb3cpCisJZ3RrX3dpZGdldF9oaWRlKG1fd2luZG93KTsKKworICAgIFdpZGdldDo6aGlkZSgp
OworfQorCit2b2lkIFBsdWdpblZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAg
IC8vIERyYXcgdGhlICJtaXNzaW5nIHBsdWdpbiIgaW1hZ2UKKyAgICAgICAgLy9wYWludE1pc3Np
bmdQbHVnaW5JY29uKGNvbnRleHQsIHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKG1faXNXaW5kb3dlZCB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE5QRXZlbnQgbnBFdmVudDsKKyAgICAvKiBOZWVkIHRvIHN5bnRo
ZXNpemUgWGV2ZW50cyBoZXJlICovCisKKyAgICBtX25wV2luZG93LnR5cGUgPSBOUFdpbmRvd1R5
cGVEcmF3YWJsZTsKKworICAgIEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAg
ICBpZiAobV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KSB7CisgICAgICAgIEtKUzo6SlNM
b2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOworICAgICAgICBtX3BsdWdpbi0+cGx1Z2lu
RnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpOworICAgIH0KKworICAgIHNldE5Q
V2luZG93UmVjdChmcmFtZUdlb21ldHJ5KCkpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgTlBFdmVudCBucEV2
ZW50OworICAgIAorICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRo
cm91Z2ggKi8KKworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwor
ICAgIGlmICghbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmV2ZW50KG1faW5zdGFuY2UsICZucEV2
ZW50KSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgUGx1
Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBOUEV2
ZW50IG5wRXZlbnQ7CisKKyAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgIHJldHVybjsKKwor
ICAgIC8qIEZJWE1FOiBTeW50aGVzaXplIGFuIFhFdmVudCB0byBwYXNzIHRocm91Z2ggKi8KKyAg
ICBJbnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50
c1RvV2luZG93KEludFBvaW50KGV2ZW50LT5wYWdlWCgpLCBldmVudC0+cGFnZVkoKSkpOworCisg
ICAgS0pTOjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgaWYgKCFtX3Bs
dWdpbi0+cGx1Z2luRnVuY3MoKS0+ZXZlbnQobV9pbnN0YW5jZSwgJm5wRXZlbnQpKQorICAgICAg
ICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpzZXRQ
YXJlbnQoU2Nyb2xsVmlldyogcGFyZW50KQoreworICAgIFdpZGdldDo6c2V0UGFyZW50KHBhcmVu
dCk7CisKKyAgICBpZiAocGFyZW50KQorICAgICAgICBpbml0KCk7CisgICAgZWxzZSB7CisgICAg
ICAgIGlmICghbV93aW5kb3cpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFBsdWdpblZpZXc6OnNldE5QV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGlmICghbV9pc1N0YXJ0ZWQgfHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJ
bnRQb2ludCBwID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5jb250ZW50c1Rv
V2luZG93KHJlY3QubG9jYXRpb24oKSk7CisgICAgbV9ucFdpbmRvdy54ID0gcC54KCk7CisgICAg
bV9ucFdpbmRvdy55ID0gcC55KCk7CisKKyAgICBtX25wV2luZG93LndpZHRoID0gcmVjdC53aWR0
aCgpOworICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKKworICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QubGVmdCA9IDA7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSAw
OworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSByZWN0LndpZHRoKCk7CisgICAgbV9u
cFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSByZWN0LmhlaWdodCgpOworCisgICAgaWYgKG1fbnBX
aW5kb3cueCA8IDAgfHwgbV9ucFdpbmRvdy55IDwgMCB8fAorICAgICAgICBtX25wV2luZG93Lndp
ZHRoIDw9IDAgfHwgbV9ucFdpbmRvdy5oZWlnaHQgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cpIHsKKyAgICAgICAgS0pT
OjpKU0xvY2s6OkRyb3BBbGxMb2NrcyBkcm9wQWxsTG9ja3M7CisgICAgICAgIHNldENhbGxpbmdQ
bHVnaW4odHJ1ZSk7CisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3co
bV9pbnN0YW5jZSwgJm1fbnBXaW5kb3cpOworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKGZhbHNl
KTsKKworICAgICAgICBpZiAoIW1faXNXaW5kb3dlZCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBBU1NFUlQobV93aW5kb3cpOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojph
dHRhY2hUb1dpbmRvdygpCit7CisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdykKKwlyZXR1cm47
CisKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSB0cnVlOworICAgIGlmIChtX2lzVmlzaWJsZSAm
JiBtX3dpbmRvdykKKwlndGtfd2lkZ2V0X3Nob3cobV93aW5kb3cpOworfQorCit2b2lkIFBsdWdp
blZpZXc6OmRldGFjaEZyb21XaW5kb3coKQoreworICAgIGlmICghbV9hdHRhY2hlZFRvV2luZG93
KQorCXJldHVybjsKKworICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX3dpbmRvdykKKwlndGtfd2lk
Z2V0X2hpZGUobV93aW5kb3cpOworICAgIG1fYXR0YWNoZWRUb1dpbmRvdyA9IGZhbHNlOworfQor
Cit2b2lkIFBsdWdpblZpZXc6OnN0b3AoKQoreworICAgIGlmICghbV9pc1N0YXJ0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPiBzdHJlYW1z
ID0gbV9zdHJlYW1zOworICAgIEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0cmVhbT4gPjo6aXRlcmF0
b3IgZW5kID0gc3RyZWFtcy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFBsdWdpblN0
cmVhbT4gPjo6aXRlcmF0b3IgaXQgPSBzdHJlYW1zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAoKml0KS0+c3RvcCgpOworICAgICAgICBkaXNjb25uZWN0U3RyZWFtKCgqaXQp
LmdldCgpKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9zdHJlYW1zLmlzRW1wdHkoKSk7CisKKyAg
ICBtX2lzU3RhcnRlZCA9IGZhbHNlOworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJv
cEFsbExvY2tzOworCisgICAgLy8gQ2xlYXIgdGhlIHdpbmRvdworICAgIG1fbnBXaW5kb3cud2lu
ZG93ID0gMDsKKyNpZmRlZiBYUF9VTklYCisgICAgaWYgKG1faXNXaW5kb3dlZCAmJiBtX25wV2lu
ZG93LndzX2luZm8pIAorICAgICAgICAgICBkZWxldGUgKE5QU2V0V2luZG93Q2FsbGJhY2tTdHJ1
Y3QgKiltX25wV2luZG93LndzX2luZm87CisgICAgbV9ucFdpbmRvdy53c19pbmZvID0gMDsKKyNl
bmRpZgorICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93ICYmICFtX3Bs
dWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtEb250U2V0TnVsbFdpbmRvd0hhbmRs
ZU9uRGVzdHJveSkpIHsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsKKyAgICAgICAg
bV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAmbV9ucFdpbmRv
dyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIH0KKworICAgIC8vIERl
c3Ryb3kgdGhlIHBsdWdpbgorICAgIHsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
KyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPmRlc3Ryb3kobV9pbnN0YW5jZSwgMCk7
CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworICAgIH0KKworICAgIG1faW5zdGFu
Y2UtPnBkYXRhID0gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIE1vemlsbGFVc2VyQWdlbnQg
PSAiTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7IHJ2OjEuOC4xKSBHZWNr
by8yMDA2MTAxMCBGaXJlZm94LzIuMCI7CisKK2NvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJB
Z2VudCgpCit7CisgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWly
a1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCisgICAgICAgIHJldHVybiBNb3ppbGxhVXNlckFnZW50
OworCisgICAgaWYgKG1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBtX3VzZXJBZ2VudCA9
IG1fcGFyZW50RnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV91cmwpLnV0ZjgoKTsKKworICAg
IHJldHVybiBtX3VzZXJBZ2VudC5kYXRhKCk7Cit9CisKK05QRXJyb3IgUGx1Z2luVmlldzo6aGFu
ZGxlUG9zdFJlYWRGaWxlKFZlY3RvcjxjaGFyPiYgYnVmZmVyLCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYpCit7CisgICAgU3RyaW5nIGZpbGVuYW1lKGJ1ZiwgbGVuKTsKKworICAgIGlmIChm
aWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVu
YW1lLnN1YnN0cmluZyg4KTsKKworICAgIC8vIEdldCBmaWxlIGluZm8KKyAgICBpZiAoIWdfZmls
ZV90ZXN0ICgoZmlsZW5hbWUudXRmOCgpKS5kYXRhKCksIChHRmlsZVRlc3QpKEdfRklMRV9URVNU
X0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgcmV0dXJuIE5QRVJS
X0ZJTEVfTk9UX0ZPVU5EOworCisgICAgLy9GSVhNRSAtIHJlYWQgdGhlIGZpbGUgZGF0YSBpbnRv
IGJ1ZmZlcgorICAgIEZJTEUqIGZpbGVIYW5kbGUgPSBmb3BlbigoZmlsZW5hbWUudXRmOCgpKS5k
YXRhKCksICJyIik7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUgPT0gMCkKKyAgICAgICAgcmV0
dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisgICAgLy9idWZmZXIucmVzaXplKCk7CisKKyAg
ICBpbnQgYnl0ZXNSZWFkID0gZnJlYWQoYnVmZmVyLmRhdGEoKSwgMSwgMCwgZmlsZUhhbmRsZSk7
CisKKyAgICBmY2xvc2UoZmlsZUhhbmRsZSk7CisKKyAgICBpZiAoYnl0ZXNSZWFkIDw9IDApCisg
ICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKworCXJldHVybiBOUEVSUl9OT19F
UlJPUjsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZShOUE5WYXJpYWJsZSB2YXJp
YWJsZSwgdm9pZCogdmFsdWUpCit7CisgICAgc3dpdGNoICh2YXJpYWJsZSkgeworI2lmIGRlZmlu
ZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogewor
ICAgICAgICAgICAgaWYgKCFtX25lZWRzWEVtYmVkKSB7CisgICAgICAgICAgICAgICAgKih2b2lk
ICoqKXZhbHVlID0gWHREaXNwbGF5VG9BcHBsaWNhdGlvbkNvbnRleHQgKEdUS19YVEJJTihtX3dp
bmRvdyktPnh0Y2xpZW50Lnh0ZGlzcGxheSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY2FzZSBO
UE5WVG9vbGtpdDogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICooKHVpbnQzMiAq
KXZhbHVlKSA9IDI7CisjZWxzZQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gMDsK
KyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1iZWRCb29sOiB7CisjaWYgZGVmaW5lZChHREtf
V0lORE9XSU5HX1gxMSkKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IHRydWU7Cisj
ZWxzZQorICAgICAgICAgICAgKigodWludDMyICopdmFsdWUpID0gZmFsc2U7CisjZW5kaWYKKyAg
ICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQorCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGNhc2UgTlBOVldpbmRvd05QT2JqZWN0OiB7
CisJICAgIGlmIChtX2lzSmF2YVNjcmlwdFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNf
RVJST1I7CisKKyAgICAgICAgICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QgPSBtX3Bh
cmVudEZyYW1lLT53aW5kb3dTY3JpcHROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+Cisg
ICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5f
UmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2
ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIE5QTlZQbHVnaW5FbGVtZW50TlBPYmplY3Q6IHsKKwkgICAgaWYg
KG1faXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJPUjsKKwor
ICAgICAgICAgICAgTlBPYmplY3QqIHBsdWdpblNjcmlwdE9iamVjdCA9IDA7CisKKyAgICAgICAg
ICAgIGlmIChtX2VsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBtX2VsZW1lbnQtPmhh
c1RhZ05hbWUoZW1iZWRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQor
ICAgICAgICAgICAgICAgIHBsdWdpblNjcmlwdE9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxQbHVn
SW5FbGVtZW50Kj4obV9lbGVtZW50KS0+Z2V0TlBPYmplY3QoKTsKKworICAgICAgICAgICAgLy8g
UmV0dXJuIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVy
ZTogPGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1s
PgorICAgICAgICAgICAgaWYgKHBsdWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBf
TlBOX1JldGFpbk9iamVjdChwbHVnaW5TY3JpcHRPYmplY3QpOworCisgICAgICAgICAgICB2b2lk
KiogdiA9ICh2b2lkKiopdmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVj
dDsKKworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisjZW5k
aWYKKworICAgICAgICBjYXNlIE5QTlZuZXRzY2FwZVdpbmRvdzogeworICAgICAgICAgICAgdm9p
ZCogdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKTsKKworI2lmZGVmIEdES19XSU5E
T1dJTkdfWDExCisgICAgICAgICAgICAqKChYSUQgKil3KSA9IEdES19XSU5ET1dfWFdJTkRPVyhj
b250YWluaW5nV2luZG93KCktPndpbmRvdyk7CisjZW5kaWYKKyNpZmRlZiBHREtfV0lORE9XSU5H
X1dJTjMyCisgICAgICAgICAgICAqKChIV05EICopdykgPSBHREtfV0lORE9XSU5HX0hXTkQoY29u
dGFpbmluZ1dpbmRvdygpLT53aW5kb3cpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworICAgIH0KK30KKwordm9pZCBQbHVnaW5WaWV3Ojpp
bnZhbGlkYXRlUmVjdChOUFJlY3QqIHJlY3QpCit7CisgICAgaWYgKCFyZWN0KSB7CisgICAgICAg
IGludmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEludFJlY3Qgcihy
ZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90
dG9tIC0gcmVjdC0+dG9wKTsKKyAgICBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KHIpOworfQorCit2
b2lkIFBsdWdpblZpZXc6OmZvcmNlUmVkcmF3KCkKK3sKKyAgICBpZiAobV9pc1dpbmRvd2VkKQor
ICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXcobV93aW5kb3cpOworICAgIGVsc2UKKyAgICAg
ICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KGNvbnRhaW5pbmdXaW5kb3coKSk7Cit9CisKK1BsdWdp
blZpZXc6On5QbHVnaW5WaWV3KCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBkZWxldGVBbGxWYWx1
ZXMobV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3Bh
cmFtQ291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291
bnQpOworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4o
dGhpcyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFp
bnMoUGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxv
YWQoKTsKK30KKworc3RhdGljIGdib29sZWFuCitwbHVnX3JlbW92ZWRfY2IoR3RrU29ja2V0ICpz
b2NrZXQsIGdwb2ludGVyKQoreworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIFBsdWdpblZp
ZXc6OmluaXQoKQoreworICAgIGlmIChtX2hhdmVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
OworICAgIG1faGF2ZUluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9wbHVnaW4pIHsK
KyAgICAgICAgQVNTRVJUKG1fc3RhdHVzID09IFBsdWdpblN0YXR1c0Nhbk5vdEZpbmRQbHVnaW4p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3BsdWdpbi0+bG9hZCgpKSB7
CisgICAgICAgIG1fcGx1Z2luID0gMDsKKyAgICAgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXND
YW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdGFy
dCgpKSB7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBsdWdpbjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BsdWdpbi0+cGx1Z2luRnVuY3Mo
KS0+Z2V0dmFsdWUpCisgICAgICAgIG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSht
X2luc3RhbmNlLCBOUFBWcGx1Z2luTmVlZHNYRW1iZWQsICZtX25lZWRzWEVtYmVkKTsKKworI2lm
IGRlZmluZWQoR0RLX1dJTkRPV0lOR19YMTEpCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAg
ICAgICAgbV93aW5kb3cgPSBndGtfc29ja2V0X25ldygpOworICAgICAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIG1fd2luZG93KTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgInBsdWdfcmVtb3ZlZCIsIEdfQ0FMTEJBQ0so
cGx1Z19yZW1vdmVkX2NiKSwgTlVMTCk7CisgICAgICAgIHNldEd0a1dpZGdldChtX3dpbmRvdyk7
CisgICAgfSBlbHNlIGlmIChtX2lzV2luZG93ZWQpIHsKKyAgICAgICAgbV93aW5kb3cgPSBndGtf
eHRiaW5fbmV3KG1fcGFyZW50RnJhbWUtPnZpZXcoKS0+Y29udGFpbmluZ1dpbmRvdygpLT53aW5k
b3csIDApOworCSAgICBzZXRHdGtXaWRnZXQobV93aW5kb3cpOworICAgIH0KKyNlbHNlCisgICAg
bV93aW5kb3cgPSBndGtfc29ja2V0X25ldygpOworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIobV9wYXJlbnRGcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93KCkpLCBtX3dp
bmRvdyk7CisgICAgc2V0R3RrV2lkZ2V0KG1fd2luZG93KTsKKyNlbmRpZgorICAgIHNob3cgKCk7
CisKKyAgICBpZiAobV9pc1dpbmRvd2VkKSB7CisgICAgICAgIG1fbnBXaW5kb3cudHlwZSA9IE5Q
V2luZG93VHlwZVdpbmRvdzsKKyNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQorCSAgICBO
UFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICp3cyA9IG5ldyBOUFNldFdpbmRvd0NhbGxiYWNrU3Ry
dWN0KCk7CisKKwkgICAgd3MtPnR5cGUgPSAwOworCisJICAgIGlmIChtX25lZWRzWEVtYmVkKSB7
CisJICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV93aW5kb3cpOworICAgIAkgICAgbV9ucFdp
bmRvdy53aW5kb3cgPSAodm9pZCopZ3RrX3NvY2tldF9nZXRfaWQoR1RLX1NPQ0tFVChtX3dpbmRv
dykpOworCSAgICAgICAgd3MtPmRpc3BsYXkgPSBHREtfV0lORE9XX1hESVNQTEFZKG1fd2luZG93
LT53aW5kb3cpOworCSAgICAgICAgd3MtPnZpc3VhbCA9IEdES19WSVNVQUxfWFZJU1VBTChnZGtf
ZHJhd2FibGVfZ2V0X3Zpc3VhbChHREtfRFJBV0FCTEUobV93aW5kb3ctPndpbmRvdykpKTsKKwkg
ICAgICAgIHdzLT5kZXB0aCA9IGdka19kcmF3YWJsZV9nZXRfdmlzdWFsKEdES19EUkFXQUJMRSht
X3dpbmRvdy0+d2luZG93KSktPmRlcHRoOworCSAgICAgICAgd3MtPmNvbG9ybWFwID0gR0RLX0NP
TE9STUFQX1hDT0xPUk1BUChnZGtfZHJhd2FibGVfZ2V0X2NvbG9ybWFwKEdES19EUkFXQUJMRSht
X3dpbmRvdy0+d2luZG93KSkpOworCSAgICB9IGVsc2UgeworICAgIAkgICAgbV9ucFdpbmRvdy53
aW5kb3cgPSAodm9pZCopR1RLX1hUQklOKG1fd2luZG93KS0+eHR3aW5kb3c7CisJICAgICAgICB3
cy0+ZGlzcGxheSA9IEdUS19YVEJJTihtX3dpbmRvdyktPnh0ZGlzcGxheTsKKwkgICAgICAgIHdz
LT52aXN1YWwgPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVudC54dHZpc3VhbDsKKwkgICAg
ICAgIHdzLT5kZXB0aCA9IEdUS19YVEJJTihtX3dpbmRvdyktPnh0Y2xpZW50Lnh0ZGVwdGg7CisJ
ICAgICAgICB3cy0+Y29sb3JtYXAgPSBHVEtfWFRCSU4obV93aW5kb3cpLT54dGNsaWVudC54dGNv
bG9ybWFwOworCSAgICB9CisgICAgICAgIFhGbHVzaCAod3MtPmRpc3BsYXkpOworCisJICAgIG1f
bnBXaW5kb3cud3NfaW5mbyA9IHdzOworI2VsaWYgZGVmaW5lZChHREtfV0lORE9XSU5HX1dJTjMy
KQorICAgICAgICBtX25wV2luZG93LndpbmRvdyA9ICh2b2lkKilHREtfV0lORE9XX0hXTkQobV93
aW5kb3ctPndpbmRvdyk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBtX25wV2luZG93
LnR5cGUgPSBOUFdpbmRvd1R5cGVEcmF3YWJsZTsKKyAgICAgICAgbV9ucFdpbmRvdy53aW5kb3cg
PSAwOworICAgIH0KKworICAgIGlmICghKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya0RlZmVyRmlyc3RTZXRXaW5kb3dDYWxsKSkpCisgICAgICAgIHNldE5QV2luZG93UmVj
dChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgbV9zdGF0dXMgPSBQbHVnaW5TdGF0dXNMb2FkZWRT
dWNjZXNzZnVsbHk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO
YW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL2d0
ay94ZW1iZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvZ3RrL3hlbWJlZC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NCBAQAorLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQt
dGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorICogdmltOmV4cGFuZHRhYjpz
aGlmdHdpZHRoPTI6dGFic3RvcD0yOiAqLworIAorLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9D
SyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgorICogVGhl
IGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UK
KyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRh
dGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBDb2RlIGlz
IHRoZSBYRU1CRUQgRGVjbGFyYXRpb24uCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBQb3J0
aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAy
MDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogQ29udHJpYnV0b3Iocyk6CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIp
LCBvcgorICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIu
MSBvciBsYXRlciAodGhlICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhv
c2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUg
TEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBk
ZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIKKyAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExH
UEwuCisgKgorICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworLyogWEVNQkVE
IG1lc3NhZ2VzICovCisjZGVmaW5lIFhFTUJFRF9FTUJFRERFRF9OT1RJRlkgICAgICAgICAgMAor
I2RlZmluZSBYRU1CRURfV0lORE9XX0FDVElWQVRFICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVE
X1dJTkRPV19ERUFDVElWQVRFICAgICAgICAyCisjZGVmaW5lIFhFTUJFRF9SRVFVRVNUX0ZPQ1VT
ICAgICAgICAgICAgMworI2RlZmluZSBYRU1CRURfRk9DVVNfSU4gICAgICAgICAgICAgICAgIDQK
KyNkZWZpbmUgWEVNQkVEX0ZPQ1VTX09VVCAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFhFTUJF
RF9GT0NVU19ORVhUICAgICAgICAgICAgICAgNgorI2RlZmluZSBYRU1CRURfRk9DVVNfUFJFViAg
ICAgICAgICAgICAgIDcKKyNkZWZpbmUgWEVNQkVEX0dSQUJfS0VZICAgICAgICAgICAgICAgICA4
CisjZGVmaW5lIFhFTUJFRF9VTkdSQUJfS0VZICAgICAgICAgICAgICAgOQorI2RlZmluZSBYRU1C
RURfTU9EQUxJVFlfT04gICAgICAgICAgICAgIDEwCisjZGVmaW5lIFhFTUJFRF9NT0RBTElUWV9P
RkYgICAgICAgICAgICAgMTEKKworLyogTm9uIHN0YW5kYXJkIG1lc3NhZ2VzKi8KKyNkZWZpbmUg
WEVNQkVEX0dUS19HUkFCX0tFWSAgICAgICAgICAgICAxMDggCisjZGVmaW5lIFhFTUJFRF9HVEtf
VU5HUkFCX0tFWSAgICAgICAgICAgMTA5CisKKy8qIERldGFpbHMgZm9yICBYRU1CRURfRk9DVVNf
SU46ICovCisjZGVmaW5lIFhFTUJFRF9GT0NVU19DVVJSRU5UICAgICAgICAgICAgMAorI2RlZmlu
ZSBYRU1CRURfRk9DVVNfRklSU1QgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWEVNQkVEX0ZPQ1VT
X0xBU1QgICAgICAgICAgICAgICAyCisKKy8qIEZsYWdzIGZvciBfWEVNQkVEX0lORk8gKi8KKyNk
ZWZpbmUgWEVNQkVEX01BUFBFRCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9wbHVnaW5zL2d0ay94ZW1iZWQuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1
Z2luRGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0
YVF0LmNwcAkocmV2aXNpb24gMzI3MjYpCisrKyBXZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0
YVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3Jh
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTAg
KzIxLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgog
CisjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbHVnaW5QYWNrYWdlLmgi
CisKKyNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KICNpbmNsdWRlIDxx
d2VicGx1Z2luZmFjdG9yeS5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzIsMzYgKzM4LDcxIEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQogI2lmIFFUX1ZF
UlNJT04gPj0gMHgwNDA0MDAKICAgICBRV2ViUGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PENo
cm9tZUNsaWVudFF0Kj4obV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CiAg
ICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5KCk7
Ci0gICAgaWYgKCFmYWN0b3J5KQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZhY3RvcnkpIHsK
IAotICAgIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+IHBsdWdpbnMgPSBmYWN0b3J5
LT5wbHVnaW5zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLmNvdW50KCk7ICsr
aSkgewotICAgICAgICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luJiBwbHVnaW4gPSBw
bHVnaW5zLmF0KGkpOworICAgICAgICBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBx
cGx1Z2lucyA9IGZhY3RvcnktPnBsdWdpbnMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBxcGx1Z2lucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFFXZWJQbHVnaW5G
YWN0b3J5OjpQbHVnaW4mIHFwbHVnaW4gPSBxcGx1Z2lucy5hdChpKTsKIAotICAgICAgICBQbHVn
aW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAgICAgIGluZm8tPm5hbWUgPSBwbHVn
aW4ubmFtZTsKLSAgICAgICAgaW5mby0+ZGVzYyA9IHBsdWdpbi5kZXNjcmlwdGlvbjsKKyAgICAg
ICAgICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgICAgIGlu
Zm8tPm5hbWUgPSBxcGx1Z2luLm5hbWU7CisgICAgICAgICAgICBpbmZvLT5kZXNjID0gcXBsdWdp
bi5kZXNjcmlwdGlvbjsKKworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBxcGx1Z2lu
Lm1pbWVUeXBlcy5jb3VudCgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRV2ViUGx1
Z2luRmFjdG9yeTo6TWltZVR5cGUmIG1pbWVUeXBlID0gcXBsdWdpbi5taW1lVHlwZXMuYXQoaik7
CisKKyAgICAgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lSW5mbyA9IG5ldyBNaW1lQ2xh
c3NJbmZvOworICAgICAgICAgICAgICAgIG1pbWVJbmZvLT50eXBlID0gbWltZVR5cGUubmFtZTsK
KyAgICAgICAgICAgICAgICBtaW1lSW5mby0+ZGVzYyA9IG1pbWVUeXBlLmRlc2NyaXB0aW9uOwor
ICAgICAgICAgICAgICAgIG1pbWVJbmZvLT5zdWZmaXhlcyA9IG1pbWVUeXBlLmZpbGVFeHRlbnNp
b25zLmpvaW4oIjsgIik7CisKKyAgICAgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWlt
ZUluZm8pOworICAgICAgICAgICAgfQogCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGx1
Z2luLm1pbWVUeXBlcy5jb3VudCgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFFXZWJQbHVn
aW5GYWN0b3J5OjpNaW1lVHlwZSYgbWltZVR5cGUgPSBwbHVnaW4ubWltZVR5cGVzLmF0KGopOwor
ICAgICAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZgogCi0gICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lSW5mbyA9IG5ldyBNaW1lQ2xh
c3NJbmZvOwotICAgICAgICAgICAgbWltZUluZm8tPnR5cGUgPSBtaW1lVHlwZS5uYW1lOwotICAg
ICAgICAgICAgbWltZUluZm8tPmRlc2MgPSBtaW1lVHlwZS5kZXNjcmlwdGlvbjsKLSAgICAgICAg
ICAgIG1pbWVJbmZvLT5zdWZmaXhlcyA9IG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmpvaW4oUUxh
dGluMVN0cmluZygiOyAiKSk7CisgICAgUGx1Z2luRGF0YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJh
c2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luUGFja2FnZSo+
ICZwbHVnaW5zID0gZGItPnBsdWdpbnMoKTsKIAotICAgICAgICAgICAgaW5mby0+bWltZXMuYXBw
ZW5kKG1pbWVJbmZvKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZv
OworICAgICAgICBQbHVnaW5QYWNrYWdlKiBwYWNrYWdlID0gcGx1Z2luc1tpXTsKKworICAgICAg
ICBpbmZvLT5uYW1lID0gcGFja2FnZS0+bmFtZSgpOworICAgICAgICBpbmZvLT5maWxlID0gcGFj
a2FnZS0+ZmlsZU5hbWUoKTsKKyAgICAgICAgaW5mby0+ZGVzYyA9IHBhY2thZ2UtPmRlc2NyaXB0
aW9uKCk7CisKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3JpcHRpb25zTWFwJiBtaW1lVG9EZXNj
cmlwdGlvbnMgPSBwYWNrYWdlLT5taW1lVG9EZXNjcmlwdGlvbnMoKTsKKyAgICAgICAgTUlNRVRv
RGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtaW1lVG9EZXNjcmlwdGlvbnMu
ZW5kKCk7CisgICAgICAgIGZvciAoTUlNRVRvRGVzY3JpcHRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1pbWVUb0Rlc2NyaXB0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAg
ICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKworICAgICAgICAgICAgbWltZS0+dHlw
ZSA9IGl0LT5maXJzdDsKKyAgICAgICAgICAgIG1pbWUtPmRlc2MgPSBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgbWltZS0+cGx1Z2luID0gaW5mbzsKKworICAgICAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gZXh0ZW5zaW9ucyA9IHBhY2thZ2UtPm1pbWVUb0V4dGVuc2lvbnMoKS5nZXQobWltZS0+dHlw
ZSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleHRlbnNpb25zLnNp
emUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgICAg
ICAgICBtaW1lLT5zdWZmaXhlcyArPSAiLCI7CisKKyAgICAgICAgICAgICAgICBtaW1lLT5zdWZm
aXhlcyArPSBleHRlbnNpb25zW2ldOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAg
ICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKICAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbHVn
aW5EYXRhOjpyZWZyZXNoKCkKIHsKLSAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgUGx1Z2luRGF0
YWJhc2UgKmRiID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKTsKKyAgICBkYi0+
cmVmcmVzaCgpOwogfQogCiB9OwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFi
YXNlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhYmFz
ZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhYmFz
ZVF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIgorCisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRRmlsZUluZm8+Cisj
aW5jbHVkZSA8UVN0cmluZ0xpc3Q+CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGx1Z2luUGFja2FnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0
YWJhc2U6OmdldFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhz
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhIGNhc2UgaW5zZW5zaXRp
dmUgc2V0LgorICAgIEhhc2hTZXQ8U3RyaW5nPiB1bmlxdWVGaWxlbmFtZXM7CisKKyAgICBRU3Ry
aW5nTGlzdCBuYW1lRmlsdGVyczsKKyAgICBuYW1lRmlsdGVycyA8PCAiKi5zbyI7CisgICAgVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGx1Z2luRGlyZWN0b3JpZXMuZW5k
KCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdp
bkRpcmVjdG9yaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBRRGlyIGRp
ciA9IFFEaXIoUVN0cmluZygqaXQpKTsKKyAgICAgICAgaWYgKCFkaXIuZXhpc3RzKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBRRmlsZUluZm9MaXN0IGZsID0gZGlyLmVudHJ5
SW5mb0xpc3QobmFtZUZpbHRlcnMsIFFEaXI6OkZpbGVzKTsKKyAgICAgICAgZm9yZWFjaCAoY29u
c3QgUUZpbGVJbmZvIGZpLCBmbCkgeworICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU3Ry
aW5nKGZpLmFic29sdXRlRmlsZVBhdGgoKSk7CisgICAgICAgICAgICBwYXRocy5hZGQoZmlsZW5h
bWUpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhZGRRdFdlYktpdFBsdWdp
bkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBRU3RyaW5nIHF0UGF0
aChnZXRlbnYoIlFUV0VCS0lUX1BMVUdJTl9QQVRIIikpOworICAgIFFTdHJpbmdMaXN0IHF0UGF0
aHMgPSBxdFBhdGguc3BsaXQoIjoiLCBRU3RyaW5nOjpTa2lwRW1wdHlQYXJ0cyk7CisgICAgZm9y
KGludCBpID0gMDsgaSA8IHF0UGF0aHMuc2l6ZSgpOyBpKyspIHsKKyAgICAJcGF0aHMuYXBwZW5k
KHF0UGF0aHMuYXQoaSkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgYWRkTW96aWxsYVBsdWdp
bkRpcmVjdG9yaWVzKFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBRRGlyIHBhdGggPSBR
RGlyOjpob21lKCk7IHBhdGguY2QoIi5tb3ppbGxhL3BsdWdpbnMiKTsgCisgICAgcGF0aHMuYXBw
ZW5kKHBhdGguYWJzb2x1dGVQYXRoKCkpOworICAgIHBhdGhzLmFwcGVuZCgiL3Vzci9saWIvYnJv
d3Nlci9wbHVnaW5zIik7CisgICAgcGF0aHMuYXBwZW5kKCIvdXNyL2xvY2FsL2xpYi9tb3ppbGxh
L3BsdWdpbnMiKTsKKyAgICBwYXRocy5hcHBlbmQoIi91c3IvbGliL21vemlsbGEvcGx1Z2lucyIp
OworICAgIAorICAgIFFTdHJpbmcgbW96UGF0aChnZXRlbnYoIk1PWl9QTFVHSU5fUEFUSCIpKTsK
KyAgICBRU3RyaW5nTGlzdCBtb3pQYXRocyA9IG1velBhdGguc3BsaXQoIjoiLCBRU3RyaW5nOjpT
a2lwRW1wdHlQYXJ0cyk7CisgICAgZm9yKGludCBpID0gMDsgaSA8IG1velBhdGhzLnNpemUoKTsg
aSsrKSB7CisgICAgCXBhdGhzLmFwcGVuZChtb3pQYXRocy5hdChpKSk7CisgICAgfQorfQorCitW
ZWN0b3I8U3RyaW5nPiBQbHVnaW5EYXRhYmFzZTo6ZGVmYXVsdFBsdWdpbkRpcmVjdG9yaWVzKCkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKworICAgIGFkZFF0V2ViS2l0UGx1Z2luRGly
ZWN0b3JpZXMocGF0aHMpOworICAgIGFkZE1vemlsbGFQbHVnaW5EaXJlY3RvcmllcyhwYXRocyk7
CisgICAgCisgICAgcmV0dXJuIHBhdGhzOworfQorCitib29sIFBsdWdpbkRhdGFiYXNlOjppc1By
ZWZlcnJlZFBsdWdpbkRpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisJUURpciBwcmVm
UGF0aCA9IFFEaXI6OmhvbWUoKTsKKwlwcmVmUGF0aC5jZCgiLm1vemlsbGEvcGx1Z2lucyIpOwor
ICAgIHJldHVybiAocGF0aCA9PSBwcmVmUGF0aC5hYnNvbHV0ZVBhdGgoKSk7Cit9CisKK30KClBy
b3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhYmFzZVF0LmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJD
b3JlL3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsdWdpbnMvcXQvUGx1Z2luUGFja2FnZVF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGx1Z2lucy9xdC9QbHVnaW5QYWNrYWdlUXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5QYWNrYWdlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAibnBy
dW50aW1lX2ltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBs
dWdpbkRlYnVnLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5QYWNrYWdl
OjpkZXRlcm1pbmVRdWlya3MoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBpZiAoTUlN
RVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUobWltZVR5cGUpKSB7CisgICAgICAg
IC8vIEJlY2F1c2UgYSBzaW5nbGUgcHJvY2VzcyBjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFZNcywg
YW5kIHdlIGNhbm5vdCByZWxpYWJseSB1bmxvYWQgYQorICAgICAgICAvLyBKYXZhIFZNLCB3ZSBj
YW5ub3QgdW5sb2FkIHRoZSBKYXZhIHBsdWdpbiwgb3Igd2UnbGwgbG9zZSByZWZlcmVuY2UgdG8g
b3VyIG9ubHkgVk0KKyAgICAgICAgbV9xdWlya3MuYWRkKFBsdWdpblF1aXJrRG9udFVubG9hZFBs
dWdpbik7CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgd2luZG93IHJlZ2lvbiB0byBhbiBlbXB0
eSByZWdpb24gY2F1c2VzIGJhZCBzY3JvbGxpbmcgcmVwYWludCBwcm9ibGVtcworICAgICAgICAv
LyB3aXRoIHRoZSBKYXZhIHBsdWctaW4uCisgICAgICAgIG1fcXVpcmtzLmFkZChQbHVnaW5RdWly
a0RvbnRDbGlwVG9aZXJvUmVjdFdoZW5TY3JvbGxpbmcpOworICAgIH0KKyAgICAKKyAgICBpZiAo
bWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIikgeworICAgICAgICAv
LyBUaGUgZmxhc2ggcGx1Z2luIG9ubHkgcmVxdWVzdHMgd2luZG93bGVzcyBwbHVnaW5zIGlmIHdl
IHJldHVybiBhIG1vemlsbGEgdXNlciBhZ2VudAorICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtXYW50c01vemlsbGFVc2VyQWdlbnQpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2lu
UXVpcmtUaHJvdHRsZUludmFsaWRhdGUpOworICAgICAgICBtX3F1aXJrcy5hZGQoUGx1Z2luUXVp
cmtUaHJvdHRsZVdNVXNlclBsdXNPbmVNZXNzYWdlcyk7CisgICAgICAgIG1fcXVpcmtzLmFkZChQ
bHVnaW5RdWlya0ZsYXNoVVJMTm90aWZ5QnVnKTsKKyAgICB9CisKK30KKworYm9vbCBQbHVnaW5Q
YWNrYWdlOjpmZXRjaEluZm8oKQoreworICAgIGlmICghbG9hZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBOUFBfR2V0VmFsdWVQcm9jUHRyIGd2ID0gKE5QUF9HZXRWYWx1ZVByb2NQ
dHIpbV9tb2R1bGUtPnJlc29sdmUoIk5QX0dldFZhbHVlIik7CisgICAgdHlwZWRlZiBjaGFyICoo
Kk5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKSgpOworICAgIE5QUF9HZXRNSU1FRGVzY3Jp
cHRpb25Qcm9jUHRyIGdtID0KKyAgICAJKE5QUF9HZXRNSU1FRGVzY3JpcHRpb25Qcm9jUHRyKW1f
bW9kdWxlLT5yZXNvbHZlKCJOUF9HZXRNSU1FRGVzY3JpcHRpb24iKTsKKyAgICBpZiAoIWdtIHx8
ICFndikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNoYXIgKmJ1ZiA9IDA7
CisgICAgTlBFcnJvciBlcnIgPSBndigwLCBOUFBWcGx1Z2luTmFtZVN0cmluZywgKHZvaWQgKikm
YnVmKTsKKyAgICBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgbV9uYW1lID0gYnVmOworICAgIGVyciA9IGd2KDAsIE5QUFZwbHVn
aW5EZXNjcmlwdGlvblN0cmluZywgKHZvaWQgKikmYnVmKTsKKyAgICBpZiAoZXJyICE9IE5QRVJS
X05PX0VSUk9SKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9kZXNjcmlw
dGlvbiA9IGJ1ZjsKKworICAgIFN0cmluZyBzID0gZ20oKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0
eXBlczsKKyAgICBzLnNwbGl0KFVDaGFyKCc7JyksIGZhbHNlLCB0eXBlcyk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBtaW1lOworICAgICAgICB0eXBlc1tpXS5zcGxpdChVQ2hhcignOicpLCBmYWxzZSwgbWltZSk7
IAorICAgICAgICBpZiAobWltZS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBleHRzOworICAgICAgICAgICAgbWltZVswXS5zcGxpdChVQ2hhcignLCcpLCBmYWxzZSwg
ZXh0cyk7CisgICAgICAgICAgICBkZXRlcm1pbmVRdWlya3MobWltZVswXSk7CisgICAgICAgICAg
ICBtX21pbWVUb0V4dGVuc2lvbnMuYWRkKG1pbWVbMF0sIGV4dHMpOworICAgICAgICAgICAgaWYg
KG1pbWUuc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgICAgIG1fbWltZVRvRGVzY3JpcHRpb25z
LmFkZChtaW1lWzBdLCBtaW1lWzJdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBsdWdpblBhY2thZ2U6OmxvYWQoKQorewor
ICAgIGlmIChtX2lzTG9hZGVkKSB7CisgICAgICAgIG1fbG9hZENvdW50Kys7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIG1fbW9kdWxlID0gbmV3IFFMaWJyYXJ5KChRU3RyaW5n
KW1fcGF0aCk7CisgICAgaWYgKCFtX21vZHVsZS0+bG9hZCgpKSB7CisgICAgCUxPRyhQbHVnaW4s
ICIlcyBub3QgbG9hZGVkIiwgbV9wYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgbV9pc0xvYWRlZCA9IHRydWU7CisKKyAgICBOUF9Jbml0aWFs
aXplRnVuY1B0ciBOUF9Jbml0aWFsaXplOworICAgIE5QRXJyb3IgbnBFcnI7CisKKyAgICBOUF9J
bml0aWFsaXplID0gKE5QX0luaXRpYWxpemVGdW5jUHRyKW1fbW9kdWxlLT5yZXNvbHZlKCJOUF9J
bml0aWFsaXplIik7CisgICAgbV9OUFBfU2h1dGRvd24gPSAoTlBQX1NodXRkb3duUHJvY1B0cilt
X21vZHVsZS0+cmVzb2x2ZSgiTlBfU2h1dGRvd24iKTsKKworICAgIGlmICghTlBfSW5pdGlhbGl6
ZSB8fCAhbV9OUFBfU2h1dGRvd24pCisgICAgICAgIGdvdG8gYWJvcnQ7CisKKyAgICBtZW1zZXQo
Jm1fcGx1Z2luRnVuY3MsIDAsIHNpemVvZihtX3BsdWdpbkZ1bmNzKSk7CisgICAgbV9wbHVnaW5G
dW5jcy5zaXplID0gc2l6ZW9mKG1fcGx1Z2luRnVuY3MpOworCisgICAgbV9icm93c2VyRnVuY3Mu
c2l6ZSA9IHNpemVvZiAobV9icm93c2VyRnVuY3MpOworICAgIG1fYnJvd3NlckZ1bmNzLnZlcnNp
b24gPSBOUF9WRVJTSU9OX01JTk9SOworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybCA9IE5QTl9H
ZXRVUkw7CisgICAgbV9icm93c2VyRnVuY3MucG9zdHVybCA9IE5QTl9Qb3N0VVJMOworICAgIG1f
YnJvd3NlckZ1bmNzLnJlcXVlc3RyZWFkID0gTlBOX1JlcXVlc3RSZWFkOworICAgIG1fYnJvd3Nl
ckZ1bmNzLm5ld3N0cmVhbSA9IE5QTl9OZXdTdHJlYW07CisgICAgbV9icm93c2VyRnVuY3Mud3Jp
dGUgPSBOUE5fV3JpdGU7CisgICAgbV9icm93c2VyRnVuY3MuZGVzdHJveXN0cmVhbSA9IE5QTl9E
ZXN0cm95U3RyZWFtOworICAgIG1fYnJvd3NlckZ1bmNzLnN0YXR1cyA9IE5QTl9TdGF0dXM7Cisg
ICAgbV9icm93c2VyRnVuY3MudWFnZW50ID0gTlBOX1VzZXJBZ2VudDsKKyAgICBtX2Jyb3dzZXJG
dW5jcy5tZW1hbGxvYyA9IE5QTl9NZW1BbGxvYzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5tZW1mcmVl
ID0gTlBOX01lbUZyZWU7CisgICAgbV9icm93c2VyRnVuY3MubWVtZmx1c2ggPSBOUE5fTWVtRmx1
c2g7CisgICAgbV9icm93c2VyRnVuY3MucmVsb2FkcGx1Z2lucyA9IE5QTl9SZWxvYWRQbHVnaW5z
OworICAgIG1fYnJvd3NlckZ1bmNzLmdldHVybG5vdGlmeSA9IE5QTl9HZXRVUkxOb3RpZnk7Cisg
ICAgbV9icm93c2VyRnVuY3MucG9zdHVybG5vdGlmeSA9IE5QTl9Qb3N0VVJMTm90aWZ5OworICAg
IG1fYnJvd3NlckZ1bmNzLmdldHZhbHVlID0gTlBOX0dldFZhbHVlOworICAgIG1fYnJvd3NlckZ1
bmNzLnNldHZhbHVlID0gTlBOX1NldFZhbHVlOworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRh
dGVyZWN0ID0gTlBOX0ludmFsaWRhdGVSZWN0OworICAgIG1fYnJvd3NlckZ1bmNzLmludmFsaWRh
dGVyZWdpb24gPSBOUE5fSW52YWxpZGF0ZVJlZ2lvbjsKKyAgICBtX2Jyb3dzZXJGdW5jcy5mb3Jj
ZXJlZHJhdyA9IE5QTl9Gb3JjZVJlZHJhdzsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRKYXZhRW52
ID0gTlBOX0dldEphdmFFbnY7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0SmF2YVBlZXIgPSBOUE5f
R2V0SmF2YVBlZXI7CisgICAgbV9icm93c2VyRnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9
IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlOworICAgIG1fYnJvd3NlckZ1bmNzLnBvcHBvcHVw
c2VuYWJsZWRzdGF0ZSA9IE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGU7CisKKyAgICBtX2Jyb3dz
ZXJGdW5jcy5yZWxlYXNldmFyaWFudHZhbHVlID0gX05QTl9SZWxlYXNlVmFyaWFudFZhbHVlOwor
ICAgIG1fYnJvd3NlckZ1bmNzLmdldHN0cmluZ2lkZW50aWZpZXIgPSBfTlBOX0dldFN0cmluZ0lk
ZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuZ2V0c3RyaW5naWRlbnRpZmllcnMgPSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJzOworICAgIG1fYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZp
ZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CisgICAgbV9icm93c2VyRnVuY3MuaWRlbnRpZmll
cmlzc3RyaW5nID0gX05QTl9JZGVudGlmaWVySXNTdHJpbmc7CisgICAgbV9icm93c2VyRnVuY3Mu
dXRmOGZyb21pZGVudGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgbV9icm93
c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7CisgICAgbV9icm93c2Vy
RnVuY3MucmV0YWlub2JqZWN0ID0gX05QTl9SZXRhaW5PYmplY3Q7CisgICAgbV9icm93c2VyRnVu
Y3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKKyAgICBtX2Jyb3dzZXJGdW5j
cy5pbnZva2UgPSBfTlBOX0ludm9rZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5pbnZva2VEZWZhdWx0
ID0gX05QTl9JbnZva2VEZWZhdWx0OworICAgIG1fYnJvd3NlckZ1bmNzLmV2YWx1YXRlID0gX05Q
Tl9FdmFsdWF0ZTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5nZXRwcm9wZXJ0eSA9IF9OUE5fR2V0UHJv
cGVydHk7CisgICAgbV9icm93c2VyRnVuY3Muc2V0cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5
OworICAgIG1fYnJvd3NlckZ1bmNzLnJlbW92ZXByb3BlcnR5ID0gX05QTl9SZW1vdmVQcm9wZXJ0
eTsKKyAgICBtX2Jyb3dzZXJGdW5jcy5oYXNwcm9wZXJ0eSA9IF9OUE5fSGFzTWV0aG9kOworICAg
IG1fYnJvd3NlckZ1bmNzLmhhc21ldGhvZCA9IF9OUE5fSGFzUHJvcGVydHk7CisgICAgbV9icm93
c2VyRnVuY3Muc2V0ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgbV9icm93c2Vy
RnVuY3MuZW51bWVyYXRlID0gX05QTl9FbnVtZXJhdGU7CisKKyAgICBucEVyciA9IE5QX0luaXRp
YWxpemUoJm1fYnJvd3NlckZ1bmNzLCAmbV9wbHVnaW5GdW5jcyk7CisgICAgaWYgKG5wRXJyICE9
IE5QRVJSX05PX0VSUk9SKQorICAgICAgICBnb3RvIGFib3J0OworCisgICAgbV9sb2FkQ291bnQr
KzsKKyAgICByZXR1cm4gdHJ1ZTsKKworYWJvcnQ6CisgICAgdW5sb2FkV2l0aG91dFNodXRkb3du
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNpZ25lZCBQbHVnaW5QYWNrYWdlOjpoYXNo
KCkgY29uc3QKK3sgCisgICAgdW5zaWduZWQgaGFzaENvZGVzWzJdID0geworICAgICAgICBtX3Bh
dGguaW1wbCgpLT5oYXNoKCksCisgICAgICAgIG1fbGFzdE1vZGlmaWVkCisgICAgfTsKKworICAg
IHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4o
aGFzaENvZGVzKSwgMiAqIHNpemVvZih1bnNpZ25lZCkgLyBzaXplb2YoVUNoYXIpKTsKK30KKwor
Ym9vbCBQbHVnaW5QYWNrYWdlOjplcXVhbChjb25zdCBQbHVnaW5QYWNrYWdlJiBhLCBjb25zdCBQ
bHVnaW5QYWNrYWdlJiBiKQoreworICAgIHJldHVybiBhLm1fZGVzY3JpcHRpb24gPT0gYi5tX2Rl
c2NyaXB0aW9uOworfQorCitpbnQgUGx1Z2luUGFja2FnZTo6Y29tcGFyZUZpbGVWZXJzaW9uKGNv
bnN0IFBsYXRmb3JtTW9kdWxlVmVyc2lvbiYgY29tcGFyZVZlcnNpb24pIGNvbnN0Cit7CisgICAg
Ly8gcmV0dXJuIC0xLCAwLCBvciAxIGlmIHBsdWctaW4gdmVyc2lvbiBpcyBsZXNzIHRoYW4sIGVx
dWFsIHRvLCBvciBncmVhdGVyIHRoYW4KKyAgICAvLyB0aGUgcGFzc2VkIHZlcnNpb24KKyAgICBp
ZiAobV9tb2R1bGVWZXJzaW9uICE9IGNvbXBhcmVWZXJzaW9uKQorICAgICAgICByZXR1cm4gbV9t
b2R1bGVWZXJzaW9uID4gY29tcGFyZVZlcnNpb24gPyAxIDogLTE7CisgICAgcmV0dXJuIDA7Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5QYWNr
YWdlUXQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5WaWV3UXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbHVnaW5zL3F0L1BsdWdpblZpZXdRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdpblZpZXcuaCIKKworI2luY2x1ZGUgPFFXaWRnZXQ+CisjaW5jbHVkZSA8UVgxMUVtYmVkQ29u
dGFpbmVyPgorI2luY2x1ZGUgPFFYMTFJbmZvPgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJQbHVnaW5EZWJ1Zy5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorI2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNs
dWRlICJydW50aW1lX3Jvb3QuaCIKKyNpbmNsdWRlIDxranMvSlNMb2NrLmg+CisjaW5jbHVkZSA8
a2pzL3ZhbHVlLmg+CisjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJranNfcHJv
eHkuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKwordXNpbmcgS0pTOjpFeGVjU3Rh
dGU7Cit1c2luZyBLSlM6OkludGVycHJldGVyOwordXNpbmcgS0pTOjpKU0xvY2s7Cit1c2luZyBL
SlM6OkpTT2JqZWN0OwordXNpbmcgS0pTOjpKU1ZhbHVlOwordXNpbmcgS0pTOjpVU3RyaW5nOwor
Cit1c2luZyBzdGQ6Om1pbjsKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK3ZvaWQgUGx1Z2luVmlldzo6dXBkYXRlV2luZG93KCkgY29uc3QKK3sKKyAg
ICBpZiAoIXBhcmVudCgpIHx8ICFtX2lzV2luZG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChwYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAgICBJbnRSZWN0IG9s
ZFdpbmRvd1JlY3QgPSBtX3dpbmRvd1JlY3Q7CisgICAgSW50UmVjdCBvbGRDbGlwUmVjdCA9IG1f
Y2xpcFJlY3Q7CisKKyAgICBtX3dpbmRvd1JlY3QgPSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVu
dHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5z
aXplKCkpOworICAgIG1fY2xpcFJlY3QgPSB3aW5kb3dDbGlwUmVjdCgpOworICAgIG1fY2xpcFJl
Y3QubW92ZSgtbV93aW5kb3dSZWN0LngoKSwgLW1fd2luZG93UmVjdC55KCkpOworCisgICAgaWYo
bV93aW5kb3cpIHsKKyAgICAJbV93aW5kb3ctPm1vdmUobV93aW5kb3dSZWN0LngoKSwgbV93aW5k
b3dSZWN0LnkoKSk7CisgICAgCW1fd2luZG93LT5yZXNpemUobV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OnNl
dEZvY3VzKCkKK3sKKyAgICBpZiAobV93aW5kb3cpCisgICAgCW1fd2luZG93LT5zZXRGb2N1cyhR
dDo6T3RoZXJGb2N1c1JlYXNvbik7CisgICAgZWxzZQorICAgIAlXaWRnZXQ6OnNldEZvY3VzKCk7
Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c2hvdygpCit7CisgICAgbV9pc1Zpc2libGUgPSB0cnVl
OworCisgICAgaWYgKG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKyAgICAJbV93aW5k
b3ctPnNldFZpc2libGUodHJ1ZSk7CisKKyAgICBXaWRnZXQ6OnNob3coKTsKK30KKwordm9pZCBQ
bHVnaW5WaWV3OjpoaWRlKCkKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOworCisgICAgaWYg
KG1fYXR0YWNoZWRUb1dpbmRvdyAmJiBtX3dpbmRvdykKKyAgICAJbV93aW5kb3ctPnNldFZpc2li
bGUoZmFsc2UpOworCisgICAgV2lkZ2V0OjpoaWRlKCk7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAgICAgLy8gRHJhdyB0aGUgIm1pc3NpbmcgcGx1
Z2luIiBpbWFnZQorICAgICAgICAvL3BhaW50TWlzc2luZ1BsdWdpbkljb24oY29udGV4dCwgcmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pc1dpbmRvd2VkIHx8IGNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6aGFuZGxlTW91c2VFdmVudChNb3VzZUV2ZW50KiBldmVudCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxW
aWV3KiBwYXJlbnQpCit7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnQocGFyZW50KTsKKworICAgIGlm
IChwYXJlbnQpCisgICAgICAgIGluaXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3dp
bmRvdykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6
c2V0TlBXaW5kb3dSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzU3Rh
cnRlZCB8fCAhcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IHAgPSBz
dGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5s
b2NhdGlvbigpKTsKKyAgICBtX25wV2luZG93LnggPSBwLngoKTsKKyAgICBtX25wV2luZG93Lnkg
PSBwLnkoKTsKKworICAgIG1fbnBXaW5kb3cud2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgbV9u
cFdpbmRvdy5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5sZWZ0ID0gMDsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IDA7CisgICAgbV9ucFdp
bmRvdy5jbGlwUmVjdC5yaWdodCA9IHJlY3Qud2lkdGgoKTsKKyAgICBtX25wV2luZG93LmNsaXBS
ZWN0LmJvdHRvbSA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICBpZiAobV9ucFdpbmRvdy54IDwgMCB8
fCBtX25wV2luZG93LnkgPCAwIHx8CisgICAgICAgIG1fbnBXaW5kb3cud2lkdGggPD0gMCB8fCBt
X25wV2luZG93LmhlaWdodCA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wbHVn
aW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdykgeworICAgICAgICBLSlM6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKyAgICAgICAgc2V0Q2FsbGluZ1BsdWdpbih0cnVlKTsK
KyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1bmNzKCktPnNldHdpbmRvdyhtX2luc3RhbmNlLCAm
bV9ucFdpbmRvdyk7CisgICAgICAgIHNldENhbGxpbmdQbHVnaW4oZmFsc2UpOworCisgICAgICAg
IEFTU0VSVChtX3dpbmRvdyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpblZpZXc6OmF0dGFjaFRv
V2luZG93KCkKK3sKKyAgICBpZiAobV9hdHRhY2hlZFRvV2luZG93KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2F0dGFjaGVkVG9XaW5kb3cgPSB0cnVlOworICAgIGlmIChtX2lzVmlzaWJsZSAm
JiBtX3dpbmRvdykKKyAgICAJbV93aW5kb3ctPnNldFZpc2libGUodHJ1ZSk7Cit9CisKK3ZvaWQg
UGx1Z2luVmlldzo6ZGV0YWNoRnJvbVdpbmRvdygpCit7CisgICAgaWYgKCFtX2F0dGFjaGVkVG9X
aW5kb3cpCisJcmV0dXJuOworCisgICAgaWYgKG1faXNWaXNpYmxlICYmIG1fd2luZG93KQorICAg
IAltX3dpbmRvdy0+c2V0VmlzaWJsZShmYWxzZSk7CisgICAgbV9hdHRhY2hlZFRvV2luZG93ID0g
ZmFsc2U7Cit9CisKK3ZvaWQgUGx1Z2luVmlldzo6c3RvcCgpCit7CisgICAgaWYgKCFtX2lzU3Rh
cnRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFt
PiA+IHN0cmVhbXMgPSBtX3N0cmVhbXM7CisgICAgSGFzaFNldDxSZWZQdHI8UGx1Z2luU3RyZWFt
PiA+OjppdGVyYXRvciBlbmQgPSBzdHJlYW1zLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQ
dHI8UGx1Z2luU3RyZWFtPiA+OjppdGVyYXRvciBpdCA9IHN0cmVhbXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5zdG9wKCk7CisgICAgICAgIGRpc2Nvbm5lY3RT
dHJlYW0oKCppdCkuZ2V0KCkpOworICAgIH0KKworICAgIEFTU0VSVChtX3N0cmVhbXMuaXNFbXB0
eSgpKTsKKworICAgIG1faXNTdGFydGVkID0gZmFsc2U7CisKKyAgICBLSlM6OkpTTG9jazo6RHJv
cEFsbExvY2tzIGRyb3BBbGxMb2NrczsKKworICAgIC8vIENsZWFyIHRoZSB3aW5kb3cKKyAgICBt
X25wV2luZG93LndpbmRvdyA9IDA7CisgICAgZGVsZXRlIChOUFNldFdpbmRvd0NhbGxiYWNrU3Ry
dWN0ICopbV9ucFdpbmRvdy53c19pbmZvOworICAgIG1fbnBXaW5kb3cud3NfaW5mbyA9IDA7Cisg
ICAgaWYgKG1fcGx1Z2luLT5wbHVnaW5GdW5jcygpLT5zZXR3aW5kb3cgJiYgIW1fcGx1Z2luLT5x
dWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya0RvbnRTZXROdWxsV2luZG93SGFuZGxlT25EZXN0
cm95KSkgeworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAgICBtX3BsdWdp
bi0+cGx1Z2luRnVuY3MoKS0+c2V0d2luZG93KG1faW5zdGFuY2UsICZtX25wV2luZG93KTsKKyAg
ICAgICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgfQorCisgICAgLy8gRGVzdHJveSB0
aGUgcGx1Z2luCisgICAgeworICAgICAgICBzZXRDYWxsaW5nUGx1Z2luKHRydWUpOworICAgICAg
ICBtX3BsdWdpbi0+cGx1Z2luRnVuY3MoKS0+ZGVzdHJveShtX2luc3RhbmNlLCAwKTsKKyAgICAg
ICAgc2V0Q2FsbGluZ1BsdWdpbihmYWxzZSk7CisgICAgfQorCisgICAgbV9pbnN0YW5jZS0+cGRh
dGEgPSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciogTW96aWxsYVVzZXJBZ2VudCA9ICJNb3pp
bGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6MS44LjEpIEdlY2tvLzIwMDYx
MDEwIEZpcmVmb3gvMi4wIjsKKworY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkK
K3sKKyAgICBpZiAobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrV2FudHNN
b3ppbGxhVXNlckFnZW50KSkKKyAgICAgICAgcmV0dXJuIE1vemlsbGFVc2VyQWdlbnQ7CisKKyAg
ICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wYXJl
bnRGcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX3VybCkudXRmOCgpOworCisgICAgcmV0dXJu
IG1fdXNlckFnZW50LmRhdGEoKTsKK30KKworTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0
UmVhZEZpbGUoVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1
ZikKK3sKKyAgICBTdHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOworCisgICAgaWYgKGZpbGVuYW1l
LnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vi
c3RyaW5nKDgpOworCisgICAgaWYoIWZpbGVFeGlzdHMoZmlsZW5hbWUpKQorICAgICAgICByZXR1
cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAvL0ZJWE1FIC0gcmVhZCB0aGUgZmlsZSBk
YXRhIGludG8gYnVmZmVyCisgICAgRklMRSogZmlsZUhhbmRsZSA9IGZvcGVuKChmaWxlbmFtZS51
dGY4KCkpLmRhdGEoKSwgInIiKTsKKyAgICAKKyAgICBpZiAoZmlsZUhhbmRsZSA9PSAwKQorICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisKKyAgICAvL2J1ZmZlci5yZXNpemUo
KTsKKworICAgIGludCBieXRlc1JlYWQgPSBmcmVhZChidWZmZXIuZGF0YSgpLCAxLCAwLCBmaWxl
SGFuZGxlKTsKKworICAgIGZjbG9zZShmaWxlSGFuZGxlKTsKKworICAgIGlmIChieXRlc1JlYWQg
PD0gMCkKKyAgICAgICAgcmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOworCisJcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworfQorCitOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlKE5QTlZhcmlh
YmxlIHZhcmlhYmxlLCB2b2lkKiB2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhYmxlKSB7Cisg
ICAgICAgIGNhc2UgTlBOVnhEaXNwbGF5OiB7CisgICAgICAgICAgICBpZiAobV93aW5kb3cpCisg
ICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVlID0gbV93aW5kb3ctPngxMUluZm8oKS5kaXNw
bGF5KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKih2b2lkICoqKXZhbHVl
ID0gY29udGFpbmluZ1dpbmRvdygpLT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgICAgICAgICAg
cmV0dXJuIE5QRVJSX05PX0VSUk9SOyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgTlBOVnh0QXBwQ29udGV4dDogeworICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dF
TkVSSUNfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZUb29sa2l0OiB7Cisg
ICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSAwOworICAgICAgICAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBOUE5WU3VwcG9ydHNYRW1i
ZWRCb29sOiB7CisgICAgICAgICAgICAqKCh1aW50MzIgKil2YWx1ZSkgPSB0cnVlOworICAgICAg
ICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9SOworICAgICAgICB9CisKKyNpZiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgY2FzZSBOUE5WV2luZG93TlBPYmplY3Q6IHsKKwkg
ICAgaWYgKG1faXNKYXZhU2NyaXB0UGF1c2VkKQorCQlyZXR1cm4gTlBFUlJfR0VORVJJQ19FUlJP
UjsKKworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVjdCA9IG1fcGFyZW50
RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiB2
YWx1ZSBpcyBleHBlY3RlZCB0byBiZSByZXRhaW5lZCwgYXMgZGVzY3JpYmVkIGhlcmU6IDxodHRw
Oi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3BsdWdpbi9ucHJ1bnRpbWUuaHRtbD4KKyAgICAg
ICAgICAgIGlmICh3aW5kb3dTY3JpcHRPYmplY3QpCisgICAgICAgICAgICAgICAgX05QTl9SZXRh
aW5PYmplY3Qod2luZG93U2NyaXB0T2JqZWN0KTsKKworICAgICAgICAgICAgdm9pZCoqIHYgPSAo
dm9pZCoqKXZhbHVlOworICAgICAgICAgICAgKnYgPSB3aW5kb3dTY3JpcHRPYmplY3Q7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJPUjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdDogeworCSAgICBpZiAobV9p
c0phdmFTY3JpcHRQYXVzZWQpCisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOworCisgICAg
ICAgICAgICBOUE9iamVjdCogcGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKKworICAgICAgICAgICAg
aWYgKG1fZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IG1fZWxlbWVudC0+aGFzVGFn
TmFtZShlbWJlZFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCisgICAg
ICAgICAgICAgICAgcGx1Z2luU2NyaXB0T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVs
ZW1lbnQqPihtX2VsZW1lbnQpLT5nZXROUE9iamVjdCgpOworCisgICAgICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2NyaWJlZCBoZXJlOiA8
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50aW1lLmh0bWw+Cisg
ICAgICAgICAgICBpZiAocGx1Z2luU2NyaXB0T2JqZWN0KQorICAgICAgICAgICAgICAgIF9OUE5f
UmV0YWluT2JqZWN0KHBsdWdpblNjcmlwdE9iamVjdCk7CisKKyAgICAgICAgICAgIHZvaWQqKiB2
ID0gKHZvaWQqKil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gcGx1Z2luU2NyaXB0T2JqZWN0Owor
CisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKyNlbmRpZgor
CisgICAgICAgIGNhc2UgTlBOVm5ldHNjYXBlV2luZG93OiB7CisgICAgICAgICAgICB2b2lkKiB3
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odmFsdWUpOworICAgICAgICAgICAgKigoWElEICop
dykgPSBjb250YWluaW5nV2luZG93KCktPndpbklkKCk7CisgICAgICAgICAgICByZXR1cm4gTlBF
UlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE5QTlZqYXZhc2NyaXB0RW5h
YmxlZEJvb2w6IHsKKyAgICAgICAgICAgICooKHVpbnQzMiAqKXZhbHVlKSA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CisgICAgfQorfQor
Cit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KE5QUmVjdCogcmVjdCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWdpb24o
TlBSZWdpb24gcmVnaW9uKQoreworCW5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGx1Z2lu
Vmlldzo6Zm9yY2VSZWRyYXcoKQoreworCW5vdEltcGxlbWVudGVkKCk7Cit9CisKK1BsdWdpblZp
ZXc6On5QbHVnaW5WaWV3KCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBkZWxldGVBbGxWYWx1ZXMo
bV9yZXF1ZXN0cyk7CisKKyAgICBmcmVlU3RyaW5nQXJyYXkobV9wYXJhbU5hbWVzLCBtX3BhcmFt
Q291bnQpOworICAgIGZyZWVTdHJpbmdBcnJheShtX3BhcmFtVmFsdWVzLCBtX3BhcmFtQ291bnQp
OworCisgICAgbV9wYXJlbnRGcmFtZS0+Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odGhp
cyk7CisKKyAgICBpZiAobV9wbHVnaW4gJiYgIShtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMo
UGx1Z2luUXVpcmtEb250VW5sb2FkUGx1Z2luKSkpCisgICAgICAgIG1fcGx1Z2luLT51bmxvYWQo
KTsKKworICAgIGRlbGV0ZSBtX3dpbmRvdzsKK30KKwordm9pZCBQbHVnaW5WaWV3Ojppbml0KCkK
K3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hh
dmVJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGx1Z2luKSB7CisgICAgICAgIEFT
U0VSVChtX3N0YXR1cyA9PSBQbHVnaW5TdGF0dXNDYW5Ob3RGaW5kUGx1Z2luKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wbHVnaW4tPmxvYWQoKSkgeworICAgICAgICBt
X3BsdWdpbiA9IDA7CisgICAgICAgIG1fc3RhdHVzID0gUGx1Z2luU3RhdHVzQ2FuTm90TG9hZFBs
dWdpbjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RhcnQoKSkgeworICAg
ICAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0Nhbk5vdExvYWRQbHVnaW47CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX25lZWRzWEVtYmVkID0gZmFsc2U7CisgICAgaWYgKG1fcGx1
Z2luLT5wbHVnaW5GdW5jcygpLT5nZXR2YWx1ZSkKKyAgICAgICAgbV9wbHVnaW4tPnBsdWdpbkZ1
bmNzKCktPmdldHZhbHVlKG1faW5zdGFuY2UsIE5QUFZwbHVnaW5OZWVkc1hFbWJlZCwgJm1fbmVl
ZHNYRW1iZWQpOworCisgICAgaWYgKG1fbmVlZHNYRW1iZWQpIHsKKyAgICAgICAgbV93aW5kb3cg
PSBuZXcgUVgxMUVtYmVkQ29udGFpbmVyKGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgICAgIHNl
dE5hdGl2ZVdpZGdldChtX3dpbmRvdyk7CisgICAgICAgIHNldElzTlBBUElQbHVnaW4odHJ1ZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgbV9zdGF0
dXMgPSBQbHVnaW5TdGF0dXNDYW5Ob3RMb2FkUGx1Z2luOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHNob3cgKCk7CisKKyAgICBOUFNldFdpbmRvd0NhbGxiYWNrU3RydWN0ICp3c2kgPSBu
ZXcgTlBTZXRXaW5kb3dDYWxsYmFja1N0cnVjdCgpOworCisgICAgd3NpLT50eXBlID0gMDsKKwor
ICAgIHdzaS0+ZGlzcGxheSA9IG1fd2luZG93LT54MTFJbmZvKCkuZGlzcGxheSgpOworICAgIHdz
aS0+dmlzdWFsID0gKFZpc3VhbCopbV93aW5kb3ctPngxMUluZm8oKS52aXN1YWwoKTsKKyAgICB3
c2ktPmRlcHRoID0gbV93aW5kb3ctPngxMUluZm8oKS5kZXB0aCgpOworICAgIHdzaS0+Y29sb3Jt
YXAgPSBtX3dpbmRvdy0+eDExSW5mbygpLmNvbG9ybWFwKCk7CisgICAgbV9ucFdpbmRvdy53c19p
bmZvID0gd3NpOworCisJbV9ucFdpbmRvdy50eXBlID0gTlBXaW5kb3dUeXBlV2luZG93OworICAg
IG1fbnBXaW5kb3cud2luZG93ID0gKHZvaWQqKW1fd2luZG93LT53aW5JZCgpOworCisgICAgaWYg
KCEobV9wbHVnaW4tPnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJrRGVmZXJGaXJzdFNldFdp
bmRvd0NhbGwpKSkKKyAgICAgICAgc2V0TlBXaW5kb3dSZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisK
KyAgICBtX3N0YXR1cyA9IFBsdWdpblN0YXR1c0xvYWRlZFN1Y2Nlc3NmdWxseTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbHVnaW5z
L3F0L1BsdWdpblZpZXdRdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCShy
ZXZpc2lvbiAzMjcyNikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luUGFja2FnZVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDMwICs2Niw2IEBAIGludCBQbHVnaW5QYWNrYWdlOjpj
b21wYXJlRmlsZVZlcnNpb24oY28KICAgICByZXR1cm4gMDsKIH0KIAotaW50IFBsdWdpblBhY2th
Z2U6OmNvbXBhcmUoY29uc3QgUGx1Z2luUGFja2FnZSYgY29tcGFyZVRvKSBjb25zdAotewotICAg
IC8vIFNvcnQgcGx1Zy1pbnMgdGhhdCBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMgZmlyc3QuCi0g
ICAgYm9vbCBBYWxsb3dzTXVsdGlwbGVJbnN0YW5jZXMgPSAhcXVpcmtzKCkuY29udGFpbnMoUGx1
Z2luUXVpcmtEb250QWxsb3dNdWx0aXBsZUluc3RhbmNlcyk7Ci0gICAgYm9vbCBCYWxsb3dzTXVs
dGlwbGVJbnN0YW5jZXMgPSAhY29tcGFyZVRvLnF1aXJrcygpLmNvbnRhaW5zKFBsdWdpblF1aXJr
RG9udEFsbG93TXVsdGlwbGVJbnN0YW5jZXMpOwotICAgIGlmIChBYWxsb3dzTXVsdGlwbGVJbnN0
YW5jZXMgIT0gQmFsbG93c011bHRpcGxlSW5zdGFuY2VzKQotICAgICAgICByZXR1cm4gQWFsbG93
c011bHRpcGxlSW5zdGFuY2VzID8gLTEgOiAxOwotCi0gICAgLy8gU29ydCBwbHVnLWlucyBpbiBh
IHByZWZlcnJlZCBwYXRoIGZpcnN0LgotICAgIGJvb2wgQWlzSW5QcmVmZXJyZWRQYXRoID0gUGx1
Z2luRGF0YWJhc2U6OmlzUHJlZmVycmVkUGx1Z2luRGlyZWN0b3J5KHBhcmVudERpcmVjdG9yeSgp
KTsKLSAgICBib29sIEJpc0luUHJlZmVycmVkUGF0aCA9IFBsdWdpbkRhdGFiYXNlOjppc1ByZWZl
cnJlZFBsdWdpbkRpcmVjdG9yeShjb21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkpOwotICAgIGlm
IChBaXNJblByZWZlcnJlZFBhdGggIT0gQmlzSW5QcmVmZXJyZWRQYXRoKQotICAgICAgICByZXR1
cm4gQWlzSW5QcmVmZXJyZWRQYXRoID8gLTEgOiAxOwotCi0gICAgaW50IGRpZmYgPSBzdHJjbXAo
bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGNvbXBhcmVUby5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVybiBkaWZmOwotCi0gICAgaWYgKGRpZmYgPSBjb21w
YXJlRmlsZVZlcnNpb24oY29tcGFyZVRvLnZlcnNpb24oKSkpCi0gICAgICAgIHJldHVybiBkaWZm
OwotCi0gICAgcmV0dXJuIHN0cmNtcChwYXJlbnREaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpLCBj
b21wYXJlVG8ucGFyZW50RGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KIGJvb2wgUGx1
Z2luUGFja2FnZTo6aXNQbHVnaW5CbGFja2xpc3RlZCgpCiB7CiAgICAgc3RhdGljIGNvbnN0IFBs
YXRmb3JtTW9kdWxlVmVyc2lvbiBzbFBsdWdpbk1pblJlcXVpcmVkKDB4NTFCRTAwMDAsIDB4MDAw
MTAwMDApOwpJbmRleDogV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCShyZXZpc2lv
biAzMjcyNikKKysrIFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOCBDb2xsYWJvcmEsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NjIsNyArNTYyLDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpz
dG9wKCkKICAgICAgICAgICAgIFNldFdpbmRvd0xvbmdQdHIobV93aW5kb3csIEdXTFBfV05EUFJP
QywgKExPTkcpbV9wbHVnaW5XbmRQcm9jKTsKICAgICB9CiAKLSAgICBLSlM6OkpTTG9jazo6RHJv
cEFsbExvY2tzOworICAgIEtKUzo6SlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzOwog
CiAgICAgLy8gQ2xlYXIgdGhlIHdpbmRvdwogICAgIG1fbnBXaW5kb3cud2luZG93ID0gMDsKQEAg
LTU4OCwzMyArNTg4LDYgQEAgdm9pZCBQbHVnaW5WaWV3OjpzdG9wKCkKICAgICBtX2luc3RhbmNl
LT5wZGF0YSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVTdHJpbmdBcnJheShjaGFyKiogc3Ry
aW5nQXJyYXksIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFzdHJpbmdBcnJheSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAg
ZmFzdEZyZWUoc3RyaW5nQXJyYXlbaV0pOwotCi0gICAgZmFzdEZyZWUoc3RyaW5nQXJyYXkpOwot
fQotCi1zdGF0aWMgS1VSTCBtYWtlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IGNoYXIq
IHJlbGF0aXZlVVJMU3RyaW5nKQotewotICAgIFN0cmluZyB1cmxTdHJpbmcgPSByZWxhdGl2ZVVS
TFN0cmluZzsKLQotICAgIC8vIFN0cmlwIHJldHVybiBjaGFyYWN0ZXJzLgotICAgIHVybFN0cmlu
Zy5yZXBsYWNlKCdcbicsICIiKTsKLSAgICB1cmxTdHJpbmcucmVwbGFjZSgnXHInLCAiIik7Ci0K
LSAgICByZXR1cm4gS1VSTChiYXNlVVJMLCB1cmxTdHJpbmcpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc3RhcnRzV2l0aEJsYW5rTGluZShjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKLXsK
LSAgICByZXR1cm4gYnVmZmVyLnNpemUoKSA+IDAgJiYgYnVmZmVyWzBdID09ICdcbic7Ci19Ci0K
IGNvbnN0IGNoYXIqIFBsdWdpblZpZXc6OnVzZXJBZ2VudCgpCiB7CiAgICAgaWYgKG1fcGx1Z2lu
LT5xdWlya3MoKS5jb250YWlucyhQbHVnaW5RdWlya1dhbnRzTW96aWxsYVVzZXJBZ2VudCkpCkBA
IC02MjUsMjM3ICs1OTgsODcgQEAgY29uc3QgY2hhciogUGx1Z2luVmlldzo6dXNlckFnZW50KCkK
ICAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBs
b2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCi17
Ci0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBidWZmZXIuZGF0YSgpOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGJ1ZmZlci5zaXplKCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoIC0gNDsgaSsrKSB7Ci0gICAgICAgIC8vIFN1cHBvcnQgZm9yIEFjcm9iYXQuIEl0IHNlbmRz
ICJcblxuIi4KLSAgICAgICAgaWYgKGJ5dGVzW2ldID09ICdcbicgJiYgYnl0ZXNbaSArIDFdID09
ICdcbicpCi0gICAgICAgICAgICByZXR1cm4gaSArIDI7Ci0gICAgICAgIAotICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBwb3NpdGlvbiBhZnRlciAyIENSTEYncyBvciAxIENSTEYgaWYgaXQgaXMgdGhl
IGZpcnN0IGxpbmUuCi0gICAgICAgIGlmIChieXRlc1tpXSA9PSAnXHInICYmIGJ5dGVzW2kgKyAx
XSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBpZiAoaSA9PSAy
KQotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnl0ZXNb
aV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBEaXJlY3Rvci4gSXQg
c2VuZHMgIlxyXG5cbiIgKDM4ODAzODcpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGJ5dGVzW2ldID09ICdccicgJiYgYnl0ZXNbaSArIDFdID09
ICdcbicpCi0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgRmxhc2guIEl0IHNlbmRzICJc
clxuXHJcbiIgKDM3NTgxMTMpLgotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBj
aGFyKiBmaW5kRU9MKGNvbnN0IGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
Ly8gQWNjb3JkaW5nIHRvIHRoZSBIVFRQIHNwZWNpZmljYXRpb24gRU9MIGlzIGRlZmluZWQgYXMK
LSAgICAvLyBhIENSTEYgcGFpci4gVW5mb3J0dW5hdGVseSwgc29tZSBzZXJ2ZXJzIHdpbGwgdXNl
IExGCi0gICAgLy8gaW5zdGVhZC4gV29yc2UgeWV0LCBzb21lIHNlcnZlcnMgd2lsbCB1c2UgYSBj
b21iaW5hdGlvbgotICAgIC8vIG9mIGJvdGggKGUuZy4gPGhlYWRlcj5DUkxGTEY8Ym9keT4pLCBz
byBmaW5kRU9MIG5lZWRzCi0gICAgLy8gdG8gYmUgbW9yZSBmb3JnaXZpbmcuIEl0IHdpbGwgbm93
IGFjY2VwdCBDUkxGLCBMRiBvcgotICAgIC8vIENSLgotICAgIC8vCi0gICAgLy8gSXQgcmV0dXJu
cyBOVUxMIGlmIEVPTEYgaXMgbm90IGZvdW5kIG9yIGl0IHdpbGwgcmV0dXJuCi0gICAgLy8gYSBw
b2ludGVyIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChieXRlc1tpXSA9PSAn
XG4nKQotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzICsgaTsKLSAgICAgICAgaWYgKGJ5dGVzW2ld
ID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBzcGFubmluZyBidWZm
ZXIgYm91bmRzCi0gICAgICAgICAgICAvLyAoQ1JMRiBpcyBhY3Jvc3MgcmVhZHMpLiBJZiBzbywg
d2FpdCBmb3IKLSAgICAgICAgICAgIC8vIG5leHQgcmVhZC4KLSAgICAgICAgICAgIGlmIChpICsg
MSA9PSBsZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHJldHVy
biBieXRlcyArIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh
dGljIGlubGluZSBTdHJpbmcgY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShjb25zdCBT
dHJpbmcmIG5hbWUpCitOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZShWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmKQogewotICAgIGJv
b2wgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7Ci0gICAgU3RyaW5nIHJlc3VsdDsKKyAgICBT
dHJpbmcgZmlsZW5hbWUoYnVmLCBsZW4pOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG5hbWUubGVuZ3RoKCk7IGkrKykgewotICAgICAgICBVQ2hhciBjOworICAgIGlmIChmaWxlbmFt
ZS5zdGFydHNXaXRoKCJmaWxlOi8vLyIpKQorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1
YnN0cmluZyg4KTsKIAotICAgICAgICBpZiAoY2FwaXRhbGl6ZUNoYXJhY3RlciAmJiBuYW1lW2ld
ID49ICdhJyAmJiBuYW1lW2ldIDw9ICd6JykKLSAgICAgICAgICAgIGMgPSB0b0FTQ0lJVXBwZXIo
bmFtZVtpXSk7Ci0gICAgICAgIGVsc2UgaWYgKCFjYXBpdGFsaXplQ2hhcmFjdGVyICYmIG5hbWVb
aV0gPj0gJ0EnICYmIG5hbWVbaV0gPD0gJ1onKQotICAgICAgICAgICAgYyA9IHRvQVNDSUlMb3dl
cihuYW1lW2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYyA9IG5hbWVbaV07CisgICAg
Ly8gR2V0IGZpbGUgaW5mbworICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7Cisg
ICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9PSAwKQorICAgICAg
ICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CiAKLSAgICAgICAgaWYgKG5hbWVbaV0gPT0g
Jy0nKQotICAgICAgICAgICAgY2FwaXRhbGl6ZUNoYXJhY3RlciA9IHRydWU7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhcGl0YWxpemVDaGFyYWN0ZXIgPSBmYWxzZTsKKyAgICBpZiAoYXR0
cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKyAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7
Ci0gICAgfQorICAgIEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVcoZmlsZW5hbWUuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVf
UkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7CisgICAgCisgICAgaWYgKGZpbGVIYW5kbGUg
PT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9G
T1VORDsKIAotICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgYnVmZmVyLnJlc2l6ZShhdHRycy5u
RmlsZVNpemVMb3cpOwogCi1zdGF0aWMgaW5saW5lIEhUVFBIZWFkZXJNYXAgcGFyc2VSRkM4MjJI
ZWFkZXJGaWVsZHMoY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgY29uc3QgY2hh
ciogZW9sOwotICAgIFN0cmluZyBsYXN0S2V5OwotICAgIEhUVFBIZWFkZXJNYXAgaGVhZGVyRmll
bGRzOwotCi0gICAgLy8gTG9vcCBvdmUgcmxpbmVzIHVudGlsIHdlJ3JlIHBhc3QgdGhlIGhlYWRl
ciwgb3Igd2UgY2FuJ3QgZmluZCBhbnkgbW9yZSBlbmQtb2YtbGluZXMKLSAgICB3aGlsZSAoKGVv
bCA9IGZpbmRFT0woYnl0ZXMsIGxlbmd0aCkpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbmUg
PSBieXRlczsKLSAgICAgICAgaW50IGxpbmVMZW5ndGggPSBlb2wgLSBieXRlczsKLSAgICAgICAg
Ci0gICAgICAgIC8vIE1vdmUgYnl0ZXMgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgdGVybWlu
YXRvciBhcyByZXR1cm5lZCBieSBmaW5kRU9MLgotICAgICAgICBieXRlcyA9IGVvbCArIDE7Ci0g
ICAgICAgIGlmICgoKmVvbCA9PSAnXHInKSAmJiAoKmJ5dGVzID09ICdcbicpKQotICAgICAgICAg
ICAgYnl0ZXMrKzsgLy8gU2FmZSBzaW5jZSBmaW5kRU9MIHdvbid0IHJldHVybiBhIHNwYW5uaW5n
IENSTEYuCi0KLSAgICAgICAgbGVuZ3RoIC09IChieXRlcyAtIGxpbmUpOwotICAgICAgICBpZiAo
bGluZUxlbmd0aCA9PSAwKQotICAgICAgICAgICAgLy8gQmxhbmsgbGluZTsgd2UncmUgYXQgdGhl
IGVuZCBvZiB0aGUgaGVhZGVyCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAo
KmxpbmUgPT0gJyAnIHx8ICpsaW5lID09ICdcdCcpIHsKLSAgICAgICAgICAgIC8vIENvbnRpbnVh
dGlvbiBvZiB0aGUgcHJldmlvdXMgaGVhZGVyCi0gICAgICAgICAgICBpZiAobGFzdEtleS5pc051
bGwoKSkgewotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBoZWFkZXI7IGlnbm9yZSBpdCBh
bmQgY29udGludWUKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJl
dmlvdXMgaGVhZGVyCi0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IGhlYWRl
ckZpZWxkcy5nZXQobGFzdEtleSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld1ZhbHVlKGxp
bmUsIGxpbmVMZW5ndGgpOworICAgIERXT1JEIGJ5dGVzUmVhZDsKKyAgICBpbnQgcmV0dmFsID0g
UmVhZEZpbGUoZmlsZUhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgYXR0cnMubkZpbGVTaXplTG93LCAm
Ynl0ZXNSZWFkLCAwKTsKIAotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5zZXQobGFzdEtl
eSwgY3VycmVudFZhbHVlICsgbmV3VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gQnJhbmQgbmV3IGhlYWRlcgotICAgICAgICAgICAgY29uc3Qg
Y2hhciogY29sb247Ci0gICAgICAgICAgICBmb3IgKGNvbG9uID0gbGluZTsgKmNvbG9uICE9ICc6
JyAmJiBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKLSAgICAgICAgICAgICAgICAvLyBlbXB0eSBs
b29wCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29sb24gPT0gZW9sKSAKLSAgICAg
ICAgICAgICAgICAvLyBtYWxmb3JtZWQgaGVhZGVyOyBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBsYXN0S2V5ID0gY2FwaXRhbGl6ZVJGQzgyMkhlYWRlckZpZWxkTmFtZShTdHJpbmcobGlu
ZSwgY29sb24gLSBsaW5lKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwotCi0gICAg
ICAgICAgICAgICAgZm9yIChjb2xvbisrOyBjb2xvbiAhPSBlb2w7IGNvbG9uKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCpjb2xvbiAhPSAnICcgJiYgKmNvbG9uICE9ICdcdCcpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbG9uID09IGVvbCkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAiIjsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gU3RyaW5n
KGNvbG9uLCBlb2wgLSBjb2xvbik7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgb2xkVmFsdWUg
PSBoZWFkZXJGaWVsZHMuZ2V0KGxhc3RLZXkpOwotICAgICAgICAgICAgICAgIGlmICghb2xkVmFs
dWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRtcCA9IG9sZFZhbHVl
OwotICAgICAgICAgICAgICAgICAgICB0bXAgKz0gIiwgIjsKLSAgICAgICAgICAgICAgICAgICAg
dG1wICs9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRtcDsKLSAgICAgICAg
ICAgICAgICB9CisgICAgQ2xvc2VIYW5kbGUoZmlsZUhhbmRsZSk7CiAKLSAgICAgICAgICAgICAg
ICBoZWFkZXJGaWVsZHMuc2V0KGxhc3RLZXksIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBoZWFkZXJGaWVsZHM7CisgICAgaWYgKHJldHZhbCA9
PSAwIHx8IGJ5dGVzUmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCisgICAgICAgIHJldHVybiBO
UEVSUl9GSUxFX05PVF9GT1VORDsKIH0KIAotTlBFcnJvciBQbHVnaW5WaWV3OjpoYW5kbGVQb3N0
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgY2hhciogdGFyZ2V0LCB1aW50MzIgbGVuLCBjb25zdCBj
aGFyKiBidWYsIGJvb2wgZmlsZSwgdm9pZCogbm90aWZ5RGF0YSwgYm9vbCBzZW5kTm90aWZpY2F0
aW9uLCBib29sIGFsbG93SGVhZGVycykKK05QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWUoTlBO
VmFyaWFibGUgdmFyaWFibGUsIHZvaWQqIHZhbHVlKQogewotICAgIGlmICghdXJsIHx8ICFsZW4g
fHwgIWJ1ZikKLSAgICAgICAgcmV0dXJuIE5QRVJSX0lOVkFMSURfUEFSQU07CisgICAgc3dpdGNo
ICh2YXJpYWJsZSkgeworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBj
YXNlIE5QTlZXaW5kb3dOUE9iamVjdDogeworCSAgICBpZiAobV9pc0phdmFTY3JpcHRQYXVzZWQp
CisJCXJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwogCi0gICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZUxvYWRSZXF1ZXN0OworICAgICAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE9iamVj
dCA9IG1fcGFyZW50RnJhbWUtPndpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CiAKLSAgICBIVFRQSGVh
ZGVyTWFwIGhlYWRlckZpZWxkczsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgIAotICAg
IGlmIChmaWxlKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZShidWYsIGxlbik7CisgICAgICAg
ICAgICAvLyBSZXR1cm4gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgcmV0YWluZWQsIGFzIGRlc2Ny
aWJlZCBoZXJlOiA8aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9wbHVnaW4vbnBydW50
aW1lLmh0bWw+CisgICAgICAgICAgICBpZiAod2luZG93U2NyaXB0T2JqZWN0KQorICAgICAgICAg
ICAgICAgIF9OUE5fUmV0YWluT2JqZWN0KHdpbmRvd1NjcmlwdE9iamVjdCk7CiAKLSAgICAgICAg
aWYgKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6Ly8vIikpCi0gICAgICAgICAgICBmaWxlbmFt
ZSA9IGZpbGVuYW1lLnN1YnN0cmluZyg4KTsKKyAgICAgICAgICAgIHZvaWQqKiB2ID0gKHZvaWQq
Kil2YWx1ZTsKKyAgICAgICAgICAgICp2ID0gd2luZG93U2NyaXB0T2JqZWN0OworICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CisgICAgICAgIH0KIAotICAg
ICAgICAvLyBHZXQgZmlsZSBpbmZvCi0gICAgICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEg
YXR0cnM7Ci0gICAgICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc0V4VyhmaWxlbmFtZS5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykg
PT0gMCkKLSAgICAgICAgICAgIHJldHVybiBOUEVSUl9GSUxFX05PVF9GT1VORDsKKyAgICAgICAg
Y2FzZSBOUE5WUGx1Z2luRWxlbWVudE5QT2JqZWN0OiB7CisJICAgIGlmIChtX2lzSmF2YVNjcmlw
dFBhdXNlZCkKKwkJcmV0dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAKLSAgICAgICAgaWYgKGF0
dHJzLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0gICAgICAg
ICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisgICAgICAgICAgICBOUE9iamVjdCog
cGx1Z2luU2NyaXB0T2JqZWN0ID0gMDsKIAotICAgICAgICBIQU5ETEUgZmlsZUhhbmRsZSA9IENy
ZWF0ZUZpbGVXKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEZJTEVf
UkVBRF9EQVRBLCBGSUxFX1NIQVJFX1JFQUQsIDAsIE9QRU5fRVhJU1RJTkcsIDAsIDApOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0g
ICAgICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CisgICAgICAgICAgICBpZiAo
bV9lbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgbV9lbGVtZW50LT5oYXNUYWdOYW1l
KGVtYmVkVGFnKSB8fCBtX2VsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAg
ICAgICAgICBwbHVnaW5TY3JpcHRPYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVu
dCo+KG1fZWxlbWVudCktPmdldE5QT2JqZWN0KCk7CiAKLSAgICAgICAgYnVmZmVyLnJlc2l6ZShh
dHRycy5uRmlsZVNpemVMb3cpOworICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlIGlzIGV4cGVj
dGVkIHRvIGJlIHJldGFpbmVkLCBhcyBkZXNjcmliZWQgaGVyZTogPGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvcHJvamVjdHMvcGx1Z2luL25wcnVudGltZS5odG1sPgorICAgICAgICAgICAgaWYgKHBs
dWdpblNjcmlwdE9iamVjdCkKKyAgICAgICAgICAgICAgICBfTlBOX1JldGFpbk9iamVjdChwbHVn
aW5TY3JpcHRPYmplY3QpOwogCi0gICAgICAgIERXT1JEIGJ5dGVzUmVhZDsKLSAgICAgICAgaW50
IHJldHZhbCA9IFJlYWRGaWxlKGZpbGVIYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGF0dHJzLm5GaWxl
U2l6ZUxvdywgJmJ5dGVzUmVhZCwgMCk7CisgICAgICAgICAgICB2b2lkKiogdiA9ICh2b2lkKiop
dmFsdWU7CisgICAgICAgICAgICAqdiA9IHBsdWdpblNjcmlwdE9iamVjdDsKIAotICAgICAgICBD
bG9zZUhhbmRsZShmaWxlSGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBOUEVSUl9OT19FUlJP
UjsKKyAgICAgICAgfQorI2VuZGlmCiAKLSAgICAgICAgaWYgKHJldHZhbCA9PSAwIHx8IGJ5dGVz
UmVhZCAhPSBhdHRycy5uRmlsZVNpemVMb3cpCi0gICAgICAgICAgICByZXR1cm4gTlBFUlJfRklM
RV9OT1RfRk9VTkQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVmZmVyLnJlc2l6ZShsZW4pOwot
ICAgICAgICBtZW1jcHkoYnVmZmVyLmRhdGEoKSwgYnVmLCBsZW4pOwotICAgIH0KKyAgICAgICAg
Y2FzZSBOUE5WbmV0c2NhcGVXaW5kb3c6IHsKKyAgICAgICAgICAgIFBsYXRmb3JtV2lkZ2V0KiB3
ID0gcmVpbnRlcnByZXRfY2FzdDxQbGF0Zm9ybVdpZGdldCo+KHZhbHVlKTsKIAotICAgIGNvbnN0
IGNoYXIqIHBvc3REYXRhID0gYnVmZmVyLmRhdGEoKTsKLSAgICBpbnQgcG9zdERhdGFMZW5ndGgg
PSBidWZmZXIuc2l6ZSgpOwotICAgIAotICAgIGlmIChhbGxvd0hlYWRlcnMpIHsKLSAgICAgICAg
aWYgKHN0YXJ0c1dpdGhCbGFua0xpbmUoYnVmZmVyKSkgewotICAgICAgICAgICAgcG9zdERhdGEr
KzsKLSAgICAgICAgICAgIHBvc3REYXRhTGVuZ3RoLS07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpbnQgbG9jYXRpb24gPSBsb2NhdGlvbkFmdGVyRmlyc3RCbGFua0xpbmUoYnVmZmVy
KTsKLSAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBibGFuayBsaW5lIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBidWZm
ZXIsIGV2ZXJ5dGhpbmcgYmVmb3JlIGlzIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICBoZWFk
ZXJGaWVsZHMgPSBwYXJzZVJGQzgyMkhlYWRlckZpZWxkcyhidWZmZXIsIGxvY2F0aW9uKTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBkYXRhTGVuZ3RoID0gYnVmZmVyLnNpemUoKSAtIGxvY2F0
aW9uOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHBsdWdpbnMgbGlrZSB0byBzZXQg
Q29udGVudC1MZW5ndGggdGhlbXNlbHZlcyB3aGVuIHRoZXkgcG9zdCwKLSAgICAgICAgICAgICAg
ICAvLyBidXQgV2ViRm91bmRhdGlvbiBkb2VzIG5vdCBsaWtlIHRoYXQuIFNvIHdlIHdpbGwgcmVt
b3ZlIHRoZSBoZWFkZXIKLSAgICAgICAgICAgICAgICAvLyBhbmQgaW5zdGVhZCB0cnVuY2F0ZSB0
aGUgZGF0YSB0byB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KLSAgICAgICAgICAgICAgICBTdHJpbmcg
Y29udGVudExlbmd0aCA9IGhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGguaXNOdWxsKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMZW5ndGggPSBtaW4oY29udGVudExlbmd0aC50b0ludCgpLCAoaW50KWRhdGFM
ZW5ndGgpOwotICAgICAgICAgICAgICAgIGhlYWRlckZpZWxkcy5yZW1vdmUoIkNvbnRlbnQtTGVu
Z3RoIik7CisgICAgICAgICAgICAqdyA9IGNvbnRhaW5pbmdXaW5kb3coKTsKIAotICAgICAgICAg
ICAgICAgIHBvc3REYXRhICs9IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIHBvc3REYXRhTGVu
Z3RoID0gZGF0YUxlbmd0aDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CiAgICAgfQotCi0gICAgZnJhbWVMb2FkUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS5zZXRIVFRQTWV0aG9kKCJQT1NUIik7Ci0gICAgZnJhbWVMb2FkUmVx
dWVzdC5yZXNvdXJjZVJlcXVlc3QoKS5zZXRVUkwobWFrZVVSTChtX2Jhc2VVUkwsIHVybCkpOwot
ICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkuYWRkSFRUUEhlYWRlckZpZWxk
cyhoZWFkZXJGaWVsZHMpOwotICAgIGZyYW1lTG9hZFJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCku
c2V0SFRUUEJvZHkoRm9ybURhdGE6OmNyZWF0ZShwb3N0RGF0YSwgcG9zdERhdGFMZW5ndGgpKTsK
LSAgICBmcmFtZUxvYWRSZXF1ZXN0LnNldEZyYW1lTmFtZSh0YXJnZXQpOwotCi0gICAgcmV0dXJu
IGxvYWQoZnJhbWVMb2FkUmVxdWVzdCwgc2VuZE5vdGlmaWNhdGlvbiwgbm90aWZ5RGF0YSk7CiB9
CiAKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiByZWN0KQpJbmRleDog
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDMyNzI2KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAwOC0wNC0zMCAgTWFyYyBPcmRpbmFzIGkgTGxvcGlzICA8bWFy
Yy5vcmRpbmFzaWxsb3Bpc0Bjb2xsYWJvcmEuY28udWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NzUwCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMg
b24gR3RrIGFuZCBRdC14MTEgcG9ydHMuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
OjpGcmFtZUxvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50
Ojpjb21taXR0ZWRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpyZWRpcmVj
dERhdGFUb1BsdWdpbik6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5p
c2hlZExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFp
bkRvY3VtZW50RXJyb3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50R3RrLmg6CisKIDIwMDgtMDQtMzAgIFNlYW4gRWdhbiAgPHNlYW5lZ2FuQGdtYWlsLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBhbmQgbW9kaWZpZWQgYnkgSG9sZ2VyLgpJbmRleDogV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAJKHJl
dmlzaW9uIDMyNzI2KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC01Nyw2ICs1OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBGcmFt
ZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQog
ICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV91c2Vy
QWdlbnQoIiIpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUpOwpAQCAtMTYyLDkgKzE2NCwzMCBAQCB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtCiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZy
YW1lTG9hZGVyKCk7Ci0gICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5n
TmFtZSgpLCBmYWxzZSk7Ci0gICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICBjb25z
dCBTdHJpbmcmIHRleHRFbmNvZGluZyA9IGxvYWRlci0+cmVzcG9uc2UoKS50ZXh0RW5jb2RpbmdO
YW1lKCk7CisKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBBU1NFUlQobG9hZGVy
LT5mcmFtZSgpKTsKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgZW5jb2Rpbmcgb24gdGhlIGZyYW1l
IGxvYWRlciBpcyBvdXIgd2F5IHRvIGdldCB3b3JrIGRvbmUgdGhhdCBpcyBub3JtYWxseSBkb25l
CisgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBldmVu
IGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpibGFu
aykuCisgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IGxvYWRlci0+b3ZlcnJpZGVFbmNvZGluZygp
OworICAgICAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7CisgICAgICAg
IGlmICghdXNlckNob3NlbikKKyAgICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25z
ZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKKworICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2Fk
ZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAgIGZyYW1lTG9hZGVyLT5zZXRFbmNv
ZGluZyhlbmNvZGluZywgdXNlckNob3Nlbik7CisgICAgICAgIGlmIChkYXRhKQorICAgICAgICAg
ICAgZnJhbWVMb2FkZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICBpZiAo
bV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmICghbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbikg
eworICAgICAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRSZWNlaXZlUmVzcG9uc2UobG9hZGVyLT5y
ZXNwb25zZSgpKTsKKyAgICAgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwg
bGVuZ3RoKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQg
bG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtMjYw
LDkgKzI4MywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvCiAg
ICAgKGNvcmUobV9mcmFtZSktPmxvYWRlcigpLT4qcG9saWN5RnVuY3Rpb24pKFBvbGljeVVzZSk7
CiB9CiAKLVdpZGdldCogRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRT
aXplJiwgRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCkKK1dpZGdldCogRnJhbWVMb2Fk
ZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
UGx1Z2luVmlldyogcGx1Z2luVmlldyA9IFBsdWdpblZpZXc6OmNyZWF0ZShjb3JlKG1fZnJhbWUp
LCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1l
VHlwZSwgbG9hZE1hbnVhbGx5KTsKKworICAgIGlmIChwbHVnaW5WaWV3LT5zdGF0dXMoKSA9PSBQ
bHVnaW5TdGF0dXNMb2FkZWRTdWNjZXNzZnVsbHkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3
OworCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5MCw4ICszMTcsNyBAQCBQYXNzUmVmUHRyPEZy
YW1lPiBGcmFtZUxvYWRlckNsaWVudDo6Y3JlCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnJl
ZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuOworICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBs
dWdpblZpZXcqPihwbHVnaW5XaWRnZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBFbGVtZW50KiwgY29uc3Qg
S1VSTCYgYmFzZVVSTCwKQEAgLTU4NywxNCArNjEzLDEzIEBAIFN0cmluZyBGcmFtZUxvYWRlckNs
aWVudDo6Z2VuZXJhdGVkTUlNRVQKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZmluaXNoZWRM
b2FkaW5nKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlcikKIHsKLSAgICBBU1NFUlQoZG9j
dW1lbnRMb2FkZXItPmZyYW1lKCkpOwotICAgIC8vIFNldHRpbmcgdGhlIGVuY29kaW5nIG9uIHRo
ZSBmcmFtZSBsb2FkZXIgaXMgb3VyIHdheSB0byBnZXQgd29yayBkb25lIHRoYXQgaXMgbm9ybWFs
bHkgZG9uZQotICAgIC8vIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiBkYXRhIGlzIHJlY2VpdmVkLCBl
dmVuIGZvciB0aGUgY2FzZSBvZiBhIGRvY3VtZW50IHdpdGggbm8gZGF0YSAobGlrZSBhYm91dDpi
bGFuaykuCi0gICAgU3RyaW5nIGVuY29kaW5nID0gZG9jdW1lbnRMb2FkZXItPm92ZXJyaWRlRW5j
b2RpbmcoKTsKLSAgICBib29sIHVzZXJDaG9zZW4gPSAhZW5jb2RpbmcuaXNOdWxsKCk7Ci0gICAg
aWYgKGVuY29kaW5nLmlzTnVsbCgpKQotICAgICAgICBlbmNvZGluZyA9IGRvY3VtZW50TG9hZGVy
LT5yZXNwb25zZSgpLnRleHRFbmNvZGluZ05hbWUoKTsKLSAgICBkb2N1bWVudExvYWRlci0+ZnJh
bWVMb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOworICAgIGlmICgh
bV9wbHVnaW5WaWV3KQorICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVyLCAwLCAw
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7
CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9Q
bHVnaW4gPSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtNzEwLDkgKzczNSwxMyBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9wbHVnaW5WaWV3
KSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1
Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsK
KyAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnN0YXJ0RG93bmxvYWQoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JikKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMx
LDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIAogdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYkZyYW1lIFdlYktpdFdlYkZyYW1lOwogCkBAIC0xNzAsNiArMTcyLDEw
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbV9mcmFtZTsK
ICAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBX
ZWJDb3JlOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisKKyAgICAgICAgLy8gUGx1Z2luIHZpZXcgdG8g
cmVkaXJlY3QgZGF0YSB0bworICAgICAgICBXZWJDb3JlOjpQbHVnaW5WaWV3KiBtX3BsdWdpblZp
ZXc7CisgICAgICAgIGJvb2wgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbjsKICAgICB9OwogCiB9
CkluZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDMyNzI2KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA4LTA0LTMwICBNYXJjIE9yZGluYXMgaSBMbG9waXMg
IDxtYXJjLm9yZGluYXNpbGxvcGlzQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3NTAKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgTlBBUEkgcGx1
Z2lucyBvbiBHdGsgYW5kIFF0LXgxMSBwb3J0cy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdDo6RnJhbWVMb2FkZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0OjpmaW5pc2hlZExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdDo6c2V0TWFpbkRvY3VtZW50RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0OjpvYmplY3RDb250ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDo6cmVkaXJlY3REYXRhVG9QbHVnaW4pOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKwogMjAwOC0wNC0zMCAgVG9yIEFy
bmUgVmVzdGLDuCAgPHRhdmVzdGJvQHRyb2xsdGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24uCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAzMjcyNikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUcm9sbHRlY2ggQVNBCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGEu
aCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tl
ci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3Qu
aCIKQEAgLTEzMiw2ICsxMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogRnJhbWVMb2FkZXJDbGll
bnRRdDo6RnJhbWVMb2FkZXJDbGllbnRRdCgpCiAgICAgOiBtX2ZyYW1lKDApCiAgICAgLCBtX3dl
YkZyYW1lKDApCisgICAgLCBtX3BsdWdpblZpZXcoMCkKICAgICAsIG1fZmlyc3REYXRhKGZhbHNl
KQogICAgICwgbV9wb2xpY3lGdW5jdGlvbigwKQogICAgICwgbV9sb2FkU3VjY2VlZGVkKGZhbHNl
KQpAQCAtNTA2LDEwICs1MDksMTcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaWRDaGFu
Z2VUaXRsZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1
bWVudExvYWRlciogbG9hZGVyKQogewotICAgIGlmIChtX2ZpcnN0RGF0YSkgewotICAgICAgICBG
cmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgICAgIGZsLT5zZXRF
bmNvZGluZyhtX3Jlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOwotICAgICAgICBt
X2ZpcnN0RGF0YSA9IGZhbHNlOworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlm
KG1fZmlyc3REYXRhKSB7CisgICAgICAgICAgICBGcmFtZUxvYWRlciAqZmwgPSBsb2FkZXItPmZy
YW1lTG9hZGVyKCk7CisgICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7
IAorICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9o
YXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwogICAgIH0KIH0KIApAQCAtNjUyLDIyICs2
NjIsMzYgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudFF0OjpjYW5DYWNoZVBhZ2UoKQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnNldE1haW5Eb2N1bWVudEVycm9yKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQog
ewotICAgIGlmIChtX2ZpcnN0RGF0YSkgewotICAgICAgICBsb2FkZXItPmZyYW1lTG9hZGVyKCkt
PnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAg
ICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAg
ICAgaWYgKG1fZmlyc3REYXRhKSB7CisgICAgICAgICAgICBsb2FkZXItPmZyYW1lTG9hZGVyKCkt
PnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7CisgICAg
ICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGYWlsKGVycm9yKTsKKyAgICAgICAgbV9wbHVnaW5WaWV3
ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZhbHNlOwogICAgIH0K
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0g
ICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVMb2FkZXIgKmZsID0g
bG9hZGVyLT5mcmFtZUxvYWRlcigpOwotICAgIGlmIChtX2ZpcnN0RGF0YSkgewotICAgICAgICBm
bC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKLSAg
ICAgICAgbV9maXJzdERhdGEgPSBmYWxzZTsKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAg
ICAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEZyYW1lTG9h
ZGVyICpmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgaWYgKG1fZmlyc3REYXRh
KSB7CisgICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdO
YW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsKKyAgICAgICAgICAgIG1fcGx1
Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVzcG9uc2UoKSk7CisgICAgICAg
ICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aCk7CiAgICAgfQotICAg
IGZsLT5hZGREYXRhKGRhdGEsIGxlbmd0aCk7CiB9CiAKIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
RnJhbWVMb2FkZXJDbGllbnRRdDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtOTQ5LDcgKzk3Myw3IEBAIE9iamVjdENvbnRlbnRUeXBl
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om8KICAgICBpZiAoX21pbWVUeXBlID09ICJhcHBsaWNhdGlv
bi94LXF0LXBsdWdpbiIgfHwgX21pbWVUeXBlID09ICJhcHBsaWNhdGlvbi94LXF0LXN0eWxlZC13
aWRnZXQiKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwogCi0gICAg
aWYgKHVybC5pc0VtcHR5KCkpCisgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgIV9taW1lVHlwZS5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROb25lOwogCiAgICAgU3RyaW5n
IG1pbWVUeXBlID0gX21pbWVUeXBlOwpAQCAtOTY0LDYgKzk4OCw5IEBAIE9iamVjdENvbnRlbnRU
eXBlIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om8KICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENv
bnRlbnRJbWFnZTsKIAorICAgIGlmIChQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygp
LT5pc01JTUVUeXBlUmVnaXN0ZXJlZChtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBPYmplY3RD
b250ZW50TmV0c2NhcGVQbHVnaW47CisKICAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJh
bWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlKSkKICAg
ICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRPdGhlclBsdWdpbjsKIApAQCAtOTg2LDcgKzEwMTMs
NyBAQCBzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBxc3R5bGVTaGVldFByCiAKIGNvbnN0IHVu
c2lnbmVkIG51bXFTdHlsZVNoZWV0UHJvcGVydGllcyA9IHNpemVvZihxc3R5bGVTaGVldFByb3Bl
cnRpZXMpIC8gc2l6ZW9mKHFzdHlsZVNoZWV0UHJvcGVydGllc1swXSk7CiAKLVdpZGdldCogRnJh
bWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LAorV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6
ZSYgcGx1Z2luU2l6ZSwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAvLyAgICAgcURlYnVnKCk8PCIt
LS0tLS0gQ3JlYXRpbmcgcGx1Z2luIGluIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdp
biBmb3IgIjw8dXJsLnByZXR0eVVSTCgpIDw8IG1pbWVUeXBlOwpAQCAtMTAyOCwyNyArMTA1NSwz
MSBAQCBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpCiAKICAgICAgICAg
ICAgIHdpZGdldC0+c2V0U3R5bGVTaGVldChzdHlsZVNoZWV0KTsKICAgICAgICAgfQotICAgIH0K
IAogI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBRV2ViUGx1Z2luRmFjdG9yeSogZmFjdG9yeSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+cGx1Z2lu
RmFjdG9yeSgpOwotICAgICAgICBpZiAoZmFjdG9yeSkKLSAgICAgICAgICAgIG9iamVjdCA9IGZh
Y3RvcnktPmNyZWF0ZShtaW1lVHlwZSwgcXVybCwgcGFyYW1zLCB2YWx1ZXMpOwotICAgIH0KKyAg
ICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0
b3J5ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wbHVnaW5GYWN0b3J5KCk7CisgICAgICAgICAgICBp
ZiAoZmFjdG9yeSkKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWlt
ZVR5cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKKyAgICAgICAgfQogI2VuZGlmCiAKLSAgICBp
ZiAob2JqZWN0KSB7Ci0gICAgICAgIFFXaWRnZXQgKndpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lk
Z2V0ICo+KG9iamVjdCk7Ci0gICAgICAgIFFXaWRnZXQgKnZpZXcgPSBtX3dlYkZyYW1lLT5wYWdl
KCktPnZpZXcoKTsKLSAgICAgICAgaWYgKHdpZGdldCAmJiB2aWV3KSB7Ci0gICAgICAgICAgICB3
aWRnZXQtPnNldFBhcmVudCh2aWV3KTsKLSAgICAgICAgICAgIFdpZGdldCogdz0gbmV3IFdpZGdl
dCgpOwotICAgICAgICAgICAgdy0+c2V0TmF0aXZlV2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdzsKKyAgICAgICAgaWYgKG9iamVjdCkgeworICAgICAgICAgICAgUVdpZGdldCAq
d2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQgKj4ob2JqZWN0KTsKKyAgICAgICAgICAgIFFX
aWRnZXQgKnZpZXcgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnZpZXcoKTsKKyAgICAgICAgICAgIGlm
ICh3aWRnZXQgJiYgdmlldykgeworICAgICAgICAgICAgICAgIHdpZGdldC0+c2V0UGFyZW50KHZp
ZXcpOworICAgICAgICAgICAgICAgIFdpZGdldCogdz0gbmV3IFdpZGdldCgpOworICAgICAgICAg
ICAgICAgIHctPnNldE5hdGl2ZVdpZGdldCh3aWRnZXQpOworICAgICAgICAgICAgICAgIHJldHVy
biB3OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpbmdzIHdv
cmsgZm9yIHdpZGdldGxlc3MgcGx1Z2lucyBhcyB3ZWxsCisgICAgICAgICAgICBkZWxldGUgb2Jq
ZWN0OwogICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaW5ncyB3b3JrIGZvciB3
aWRnZXRsZXNzIHBsdWdpbnMgYXMgd2VsbAotICAgICAgICBkZWxldGUgb2JqZWN0OworICAgIH0g
ZWxzZSB7IC8vIE5QQVBJIFBsdWdpbnMKKyAgICAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9
IFBsdWdpblZpZXc6OmNyZWF0ZShtX2ZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsCisg
ICAgICAgICAgICBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsIGxvYWRNYW51YWxs
eSk7CisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OwogICAgIH0KIAogICAgIHJldHVybiAwOwpA
QCAtMTA1Niw4ICsxMDg3LDcgQEAgV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQ
bHVnaQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdp
ZGdldCogcGx1Z2luV2lkZ2V0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
OworICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5XaWRn
ZXQpOwogfQogCiBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUphdmFBcHBsZXRX
aWRnZXQoY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLApAQCAt
MTA3Nyw3ICsxMTA3LDYgQEAgUVN0cmluZyBGcmFtZUxvYWRlckNsaWVudFF0OjpjaG9vc2VGaWxl
KAogICAgIHJldHVybiB3ZWJGcmFtZSgpLT5wYWdlKCktPmNob29zZUZpbGUod2ViRnJhbWUoKSwg
b2xkRmlsZSk7CiB9CiAKLQogfQogCiAjaW5jbHVkZSAibW9jX0ZyYW1lTG9hZGVyQ2xpZW50UXQu
Y3BwIgpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5oCShyZXZpc2lvbiAzMjcyNikKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3LTIwMDggVHJvbGx0ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4
IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJSZWZDb3VudGVkLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgor
I2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKIGNsYXNzIFFXZWJGcmFtZTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMjA0LDYgKzIwNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBtX2ZpcnN0RGF0YTsK
ICAgICAgICAgRnJhbWVQb2xpY3lGdW5jdGlvbiBtX3BvbGljeUZ1bmN0aW9uOworCisgICAgICAg
IC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICAgICAgV2ViQ29yZTo6UGx1
Z2luVmlldyogbV9wbHVnaW5WaWV3OworICAgICAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9Q
bHVnaW47CisKICAgICAgICAgYm9vbCBtX2xvYWRTdWNjZWVkZWQ7CiAgICAgfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>