<?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>15914</bug_id>
          
          <creation_ts>2007-11-08 22:29:23 -0800</creation_ts>
          <short_desc>[GTK] Implement Unicode functionality using GLib</short_desc>
          <delta_ts>2011-05-24 19:01:41 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>31468</dependson>
    
    <dependson>31469</dependson>
    
    <dependson>31470</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alp Toker">alp</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>christian</cc>
    
    <cc>christophe.public</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cosimoc</cc>
    
    <cc>darin</cc>
    
    <cc>david.krause</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>erik-webkit</cc>
    
    <cc>fsulima</cc>
    
    <cc>grzegorz.dabrowski</cc>
    
    <cc>gustavo</cc>
    
    <cc>j</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>marco.barisione</cc>
    
    <cc>mh+webkit</cc>
    
    <cc>mikkel</cc>
    
    <cc>mlturbon</cc>
    
    <cc>naiem.shaik</cc>
    
    <cc>slomo</cc>
    
    <cc>s.mathur</cc>
    
    <cc>tofu.linden</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zuh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60732</commentid>
    <comment_count>0</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-11-08 22:29:23 -0800</bug_when>
    <thetext>GLib&apos;s Unicode manipulation API:

http://library.gnome.org/devel/glib/stable/glib-Unicode-Manipulation.html

The old gtk-webcore project does this to a small extent and is a good starting place for inspiration.

This could be a fairly easy way to shave off 10M shared library memory use due to ICU. I haven&apos;t investigated how complete the coverage is though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>61940</commentid>
    <comment_count>1</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-11-21 12:07:18 -0800</bug_when>
    <thetext>Can you quickly point where is the code that should be modified?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66374</commentid>
    <comment_count>2</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-06 07:31:17 -0800</bug_when>
    <thetext>JavaScriptCore/wtf/unicode/qt4/UnicodeQt4.h is a good place to start porting, though we probably don&apos;t want to inline some of the larger functions here.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69099</commentid>
    <comment_count>3</comment_count>
      <attachid>18852</attachid>
    <who name="Jürg Billeter">j</who>
    <bug_when>2008-02-01 14:00:13 -0800</bug_when>
    <thetext>Created attachment 18852
Preliminary patch removing ICU dependency

I&apos;ve replaced the ICU dependency by the unicode functionality of GLib, Pango, and fribidi. The attached patch is experimental. It&apos;s probably quite a bit slower as I had to add many conversions between UTF-8 and UTF-16. TextBoundariesGtk.cpp implementation is still missing, so at least text entry won&apos;t work.

Pango already contains a copy of fribidi, however, the Pango API doesn&apos;t provide access to Bidi Type information. That&apos;s why I had to add a direct dependency on fribidi. Maybe this could be eliminated by extending the API in a future version of Pango.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69922</commentid>
    <comment_count>4</comment_count>
    <who name="Jürg Billeter">j</who>
    <bug_when>2008-02-09 08:20:27 -0800</bug_when>
    <thetext>I&apos;ve filed a Pango enhancement request to avoid the fribidi dependency: http://bugzilla.gnome.org/show_bug.cgi?id=515432</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73150</commentid>
    <comment_count>5</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-03-09 18:09:57 -0700</bug_when>
    <thetext>r30913 now conditionalises ICU use in the GTK+ port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78939</commentid>
    <comment_count>6</comment_count>
      <attachid>20824</attachid>
    <who name="Jürg Billeter">j</who>
    <bug_when>2008-04-25 14:42:23 -0700</bug_when>
    <thetext>Created attachment 20824
Updated patch

I&apos;ve updated the patch to not depend on fribidi anymore using the new function available in pango 1.21.0. I&apos;ve also implemented TextBoundariesGtk.cpp, so selection in text input elements basically work again.

The patch still needs work, though. It doesn&apos;t register all available encodings and the semantics of the text break iterator implementation doesn&apos;t seem to completely match the ICU iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82326</commentid>
    <comment_count>7</comment_count>
      <attachid>21500</attachid>
    <who name="Naiem">naiem.shaik</who>
    <bug_when>2008-06-04 22:59:20 -0700</bug_when>
    <thetext>Created attachment 21500
Modified the Juergbi&apos;s patch for umemcasecmp function

Modified couple of lines in earlier patch in umemcasecmp function for sending the string length.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82751</commentid>
    <comment_count>8</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-06-09 08:13:54 -0700</bug_when>
    <thetext>In r33380 (http://trac.webkit.org/changeset/33380) the appendOmittingBOM function was removed. So this patch can&apos;t be cleanly applied to tip of trunk currently (appendOmittingBOM is used for example in TextCodecGtk::decode()). The solution I came up with so far was to explicitly specify UTF-16LE as the target encoding in g_iconv_open() of TextCodecGtk::createIConvDecoder(). Currently I only used LE, but Glib&apos;s byte-order macros could be used to determine the correct target encoding including its byte order at compile time.

This stops libiconv from generating BOMs for the result of the conversion. Consequently, there&apos;s no need for removing the BOMs when appending them to the Vector&lt;UChar&gt;, allowing us to just use result.append(buffer, count / sizeof(UChar)). 

What is your opinion on this approach? Do you think that&apos;s the right direction to go or do you see any risks? </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82758</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2008-06-09 08:51:14 -0700</bug_when>
    <thetext>&gt; This stops libiconv from generating BOMs for the result of the conversion.

Keep in mind that while it won&apos;t *add* a BOM, it will *keep* existing BOMs (zero-width no-break space to be precise) if the original stream contains them, wherever they are located (start of the stream or not)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84776</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Laird">danieljlaird</who>
    <bug_when>2008-06-30 12:45:36 -0700</bug_when>
    <thetext>I have downloaded r34824 and tried the patch.  I have updated it so that it can be applied except I am new to this and have no idea about the now missing appendOmittingBOM.  For now to get webkit building and hopefully running on GTK-DirectFB I have just commented it out.  However I was wonderig what progress had been made with this patch?
If I get it running on my platform I will be happy to try out updated patches.
For now it is just compiling and then when I run it crashes so ill sort that first but the idea of removing ICU support is great hope you can finish what you started.
dan
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89258</commentid>
    <comment_count>11</comment_count>
    <who name="Manoj">mkbhatta</who>
    <bug_when>2008-08-25 02:34:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I have downloaded r34824 and tried the patch.  I have updated it so that it can
&gt; be applied except I am new to this and have no idea about the now missing
&gt; appendOmittingBOM.  For now to get webkit building and hopefully running on
&gt; GTK-DirectFB I have just commented it out.  However I was wonderig what
&gt; progress had been made with this patch?
&gt; If I get it running on my platform I will be happy to try out updated patches.
&gt; For now it is just compiling and then when I run it crashes so ill sort that
&gt; first but the idea of removing ICU support is great hope you can finish what
&gt; you started.
&gt; dan
&gt; 

(In reply to comment #10)
&gt; I have downloaded r34824 and tried the patch.  I have updated it so that it can
&gt; be applied except I am new to this and have no idea about the now missing
&gt; appendOmittingBOM.  For now to get webkit building and hopefully running on
&gt; GTK-DirectFB I have just commented it out.  However I was wonderig what
&gt; progress had been made with this patch?
&gt; If I get it running on my platform I will be happy to try out updated patches.
&gt; For now it is just compiling and then when I run it crashes so ill sort that
&gt; first but the idea of removing ICU support is great hope you can finish what
&gt; you started.
&gt; dan
&gt; 

I amtrying to remove ICU lib from webkit dep.

I have applied patch to r35806 version.
Commented out appendOmittingBOM from TextCodecGtk::decode of TextCodecGtk.cpp.
When i try to lauch GtkLauncher, there is not text on my GtkLauncher, though i have set google.com as url.
If any one suggests where is problem. I could try to resolve it. 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89358</commentid>
    <comment_count>12</comment_count>
    <who name="Manoj">mkbhatta</who>
    <bug_when>2008-08-26 03:29:11 -0700</bug_when>
    <thetext>Replacing ICU lib with Glib is a great idea.

Are there anyone success with Unicode support with Glib instead of ICU lib ?
I have applied the Glib patch for Unicode, But there is no text display on my browser(gtklauncher). 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89361</commentid>
    <comment_count>13</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-08-26 03:38:43 -0700</bug_when>
    <thetext>(In reply to comment #11)

&gt; I amtrying to remove ICU lib from webkit dep.
&gt; 
&gt; I have applied patch to r35806 version.
&gt; Commented out appendOmittingBOM from TextCodecGtk::decode of TextCodecGtk.cpp.
&gt; When i try to lauch GtkLauncher, there is not text on my GtkLauncher, though i
&gt; have set google.com as url.
&gt; If any one suggests where is problem. I could try to resolve it. 

Yes, it does work, I can confirm that - although the patch attachment here is not up to date with trunk. Look at my comment #8. Commenting out appendOmittingBOM is not sufficient for getting it to work. The comment should give you pointers on how to resolve this. 

I contacted Jürg via Email to get more information for setting up a development environment that supports pango 1.21 (which he used to get rid of a fribidi dependency) - no reply set. I was trying to work on an updated patch that is compatible with current trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89375</commentid>
    <comment_count>14</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-08-26 06:46:28 -0700</bug_when>
    <thetext>Now, using an Ubuntu 8.04 plus some *-dev packages from Ubuntu 8.10 I was able to set up an environment that has libpango-dev with at a 1.21.x version number. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89384</commentid>
    <comment_count>15</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-08-26 08:41:34 -0700</bug_when>
    <thetext>(In reply to comment #6)

&gt; The patch still needs work, though. It doesn&apos;t register all available encodings [...]

Regarding listing the encodings, I&apos;m currently considering two alternatives:

1) Probe g_iconv_open with all the supported encodings listed in the libiconv&apos;s list of supported encodings (http://www.gnu.org/software/libiconv/). For each probe, if successful, register the respective encoding with webcore. This avoids a direct dependency to libiconv but isn&apos;t very elegant. 

2) Introduce a dependency to libiconv and use its iconvlist() function directly. This function takes a callback as a parameter and calls it for each of the available encodings. Introducing this dependency doesn&apos;t necessarily mean much extra trouble, as http://library.gnome.org/devel/glib/stable/glib-building.html#dependencies lists libiconv as a dependency of glib on many platforms.

Any other suggestions? Is it acceptable to introduce the libiconv dependency in the --with-unicode-backend=glib case?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89385</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-08-26 08:55:59 -0700</bug_when>
    <thetext>Another possible approach would be to redesign WebCore text conversion classes so that they wouldn&apos;t need to enumerate all supported encodings. We&apos;ve discussed this briefly before, but at that point, all conversion libraries we needed did provide encoding enumeration APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89386</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Laird">danieljlaird</who>
    <bug_when>2008-08-26 08:57:08 -0700</bug_when>
    <thetext>I would think that a dependency on libiconv is ok as this is commonly a dependency of glib.  My only concern would be to make sure that libiconv cross-compiles better than icu otherwise we have substituted one bad package for another.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89387</commentid>
    <comment_count>18</comment_count>
      <attachid>23001</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-08-26 09:03:46 -0700</bug_when>
    <thetext>Created attachment 23001
Patch updated for trunk revision 35916

Now explicitly specifying byte order of UTF-16 target encoding based on glib macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89396</commentid>
    <comment_count>19</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-08-26 10:04:23 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I would think that a dependency on libiconv is ok as this is commonly a
&gt; dependency of glib.  My only concern would be to make sure that libiconv
&gt; cross-compiles better than icu otherwise we have substituted one bad package
&gt; for another.

Note that Glib on Win32 is built without iconv these days, so it is only required for unix platforms. In that respect avoiding the dependency would be preferrable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89488</commentid>
    <comment_count>20</comment_count>
      <attachid>23031</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-08-27 08:01:57 -0700</bug_when>
    <thetext>Created attachment 23031
Overview and Comparison of Text Codecs in Safari Win/Mac and libiconv

Libiconv becomes a less favorable choice for enumerating the available encodings given the fact that glib does not rely on libiconv on all platforms but uses the standard libc iconv on a number of Unices or win32 functions on Windows.

I have created an overview of Safari Win &amp; Mac encodings compared to the ones supported by libiconv (and most likely supported by standard libc iconv, too, as from what I understand, these implementations are often very similar). This table shows that almost all Safari encodings can be covered by using these encoding names.

The table does not yet list all the aliases for each canonical encoding. For a start, a list of typical MIME encoding names could be extracted from: http://www.iana.org/assignments/character-sets.

The canonical encoding names in the libiconv column of this table could be used for probing whether glib&apos;s g_iconv_open supports this encoding on a particular platform. 

Otherwise, the only way out would be to redesign WebCore&apos;s text codecs part, as Alexey pointed out in comment #16.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89599</commentid>
    <comment_count>21</comment_count>
    <who name="Manoj">mkbhatta</who>
    <bug_when>2008-08-27 21:18:24 -0700</bug_when>
    <thetext>Applied patch to 35917. But no luck, still GtkLauncher is without any text.
I am trying to test it on ARM Little Endian.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89927</commentid>
    <comment_count>22</comment_count>
      <attachid>23124</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-02 13:04:11 -0700</bug_when>
    <thetext>Created attachment 23124
patch updated for probing for iconv encodings, updated to revision 36025

I updated Jürg&apos;s patch for probing the list of codecs that are supported by iconv (as stated on the libiconv web page). TIS-620, WINDOWS-1251, EUC-KR, WINDOWS-1253 added manually. This patch now works without a dependency to libiconv, but relies on hard-coded codec tables. It could serve as an interim solution until it&apos;s decided to change the text codecs architecture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89932</commentid>
    <comment_count>23</comment_count>
      <attachid>23124</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-02 14:25:30 -0700</bug_when>
    <thetext>Comment on attachment 23124
patch updated for probing for iconv encodings, updated to revision 36025

When asking for review, please mark patches as review?, not review+ (which means that a review has been granted).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89933</commentid>
    <comment_count>24</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-02 14:30:04 -0700</bug_when>
    <thetext>Sorry, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90086</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-09-03 16:55:51 -0700</bug_when>
    <thetext>There appear to be some encoding issues with this patch.  Several non-ASCII characters in peoples names in ChangeLog entries and copyright lines appear to have been somewhat mangled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90149</commentid>
    <comment_count>26</comment_count>
    <who name="monil">monil.parmar</who>
    <bug_when>2008-09-04 05:08:59 -0700</bug_when>
    <thetext>
I have used patch-36025 for Webkit version-36053 (using glib). I tried to open few  html pages and some url using GtkLauncer on fedora-8, but facing following problems:
1) html page with english language is opening fine.
2) html page with korean or japanese language(utf-16) not showing any text. 
3) tried to open url like google.com, these pages are not coming up.i put some debug statements in code so find out when launcher try to access the .js pages it hung there itself and not proceeding further.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90153</commentid>
    <comment_count>27</comment_count>
      <attachid>23167</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-04 06:24:46 -0700</bug_when>
    <thetext>Created attachment 23167
replacing icu with glib, updated for 36087, ChangeLogs now UTF-8, coding style fixes

(In reply to comment #25)
The UTF-8 troubles in the ChangeLogs are now hopefully fixed.
In addition, I tried being more coding style compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90156</commentid>
    <comment_count>28</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-04 06:57:38 -0700</bug_when>
    <thetext>(In reply to comment #26)

&gt; 2) html page with korean or japanese language(utf-16) not showing any text. 

It would be helpful if you could post the URLs you&apos;re having problems with. In my opinion, UTF-16 source-encoded web pages are really rare as using this encoding inflates the content size. 

I tried some pages as found on the Alexa.com top 100 pages by country or language.
For Korea, for example http://www.dreamwiz.com/, http://www.gmarket.co.kr/ - These ones are EUC-KR encoded. They are okay from an encoding point of view, however I cannot verify rendering completely as I don&apos;t have Korean fonts on my system.
For Japanese I found that certain pages are in EUC-JP which might not be available. It depends on whether your system&apos;s iconv supports EUC-JP. My installation of iconv for example cannot instantiate a codec for this encoding. If you do a debug build, you will be able to see if there are problems instantiating a certain encoding by console error messages like: &quot;EUC-JP not decodable =&gt; not available!&quot; or &quot;EUC-JP not encodable =&gt; not available!&quot;. 

&gt; 3) tried to open url like google.com, these pages are not coming up.i put some
&gt; debug statements in code so find out when launcher try to access the .js pages
&gt; it hung there itself and not proceeding further.

google.com, google.co.kr, google.co.jp display fine here. It would be helpful if you could provide more details and specify the exact URLs or procedure that lead to the problems you are observing.

Have you tried the same in a built of the same revision but without applying the patch? - Just compare whether it&apos;s a new issue introduced by this page or one that might have existed previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90173</commentid>
    <comment_count>29</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2008-09-04 10:19:52 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; 2) html page with korean or japanese language(utf-16) not showing any text. 

This might be bug #16792</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90261</commentid>
    <comment_count>30</comment_count>
      <attachid>23167</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-05 06:07:51 -0700</bug_when>
    <thetext>Comment on attachment 23167
replacing icu with glib, updated for 36087, ChangeLogs now UTF-8, coding style fixes

Found an issue with this patch. It doesn&apos;t handle partially transmitted multibyte characters correctly. I&apos;m looking into it, removing r?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90273</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-09-05 08:51:17 -0700</bug_when>
    <thetext>A TextCodec implementation is supposed to keep partial bytes in it internal state, unless decode() is called with flush argument. In the latter case, an incomplete character is an error. This is handled by ICU internally, so TextCodecICU doesn&apos;t need any such logic (but TextCodecUTF16 has it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90553</commentid>
    <comment_count>32</comment_count>
      <attachid>23263</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-08 10:08:22 -0700</bug_when>
    <thetext>Created attachment 23263
Replacing ICU with glib

Patch updated for 36268, and:
* now supports partially transmitted multibyte characters. Thank you, Alexey, for the clarification.
* changed semantics of textBreakLast and textBreakFirst to look for characters not breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91629</commentid>
    <comment_count>33</comment_count>
    <who name="monil">monil.parmar</who>
    <bug_when>2008-09-18 07:29:01 -0700</bug_when>
    <thetext>Its strange, but i tried on diffrent versions of webkit by applying patches(glib) on that, still iam unable to open any url on gtklauncher. Following are the version which right now iam using:
webkit-&gt;r36477
glib-patch-&gt;Patch updated for 36268
pango-&gt;pango-1.21.4
glib-&gt;glib-2.17.6
iconv-&gt;libiconv-1.12

I tried to open following url :
www.google.co.in
www.google.co.kr
www.daum.net
www.ana.co.jp

none of the above url opened in GtkLuancher.
Is some modification or some other packages are required?
Also all these url&apos;s opened well with ICU.
if some more information required please tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92315</commentid>
    <comment_count>34</comment_count>
      <attachid>23263</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-23 04:34:39 -0700</bug_when>
    <thetext>Comment on attachment 23263
Replacing ICU with glib

There are a bunch of webkit-style violations in this patch, which make it difficult to r+.

It concerns me that you&apos;d need to copy all those macros from the ICU headers.  Does GLIB not provide any equivalents?

Things like where * and &amp; go, relative to the variable name.
Single line if/else statements don&apos;t use {}
Use of c-style casts (Foo*)foo instead of static_cast&lt;Foo*&gt;(foo)
Each variable gets its own declaration line, no int foo, bar;
4-space indents
0 instead of NULL when referring to pointers in c++ code
true and false instead of TRUE and FALSE when dealing with c++ &quot;bool&quot; types
Header #define names should be identical to the header, like #define UnicodeGLib_h

Anything copied from Glib should really be in its own header file, IMO.  Separating things out into their own file makes it easier to update them if they ever change upstream, or for platforms which have the necessary headers to not use our local copies of that data.

Probably the same goes of the ICU macros. UnicodeMacrosFromICU.h would be one possible name. :)

WebKit source code files are generally UT8, I&apos;m not sure what encoding you&apos;re editing with:
+ * Copyright (C) 2008 Jürg Billeter &lt;j@bitron.ch&gt;


There is a lot of code in UnicodeGLib.h, much of that could be moved into a corresponding .cpp file.

:(  Even though this code touches Gtk, it would be best if we could avoid manual-menory management.  Manual memory management is *evil* (IMO) and gets you into all sorts of trouble.  I think there was a GOwnPtr landed recently, no?  That would know how to call g_free on its contents when it went out of scope?  If so, one could use that instead of all the manual g_free calls.

Thanks for the patch, but I think we need another round of cleanup to this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92316</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-23 04:35:57 -0700</bug_when>
    <thetext>If you haven&apos;t found it already, here is the WebKit style guide:
http://webkit.org/coding/coding-style.html
it&apos;s linked from the contribution guidelines:
http://webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92318</commentid>
    <comment_count>36</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-09-23 04:41:39 -0700</bug_when>
    <thetext>(In reply to comment #34)

Thanks for your remarks, Eric. I will have a closer look at it once I find the time, maybe Jürg can support in this if he&apos;s available. 

Regarding the GOwnPtr, I will try to incorporate it. I saw the discussions but it wasn&apos;t landed at the time. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93573</commentid>
    <comment_count>37</comment_count>
    <who name="Miguel L. Turbón">mlturbon</who>
    <bug_when>2008-10-01 12:23:32 -0700</bug_when>
    <thetext>I think there is a bug in the patch in toLower, toUpper from UnicodeGlib.h (used in StringPrototype.cpp). Maybe a *error = FALSE is missing in this functions at the end.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98483</commentid>
    <comment_count>38</comment_count>
    <who name="Kalle Vahlman">zuh</who>
    <bug_when>2008-11-12 10:21:12 -0800</bug_when>
    <thetext>I tried this patch, surfed through some pages with UTF-8 and didn&apos;t see any errors.

All of these worked ok for me (well, except the bits I don&apos;t have font support for.. not many of those though):

http://www.ltg.ed.ac.uk/~richard/unicode-sample.html
http://www.ltg.ed.ac.uk/~richard/unicode-sample-3-2.html
http://www.madore.org/~david/misc/unitest/
http://www.borut.com/library/s_10646t.htm

It&apos;d be great to get this cleaned up and in, dragging extra 14 MegaBytes of unneeded (and pretty annoyingly built) libraries seems silly, specially in mobile devices context.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99480</commentid>
    <comment_count>39</comment_count>
      <attachid>25314</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-11-20 08:11:30 -0800</bug_when>
    <thetext>Created attachment 25314
Replacing ICU with glib

Another round, now updated to apply cleanly to 38619:
* lots of coding style fixes, with special focus on the ones Eric pointed out
* tried to use GOwnPtr instead of manual memory management
* externalized GLib casefolding table and macros copied from ICU to separate files
* Changes to GNUMakefile.am in JSC depending on choice of unicode backend

This is a preliminary version. Before asking for a review I need to do some more testing on pages with exotic encodings.

Kalle, if you have some time, could have a go with this one? Any feedback is welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99634</commentid>
    <comment_count>40</comment_count>
      <attachid>25348</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-11-21 04:38:24 -0800</bug_when>
    <thetext>Created attachment 25348
Replacing ICU with glib

In addition to the previous changes:
* sawError argument to the decode() function now (hopefully) correctly used.
* In response to Miguel L. Turbón&apos;s comment, initializing error out-argument to false for safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99741</commentid>
    <comment_count>41</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2008-11-21 18:46:04 -0800</bug_when>
    <thetext>Does this pass the &quot;fast/encoding&quot; tests? You can run them with ./WebKitTools/Scripts/run-webkit-tests --gtk (--debug|--release) fast/encoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99953</commentid>
    <comment_count>42</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-11-24 05:47:55 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; Does this pass the &quot;fast/encoding&quot; tests? You can run them with
&gt; ./WebKitTools/Scripts/run-webkit-tests --gtk (--debug|--release) fast/encoding.

Unfortunately not (yet). I&apos;ve started looking into it. What&apos;s the expected outcome? Would this patch have to pass all of them? 

2 or 3 test cases (admittedly the easier ones) depend on a certain canonical name for the encoding which seems different in ICU and GLib (for example windows-1256 != CP1256). Would it be acceptable to modify the test cases here, e.g. doing the actual result check with a more tolerant RegExp in JS and print PASS/FAIL? 

Also, some of the tests specifically checking the decoding result for some exotic encodings will not pass because libiconv underlying to the GLib routines does not support all of them. How can we account for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99963</commentid>
    <comment_count>43</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-24 06:55:27 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; 2 or 3 test cases (admittedly the easier ones) depend on a certain canonical
&gt; name for the encoding which seems different in ICU and GLib (for example
&gt; windows-1256 != CP1256). Would it be acceptable to modify the test cases here,
&gt; e.g. doing the actual result check with a more tolerant RegExp in JS and print
&gt; PASS/FAIL? 

We need to decide on a case by case basis. In particular, windows-1256 is a registered IANA name, unlike CP1256, so changing from former to latter is not an improvement. In fact, some cpXXX names do not even match windows-XXX ones with the same number (e.g. windows-949 vs. cp949).

I don&apos;t have an opinion on whether the issues you described should be dealt with now, or left for later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99978</commentid>
    <comment_count>44</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-24 09:35:08 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; Unfortunately not (yet). I&apos;ve started looking into it. What&apos;s the expected
&gt; outcome? Would this patch have to pass all of them?

The regression tests tell you what behavior you&apos;re changing. Policy for what can be right and wrong in a given port is a different question. We have a mechanism for having port-specific results for various tests, so you can have expected failures in some ports rather than others.

&gt; 2 or 3 test cases (admittedly the easier ones) depend on a certain canonical
&gt; name for the encoding which seems different in ICU and GLib (for example
&gt; windows-1256 != CP1256). Would it be acceptable to modify the test cases here,
&gt; e.g. doing the actual result check with a more tolerant RegExp in JS and print
&gt; PASS/FAIL?

The names actually used on the web are the ones that matter. Also, consistent availability of the same names for encoding across platforms. But this is not yet extensively tested -- the test coverage is sparse.

The text encoding libraries often don&apos;t match what&apos;s needed on the web very closely. Back early in the WebKit project, when we used the Mac-specific &quot;Text Encoding Converter&quot; library we had a long list of encoding names that had to be added explicitly; we didn&apos;t even try to use the names in the library itself. When we switched to the ICU library, we discovered that it had a much better list of names in the library, so the list of encoding names that need to be hardcoded in WebKit itself for ICU is a lot shorter. I imagine that GLib omits many encoding names that are needed for practical compatibility with the web, so you&apos;ll need code to deal with this.

To see how this is implemented for ICU, look at the TextCodecICU::registerExtendedEncodingNames function.

To see the remnants of the former mechanism used in older versions of WebKit, look at the TextCodecMac::registerEncodingNames function and at the character-sets.txt, mac-encodings.txt, and make-charset-table.pl files in the platform/text/mac directory.

&gt; Also, some of the tests specifically checking the decoding result for some
&gt; exotic encodings will not pass because libiconv underlying to the GLib routines
&gt; does not support all of them. How can we account for that?

Those test failures are specific examples of how a version of WebKit using the GLib functions would be deficient compared to versions based on other text decoding libraries. There are at least three things we can do about this:

    1) Put expected test results in a platform-specific test result directory, reflecting the known shortcomings of the GLib-based support.

    2) Supplement the GLib decoding with some other mechanism so we can support more encodings without pulling in an entire library, such as ICU.

    3) Take the existing tests and break them into multiple tests to separate &quot;important&quot; from &quot;exotic&quot; encodings, so that the tests that cover important encodings don&apos;t have to have platform-specific results. However, this will require discussion of what encodings are important enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100014</commentid>
    <comment_count>45</comment_count>
    <who name="Kalle Vahlman">zuh</who>
    <bug_when>2008-11-24 12:27:12 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Kalle, if you have some time, could have a go with this one? Any feedback is
&gt; welcome. 

I took it for a spin, and visually it worked for me :)

Valgrind disagreed though, there were two leaks introduced. Fortunately fixing those was trivial:

--- a/WebCore/platform/graphics/gtk/FontGtk.cpp
+++ b/WebCore/platform/graphics/gtk/FontGtk.cpp
@@ -139,6 +139,7 @@ static gchar* convertUniCharToUTF8(const UChar* characters, gint length, int fro
         pos += start;
         len -= start;
     }
+    g_free(utf8);
     return g_string_free(ret, FALSE);
 }

The contents of utf8 is appended to a gstring which copies the data, so the original needs to be freed.
 
--- a/WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp
+++ b/WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp
@@ -67,6 +67,8 @@ static TextBreakIterator* setUpIterator(bool&amp; createdIterator, TextBreakIterator
 
     iterator-&gt;m_type = type;
     iterator-&gt;m_length = length;
+    if (createdIterator)
+       g_free(iterator-&gt;m_log_attrs);
     iterator-&gt;m_log_attrs = g_new0(PangoLogAttr, length + 1);
     iterator-&gt;m_index = -1;
     pango_get_log_attrs(utf8.get(), utf8len, -1, 0, iterator-&gt;m_log_attrs, length + 1);

Here the PangoLogAttr array was leaked for each setup after the first one. Since this seems to be done a lot, I wonder if using the g_slice API would be a good idea performance-wise... That would require profiling to prove it&apos;s hurting though.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100402</commentid>
    <comment_count>46</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-11-26 06:04:19 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (In reply to comment #39)
&gt; I took it for a spin, and visually it worked for me :)

Thanks for your feedback and taking a look, Kalle!

&gt; Valgrind disagreed though, there were two leaks introduced. Fortunately fixing
&gt; those was trivial:
&gt; 
&gt; --- a/WebCore/platform/graphics/gtk/FontGtk.cpp
&gt; +++ b/WebCore/platform/graphics/gtk/FontGtk.cpp
&gt; @@ -139,6 +139,7 @@ static gchar* convertUniCharToUTF8(const UChar* characters,
&gt; gint length, int fro
&gt;          pos += start;
&gt;          len -= start;
&gt;      }
&gt; +    g_free(utf8);
&gt;      return g_string_free(ret, FALSE);
&gt;  }
&gt; 
&gt; The contents of utf8 is appended to a gstring which copies the data, so the
&gt; original needs to be freed.

Interesting that you found this one. The patch actually doesn&apos;t touch FontGtk.cpp AFAICS. So this leak must have been there before. I think it would make sense to file this one as a separate bug. FontGtk.cpp looks like it would profit from being reworked using GOwnPtr, so another option would be to just add this problem to bug 21594. 


&gt; Here the PangoLogAttr array was leaked for each setup after the first one.
&gt; Since this seems to be done a lot, I wonder if using the g_slice API would be a
&gt; good idea performance-wise... That would require profiling to prove it&apos;s
&gt; hurting though.

So far, I just incorporated your fix proposal. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100822</commentid>
    <comment_count>47</comment_count>
      <attachid>25627</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-12-01 05:54:44 -0800</bug_when>
    <thetext>Created attachment 25627
Replacing ICU with glib, IDN support

New iteration:
* incorporated one of the leak fixes from Kalle for TextBreakIteratorGtk.cpp
* added IDN support using libidn (autoconf check included)
  (this is required to pass /fast/encoding/url-hostname-non-ascii.html)
* reordered some encoding names, added some aliases and changed some letter cases in order to pass the testcases that check for specific encoding names

Now passes a lot more of the test cases, the remaining failing ones are mostly GBK and Hebrew encoding cases, which I am unable to test on my machine as my libiconv doesn&apos;t have them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100823</commentid>
    <comment_count>48</comment_count>
      <attachid>25628</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-12-01 05:58:21 -0800</bug_when>
    <thetext>Created attachment 25628
Fast/Encoding Test Results for GTK GLib-Unicode Release Build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100824</commentid>
    <comment_count>49</comment_count>
      <attachid>25629</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2008-12-01 05:59:17 -0800</bug_when>
    <thetext>Created attachment 25629
Fast/Encoding Test Results for GTK ICU-Unicode Release Build

For reference, the results for the ICU-backend release build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>104234</commentid>
    <comment_count>50</comment_count>
    <who name="Vitaliy Pronkin">pronvit</who>
    <bug_when>2009-01-03 06:32:53 -0800</bug_when>
    <thetext>I compiled this for N810/Maemo and it hangs in g_convert_with_iconv when passed length == 0. returning empty string in this case helps

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105164</commentid>
    <comment_count>51</comment_count>
      <attachid>25627</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-10 15:57:52 -0800</bug_when>
    <thetext>Comment on attachment 25627
Replacing ICU with glib, IDN support

Do all these changes have to go in one big patch? It seems that the codec changes are entirely separate from the other changes. By making the patch big, you make it a lot harder to review, so you&apos;ll end up waiting longer for someone to have time to review the whole thing.

Roughly speaking, it looks good, but I don&apos;t see any reason to tie the codec changes with the others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105281</commentid>
    <comment_count>52</comment_count>
    <who name="Alexander Butenko">a.butenka</who>
    <bug_when>2009-01-11 15:58:49 -0800</bug_when>
    <thetext>i was using this patch for a while and it works perfect with english, spanish and russian languages. I dont know any other languages, so cant test more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105320</commentid>
    <comment_count>53</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-12 03:23:56 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; Roughly speaking, it looks good, but I don&apos;t see any reason to tie the codec
&gt; changes with the others.

Darin, first of all, thanks for the positive feedback. 
I am not sure if I understand how you see the codec changes separate from the rest of the patch. Could you explain in a little more detail? 
TextCodecGtk.cpp and TextCodecGtk.h are new in this patch, not modifying old code and essential to the overall functioning of this patch. On the one hand, on their own in a separate patch they wouldn&apos;t add anything functional and on the other hand, the changes in TextEncodingRegistry.cpp for example wouldn&apos;t work without these new files. 
Maybe my Changelog entry
+        TextCodecGtk now supports partially transmitted multibyte characters.
is misleading. TextCodecGtk was only existing in prior versions of the patch, it didn&apos;t exist in the trunk before. 

So from my point view the patch cannot be split into codec changes / other changes - but I might have misunderstood your comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105321</commentid>
    <comment_count>54</comment_count>
    <who name="Kalle Vahlman">zuh</who>
    <bug_when>2009-01-12 04:31:13 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; (In reply to comment #51)
&gt; &gt; Roughly speaking, it looks good, but I don&apos;t see any reason to tie the codec
&gt; &gt; changes with the others.
&gt; 
&gt; Darin, first of all, thanks for the positive feedback. 
&gt; I am not sure if I understand how you see the codec changes separate from the
&gt; rest of the patch. Could you explain in a little more detail? 

He probably means that the changes could be split to allow individual review, not the whole 78kB of it :)

On another issue, I guess related to comment #50, there&apos;s something that introduces a seemingly infinite loop with the glib code. I haven&apos;t been able to make real sense of it, but at least it&apos;s easy to reproduce:

1. Load google.com
2. type something to the search field (I think it needs to be &gt; somecount chars, but not sure. 1234567890 should work)
3. go back to the beginning of the line and try typing additional text there
4. consistently, glib backend goes in to a busyloop while icu does not

I&apos;ve tried to print some debugs from the iterator constructor, but haven&apos;t seen anything exceptionally funny in there (but I admit that I&apos;m not terribly well aware of what is actually happening there...).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105336</commentid>
    <comment_count>55</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-12 09:08:00 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; I am not sure if I understand how you see the codec changes separate from the
&gt; rest of the patch. Could you explain in a little more detail? 
&gt; TextCodecGtk.cpp and TextCodecGtk.h are new in this patch, not modifying old
&gt; code and essential to the overall functioning of this patch. On the one hand,
&gt; on their own in a separate patch they wouldn&apos;t add anything functional and on
&gt; the other hand, the changes in TextEncodingRegistry.cpp for example wouldn&apos;t
&gt; work without these new files. 

I mean that the TextCodecGtk and TextEncodingRegistry changes together can stand alone, and don&apos;t rely on the WTF changes. I see nothing where it requires the WTF changes.

Similarly, the IDN changes don&apos;t have to go with either the codec changes or the WTF changes.

Same for the text break iterator changes.

These seem like they could be done in at least 4 separate pieces, each easier to review, and each helpful in making progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105468</commentid>
    <comment_count>56</comment_count>
    <who name="Daniel Laird">danieljlaird</who>
    <bug_when>2009-01-13 02:51:55 -0800</bug_when>
    <thetext>Can I ask if libiconv is a definate requirement now?
I have libglib without libiconv support and when I run with an older version of this patch and webkit it crashes.
If I build glib with libiconv=gnu option then webkit runs.  However to get this to work for me requires some hacking so ideally I would not have a requirement to build libiconv.
Hope someone can give a yes/no answer 
Cheers
Dan</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105471</commentid>
    <comment_count>57</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-13 03:26:09 -0800</bug_when>
    <thetext>libiconv is not a direct requirement of this patch. The patch in its current form requires GLib and libidn. It needs at least GLib functions g_convert_with_iconv, g_iconv_open, g_iconv_close to be available and functional. So the patch indirectly depends on what your GLib&apos;s using to implement those functions. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105473</commentid>
    <comment_count>58</comment_count>
    <who name="Kalle Vahlman">zuh</who>
    <bug_when>2009-01-13 03:34:17 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; On another issue, I guess related to comment #50, there&apos;s something that
&gt; introduces a seemingly infinite loop with the glib code. I haven&apos;t been able to
&gt; make real sense of it, but at least it&apos;s easy to reproduce:
&gt;
&gt; 1. Load google.com
&gt; 2. type something to the search field (I think it needs to be &gt; somecount
&gt; chars, but not sure. 1234567890 should work)
&gt; 3. go back to the beginning of the line and try typing additional text there
&gt; 4. consistently, glib backend goes in to a busyloop while icu does not

Yesterday I took time to debug this further and found the following (excerpt from mail conversation):

I did some digging with gdb and found that the busyloop
revolves inside VisiblePosition::leftVisuallyDistinctCandidate() in
WebCore/editing/VisiblePosition.cpp. There&apos;s two while(true) loops
there and the inner one never exits. After a while of
head-scratching, comparison with ICU implementation and reading ICU
reference, I came to the conclusion that the following should be the
correct fix:

@@ -197,7 +197,7 @@ int textBreakPrevious(TextBreakIterator* bi)
            return i;
        }
    }
-    return textBreakFirst(bi);
+    return TextBreakDone;
 }

The icu docs for ubrk_preceding() say:

 &quot;The value returned is always smaller than offset, or UBRK_DONE.&quot;

but the glib implementation was never returning DONE (which is -1)
even for 0 since it calls the BreakFirst which (as the BreakLast
comments also state) always returns the first character of the text.
Also note that BreakNext also returns DONE instead of the last
character already.

---

Dominik agreed and will incorporate this into the next petch/patches.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105673</commentid>
    <comment_count>59</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-14 08:49:45 -0800</bug_when>
    <thetext>Thanks to Darin&apos;s suggestions, for splitting the patch into smaller pieces, my plan is as follows. I will create 4 patches, the first one for moving WTF Unicode to GLib, the second one for moving Text Codecs from ICU to GLib, the third for switching TextBreakIterator to GLib and the fourth one for adding IDN support. 

For the first two modificaitons, I have created two mostly independent patches which can be reviewed separately. Unfortunately, they overlap in changes for /configure.ac and /GNUMakefile.am. This is because I introduced a compile flag for compiling a hybrid WebKit version that has a mixed ICU/GLib Unicode backend. 

Patch 2/4 can be applied after 1/4 if the changes to configure.ac and GNUMakefile.am and JavaScriptCore/wtf/unicode/Unicode.h are ignored/skipped.

I can quickly clean up the second patch in this regard once the first is landed.

My plan is that once these two would be landed, I will provide 3/4 and 4/4 containing the TextBreakIterator change and the IDN support - applying cleanly to a future SVN revision that contains 1&amp;2. 

If anyone has a suggestion for improving or simplifying this staged process, please let me know. Also, any testing/feedback on the two separated patches is very welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105674</commentid>
    <comment_count>60</comment_count>
      <attachid>26711</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-14 08:51:34 -0800</bug_when>
    <thetext>Created attachment 26711
1/4 - Moving WTF Unicode backend to GLib</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105675</commentid>
    <comment_count>61</comment_count>
      <attachid>26712</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-14 08:52:19 -0800</bug_when>
    <thetext>Created attachment 26712
2/4 - Moving Text Codecs to GLib</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105912</commentid>
    <comment_count>62</comment_count>
      <attachid>26711</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-01-15 10:26:01 -0800</bug_when>
    <thetext>Comment on attachment 26711
1/4 - Moving WTF Unicode backend to GLib

&gt; Index: JavaScriptCore/wtf/unicode/glib/CasefoldTableFromGLib.h
&gt; ===================================================================
&gt; --- JavaScriptCore/wtf/unicode/glib/CasefoldTableFromGLib.h	(revision 0)
&gt; +++ JavaScriptCore/wtf/unicode/glib/CasefoldTableFromGLib.h	(revision 0)
&gt; @@ -0,0 +1,200 @@
&gt; +/*
&gt; + *  Copyright (C) 2006 George Staikos &lt;staikos@kde.org&gt;
&gt; + *  Copyright (C) 2006 Alexey Proskuryakov &lt;ap@nypop.com&gt;
&gt; + *  Copyright (C) 2007 Apple Computer, Inc. All rights reserved.
&gt; + *  Copyright (C) 2008 Jürg Billeter &lt;j@bitron.ch&gt;
&gt; + *  Copyright (C) 2008 Dominik Röttsches &lt;dominik.roettsches@access-company.com&gt;

Is this file really needed?

I don&apos;t think the copyrights are right on this file.

&gt; +} casefold_table[] = {

This is not the normal naming for identifiers in WebKit. This would typically be inside the WTF::Unicode namespace and be named something like caseFoldTable or CaseFoldTable.

&gt; +#include &quot;CasefoldTableFromGLib.h&quot;

Do we really need to compile in a copy of the table into each source file? That seems like a very bad idea. Since the case folding table is declared static, it will have internal linkage so each source file that uses this header will get a separate copy of the table!

&gt; +        inline UChar32 foldCase(UChar32 ch)

These functions are pretty long. I don&apos;t think it makes sense to inline them.

&gt; +        inline int umemcasecmp(const UChar* a, const UChar* b, int len)
&gt; +        {
&gt; +            GOwnPtr&lt;char&gt; utf8a;
&gt; +            GOwnPtr&lt;char&gt; utf8b;
&gt; +
&gt; +            utf8a.set(g_utf16_to_utf8(a, len, 0, 0, 0));
&gt; +            utf8b.set(g_utf16_to_utf8(b, len, 0, 0, 0));
&gt; +
&gt; +            GOwnPtr&lt;char&gt; foldedA;
&gt; +            GOwnPtr&lt;char&gt; foldedB;
&gt; +
&gt; +            foldedA.set(g_utf8_casefold(utf8a.get(), -1));
&gt; +            foldedB.set(g_utf8_casefold(utf8b.get(), -1));
&gt; +
&gt; +            int result = g_utf8_collate(foldedA.get(), foldedB.get());
&gt; +
&gt; +            return result;
&gt; +        }

Converting to UTF-8 just to do the case folding is going to be very inefficient. This is going to result in a quite-slow GTK port if it&apos;s used anywhere.

In general we had to work hard to eliminate the conversion from UTF-16 and UTF-8 and back that used to be present in WebKit and JavaScriptCore in its core algorithms, and move that conversion to the external API. I think you need to do some performance tests if you&apos;re going to introduce memory allocation and UTF-8 conversion into these algorithms, unless it&apos;s OK to have the performance of the GTK port suffer.

&gt; +#ifndef UnicodeGLibTypes_h
&gt; +#define UnicodeGLibTypes_h
&gt; +
&gt; +typedef uint16_t UChar;
&gt; +typedef int32_t UChar32;
&gt; +
&gt; +#endif

Seems a little excessive to have a separate header file for these, but it might be OK.

I&apos;m going to say review- because of some of the issues with the case folding table and the performance of the UTF-8 conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106062</commentid>
    <comment_count>63</comment_count>
      <attachid>26793</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-16 07:46:07 -0800</bug_when>
    <thetext>Created attachment 26793
1/4 - Moving WTF Unicode backend to GLib (v2)

(In reply to comment #62)

Darin, thanks for taking the time to review the patch. Here&apos;s another iteration that tries to address your comments. 

&gt; (From update of attachment 26711 [review])
&gt; &gt; Index: JavaScriptCore/wtf/unicode/glib/CasefoldTableFromGLib.h
&gt; &gt; ===================================================================
&gt; &gt; [...]
&gt; 
&gt; Is this file really needed?

I got rid of it at the price of a single-character ucs4-&gt;utf8-&gt;casefold-&gt;ucs4 conversion. See below regarding the conversion costs.

&gt; &gt; +} casefold_table[] = {
&gt; This is not the normal naming for identifiers in WebKit. This would typically
&gt; be inside the WTF::Unicode namespace and be named something like caseFoldTable
&gt; or CaseFoldTable.

gone.

&gt; &gt; +#include &quot;CasefoldTableFromGLib.h&quot;
&gt; Do we really need to compile in a copy of the table into each source file? 

gone as well.

&gt; &gt; +        inline UChar32 foldCase(UChar32 ch)
&gt; 
&gt; These functions are pretty long. I don&apos;t think it makes sense to inline them.

I disabled inlining for the longer ones and moved them to a new file UnicodeGLib.cpp

&gt; &gt; +        inline int umemcasecmp(const UChar* a, const UChar* b, int len)

&gt; Converting to UTF-8 just to do the case folding is going to be very
&gt; inefficient. This is going to result in a quite-slow GTK port if it&apos;s used
&gt; anywhere.
&gt; 
&gt; In general we had to work hard to eliminate the conversion from UTF-16 and
&gt; UTF-8 and back that used to be present in WebKit and JavaScriptCore in its core
&gt; algorithms, and move that conversion to the external API. I think you need to
&gt; do some performance tests if you&apos;re going to introduce memory allocation and
&gt; UTF-8 conversion into these algorithms, unless it&apos;s OK to have the performance
&gt; of the GTK port suffer.

Looking at the public GLib Unicode API (http://library.gnome.org/devel/glib/stable/glib-Unicode-Manipulation.html) it seems difficult to call the more interesting unicode functionality with utf-16 strings directly - casefolding, collation, normalization all require utf-8. Please see below for my my view regarding these costs.

&gt; &gt; +#ifndef UnicodeGLibTypes_h
&gt; &gt; +#define UnicodeGLibTypes_h
&gt; &gt; +
&gt; &gt; +typedef uint16_t UChar;
&gt; &gt; +typedef int32_t UChar32;
&gt; &gt; +
&gt; &gt; +#endif
&gt; 
&gt; Seems a little excessive to have a separate header file for these, but it might
&gt; be OK.

Pulled that into UnicodeGLib.h

Also added a FIXME in umemcasecmp that discusses the discrepancy to the icu implementation.

&gt; I&apos;m going to say review- because of some of the issues with the case folding
&gt; table and the performance of the UTF-8 conversion.

While I am aware it&apos;s probably not a very appropriate benchmark, for a first and very rough idea, I compared the ICU build against the GLib build running sunspider. You can see a perfomance regression of 2-3% in most of the string tests. I will attach these results.

My understanding is that this patch helps to reduce ROM footprint when deploying on an embedded platform by eliminating the ICU dependency, saving  approximately 10MB (as Alp reports). Currently, the glib backend is optional, icu would remain default. So in my opinion, the benefit of this patch is that it gives a choice to integrators between sacrificing a little performance in favor of the binary reduction or package ICU onto their targets. Future changes in GLib could lead to removing the utf-16 to utf-8 conversions eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106063</commentid>
    <comment_count>64</comment_count>
      <attachid>26794</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-01-16 07:49:42 -0800</bug_when>
    <thetext>Created attachment 26794
Sunspider Results Comparing icu against GLib Unicode Backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108893</commentid>
    <comment_count>65</comment_count>
    <who name="Mikkel Kruse Johnsen">mikkel</who>
    <bug_when>2009-02-08 07:34:39 -0800</bug_when>
    <thetext>When will the two missing patches be published ?

I need them to cross compile WebKit for windows (no ICU).

Would love to test them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108950</commentid>
    <comment_count>66</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-02-09 01:20:40 -0800</bug_when>
    <thetext>(In reply to comment #65)
&gt; When will the two missing patches be published ?

As I mentioned in comment #59, the plan is to publish them as soon as 1 &amp; 2 are landed. There is not really much new in patch 3 &amp; 4 to come, the code is already available in patch &quot;Replacing ICU with glib, IDN support&quot; from 1st of December. It&apos;s just split into 4 parts now. HTH.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116875</commentid>
    <comment_count>67</comment_count>
    <who name="Mikkel Kruse Johnsen">mikkel</who>
    <bug_when>2009-04-08 06:54:45 -0700</bug_when>
    <thetext>How do we deal with this error, what could replace these functions ?


../WebCore/editing/visible_units.cpp: In function &apos;int WebCore::firstNonComplexContextLineBreak(const UChar*, int)&apos;:
../WebCore/editing/visible_units.cpp:49: error: &apos;hasLineBreakingPropertyComplexContext&apos; was not declared in this scope
../WebCore/editing/visible_units.cpp: In function &apos;int WebCore::lastNonComplexContextLineBreak(const UChar*, int)&apos;:
../WebCore/editing/visible_units.cpp:58: error: &apos;hasLineBreakingPropertyComplexContext&apos; was not declared in this scope
../WebCore/editing/visible_units.cpp: In function &apos;WebCore::VisiblePosition WebCore::previousBoundary(const WebCore::VisiblePosition&amp;, unsigned int (*)(const UChar*, unsigned int, unsigned int))&apos;:
../WebCore/editing/visible_units.cpp:89: error: &apos;hasLineBreakingPropertyComplexContext&apos; was not declared in this scope
../WebCore/editing/visible_units.cpp: In function &apos;WebCore::VisiblePosition WebCore::nextBoundary(const WebCore::VisiblePosition&amp;, unsigned int (*)(const UChar*, unsigned int, unsigned int))&apos;:
../WebCore/editing/visible_units.cpp:175: error: &apos;hasLineBreakingPropertyComplexContext&apos; was not declared in this scope
make[1]: *** [WebCore/editing/libWebCore_la-visible_units.lo] Error 1
make[1]: Leaving directory `/home/mkj/projects/XCare/build/webkit-1.1.4/WebKitBuild&apos;
make: *** [all] Error 2
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117024</commentid>
    <comment_count>68</comment_count>
    <who name="Mikkel Kruse Johnsen">mikkel</who>
    <bug_when>2009-04-09 04:48:57 -0700</bug_when>
    <thetext>Just added to &quot;JavaScriptCore/wtf/unicode/glib/UnicodeGLib.h&quot;

        inline bool hasLineBreakingPropertyComplexContext(UChar32 c)
        {
            // FIXME
            return false;
        }
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122493</commentid>
    <comment_count>69</comment_count>
      <attachid>26712</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-21 18:45:26 -0700</bug_when>
    <thetext>Comment on attachment 26712
2/4 - Moving Text Codecs to GLib

No comments have been made in over a month.  Marking this r- to remove it from the review queue.  Please email one of the gtk reviewers directly to get comments.

Feel free to post for re-review if you have had contact with a reviewer and believe this will be reviewed in a timely manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122494</commentid>
    <comment_count>70</comment_count>
      <attachid>26793</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-21 18:45:39 -0700</bug_when>
    <thetext>Comment on attachment 26793
1/4 - Moving WTF Unicode backend to GLib (v2)

No comments have been made in over a month.  Marking this r- to remove it from the review queue.  Please email one of the gtk reviewers directly to get comments.

Feel free to post for re-review if you have had contact with a reviewer and believe this will be reviewed in a timely manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122542</commentid>
    <comment_count>71</comment_count>
      <attachid>26712</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-21 22:31:43 -0700</bug_when>
    <thetext>Comment on attachment 26712
2/4 - Moving Text Codecs to GLib

Reflagging for review; this still needs substantive review, ideally from a Gtk reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122543</commentid>
    <comment_count>72</comment_count>
      <attachid>26793</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-21 22:31:51 -0700</bug_when>
    <thetext>Comment on attachment 26793
1/4 - Moving WTF Unicode backend to GLib (v2)

Reflagging for review; this still needs substantive review, ideally from a Gtk reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122688</commentid>
    <comment_count>73</comment_count>
      <attachid>26712</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-22 10:23:50 -0700</bug_when>
    <thetext>Comment on attachment 26712
2/4 - Moving Text Codecs to GLib

This seems to be an earlier attempt, that has been superseded by https://bugs.webkit.org/attachment.cgi?id=26793, right? Clearing flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122693</commentid>
    <comment_count>74</comment_count>
      <attachid>26793</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-22 10:56:23 -0700</bug_when>
    <thetext>Comment on attachment 26793
1/4 - Moving WTF Unicode backend to GLib (v2)

&gt; +        https://bugs.webkit.org/show_bug.cgi?id=15914
&gt; +        [GTK] Implement Unicode functionality using GLib

I have gone through all the comments now, and have verified that most comments have been addressed. I think the best way to move forward is to land the patch in its current state, before it gets old enough that too much has changed, now that you have made it smaller and self-contained. I have given it another pass, and found only indentation problems, which I fixed (see UnicodeGLib.h for reference, so that you can get it right for the next patches), and two missing function implementations (including the one found by Mikkel), which I added. I also fixed header inclusion on top of UnicodeGLib.h.

I have tested that the ICU backend keeps working, and passing tests. This, along with the facts that icu keeps being the default, and that your patch touches little cross platform code makes me believe that we&apos;re ready for landing it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122698</commentid>
    <comment_count>75</comment_count>
      <attachid>26793</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-22 11:08:58 -0700</bug_when>
    <thetext>Comment on attachment 26793
1/4 - Moving WTF Unicode backend to GLib (v2)

Landed as r44050.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123029</commentid>
    <comment_count>76</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-05-25 05:12:06 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; (From update of attachment 26712 [review])
&gt; This seems to be an earlier attempt, that has been superseded by
&gt; https://bugs.webkit.org/attachment.cgi?id=26793, right? Clearing flag.

26712 belonged to an earlier set (26711 and 26712). I hope I will soon find the time to provide an updated version of patch 2/4 for the Text Codecs.

Thanks for landing!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155066</commentid>
    <comment_count>77</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-10-16 05:31:17 -0700</bug_when>
    <thetext>Ping. Do you plan to keep going on this one, or should we revert the original patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155125</commentid>
    <comment_count>78</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-10-16 10:35:04 -0700</bug_when>
    <thetext>I would love to see this progress, if it weren&apos;t for the bleeding edge Glib requirement making it unusable on my N900 :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155289</commentid>
    <comment_count>79</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-10-16 15:49:23 -0700</bug_when>
    <thetext>(In reply to comment #78)
&gt; I would love to see this progress, if it weren&apos;t for the bleeding edge Glib
&gt; requirement making it unusable on my N900 :-/

Upgrading the glib in the system should be trivial, I&apos;m sure at worst there&apos;s a handful of patches applied to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155310</commentid>
    <comment_count>80</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-10-16 17:02:42 -0700</bug_when>
    <thetext>Emphasis on &quot;should&quot;. Glib can&apos;t (easily) be replaced because several system applications explicitly require the version that is ships with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155314</commentid>
    <comment_count>81</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-10-16 17:05:54 -0700</bug_when>
    <thetext>(In reply to comment #80)
&gt; Emphasis on &quot;should&quot;. Glib can&apos;t (easily) be replaced because several system
&gt; applications explicitly require the version that is ships with.

Upgrade your glib and then just change the version number back to the previous one. Stupid workarounds for stupid applications (and good God, file bugs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155616</commentid>
    <comment_count>82</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-10-19 01:58:40 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; Ping. Do you plan to keep going on this one, or should we revert the original
&gt; patch?

Yes, I will provide updated patches until the middle of this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155795</commentid>
    <comment_count>83</comment_count>
      <attachid>41434</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-10-19 11:24:06 -0700</bug_when>
    <thetext>Created attachment 41434
2/4 - Moving Text Codecs to GLib (v2)

New version of patch 2/4 - applies cleanly against r49769

Moving TextCodec to GLib and removing respective HYBRID macro usages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155890</commentid>
    <comment_count>84</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-19 14:08:57 -0700</bug_when>
    <thetext>Doing more than one patch per bug, is generally a recipe for slow reviews.  In this case, I&apos;m scared to review this because I don&apos;t have time to read all 83 comments before doing my review. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155922</commentid>
    <comment_count>85</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-10-19 14:48:26 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; Doing more than one patch per bug, is generally a recipe for slow reviews.  In
&gt; this case, I&apos;m scared to review this because I don&apos;t have time to read all 83
&gt; comments before doing my review. :(

Well, in comment #51 Darin asked me to split it into smaller portions, that&apos;s why there&apos;s more than one patch. Maybe Gustavo can help reviewing this as he reviewed 1/4?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157603</commentid>
    <comment_count>86</comment_count>
      <attachid>41434</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-10-25 11:54:12 -0700</bug_when>
    <thetext>Comment on attachment 41434
2/4 - Moving Text Codecs to GLib (v2)

&gt; @@ -114,6 +117,20 @@ CString TextEncoding::encode(const UChar
&gt;      QString str(reinterpret_cast&lt;const QChar*&gt;(characters), length);
&gt;      str = str.normalized(QString::NormalizationForm_C);
&gt;      return newTextCodec(*this)-&gt;encode(reinterpret_cast&lt;const UChar *&gt;(str.utf16()), str.length(), handling);
&gt; +#elif USE(GLIB_UNICODE)
&gt; +    GOwnPtr&lt;char&gt; utf8source;
&gt; +    utf8source.set(g_utf16_to_utf8(characters, length, 0, 0, 0));
&gt; +
&gt; +    GOwnPtr&lt;char&gt; utf8normalized;
&gt; +    utf8normalized.set(g_utf8_normalize(utf8source.get(), -1, G_NORMALIZE_NFC));
&gt; +
&gt; +    long utf16length;
&gt; +    GOwnPtr&lt;UChar&gt; utf16normalized;
&gt; +    utf16normalized.set(g_utf8_to_utf16(utf8normalized.get(), -1, 0, &amp;utf16length, 0));

Naming of the variables is a bit off our style. UTF8Normalized is more like it, for instance.

&gt; +    CString result = newTextCodec(*this)-&gt;encode(utf16normalized.get(), utf16length, handling);
&gt; +
&gt; +    return result;

No need for a variable, just return the newTextCodec call directly.

&gt; +#include &quot;gtk/TextCodecGtk.h&quot;
&gt; +#endif
&gt;  #if PLATFORM(WINCE) &amp;&amp; !PLATFORM(QT)
&gt;  #include &quot;TextCodecWince.h&quot;
&gt;  #endif
&gt;  
&gt; +
&gt;  using namespace WTF;

Why this space?

&gt; +namespace WebCore {
&gt; +
&gt; +
&gt; +

Too many blank lines to my taste =).

&gt; +// list of text encodings and their aliases
&gt; +// the first entry/&quot;alias&quot; is the canonical name, each alias list must be terminated by a 0

Comments should in general be full sentences, starting with a capital letter, and ending in a period.

&gt; +// Unicode
&gt; +TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_UTF_8            = { &quot;UTF-8&quot;, 0}; 

You&apos;re missing a space before } on all of these. I don&apos;t think we have a style rule for this, but it looks inconsistent with the fact that you have one at the start =).

&gt; +static PassOwnPtr&lt;TextCodec&gt; newTextCodecGtk(const TextEncoding&amp; encoding, const void*)
&gt; +{
&gt; +#ifndef NDEBUG
&gt; +    // too noisy if each UTF-8 codec creation is logged
&gt; +    // if (strcmp(encoding.name(), &quot;UTF-8&quot;))
&gt; +    //     LOG(TextConversion, &quot;creating new text codec for encoding name %s&quot;, encoding.name());
&gt; +#endif

This is dead code. Either let it log stuff, or remove the code altogether, please. I think it may make sense to log in a debug build, but up to you.

&gt; +    for (unsigned int i = 0; i &lt; listLength; ++i) {
&gt; +        codecAliasList *codecAliases = static_cast&lt;codecAliasList*&gt;(encodingList[i]);
&gt; +        int codecCount = -1;
&gt; +        const gchar *canonicalName, *currentAlias;
&gt; +        bool canonicalAvailable = true;
&gt; +        
&gt; +        // for each of the alias lists:
&gt; +        // bail out if canonical is not available,
&gt; +        // then continue testing each alias, 
&gt; +        // if available, add it to the list, mapping it to its canonical name
&gt; +
&gt; +        while ((currentAlias = (*codecAliases)[++codecCount]) &amp;&amp; canonicalAvailable) {
&gt; +            bool currentAvailable = isEncodingAvailable(currentAlias);
&gt; +
&gt; +            if (codecCount == 0 &amp;&amp; currentAvailable) {
&gt; +                canonicalName = currentAlias;
&gt; +                canonicalAvailable = true;
&gt; +                LOG_VERBOSE(TextConversion, &quot;registering encoding canonical %s&quot;, canonicalName);
&gt; +                registrar(canonicalName, canonicalName);
&gt; +            } else if (codecCount == 0 &amp;&amp; !currentAvailable)
&gt; +                canonicalAvailable = false;

This feels a bit convoluted. Have you considered moving these two condition checks before the while loop? There&apos;s no need to check them on every loop run, since they are only useful in the first one.

&gt; +TextCodecGtk::~TextCodecGtk()
&gt; +{
&gt; +    releaseIConv();
&gt; +}
&gt; +
&gt; +void TextCodecGtk::releaseIConv() const
&gt; +{
&gt; +    if (m_iconvDecoder != reinterpret_cast&lt;GIConv&gt;(-1)) {
&gt; +        g_iconv_close(m_iconvDecoder);
&gt; +        m_iconvDecoder = reinterpret_cast&lt;GIConv&gt;(-1);
&gt; +    }
&gt; +    if (m_iconvEncoder != reinterpret_cast&lt;GIConv&gt;(-1)) {
&gt; +        g_iconv_close(m_iconvEncoder);
&gt; +        m_iconvEncoder = reinterpret_cast&lt;GIConv&gt;(-1);
&gt; +    }
&gt; +}

Why is this a separate function? Do you call releaseIConv anywhere else? Why not put this code inside the destructor, directly?

&gt; +    if (err) {
&gt; +        LOG_ERROR(&quot;GIConv conversion error&quot;);

Would it be useful to log the error message here?

&gt; +    CString result = CString(buffer.get(), count);
&gt; +
&gt; +    return result;

No need for a variable here.
&gt; +#ifndef TextCodecGTK_h
&gt; +#define TextCodecGTK_h
&gt; +
&gt; +#include &lt;glib.h&gt;
&gt; +
&gt; +#include &quot;TextCodec.h&quot;
&gt; +#include &quot;TextEncoding.h&quot;

No need for that blank line between the includes.

Another round! =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157766</commentid>
    <comment_count>87</comment_count>
      <attachid>41866</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-10-26 07:39:01 -0700</bug_when>
    <thetext>Created attachment 41866
2/4 - Moving Text Codecs to GLib (v3)

(In reply to comment #86)

Thanks a lot for your review, Gustavo!

&gt; (From update of attachment 41434 [details])
&gt; &gt; @@ -114,6 +117,20 @@ CString TextEncoding::encode(const UChar

&gt; &gt; [...]
&gt; &gt; +    GOwnPtr&lt;char&gt; utf8source;
&gt; &gt; [...]
&gt; &gt; +    GOwnPtr&lt;char&gt; utf8normalized;
&gt; &gt; [...]
&gt; &gt; +    GOwnPtr&lt;UChar&gt; utf16normalized;
&gt; 
&gt; Naming of the variables is a bit off our style. UTF8Normalized is more like it,
&gt; for instance.

If I understood the style guide correctly, it should be CamelCase starting with a lowercase letter for variables, also lowercasing acronyms. so I changed it to utf8Source, utf8Normalized etc. Hope that&apos;s fine now. 

&gt; &gt; +    CString result = newTextCodec(*this)-&gt;encode(utf16normalized.get(), utf16length, handling);
&gt; &gt; +
&gt; &gt; +    return result;
&gt; 
&gt; No need for a variable, just return the newTextCodec call directly.

Done.

&gt; &gt; +#include &quot;gtk/TextCodecGtk.h&quot;
&gt; &gt; +#endif
&gt; &gt;  #if PLATFORM(WINCE) &amp;&amp; !PLATFORM(QT)
&gt; &gt;  #include &quot;TextCodecWince.h&quot;
&gt; &gt;  #endif
&gt; &gt;  
&gt; &gt; +
&gt; &gt;  using namespace WTF;
&gt; 
&gt; Why this space?

Removed.

&gt; &gt; +namespace WebCore {
&gt; &gt; +
&gt; &gt; +
&gt; &gt; +
&gt; 
&gt; Too many blank lines to my taste =).

Removed.

&gt; &gt; +// list of text encodings and their aliases
&gt; &gt; +// the first entry/&quot;alias&quot; is the canonical name, each alias list must be terminated by a 0
&gt; 
&gt; Comments should in general be full sentences, starting with a capital letter,
&gt; and ending in a period.

Rephrased this comment as well as the Changelog a little bit.

&gt; &gt; +// Unicode
&gt; &gt; +TextCodecGtk::codecAliasList TextCodecGtk::m_codecAliases_UTF_8            = { &quot;UTF-8&quot;, 0}; 
&gt; 
&gt; You&apos;re missing a space before } on all of these. I don&apos;t think we have a style
&gt; rule for this, but it looks inconsistent with the fact that you have one at the
&gt; start =).

Changed to match.

&gt; &gt; +static PassOwnPtr&lt;TextCodec&gt; newTextCodecGtk(const TextEncoding&amp; encoding, const void*)
&gt; &gt; +{
&gt; &gt; +#ifndef NDEBUG
&gt; &gt; +    // too noisy if each UTF-8 codec creation is logged
&gt; &gt; +    // if (strcmp(encoding.name(), &quot;UTF-8&quot;))
&gt; &gt; +    //     LOG(TextConversion, &quot;creating new text codec for encoding name %s&quot;, encoding.name());
&gt; &gt; +#endif
&gt; 
&gt; This is dead code. Either let it log stuff, or remove the code altogether,
&gt; please. I think it may make sense to log in a debug build, but up to you.

Removed the log statement here and as well as in isEncodingAvailable. Replaced those by more accurate logging in registerEncodingNames.

&gt; &gt; +    for (unsigned int i = 0; i &lt; listLength; ++i) {
&gt; &gt; +        codecAliasList *codecAliases = static_cast&lt;codecAliasList*&gt;(encodingList[i]);
&gt; &gt; +        int codecCount = -1;
&gt; &gt; +        const gchar *canonicalName, *currentAlias;
&gt; &gt; +        bool canonicalAvailable = true;
&gt; &gt; +        
&gt; &gt; +        // for each of the alias lists:
&gt; &gt; +        // bail out if canonical is not available,
&gt; &gt; +        // then continue testing each alias, 
&gt; &gt; +        // if available, add it to the list, mapping it to its canonical name
&gt; &gt; +
&gt; &gt; +        while ((currentAlias = (*codecAliases)[++codecCount]) &amp;&amp; canonicalAvailable) {
&gt; &gt; +            bool currentAvailable = isEncodingAvailable(currentAlias);
&gt; &gt; +
&gt; &gt; +            if (codecCount == 0 &amp;&amp; currentAvailable) {
&gt; &gt; +                canonicalName = currentAlias;
&gt; &gt; +                canonicalAvailable = true;
&gt; &gt; +                LOG_VERBOSE(TextConversion, &quot;registering encoding canonical %s&quot;, canonicalName);
&gt; &gt; +                registrar(canonicalName, canonicalName);
&gt; &gt; +            } else if (codecCount == 0 &amp;&amp; !currentAvailable)
&gt; &gt; +                canonicalAvailable = false;
&gt; 
&gt; This feels a bit convoluted. Have you considered moving these two condition
&gt; checks before the while loop? There&apos;s no need to check them on every loop run,
&gt; since they are only useful in the first one.

Yes, thanks for the remark. I tried to unclutter this and indeed it should be much easier to read now.

&gt; &gt; +TextCodecGtk::~TextCodecGtk()
&gt; &gt; +{
&gt; &gt; +    releaseIConv();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void TextCodecGtk::releaseIConv() const
&gt; &gt; +{
&gt; &gt; +    if (m_iconvDecoder != reinterpret_cast&lt;GIConv&gt;(-1)) {
&gt; &gt; +        g_iconv_close(m_iconvDecoder);
&gt; &gt; +        m_iconvDecoder = reinterpret_cast&lt;GIConv&gt;(-1);
&gt; &gt; +    }
&gt; &gt; +    if (m_iconvEncoder != reinterpret_cast&lt;GIConv&gt;(-1)) {
&gt; &gt; +        g_iconv_close(m_iconvEncoder);
&gt; &gt; +        m_iconvEncoder = reinterpret_cast&lt;GIConv&gt;(-1);
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; Why is this a separate function? Do you call releaseIConv anywhere else? Why
&gt; not put this code inside the destructor, directly?

&quot;Inlined&quot;.

&gt; &gt; +    if (err) {
&gt; &gt; +        LOG_ERROR(&quot;GIConv conversion error&quot;);
&gt; 
&gt; Would it be useful to log the error message here?

Printing code and error message now in encode() and decode().

&gt; &gt; +    CString result = CString(buffer.get(), count);
&gt; &gt; +
&gt; &gt; +    return result;
&gt; 
&gt; No need for a variable here.

Removed.


&gt; &gt; +#ifndef TextCodecGTK_h
&gt; &gt; +#define TextCodecGTK_h
&gt; &gt; +
&gt; &gt; +#include &lt;glib.h&gt;
&gt; &gt; +
&gt; &gt; +#include &quot;TextCodec.h&quot;
&gt; &gt; +#include &quot;TextEncoding.h&quot;
&gt; 
&gt; No need for that blank line between the includes.

Removed.

In addition, due to the log error output I changed the canonical name for Mac Central Europe Encoding from MACCENTRALEUROPE to MAC-CENTRALEUROPE and EUC_JP and EUC_CN to EUC-JP and EUC-CN, so that they work with GLib/iconv.

&gt; Another round! =)

Thanks again for your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158548</commentid>
    <comment_count>88</comment_count>
      <attachid>41866</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-10-28 06:20:55 -0700</bug_when>
    <thetext>Comment on attachment 41866
2/4 - Moving Text Codecs to GLib (v3)

&gt; +#elif USE(GLIB_UNICODE)
&gt; +    GOwnPtr&lt;char&gt; utf8Source;
&gt; +    utf8Source.set(g_utf16_to_utf8(characters, length, 0, 0, 0));
&gt; +
&gt; +    GOwnPtr&lt;char&gt; utf8Normalized;
&gt; +    utf8Normalized.set(g_utf8_normalize(utf8Source.get(), -1, G_NORMALIZE_NFC));
&gt; +
&gt; +    long utf16Length;
&gt; +    GOwnPtr&lt;UChar&gt; utf16Normalized;
&gt; +    utf16Normalized.set(g_utf8_to_utf16(utf8Normalized.get(), -1, 0, &amp;utf16Length, 0));
&gt; +
&gt; +    return newTextCodec(*this)-&gt;encode(utf16Normalized.get(), utf16Length, handling);


Regarding this, there&apos;s an exception to the camel case rule for acronyms, and indeed all usages of &quot;utf&quot; in this file seem to be upper-cased, so I think we should strive for consistency. This seems to be the only problem I am able to spot by now. Sorry for being nit-picky, but please upload a patch with this fixed so that we can use the commit queue =). Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159303</commentid>
    <comment_count>89</comment_count>
      <attachid>42210</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-10-30 06:35:18 -0700</bug_when>
    <thetext>Created attachment 42210
2/4 - Moving Text Codecs to GLib (v4)

(In reply to comment #88)

&gt; Regarding this, there&apos;s an exception to the camel case rule for acronyms, and
&gt; indeed all usages of &quot;utf&quot; in this file seem to be upper-cased, so I think we
&gt; should strive for consistency. This seems to be the only problem I am able to
&gt; spot by now. Sorry for being nit-picky, but please upload a patch with this
&gt; fixed so that we can use the commit queue =). Thanks!

Sure, here it is. Thanks for reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160216</commentid>
    <comment_count>90</comment_count>
      <attachid>42210</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-11-03 14:30:14 -0800</bug_when>
    <thetext>Comment on attachment 42210
2/4 - Moving Text Codecs to GLib (v4)

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160226</commentid>
    <comment_count>91</comment_count>
      <attachid>42210</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-03 14:59:11 -0800</bug_when>
    <thetext>Comment on attachment 42210
2/4 - Moving Text Codecs to GLib (v4)

Rejecting patch 42210 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Gustavo Noronha&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
stry.cpp
|===================================================================
|--- wkTrunkGlib_2_4_Codec/WebCore/platform/text/TextEncodingRegistry.cpp	(revision 50327)
|+++ wkTrunkGlib_2_4_Codec/WebCore/platform/text/TextEncodingRegistry.cpp	(working copy)
--------------------------
No file to patch.  Skipping patch.
5 out of 5 hunks ignored
patching file wkTrunkGlib_2_4_Codec/WebCore/platform/text/gtk/TextCodecGtk.cpp
patching file wkTrunkGlib_2_4_Codec/WebCore/platform/text/gtk/TextCodecGtk.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160227</commentid>
    <comment_count>92</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-03 15:01:01 -0800</bug_when>
    <thetext>Looks like the patch is rooted incorrectly.  It&apos;s possible that svn-create-patch crawled up to the wrong repository root. If you believe that it&apos;s a problem with svn-create-patch, please file a bug. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160379</commentid>
    <comment_count>93</comment_count>
      <attachid>42465</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-04 01:33:25 -0800</bug_when>
    <thetext>Created attachment 42465
2/4 - Moving Text Codecs to GLib (v5)

(In reply to comment #92)

&gt; Looks like the patch is rooted incorrectly.  It&apos;s possible that
&gt; svn-create-patch crawled up to the wrong repository root. If you believe that
&gt; it&apos;s a problem with svn-create-patch, please file a bug. :)

Argh, yes, there was an orphaned .svn folder one level up, looks like svn-create-patch only stopped at this one. Here&apos;s a correctly rooted version of the patch, otherwise no changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160381</commentid>
    <comment_count>94</comment_count>
      <attachid>42465</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-04 01:41:16 -0800</bug_when>
    <thetext>Comment on attachment 42465
2/4 - Moving Text Codecs to GLib (v5)

If you believe svn-create-patch to have been in error in its handling of this patch creation please do file a bug. :)  But yes this patch looks good.  Since all patches require both an r+ and a cq+ for the commit-queue to land, I&apos;m adding an r+ here too, mostly based on gns&apos;s previous review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160395</commentid>
    <comment_count>95</comment_count>
      <attachid>42465</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-04 02:28:11 -0800</bug_when>
    <thetext>Comment on attachment 42465
2/4 - Moving Text Codecs to GLib (v5)

Clearing flags on attachment: 42465

Committed r50508: &lt;http://trac.webkit.org/changeset/50508&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160396</commentid>
    <comment_count>96</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-04 02:28:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161054</commentid>
    <comment_count>97</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-11-05 20:00:57 -0800</bug_when>
    <thetext>Patches 3 and 4 are still pending, hence re-opening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161198</commentid>
    <comment_count>98</comment_count>
      <attachid>42210</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-06 11:30:45 -0800</bug_when>
    <thetext>Comment on attachment 42210
2/4 - Moving Text Codecs to GLib (v4)

Clearing r+ on this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161199</commentid>
    <comment_count>99</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-06 11:31:26 -0800</bug_when>
    <thetext>(In reply to comment #97)
&gt; Patches 3 and 4 are still pending, hence re-opening.

They&apos;re not marked for review?  Should they be?

I really think we should close this bug and start a new ones for any remaining changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163288</commentid>
    <comment_count>100</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2009-11-13 05:45:52 -0800</bug_when>
    <thetext>(In reply to comment #99)
&gt; (In reply to comment #97)
&gt; &gt; Patches 3 and 4 are still pending, hence re-opening.
&gt; 
&gt; They&apos;re not marked for review?  Should they be?
No, nothing to be marked for review here. 

&gt; I really think we should close this bug and start a new ones for any remaining
&gt; changes.

I agree, I&apos;m creating those and adding them as dependencies. So, there won&apos;t be any new patches on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185384</commentid>
    <comment_count>101</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2010-01-28 01:21:30 -0800</bug_when>
    <thetext>The patch for sub-bug 31470 was landed, so this one here can be closed. I don&apos;t seem to have the rights for it, could somebody help me?

I created a new issue for streamlining the differences in behavior between ICU and GLib unicode backend: bug 34247.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185434</commentid>
    <comment_count>102</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-01-28 05:14:26 -0800</bug_when>
    <thetext>there you go, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18852</attachid>
            <date>2008-02-01 14:00:13 -0800</date>
            <delta_ts>2008-04-25 14:42:23 -0700</delta_ts>
            <desc>Preliminary patch removing ICU dependency</desc>
            <filename>WebKit-remove-icu-test-2.diff</filename>
            <type>text/plain</type>
            <size>45352</size>
            <attacher name="Jürg Billeter">j</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAyOTkyNSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsOCArMTM4LDggQEAKIAkk
XiAkQAogCiBub2luc3RfUFJPR1JBTVMgKz0gXAotCVByb2dyYW1zL21pbmlkb20gXAogCVByb2dy
YW1zL3Rlc3RranMKKyMJUHJvZ3JhbXMvbWluaWRvbQogCiAjIG1pbmlkb20KIFByb2dyYW1zX21p
bmlkb21fU09VUkNFUyA9IFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJ
KHJldmlzaW9uIDI5OTI1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAicXQ0L1VuaWNvZGVR
dDQuaCIKICNlbGlmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3Uv
VW5pY29kZUljdS5oPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliLmg+CiAjZWxzZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUg
aW1wbGVtZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L2dsaWIvVW5pY29kZUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTc1
IEBACisvLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisvKgorICogIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBT
dGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQ
cm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgS0pTX1VOSUNPREVfSUNVX0gKKyNkZWZpbmUgS0pTX1VOSUNPREVfSUNVX0gKKworI2luY2x1
ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGZyaWJpZGkuaD4KKwordHlwZWRlZiB1aW50
MTZfdCBVQ2hhcjsKK3R5cGVkZWYgaW50MzJfdCBVQ2hhcjMyOworCisvLyBjb3BpZWQgZnJvbSBH
TGliCisKKy8qIFRhYmxlIG9mIGNhc2Vmb2xkaW5nIGNhc2VzIHRoYXQgY2FuJ3QgYmUgZGVyaXZl
ZCBieSBsb3dlcmNhc2luZworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgZ3VpbnQxNiBj
aDsKKyAgZ2NoYXIgZGF0YVs3XTsKK30gY2FzZWZvbGRfdGFibGVbXSA9IHsKKyAgeyAweDAwYjUs
ICJceGNlXHhiYyIgfSwKKyAgeyAweDAwZGYsICJceDczXHg3MyIgfSwKKyAgeyAweDAxMzAsICJc
eDY5XHhjY1x4ODciIH0sCisgIHsgMHgwMTQ5LCAiXHhjYVx4YmNceDZlIiB9LAorICB7IDB4MDE3
ZiwgIlx4NzMiIH0sCisgIHsgMHgwMWYwLCAiXHg2YVx4Y2NceDhjIiB9LAorICB7IDB4MDM0NSwg
Ilx4Y2VceGI5IiB9LAorICB7IDB4MDM5MCwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MSIgfSwK
KyAgeyAweDAzYjAsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgwM2MyLCAi
XHhjZlx4ODMiIH0sCisgIHsgMHgwM2QwLCAiXHhjZVx4YjIiIH0sCisgIHsgMHgwM2QxLCAiXHhj
ZVx4YjgiIH0sCisgIHsgMHgwM2Q1LCAiXHhjZlx4ODYiIH0sCisgIHsgMHgwM2Q2LCAiXHhjZlx4
ODAiIH0sCisgIHsgMHgwM2YwLCAiXHhjZVx4YmEiIH0sCisgIHsgMHgwM2YxLCAiXHhjZlx4ODEi
IH0sCisgIHsgMHgwM2Y1LCAiXHhjZVx4YjUiIH0sCisgIHsgMHgwNTg3LCAiXHhkNVx4YTVceGQ2
XHg4MiIgfSwKKyAgeyAweDFlOTYsICJceDY4XHhjY1x4YjEiIH0sCisgIHsgMHgxZTk3LCAiXHg3
NFx4Y2NceDg4IiB9LAorICB7IDB4MWU5OCwgIlx4NzdceGNjXHg4YSIgfSwKKyAgeyAweDFlOTks
ICJceDc5XHhjY1x4OGEiIH0sCisgIHsgMHgxZTlhLCAiXHg2MVx4Y2FceGJlIiB9LAorICB7IDB4
MWU5YiwgIlx4ZTFceGI5XHhhMSIgfSwKKyAgeyAweDFmNTAsICJceGNmXHg4NVx4Y2NceDkzIiB9
LAorICB7IDB4MWY1MiwgIlx4Y2ZceDg1XHhjY1x4OTNceGNjXHg4MCIgfSwKKyAgeyAweDFmNTQs
ICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4ODEiIH0sCisgIHsgMHgxZjU2LCAiXHhjZlx4ODVceGNj
XHg5M1x4Y2RceDgyIiB9LAorICB7IDB4MWY4MCwgIlx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAor
ICB7IDB4MWY4MSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7IDB4MWY4MiwgIlx4ZTFc
eGJjXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4MywgIlx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9
LAorICB7IDB4MWY4NCwgIlx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAorICB7IDB4MWY4NSwgIlx4
ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4NiwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5
IiB9LAorICB7IDB4MWY4NywgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICB7IDB4MWY4OCwg
Ilx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4OSwgIlx4ZTFceGJjXHg4MVx4Y2Vc
eGI5IiB9LAorICB7IDB4MWY4YSwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4
YiwgIlx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4YywgIlx4ZTFceGJjXHg4NFx4
Y2VceGI5IiB9LAorICB7IDB4MWY4ZCwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICB7IDB4
MWY4ZSwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZiwgIlx4ZTFceGJjXHg4
N1x4Y2VceGI5IiB9LAorICB7IDB4MWY5MCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICB7
IDB4MWY5MSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWY5MiwgIlx4ZTFceGJj
XHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWY5MywgIlx4ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAor
ICB7IDB4MWY5NCwgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWY5NSwgIlx4ZTFc
eGJjXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWY5NiwgIlx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9
LAorICB7IDB4MWY5NywgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWY5OCwgIlx4
ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5OSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5
IiB9LAorICB7IDB4MWY5YSwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWY5Yiwg
Ilx4ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWY5YywgIlx4ZTFceGJjXHhhNFx4Y2Vc
eGI5IiB9LAorICB7IDB4MWY5ZCwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWY5
ZSwgIlx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZiwgIlx4ZTFceGJjXHhhN1x4
Y2VceGI5IiB9LAorICB7IDB4MWZhMCwgIlx4ZTFceGJkXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4
MWZhMSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZhMiwgIlx4ZTFceGJkXHhh
Mlx4Y2VceGI5IiB9LAorICB7IDB4MWZhMywgIlx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICB7
IDB4MWZhNCwgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWZhNSwgIlx4ZTFceGJk
XHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWZhNiwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAor
ICB7IDB4MWZhNywgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZhOCwgIlx4ZTFc
eGJkXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWZhOSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9
LAorICB7IDB4MWZhYSwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWZhYiwgIlx4
ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZhYywgIlx4ZTFceGJkXHhhNFx4Y2VceGI5
IiB9LAorICB7IDB4MWZhZCwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWZhZSwg
Ilx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWZhZiwgIlx4ZTFceGJkXHhhN1x4Y2Vc
eGI5IiB9LAorICB7IDB4MWZiMiwgIlx4ZTFceGJkXHhiMFx4Y2VceGI5IiB9LAorICB7IDB4MWZi
MywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgIHsgMHgxZmI0LCAiXHhjZVx4YWNceGNlXHhiOSIg
fSwKKyAgeyAweDFmYjYsICJceGNlXHhiMVx4Y2RceDgyIiB9LAorICB7IDB4MWZiNywgIlx4Y2Vc
eGIxXHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmYmMsICJceGNlXHhiMVx4Y2VceGI5IiB9
LAorICB7IDB4MWZiZSwgIlx4Y2VceGI5IiB9LAorICB7IDB4MWZjMiwgIlx4ZTFceGJkXHhiNFx4
Y2VceGI5IiB9LAorICB7IDB4MWZjMywgIlx4Y2VceGI3XHhjZVx4YjkiIH0sCisgIHsgMHgxZmM0
LCAiXHhjZVx4YWVceGNlXHhiOSIgfSwKKyAgeyAweDFmYzYsICJceGNlXHhiN1x4Y2RceDgyIiB9
LAorICB7IDB4MWZjNywgIlx4Y2VceGI3XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmY2Ms
ICJceGNlXHhiN1x4Y2VceGI5IiB9LAorICB7IDB4MWZkMiwgIlx4Y2VceGI5XHhjY1x4ODhceGNj
XHg4MCIgfSwKKyAgeyAweDFmZDMsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsg
MHgxZmQ2LCAiXHhjZVx4YjlceGNkXHg4MiIgfSwKKyAgeyAweDFmZDcsICJceGNlXHhiOVx4Y2Nc
eDg4XHhjZFx4ODIiIH0sCisgIHsgMHgxZmUyLCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgwIiB9
LAorICB7IDB4MWZlMywgIlx4Y2ZceDg1XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDFmZTQs
ICJceGNmXHg4MVx4Y2NceDkzIiB9LAorICB7IDB4MWZlNiwgIlx4Y2ZceDg1XHhjZFx4ODIiIH0s
CisgIHsgMHgxZmU3LCAiXHhjZlx4ODVceGNjXHg4OFx4Y2RceDgyIiB9LAorICB7IDB4MWZmMiwg
Ilx4ZTFceGJkXHhiY1x4Y2VceGI5IiB9LAorICB7IDB4MWZmMywgIlx4Y2ZceDg5XHhjZVx4Yjki
IH0sCisgIHsgMHgxZmY0LCAiXHhjZlx4OGVceGNlXHhiOSIgfSwKKyAgeyAweDFmZjYsICJceGNm
XHg4OVx4Y2RceDgyIiB9LAorICB7IDB4MWZmNywgIlx4Y2ZceDg5XHhjZFx4ODJceGNlXHhiOSIg
fSwKKyAgeyAweDFmZmMsICJceGNmXHg4OVx4Y2VceGI5IiB9LAorICB7IDB4MjE2MCwgIlx4ZTJc
eDg1XHhiMCIgfSwKKyAgeyAweDIxNjEsICJceGUyXHg4NVx4YjEiIH0sCisgIHsgMHgyMTYyLCAi
XHhlMlx4ODVceGIyIiB9LAorICB7IDB4MjE2MywgIlx4ZTJceDg1XHhiMyIgfSwKKyAgeyAweDIx
NjQsICJceGUyXHg4NVx4YjQiIH0sCisgIHsgMHgyMTY1LCAiXHhlMlx4ODVceGI1IiB9LAorICB7
IDB4MjE2NiwgIlx4ZTJceDg1XHhiNiIgfSwKKyAgeyAweDIxNjcsICJceGUyXHg4NVx4YjciIH0s
CisgIHsgMHgyMTY4LCAiXHhlMlx4ODVceGI4IiB9LAorICB7IDB4MjE2OSwgIlx4ZTJceDg1XHhi
OSIgfSwKKyAgeyAweDIxNmEsICJceGUyXHg4NVx4YmEiIH0sCisgIHsgMHgyMTZiLCAiXHhlMlx4
ODVceGJiIiB9LAorICB7IDB4MjE2YywgIlx4ZTJceDg1XHhiYyIgfSwKKyAgeyAweDIxNmQsICJc
eGUyXHg4NVx4YmQiIH0sCisgIHsgMHgyMTZlLCAiXHhlMlx4ODVceGJlIiB9LAorICB7IDB4MjE2
ZiwgIlx4ZTJceDg1XHhiZiIgfSwKKyAgeyAweDI0YjYsICJceGUyXHg5M1x4OTAiIH0sCisgIHsg
MHgyNGI3LCAiXHhlMlx4OTNceDkxIiB9LAorICB7IDB4MjRiOCwgIlx4ZTJceDkzXHg5MiIgfSwK
KyAgeyAweDI0YjksICJceGUyXHg5M1x4OTMiIH0sCisgIHsgMHgyNGJhLCAiXHhlMlx4OTNceDk0
IiB9LAorICB7IDB4MjRiYiwgIlx4ZTJceDkzXHg5NSIgfSwKKyAgeyAweDI0YmMsICJceGUyXHg5
M1x4OTYiIH0sCisgIHsgMHgyNGJkLCAiXHhlMlx4OTNceDk3IiB9LAorICB7IDB4MjRiZSwgIlx4
ZTJceDkzXHg5OCIgfSwKKyAgeyAweDI0YmYsICJceGUyXHg5M1x4OTkiIH0sCisgIHsgMHgyNGMw
LCAiXHhlMlx4OTNceDlhIiB9LAorICB7IDB4MjRjMSwgIlx4ZTJceDkzXHg5YiIgfSwKKyAgeyAw
eDI0YzIsICJceGUyXHg5M1x4OWMiIH0sCisgIHsgMHgyNGMzLCAiXHhlMlx4OTNceDlkIiB9LAor
ICB7IDB4MjRjNCwgIlx4ZTJceDkzXHg5ZSIgfSwKKyAgeyAweDI0YzUsICJceGUyXHg5M1x4OWYi
IH0sCisgIHsgMHgyNGM2LCAiXHhlMlx4OTNceGEwIiB9LAorICB7IDB4MjRjNywgIlx4ZTJceDkz
XHhhMSIgfSwKKyAgeyAweDI0YzgsICJceGUyXHg5M1x4YTIiIH0sCisgIHsgMHgyNGM5LCAiXHhl
Mlx4OTNceGEzIiB9LAorICB7IDB4MjRjYSwgIlx4ZTJceDkzXHhhNCIgfSwKKyAgeyAweDI0Y2Is
ICJceGUyXHg5M1x4YTUiIH0sCisgIHsgMHgyNGNjLCAiXHhlMlx4OTNceGE2IiB9LAorICB7IDB4
MjRjZCwgIlx4ZTJceDkzXHhhNyIgfSwKKyAgeyAweDI0Y2UsICJceGUyXHg5M1x4YTgiIH0sCisg
IHsgMHgyNGNmLCAiXHhlMlx4OTNceGE5IiB9LAorICB7IDB4ZmIwMCwgIlx4NjZceDY2IiB9LAor
ICB7IDB4ZmIwMSwgIlx4NjZceDY5IiB9LAorICB7IDB4ZmIwMiwgIlx4NjZceDZjIiB9LAorICB7
IDB4ZmIwMywgIlx4NjZceDY2XHg2OSIgfSwKKyAgeyAweGZiMDQsICJceDY2XHg2Nlx4NmMiIH0s
CisgIHsgMHhmYjA1LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhmYjA2LCAiXHg3M1x4NzQiIH0sCisg
IHsgMHhmYjEzLCAiXHhkNVx4YjRceGQ1XHhiNiIgfSwKKyAgeyAweGZiMTQsICJceGQ1XHhiNFx4
ZDVceGE1IiB9LAorICB7IDB4ZmIxNSwgIlx4ZDVceGI0XHhkNVx4YWIiIH0sCisgIHsgMHhmYjE2
LCAiXHhkNVx4YmVceGQ1XHhiNiIgfSwKKyAgeyAweGZiMTcsICJceGQ1XHhiNFx4ZDVceGFkIiB9
LAorfTsKKworCisvLyBzb21lIGRlZmluZXMgZnJvbSBJQ1UKKworI2RlZmluZSBVMTZfSVNfTEVB
RChjKSAoKChjKSYweGZmZmZmYzAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfVFJBSUwoYykg
KCgoYykmMHhmZmZmZmMwMCk9PTB4ZGMwMCkKKyNkZWZpbmUgVTE2X1NVUlJPR0FURV9PRkZTRVQg
KCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKQorI2RlZmluZSBVMTZfR0VUX1NVUFBMRU1F
TlRBUlkobGVhZCwgdHJhaWwpIFwKKyAgICAoKChVQ2hhcjMyKShsZWFkKTw8MTBVTCkrKFVDaGFy
MzIpKHRyYWlsKS1VMTZfU1VSUk9HQVRFX09GRlNFVCkKKworI2RlZmluZSBVMTZfTEVBRChzdXBw
bGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSk+PjEwKSsweGQ3YzApCisjZGVmaW5l
IFUxNl9UUkFJTChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSkmMHgzZmYp
fDB4ZGMwMCkKKworI2RlZmluZSBVX0lTX1NVUlJPR0FURShjKSAoKChjKSYweGZmZmZmODAwKT09
MHhkODAwKQorI2RlZmluZSBVMTZfSVNfU0lOR0xFKGMpICFVX0lTX1NVUlJPR0FURShjKQorI2Rl
ZmluZSBVMTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5lIFUxNl9J
U19TVVJST0dBVEVfTEVBRChjKSAoKChjKSYweDQwMCk9PTApCisKKyNkZWZpbmUgVTE2X05FWFQo
cywgaSwgbGVuZ3RoLCBjKSB7IFwKKyAgICAoYyk9KHMpWyhpKSsrXTsgXAorICAgIGlmKFUxNl9J
U19MRUFEKGMpKSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZigoaSk8
KGxlbmd0aCkgJiYgVTE2X0lTX1RSQUlMKF9fYzI9KHMpWyhpKV0pKSB7IFwKKyAgICAgICAgICAg
ICsrKGkpOyBcCisgICAgICAgICAgICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChjKSwgX19j
Mik7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCit9CisKKyNkZWZpbmUgVV9NQVNLKHgpICgodWlu
dDMyX3QpMTw8KHgpKQorCituYW1lc3BhY2UgV1RGIHsKKyAgbmFtZXNwYWNlIFVuaWNvZGUgewor
CisgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgTGVmdFRvUmlnaHQsCisgICAgICBSaWdodFRv
TGVmdCwKKyAgICAgIEV1cm9wZWFuTnVtYmVyLAorICAgICAgRXVyb3BlYW5OdW1iZXJTZXBhcmF0
b3IsCisgICAgICBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3IsCisgICAgICBBcmFiaWNOdW1iZXIs
CisgICAgICBDb21tb25OdW1iZXJTZXBhcmF0b3IsCisgICAgICBCbG9ja1NlcGFyYXRvciwKKyAg
ICAgIFNlZ21lbnRTZXBhcmF0b3IsCisgICAgICBXaGl0ZVNwYWNlTmV1dHJhbCwKKyAgICAgIE90
aGVyTmV1dHJhbCwKKyAgICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nLAorICAgICAgTGVmdFRvUmln
aHRPdmVycmlkZSwKKyAgICAgIFJpZ2h0VG9MZWZ0QXJhYmljLAorICAgICAgUmlnaHRUb0xlZnRF
bWJlZGRpbmcsCisgICAgICBSaWdodFRvTGVmdE92ZXJyaWRlLAorICAgICAgUG9wRGlyZWN0aW9u
YWxGb3JtYXQsCisgICAgICBOb25TcGFjaW5nTWFyaywKKyAgICAgIEJvdW5kYXJ5TmV1dHJhbAor
ICAgIH07CisKKyAgICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAgIERlY29tcG9zaXRp
b25Ob25lLAorICAgICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAgICAgIERlY29tcG9zaXRp
b25Db21wYXQsCisgICAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlLAorICAgICAgRGVjb21wb3NpdGlv
bkZpbmFsLAorICAgICAgRGVjb21wb3NpdGlvbkZvbnQsCisgICAgICBEZWNvbXBvc2l0aW9uRnJh
Y3Rpb24sCisgICAgICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAgIERlY29tcG9zaXRpb25J
c29sYXRlZCwKKyAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAgICBEZWNvbXBvc2l0aW9u
TmFycm93LAorICAgICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisgICAgICBEZWNvbXBvc2l0aW9u
U21hbGwsCisgICAgICBEZWNvbXBvc2l0aW9uU3F1YXJlLAorICAgICAgRGVjb21wb3NpdGlvblN1
YiwKKyAgICAgIERlY29tcG9zaXRpb25TdXBlciwKKyAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNh
bCwKKyAgICAgIERlY29tcG9zaXRpb25XaWRlLAorICAgIH07CisKKyAgICBlbnVtIENoYXJDYXRl
Z29yeSB7CisgICAgICBOb0NhdGVnb3J5ID0gIDAsCisgICAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9
IFVfTUFTSyhHX1VOSUNPREVfVU5BU1NJR05FRCksCisgICAgICBMZXR0ZXJfVXBwZXJjYXNlID0g
VV9NQVNLKEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVSKSwKKyAgICAgIExldHRlcl9Mb3dlcmNh
c2UgPSBVX01BU0soR19VTklDT0RFX0xPV0VSQ0FTRV9MRVRURVIpLAorICAgICAgTGV0dGVyX1Rp
dGxlY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVfVElUTEVDQVNFX0xFVFRFUiksCisgICAgICBMZXR0
ZXJfTW9kaWZpZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX0xFVFRFUiksCisgICAgICBM
ZXR0ZXJfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX0xFVFRFUiksCisKKyAgICAgIE1h
cmtfTm9uU3BhY2luZyA9IFVfTUFTSyhHX1VOSUNPREVfTk9OX1NQQUNJTkdfTUFSSyksCisgICAg
ICBNYXJrX0VuY2xvc2luZyA9IFVfTUFTSyhHX1VOSUNPREVfRU5DTE9TSU5HX01BUkspLAorICAg
ICAgTWFya19TcGFjaW5nQ29tYmluaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9DT01CSU5JTkdfTUFS
SyksCisKKyAgICAgIE51bWJlcl9EZWNpbWFsRGlnaXQgPSBVX01BU0soR19VTklDT0RFX0RFQ0lN
QUxfTlVNQkVSKSwKKyAgICAgIE51bWJlcl9MZXR0ZXIgPSBVX01BU0soR19VTklDT0RFX0xFVFRF
Ul9OVU1CRVIpLAorICAgICAgTnVtYmVyX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9O
VU1CRVIpLAorCisgICAgICBTZXBhcmF0b3JfU3BhY2UgPSBVX01BU0soR19VTklDT0RFX1NQQUNF
X1NFUEFSQVRPUiksCisgICAgICBTZXBhcmF0b3JfTGluZSA9IFVfTUFTSyhHX1VOSUNPREVfTElO
RV9TRVBBUkFUT1IpLAorICAgICAgU2VwYXJhdG9yX1BhcmFncmFwaCA9IFVfTUFTSyhHX1VOSUNP
REVfUEFSQUdSQVBIX1NFUEFSQVRPUiksCisKKyAgICAgIE90aGVyX0NvbnRyb2wgPSBVX01BU0so
R19VTklDT0RFX0NPTlRST0wpLAorICAgICAgT3RoZXJfRm9ybWF0ID0gVV9NQVNLKEdfVU5JQ09E
RV9GT1JNQVQpLAorICAgICAgT3RoZXJfUHJpdmF0ZVVzZSA9IFVfTUFTSyhHX1VOSUNPREVfUFJJ
VkFURV9VU0UpLAorICAgICAgT3RoZXJfU3Vycm9nYXRlID0gVV9NQVNLKEdfVU5JQ09ERV9TVVJS
T0dBVEUpLAorCisgICAgICBQdW5jdHVhdGlvbl9EYXNoID0gVV9NQVNLKEdfVU5JQ09ERV9EQVNI
X1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX09wZW4gPSBVX01BU0soR19VTklDT0RF
X09QRU5fUFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fQ2xvc2UgPSBVX01BU0soR19V
TklDT0RFX0NMT1NFX1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9
IFVfTUFTSyhHX1VOSUNPREVfQ09OTkVDVF9QVU5DVFVBVElPTiksCisgICAgICBQdW5jdHVhdGlv
bl9PdGhlciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfUFVOQ1RVQVRJT04pLAorCisgICAgICBT
eW1ib2xfTWF0aCA9IFVfTUFTSyhHX1VOSUNPREVfTUFUSF9TWU1CT0wpLAorICAgICAgU3ltYm9s
X0N1cnJlbmN5ID0gVV9NQVNLKEdfVU5JQ09ERV9DVVJSRU5DWV9TWU1CT0wpLAorICAgICAgU3lt
Ym9sX01vZGlmaWVyID0gVV9NQVNLKEdfVU5JQ09ERV9NT0RJRklFUl9TWU1CT0wpLAorICAgICAg
U3ltYm9sX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9TWU1CT0wpLAorCisgICAgICBQ
dW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUgPSBVX01BU0soR19VTklDT0RFX0lOSVRJQUxfUFVOQ1RV
QVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVf
RklOQUxfUFVOQ1RVQVRJT04pCisgICAgfTsKKworICAgIGlubGluZSBVQ2hhcjMyIGZvbGRDYXNl
KFVDaGFyMzIgY2gpCisgICAgeworICAgICAgICAvLyBhZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRv
IEdMaWIgdXBzdHJlYW0/CisKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVu
ZCA9IEdfTl9FTEVNRU5UUyhjYXNlZm9sZF90YWJsZSk7CisKKyAgICAgICAgaWYgKGNoID49IGNh
c2Vmb2xkX3RhYmxlW3N0YXJ0XS5jaCAmJgorICAgICAgICAgICAgY2ggPD0gY2FzZWZvbGRfdGFi
bGVbZW5kIC0gMV0uY2gpIHsKKyAgICAgICAgICAgIHdoaWxlIChUUlVFKSB7CisgICAgICAgICAg
ICAgICAgaW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAgICAgICAgICAgICBpZiAo
Y2ggPT0gY2FzZWZvbGRfdGFibGVbaGFsZl0uY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdfdXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxmXS5kYXRhKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGhhbGYgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+IGNhc2Vmb2xkX3RhYmxlW2hh
bGZdLmNoKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaGFsZjsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSBoYWxmOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBnX3Vu
aWNoYXJfdG9sb3dlciAoY2gpOworICAgIH0KKworICAgIGlubGluZSBpbnQgZm9sZENhc2UoVUNo
YXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xl
bmd0aCwgYm9vbCogZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7
CisKKyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0
aCwgMCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICpl
cnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAg
ICBjaGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMsIC0xKTsKKyAgICAg
ICAgZ19mcmVlKHV0ZjhzcmMpOworCisgICAgICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAt
MTsKKyAgICAgICAgVUNoYXIqIHV0ZjE2cmVzdWx0ID0gZ191dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1
bHQsIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3IpOworICAgICAgICBnX2ZyZWUo
dXRmOHJlc3VsdCk7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9
IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgICAgICplcnJvciA9
IFRSVUU7CisgICAgICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9CisgICAgICAgIG1lbWNweShyZXN1bHQs
IHV0ZjE2cmVzdWx0LCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAg
ICBnX2ZyZWUodXRmMTZyZXN1bHQpOworCisgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0
aDsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJl
c3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3Ip
CisgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAgY2hhciAq
dXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7
CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjaGFyICp1dGY4cmVzdWx0
ID0gZ191dGY4X3N0cmRvd24odXRmOHNyYywgLTEpOworICAgICAgICBnX2ZyZWUodXRmOHNyYyk7
CisKKyAgICAgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICBVQ2hhciog
dXRmMTZyZXN1bHQgPSBnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdCwgLTEsIDAsICZ1dGYxNnJl
c3VsdExlbmd0aCwgJmdlcnJvcik7CisgICAgICAgIGdfZnJlZSh1dGY4cmVzdWx0KTsKKyAgICAg
ICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+
IHJlc3VsdExlbmd0aCkgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAg
IGdfZnJlZSh1dGYxNnJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5n
dGg7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZyZXN1bHQsIHV0ZjE2
cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGdfZnJlZSh1dGYxNnJlc3Vs
dCk7CisKKyAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIH0KKworICAgIGlu
bGluZSBVQ2hhcjMyIHRvTG93ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3Vu
aWNoYXJfdG9sb3dlcihjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVD
aGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX3RvdXBwZXIoYyk7CisgICAg
fQorCisgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5n
dGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQorICAgIHsK
KyAgICAgICAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOworCisgICAgICAgIGNoYXIgKnV0ZjhzcmMg
PSBnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3IpOworICAgICAg
ICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgY2hhciAqdXRmOHJlc3VsdCA9IGdfdXRm
OF9zdHJ1cCh1dGY4c3JjLCAtMSk7CisgICAgICAgIGdfZnJlZSh1dGY4c3JjKTsKKworICAgICAg
ICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgIFVDaGFyKiB1dGYxNnJlc3Vs
dCA9IGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3Ro
LCAmZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhyZXN1bHQpOworICAgICAgICBpZiAoZ2Vy
cm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVu
Z3RoKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgZ19mcmVlKHV0
ZjE2cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAg
ICAgfQorICAgICAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdCwgdXRmMTZyZXN1bHRMZW5n
dGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKworICAg
ICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorCisgICAgaW5saW5lIFVDaGFy
MzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJf
dG90aXRsZShjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0FyYWJpY0NoYXIoVUNoYXIz
MiBjKQorICAgIHsKKyAgICAgIHJldHVybiBjID49IDB4MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAg
ICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAg
ICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOworICAgIH0K
KworICAgIGlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIzMiBjKQorICAgIHsKKyAg
ICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9S
OworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhcjMyIGMpCisg
ICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3ByaW50KGMpOworICAgIH0KKyAgICAKKyAg
ICBpbmxpbmUgYm9vbCBpc0RpZ2l0KFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191
bmljaGFyX2lzZGlnaXQoYyk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNQdW5jdChVQ2hh
cjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3B1bmN0KGMpOworICAgIH0K
KworICAgIGlubGluZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hhcjMyIGMpCisgICAgeworICAg
ICAgZ3VuaWNoYXIgbWlycm9yID0gMDsKKyAgICAgIGdfdW5pY2hhcl9nZXRfbWlycm9yX2NoYXIo
YywgJm1pcnJvcik7CisgICAgICByZXR1cm4gbWlycm9yOworICAgIH0KKworICAgIGlubGluZSBD
aGFyQ2F0ZWdvcnkgY2F0ZWdvcnkoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIGlmIChjID4gMHhm
ZmZmKSB7CisgICAgICAgICAgcmV0dXJuIE5vQ2F0ZWdvcnk7CisgICAgICB9CisgICAgICByZXR1
cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBlKGMpKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCisgICAgeworICAgICAgRnJp
QmlkaUNoYXJUeXBlIHR5cGUgPSBmcmliaWRpX2dldF90eXBlKGMpOworICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICBjYXNlIEZSSUJJRElfVFlQRV9MVFI6IHJldHVybiBMZWZ0VG9SaWdodDsK
KyAgICAgIGNhc2UgRlJJQklESV9UWVBFX1JUTDogcmV0dXJuIFJpZ2h0VG9MZWZ0OworICAgICAg
Y2FzZSBGUklCSURJX1RZUEVfQUw6IHJldHVybiBSaWdodFRvTGVmdEFyYWJpYzsKKyAgICAgIGNh
c2UgRlJJQklESV9UWVBFX0xSRTogcmV0dXJuIExlZnRUb1JpZ2h0RW1iZWRkaW5nOworICAgICAg
Y2FzZSBGUklCSURJX1RZUEVfUkxFOiByZXR1cm4gUmlnaHRUb0xlZnRFbWJlZGRpbmc7CisgICAg
ICBjYXNlIEZSSUJJRElfVFlQRV9MUk86IHJldHVybiBMZWZ0VG9SaWdodE92ZXJyaWRlOworICAg
ICAgY2FzZSBGUklCSURJX1RZUEVfUkxPOiByZXR1cm4gUmlnaHRUb0xlZnRPdmVycmlkZTsKKyAg
ICAgIGNhc2UgRlJJQklESV9UWVBFX1BERjogcmV0dXJuIFBvcERpcmVjdGlvbmFsRm9ybWF0Owor
ICAgICAgY2FzZSBGUklCSURJX1RZUEVfRU46IHJldHVybiBFdXJvcGVhbk51bWJlcjsKKyAgICAg
IGNhc2UgRlJJQklESV9UWVBFX0FOOiByZXR1cm4gQXJhYmljTnVtYmVyOworICAgICAgY2FzZSBG
UklCSURJX1RZUEVfRVM6IHJldHVybiBFdXJvcGVhbk51bWJlclNlcGFyYXRvcjsKKyAgICAgIGNh
c2UgRlJJQklESV9UWVBFX0VUOiByZXR1cm4gRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOworICAg
ICAgY2FzZSBGUklCSURJX1RZUEVfQ1M6IHJldHVybiBDb21tb25OdW1iZXJTZXBhcmF0b3I7Cisg
ICAgICBjYXNlIEZSSUJJRElfVFlQRV9OU006IHJldHVybiBOb25TcGFjaW5nTWFyazsKKyAgICAg
IGNhc2UgRlJJQklESV9UWVBFX0JOOiByZXR1cm4gQm91bmRhcnlOZXV0cmFsOworICAgICAgY2Fz
ZSBGUklCSURJX1RZUEVfQlM6IHJldHVybiBCbG9ja1NlcGFyYXRvcjsKKyAgICAgIGNhc2UgRlJJ
QklESV9UWVBFX1NTOiByZXR1cm4gU2VnbWVudFNlcGFyYXRvcjsKKyAgICAgIGNhc2UgRlJJQklE
SV9UWVBFX1dTOiByZXR1cm4gV2hpdGVTcGFjZU5ldXRyYWw7CisgICAgICBkZWZhdWx0OiByZXR1
cm4gT3RoZXJOZXV0cmFsOworfQorICAgIH0KKworICAgIGlubGluZSBib29sIGlzTG93ZXIoVUNo
YXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNsb3dlcihjKTsKKyAgICB9
CisKKyAgICBpbmxpbmUgaW50IGRpZ2l0VmFsdWUoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJl
dHVybiBnX3VuaWNoYXJfZGlnaXRfdmFsdWUoYyk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQ4
X3QgY29tYmluaW5nQ2xhc3MoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNo
YXJfY29tYmluaW5nX2NsYXNzKGMpOworICAgIH0KKworICAgIGlubGluZSBEZWNvbXBvc2l0aW9u
VHlwZSBkZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgLy8gRklYTUUK
KyAgICAgIHJldHVybiBEZWNvbXBvc2l0aW9uTm9uZTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50
IHVtZW1jYXNlY21wKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAg
ICB7CisgICAgICBjaGFyICp1dGY4YSA9IGdfdXRmMTZfdG9fdXRmOChhLCAtMSwgMCwgMCwgTlVM
TCk7CisgICAgICBjaGFyICp1dGY4YiA9IGdfdXRmMTZfdG9fdXRmOChiLCAtMSwgMCwgMCwgTlVM
TCk7CisKKyAgICAgIGNoYXIgKmZvbGRlZEEgPSBnX3V0ZjhfY2FzZWZvbGQodXRmOGEsIC0xKTsK
KyAgICAgIGNoYXIgKmZvbGRlZEIgPSBnX3V0ZjhfY2FzZWZvbGQodXRmOGIsIC0xKTsKKworICAg
ICAgZ19mcmVlKHV0ZjhhKTsKKyAgICAgIGdfZnJlZSh1dGY4Yik7CisKKyAgICAgIGludCByZXN1
bHQgPSBnX3V0ZjhfY29sbGF0ZShmb2xkZWRBLCBmb2xkZWRCKTsKKworICAgICAgZ19mcmVlKGZv
bGRlZEEpOworICAgICAgZ19mcmVlKGZvbGRlZEIpOworCisgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICB9Cit9CisKKyNlbmRpZgorLy8gdmltOiB0cz0yIHN3PTIgZXQKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyOTkyNSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAKICNkZWZpbmUgV1RG
X1VTRV9RVDRfVU5JQ09ERSAxCiAjZWxpZiBQTEFURk9STShTWU1CSUFOKQogI2RlZmluZSBXVEZf
VVNFX1NZTUJJQU5fVU5JQ09ERSAxCisjZWxpZiBQTEFURk9STShHVEspCisjZGVmaW5lIFdURl9V
U0VfR0xJQl9VTklDT0RFIDEKICNlbHNlCiAjZGVmaW5lIFdURl9VU0VfSUNVX1VOSUNPREUgMQog
I2VuZGlmCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBHTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gMjk5MjUpCisrKyBHTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsOCBAQAogCS1JJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS93dGYgXAogCS1JJChzcmNkaXIpL0ph
dmFTY3JpcHRDb3JlL2tqcyBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMKKwkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCisJJChVTklDT0RFX0NGTEFHUykKIAog
IyBEZWZhdWx0IGNvbXBpbGVyIGZsYWdzCiBnbG9iYWxfY2ZsYWdzIDo9IFwKQEAgLTk0LDcgKzk1
LDcgQEAKIAkkKGphdmFzY3JpcHRjb3JlX2J1aWx0X3NvdXJjZXMpIFwKIAkkKGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMpCiAKLWxpYkphdmFTY3JpcHRDb3JlX2xhX0xERkxBR1MgPSAkKElDVV9MSUJT
KSAtbHB0aHJlYWQKK2xpYkphdmFTY3JpcHRDb3JlX2xhX0xERkxBR1MgPSAkKFVOSUNPREVfTElC
UykgLWxwdGhyZWFkCiAKIGxpYkphdmFTY3JpcHRDb3JlX2xhX0NYWEZMQUdTID0gJChnbG9iYWxf
Y2ZsYWdzKSAtZnN0cmljdC1hbGlhc2luZwogCkBAIC0xMDMsNyArMTA0LDcgQEAKIGxpYkphdmFT
Y3JpcHRDb3JlX2xhX0NQUEZMQUdTID0gXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCiAJJChqYXZh
c2NyaXB0Y29yZV9jcHBmbGFncykgXAotCSQoSUNVX0NQUEZMQUdTKQorCSQoVU5JQ09ERV9DRkxB
R1MpCiAKICMKICMgV2ViQ29yZQpAQCAtMTYxLDcgKzE2Miw3IEBACiAJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKIAkkKHdlYmNvcmVfY3BwZmxhZ3MpIFwKIAkkKHdlYmtpdGd0a19jcHBmbGFncykgXAot
CSQoSUNVX0NQUEZMQUdTKQorCSQoVU5JQ09ERV9DRkxBR1MpCiAKIGxpYldlYktpdEd0a19sYV9M
SUJBREQgPSBsaWJKYXZhU2NyaXB0Q29yZS5sYQogCkBAIC0xNjksNyArMTcwLDcgQEAKIAkkKHdl
YmtpdGd0a19sZGZsYWdzKSBcCiAJJChERVBFTkRFTkNJRVNfTElCUykgXAogCSQoTElCQ1VSTF9M
SUJTKSBcCi0JJChJQ1VfTElCUykgXAorCSQoVU5JQ09ERV9MSUJTKSBcCiAJJChTUUxJVEUzX0xJ
QlMpIFwKIAkkKEdTVFJFQU1FUl9MSUJTKSBcCiAJJChMSUJYU0xUX0xJQlMpIFwKSW5kZXg6IFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQkocmV2aXNpb24gMjk5MjUpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC05MjEsOSArOTIxLDYgQEAKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21l
bnRlZEZvbnREYXRhLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAotCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcCBcCiAJV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAgXAogCVdlYkNv
cmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIFwKQEAgLTk1OSw3ICs5NTYsOSBAQAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU3lzdGVtVGltZUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0
b3JJbnRlcm5hbElDVUd0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENv
ZGVjR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0
ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9UaHJlYWRpbmdHdGsuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaGVlbEV2ZW50R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
V2lkZ2V0R3RrLmNwcCBcCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3Vu
ZGFyaWVzR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRCb3VuZGFyaWVzR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Qm91
bmRhcmllcy5oIgorCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2ludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNoYXJz
LCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3Qg
VUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5k
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5h
bElDVUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAkocmV2aXNpb24gMjk5MjUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jb25zdCBjaGFyKiBjdXJyZW50VGV4dEJyZWFrTG9jYWxlSUQoKQotewotICAgIHJldHVy
biAiZW5fdXMiOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRD
b2RlY0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0
Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9U
ZXh0Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
bnlwb3AuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dENv
ZGVjR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisKK3VzaW5nIHN0ZDo6YXV0b19wdHI7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsK
KyAgICAKK3N0YXRpYyBhdXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlY0d0ayhjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gYXV0b19w
dHI8VGV4dENvZGVjPihuZXcgVGV4dENvZGVjR3RrKGVuY29kaW5nKSk7Cit9CisKK3ZvaWQgVGV4
dENvZGVjR3RrOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
ciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKCJVVEYtOCIsICJVVEYtOCIpOworfQorCit2
b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIpCit7CisgICAgcmVnaXN0cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY0d0aywgMCk7
Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIC8vIEZJWE1FIGhvdyB0byBn
ZXQgc3VwcG9ydGVkIGVuY29kaW5ncz8KKworICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAiVVRGLTgi
KTsKKyAgICByZWdpc3RyYXIoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIpOworfQorCit2b2lk
IFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIg
cmVnaXN0cmFyKQoreworICAgIC8vIEZJWE1FIGhvdyB0byBnZXQgc3VwcG9ydGVkIGVuY29kaW5n
cz8KKworICAgIHJlZ2lzdHJhcigiVVRGLTgiLCBuZXdUZXh0Q29kZWNHdGssIDApOworICAgIHJl
Z2lzdHJhcigiSVNPLTg4NTktMSIsIG5ld1RleHRDb2RlY0d0aywgMCk7Cit9CisKK1RleHRDb2Rl
Y0d0azo6VGV4dENvZGVjR3RrKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCisgICAgOiBt
X2VuY29kaW5nKGVuY29kaW5nKQorICAgICwgbV9udW1CdWZmZXJlZEJ5dGVzKDApCisgICAgLCBt
X2ljb252RGVjb2RlcigoR0lDb252KSAtMSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKChHSUNvbnYp
IC0xKQoreworfQorCitUZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGsoKQoreworICAgIHJlbGVh
c2VJQ29udigpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVsZWFzZUlDb252KCkgY29uc3QK
K3sKKyAgICBpZiAobV9pY29udkRlY29kZXIgIT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgZ19p
Y29udl9jbG9zZShtX2ljb252RGVjb2Rlcik7CisgICAgICAgIG1faWNvbnZEZWNvZGVyID0gKEdJ
Q29udikgLTE7CisgICAgfQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSAoR0lDb252KSAtMSkg
eworICAgICAgICBnX2ljb252X2Nsb3NlKG1faWNvbnZFbmNvZGVyKTsKKyAgICAgICAgbV9pY29u
dkVuY29kZXIgPSAoR0lDb252KSAtMTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpj
cmVhdGVJQ29udkRlY29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2RlciA9
PSAoR0lDb252KSAtMSk7CisKKyAgICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbigiVVRG
LTE2IiwgbV9lbmNvZGluZy5uYW1lKCkpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRl
SUNvbnZFbmNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pY29udkVuY29kZXIgPT0gKEdJ
Q29udikgLTEpOworCisgICAgbV9pY29udkVuY29kZXIgPSBnX2ljb252X29wZW4obV9lbmNvZGlu
Zy5uYW1lKCksICJVVEYtMTYiKTsKK30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNv
bnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoKQoreworICAgIC8vIEdl
dCBhIGNvbnZlcnRlciBmb3IgdGhlIHBhc3NlZC1pbiBlbmNvZGluZy4KKyAgICBpZiAobV9pY29u
dkRlY29kZXIgPT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgY3JlYXRlSUNvbnZEZWNvZGVyKCk7
CisgICAgICAgIEFTU0VSVChtX2ljb252RGVjb2RlciAhPSAoR0lDb252KSAtMSk7CisgICAgICAg
IGlmIChtX2ljb252RGVjb2RlciA9PSAoR0lDb252KSAtMSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJlcnJvciBjcmVhdGluZyBJQ29udiBlbmNvZGVyIGV2ZW4gdGhvdWdoIGVuY29kaW5nIHdh
cyBpbiB0YWJsZSIpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAgICBV
Q2hhciAqYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGdfY29udmVydF93aXRoX2lj
b252KGJ5dGVzLCBsZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAwLCAmY291bnQsICZlcnIpKTsKKyAg
ICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lDb252IGNvbnZlcnNpb24gZXJyb3Ii
KTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZlY3RvcjxVQ2hhcj4g
cmVzdWx0OworICAgIGFwcGVuZE9taXR0aW5nQk9NKHJlc3VsdCwgYnVmZmVyLCBjb3VudCAvIHNp
emVvZihVQ2hhcikpOworCisgICAgZ19mcmVlKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gU3RyaW5n
OjphZG9wdChyZXN1bHQpOworfQorCitDU3RyaW5nIFRleHRDb2RlY0d0azo6ZW5jb2RlKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93RW50aXRpZXMpCit7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlmIChtX2ljb252
RW5jb2RlciA9PSAoR0lDb252KSAtMSkKKyAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7Cisg
ICAgaWYgKG1faWNvbnZFbmNvZGVyID09IChHSUNvbnYpIC0xKQorICAgICAgICByZXR1cm4gQ1N0
cmluZygpOworCisgICAgc2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAg
ICBjaGFyICpidWZmZXIgPSBnX2NvbnZlcnRfd2l0aF9pY29udihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgbV9pY29udkVu
Y29kZXIsIDAsICZjb3VudCwgJmVycik7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJS
T1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yIik7CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7
CisgICAgfQorCisgICAgQ1N0cmluZyByZXN1bHQgPSBDU3RyaW5nKGJ1ZmZlciwgY291bnQpOwor
CisgICAgZ19mcmVlKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJy
ZWFrSXRlcmF0b3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExhcnMgS25vbGwgPGxhcnNA
dHJvbGx0ZWNoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFr
SXRlcmF0b3IuaCIKKworI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworZW51bSBVQnJlYWtJdGVyYXRvclR5cGUgeworICAgIFVCUktfQ0hBUkFDVEVSLAor
ICAgIFVCUktfV09SRCwKKyAgICBVQlJLX0xJTkUsCisgICAgVUJSS19TRU5URU5DRQorfTsKKwor
Y2xhc3MgVGV4dEJyZWFrSXRlcmF0b3IgeworcHVibGljOgorICAgIFVCcmVha0l0ZXJhdG9yVHlw
ZSBtX3R5cGU7CisgICAgaW50IG1fbGVuZ3RoOworICAgIFBhbmdvTG9nQXR0ciAqbV9sb2dfYXR0
cnM7CisKKyAgICBpbnQgbV9pbmRleDsKK307CisKK3N0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciog
c2V0VXBJdGVyYXRvcihib29sJiBjcmVhdGVkSXRlcmF0b3IsIFRleHRCcmVha0l0ZXJhdG9yKiYg
aXRlcmF0b3IsCisgICAgVUJyZWFrSXRlcmF0b3JUeXBlIHR5cGUsIGNvbnN0IFVDaGFyKiBzdHJp
bmcsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKCFjcmVhdGVkSXRlcmF0b3IpIHsKKyAgICAgICAgaXRlcmF0b3IgPSBuZXcgVGV4
dEJyZWFrSXRlcmF0b3IoKTsKKyAgICAgICAgY3JlYXRlZEl0ZXJhdG9yID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsb25nIHV0Zjhs
ZW47CisgICAgY2hhciAqdXRmOCA9IGdfdXRmMTZfdG9fdXRmOChzdHJpbmcsIGxlbmd0aCwgMCwg
JnV0ZjhsZW4sIDApOworCisgICAgLy8gRklYTUU6IGFzc3VtZXMgbm8gc3Vycm9nYXRlIHBhaXJz
CisKKyAgICBpdGVyYXRvci0+bV90eXBlID0gdHlwZTsKKyAgICBpdGVyYXRvci0+bV9sZW5ndGgg
PSBsZW5ndGg7CisgICAgaXRlcmF0b3ItPm1fbG9nX2F0dHJzID0gZ19uZXcwKFBhbmdvTG9nQXR0
ciwgbGVuZ3RoICsgMSk7CisgICAgaXRlcmF0b3ItPm1faW5kZXggPSAtMTsKKyAgICBwYW5nb19n
ZXRfbG9nX2F0dHJzKHV0ZjgsIHV0ZjhsZW4sIC0xLCAwLCBpdGVyYXRvci0+bV9sb2dfYXR0cnMs
IGxlbmd0aCArIDEpOworCisgICAgZ19mcmVlKHV0ZjgpOworCisgICAgcmV0dXJuIGl0ZXJhdG9y
OworfQorCitUZXh0QnJlYWtJdGVyYXRvciogY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBV
Q2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9y
KiBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9y
KGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLAorICAgICAgICBzdGF0aWNDaGFyYWN0ZXJC
cmVha0l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0
QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50
IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkV29yZEJyZWFrSXRlcmF0b3IgPSBm
YWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1dvcmRCcmVha0l0ZXJh
dG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciwK
KyAgICAgICAgc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIFVCUktfV09SRCwgc3RyaW5nLCBsZW5n
dGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogbGluZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNo
YXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkTGluZUJy
ZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRp
Y0xpbmVCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRMaW5l
QnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljTGluZUJyZWFrSXRlcmF0b3IsIFVCUktfTElO
RSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVh
a0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGlj
IGJvb2wgY3JlYXRlZFNlbnRlbmNlQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0YXRpYyBU
ZXh0QnJlYWtJdGVyYXRvciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yOworICAgIHJldHVy
biBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0
YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgVUJSS19TRU5URU5DRSwgc3RyaW5nLCBsZW5ndGgp
OworfQorCitpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAg
IGZvciAoaW50IGkgPSAwOyBpIDw9IGJpLT5tX2xlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChi
aS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfbGluZV9icmVh
aykgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7
CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgYmktPm1fbG9n
X2F0dHJzW2ldLmlzX3dvcmRfZW5kKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7Cisg
ICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVC
UktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ19hdHRyc1tpXS5pc19jaGFyX2JyZWFrKSB7CisgICAg
ICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAg
fSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgYmktPm1fbG9nX2F0dHJz
W2ldLmlzX3NlbnRlbmNlX2VuZCkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgYmktPm1faW5kZXggPSAt
MTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJh
dG9yKiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmktPm1faW5kZXggKyAxOyBpIDw9IGJpLT5t
X2xlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBi
aS0+bV9sb2dfYXR0cnNbaV0uaXNfbGluZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5k
ZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1f
dHlwZSA9PSBVQlJLX1dPUkQgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfZW5kKSB7Cisg
ICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAg
ICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ19h
dHRyc1tpXS5pc19jaGFyX2JyZWFrKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7Cisg
ICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVC
UktfU0VOVEVOQ0UgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNlX2VuZCkgeworICAg
ICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAg
IH0KKyAgICB9CisgICAgYmktPm1faW5kZXggPSAtMTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2lu
dCB0ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQorewor
ICAgIGZvciAoaW50IGkgPSBwb3MgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBpZiAoYmkt
Pm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2xpbmVfYnJlYWsp
IHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIGJpLT5tX2xvZ19h
dHRyc1tpXS5pc193b3JkX2VuZCkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJL
X0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfY2hhcl9icmVhaykgeworICAgICAg
ICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0g
ZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGJpLT5tX2xvZ19hdHRyc1tp
XS5pc19zZW50ZW5jZV9lbmQpIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIGJpLT5tX2luZGV4ID0gLTE7
CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0
ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBiaS0+bV9pbmRleCA9IHBvczsKKyAgICByZXR1
cm4gdGV4dEJyZWFrTmV4dChiaSk7Cit9CisKK2ludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVh
a0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gYmktPm1faW5kZXg7Cit9CisKK2Jvb2wgaXNU
ZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQoreworICAgIGlmIChiaS0+
bV9pbmRleCA+PSAwKSB7CisgICAgICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBi
aS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAgICAg
IHJldHVybiBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JE
ICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfd29yZF9lbmQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19D
SEFSQUNURVIgJiYgYmktPm1fbG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19jaGFyX2JyZWFrKSB7
CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBl
ID09IFVCUktfU0VOVEVOQ0UgJiYgYmktPm1fbG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19zZW50
ZW5jZV9lbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBGQUxTRTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q29kZWNHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3Rr
L1RleHRDb2RlY0d0ay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q29kZWNHdGsuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3Au
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFRleHRDb2RlY0dUS19oCisjZGVmaW5lIFRleHRDb2RlY0dU
S19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
VGV4dENvZGVjR3RrIDogcHVibGljIFRleHRDb2RlYyB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
cik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
RXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBUZXh0Q29kZWNH
dGsoY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0d0aygp
OworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCA9IGZhbHNlKTsKKyAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29k
ZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgYWxsb3dFbnRpdGllcyA9IGZhbHNl
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZEZWNvZGVyKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3Q7CisgICAgICAgIHZv
aWQgcmVsZWFzZUlDb252KCkgY29uc3Q7CisKKyAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rp
bmc7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZXNbMTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xlIG11
bHRpLWJ5dGUgY2hhcmFjdGVyICAgICAgICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29u
dkRlY29kZXI7CisgICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworICAgICAg
ICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0Q29kZWNHVEtfaApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyOTky
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkgQEAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRl
ICJxdC9UZXh0Q29kZWNRdC5oIgogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUg
Imd0ay9UZXh0Q29kZWNHdGsuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBA
IC0xNzYsNiArMTc5LDExIEBACiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGlu
Z05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjSUNVOjpyZWdp
c3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlmCisKKyNpZiBVU0UoR0xJ
Ql9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhh
ZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNl
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBleHRl
bmRUZXh0Q29kZWNNYXBzKCkKQEAgLTE5NCw2ICsyMDIsMTEgQEAKICAgICBUZXh0Q29kZWNNYWM6
OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRl
eHRDb2RlY01hYzo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlmCisK
KyNpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRl
ZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKKyAgICBUZXh0Q29kZWNH
dGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOworI2VuZGlmCiB9
CiAKIHN0ZDo6YXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWMoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3Bw
CShyZXZpc2lvbiAyOTkyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSA8dW5pY29kZS91
bm9ybS5oPgogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogI2luY2x1ZGUgPFFTdHJpbmc+CisjZWxp
ZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgPGdsaWIuaD4KICNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTA1LDYgKzEwNywy
MiBAQAogICAgIFFTdHJpbmcgc3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFy
YWN0ZXJzKSwgbGVuZ3RoKTsKICAgICBzdHIgPSBzdHIubm9ybWFsaXplZChRU3RyaW5nOjpOb3Jt
YWxpemF0aW9uRm9ybV9DKTsKICAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2Rl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oc3RyLnV0ZjE2KCkpLCBzdHIubGVuZ3Ro
KCksIGFsbG93RW50aXRpZXMpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBjaGFyICp1
dGY4c291cmNlID0gZ191dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgTlVM
TCk7CisgICAgY2hhciAqdXRmOG5vcm1hbGl6ZWQgPSBnX3V0Zjhfbm9ybWFsaXplKHV0Zjhzb3Vy
Y2UsIC0xLCBHX05PUk1BTElaRV9ORkMpOworCisgICAgZ19mcmVlICh1dGY4c291cmNlKTsKKwor
ICAgIGxvbmcgdXRmMTZsZW5ndGg7CisgICAgVUNoYXIqIHV0ZjE2bm9ybWFsaXplZCA9IGdfdXRm
OF90b191dGYxNih1dGY4bm9ybWFsaXplZCwgLTEsIDAsICZ1dGYxNmxlbmd0aCwgTlVMTCk7CisK
KyAgICBnX2ZyZWUgKHV0Zjhub3JtYWxpemVkKTsKKworICAgIENTdHJpbmcgcmVzdWx0ID0gbmV3
VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2RlKHV0ZjE2bm9ybWFsaXplZCwgdXRmMTZsZW5ndGgsIGFs
bG93RW50aXRpZXMpOworCisgICAgZ19mcmVlICh1dGYxNm5vcm1hbGl6ZWQpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCShyZXZpc2lvbiAyOTkyNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRl
IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vRGVwcmVjYXRlZFN0cmluZy5oCShyZXZpc2lvbiAyOTkyNSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vRGVwcmVjYXRlZFN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDggQEAK
ICAgICByZXR1cm4gYyA8PSAweDdGID8gV1RGOjppc0FTQ0lJU3BhY2UoYykgOiAodV9jaGFyRGly
ZWN0aW9uKGMpID09IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTCk7CiAjZWxpZiBVU0UoUVQ0X1VOSUNP
REUpCiAgICAgcmV0dXJuIFFDaGFyKGMpLmlzU3BhY2UoKTsKKyNlbGlmIFVTRShHTElCX1VOSUNP
REUpCisgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3NwYWNlKGMpOzsKICNlbmRpZgogfQogCkBAIC0x
MzgsNiArMTQwLDggQEAKICAgICByZXR1cm4gYyA8PSAweDdGID8gV1RGOjp0b0FTQ0lJTG93ZXIo
YykgOiB1X3RvbG93ZXIoYyk7CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAgICAgcmV0dXJuIFFD
aGFyKGMpLnRvTG93ZXIoKS51bmljb2RlKCk7CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorICAg
IHJldHVybiBnX3VuaWNoYXJfdG9sb3dlcihjKTs7CiAjZW5kaWYKIH0KIApAQCAtMTQ4LDYgKzE1
Miw4IEBACiAgICAgcmV0dXJuIGMgPD0gMHg3RiA/IFdURjo6dG9BU0NJSVVwcGVyKGMpIDogdV90
b3VwcGVyKGMpOwogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogICAgIHJldHVybiBRQ2hhcihjKS50
b1VwcGVyKCkudW5pY29kZSgpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICByZXR1cm4g
Z191bmljaGFyX3RvdXBwZXIoYyk7OwogI2VuZGlmCiB9CiAKSW5kZXg6IGNvbmZpZ3VyZS5hYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDI5OTI1KQorKysgY29uZmlndXJl
LmFjCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMjAgKzEyNCw2IEBACiAgICBBQ19NU0dfRVJST1Io
W0Nhbm5vdCBmaW5kIHBrZy1jb25maWcsIG1ha2Ugc3VyZSBpdCBpcyBpbnN0YWxsZWQgaW4geW91
ciBQQVRIXSkKIGZpCiAKLSMgY2hlY2sgZm9yIGljdS1jb25maWcKLUFDX1BBVEhfUFJPRyhpY3Vf
Y29uZmlnLCBpY3UtY29uZmlnLCBubykKLWlmIHRlc3QgIiRpY3VfY29uZmlnIiA9ICJubyI7IHRo
ZW4KLSAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgaWN1LWNvbmZpZy4gSUNVIGxpYnJhcnkg
aXMgbmVlZGVkLl0pCi1maQotCi0jIFdlIGRvbid0IHVzZSAtLWNmbGFncyBhcyB0aGlzIGdpdmVz
IHVzIGEgbG90IG9mIHRoaW5ncyB0aGF0IHdlIGRvbid0Ci0jIG5lY2Vzc2FyaWx5IHdhbnQsIGxp
a2UgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gZmxhZ3MKLSMgU2VlIG1hbiAoMSkgaWN1LWNv
bmZpZyBmb3IgbW9yZSBpbmZvLgotSUNVX0NQUEZMQUdTPWAkaWN1X2NvbmZpZyAtLWNwcGZsYWdz
YAotSUNVX0xJQlM9YCRpY3VfY29uZmlnIC0tbGRmbGFnc2AKLUFDX1NVQlNUKFtJQ1VfQ1BQRkxB
R1NdKQotQUNfU1VCU1QoW0lDVV9MSUJTXSkKLQogIyBkZXRlcm1pbmUgdGhlIEdESy9HVEsrIHRh
cmdldAogQUNfTVNHX0NIRUNLSU5HKFt0aGUgdGFyZ2V0IGZvciBXZWJLaXQgR1RLK10pCiBBQ19B
UkdfV0lUSCh3ZWJraXRfdGFyZ2V0LApAQCAtMTc3LDYgKzE2Myw3IEBACiBGT05UQ09ORklHX1JF
UVVJUkVEX1ZFUlNJT049Mi40CiBGUkVFVFlQRTJfUkVRVUlSRURfVkVSU0lPTj05LjAKIExJQlhN
TF9SRVFVSVJFRF9WRVJTSU9OPTIuNgorRlJJQklESV9SRVFVSVJFRF9WRVJTSU9OPTAuMTAKIAog
IyBvcHRpb25hbCBtb2R1bGVzCiBHVEtfUkVRVUlSRURfVkVSU0lPTj0yLjAKQEAgLTE5NiwxMCAr
MTgzLDE3IEBACiAgICAgICAgICAgICAgICAgICBjYWlyby1mdCwKICAgICAgICAgICAgICAgICAg
IGZvbnRjb25maWcgPj0gJEZPTlRDT05GSUdfUkVRVUlSRURfVkVSU0lPTgogICAgICAgICAgICAg
ICAgICAgZnJlZXR5cGUyID49ICRGUkVFVFlQRTJfUkVRVUlSRURfVkVSU0lPTgotICAgICAgICAg
ICAgICAgICAgbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT05dKQorICAgICAg
ICAgICAgICAgICAgbGlieG1sLTIuMCA+PSAkTElCWE1MX1JFUVVJUkVEX1ZFUlNJT04KKyAgICAg
ICAgICAgICAgICAgIGZyaWJpZGkgPj0gJEZSSUJJRElfUkVRVUlSRURfVkVSU0lPTl0pCiBBQ19T
VUJTVChbREVQRU5ERU5DSUVTX0NGTEFHU10pCiBBQ19TVUJTVChbREVQRU5ERU5DSUVTX0xJQlNd
KQogCitQS0dfQ0hFQ0tfTU9EVUxFUyhbVU5JQ09ERV0sCisgICAgICAgICAgICAgICAgICBbZ2xp
Yi0yLjAgPj0gJEdMSUJfUkVRVUlSRURfVkVSU0lPTgorICAgICAgICAgICAgICAgICAgZnJpYmlk
aSA+PSAkRlJJQklESV9SRVFVSVJFRF9WRVJTSU9OXSkKK0FDX1NVQlNUKFtVTklDT0RFX0NGTEFH
U10pCitBQ19TVUJTVChbVU5JQ09ERV9MSUJTXSkKKwogIyBjaGVjayB3aGV0aGVyIHRvIGJ1aWxk
IHdpdGggZGVidWdnaW5nIGVuYWJsZWQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBkbyBh
IGRlYnVnIGJ1aWxkXSkKIEFDX0FSR19FTkFCTEUoZGVidWcsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20824</attachid>
            <date>2008-04-25 14:42:23 -0700</date>
            <delta_ts>2009-05-22 10:27:27 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>webkit-glib-unicode-1.patch</filename>
            <type>text/plain</type>
            <size>45565</size>
            <attacher name="Jürg Billeter">j</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNjhjZDUz
ZC4uNWNmMjI5YyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTQ5LDggKzQ5LDE1IEBAIEVYVFJBX0RJU1QgOj0KICMgR2xvYmFsIGZsYWdzIHRvIENQ
UAogZ2xvYmFsX2NwcGZsYWdzIDo9CiAKK2lmIFVTRV9JQ1VfVU5JQ09ERQogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKIAktRFdURl9VU0VfSUNVX1VOSUNPREU9MQorZW5kaWYKKworaWYgVVNFX0dMSUJf
VU5JQ09ERQorZ2xvYmFsX2NwcGZsYWdzICs9IFwKKwktRFdURl9VU0VfR0xJQl9VTklDT0RFPTEK
K2VuZGlmCiAKICMgRGVmYXVsdCBjb21waWxlciBmbGFncwogZ2xvYmFsX2NmbGFncyA6PSBcCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmggYi9KYXZhU2Ny
aXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgKaW5kZXggZjg5MGFmYy4uNjJiNDNkNiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaApAQCAtMjksNiArMjksOCBAQAogI2luY2x1
ZGUgInF0NC9Vbmljb2RlUXQ0LmgiCiAjZWxpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaD4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oPgogI2Vsc2UKICNlcnJvciAi
VW5rbm93biBVbmljb2RlIGltcGxlbWVudGF0aW9uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmggYi9KYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTU1ZDA0MAotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0
Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaApAQCAtMCwwICsxLDU3NiBAQAorLy8gLSotIGMt
YmFzaWMtb2Zmc2V0OiAyIC0qLQorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RF
IGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtv
c0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxh
cEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxl
dGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS0pTX1VOSUNPREVfR0xJ
Ql9ICisjZGVmaW5lIEtKU19VTklDT0RFX0dMSUJfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKwordHlwZWRlZiB1aW50MTZfdCBVQ2hhcjsK
K3R5cGVkZWYgaW50MzJfdCBVQ2hhcjMyOworCisvLyBjb3BpZWQgZnJvbSBHTGliCisKKy8qIFRh
YmxlIG9mIGNhc2Vmb2xkaW5nIGNhc2VzIHRoYXQgY2FuJ3QgYmUgZGVyaXZlZCBieSBsb3dlcmNh
c2luZworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgZ3VpbnQxNiBjaDsKKyAgZ2NoYXIg
ZGF0YVs3XTsKK30gY2FzZWZvbGRfdGFibGVbXSA9IHsKKyAgeyAweDAwYjUsICJceGNlXHhiYyIg
fSwKKyAgeyAweDAwZGYsICJceDczXHg3MyIgfSwKKyAgeyAweDAxMzAsICJceDY5XHhjY1x4ODci
IH0sCisgIHsgMHgwMTQ5LCAiXHhjYVx4YmNceDZlIiB9LAorICB7IDB4MDE3ZiwgIlx4NzMiIH0s
CisgIHsgMHgwMWYwLCAiXHg2YVx4Y2NceDhjIiB9LAorICB7IDB4MDM0NSwgIlx4Y2VceGI5IiB9
LAorICB7IDB4MDM5MCwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDAzYjAs
ICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgwM2MyLCAiXHhjZlx4ODMiIH0s
CisgIHsgMHgwM2QwLCAiXHhjZVx4YjIiIH0sCisgIHsgMHgwM2QxLCAiXHhjZVx4YjgiIH0sCisg
IHsgMHgwM2Q1LCAiXHhjZlx4ODYiIH0sCisgIHsgMHgwM2Q2LCAiXHhjZlx4ODAiIH0sCisgIHsg
MHgwM2YwLCAiXHhjZVx4YmEiIH0sCisgIHsgMHgwM2YxLCAiXHhjZlx4ODEiIH0sCisgIHsgMHgw
M2Y1LCAiXHhjZVx4YjUiIH0sCisgIHsgMHgwNTg3LCAiXHhkNVx4YTVceGQ2XHg4MiIgfSwKKyAg
eyAweDFlOTYsICJceDY4XHhjY1x4YjEiIH0sCisgIHsgMHgxZTk3LCAiXHg3NFx4Y2NceDg4IiB9
LAorICB7IDB4MWU5OCwgIlx4NzdceGNjXHg4YSIgfSwKKyAgeyAweDFlOTksICJceDc5XHhjY1x4
OGEiIH0sCisgIHsgMHgxZTlhLCAiXHg2MVx4Y2FceGJlIiB9LAorICB7IDB4MWU5YiwgIlx4ZTFc
eGI5XHhhMSIgfSwKKyAgeyAweDFmNTAsICJceGNmXHg4NVx4Y2NceDkzIiB9LAorICB7IDB4MWY1
MiwgIlx4Y2ZceDg1XHhjY1x4OTNceGNjXHg4MCIgfSwKKyAgeyAweDFmNTQsICJceGNmXHg4NVx4
Y2NceDkzXHhjY1x4ODEiIH0sCisgIHsgMHgxZjU2LCAiXHhjZlx4ODVceGNjXHg5M1x4Y2RceDgy
IiB9LAorICB7IDB4MWY4MCwgIlx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4MSwg
Ilx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7IDB4MWY4MiwgIlx4ZTFceGJjXHg4Mlx4Y2Vc
eGI5IiB9LAorICB7IDB4MWY4MywgIlx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4
NCwgIlx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAorICB7IDB4MWY4NSwgIlx4ZTFceGJjXHg4NVx4
Y2VceGI5IiB9LAorICB7IDB4MWY4NiwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4
MWY4NywgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICB7IDB4MWY4OCwgIlx4ZTFceGJjXHg4
MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4OSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7
IDB4MWY4YSwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4YiwgIlx4ZTFceGJj
XHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4YywgIlx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAor
ICB7IDB4MWY4ZCwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZSwgIlx4ZTFc
eGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZiwgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9
LAorICB7IDB4MWY5MCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5MSwgIlx4
ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWY5MiwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5
IiB9LAorICB7IDB4MWY5MywgIlx4ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWY5NCwg
Ilx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWY5NSwgIlx4ZTFceGJjXHhhNVx4Y2Vc
eGI5IiB9LAorICB7IDB4MWY5NiwgIlx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5
NywgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWY5OCwgIlx4ZTFceGJjXHhhMFx4
Y2VceGI5IiB9LAorICB7IDB4MWY5OSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4
MWY5YSwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWY5YiwgIlx4ZTFceGJjXHhh
M1x4Y2VceGI5IiB9LAorICB7IDB4MWY5YywgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7
IDB4MWY5ZCwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZSwgIlx4ZTFceGJj
XHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZiwgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAor
ICB7IDB4MWZhMCwgIlx4ZTFceGJkXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWZhMSwgIlx4ZTFc
eGJkXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZhMiwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9
LAorICB7IDB4MWZhMywgIlx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZhNCwgIlx4
ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWZhNSwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5
IiB9LAorICB7IDB4MWZhNiwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWZhNywg
Ilx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZhOCwgIlx4ZTFceGJkXHhhMFx4Y2Vc
eGI5IiB9LAorICB7IDB4MWZhOSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZh
YSwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWZhYiwgIlx4ZTFceGJkXHhhM1x4
Y2VceGI5IiB9LAorICB7IDB4MWZhYywgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4
MWZhZCwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWZhZSwgIlx4ZTFceGJkXHhh
Nlx4Y2VceGI5IiB9LAorICB7IDB4MWZhZiwgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7
IDB4MWZiMiwgIlx4ZTFceGJkXHhiMFx4Y2VceGI5IiB9LAorICB7IDB4MWZiMywgIlx4Y2VceGIx
XHhjZVx4YjkiIH0sCisgIHsgMHgxZmI0LCAiXHhjZVx4YWNceGNlXHhiOSIgfSwKKyAgeyAweDFm
YjYsICJceGNlXHhiMVx4Y2RceDgyIiB9LAorICB7IDB4MWZiNywgIlx4Y2VceGIxXHhjZFx4ODJc
eGNlXHhiOSIgfSwKKyAgeyAweDFmYmMsICJceGNlXHhiMVx4Y2VceGI5IiB9LAorICB7IDB4MWZi
ZSwgIlx4Y2VceGI5IiB9LAorICB7IDB4MWZjMiwgIlx4ZTFceGJkXHhiNFx4Y2VceGI5IiB9LAor
ICB7IDB4MWZjMywgIlx4Y2VceGI3XHhjZVx4YjkiIH0sCisgIHsgMHgxZmM0LCAiXHhjZVx4YWVc
eGNlXHhiOSIgfSwKKyAgeyAweDFmYzYsICJceGNlXHhiN1x4Y2RceDgyIiB9LAorICB7IDB4MWZj
NywgIlx4Y2VceGI3XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmY2MsICJceGNlXHhiN1x4
Y2VceGI5IiB9LAorICB7IDB4MWZkMiwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MCIgfSwKKyAg
eyAweDFmZDMsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgxZmQ2LCAiXHhj
ZVx4YjlceGNkXHg4MiIgfSwKKyAgeyAweDFmZDcsICJceGNlXHhiOVx4Y2NceDg4XHhjZFx4ODIi
IH0sCisgIHsgMHgxZmUyLCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgwIiB9LAorICB7IDB4MWZl
MywgIlx4Y2ZceDg1XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDFmZTQsICJceGNmXHg4MVx4
Y2NceDkzIiB9LAorICB7IDB4MWZlNiwgIlx4Y2ZceDg1XHhjZFx4ODIiIH0sCisgIHsgMHgxZmU3
LCAiXHhjZlx4ODVceGNjXHg4OFx4Y2RceDgyIiB9LAorICB7IDB4MWZmMiwgIlx4ZTFceGJkXHhi
Y1x4Y2VceGI5IiB9LAorICB7IDB4MWZmMywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0sCisgIHsgMHgx
ZmY0LCAiXHhjZlx4OGVceGNlXHhiOSIgfSwKKyAgeyAweDFmZjYsICJceGNmXHg4OVx4Y2RceDgy
IiB9LAorICB7IDB4MWZmNywgIlx4Y2ZceDg5XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFm
ZmMsICJceGNmXHg4OVx4Y2VceGI5IiB9LAorICB7IDB4MjE2MCwgIlx4ZTJceDg1XHhiMCIgfSwK
KyAgeyAweDIxNjEsICJceGUyXHg4NVx4YjEiIH0sCisgIHsgMHgyMTYyLCAiXHhlMlx4ODVceGIy
IiB9LAorICB7IDB4MjE2MywgIlx4ZTJceDg1XHhiMyIgfSwKKyAgeyAweDIxNjQsICJceGUyXHg4
NVx4YjQiIH0sCisgIHsgMHgyMTY1LCAiXHhlMlx4ODVceGI1IiB9LAorICB7IDB4MjE2NiwgIlx4
ZTJceDg1XHhiNiIgfSwKKyAgeyAweDIxNjcsICJceGUyXHg4NVx4YjciIH0sCisgIHsgMHgyMTY4
LCAiXHhlMlx4ODVceGI4IiB9LAorICB7IDB4MjE2OSwgIlx4ZTJceDg1XHhiOSIgfSwKKyAgeyAw
eDIxNmEsICJceGUyXHg4NVx4YmEiIH0sCisgIHsgMHgyMTZiLCAiXHhlMlx4ODVceGJiIiB9LAor
ICB7IDB4MjE2YywgIlx4ZTJceDg1XHhiYyIgfSwKKyAgeyAweDIxNmQsICJceGUyXHg4NVx4YmQi
IH0sCisgIHsgMHgyMTZlLCAiXHhlMlx4ODVceGJlIiB9LAorICB7IDB4MjE2ZiwgIlx4ZTJceDg1
XHhiZiIgfSwKKyAgeyAweDI0YjYsICJceGUyXHg5M1x4OTAiIH0sCisgIHsgMHgyNGI3LCAiXHhl
Mlx4OTNceDkxIiB9LAorICB7IDB4MjRiOCwgIlx4ZTJceDkzXHg5MiIgfSwKKyAgeyAweDI0Yjks
ICJceGUyXHg5M1x4OTMiIH0sCisgIHsgMHgyNGJhLCAiXHhlMlx4OTNceDk0IiB9LAorICB7IDB4
MjRiYiwgIlx4ZTJceDkzXHg5NSIgfSwKKyAgeyAweDI0YmMsICJceGUyXHg5M1x4OTYiIH0sCisg
IHsgMHgyNGJkLCAiXHhlMlx4OTNceDk3IiB9LAorICB7IDB4MjRiZSwgIlx4ZTJceDkzXHg5OCIg
fSwKKyAgeyAweDI0YmYsICJceGUyXHg5M1x4OTkiIH0sCisgIHsgMHgyNGMwLCAiXHhlMlx4OTNc
eDlhIiB9LAorICB7IDB4MjRjMSwgIlx4ZTJceDkzXHg5YiIgfSwKKyAgeyAweDI0YzIsICJceGUy
XHg5M1x4OWMiIH0sCisgIHsgMHgyNGMzLCAiXHhlMlx4OTNceDlkIiB9LAorICB7IDB4MjRjNCwg
Ilx4ZTJceDkzXHg5ZSIgfSwKKyAgeyAweDI0YzUsICJceGUyXHg5M1x4OWYiIH0sCisgIHsgMHgy
NGM2LCAiXHhlMlx4OTNceGEwIiB9LAorICB7IDB4MjRjNywgIlx4ZTJceDkzXHhhMSIgfSwKKyAg
eyAweDI0YzgsICJceGUyXHg5M1x4YTIiIH0sCisgIHsgMHgyNGM5LCAiXHhlMlx4OTNceGEzIiB9
LAorICB7IDB4MjRjYSwgIlx4ZTJceDkzXHhhNCIgfSwKKyAgeyAweDI0Y2IsICJceGUyXHg5M1x4
YTUiIH0sCisgIHsgMHgyNGNjLCAiXHhlMlx4OTNceGE2IiB9LAorICB7IDB4MjRjZCwgIlx4ZTJc
eDkzXHhhNyIgfSwKKyAgeyAweDI0Y2UsICJceGUyXHg5M1x4YTgiIH0sCisgIHsgMHgyNGNmLCAi
XHhlMlx4OTNceGE5IiB9LAorICB7IDB4ZmIwMCwgIlx4NjZceDY2IiB9LAorICB7IDB4ZmIwMSwg
Ilx4NjZceDY5IiB9LAorICB7IDB4ZmIwMiwgIlx4NjZceDZjIiB9LAorICB7IDB4ZmIwMywgIlx4
NjZceDY2XHg2OSIgfSwKKyAgeyAweGZiMDQsICJceDY2XHg2Nlx4NmMiIH0sCisgIHsgMHhmYjA1
LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhmYjA2LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhmYjEzLCAi
XHhkNVx4YjRceGQ1XHhiNiIgfSwKKyAgeyAweGZiMTQsICJceGQ1XHhiNFx4ZDVceGE1IiB9LAor
ICB7IDB4ZmIxNSwgIlx4ZDVceGI0XHhkNVx4YWIiIH0sCisgIHsgMHhmYjE2LCAiXHhkNVx4YmVc
eGQ1XHhiNiIgfSwKKyAgeyAweGZiMTcsICJceGQ1XHhiNFx4ZDVceGFkIiB9LAorfTsKKworCisv
LyBzb21lIGRlZmluZXMgZnJvbSBJQ1UKKworI2RlZmluZSBVMTZfSVNfTEVBRChjKSAoKChjKSYw
eGZmZmZmYzAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfVFJBSUwoYykgKCgoYykmMHhmZmZm
ZmMwMCk9PTB4ZGMwMCkKKyNkZWZpbmUgVTE2X1NVUlJPR0FURV9PRkZTRVQgKCgweGQ4MDA8PDEw
VUwpKzB4ZGMwMC0weDEwMDAwKQorI2RlZmluZSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwg
dHJhaWwpIFwKKyAgICAoKChVQ2hhcjMyKShsZWFkKTw8MTBVTCkrKFVDaGFyMzIpKHRyYWlsKS1V
MTZfU1VSUk9HQVRFX09GRlNFVCkKKworI2RlZmluZSBVMTZfTEVBRChzdXBwbGVtZW50YXJ5KSAo
VUNoYXIpKCgoc3VwcGxlbWVudGFyeSk+PjEwKSsweGQ3YzApCisjZGVmaW5lIFUxNl9UUkFJTChz
dXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSkmMHgzZmYpfDB4ZGMwMCkKKwor
I2RlZmluZSBVX0lTX1NVUlJPR0FURShjKSAoKChjKSYweGZmZmZmODAwKT09MHhkODAwKQorI2Rl
ZmluZSBVMTZfSVNfU0lOR0xFKGMpICFVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNf
U1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5lIFUxNl9JU19TVVJST0dBVEVf
TEVBRChjKSAoKChjKSYweDQwMCk9PTApCisKKyNkZWZpbmUgVTE2X05FWFQocywgaSwgbGVuZ3Ro
LCBjKSB7IFwKKyAgICAoYyk9KHMpWyhpKSsrXTsgXAorICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7
IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZigoaSk8KGxlbmd0aCkgJiYg
VTE2X0lTX1RSQUlMKF9fYzI9KHMpWyhpKV0pKSB7IFwKKyAgICAgICAgICAgICsrKGkpOyBcCisg
ICAgICAgICAgICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChjKSwgX19jMik7IFwKKyAgICAg
ICAgfSBcCisgICAgfSBcCit9CisKKyNkZWZpbmUgVV9NQVNLKHgpICgodWludDMyX3QpMTw8KHgp
KQorCituYW1lc3BhY2UgV1RGIHsKKyAgbmFtZXNwYWNlIFVuaWNvZGUgeworCisgICAgZW51bSBE
aXJlY3Rpb24geworICAgICAgTGVmdFRvUmlnaHQsCisgICAgICBSaWdodFRvTGVmdCwKKyAgICAg
IEV1cm9wZWFuTnVtYmVyLAorICAgICAgRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3IsCisgICAgICBF
dXJvcGVhbk51bWJlclRlcm1pbmF0b3IsCisgICAgICBBcmFiaWNOdW1iZXIsCisgICAgICBDb21t
b25OdW1iZXJTZXBhcmF0b3IsCisgICAgICBCbG9ja1NlcGFyYXRvciwKKyAgICAgIFNlZ21lbnRT
ZXBhcmF0b3IsCisgICAgICBXaGl0ZVNwYWNlTmV1dHJhbCwKKyAgICAgIE90aGVyTmV1dHJhbCwK
KyAgICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nLAorICAgICAgTGVmdFRvUmlnaHRPdmVycmlkZSwK
KyAgICAgIFJpZ2h0VG9MZWZ0QXJhYmljLAorICAgICAgUmlnaHRUb0xlZnRFbWJlZGRpbmcsCisg
ICAgICBSaWdodFRvTGVmdE92ZXJyaWRlLAorICAgICAgUG9wRGlyZWN0aW9uYWxGb3JtYXQsCisg
ICAgICBOb25TcGFjaW5nTWFyaywKKyAgICAgIEJvdW5kYXJ5TmV1dHJhbAorICAgIH07CisKKyAg
ICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAgIERlY29tcG9zaXRpb25Ob25lLAorICAg
ICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAgICAgIERlY29tcG9zaXRpb25Db21wYXQsCisg
ICAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlLAorICAgICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAg
ICAgRGVjb21wb3NpdGlvbkZvbnQsCisgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24sCisgICAg
ICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAgIERlY29tcG9zaXRpb25Jc29sYXRlZCwKKyAg
ICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAgICBEZWNvbXBvc2l0aW9uTmFycm93LAorICAg
ICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisgICAgICBEZWNvbXBvc2l0aW9uU21hbGwsCisgICAg
ICBEZWNvbXBvc2l0aW9uU3F1YXJlLAorICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAgICAgIERl
Y29tcG9zaXRpb25TdXBlciwKKyAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCwKKyAgICAgIERl
Y29tcG9zaXRpb25XaWRlLAorICAgIH07CisKKyAgICBlbnVtIENoYXJDYXRlZ29yeSB7CisgICAg
ICBOb0NhdGVnb3J5ID0gIDAsCisgICAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9IFVfTUFTSyhHX1VO
SUNPREVfVU5BU1NJR05FRCksCisgICAgICBMZXR0ZXJfVXBwZXJjYXNlID0gVV9NQVNLKEdfVU5J
Q09ERV9VUFBFUkNBU0VfTEVUVEVSKSwKKyAgICAgIExldHRlcl9Mb3dlcmNhc2UgPSBVX01BU0so
R19VTklDT0RFX0xPV0VSQ0FTRV9MRVRURVIpLAorICAgICAgTGV0dGVyX1RpdGxlY2FzZSA9IFVf
TUFTSyhHX1VOSUNPREVfVElUTEVDQVNFX0xFVFRFUiksCisgICAgICBMZXR0ZXJfTW9kaWZpZXIg
PSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX0xFVFRFUiksCisgICAgICBMZXR0ZXJfT3RoZXIg
PSBVX01BU0soR19VTklDT0RFX09USEVSX0xFVFRFUiksCisKKyAgICAgIE1hcmtfTm9uU3BhY2lu
ZyA9IFVfTUFTSyhHX1VOSUNPREVfTk9OX1NQQUNJTkdfTUFSSyksCisgICAgICBNYXJrX0VuY2xv
c2luZyA9IFVfTUFTSyhHX1VOSUNPREVfRU5DTE9TSU5HX01BUkspLAorICAgICAgTWFya19TcGFj
aW5nQ29tYmluaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9DT01CSU5JTkdfTUFSSyksCisKKyAgICAg
IE51bWJlcl9EZWNpbWFsRGlnaXQgPSBVX01BU0soR19VTklDT0RFX0RFQ0lNQUxfTlVNQkVSKSwK
KyAgICAgIE51bWJlcl9MZXR0ZXIgPSBVX01BU0soR19VTklDT0RFX0xFVFRFUl9OVU1CRVIpLAor
ICAgICAgTnVtYmVyX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9OVU1CRVIpLAorCisg
ICAgICBTZXBhcmF0b3JfU3BhY2UgPSBVX01BU0soR19VTklDT0RFX1NQQUNFX1NFUEFSQVRPUiks
CisgICAgICBTZXBhcmF0b3JfTGluZSA9IFVfTUFTSyhHX1VOSUNPREVfTElORV9TRVBBUkFUT1Ip
LAorICAgICAgU2VwYXJhdG9yX1BhcmFncmFwaCA9IFVfTUFTSyhHX1VOSUNPREVfUEFSQUdSQVBI
X1NFUEFSQVRPUiksCisKKyAgICAgIE90aGVyX0NvbnRyb2wgPSBVX01BU0soR19VTklDT0RFX0NP
TlRST0wpLAorICAgICAgT3RoZXJfRm9ybWF0ID0gVV9NQVNLKEdfVU5JQ09ERV9GT1JNQVQpLAor
ICAgICAgT3RoZXJfUHJpdmF0ZVVzZSA9IFVfTUFTSyhHX1VOSUNPREVfUFJJVkFURV9VU0UpLAor
ICAgICAgT3RoZXJfU3Vycm9nYXRlID0gVV9NQVNLKEdfVU5JQ09ERV9TVVJST0dBVEUpLAorCisg
ICAgICBQdW5jdHVhdGlvbl9EYXNoID0gVV9NQVNLKEdfVU5JQ09ERV9EQVNIX1BVTkNUVUFUSU9O
KSwKKyAgICAgIFB1bmN0dWF0aW9uX09wZW4gPSBVX01BU0soR19VTklDT0RFX09QRU5fUFVOQ1RV
QVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fQ2xvc2UgPSBVX01BU0soR19VTklDT0RFX0NMT1NF
X1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9IFVfTUFTSyhHX1VO
SUNPREVfQ09OTkVDVF9QVU5DVFVBVElPTiksCisgICAgICBQdW5jdHVhdGlvbl9PdGhlciA9IFVf
TUFTSyhHX1VOSUNPREVfT1RIRVJfUFVOQ1RVQVRJT04pLAorCisgICAgICBTeW1ib2xfTWF0aCA9
IFVfTUFTSyhHX1VOSUNPREVfTUFUSF9TWU1CT0wpLAorICAgICAgU3ltYm9sX0N1cnJlbmN5ID0g
VV9NQVNLKEdfVU5JQ09ERV9DVVJSRU5DWV9TWU1CT0wpLAorICAgICAgU3ltYm9sX01vZGlmaWVy
ID0gVV9NQVNLKEdfVU5JQ09ERV9NT0RJRklFUl9TWU1CT0wpLAorICAgICAgU3ltYm9sX090aGVy
ID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9TWU1CT0wpLAorCisgICAgICBQdW5jdHVhdGlvbl9J
bml0aWFsUXVvdGUgPSBVX01BU0soR19VTklDT0RFX0lOSVRJQUxfUFVOQ1RVQVRJT04pLAorICAg
ICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVfRklOQUxfUFVOQ1RV
QVRJT04pCisgICAgfTsKKworICAgIGlubGluZSBVQ2hhcjMyIGZvbGRDYXNlKFVDaGFyMzIgY2gp
CisgICAgeworICAgICAgICAvLyBhZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRvIEdMaWIgdXBzdHJl
YW0/CisKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCA9IEdfTl9FTEVN
RU5UUyhjYXNlZm9sZF90YWJsZSk7CisKKyAgICAgICAgaWYgKGNoID49IGNhc2Vmb2xkX3RhYmxl
W3N0YXJ0XS5jaCAmJgorICAgICAgICAgICAgY2ggPD0gY2FzZWZvbGRfdGFibGVbZW5kIC0gMV0u
Y2gpIHsKKyAgICAgICAgICAgIHdoaWxlIChUUlVFKSB7CisgICAgICAgICAgICAgICAgaW50IGhh
bGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gY2FzZWZv
bGRfdGFibGVbaGFsZl0uY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdfdXRmOF9n
ZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxmXS5kYXRhKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGhhbGYgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+IGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaGFsZjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBlbmQgPSBoYWxmOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dl
ciAoY2gpOworICAgIH0KKworICAgIGlubGluZSBpbnQgZm9sZENhc2UoVUNoYXIqIHJlc3VsdCwg
aW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCog
ZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAg
Y2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdl
cnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjaGFyICp1dGY4
cmVzdWx0ID0gZ191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMsIC0xKTsKKyAgICAgICAgZ19mcmVlKHV0
ZjhzcmMpOworCisgICAgICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAg
VUNoYXIqIHV0ZjE2cmVzdWx0ID0gZ191dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1bHQsIC0xLCAwLCAm
dXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3IpOworICAgICAgICBnX2ZyZWUodXRmOHJlc3VsdCk7
CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXRmMTZyZXN1bHRM
ZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAg
ICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVz
dWx0TGVuZ3RoOworICAgICAgICB9CisgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0
LCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBnX2ZyZWUodXRm
MTZyZXN1bHQpOworCisgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICB9CisK
KyAgICBpbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwg
Y29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgeworICAg
ICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdf
dXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlm
IChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjaGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X3N0
cmRvd24odXRmOHNyYywgLTEpOworICAgICAgICBnX2ZyZWUodXRmOHNyYyk7CisKKyAgICAgICAg
bG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICBVQ2hhciogdXRmMTZyZXN1bHQg
PSBnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdCwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwg
JmdlcnJvcik7CisgICAgICAgIGdfZnJlZSh1dGY4cmVzdWx0KTsKKyAgICAgICAgaWYgKGdlcnJv
cikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0
aCkgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIGdfZnJlZSh1dGYx
NnJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAg
IH0KKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZyZXN1bHQsIHV0ZjE2cmVzdWx0TGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisKKyAgICAg
ICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMy
IHRvTG93ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dl
cihjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVDaGFyMzIgYykKKyAg
ICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX3RvdXBwZXIoYyk7CisgICAgfQorCisgICAgaW5s
aW5lIGludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVD
aGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQorICAgIHsKKyAgICAgICAgR0Vy
cm9yICpnZXJyb3IgPSBOVUxMOworCisgICAgICAgIGNoYXIgKnV0ZjhzcmMgPSBnX3V0ZjE2X3Rv
X3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3IpOworICAgICAgICBpZiAoZ2Vycm9y
KSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICB9CisKKyAgICAgICAgY2hhciAqdXRmOHJlc3VsdCA9IGdfdXRmOF9zdHJ1cCh1dGY4
c3JjLCAtMSk7CisgICAgICAgIGdfZnJlZSh1dGY4c3JjKTsKKworICAgICAgICBsb25nIHV0ZjE2
cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgIFVDaGFyKiB1dGYxNnJlc3VsdCA9IGdfdXRmOF90
b191dGYxNih1dGY4cmVzdWx0LCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yKTsK
KyAgICAgICAgZ19mcmVlKHV0ZjhyZXN1bHQpOworICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAg
ICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7CisgICAg
ICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQorICAgICAg
ICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdCwgdXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2Yo
VUNoYXIpKTsKKyAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKworICAgICAgICByZXR1cm4g
dXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorCisgICAgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNh
c2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdG90aXRsZShjKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0FyYWJpY0NoYXIoVUNoYXIzMiBjKQorICAgIHsK
KyAgICAgIHJldHVybiBjID49IDB4MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBn
X3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBn
X3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SOworICAgIH0KKwor
ICAgIGlubGluZSBib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhcjMyIGMpCisgICAgeworICAgICAg
cmV0dXJuIGdfdW5pY2hhcl9pc3ByaW50KGMpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgYm9v
bCBpc0RpZ2l0KFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX2lzZGln
aXQoYyk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNQdW5jdChVQ2hhcjMyIGMpCisgICAg
eworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3B1bmN0KGMpOworICAgIH0KKworICAgIGlubGlu
ZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgZ3VuaWNoYXIg
bWlycm9yID0gMDsKKyAgICAgIGdfdW5pY2hhcl9nZXRfbWlycm9yX2NoYXIoYywgJm1pcnJvcik7
CisgICAgICByZXR1cm4gbWlycm9yOworICAgIH0KKworICAgIGlubGluZSBDaGFyQ2F0ZWdvcnkg
Y2F0ZWdvcnkoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIGlmIChjID4gMHhmZmZmKSB7CisgICAg
ICAgICAgcmV0dXJuIE5vQ2F0ZWdvcnk7CisgICAgICB9CisgICAgICByZXR1cm4gKENoYXJDYXRl
Z29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBlKGMpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgRGly
ZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCisgICAgeworICAgICAgUGFuZ29CaWRpVHlwZSB0
eXBlID0gcGFuZ29fYmlkaV90eXBlX2Zvcl91bmljaGFyKGMpOworICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MOiByZXR1cm4gTGVmdFRvUmlnaHQ7Cisg
ICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOiByZXR1cm4gUmlnaHRUb0xlZnQ7CisgICAgICBj
YXNlIFBBTkdPX0JJRElfVFlQRV9BTDogcmV0dXJuIFJpZ2h0VG9MZWZ0QXJhYmljOworICAgICAg
Y2FzZSBQQU5HT19CSURJX1RZUEVfTFJFOiByZXR1cm4gTGVmdFRvUmlnaHRFbWJlZGRpbmc7Cisg
ICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9STEU6IHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGlu
ZzsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0xSTzogcmV0dXJuIExlZnRUb1JpZ2h0T3Zl
cnJpZGU7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9STE86IHJldHVybiBSaWdodFRvTGVm
dE92ZXJyaWRlOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUERGOiByZXR1cm4gUG9wRGly
ZWN0aW9uYWxGb3JtYXQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FTjogcmV0dXJuIEV1
cm9wZWFuTnVtYmVyOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQU46IHJldHVybiBBcmFi
aWNOdW1iZXI7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FUzogcmV0dXJuIEV1cm9wZWFu
TnVtYmVyU2VwYXJhdG9yOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVQ6IHJldHVybiBF
dXJvcGVhbk51bWJlclRlcm1pbmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9DUzog
cmV0dXJuIENvbW1vbk51bWJlclNlcGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X05TTTogcmV0dXJuIE5vblNwYWNpbmdNYXJrOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVf
Qk46IHJldHVybiBCb3VuZGFyeU5ldXRyYWw7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9C
OiByZXR1cm4gQmxvY2tTZXBhcmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9TOiBy
ZXR1cm4gU2VnbWVudFNlcGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1dTOiBy
ZXR1cm4gV2hpdGVTcGFjZU5ldXRyYWw7CisgICAgICBkZWZhdWx0OiByZXR1cm4gT3RoZXJOZXV0
cmFsOworfQorICAgIH0KKworICAgIGlubGluZSBib29sIGlzTG93ZXIoVUNoYXIzMiBjKQorICAg
IHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNsb3dlcihjKTsKKyAgICB9CisKKyAgICBpbmxp
bmUgaW50IGRpZ2l0VmFsdWUoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNo
YXJfZGlnaXRfdmFsdWUoYyk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQ4X3QgY29tYmluaW5n
Q2xhc3MoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfY29tYmluaW5n
X2NsYXNzKGMpOworICAgIH0KKworICAgIGlubGluZSBEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBv
c2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgLy8gRklYTUUKKyAgICAgIHJldHVy
biBEZWNvbXBvc2l0aW9uTm9uZTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHVtZW1jYXNlY21w
KGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAgICB7CisgICAgICBj
aGFyICp1dGY4YSA9IGdfdXRmMTZfdG9fdXRmOChhLCAtMSwgMCwgMCwgTlVMTCk7CisgICAgICBj
aGFyICp1dGY4YiA9IGdfdXRmMTZfdG9fdXRmOChiLCAtMSwgMCwgMCwgTlVMTCk7CisKKyAgICAg
IGNoYXIgKmZvbGRlZEEgPSBnX3V0ZjhfY2FzZWZvbGQodXRmOGEsIC0xKTsKKyAgICAgIGNoYXIg
KmZvbGRlZEIgPSBnX3V0ZjhfY2FzZWZvbGQodXRmOGIsIC0xKTsKKworICAgICAgZ19mcmVlKHV0
ZjhhKTsKKyAgICAgIGdfZnJlZSh1dGY4Yik7CisKKyAgICAgIGludCByZXN1bHQgPSBnX3V0Zjhf
Y29sbGF0ZShmb2xkZWRBLCBmb2xkZWRCKTsKKworICAgICAgZ19mcmVlKGZvbGRlZEEpOworICAg
ICAgZ19mcmVlKGZvbGRlZEIpOworCisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICB9
Cit9CisKKyNlbmRpZgorLy8gdmltOiB0cz0yIHN3PTIgZXQKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDIxM2IyZjMuLjFh
ZGFmZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtOTk2LDkgKzk5Niw2IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRh
cmllc0lDVS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklD
VS5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcCBcCiAJV2ViQ29y
ZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAgXAogCVdlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xs
ZXJHdGsuY3BwIFwKQEAgLTEwMjksNyArMTAyNiw2IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9Tb3VuZEd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0v
Z3RrL1N5c3RlbVRpbWVHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaGVlbEV2ZW50
R3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYyBcCkBAIC0xMDU1LDYgKzEwNTEsMjcgQEAgd2Vi
a2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJt
L1hCTUltYWdlRGVjb2Rlci5jcHAKIAogIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQKKyMg
LS0tLQoraWYgVVNFX0lDVV9VTklDT0RFCit3ZWJraXRndGtfc291cmNlcyArPSBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvcklDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKK2VuZGlmICMgRU5EIFVTRV9DVVJMCisKKyMgLS0t
LQorIyBnbGliIHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfR0xJQl9VTklDT0RFCit3
ZWJraXRndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29k
ZWNHdGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3Rr
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5j
cHAKK2VuZGlmCisKKyMgLS0tLQogIyBjdXJsIGh0dHAgYmFja2VuZAogIyAtLS0tCiBpZiBVU0Vf
Q1VSTApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERh
dGFHdGsuY3BwCmluZGV4IGE3NTRjNDUuLmRjY2U5YzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAKQEAgLTM5LDggKzM5LDYg
QEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1
ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3IuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5o
CmluZGV4IDY0NzE3YTQuLjAwNGQ4YTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0QnJlYWtJdGVyYXRvci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5oCkBAIC0zNSw3ICszNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBU
ZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCk7CiAKICAgICBpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqKTsK
KyAgICBpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0
QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKik7CisgICAgaW50IHRleHRCcmVha1ByZXZpb3Vz
KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFr
SXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9y
KiwgaW50KTsKICAgICBpbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiwg
aW50KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3Bw
CmluZGV4IDk5NDFmNTguLjk5MGNiNjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRCcmVha0l0ZXJhdG9ySUNVLmNwcApAQCAtODksMTEgKzg5LDIxIEBAIGludCB0ZXh0QnJlYWtG
aXJzdChUZXh0QnJlYWtJdGVyYXRvciogYmkpCiAgICAgcmV0dXJuIHVicmtfZmlyc3QoYmkpOwog
fQogCitpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0
dXJuIHVicmtfbGFzdChiaSk7Cit9CisKIGludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJh
dG9yKiBiaSkKIHsKICAgICByZXR1cm4gdWJya19uZXh0KGJpKTsKIH0KIAoraW50IHRleHRCcmVh
a1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdWJya19wcmV2
aW91cyhiaSk7Cit9CisKIGludCB0ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3Iq
IGJpLCBpbnQgcG9zKQogewogICAgIHJldHVybiB1YnJrX3ByZWNlZGluZyhiaSwgcG9zKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKaW5kZXggOTAyNjA0OS4uZjJlNzU2NSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKQEAgLTM2LDYgKzM2LDggQEAK
ICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5j
bHVkZSA8UVN0cmluZz4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5o
PgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC0xMDUsNiArMTA3LDIyIEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlCiAgICAgUVN0
cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5n
dGgpOwogICAgIHN0ciA9IHN0ci5ub3JtYWxpemVkKFFTdHJpbmc6Ok5vcm1hbGl6YXRpb25Gb3Jt
X0MpOwogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgoKSwgaGFuZGxpbmcp
OworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBjaGFyICp1dGY4c291cmNlID0gZ191dGYx
Nl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgTlVMTCk7CisgICAgY2hhciAqdXRm
OG5vcm1hbGl6ZWQgPSBnX3V0Zjhfbm9ybWFsaXplKHV0Zjhzb3VyY2UsIC0xLCBHX05PUk1BTEla
RV9ORkMpOworCisgICAgZ19mcmVlICh1dGY4c291cmNlKTsKKworICAgIGxvbmcgdXRmMTZsZW5n
dGg7CisgICAgVUNoYXIqIHV0ZjE2bm9ybWFsaXplZCA9IGdfdXRmOF90b191dGYxNih1dGY4bm9y
bWFsaXplZCwgLTEsIDAsICZ1dGYxNmxlbmd0aCwgTlVMTCk7CisKKyAgICBnX2ZyZWUgKHV0Zjhu
b3JtYWxpemVkKTsKKworICAgIENTdHJpbmcgcmVzdWx0ID0gbmV3VGV4dENvZGVjKCp0aGlzKS0+
ZW5jb2RlKHV0ZjE2bm9ybWFsaXplZCwgdXRmMTZsZW5ndGgsIGhhbmRsaW5nKTsKKworICAgIGdf
ZnJlZSAodXRmMTZub3JtYWxpemVkKTsKKworICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKaW5k
ZXggYTdhZDg3OS4uZDdkY2JhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwCkBAIC00Myw2ICs0Myw5IEBACiAjaWYgUExBVEZPUk0oUVQpCiAj
aW5jbHVkZSAicXQvVGV4dENvZGVjUXQuaCIKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyNp
bmNsdWRlICJndGsvVGV4dENvZGVjR3RrLmgiCisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdU
RjsKIApAQCAtMTc2LDYgKzE3OSwxMSBAQCBzdGF0aWMgdm9pZCBidWlsZEJhc2VUZXh0Q29kZWNN
YXBzKCkKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9U
ZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUNvZGVj
cyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKKworI2lmIFVTRShHTElCX1VOSUNPREUpCisg
ICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29k
aW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9U
ZXh0Q29kZWNNYXApOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01h
cHMoKQpAQCAtMTk0LDYgKzIwMiwxMSBAQCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBz
KCkKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNv
ZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0
Q29kZWNNYXApOwogI2VuZGlmCisKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIFRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1l
TWFwKTsKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoYWRkVG9UZXh0
Q29kZWNNYXApOworI2VuZGlmCiB9CiAKIHN0ZDo6YXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0
Q29kZWMoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYWM5ZTk4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5oIgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50IGZpbmROZXh0
V29yZEZyb21JbmRleChjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwg
Ym9vbCBmb3J3YXJkKQoreworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0
ZXJhdG9yKGNoYXJzLCBsZW4pOworCisgICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgcG9zaXRp
b24gPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgd2hpbGUgKHBv
c2l0aW9uICE9IFRleHRCcmVha0RvbmUpIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3Agc2VhcmNo
aW5nIHdoZW4gdGhlIGNoYXJhY3RlciBwcmVjZWVkaW5nIHRoZSBicmVhaworICAgICAgICAgICAg
Ly8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgbGVuICYmIGdf
dW5pY2hhcl9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uIC0gMV0pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBwb3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtGb2xsb3dp
bmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsZW47CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIHBvc2l0
aW9uKTsKKyAgICAgICAgd2hpbGUgKHBvc2l0aW9uICE9IFRleHRCcmVha0RvbmUpIHsKKyAgICAg
ICAgICAgIC8vIFdlIHN0b3Agc2VhcmNoaW5nIHdoZW4gdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcg
dGhlIGJyZWFrCisgICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVyaWMuCisgICAgICAgICAgICBp
ZiAocG9zaXRpb24gPiAwICYmIGdfdW5pY2hhcl9pc2FsbnVtKGNoYXJzW3Bvc2l0aW9uXSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlvbiA9
IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIGZpbmRXb3JkQm91bmRhcnkoY29uc3QgVUNoYXIq
IGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKQorewor
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IHdvcmRCcmVha0l0ZXJhdG9yKGNoYXJzLCBsZW4p
OworICAgICplbmQgPSB0ZXh0QnJlYWtGb2xsb3dpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICBpZiAo
KmVuZCA8IDApCisgICAgICAgICplbmQgPSB0ZXh0QnJlYWtMYXN0KGl0KTsKKyAgICAqc3RhcnQg
PSB0ZXh0QnJlYWtQcmV2aW91cyhpdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1NzRlMwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3Bw
CkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExhcnMgS25vbGwg
PGxhcnNAdHJvbGx0ZWNoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIg
PGpAYml0cm9uLmNoPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gVUJyZWFrSXRlcmF0b3JUeXBlIHsKKyAgICBVQlJLX0NIQVJBQ1RFUiwK
KyAgICBVQlJLX1dPUkQsCisgICAgVUJSS19MSU5FLAorICAgIFVCUktfU0VOVEVOQ0UKK307CisK
K2NsYXNzIFRleHRCcmVha0l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBVQnJlYWtJdGVyYXRvclR5
cGUgbV90eXBlOworICAgIGludCBtX2xlbmd0aDsKKyAgICBQYW5nb0xvZ0F0dHIgKm1fbG9nX2F0
dHJzOworCisgICAgaW50IG1faW5kZXg7Cit9OworCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHNldFVwSXRlcmF0b3IoYm9vbCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciom
IGl0ZXJhdG9yLAorICAgIFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciogc3Ry
aW5nLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmICghY3JlYXRlZEl0ZXJhdG9yKSB7CisgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRl
eHRCcmVha0l0ZXJhdG9yKCk7CisgICAgICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7CisgICAg
fQorICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgbG9uZyB1dGY4
bGVuOworICAgIGNoYXIgKnV0ZjggPSBnX3V0ZjE2X3RvX3V0Zjgoc3RyaW5nLCBsZW5ndGgsIDAs
ICZ1dGY4bGVuLCAwKTsKKworICAgIC8vIEZJWE1FOiBhc3N1bWVzIG5vIHN1cnJvZ2F0ZSBwYWly
cworCisgICAgaXRlcmF0b3ItPm1fdHlwZSA9IHR5cGU7CisgICAgaXRlcmF0b3ItPm1fbGVuZ3Ro
ID0gbGVuZ3RoOworICAgIGl0ZXJhdG9yLT5tX2xvZ19hdHRycyA9IGdfbmV3MChQYW5nb0xvZ0F0
dHIsIGxlbmd0aCArIDEpOworICAgIGl0ZXJhdG9yLT5tX2luZGV4ID0gLTE7CisgICAgcGFuZ29f
Z2V0X2xvZ19hdHRycyh1dGY4LCB1dGY4bGVuLCAtMSwgMCwgaXRlcmF0b3ItPm1fbG9nX2F0dHJz
LCBsZW5ndGggKyAxKTsKKworICAgIGdfZnJlZSh1dGY4KTsKKworICAgIHJldHVybiBpdGVyYXRv
cjsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3Qg
VUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkQ2hh
cmFjdGVyQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRv
ciogc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRv
cihjcmVhdGVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvciwgVUJSS19DSEFSQUNURVIsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4
dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGlu
dCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yID0g
ZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJdGVy
YXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkV29yZEJyZWFrSXRlcmF0b3Is
CisgICAgICAgIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBVQlJLX1dPUkQsIHN0cmluZywgbGVu
Z3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGxpbmVCcmVha0l0ZXJhdG9yKGNvbnN0IFVD
aGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZExpbmVC
cmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0
aWNMaW5lQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkTGlu
ZUJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yLCBVQlJLX0xJ
TkUsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJl
YWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRp
YyBib29sIGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMg
VGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1
cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkU2VudGVuY2VCcmVha0l0ZXJhdG9yLAorICAgICAgICBz
dGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIFVCUktfU0VOVEVOQ0UsIHN0cmluZywgbGVuZ3Ro
KTsKK30KKworaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAg
ICByZXR1cm4gdGV4dEJyZWFrRm9sbG93aW5nKGJpLCAtMSk7Cit9CisKK2ludCB0ZXh0QnJlYWtM
YXN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdGV4dEJyZWFrUHJlY2Vk
aW5nKGJpLCBiaS0+bV9sZW5ndGggKyAxKTsKK30KKworaW50IHRleHRCcmVha05leHQoVGV4dEJy
ZWFrSXRlcmF0b3IqIGJpKQoreworICAgIGZvciAoaW50IGkgPSBiaS0+bV9pbmRleCArIDE7IGkg
PD0gYmktPm1fbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19M
SU5FICYmIGJpLT5tX2xvZ19hdHRyc1tpXS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAgICBi
aS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlm
IChiaS0+bV90eXBlID09IFVCUktfV09SRCAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRf
c3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
YmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfZW5kKSkgeworICAgICAgICAgICAgYmktPm1faW5k
ZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1f
dHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfY3Vyc29yX3Bv
c2l0aW9uKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1
cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYg
KGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9zdGFydAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmktPm1fbG9nX2F0dHJzW2ldLmlz
X3NlbnRlbmNlX2VuZCkpIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAg
ICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUZXh0QnJlYWtEb25l
OworfQorCitpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQorewor
ICAgIGZvciAoaW50IGkgPSBiaS0+bV9pbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAg
IGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfbGlu
ZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgKGJp
LT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX2VuZCkp
IHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmktPm1f
bG9nX2F0dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikgeworICAgICAgICAgICAgYmktPm1faW5k
ZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1f
dHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNfc2VudGVuY2Vf
c3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAgICAgICAgICBi
aS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gdGV4dEJyZWFrRmlyc3QoYmkpOworfQorCitpbnQgdGV4dEJyZWFrUHJlY2Vk
aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBiaS0+bV9pbmRleCA9
IHBvczsKKyAgICByZXR1cm4gdGV4dEJyZWFrUHJldmlvdXMoYmkpOworfQorCitpbnQgdGV4dEJy
ZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBpZiAo
cG9zIDwgMCkKKyAgICAgICAgcG9zID0gLTE7CisgICAgYmktPm1faW5kZXggPSBwb3M7CisgICAg
cmV0dXJuIHRleHRCcmVha05leHQoYmkpOworfQorCitpbnQgdGV4dEJyZWFrQ3VycmVudChUZXh0
QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIGJpLT5tX2luZGV4OworfQorCitib29s
IGlzVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBpZiAo
YmktPm1faW5kZXggPj0gMCkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUg
JiYgYmktPm1fbG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19saW5lX2JyZWFrKSB7CisgICAgICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktf
V09SRCAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX3dvcmRfZW5kKSB7CisgICAg
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVC
UktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfY2hhcl9icmVh
aykgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1f
dHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNf
c2VudGVuY2VfZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsv
VGV4dENvZGVjR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDMw
ZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29k
ZWNHdGsuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjR3RrLmgiCisKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK3VzaW5nIHN0ZDo6YXV0b19w
dHI7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBzaXpl
X3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsKKyAgICAKK3N0YXRpYyBhdXRvX3B0cjxU
ZXh0Q29kZWM+IG5ld1RleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBj
b25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gYXV0b19wdHI8VGV4dENvZGVjPihuZXcgVGV4dENv
ZGVjR3RrKGVuY29kaW5nKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VF
bmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVn
aXN0cmFyKCJVVEYtOCIsICJVVEYtOCIpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0
ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0
cmFyKCJVVEYtOCIsIG5ld1RleHRDb2RlY0d0aywgMCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3Rr
OjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVn
aXN0cmFyKQoreworICAgIC8vIEZJWE1FIGhvdyB0byBnZXQgc3VwcG9ydGVkIGVuY29kaW5ncz8K
KworICAgIHJlZ2lzdHJhcigiVVRGLTgiLCAiVVRGLTgiKTsKKyAgICByZWdpc3RyYXIoIklTTy04
ODU5LTEiLCAiSVNPLTg4NTktMSIpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJF
eHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIC8vIEZJ
WE1FIGhvdyB0byBnZXQgc3VwcG9ydGVkIGVuY29kaW5ncz8KKworICAgIHJlZ2lzdHJhcigiVVRG
LTgiLCBuZXdUZXh0Q29kZWNHdGssIDApOworICAgIHJlZ2lzdHJhcigiSVNPLTg4NTktMSIsIG5l
d1RleHRDb2RlY0d0aywgMCk7Cit9CisKK1RleHRDb2RlY0d0azo6VGV4dENvZGVjR3RrKGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCisgICAgOiBtX2VuY29kaW5nKGVuY29kaW5nKQorICAg
ICwgbV9udW1CdWZmZXJlZEJ5dGVzKDApCisgICAgLCBtX2ljb252RGVjb2RlcigoR0lDb252KSAt
MSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKChHSUNvbnYpIC0xKQoreworfQorCitUZXh0Q29kZWNH
dGs6On5UZXh0Q29kZWNHdGsoKQoreworICAgIHJlbGVhc2VJQ29udigpOworfQorCit2b2lkIFRl
eHRDb2RlY0d0azo6cmVsZWFzZUlDb252KCkgY29uc3QKK3sKKyAgICBpZiAobV9pY29udkRlY29k
ZXIgIT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgZ19pY29udl9jbG9zZShtX2ljb252RGVjb2Rl
cik7CisgICAgICAgIG1faWNvbnZEZWNvZGVyID0gKEdJQ29udikgLTE7CisgICAgfQorICAgIGlm
IChtX2ljb252RW5jb2RlciAhPSAoR0lDb252KSAtMSkgeworICAgICAgICBnX2ljb252X2Nsb3Nl
KG1faWNvbnZFbmNvZGVyKTsKKyAgICAgICAgbV9pY29udkVuY29kZXIgPSAoR0lDb252KSAtMTsK
KyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkRlY29kZXIoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2RlciA9PSAoR0lDb252KSAtMSk7CisKKyAgICBt
X2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbigiVVRGLTE2IiwgbV9lbmNvZGluZy5uYW1lKCkp
OworfQorCit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9pY29udkVuY29kZXIgPT0gKEdJQ29udikgLTEpOworCisgICAgbV9pY29u
dkVuY29kZXIgPSBnX2ljb252X29wZW4obV9lbmNvZGluZy5uYW1lKCksICJVVEYtMTYiKTsKK30K
KworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3Qg
bGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKK3sK
KyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2RpbmcuCisgICAg
aWYgKG1faWNvbnZEZWNvZGVyID09IChHSUNvbnYpIC0xKSB7CisgICAgICAgIGNyZWF0ZUlDb252
RGVjb2RlcigpOworICAgICAgICBBU1NFUlQobV9pY29udkRlY29kZXIgIT0gKEdJQ29udikgLTEp
OworICAgICAgICBpZiAobV9pY29udkRlY29kZXIgPT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBl
bmNvZGluZyB3YXMgaW4gdGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHNpemVfdCBjb3VudDsKKyAgICBHRXJyb3IgKmVyciA9IE5V
TEw7CisgICAgVUNoYXIgKmJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihnX2NvbnZl
cnRfd2l0aF9pY29udihieXRlcywgbGVuZ3RoLCBtX2ljb252RGVjb2RlciwgMCwgJmNvdW50LCAm
ZXJyKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJz
aW9uIGVycm9yIik7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8VUNoYXI+IHJlc3VsdDsKKyAgICBhcHBlbmRPbWl0dGluZ0JPTShyZXN1bHQsIGJ1ZmZlciwg
Y291bnQgLyBzaXplb2YoVUNoYXIpKTsKKworICAgIGdfZnJlZShidWZmZXIpOworCisgICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKK30KKworQ1N0cmluZyBUZXh0Q29kZWNHdGs6OmVu
Y29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVI
YW5kbGluZyBoYW5kbGluZykKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIi
OworCisgICAgaWYgKG1faWNvbnZFbmNvZGVyID09IChHSUNvbnYpIC0xKQorICAgICAgICBjcmVh
dGVJQ29udkVuY29kZXIoKTsKKyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gKEdJQ29udikgLTEp
CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisKKyAgICBzaXplX3QgY291bnQ7CisgICAgR0Vy
cm9yICplcnIgPSBOVUxMOworICAgIGNoYXIgKmJ1ZmZlciA9IGdfY29udmVydF93aXRoX2ljb252
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGggKiBzaXpl
b2YoVUNoYXIpLCBtX2ljb252RW5jb2RlciwgMCwgJmNvdW50LCAmZXJyKTsKKyAgICBpZiAoZXJy
KSB7CisgICAgICAgIExPR19FUlJPUigiR0lDb252IGNvbnZlcnNpb24gZXJyb3IiKTsKKyAgICAg
ICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICB9CisKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJp
bmcoYnVmZmVyLCBjb3VudCk7CisKKyAgICBnX2ZyZWUoYnVmZmVyKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9ndGsvVGV4dENvZGVjR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDk1ODEwMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4
dENvZGVjR3RrLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBU
ZXh0Q29kZWNHVEtfaAorI2RlZmluZSBUZXh0Q29kZWNHVEtfaAorCisjaW5jbHVkZSA8Z2xpYi5o
PgorCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRDb2RlY0d0ayA6IHB1YmxpYyBU
ZXh0Q29kZWMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNl
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgICAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3Ry
YXIpOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2Rl
Y1JlZ2lzdHJhcik7CisKKyAgICAgICAgVGV4dENvZGVjR3RrKGNvbnN0IFRleHRFbmNvZGluZyYp
OworICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNHdGsoKTsKKworICAgICAgICB2aXJ0dWFsIFN0
cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wg
c3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKKyAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVu
Y29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkRlY29kZXIoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCBy
ZWxlYXNlSUNvbnYoKSBjb25zdDsKKworICAgICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsK
KyAgICAgICAgdW5zaWduZWQgbV9udW1CdWZmZXJlZEJ5dGVzOworICAgICAgICB1bnNpZ25lZCBj
aGFyIG1fYnVmZmVyZWRCeXRlc1sxNl07IC8vIGJpZ2dlciB0aGFuIGFueSBzaW5nbGUgbXVsdGkt
Ynl0ZSBjaGFyYWN0ZXIgICAgICAgIAorICAgICAgICBtdXRhYmxlIEdJQ29udiBtX2ljb252RGVj
b2RlcjsKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29udkVuY29kZXI7CisgICAgICAgIG11
dGFibGUgYm9vbCBtX25lZWRzR0JLRmFsbGJhY2tzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRDb2RlY0dUS19oCmRpZmYgLS1naXQgYS9jb25maWd1
cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggODhkYzJkYy4uY2JlZmVkNSAxMDA2NDQKLS0tIGEv
Y29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTM1LDE4ICsxMzUsMTggQEAgZmkK
ICMgZGV0ZXJtaW5lIHRoZSBVbmljb2RlIGJhY2tlbmQKIEFDX01TR19DSEVDS0lORyhbdGhlIFVu
aWNvZGUgYmFja2VuZCB0byB1c2VdKQogQUNfQVJHX1dJVEgodW5pY29kZV9iYWNrZW5kLAotICAg
ICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC11bmljb2RlLWJhY2tlbmQ9QDw6QGljdUA6
PkBdLAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC11bmljb2RlLWJhY2tlbmQ9
QDw6QGljdS9nbGliQDo+QF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbU2VsZWN0IFVu
aWNvZGUgYmFja2VuZCBbZGVmYXVsdD1pY3VdXSksCi0gICAgICAgICAgICBbXSxbdW5pY29kZV9i
YWNrZW5kPSJpY3UiXSkKKyAgICAgICAgICAgIFtdLFt3aXRoX3VuaWNvZGVfYmFja2VuZD0iaWN1
Il0pCiAKLWNhc2UgIiR1bmljb2RlX2JhY2tlbmQiIGluCi0gICAgIGljdSkgOzsKLSAgICAgKikg
QUNfTVNHX0VSUk9SKFtJbnZhbGlkIFVuaWNvZGUgYmFja2VuZDogbXVzdCBiZSBpY3UuXSkgOzsK
K2Nhc2UgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgaW4KKyAgICAgaWN1fGdsaWIpIDs7CisgICAg
ICopIEFDX01TR19FUlJPUihbSW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1IG9y
IGdsaWIuXSkgOzsKIGVzYWMKIAotQUNfTVNHX1JFU1VMVChbJHVuaWNvZGVfYmFja2VuZF0pCitB
Q19NU0dfUkVTVUxUKFskd2l0aF91bmljb2RlX2JhY2tlbmRdKQogCi1pZiB0ZXN0ICIkdW5pY29k
ZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQi
ID0gImljdSI7IHRoZW4KIAkjIGNoZWNrIGZvciBpY3UtY29uZmlnCiAJaWYgdGVzdCAiJG9zX2Rh
cndpbiIgPSAieWVzIjsgdGhlbgogCQlVTklDT0RFX0NGTEFHUz0iLUlcJChzcmNkaXIpL0phdmFT
Y3JpcHRDb3JlL2ljdSAtSVwkKHNyY2RpcikvV2ViQ29yZS9pY3UiCkBAIC0xNjUsNiArMTY1LDEw
IEBAIGlmIHRlc3QgIiR1bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4KIAlmaQogZmkKIAor
aWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIjsgdGhlbgorICAgIFBLR19D
SEVDS19NT0RVTEVTKFtVTklDT0RFXSwgW2dsaWItMi4wIHBhbmdvID49IDEuMjEuMF0pCitmaQor
CiBBQ19TVUJTVChbVU5JQ09ERV9DRkxBR1NdKQogQUNfU1VCU1QoW1VOSUNPREVfTElCU10pCiAK
QEAgLTQ5OCw2ICs1MDIsMTAgQEAgQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9XSU4zMl0sIFt0ZXN0
ICIkd2l0aF90YXJnZXQiID0gIndpbjMyIl0pCiBBTV9DT05ESVRJT05BTChbVEFSR0VUX1FVQVJU
Wl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9OQUwoW1RB
UkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAKKyMg
VW5pY29kZSBiYWNrZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9JQ1VfVU5J
Q09ERV0sIFt0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSJdKQorQU1fQ09ORElU
SU9OQUwoW1VTRV9HTElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9
ICJnbGliIl0pCisKICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwo
W1VTRV9DVVJMXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCJdKQogQU1fQ09O
RElUSU9OQUwoW1VTRV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAic291cCJd
KQpAQCAtNTQwLDcgKzU0OCw3IEBAIFdlYktpdCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xs
b3dpbmcgb3B0aW9uczoKIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgRW5hYmxlIGRlYnVnZ2luZyAo
c2xvdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RlYnVnCiAg
Q29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkZW5hYmxlX2NvdmVyYWdlCi0gVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAkdW5pY29kZV9iYWNrZW5kCisgVW5pY29kZSBiYWNrZW5k
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF91bmljb2Rl
X2JhY2tlbmQKICBIVFRQIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6ICR3aXRoX2h0dHBfYmFja2VuZAogIEZvbnQgYmFja2VuZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfZm9udF9iYWNrZW5kCiAg
T3B0aW1pemVkIG1lbW9yeSBhbGxvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkZW5hYmxlX2Zhc3RfbWFsbG9jCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21500</attachid>
            <date>2008-06-04 22:59:20 -0700</date>
            <delta_ts>2009-05-22 10:27:26 -0700</delta_ts>
            <desc>Modified the Juergbi&apos;s patch for umemcasecmp function</desc>
            <filename>icu.patch</filename>
            <type>text/plain</type>
            <size>45642</size>
            <attacher name="Naiem">naiem.shaik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNjhjZDUz
ZC4uNWNmMjI5YyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTQ5LDggKzQ5LDE1IEBAIEVYVFJBX0RJU1QgOj0KICMgR2xvYmFsIGZsYWdzIHRvIENQ
UAogZ2xvYmFsX2NwcGZsYWdzIDo9CiAKK2lmIFVTRV9JQ1VfVU5JQ09ERQogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKICAgIC1EV1RGX1VTRV9JQ1VfVU5JQ09ERT0xCitlbmRpZgorCitpZiBVU0VfR0xJ
Ql9VTklDT0RFCitnbG9iYWxfY3BwZmxhZ3MgKz0gXAorICAgLURXVEZfVVNFX0dMSUJfVU5JQ09E
RT0xCitlbmRpZgogCiAjIERlZmF1bHQgY29tcGlsZXIgZmxhZ3MKIGdsb2JhbF9jZmxhZ3MgOj0g
XApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oIGIvSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCmluZGV4IGY4OTBhZmMuLjYyYjQzZDYg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgKQEAgLTI5LDYgKzI5LDggQEAKICNp
bmNsdWRlICJxdDQvVW5pY29kZVF0NC5oIgogI2VsaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1
ZGUgPHd0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1Lmg+CisjZWxpZiBVU0UoR0xJQl9VTklDT0RF
KQorI2luY2x1ZGUgPHd0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaD4KICNlbHNlCiAjZXJy
b3IgIlVua25vd24gVW5pY29kZSBpbXBsZW1lbnRhdGlvbiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oIGIvSmF2YVNjcmlw
dENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjE1NWQwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmgKQEAgLTAsMCArMSw1NzYgQEAKKy8vIC0q
LSBjLWJhc2ljLW9mZnNldDogMiAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBsaWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCBKw4PCvHJn
IEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS0pTX1VOSUNP
REVfR0xJQl9ICisjZGVmaW5lIEtKU19VTklDT0RFX0dMSUJfSAorCisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRl
IDxnbGliLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKwordHlwZWRlZiB1aW50MTZfdCBV
Q2hhcjsKK3R5cGVkZWYgaW50MzJfdCBVQ2hhcjMyOworCisvLyBjb3BpZWQgZnJvbSBHTGliCisK
Ky8qIFRhYmxlIG9mIGNhc2Vmb2xkaW5nIGNhc2VzIHRoYXQgY2FuJ3QgYmUgZGVyaXZlZCBieSBs
b3dlcmNhc2luZworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgZ3VpbnQxNiBjaDsKKyAg
Z2NoYXIgZGF0YVs3XTsKK30gY2FzZWZvbGRfdGFibGVbXSA9IHsKKyAgeyAweDAwYjUsICJceGNl
XHhiYyIgfSwKKyAgeyAweDAwZGYsICJceDczXHg3MyIgfSwKKyAgeyAweDAxMzAsICJceDY5XHhj
Y1x4ODciIH0sCisgIHsgMHgwMTQ5LCAiXHhjYVx4YmNceDZlIiB9LAorICB7IDB4MDE3ZiwgIlx4
NzMiIH0sCisgIHsgMHgwMWYwLCAiXHg2YVx4Y2NceDhjIiB9LAorICB7IDB4MDM0NSwgIlx4Y2Vc
eGI5IiB9LAorICB7IDB4MDM5MCwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAw
eDAzYjAsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgwM2MyLCAiXHhjZlx4
ODMiIH0sCisgIHsgMHgwM2QwLCAiXHhjZVx4YjIiIH0sCisgIHsgMHgwM2QxLCAiXHhjZVx4Yjgi
IH0sCisgIHsgMHgwM2Q1LCAiXHhjZlx4ODYiIH0sCisgIHsgMHgwM2Q2LCAiXHhjZlx4ODAiIH0s
CisgIHsgMHgwM2YwLCAiXHhjZVx4YmEiIH0sCisgIHsgMHgwM2YxLCAiXHhjZlx4ODEiIH0sCisg
IHsgMHgwM2Y1LCAiXHhjZVx4YjUiIH0sCisgIHsgMHgwNTg3LCAiXHhkNVx4YTVceGQ2XHg4MiIg
fSwKKyAgeyAweDFlOTYsICJceDY4XHhjY1x4YjEiIH0sCisgIHsgMHgxZTk3LCAiXHg3NFx4Y2Nc
eDg4IiB9LAorICB7IDB4MWU5OCwgIlx4NzdceGNjXHg4YSIgfSwKKyAgeyAweDFlOTksICJceDc5
XHhjY1x4OGEiIH0sCisgIHsgMHgxZTlhLCAiXHg2MVx4Y2FceGJlIiB9LAorICB7IDB4MWU5Yiwg
Ilx4ZTFceGI5XHhhMSIgfSwKKyAgeyAweDFmNTAsICJceGNmXHg4NVx4Y2NceDkzIiB9LAorICB7
IDB4MWY1MiwgIlx4Y2ZceDg1XHhjY1x4OTNceGNjXHg4MCIgfSwKKyAgeyAweDFmNTQsICJceGNm
XHg4NVx4Y2NceDkzXHhjY1x4ODEiIH0sCisgIHsgMHgxZjU2LCAiXHhjZlx4ODVceGNjXHg5M1x4
Y2RceDgyIiB9LAorICB7IDB4MWY4MCwgIlx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4
MWY4MSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7IDB4MWY4MiwgIlx4ZTFceGJjXHg4
Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4MywgIlx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7
IDB4MWY4NCwgIlx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAorICB7IDB4MWY4NSwgIlx4ZTFceGJj
XHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4NiwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAor
ICB7IDB4MWY4NywgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICB7IDB4MWY4OCwgIlx4ZTFc
eGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4OSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9
LAorICB7IDB4MWY4YSwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4YiwgIlx4
ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4YywgIlx4ZTFceGJjXHg4NFx4Y2VceGI5
IiB9LAorICB7IDB4MWY4ZCwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZSwg
Ilx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZiwgIlx4ZTFceGJjXHg4N1x4Y2Vc
eGI5IiB9LAorICB7IDB4MWY5MCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5
MSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWY5MiwgIlx4ZTFceGJjXHhhMlx4
Y2VceGI5IiB9LAorICB7IDB4MWY5MywgIlx4ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4
MWY5NCwgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWY5NSwgIlx4ZTFceGJjXHhh
NVx4Y2VceGI5IiB9LAorICB7IDB4MWY5NiwgIlx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7
IDB4MWY5NywgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWY5OCwgIlx4ZTFceGJj
XHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5OSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAor
ICB7IDB4MWY5YSwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWY5YiwgIlx4ZTFc
eGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWY5YywgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9
LAorICB7IDB4MWY5ZCwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZSwgIlx4
ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZiwgIlx4ZTFceGJjXHhhN1x4Y2VceGI5
IiB9LAorICB7IDB4MWZhMCwgIlx4ZTFceGJkXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWZhMSwg
Ilx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZhMiwgIlx4ZTFceGJkXHhhMlx4Y2Vc
eGI5IiB9LAorICB7IDB4MWZhMywgIlx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZh
NCwgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWZhNSwgIlx4ZTFceGJkXHhhNVx4
Y2VceGI5IiB9LAorICB7IDB4MWZhNiwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4
MWZhNywgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZhOCwgIlx4ZTFceGJkXHhh
MFx4Y2VceGI5IiB9LAorICB7IDB4MWZhOSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICB7
IDB4MWZhYSwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWZhYiwgIlx4ZTFceGJk
XHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZhYywgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAor
ICB7IDB4MWZhZCwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWZhZSwgIlx4ZTFc
eGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWZhZiwgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9
LAorICB7IDB4MWZiMiwgIlx4ZTFceGJkXHhiMFx4Y2VceGI5IiB9LAorICB7IDB4MWZiMywgIlx4
Y2VceGIxXHhjZVx4YjkiIH0sCisgIHsgMHgxZmI0LCAiXHhjZVx4YWNceGNlXHhiOSIgfSwKKyAg
eyAweDFmYjYsICJceGNlXHhiMVx4Y2RceDgyIiB9LAorICB7IDB4MWZiNywgIlx4Y2VceGIxXHhj
ZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmYmMsICJceGNlXHhiMVx4Y2VceGI5IiB9LAorICB7
IDB4MWZiZSwgIlx4Y2VceGI5IiB9LAorICB7IDB4MWZjMiwgIlx4ZTFceGJkXHhiNFx4Y2VceGI5
IiB9LAorICB7IDB4MWZjMywgIlx4Y2VceGI3XHhjZVx4YjkiIH0sCisgIHsgMHgxZmM0LCAiXHhj
ZVx4YWVceGNlXHhiOSIgfSwKKyAgeyAweDFmYzYsICJceGNlXHhiN1x4Y2RceDgyIiB9LAorICB7
IDB4MWZjNywgIlx4Y2VceGI3XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmY2MsICJceGNl
XHhiN1x4Y2VceGI5IiB9LAorICB7IDB4MWZkMiwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MCIg
fSwKKyAgeyAweDFmZDMsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgxZmQ2
LCAiXHhjZVx4YjlceGNkXHg4MiIgfSwKKyAgeyAweDFmZDcsICJceGNlXHhiOVx4Y2NceDg4XHhj
ZFx4ODIiIH0sCisgIHsgMHgxZmUyLCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgwIiB9LAorICB7
IDB4MWZlMywgIlx4Y2ZceDg1XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDFmZTQsICJceGNm
XHg4MVx4Y2NceDkzIiB9LAorICB7IDB4MWZlNiwgIlx4Y2ZceDg1XHhjZFx4ODIiIH0sCisgIHsg
MHgxZmU3LCAiXHhjZlx4ODVceGNjXHg4OFx4Y2RceDgyIiB9LAorICB7IDB4MWZmMiwgIlx4ZTFc
eGJkXHhiY1x4Y2VceGI5IiB9LAorICB7IDB4MWZmMywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0sCisg
IHsgMHgxZmY0LCAiXHhjZlx4OGVceGNlXHhiOSIgfSwKKyAgeyAweDFmZjYsICJceGNmXHg4OVx4
Y2RceDgyIiB9LAorICB7IDB4MWZmNywgIlx4Y2ZceDg5XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAg
eyAweDFmZmMsICJceGNmXHg4OVx4Y2VceGI5IiB9LAorICB7IDB4MjE2MCwgIlx4ZTJceDg1XHhi
MCIgfSwKKyAgeyAweDIxNjEsICJceGUyXHg4NVx4YjEiIH0sCisgIHsgMHgyMTYyLCAiXHhlMlx4
ODVceGIyIiB9LAorICB7IDB4MjE2MywgIlx4ZTJceDg1XHhiMyIgfSwKKyAgeyAweDIxNjQsICJc
eGUyXHg4NVx4YjQiIH0sCisgIHsgMHgyMTY1LCAiXHhlMlx4ODVceGI1IiB9LAorICB7IDB4MjE2
NiwgIlx4ZTJceDg1XHhiNiIgfSwKKyAgeyAweDIxNjcsICJceGUyXHg4NVx4YjciIH0sCisgIHsg
MHgyMTY4LCAiXHhlMlx4ODVceGI4IiB9LAorICB7IDB4MjE2OSwgIlx4ZTJceDg1XHhiOSIgfSwK
KyAgeyAweDIxNmEsICJceGUyXHg4NVx4YmEiIH0sCisgIHsgMHgyMTZiLCAiXHhlMlx4ODVceGJi
IiB9LAorICB7IDB4MjE2YywgIlx4ZTJceDg1XHhiYyIgfSwKKyAgeyAweDIxNmQsICJceGUyXHg4
NVx4YmQiIH0sCisgIHsgMHgyMTZlLCAiXHhlMlx4ODVceGJlIiB9LAorICB7IDB4MjE2ZiwgIlx4
ZTJceDg1XHhiZiIgfSwKKyAgeyAweDI0YjYsICJceGUyXHg5M1x4OTAiIH0sCisgIHsgMHgyNGI3
LCAiXHhlMlx4OTNceDkxIiB9LAorICB7IDB4MjRiOCwgIlx4ZTJceDkzXHg5MiIgfSwKKyAgeyAw
eDI0YjksICJceGUyXHg5M1x4OTMiIH0sCisgIHsgMHgyNGJhLCAiXHhlMlx4OTNceDk0IiB9LAor
ICB7IDB4MjRiYiwgIlx4ZTJceDkzXHg5NSIgfSwKKyAgeyAweDI0YmMsICJceGUyXHg5M1x4OTYi
IH0sCisgIHsgMHgyNGJkLCAiXHhlMlx4OTNceDk3IiB9LAorICB7IDB4MjRiZSwgIlx4ZTJceDkz
XHg5OCIgfSwKKyAgeyAweDI0YmYsICJceGUyXHg5M1x4OTkiIH0sCisgIHsgMHgyNGMwLCAiXHhl
Mlx4OTNceDlhIiB9LAorICB7IDB4MjRjMSwgIlx4ZTJceDkzXHg5YiIgfSwKKyAgeyAweDI0YzIs
ICJceGUyXHg5M1x4OWMiIH0sCisgIHsgMHgyNGMzLCAiXHhlMlx4OTNceDlkIiB9LAorICB7IDB4
MjRjNCwgIlx4ZTJceDkzXHg5ZSIgfSwKKyAgeyAweDI0YzUsICJceGUyXHg5M1x4OWYiIH0sCisg
IHsgMHgyNGM2LCAiXHhlMlx4OTNceGEwIiB9LAorICB7IDB4MjRjNywgIlx4ZTJceDkzXHhhMSIg
fSwKKyAgeyAweDI0YzgsICJceGUyXHg5M1x4YTIiIH0sCisgIHsgMHgyNGM5LCAiXHhlMlx4OTNc
eGEzIiB9LAorICB7IDB4MjRjYSwgIlx4ZTJceDkzXHhhNCIgfSwKKyAgeyAweDI0Y2IsICJceGUy
XHg5M1x4YTUiIH0sCisgIHsgMHgyNGNjLCAiXHhlMlx4OTNceGE2IiB9LAorICB7IDB4MjRjZCwg
Ilx4ZTJceDkzXHhhNyIgfSwKKyAgeyAweDI0Y2UsICJceGUyXHg5M1x4YTgiIH0sCisgIHsgMHgy
NGNmLCAiXHhlMlx4OTNceGE5IiB9LAorICB7IDB4ZmIwMCwgIlx4NjZceDY2IiB9LAorICB7IDB4
ZmIwMSwgIlx4NjZceDY5IiB9LAorICB7IDB4ZmIwMiwgIlx4NjZceDZjIiB9LAorICB7IDB4ZmIw
MywgIlx4NjZceDY2XHg2OSIgfSwKKyAgeyAweGZiMDQsICJceDY2XHg2Nlx4NmMiIH0sCisgIHsg
MHhmYjA1LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhmYjA2LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhm
YjEzLCAiXHhkNVx4YjRceGQ1XHhiNiIgfSwKKyAgeyAweGZiMTQsICJceGQ1XHhiNFx4ZDVceGE1
IiB9LAorICB7IDB4ZmIxNSwgIlx4ZDVceGI0XHhkNVx4YWIiIH0sCisgIHsgMHhmYjE2LCAiXHhk
NVx4YmVceGQ1XHhiNiIgfSwKKyAgeyAweGZiMTcsICJceGQ1XHhiNFx4ZDVceGFkIiB9LAorfTsK
KworCisvLyBzb21lIGRlZmluZXMgZnJvbSBJQ1UKKworI2RlZmluZSBVMTZfSVNfTEVBRChjKSAo
KChjKSYweGZmZmZmYzAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfVFJBSUwoYykgKCgoYykm
MHhmZmZmZmMwMCk9PTB4ZGMwMCkKKyNkZWZpbmUgVTE2X1NVUlJPR0FURV9PRkZTRVQgKCgweGQ4
MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKQorI2RlZmluZSBVMTZfR0VUX1NVUFBMRU1FTlRBUlko
bGVhZCwgdHJhaWwpIFwKKyAgICAoKChVQ2hhcjMyKShsZWFkKTw8MTBVTCkrKFVDaGFyMzIpKHRy
YWlsKS1VMTZfU1VSUk9HQVRFX09GRlNFVCkKKworI2RlZmluZSBVMTZfTEVBRChzdXBwbGVtZW50
YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSk+PjEwKSsweGQ3YzApCisjZGVmaW5lIFUxNl9U
UkFJTChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSkmMHgzZmYpfDB4ZGMw
MCkKKworI2RlZmluZSBVX0lTX1NVUlJPR0FURShjKSAoKChjKSYweGZmZmZmODAwKT09MHhkODAw
KQorI2RlZmluZSBVMTZfSVNfU0lOR0xFKGMpICFVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBV
MTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5lIFUxNl9JU19TVVJS
T0dBVEVfTEVBRChjKSAoKChjKSYweDQwMCk9PTApCisKKyNkZWZpbmUgVTE2X05FWFQocywgaSwg
bGVuZ3RoLCBjKSB7IFwKKyAgICAoYyk9KHMpWyhpKSsrXTsgXAorICAgIGlmKFUxNl9JU19MRUFE
KGMpKSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZigoaSk8KGxlbmd0
aCkgJiYgVTE2X0lTX1RSQUlMKF9fYzI9KHMpWyhpKV0pKSB7IFwKKyAgICAgICAgICAgICsrKGkp
OyBcCisgICAgICAgICAgICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChjKSwgX19jMik7IFwK
KyAgICAgICAgfSBcCisgICAgfSBcCit9CisKKyNkZWZpbmUgVV9NQVNLKHgpICgodWludDMyX3Qp
MTw8KHgpKQorCituYW1lc3BhY2UgV1RGIHsKKyAgbmFtZXNwYWNlIFVuaWNvZGUgeworCisgICAg
ZW51bSBEaXJlY3Rpb24geworICAgICAgTGVmdFRvUmlnaHQsCisgICAgICBSaWdodFRvTGVmdCwK
KyAgICAgIEV1cm9wZWFuTnVtYmVyLAorICAgICAgRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3IsCisg
ICAgICBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3IsCisgICAgICBBcmFiaWNOdW1iZXIsCisgICAg
ICBDb21tb25OdW1iZXJTZXBhcmF0b3IsCisgICAgICBCbG9ja1NlcGFyYXRvciwKKyAgICAgIFNl
Z21lbnRTZXBhcmF0b3IsCisgICAgICBXaGl0ZVNwYWNlTmV1dHJhbCwKKyAgICAgIE90aGVyTmV1
dHJhbCwKKyAgICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nLAorICAgICAgTGVmdFRvUmlnaHRPdmVy
cmlkZSwKKyAgICAgIFJpZ2h0VG9MZWZ0QXJhYmljLAorICAgICAgUmlnaHRUb0xlZnRFbWJlZGRp
bmcsCisgICAgICBSaWdodFRvTGVmdE92ZXJyaWRlLAorICAgICAgUG9wRGlyZWN0aW9uYWxGb3Jt
YXQsCisgICAgICBOb25TcGFjaW5nTWFyaywKKyAgICAgIEJvdW5kYXJ5TmV1dHJhbAorICAgIH07
CisKKyAgICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAgIERlY29tcG9zaXRpb25Ob25l
LAorICAgICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAgICAgIERlY29tcG9zaXRpb25Db21w
YXQsCisgICAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlLAorICAgICAgRGVjb21wb3NpdGlvbkZpbmFs
LAorICAgICAgRGVjb21wb3NpdGlvbkZvbnQsCisgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24s
CisgICAgICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAgIERlY29tcG9zaXRpb25Jc29sYXRl
ZCwKKyAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAgICBEZWNvbXBvc2l0aW9uTmFycm93
LAorICAgICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisgICAgICBEZWNvbXBvc2l0aW9uU21hbGws
CisgICAgICBEZWNvbXBvc2l0aW9uU3F1YXJlLAorICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAg
ICAgIERlY29tcG9zaXRpb25TdXBlciwKKyAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCwKKyAg
ICAgIERlY29tcG9zaXRpb25XaWRlLAorICAgIH07CisKKyAgICBlbnVtIENoYXJDYXRlZ29yeSB7
CisgICAgICBOb0NhdGVnb3J5ID0gIDAsCisgICAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9IFVfTUFT
SyhHX1VOSUNPREVfVU5BU1NJR05FRCksCisgICAgICBMZXR0ZXJfVXBwZXJjYXNlID0gVV9NQVNL
KEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVSKSwKKyAgICAgIExldHRlcl9Mb3dlcmNhc2UgPSBV
X01BU0soR19VTklDT0RFX0xPV0VSQ0FTRV9MRVRURVIpLAorICAgICAgTGV0dGVyX1RpdGxlY2Fz
ZSA9IFVfTUFTSyhHX1VOSUNPREVfVElUTEVDQVNFX0xFVFRFUiksCisgICAgICBMZXR0ZXJfTW9k
aWZpZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX0xFVFRFUiksCisgICAgICBMZXR0ZXJf
T3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX0xFVFRFUiksCisKKyAgICAgIE1hcmtfTm9u
U3BhY2luZyA9IFVfTUFTSyhHX1VOSUNPREVfTk9OX1NQQUNJTkdfTUFSSyksCisgICAgICBNYXJr
X0VuY2xvc2luZyA9IFVfTUFTSyhHX1VOSUNPREVfRU5DTE9TSU5HX01BUkspLAorICAgICAgTWFy
a19TcGFjaW5nQ29tYmluaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9DT01CSU5JTkdfTUFSSyksCisK
KyAgICAgIE51bWJlcl9EZWNpbWFsRGlnaXQgPSBVX01BU0soR19VTklDT0RFX0RFQ0lNQUxfTlVN
QkVSKSwKKyAgICAgIE51bWJlcl9MZXR0ZXIgPSBVX01BU0soR19VTklDT0RFX0xFVFRFUl9OVU1C
RVIpLAorICAgICAgTnVtYmVyX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9OVU1CRVIp
LAorCisgICAgICBTZXBhcmF0b3JfU3BhY2UgPSBVX01BU0soR19VTklDT0RFX1NQQUNFX1NFUEFS
QVRPUiksCisgICAgICBTZXBhcmF0b3JfTGluZSA9IFVfTUFTSyhHX1VOSUNPREVfTElORV9TRVBB
UkFUT1IpLAorICAgICAgU2VwYXJhdG9yX1BhcmFncmFwaCA9IFVfTUFTSyhHX1VOSUNPREVfUEFS
QUdSQVBIX1NFUEFSQVRPUiksCisKKyAgICAgIE90aGVyX0NvbnRyb2wgPSBVX01BU0soR19VTklD
T0RFX0NPTlRST0wpLAorICAgICAgT3RoZXJfRm9ybWF0ID0gVV9NQVNLKEdfVU5JQ09ERV9GT1JN
QVQpLAorICAgICAgT3RoZXJfUHJpdmF0ZVVzZSA9IFVfTUFTSyhHX1VOSUNPREVfUFJJVkFURV9V
U0UpLAorICAgICAgT3RoZXJfU3Vycm9nYXRlID0gVV9NQVNLKEdfVU5JQ09ERV9TVVJST0dBVEUp
LAorCisgICAgICBQdW5jdHVhdGlvbl9EYXNoID0gVV9NQVNLKEdfVU5JQ09ERV9EQVNIX1BVTkNU
VUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX09wZW4gPSBVX01BU0soR19VTklDT0RFX09QRU5f
UFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fQ2xvc2UgPSBVX01BU0soR19VTklDT0RF
X0NMT1NFX1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9IFVfTUFT
SyhHX1VOSUNPREVfQ09OTkVDVF9QVU5DVFVBVElPTiksCisgICAgICBQdW5jdHVhdGlvbl9PdGhl
ciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfUFVOQ1RVQVRJT04pLAorCisgICAgICBTeW1ib2xf
TWF0aCA9IFVfTUFTSyhHX1VOSUNPREVfTUFUSF9TWU1CT0wpLAorICAgICAgU3ltYm9sX0N1cnJl
bmN5ID0gVV9NQVNLKEdfVU5JQ09ERV9DVVJSRU5DWV9TWU1CT0wpLAorICAgICAgU3ltYm9sX01v
ZGlmaWVyID0gVV9NQVNLKEdfVU5JQ09ERV9NT0RJRklFUl9TWU1CT0wpLAorICAgICAgU3ltYm9s
X090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9TWU1CT0wpLAorCisgICAgICBQdW5jdHVh
dGlvbl9Jbml0aWFsUXVvdGUgPSBVX01BU0soR19VTklDT0RFX0lOSVRJQUxfUFVOQ1RVQVRJT04p
LAorICAgICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVfRklOQUxf
UFVOQ1RVQVRJT04pCisgICAgfTsKKworICAgIGlubGluZSBVQ2hhcjMyIGZvbGRDYXNlKFVDaGFy
MzIgY2gpCisgICAgeworICAgICAgICAvLyBhZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRvIEdMaWIg
dXBzdHJlYW0/CisKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCA9IEdf
Tl9FTEVNRU5UUyhjYXNlZm9sZF90YWJsZSk7CisKKyAgICAgICAgaWYgKGNoID49IGNhc2Vmb2xk
X3RhYmxlW3N0YXJ0XS5jaCAmJgorICAgICAgICAgICAgY2ggPD0gY2FzZWZvbGRfdGFibGVbZW5k
IC0gMV0uY2gpIHsKKyAgICAgICAgICAgIHdoaWxlIChUUlVFKSB7CisgICAgICAgICAgICAgICAg
aW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0g
Y2FzZWZvbGRfdGFibGVbaGFsZl0uY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdf
dXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxmXS5kYXRhKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGhhbGYgPT0gc3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+IGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmNo
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaGFsZjsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSBoYWxmOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBnX3VuaWNoYXJf
dG9sb3dlciAoY2gpOworICAgIH0KKworICAgIGlubGluZSBpbnQgZm9sZENhc2UoVUNoYXIqIHJl
c3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwg
Ym9vbCogZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisKKyAg
ICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwg
MCwgJmdlcnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9
IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjaGFy
ICp1dGY4cmVzdWx0ID0gZ191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMsIC0xKTsKKyAgICAgICAgZ19m
cmVlKHV0ZjhzcmMpOworCisgICAgICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAg
ICAgICAgVUNoYXIqIHV0ZjE2cmVzdWx0ID0gZ191dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1bHQsIC0x
LCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3IpOworICAgICAgICBnX2ZyZWUodXRmOHJl
c3VsdCk7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7
CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXRmMTZy
ZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7
CisgICAgICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHV0
ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9CisgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2
cmVzdWx0LCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBnX2Zy
ZWUodXRmMTZyZXN1bHQpOworCisgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAg
ICB9CisKKyAgICBpbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExl
bmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAg
eworICAgICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAgY2hhciAqdXRmOHNy
YyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7CisgICAg
ICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAg
ICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjaGFyICp1dGY4cmVzdWx0ID0gZ191
dGY4X3N0cmRvd24odXRmOHNyYywgLTEpOworICAgICAgICBnX2ZyZWUodXRmOHNyYyk7CisKKyAg
ICAgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICBVQ2hhciogdXRmMTZy
ZXN1bHQgPSBnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdCwgLTEsIDAsICZ1dGYxNnJlc3VsdExl
bmd0aCwgJmdlcnJvcik7CisgICAgICAgIGdfZnJlZSh1dGY4cmVzdWx0KTsKKyAgICAgICAgaWYg
KGdlcnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3Vs
dExlbmd0aCkgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIGdfZnJl
ZSh1dGYxNnJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7Cisg
ICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZyZXN1bHQsIHV0ZjE2cmVzdWx0
TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisK
KyAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIH0KKworICAgIGlubGluZSBV
Q2hhcjMyIHRvTG93ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJf
dG9sb3dlcihjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVDaGFyMzIg
YykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX3RvdXBwZXIoYyk7CisgICAgfQorCisg
ICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNv
bnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQorICAgIHsKKyAgICAg
ICAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOworCisgICAgICAgIGNoYXIgKnV0ZjhzcmMgPSBnX3V0
ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3IpOworICAgICAgICBpZiAo
Z2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICB9CisKKyAgICAgICAgY2hhciAqdXRmOHJlc3VsdCA9IGdfdXRmOF9zdHJ1
cCh1dGY4c3JjLCAtMSk7CisgICAgICAgIGdfZnJlZSh1dGY4c3JjKTsKKworICAgICAgICBsb25n
IHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgIFVDaGFyKiB1dGYxNnJlc3VsdCA9IGdf
dXRmOF90b191dGYxNih1dGY4cmVzdWx0LCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vy
cm9yKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhyZXN1bHQpOworICAgICAgICBpZiAoZ2Vycm9yKSB7
CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7
CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgZ19mcmVlKHV0ZjE2cmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQor
ICAgICAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdCwgdXRmMTZyZXN1bHRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKworICAgICAgICBy
ZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorCisgICAgaW5saW5lIFVDaGFyMzIgdG9U
aXRsZUNhc2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdG90aXRs
ZShjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0FyYWJpY0NoYXIoVUNoYXIzMiBjKQor
ICAgIHsKKyAgICAgIHJldHVybiBjID49IDB4MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAgICB9CisK
KyAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJl
dHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOworICAgIH0KKworICAg
IGlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJl
dHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SOworICAg
IH0KKworICAgIGlubGluZSBib29sIGlzUHJpbnRhYmxlQ2hhcihVQ2hhcjMyIGMpCisgICAgewor
ICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3ByaW50KGMpOworICAgIH0KKyAgICAKKyAgICBpbmxp
bmUgYm9vbCBpc0RpZ2l0KFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFy
X2lzZGlnaXQoYyk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNQdW5jdChVQ2hhcjMyIGMp
CisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3B1bmN0KGMpOworICAgIH0KKworICAg
IGlubGluZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgZ3Vu
aWNoYXIgbWlycm9yID0gMDsKKyAgICAgIGdfdW5pY2hhcl9nZXRfbWlycm9yX2NoYXIoYywgJm1p
cnJvcik7CisgICAgICByZXR1cm4gbWlycm9yOworICAgIH0KKworICAgIGlubGluZSBDaGFyQ2F0
ZWdvcnkgY2F0ZWdvcnkoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIGlmIChjID4gMHhmZmZmKSB7
CisgICAgICAgICAgcmV0dXJuIE5vQ2F0ZWdvcnk7CisgICAgICB9CisgICAgICByZXR1cm4gKENo
YXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBlKGMpKTsKKyAgICB9CisKKyAgICBpbmxp
bmUgRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCisgICAgeworICAgICAgUGFuZ29CaWRp
VHlwZSB0eXBlID0gcGFuZ29fYmlkaV90eXBlX2Zvcl91bmljaGFyKGMpOworICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MOiByZXR1cm4gTGVmdFRvUmln
aHQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOiByZXR1cm4gUmlnaHRUb0xlZnQ7Cisg
ICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTDogcmV0dXJuIFJpZ2h0VG9MZWZ0QXJhYmljOwor
ICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTFJFOiByZXR1cm4gTGVmdFRvUmlnaHRFbWJlZGRp
bmc7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9STEU6IHJldHVybiBSaWdodFRvTGVmdEVt
YmVkZGluZzsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0xSTzogcmV0dXJuIExlZnRUb1Jp
Z2h0T3ZlcnJpZGU7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9STE86IHJldHVybiBSaWdo
dFRvTGVmdE92ZXJyaWRlOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUERGOiByZXR1cm4g
UG9wRGlyZWN0aW9uYWxGb3JtYXQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FTjogcmV0
dXJuIEV1cm9wZWFuTnVtYmVyOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQU46IHJldHVy
biBBcmFiaWNOdW1iZXI7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FUzogcmV0dXJuIEV1
cm9wZWFuTnVtYmVyU2VwYXJhdG9yOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVQ6IHJl
dHVybiBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQ
RV9DUzogcmV0dXJuIENvbW1vbk51bWJlclNlcGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklE
SV9UWVBFX05TTTogcmV0dXJuIE5vblNwYWNpbmdNYXJrOworICAgICAgY2FzZSBQQU5HT19CSURJ
X1RZUEVfQk46IHJldHVybiBCb3VuZGFyeU5ldXRyYWw7CisgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9COiByZXR1cm4gQmxvY2tTZXBhcmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQ
RV9TOiByZXR1cm4gU2VnbWVudFNlcGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X1dTOiByZXR1cm4gV2hpdGVTcGFjZU5ldXRyYWw7CisgICAgICBkZWZhdWx0OiByZXR1cm4gT3Ro
ZXJOZXV0cmFsOworfQorICAgIH0KKworICAgIGlubGluZSBib29sIGlzTG93ZXIoVUNoYXIzMiBj
KQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNsb3dlcihjKTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgaW50IGRpZ2l0VmFsdWUoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBn
X3VuaWNoYXJfZGlnaXRfdmFsdWUoYyk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQ4X3QgY29t
YmluaW5nQ2xhc3MoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfY29t
YmluaW5nX2NsYXNzKGMpOworICAgIH0KKworICAgIGlubGluZSBEZWNvbXBvc2l0aW9uVHlwZSBk
ZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgLy8gRklYTUUKKyAgICAg
IHJldHVybiBEZWNvbXBvc2l0aW9uTm9uZTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHVtZW1j
YXNlY21wKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAgICB7Cisg
ICAgICBjaGFyICp1dGY4YSA9IGdfdXRmMTZfdG9fdXRmOChhLCBsZW4sIDAsIDAsIE5VTEwpOwor
ICAgICAgY2hhciAqdXRmOGIgPSBnX3V0ZjE2X3RvX3V0ZjgoYiwgbGVuLCAwLCAwLCBOVUxMKTsK
KworICAgICAgY2hhciAqZm9sZGVkQSA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4YSwgLTEpOworICAg
ICAgY2hhciAqZm9sZGVkQiA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4YiwgLTEpOworCisgICAgICBn
X2ZyZWUodXRmOGEpOworICAgICAgZ19mcmVlKHV0ZjhiKTsKKworICAgICAgaW50IHJlc3VsdCA9
IGdfdXRmOF9jb2xsYXRlKGZvbGRlZEEsIGZvbGRlZEIpOworCisgICAgICBnX2ZyZWUoZm9sZGVk
QSk7CisgICAgICBnX2ZyZWUoZm9sZGVkQik7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgIH0KK30KKworI2VuZGlmCisvLyB2aW06IHRzPTIgc3c9MiBldApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMjEz
YjJmMy4uMWFkYWZlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05OTYsOSArOTk2LDYgQEAgd2Via2l0Z3RrX3NvdXJj
ZXMgKz0gXAogICAgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5j
cHAgXAogICAgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAgXAog
ICAgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwIFwKLSAgIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKLSAgIFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAgXAotICAgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCiAgICBXZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFu
ZGxlckd0ay5jcHAgXAogICAgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAgXAogICAgV2Vi
Q29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAgXApAQCAtMTAyOSw3ICsxMDI2LDYg
QEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogICAgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU291bmRH
dGsuY3BwIFwKICAgIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1N5c3RlbVRpbWVHdGsuY3BwIFwKICAg
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAotICAgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBc
CiAgICBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaGVlbEV2ZW50R3RrLmNwcCBcCiAgICBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIFwKICAgIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0
azJkcmF3aW5nLmMgXApAQCAtMTA1NSw2ICsxMDUxLDI3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9
IFwKICAgIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rl
ci5jcHAKIAogIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQKKyMgLS0tLQoraWYgVVNFX0lD
VV9VTklDT0RFCit3ZWJraXRndGtfc291cmNlcyArPSBcCisgICBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmNwcCBcCisgICBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5k
YXJpZXNJQ1UuY3BwIFwKKyAgIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRv
cklDVS5jcHAgXAorICAgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRv
ckludGVybmFsSUNVR3RrLmNwcAorZW5kaWYgIyBFTkQgVVNFX0NVUkwKKworIyAtLS0tCisjIGds
aWIgdW5pY29kZSBiYWNrZW5kCisjIC0tLS0KK2lmIFVTRV9HTElCX1VOSUNPREUKK3dlYmtpdGd0
a19zb3VyY2VzICs9IFwKKyAgIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3Rr
LmNwcCBcCisgICBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNw
cCBcCisgICBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNw
cAorZW5kaWYKKworIyAtLS0tCiAjIGN1cmwgaHR0cCBiYWNrZW5kCiAjIC0tLS0KIGlmIFVTRV9D
VVJMCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250
RGF0YUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0
YUd0ay5jcHAKaW5kZXggYTc1NGM0NS4uZGNjZTljMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcApAQCAtMzksOCArMzksNiBA
QAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVk
ZSA8dW5pY29kZS91bm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgK
aW5kZXggNjQ3MTdhNC4uMDA0ZDhhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVh
a0l0ZXJhdG9yLmgKQEAgLTM1LDcgKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFRl
eHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQg
bGVuZ3RoKTsKIAogICAgIGludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciopOwor
ICAgIGludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRC
cmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKKyAgICBpbnQgdGV4dEJyZWFrUHJldmlvdXMo
VGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJ
dGVyYXRvciopOwogICAgIGludCB0ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3Iq
LCBpbnQpOwogICAgIGludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBp
bnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9y
SUNVLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAK
aW5kZXggOTk0MWY1OC4uOTkwY2I2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCkBAIC04OSwxMSArODksMjEgQEAgaW50IHRleHRCcmVha0Zp
cnN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKICAgICByZXR1cm4gdWJya19maXJzdChiaSk7CiB9
CiAKK2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1
cm4gdWJya19sYXN0KGJpKTsKK30KKwogaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0
b3IqIGJpKQogewogICAgIHJldHVybiB1YnJrX25leHQoYmkpOwogfQogCitpbnQgdGV4dEJyZWFr
UHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiB1YnJrX3ByZXZp
b3VzKGJpKTsKK30KKwogaW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciog
YmksIGludCBwb3MpCiB7CiAgICAgcmV0dXJuIHVicmtfcHJlY2VkaW5nKGJpLCBwb3MpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAppbmRleCA5MDI2MDQ5Li5mMmU3NTY1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcApAQCAtMzYsNiArMzYsOCBAQAog
I2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKICNpbmNs
dWRlIDxRU3RyaW5nPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDxnbGliLmg+
CiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KQEAgLTEwNSw2ICsxMDcsMjIgQEAgQ1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGUKICAgICBRU3Ry
aW5nIHN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0
aCk7CiAgICAgc3RyID0gc3RyLm5vcm1hbGl6ZWQoUVN0cmluZzo6Tm9ybWFsaXphdGlvbkZvcm1f
Qyk7CiAgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShyZWludGVycHJldF9j
YXN0PGNvbnN0IFVDaGFyICo+KHN0ci51dGYxNigpKSwgc3RyLmxlbmd0aCgpLCBoYW5kbGluZyk7
CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIGNoYXIgKnV0Zjhzb3VyY2UgPSBnX3V0ZjE2
X3RvX3V0ZjgoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCBOVUxMKTsKKyAgICBjaGFyICp1dGY4
bm9ybWFsaXplZCA9IGdfdXRmOF9ub3JtYWxpemUodXRmOHNvdXJjZSwgLTEsIEdfTk9STUFMSVpF
X05GQyk7CisKKyAgICBnX2ZyZWUgKHV0Zjhzb3VyY2UpOworCisgICAgbG9uZyB1dGYxNmxlbmd0
aDsKKyAgICBVQ2hhciogdXRmMTZub3JtYWxpemVkID0gZ191dGY4X3RvX3V0ZjE2KHV0Zjhub3Jt
YWxpemVkLCAtMSwgMCwgJnV0ZjE2bGVuZ3RoLCBOVUxMKTsKKworICAgIGdfZnJlZSAodXRmOG5v
cm1hbGl6ZWQpOworCisgICAgQ1N0cmluZyByZXN1bHQgPSBuZXdUZXh0Q29kZWMoKnRoaXMpLT5l
bmNvZGUodXRmMTZub3JtYWxpemVkLCB1dGYxNmxlbmd0aCwgaGFuZGxpbmcpOworCisgICAgZ19m
cmVlICh1dGYxNm5vcm1hbGl6ZWQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKICNlbmRpZgogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnku
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAppbmRl
eCBhN2FkODc5Li5kN2RjYmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nUmVnaXN0cnkuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAKQEAgLTQzLDYgKzQzLDkgQEAKICNpZiBQTEFURk9STShRVCkKICNp
bmNsdWRlICJxdC9UZXh0Q29kZWNRdC5oIgogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorI2lu
Y2x1ZGUgImd0ay9UZXh0Q29kZWNHdGsuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCkBAIC0xNzYsNiArMTc5LDExIEBAIHN0YXRpYyB2b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01h
cHMoKQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1Rl
eHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNz
KGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAg
ICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2Rp
bmdOYW1lTWFwKTsKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1Rl
eHRDb2RlY01hcCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFw
cygpCkBAIC0xOTQsNiArMjAyLDExIEBAIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMo
KQogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29k
aW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRD
b2RlY01hcCk7CiAjZW5kaWYKKworI2lmIFVTRShHTElCX1VOSUNPREUpCisgICAgVGV4dENvZGVj
R3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVN
YXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhhZGRUb1RleHRD
b2RlY01hcCk7CisjZW5kaWYKIH0KIAogc3RkOjphdXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRD
b2RlYyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hYzllOThmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IErDg8K8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKwor
I2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJU
ZXh0QnJlYWtJdGVyYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBmaW5kTmV4
dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24s
IGJvb2wgZm9yd2FyZCkKK3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJ
dGVyYXRvcihjaGFycywgbGVuKTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0
aW9uID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChw
b3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJj
aGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsKKyAgICAgICAgICAg
IC8vIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiBn
X3VuaWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9sbG93
aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOworICAg
IH0gZWxzZSB7CisgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3Np
dGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7CisgICAg
ICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5n
IHRoZSBicmVhaworICAgICAgICAgICAgLy8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAg
aWYgKHBvc2l0aW9uID4gMCAmJiBnX3VuaWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbl0pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRpb24g
PSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFy
KiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sK
KyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVu
KTsKKyAgICAqZW5kID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgaWYg
KCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgKnN0YXJ0
ID0gdGV4dEJyZWFrUHJldmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3Rr
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTc0ZTMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNw
cApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJzIEtub2xs
IDxsYXJzQHRyb2xsdGVjaC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDg8K8cmcgQmlsbGV0
ZXIgPGpAYml0cm9uLmNoPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2VudW0gVUJyZWFrSXRlcmF0b3JUeXBlIHsKKyAgICBVQlJLX0NIQVJBQ1RF
UiwKKyAgICBVQlJLX1dPUkQsCisgICAgVUJSS19MSU5FLAorICAgIFVCUktfU0VOVEVOQ0UKK307
CisKK2NsYXNzIFRleHRCcmVha0l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBVQnJlYWtJdGVyYXRv
clR5cGUgbV90eXBlOworICAgIGludCBtX2xlbmd0aDsKKyAgICBQYW5nb0xvZ0F0dHIgKm1fbG9n
X2F0dHJzOworCisgICAgaW50IG1faW5kZXg7Cit9OworCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIHNldFVwSXRlcmF0b3IoYm9vbCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRv
ciomIGl0ZXJhdG9yLAorICAgIFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciog
c3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghY3JlYXRlZEl0ZXJhdG9yKSB7CisgICAgICAgIGl0ZXJhdG9yID0gbmV3
IFRleHRCcmVha0l0ZXJhdG9yKCk7CisgICAgICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7Cisg
ICAgfQorICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgbG9uZyB1
dGY4bGVuOworICAgIGNoYXIgKnV0ZjggPSBnX3V0ZjE2X3RvX3V0Zjgoc3RyaW5nLCBsZW5ndGgs
IDAsICZ1dGY4bGVuLCAwKTsKKworICAgIC8vIEZJWE1FOiBhc3N1bWVzIG5vIHN1cnJvZ2F0ZSBw
YWlycworCisgICAgaXRlcmF0b3ItPm1fdHlwZSA9IHR5cGU7CisgICAgaXRlcmF0b3ItPm1fbGVu
Z3RoID0gbGVuZ3RoOworICAgIGl0ZXJhdG9yLT5tX2xvZ19hdHRycyA9IGdfbmV3MChQYW5nb0xv
Z0F0dHIsIGxlbmd0aCArIDEpOworICAgIGl0ZXJhdG9yLT5tX2luZGV4ID0gLTE7CisgICAgcGFu
Z29fZ2V0X2xvZ19hdHRycyh1dGY4LCB1dGY4bGVuLCAtMSwgMCwgaXRlcmF0b3ItPm1fbG9nX2F0
dHJzLCBsZW5ndGggKyAxKTsKKworICAgIGdfZnJlZSh1dGY4KTsKKworICAgIHJldHVybiBpdGVy
YXRvcjsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVk
Q2hhcmFjdGVyQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVy
YXRvciogc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVy
YXRvcihjcmVhdGVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljQ2hhcmFj
dGVyQnJlYWtJdGVyYXRvciwgVUJSS19DSEFSQUNURVIsIHN0cmluZywgbGVuZ3RoKTsKK30KKwor
VGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9y
ID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJ
dGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkV29yZEJyZWFrSXRlcmF0
b3IsCisgICAgICAgIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBVQlJLX1dPUkQsIHN0cmluZywg
bGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGxpbmVCcmVha0l0ZXJhdG9yKGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZExp
bmVCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBz
dGF0aWNMaW5lQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVk
TGluZUJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yLCBVQlJL
X0xJTkUsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNl
QnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIHN0
YXRpYyBib29sIGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0
aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvcjsKKyAgICBy
ZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkU2VudGVuY2VCcmVha0l0ZXJhdG9yLAorICAgICAg
ICBzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIFVCUktfU0VOVEVOQ0UsIHN0cmluZywgbGVu
Z3RoKTsKK30KKworaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sK
KyAgICByZXR1cm4gdGV4dEJyZWFrRm9sbG93aW5nKGJpLCAtMSk7Cit9CisKK2ludCB0ZXh0QnJl
YWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdGV4dEJyZWFrUHJl
Y2VkaW5nKGJpLCBiaS0+bV9sZW5ndGggKyAxKTsKK30KKworaW50IHRleHRCcmVha05leHQoVGV4
dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIGZvciAoaW50IGkgPSBiaS0+bV9pbmRleCArIDE7
IGkgPD0gYmktPm1fbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJS
S19MSU5FICYmIGJpLT5tX2xvZ19hdHRyc1tpXS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAg
ICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNl
IGlmIChiaS0+bV90eXBlID09IFVCUktfV09SRCAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dv
cmRfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfZW5kKSkgeworICAgICAgICAgICAgYmktPm1f
aW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmkt
Pm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfY3Vyc29y
X3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0Ug
JiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9zdGFydAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmktPm1fbG9nX2F0dHJzW2ld
LmlzX3NlbnRlbmNlX2VuZCkpIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUZXh0QnJlYWtE
b25lOworfQorCitpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQor
eworICAgIGZvciAoaW50IGkgPSBiaS0+bV9pbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAg
ICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNf
bGluZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYg
KGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX2Vu
ZCkpIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBp
OworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmkt
Pm1fbG9nX2F0dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikgeworICAgICAgICAgICAgYmktPm1f
aW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmkt
Pm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNfc2VudGVu
Y2Vfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAgICAgICAg
ICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gdGV4dEJyZWFrRmlyc3QoYmkpOworfQorCitpbnQgdGV4dEJyZWFrUHJl
Y2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBiaS0+bV9pbmRl
eCA9IHBvczsKKyAgICByZXR1cm4gdGV4dEJyZWFrUHJldmlvdXMoYmkpOworfQorCitpbnQgdGV4
dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBp
ZiAocG9zIDwgMCkKKyAgICAgICAgcG9zID0gLTE7CisgICAgYmktPm1faW5kZXggPSBwb3M7Cisg
ICAgcmV0dXJuIHRleHRCcmVha05leHQoYmkpOworfQorCitpbnQgdGV4dEJyZWFrQ3VycmVudChU
ZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIGJpLT5tX2luZGV4OworfQorCiti
b29sIGlzVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBp
ZiAoYmktPm1faW5kZXggPj0gMCkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJ
TkUgJiYgYmktPm1fbG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19saW5lX2JyZWFrKSB7CisgICAg
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVC
UktfV09SRCAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX3dvcmRfZW5kKSB7Cisg
ICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09
IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfY2hhcl9i
cmVhaykgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0gZWxzZSBpZiAoYmkt
Pm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0u
aXNfc2VudGVuY2VfZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENvZGVjR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
MDMwZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0
Q29kZWNHdGsuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggSsODwrxyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q29kZWNHdGsuaCIKKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwordXNpbmcgc3RkOjph
dXRvX3B0cjsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0
IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OworICAgIAorc3RhdGljIGF1dG9f
cHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjR3RrKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBhdXRvX3B0cjxUZXh0Q29kZWM+KG5ldyBU
ZXh0Q29kZWNHdGsoZW5jb2RpbmcpKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
QmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAg
ICByZWdpc3RyYXIoIlVURi04IiwgIlVURi04Iik7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpy
ZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBy
ZWdpc3RyYXIoIlVURi04IiwgbmV3VGV4dENvZGVjR3RrLCAwKTsKK30KKwordm9pZCBUZXh0Q29k
ZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
ciByZWdpc3RyYXIpCit7CisgICAgLy8gRklYTUUgaG93IHRvIGdldCBzdXBwb3J0ZWQgZW5jb2Rp
bmdzPworCisgICAgcmVnaXN0cmFyKCJVVEYtOCIsICJVVEYtOCIpOworICAgIHJlZ2lzdHJhcigi
SVNPLTg4NTktMSIsICJJU08tODg1OS0xIik7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdp
c3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAg
Ly8gRklYTUUgaG93IHRvIGdldCBzdXBwb3J0ZWQgZW5jb2RpbmdzPworCisgICAgcmVnaXN0cmFy
KCJVVEYtOCIsIG5ld1RleHRDb2RlY0d0aywgMCk7CisgICAgcmVnaXN0cmFyKCJJU08tODg1OS0x
IiwgbmV3VGV4dENvZGVjR3RrLCAwKTsKK30KKworVGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGso
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKKyAgICA6IG1fZW5jb2RpbmcoZW5jb2Rpbmcp
CisgICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkKKyAgICAsIG1faWNvbnZEZWNvZGVyKChHSUNv
bnYpIC0xKQorICAgICwgbV9pY29udkVuY29kZXIoKEdJQ29udikgLTEpCit7Cit9CisKK1RleHRD
b2RlY0d0azo6flRleHRDb2RlY0d0aygpCit7CisgICAgcmVsZWFzZUlDb252KCk7Cit9CisKK3Zv
aWQgVGV4dENvZGVjR3RrOjpyZWxlYXNlSUNvbnYoKSBjb25zdAoreworICAgIGlmIChtX2ljb252
RGVjb2RlciAhPSAoR0lDb252KSAtMSkgeworICAgICAgICBnX2ljb252X2Nsb3NlKG1faWNvbnZE
ZWNvZGVyKTsKKyAgICAgICAgbV9pY29udkRlY29kZXIgPSAoR0lDb252KSAtMTsKKyAgICB9Cisg
ICAgaWYgKG1faWNvbnZFbmNvZGVyICE9IChHSUNvbnYpIC0xKSB7CisgICAgICAgIGdfaWNvbnZf
Y2xvc2UobV9pY29udkVuY29kZXIpOworICAgICAgICBtX2ljb252RW5jb2RlciA9IChHSUNvbnYp
IC0xOworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RGVjb2Rlcigp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1faWNvbnZEZWNvZGVyID09IChHSUNvbnYpIC0xKTsKKwor
ICAgIG1faWNvbnZEZWNvZGVyID0gZ19pY29udl9vcGVuKCJVVEYtMTYiLCBtX2VuY29kaW5nLm5h
bWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkVuY29kZXIoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2ljb252RW5jb2RlciA9PSAoR0lDb252KSAtMSk7CisKKyAgICBt
X2ljb252RW5jb2RlciA9IGdfaWNvbnZfb3BlbihtX2VuY29kaW5nLm5hbWUoKSwgIlVURi0xNiIp
OworfQorCitTdHJpbmcgVGV4dENvZGVjR3RrOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KQoreworICAgIC8vIEdldCBhIGNvbnZlcnRlciBmb3IgdGhlIHBhc3NlZC1pbiBlbmNvZGluZy4K
KyAgICBpZiAobV9pY29udkRlY29kZXIgPT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgY3JlYXRl
SUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2ljb252RGVjb2RlciAhPSAoR0lDb252
KSAtMSk7CisgICAgICAgIGlmIChtX2ljb252RGVjb2RlciA9PSAoR0lDb252KSAtMSkgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJlcnJvciBjcmVhdGluZyBJQ29udiBlbmNvZGVyIGV2ZW4gdGhv
dWdoIGVuY29kaW5nIHdhcyBpbiB0YWJsZSIpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJy
ID0gTlVMTDsKKyAgICBVQ2hhciAqYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGdf
Y29udmVydF93aXRoX2ljb252KGJ5dGVzLCBsZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAwLCAmY291
bnQsICZlcnIpKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lDb252IGNv
bnZlcnNpb24gZXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIGFwcGVuZE9taXR0aW5nQk9NKHJlc3VsdCwgYnVm
ZmVyLCBjb3VudCAvIHNpemVvZihVQ2hhcikpOworCisgICAgZ19mcmVlKGJ1ZmZlcik7CisKKyAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworfQorCitDU3RyaW5nIFRleHRDb2RlY0d0
azo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29k
YWJsZUhhbmRsaW5nIGhhbmRsaW5nKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1
cm4gIiI7CisKKyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gKEdJQ29udikgLTEpCisgICAgICAg
IGNyZWF0ZUlDb252RW5jb2RlcigpOworICAgIGlmIChtX2ljb252RW5jb2RlciA9PSAoR0lDb252
KSAtMSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIHNpemVfdCBjb3VudDsKKyAg
ICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgY2hhciAqYnVmZmVyID0gZ19jb252ZXJ0X3dpdGhf
aWNvbnYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCAq
IHNpemVvZihVQ2hhciksIG1faWNvbnZFbmNvZGVyLCAwLCAmY291bnQsICZlcnIpOworICAgIGlm
IChlcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHSUNvbnYgY29udmVyc2lvbiBlcnJvciIpOwor
ICAgICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIH0KKworICAgIENTdHJpbmcgcmVzdWx0ID0g
Q1N0cmluZyhidWZmZXIsIGNvdW50KTsKKworICAgIGdfZnJlZShidWZmZXIpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wOTU4MTAwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q29kZWNHdGsuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSsODwrxyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgVGV4dENvZGVjR1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2luY2x1ZGUg
PGdsaWIuaD4KKworI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBUZXh0Q29kZWNHdGsgOiBw
dWJsaWMgVGV4dENvZGVjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1l
UmVnaXN0cmFyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOworCisgICAgICAgIFRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5j
b2RpbmcmKTsKKyAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjR3RrKCk7CisKKyAgICAgICAgdmly
dHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
LCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgICAgIHZpcnR1YWwgQ1N0
cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZEZWNvZGVyKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgcmVsZWFzZUlDb252KCkgY29uc3Q7CisKKyAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5j
b2Rpbmc7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5z
aWduZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZXNbMTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xl
IG11bHRpLWJ5dGUgY2hhcmFjdGVyICAgICAgICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9p
Y29udkRlY29kZXI7CisgICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworICAg
ICAgICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0Q29kZWNHVEtfaApkaWZmIC0tZ2l0IGEv
Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDg4ZGMyZGMuLmNiZWZlZDUgMTAwNjQ0
Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTEzNSwxOCArMTM1LDE4
IEBAIGZpCiAjIGRldGVybWluZSB0aGUgVW5pY29kZSBiYWNrZW5kCiBBQ19NU0dfQ0hFQ0tJTkco
W3RoZSBVbmljb2RlIGJhY2tlbmQgdG8gdXNlXSkKIEFDX0FSR19XSVRIKHVuaWNvZGVfYmFja2Vu
ZCwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8
OkBpY3VAOj5AXSwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1i
YWNrZW5kPUA8OkBpY3UvZ2xpYkA6PkBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1Nl
bGVjdCBVbmljb2RlIGJhY2tlbmQgW2RlZmF1bHQ9aWN1XV0pLAotICAgICAgICAgICAgW10sW3Vu
aWNvZGVfYmFja2VuZD0iaWN1Il0pCisgICAgICAgICAgICBbXSxbd2l0aF91bmljb2RlX2JhY2tl
bmQ9ImljdSJdKQogCi1jYXNlICIkdW5pY29kZV9iYWNrZW5kIiBpbgotICAgICBpY3UpIDs7Ci0g
ICAgICopIEFDX01TR19FUlJPUihbSW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1
Ll0pIDs7CitjYXNlICIkd2l0aF91bmljb2RlX2JhY2tlbmQiIGluCisgICAgIGljdXxnbGliKSA7
OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJl
IGljdSBvciBnbGliLl0pIDs7CiBlc2FjCiAKLUFDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tl
bmRdKQorQUNfTVNHX1JFU1VMVChbJHdpdGhfdW5pY29kZV9iYWNrZW5kXSkKIAotaWYgdGVzdCAi
JHVuaWNvZGVfYmFja2VuZCIgPSAiaWN1IjsgdGhlbgoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9i
YWNrZW5kIiA9ICJpY3UiOyB0aGVuCiAgICAjIGNoZWNrIGZvciBpY3UtY29uZmlnCiAgICBpZiB0
ZXN0ICIkb3NfZGFyd2luIiA9ICJ5ZXMiOyB0aGVuCiAgICAgICAgVU5JQ09ERV9DRkxBR1M9Ii1J
XCQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9pY3UgLUlcJChzcmNkaXIpL1dlYkNvcmUvaWN1IgpA
QCAtMTY1LDYgKzE2NSwxMCBAQCBpZiB0ZXN0ICIkdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0
aGVuCiAgICBmaQogZmkKIAoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGli
IjsgdGhlbgorICAgIFBLR19DSEVDS19NT0RVTEVTKFtVTklDT0RFXSwgW2dsaWItMi4wIHBhbmdv
ID49IDEuMjEuMF0pCitmaQorCiBBQ19TVUJTVChbVU5JQ09ERV9DRkxBR1NdKQogQUNfU1VCU1Qo
W1VOSUNPREVfTElCU10pCiAKQEAgLTQ5OCw2ICs1MDIsMTAgQEAgQU1fQ09ORElUSU9OQUwoW1RB
UkdFVF9XSU4zMl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gIndpbjMyIl0pCiBBTV9DT05ESVRJ
T05BTChbVEFSR0VUX1FVQVJUWl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQog
QU1fQ09ORElUSU9OQUwoW1RBUkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0g
ImRpcmVjdGZiIl0pCiAKKyMgVW5pY29kZSBiYWNrZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElU
SU9OQUwoW1VTRV9JQ1VfVU5JQ09ERV0sIFt0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0g
ImljdSJdKQorQU1fQ09ORElUSU9OQUwoW1VTRV9HTElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhf
dW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIl0pCisKICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFs
cwogQU1fQ09ORElUSU9OQUwoW1VTRV9DVVJMXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIg
PSAiY3VybCJdKQogQU1fQ09ORElUSU9OQUwoW1VTRV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBf
YmFja2VuZCIgPSAic291cCJdKQpAQCAtNTQwLDcgKzU0OCw3IEBAIFdlYktpdCB3YXMgY29uZmln
dXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAg
RW5hYmxlIGRlYnVnZ2luZyAoc2xvdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkZW5hYmxlX2RlYnVnCiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCi0gVW5pY29kZSBiYWNrZW5kICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkdW5pY29kZV9iYWNrZW5k
CisgVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiAkd2l0aF91bmljb2RlX2JhY2tlbmQKICBIVFRQIGJhY2tlbmQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2h0dHBfYmFja2VuZAogIEZvbnQg
YmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdp
dGhfZm9udF9iYWNrZW5kCiAgT3B0aW1pemVkIG1lbW9yeSBhbGxvY2F0b3IgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9jCgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23001</attachid>
            <date>2008-08-26 09:03:46 -0700</date>
            <delta_ts>2008-09-02 13:04:11 -0700</delta_ts>
            <desc>Patch updated for trunk revision 35916</desc>
            <filename>webcore_glib_removal.patch</filename>
            <type>text/plain</type>
            <size>47710</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHJldmlzaW9uIDM1OTE2KQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAicXQ0L1VuaWNvZGVRdDQuaCIKICNlbGlmIFVTRShJ
Q1VfVU5JQ09ERSkKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvVW5pY29kZUljdS5oPgorI2Vs
aWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVH
TGliLmg+CiAjZWxzZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUgaW1wbGVtZW50YXRpb24iCiAj
ZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVH
TGliLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1Vu
aWNvZGVHTGliLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTc3IEBACisvLyAtKi0gYy1iYXNp
Yy1vZmZzZXQ6IDIgLSotCisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGli
cmFyaWVzCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55
cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIg
PGpAYml0cm9uLmNoPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBLSlNfVU5JQ09ERV9HTElCX0gK
KyNkZWZpbmUgS0pTX1VOSUNPREVfR0xJQl9ICisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCit0eXBlZGVmIHVpbnQxNl90IFVDaGFyOwordHlw
ZWRlZiBpbnQzMl90IFVDaGFyMzI7CisKKy8vIGNvcGllZCBmcm9tIEdMaWIKKworLyogVGFibGUg
b2YgY2FzZWZvbGRpbmcgY2FzZXMgdGhhdCBjYW4ndCBiZSBkZXJpdmVkIGJ5IGxvd2VyY2FzaW5n
CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICBndWludDE2IGNoOworICBnY2hhciBkYXRh
WzddOworfSBjYXNlZm9sZF90YWJsZVtdID0geworICB7IDB4MDBiNSwgIlx4Y2VceGJjIiB9LAor
ICB7IDB4MDBkZiwgIlx4NzNceDczIiB9LAorICB7IDB4MDEzMCwgIlx4NjlceGNjXHg4NyIgfSwK
KyAgeyAweDAxNDksICJceGNhXHhiY1x4NmUiIH0sCisgIHsgMHgwMTdmLCAiXHg3MyIgfSwKKyAg
eyAweDAxZjAsICJceDZhXHhjY1x4OGMiIH0sCisgIHsgMHgwMzQ1LCAiXHhjZVx4YjkiIH0sCisg
IHsgMHgwMzkwLCAiXHhjZVx4YjlceGNjXHg4OFx4Y2NceDgxIiB9LAorICB7IDB4MDNiMCwgIlx4
Y2ZceDg1XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDAzYzIsICJceGNmXHg4MyIgfSwKKyAg
eyAweDAzZDAsICJceGNlXHhiMiIgfSwKKyAgeyAweDAzZDEsICJceGNlXHhiOCIgfSwKKyAgeyAw
eDAzZDUsICJceGNmXHg4NiIgfSwKKyAgeyAweDAzZDYsICJceGNmXHg4MCIgfSwKKyAgeyAweDAz
ZjAsICJceGNlXHhiYSIgfSwKKyAgeyAweDAzZjEsICJceGNmXHg4MSIgfSwKKyAgeyAweDAzZjUs
ICJceGNlXHhiNSIgfSwKKyAgeyAweDA1ODcsICJceGQ1XHhhNVx4ZDZceDgyIiB9LAorICB7IDB4
MWU5NiwgIlx4NjhceGNjXHhiMSIgfSwKKyAgeyAweDFlOTcsICJceDc0XHhjY1x4ODgiIH0sCisg
IHsgMHgxZTk4LCAiXHg3N1x4Y2NceDhhIiB9LAorICB7IDB4MWU5OSwgIlx4NzlceGNjXHg4YSIg
fSwKKyAgeyAweDFlOWEsICJceDYxXHhjYVx4YmUiIH0sCisgIHsgMHgxZTliLCAiXHhlMVx4Yjlc
eGExIiB9LAorICB7IDB4MWY1MCwgIlx4Y2ZceDg1XHhjY1x4OTMiIH0sCisgIHsgMHgxZjUyLCAi
XHhjZlx4ODVceGNjXHg5M1x4Y2NceDgwIiB9LAorICB7IDB4MWY1NCwgIlx4Y2ZceDg1XHhjY1x4
OTNceGNjXHg4MSIgfSwKKyAgeyAweDFmNTYsICJceGNmXHg4NVx4Y2NceDkzXHhjZFx4ODIiIH0s
CisgIHsgMHgxZjgwLCAiXHhlMVx4YmNceDgwXHhjZVx4YjkiIH0sCisgIHsgMHgxZjgxLCAiXHhl
MVx4YmNceDgxXHhjZVx4YjkiIH0sCisgIHsgMHgxZjgyLCAiXHhlMVx4YmNceDgyXHhjZVx4Yjki
IH0sCisgIHsgMHgxZjgzLCAiXHhlMVx4YmNceDgzXHhjZVx4YjkiIH0sCisgIHsgMHgxZjg0LCAi
XHhlMVx4YmNceDg0XHhjZVx4YjkiIH0sCisgIHsgMHgxZjg1LCAiXHhlMVx4YmNceDg1XHhjZVx4
YjkiIH0sCisgIHsgMHgxZjg2LCAiXHhlMVx4YmNceDg2XHhjZVx4YjkiIH0sCisgIHsgMHgxZjg3
LCAiXHhlMVx4YmNceDg3XHhjZVx4YjkiIH0sCisgIHsgMHgxZjg4LCAiXHhlMVx4YmNceDgwXHhj
ZVx4YjkiIH0sCisgIHsgMHgxZjg5LCAiXHhlMVx4YmNceDgxXHhjZVx4YjkiIH0sCisgIHsgMHgx
ZjhhLCAiXHhlMVx4YmNceDgyXHhjZVx4YjkiIH0sCisgIHsgMHgxZjhiLCAiXHhlMVx4YmNceDgz
XHhjZVx4YjkiIH0sCisgIHsgMHgxZjhjLCAiXHhlMVx4YmNceDg0XHhjZVx4YjkiIH0sCisgIHsg
MHgxZjhkLCAiXHhlMVx4YmNceDg1XHhjZVx4YjkiIH0sCisgIHsgMHgxZjhlLCAiXHhlMVx4YmNc
eDg2XHhjZVx4YjkiIH0sCisgIHsgMHgxZjhmLCAiXHhlMVx4YmNceDg3XHhjZVx4YjkiIH0sCisg
IHsgMHgxZjkwLCAiXHhlMVx4YmNceGEwXHhjZVx4YjkiIH0sCisgIHsgMHgxZjkxLCAiXHhlMVx4
YmNceGExXHhjZVx4YjkiIH0sCisgIHsgMHgxZjkyLCAiXHhlMVx4YmNceGEyXHhjZVx4YjkiIH0s
CisgIHsgMHgxZjkzLCAiXHhlMVx4YmNceGEzXHhjZVx4YjkiIH0sCisgIHsgMHgxZjk0LCAiXHhl
MVx4YmNceGE0XHhjZVx4YjkiIH0sCisgIHsgMHgxZjk1LCAiXHhlMVx4YmNceGE1XHhjZVx4Yjki
IH0sCisgIHsgMHgxZjk2LCAiXHhlMVx4YmNceGE2XHhjZVx4YjkiIH0sCisgIHsgMHgxZjk3LCAi
XHhlMVx4YmNceGE3XHhjZVx4YjkiIH0sCisgIHsgMHgxZjk4LCAiXHhlMVx4YmNceGEwXHhjZVx4
YjkiIH0sCisgIHsgMHgxZjk5LCAiXHhlMVx4YmNceGExXHhjZVx4YjkiIH0sCisgIHsgMHgxZjlh
LCAiXHhlMVx4YmNceGEyXHhjZVx4YjkiIH0sCisgIHsgMHgxZjliLCAiXHhlMVx4YmNceGEzXHhj
ZVx4YjkiIH0sCisgIHsgMHgxZjljLCAiXHhlMVx4YmNceGE0XHhjZVx4YjkiIH0sCisgIHsgMHgx
ZjlkLCAiXHhlMVx4YmNceGE1XHhjZVx4YjkiIH0sCisgIHsgMHgxZjllLCAiXHhlMVx4YmNceGE2
XHhjZVx4YjkiIH0sCisgIHsgMHgxZjlmLCAiXHhlMVx4YmNceGE3XHhjZVx4YjkiIH0sCisgIHsg
MHgxZmEwLCAiXHhlMVx4YmRceGEwXHhjZVx4YjkiIH0sCisgIHsgMHgxZmExLCAiXHhlMVx4YmRc
eGExXHhjZVx4YjkiIH0sCisgIHsgMHgxZmEyLCAiXHhlMVx4YmRceGEyXHhjZVx4YjkiIH0sCisg
IHsgMHgxZmEzLCAiXHhlMVx4YmRceGEzXHhjZVx4YjkiIH0sCisgIHsgMHgxZmE0LCAiXHhlMVx4
YmRceGE0XHhjZVx4YjkiIH0sCisgIHsgMHgxZmE1LCAiXHhlMVx4YmRceGE1XHhjZVx4YjkiIH0s
CisgIHsgMHgxZmE2LCAiXHhlMVx4YmRceGE2XHhjZVx4YjkiIH0sCisgIHsgMHgxZmE3LCAiXHhl
MVx4YmRceGE3XHhjZVx4YjkiIH0sCisgIHsgMHgxZmE4LCAiXHhlMVx4YmRceGEwXHhjZVx4Yjki
IH0sCisgIHsgMHgxZmE5LCAiXHhlMVx4YmRceGExXHhjZVx4YjkiIH0sCisgIHsgMHgxZmFhLCAi
XHhlMVx4YmRceGEyXHhjZVx4YjkiIH0sCisgIHsgMHgxZmFiLCAiXHhlMVx4YmRceGEzXHhjZVx4
YjkiIH0sCisgIHsgMHgxZmFjLCAiXHhlMVx4YmRceGE0XHhjZVx4YjkiIH0sCisgIHsgMHgxZmFk
LCAiXHhlMVx4YmRceGE1XHhjZVx4YjkiIH0sCisgIHsgMHgxZmFlLCAiXHhlMVx4YmRceGE2XHhj
ZVx4YjkiIH0sCisgIHsgMHgxZmFmLCAiXHhlMVx4YmRceGE3XHhjZVx4YjkiIH0sCisgIHsgMHgx
ZmIyLCAiXHhlMVx4YmRceGIwXHhjZVx4YjkiIH0sCisgIHsgMHgxZmIzLCAiXHhjZVx4YjFceGNl
XHhiOSIgfSwKKyAgeyAweDFmYjQsICJceGNlXHhhY1x4Y2VceGI5IiB9LAorICB7IDB4MWZiNiwg
Ilx4Y2VceGIxXHhjZFx4ODIiIH0sCisgIHsgMHgxZmI3LCAiXHhjZVx4YjFceGNkXHg4Mlx4Y2Vc
eGI5IiB9LAorICB7IDB4MWZiYywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgIHsgMHgxZmJlLCAi
XHhjZVx4YjkiIH0sCisgIHsgMHgxZmMyLCAiXHhlMVx4YmRceGI0XHhjZVx4YjkiIH0sCisgIHsg
MHgxZmMzLCAiXHhjZVx4YjdceGNlXHhiOSIgfSwKKyAgeyAweDFmYzQsICJceGNlXHhhZVx4Y2Vc
eGI5IiB9LAorICB7IDB4MWZjNiwgIlx4Y2VceGI3XHhjZFx4ODIiIH0sCisgIHsgMHgxZmM3LCAi
XHhjZVx4YjdceGNkXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWZjYywgIlx4Y2VceGI3XHhjZVx4
YjkiIH0sCisgIHsgMHgxZmQyLCAiXHhjZVx4YjlceGNjXHg4OFx4Y2NceDgwIiB9LAorICB7IDB4
MWZkMywgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDFmZDYsICJceGNlXHhi
OVx4Y2RceDgyIiB9LAorICB7IDB4MWZkNywgIlx4Y2VceGI5XHhjY1x4ODhceGNkXHg4MiIgfSwK
KyAgeyAweDFmZTIsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODAiIH0sCisgIHsgMHgxZmUzLCAi
XHhjZlx4ODVceGNjXHg4OFx4Y2NceDgxIiB9LAorICB7IDB4MWZlNCwgIlx4Y2ZceDgxXHhjY1x4
OTMiIH0sCisgIHsgMHgxZmU2LCAiXHhjZlx4ODVceGNkXHg4MiIgfSwKKyAgeyAweDFmZTcsICJc
eGNmXHg4NVx4Y2NceDg4XHhjZFx4ODIiIH0sCisgIHsgMHgxZmYyLCAiXHhlMVx4YmRceGJjXHhj
ZVx4YjkiIH0sCisgIHsgMHgxZmYzLCAiXHhjZlx4ODlceGNlXHhiOSIgfSwKKyAgeyAweDFmZjQs
ICJceGNmXHg4ZVx4Y2VceGI5IiB9LAorICB7IDB4MWZmNiwgIlx4Y2ZceDg5XHhjZFx4ODIiIH0s
CisgIHsgMHgxZmY3LCAiXHhjZlx4ODlceGNkXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWZmYywg
Ilx4Y2ZceDg5XHhjZVx4YjkiIH0sCisgIHsgMHgyMTYwLCAiXHhlMlx4ODVceGIwIiB9LAorICB7
IDB4MjE2MSwgIlx4ZTJceDg1XHhiMSIgfSwKKyAgeyAweDIxNjIsICJceGUyXHg4NVx4YjIiIH0s
CisgIHsgMHgyMTYzLCAiXHhlMlx4ODVceGIzIiB9LAorICB7IDB4MjE2NCwgIlx4ZTJceDg1XHhi
NCIgfSwKKyAgeyAweDIxNjUsICJceGUyXHg4NVx4YjUiIH0sCisgIHsgMHgyMTY2LCAiXHhlMlx4
ODVceGI2IiB9LAorICB7IDB4MjE2NywgIlx4ZTJceDg1XHhiNyIgfSwKKyAgeyAweDIxNjgsICJc
eGUyXHg4NVx4YjgiIH0sCisgIHsgMHgyMTY5LCAiXHhlMlx4ODVceGI5IiB9LAorICB7IDB4MjE2
YSwgIlx4ZTJceDg1XHhiYSIgfSwKKyAgeyAweDIxNmIsICJceGUyXHg4NVx4YmIiIH0sCisgIHsg
MHgyMTZjLCAiXHhlMlx4ODVceGJjIiB9LAorICB7IDB4MjE2ZCwgIlx4ZTJceDg1XHhiZCIgfSwK
KyAgeyAweDIxNmUsICJceGUyXHg4NVx4YmUiIH0sCisgIHsgMHgyMTZmLCAiXHhlMlx4ODVceGJm
IiB9LAorICB7IDB4MjRiNiwgIlx4ZTJceDkzXHg5MCIgfSwKKyAgeyAweDI0YjcsICJceGUyXHg5
M1x4OTEiIH0sCisgIHsgMHgyNGI4LCAiXHhlMlx4OTNceDkyIiB9LAorICB7IDB4MjRiOSwgIlx4
ZTJceDkzXHg5MyIgfSwKKyAgeyAweDI0YmEsICJceGUyXHg5M1x4OTQiIH0sCisgIHsgMHgyNGJi
LCAiXHhlMlx4OTNceDk1IiB9LAorICB7IDB4MjRiYywgIlx4ZTJceDkzXHg5NiIgfSwKKyAgeyAw
eDI0YmQsICJceGUyXHg5M1x4OTciIH0sCisgIHsgMHgyNGJlLCAiXHhlMlx4OTNceDk4IiB9LAor
ICB7IDB4MjRiZiwgIlx4ZTJceDkzXHg5OSIgfSwKKyAgeyAweDI0YzAsICJceGUyXHg5M1x4OWEi
IH0sCisgIHsgMHgyNGMxLCAiXHhlMlx4OTNceDliIiB9LAorICB7IDB4MjRjMiwgIlx4ZTJceDkz
XHg5YyIgfSwKKyAgeyAweDI0YzMsICJceGUyXHg5M1x4OWQiIH0sCisgIHsgMHgyNGM0LCAiXHhl
Mlx4OTNceDllIiB9LAorICB7IDB4MjRjNSwgIlx4ZTJceDkzXHg5ZiIgfSwKKyAgeyAweDI0YzYs
ICJceGUyXHg5M1x4YTAiIH0sCisgIHsgMHgyNGM3LCAiXHhlMlx4OTNceGExIiB9LAorICB7IDB4
MjRjOCwgIlx4ZTJceDkzXHhhMiIgfSwKKyAgeyAweDI0YzksICJceGUyXHg5M1x4YTMiIH0sCisg
IHsgMHgyNGNhLCAiXHhlMlx4OTNceGE0IiB9LAorICB7IDB4MjRjYiwgIlx4ZTJceDkzXHhhNSIg
fSwKKyAgeyAweDI0Y2MsICJceGUyXHg5M1x4YTYiIH0sCisgIHsgMHgyNGNkLCAiXHhlMlx4OTNc
eGE3IiB9LAorICB7IDB4MjRjZSwgIlx4ZTJceDkzXHhhOCIgfSwKKyAgeyAweDI0Y2YsICJceGUy
XHg5M1x4YTkiIH0sCisgIHsgMHhmYjAwLCAiXHg2Nlx4NjYiIH0sCisgIHsgMHhmYjAxLCAiXHg2
Nlx4NjkiIH0sCisgIHsgMHhmYjAyLCAiXHg2Nlx4NmMiIH0sCisgIHsgMHhmYjAzLCAiXHg2Nlx4
NjZceDY5IiB9LAorICB7IDB4ZmIwNCwgIlx4NjZceDY2XHg2YyIgfSwKKyAgeyAweGZiMDUsICJc
eDczXHg3NCIgfSwKKyAgeyAweGZiMDYsICJceDczXHg3NCIgfSwKKyAgeyAweGZiMTMsICJceGQ1
XHhiNFx4ZDVceGI2IiB9LAorICB7IDB4ZmIxNCwgIlx4ZDVceGI0XHhkNVx4YTUiIH0sCisgIHsg
MHhmYjE1LCAiXHhkNVx4YjRceGQ1XHhhYiIgfSwKKyAgeyAweGZiMTYsICJceGQ1XHhiZVx4ZDVc
eGI2IiB9LAorICB7IDB4ZmIxNywgIlx4ZDVceGI0XHhkNVx4YWQiIH0sCit9OworCisKKy8vIHNv
bWUgZGVmaW5lcyBmcm9tIElDVQorCisjZGVmaW5lIFUxNl9JU19MRUFEKGMpICgoKGMpJjB4ZmZm
ZmZjMDApPT0weGQ4MDApCisjZGVmaW5lIFUxNl9JU19UUkFJTChjKSAoKChjKSYweGZmZmZmYzAw
KT09MHhkYzAwKQorI2RlZmluZSBVMTZfU1VSUk9HQVRFX09GRlNFVCAoKDB4ZDgwMDw8MTBVTCkr
MHhkYzAwLTB4MTAwMDApCisjZGVmaW5lIFUxNl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFp
bCkgXAorICAgICgoKFVDaGFyMzIpKGxlYWQpPDwxMFVMKSsoVUNoYXIzMikodHJhaWwpLVUxNl9T
VVJST0dBVEVfT0ZGU0VUKQorCisjZGVmaW5lIFUxNl9MRUFEKHN1cHBsZW1lbnRhcnkpIChVQ2hh
cikoKChzdXBwbGVtZW50YXJ5KT4+MTApKzB4ZDdjMCkKKyNkZWZpbmUgVTE2X1RSQUlMKHN1cHBs
ZW1lbnRhcnkpIChVQ2hhcikoKChzdXBwbGVtZW50YXJ5KSYweDNmZil8MHhkYzAwKQorCisjZGVm
aW5lIFVfSVNfU1VSUk9HQVRFKGMpICgoKGMpJjB4ZmZmZmY4MDApPT0weGQ4MDApCisjZGVmaW5l
IFUxNl9JU19TSU5HTEUoYykgIVVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5lIFUxNl9JU19TVVJS
T0dBVEUoYykgVV9JU19TVVJST0dBVEUoYykKKyNkZWZpbmUgVTE2X0lTX1NVUlJPR0FURV9MRUFE
KGMpICgoKGMpJjB4NDAwKT09MCkKKworI2RlZmluZSBVMTZfTkVYVChzLCBpLCBsZW5ndGgsIGMp
IHsgXAorICAgIChjKT0ocylbKGkpKytdOyBcCisgICAgaWYoVTE2X0lTX0xFQUQoYykpIHsgXAor
ICAgICAgICB1aW50MTZfdCBfX2MyOyBcCisgICAgICAgIGlmKChpKTwobGVuZ3RoKSAmJiBVMTZf
SVNfVFJBSUwoX19jMj0ocylbKGkpXSkpIHsgXAorICAgICAgICAgICAgKysoaSk7IFwKKyAgICAg
ICAgICAgIChjKT1VMTZfR0VUX1NVUFBMRU1FTlRBUlkoKGMpLCBfX2MyKTsgXAorICAgICAgICB9
IFwKKyAgICB9IFwKK30KKworI2RlZmluZSBVX01BU0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCisK
K25hbWVzcGFjZSBXVEYgeworICBuYW1lc3BhY2UgVW5pY29kZSB7CisKKyAgICBlbnVtIERpcmVj
dGlvbiB7CisgICAgICBMZWZ0VG9SaWdodCwKKyAgICAgIFJpZ2h0VG9MZWZ0LAorICAgICAgRXVy
b3BlYW5OdW1iZXIsCisgICAgICBFdXJvcGVhbk51bWJlclNlcGFyYXRvciwKKyAgICAgIEV1cm9w
ZWFuTnVtYmVyVGVybWluYXRvciwKKyAgICAgIEFyYWJpY051bWJlciwKKyAgICAgIENvbW1vbk51
bWJlclNlcGFyYXRvciwKKyAgICAgIEJsb2NrU2VwYXJhdG9yLAorICAgICAgU2VnbWVudFNlcGFy
YXRvciwKKyAgICAgIFdoaXRlU3BhY2VOZXV0cmFsLAorICAgICAgT3RoZXJOZXV0cmFsLAorICAg
ICAgTGVmdFRvUmlnaHRFbWJlZGRpbmcsCisgICAgICBMZWZ0VG9SaWdodE92ZXJyaWRlLAorICAg
ICAgUmlnaHRUb0xlZnRBcmFiaWMsCisgICAgICBSaWdodFRvTGVmdEVtYmVkZGluZywKKyAgICAg
IFJpZ2h0VG9MZWZ0T3ZlcnJpZGUsCisgICAgICBQb3BEaXJlY3Rpb25hbEZvcm1hdCwKKyAgICAg
IE5vblNwYWNpbmdNYXJrLAorICAgICAgQm91bmRhcnlOZXV0cmFsCisgICAgfTsKKworICAgIGVu
dW0gRGVjb21wb3NpdGlvblR5cGUgeworICAgICAgRGVjb21wb3NpdGlvbk5vbmUsCisgICAgICBE
ZWNvbXBvc2l0aW9uQ2Fub25pY2FsLAorICAgICAgRGVjb21wb3NpdGlvbkNvbXBhdCwKKyAgICAg
IERlY29tcG9zaXRpb25DaXJjbGUsCisgICAgICBEZWNvbXBvc2l0aW9uRmluYWwsCisgICAgICBE
ZWNvbXBvc2l0aW9uRm9udCwKKyAgICAgIERlY29tcG9zaXRpb25GcmFjdGlvbiwKKyAgICAgIERl
Y29tcG9zaXRpb25Jbml0aWFsLAorICAgICAgRGVjb21wb3NpdGlvbklzb2xhdGVkLAorICAgICAg
RGVjb21wb3NpdGlvbk1lZGlhbCwKKyAgICAgIERlY29tcG9zaXRpb25OYXJyb3csCisgICAgICBE
ZWNvbXBvc2l0aW9uTm9CcmVhaywKKyAgICAgIERlY29tcG9zaXRpb25TbWFsbCwKKyAgICAgIERl
Y29tcG9zaXRpb25TcXVhcmUsCisgICAgICBEZWNvbXBvc2l0aW9uU3ViLAorICAgICAgRGVjb21w
b3NpdGlvblN1cGVyLAorICAgICAgRGVjb21wb3NpdGlvblZlcnRpY2FsLAorICAgICAgRGVjb21w
b3NpdGlvbldpZGUsCisgICAgfTsKKworICAgIGVudW0gQ2hhckNhdGVnb3J5IHsKKyAgICAgIE5v
Q2F0ZWdvcnkgPSAgMCwKKyAgICAgIE90aGVyX05vdEFzc2lnbmVkID0gVV9NQVNLKEdfVU5JQ09E
RV9VTkFTU0lHTkVEKSwKKyAgICAgIExldHRlcl9VcHBlcmNhc2UgPSBVX01BU0soR19VTklDT0RF
X1VQUEVSQ0FTRV9MRVRURVIpLAorICAgICAgTGV0dGVyX0xvd2VyY2FzZSA9IFVfTUFTSyhHX1VO
SUNPREVfTE9XRVJDQVNFX0xFVFRFUiksCisgICAgICBMZXR0ZXJfVGl0bGVjYXNlID0gVV9NQVNL
KEdfVU5JQ09ERV9USVRMRUNBU0VfTEVUVEVSKSwKKyAgICAgIExldHRlcl9Nb2RpZmllciA9IFVf
TUFTSyhHX1VOSUNPREVfTU9ESUZJRVJfTEVUVEVSKSwKKyAgICAgIExldHRlcl9PdGhlciA9IFVf
TUFTSyhHX1VOSUNPREVfT1RIRVJfTEVUVEVSKSwKKworICAgICAgTWFya19Ob25TcGFjaW5nID0g
VV9NQVNLKEdfVU5JQ09ERV9OT05fU1BBQ0lOR19NQVJLKSwKKyAgICAgIE1hcmtfRW5jbG9zaW5n
ID0gVV9NQVNLKEdfVU5JQ09ERV9FTkNMT1NJTkdfTUFSSyksCisgICAgICBNYXJrX1NwYWNpbmdD
b21iaW5pbmcgPSBVX01BU0soR19VTklDT0RFX0NPTUJJTklOR19NQVJLKSwKKworICAgICAgTnVt
YmVyX0RlY2ltYWxEaWdpdCA9IFVfTUFTSyhHX1VOSUNPREVfREVDSU1BTF9OVU1CRVIpLAorICAg
ICAgTnVtYmVyX0xldHRlciA9IFVfTUFTSyhHX1VOSUNPREVfTEVUVEVSX05VTUJFUiksCisgICAg
ICBOdW1iZXJfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX05VTUJFUiksCisKKyAgICAg
IFNlcGFyYXRvcl9TcGFjZSA9IFVfTUFTSyhHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SKSwKKyAg
ICAgIFNlcGFyYXRvcl9MaW5lID0gVV9NQVNLKEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRPUiksCisg
ICAgICBTZXBhcmF0b3JfUGFyYWdyYXBoID0gVV9NQVNLKEdfVU5JQ09ERV9QQVJBR1JBUEhfU0VQ
QVJBVE9SKSwKKworICAgICAgT3RoZXJfQ29udHJvbCA9IFVfTUFTSyhHX1VOSUNPREVfQ09OVFJP
TCksCisgICAgICBPdGhlcl9Gb3JtYXQgPSBVX01BU0soR19VTklDT0RFX0ZPUk1BVCksCisgICAg
ICBPdGhlcl9Qcml2YXRlVXNlID0gVV9NQVNLKEdfVU5JQ09ERV9QUklWQVRFX1VTRSksCisgICAg
ICBPdGhlcl9TdXJyb2dhdGUgPSBVX01BU0soR19VTklDT0RFX1NVUlJPR0FURSksCisKKyAgICAg
IFB1bmN0dWF0aW9uX0Rhc2ggPSBVX01BU0soR19VTklDT0RFX0RBU0hfUFVOQ1RVQVRJT04pLAor
ICAgICAgUHVuY3R1YXRpb25fT3BlbiA9IFVfTUFTSyhHX1VOSUNPREVfT1BFTl9QVU5DVFVBVElP
TiksCisgICAgICBQdW5jdHVhdGlvbl9DbG9zZSA9IFVfTUFTSyhHX1VOSUNPREVfQ0xPU0VfUFVO
Q1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fQ29ubmVjdG9yID0gVV9NQVNLKEdfVU5JQ09E
RV9DT05ORUNUX1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX090aGVyID0gVV9NQVNL
KEdfVU5JQ09ERV9PVEhFUl9QVU5DVFVBVElPTiksCisKKyAgICAgIFN5bWJvbF9NYXRoID0gVV9N
QVNLKEdfVU5JQ09ERV9NQVRIX1NZTUJPTCksCisgICAgICBTeW1ib2xfQ3VycmVuY3kgPSBVX01B
U0soR19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCksCisgICAgICBTeW1ib2xfTW9kaWZpZXIgPSBV
X01BU0soR19VTklDT0RFX01PRElGSUVSX1NZTUJPTCksCisgICAgICBTeW1ib2xfT3RoZXIgPSBV
X01BU0soR19VTklDT0RFX09USEVSX1NZTUJPTCksCisKKyAgICAgIFB1bmN0dWF0aW9uX0luaXRp
YWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVfSU5JVElBTF9QVU5DVFVBVElPTiksCisgICAgICBQ
dW5jdHVhdGlvbl9GaW5hbFF1b3RlID0gVV9NQVNLKEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElP
TikKKyAgICB9OworCisgICAgaW5saW5lIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjaCkKKyAg
ICB7CisgICAgICAgIC8vIGFkZCBnX3VuaWNoYXJfY2FzZWZvbGQgdG8gR0xpYiB1cHN0cmVhbT8K
KworICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICBpbnQgZW5kID0gR19OX0VMRU1FTlRT
KGNhc2Vmb2xkX3RhYmxlKTsKKworICAgICAgICBpZiAoY2ggPj0gY2FzZWZvbGRfdGFibGVbc3Rh
cnRdLmNoICYmCisgICAgICAgICAgICBjaCA8PSBjYXNlZm9sZF90YWJsZVtlbmQgLSAxXS5jaCkg
eworICAgICAgICAgICAgd2hpbGUgKFRSVUUpIHsKKyAgICAgICAgICAgICAgICBpbnQgaGFsZiA9
IChzdGFydCArIGVuZCkgLyAyOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSBjYXNlZm9sZF90
YWJsZVtoYWxmXS5jaCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ191dGY4X2dldF9j
aGFyKGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmRhdGEpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaGFsZiA9PSBzdGFydCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID4gY2FzZWZvbGRfdGFibGVbaGFsZl0uY2gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBoYWxmOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVuZCA9IGhhbGY7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl90b2xvd2VyIChj
aCk7CisgICAgfQorCisgICAgaW5saW5lIGludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQg
cmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJv
cikKKyAgICB7CisgICAgICAgIEdFcnJvciAqZ2Vycm9yID0gTlVMTDsKKworICAgICAgICBjaGFy
ICp1dGY4c3JjID0gZ191dGYxNl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9y
KTsKKyAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgKnV0ZjhyZXN1
bHQgPSBnX3V0ZjhfY2FzZWZvbGQodXRmOHNyYywgLTEpOworICAgICAgICBnX2ZyZWUodXRmOHNy
Yyk7CisKKyAgICAgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICBVQ2hh
ciogdXRmMTZyZXN1bHQgPSBnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdCwgLTEsIDAsICZ1dGYx
NnJlc3VsdExlbmd0aCwgJmdlcnJvcik7CisgICAgICAgIGdfZnJlZSh1dGY4cmVzdWx0KTsKKyAg
ICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0
aCA+IHJlc3VsdExlbmd0aCkgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAg
ICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRM
ZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZyZXN1bHQsIHV0
ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGdfZnJlZSh1dGYxNnJl
c3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIH0KKworICAg
IGlubGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25z
dCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICB7CisgICAgICAg
IEdFcnJvciAqZ2Vycm9yID0gTlVMTDsKKworICAgICAgICBjaGFyICp1dGY4c3JjID0gZ191dGYx
Nl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yKTsKKyAgICAgICAgaWYgKGdl
cnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgKnV0ZjhyZXN1bHQgPSBnX3V0Zjhfc3RyZG93
bih1dGY4c3JjLCAtMSk7CisgICAgICAgIGdfZnJlZSh1dGY4c3JjKTsKKworICAgICAgICBsb25n
IHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgIFVDaGFyKiB1dGYxNnJlc3VsdCA9IGdf
dXRmOF90b191dGYxNih1dGY4cmVzdWx0LCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vy
cm9yKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhyZXN1bHQpOworICAgICAgICBpZiAoZ2Vycm9yKSB7
CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7
CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAgZ19mcmVlKHV0ZjE2cmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQor
ICAgICAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdCwgdXRmMTZyZXN1bHRMZW5ndGggKiBz
aXplb2YoVUNoYXIpKTsKKyAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKworICAgICAgICBy
ZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorCisgICAgaW5saW5lIFVDaGFyMzIgdG9M
b3dlcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl90b2xvd2VyKGMp
OworICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjKQorICAgIHsK
KyAgICAgIHJldHVybiBnX3VuaWNoYXJfdG91cHBlcihjKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
aW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIq
IHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3Ig
KmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRm
OChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsK
KyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIH0KKworICAgICAgICBjaGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X3N0cnVwKHV0ZjhzcmMs
IC0xKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhzcmMpOworCisgICAgICAgIGxvbmcgdXRmMTZyZXN1
bHRMZW5ndGggPSAtMTsKKyAgICAgICAgVUNoYXIqIHV0ZjE2cmVzdWx0ID0gZ191dGY4X3RvX3V0
ZjE2KHV0ZjhyZXN1bHQsIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3IpOworICAg
ICAgICBnX2ZyZWUodXRmOHJlc3VsdCk7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAg
ICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAg
ICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9CisgICAgICAgIG1l
bWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hh
cikpOworICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworCisgICAgICAgIHJldHVybiB1dGYx
NnJlc3VsdExlbmd0aDsKKyAgICB9CisKKyAgICBpbmxpbmUgVUNoYXIzMiB0b1RpdGxlQ2FzZShV
Q2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl90b3RpdGxlKGMpOworICAg
IH0KKworICAgIGlubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCisgICAgeworICAg
ICAgcmV0dXJuIGMgPj0gMHgwNjAwICYmIGMgPD0gMHgwNkZGOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIGlzRm9ybWF0Q2hhcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5p
Y2hhcl90eXBlKGMpID09IEdfVU5JQ09ERV9GT1JNQVQ7CisgICAgfQorCisgICAgaW5saW5lIGJv
b2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5p
Y2hhcl90eXBlKGMpID09IEdfVU5JQ09ERV9TUEFDRV9TRVBBUkFUT1I7CisgICAgfQorCisgICAg
aW5saW5lIGJvb2wgaXNQcmludGFibGVDaGFyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1
cm4gZ191bmljaGFyX2lzcHJpbnQoYyk7CisgICAgfQorICAgIAorICAgIGlubGluZSBib29sIGlz
RGlnaXQoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNkaWdpdChj
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc1B1bmN0KFVDaGFyMzIgYykKKyAgICB7Cisg
ICAgICByZXR1cm4gZ191bmljaGFyX2lzcHVuY3QoYyk7CisgICAgfQorCisgICAgaW5saW5lIFVD
aGFyMzIgbWlycm9yZWRDaGFyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICBndW5pY2hhciBtaXJy
b3IgPSAwOworICAgICAgZ191bmljaGFyX2dldF9taXJyb3JfY2hhcihjLCAmbWlycm9yKTsKKyAg
ICAgIHJldHVybiBtaXJyb3I7CisgICAgfQorCisgICAgaW5saW5lIENoYXJDYXRlZ29yeSBjYXRl
Z29yeShVQ2hhcjMyIGMpCisgICAgeworICAgICAgaWYgKGMgPiAweGZmZmYpIHsKKyAgICAgICAg
ICByZXR1cm4gTm9DYXRlZ29yeTsKKyAgICAgIH0KKyAgICAgIHJldHVybiAoQ2hhckNhdGVnb3J5
KSBVX01BU0soZ191bmljaGFyX3R5cGUoYykpOworICAgIH0KKworICAgIGlubGluZSBEaXJlY3Rp
b24gZGlyZWN0aW9uKFVDaGFyMzIgYykKKyAgICB7CisgICAgICBQYW5nb0JpZGlUeXBlIHR5cGUg
PSBwYW5nb19iaWRpX3R5cGVfZm9yX3VuaWNoYXIoYyk7CisgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0w6IHJldHVybiBMZWZ0VG9SaWdodDsKKyAgICAg
IGNhc2UgUEFOR09fQklESV9UWVBFX1I6IHJldHVybiBSaWdodFRvTGVmdDsKKyAgICAgIGNhc2Ug
UEFOR09fQklESV9UWVBFX0FMOiByZXR1cm4gUmlnaHRUb0xlZnRBcmFiaWM7CisgICAgICBjYXNl
IFBBTkdPX0JJRElfVFlQRV9MUkU6IHJldHVybiBMZWZ0VG9SaWdodEVtYmVkZGluZzsKKyAgICAg
IGNhc2UgUEFOR09fQklESV9UWVBFX1JMRTogcmV0dXJuIFJpZ2h0VG9MZWZ0RW1iZWRkaW5nOwor
ICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTFJPOiByZXR1cm4gTGVmdFRvUmlnaHRPdmVycmlk
ZTsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1JMTzogcmV0dXJuIFJpZ2h0VG9MZWZ0T3Zl
cnJpZGU7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9QREY6IHJldHVybiBQb3BEaXJlY3Rp
b25hbEZvcm1hdDsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0VOOiByZXR1cm4gRXVyb3Bl
YW5OdW1iZXI7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTjogcmV0dXJuIEFyYWJpY051
bWJlcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0VTOiByZXR1cm4gRXVyb3BlYW5OdW1i
ZXJTZXBhcmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FVDogcmV0dXJuIEV1cm9w
ZWFuTnVtYmVyVGVybWluYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0NTOiByZXR1
cm4gQ29tbW9uTnVtYmVyU2VwYXJhdG9yOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTlNN
OiByZXR1cm4gTm9uU3BhY2luZ01hcms7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9CTjog
cmV0dXJuIEJvdW5kYXJ5TmV1dHJhbDsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0I6IHJl
dHVybiBCbG9ja1NlcGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1M6IHJldHVy
biBTZWdtZW50U2VwYXJhdG9yOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfV1M6IHJldHVy
biBXaGl0ZVNwYWNlTmV1dHJhbDsKKyAgICAgIGRlZmF1bHQ6IHJldHVybiBPdGhlck5ldXRyYWw7
CisgICAgICB9IAorICAgIH0KKworICAgIGlubGluZSBib29sIGlzTG93ZXIoVUNoYXIzMiBjKQor
ICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNsb3dlcihjKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgaW50IGRpZ2l0VmFsdWUoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3Vu
aWNoYXJfZGlnaXRfdmFsdWUoYyk7CisgICAgfQorCisgICAgaW5saW5lIHVpbnQ4X3QgY29tYmlu
aW5nQ2xhc3MoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIC8vIHJldHVybiBnX3VuaWNoYXJfY29t
YmluaW5nX2NsYXNzKGMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW5saW5lIERl
Y29tcG9zaXRpb25UeXBlIGRlY29tcG9zaXRpb25UeXBlKFVDaGFyMzIgYykKKyAgICB7CisgICAg
ICAvLyBGSVhNRQorICAgICAgcmV0dXJuIERlY29tcG9zaXRpb25Ob25lOworICAgIH0KKworICAg
IGlubGluZSBpbnQgdW1lbWNhc2VjbXAoY29uc3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCBp
bnQgbGVuKQorICAgIHsKKyAgICAgIGNoYXIgKnV0ZjhhID0gZ191dGYxNl90b191dGY4KGEsIC0x
LCAwLCAwLCBOVUxMKTsKKyAgICAgIGNoYXIgKnV0ZjhiID0gZ191dGYxNl90b191dGY4KGIsIC0x
LCAwLCAwLCBOVUxMKTsKKworICAgICAgY2hhciAqZm9sZGVkQSA9IGdfdXRmOF9jYXNlZm9sZCh1
dGY4YSwgLTEpOworICAgICAgY2hhciAqZm9sZGVkQiA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4Yiwg
LTEpOworCisgICAgICBnX2ZyZWUodXRmOGEpOworICAgICAgZ19mcmVlKHV0ZjhiKTsKKworICAg
ICAgaW50IHJlc3VsdCA9IGdfdXRmOF9jb2xsYXRlKGZvbGRlZEEsIGZvbGRlZEIpOworCisgICAg
ICBnX2ZyZWUoZm9sZGVkQSk7CisgICAgICBnX2ZyZWUoZm9sZGVkQik7CisKKyAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgIH0KK30KKworI2VuZGlmCisvLyB2aW06IHRzPTIgc3c9MiBl
dApJbmRleDogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzU5MzEpCisrKyBKYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAwOC0wOC0yNiAgRG9taW5p
ayAgPHNldCBFTUFJTF9BRERSRVNTIGVudmlyb25tZW50IHZhcmlhYmxlPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ2hhbmdlTG9nOgorICAgICAg
ICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliOiBB
ZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjopOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpmb2xkQ2Fz
ZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dG9UaXRsZUNhc2UpOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc0FyYWJpY0NoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc0Zvcm1hdENoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNl
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNQcmludGFibGVDaGFyKToKKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6aXNEaWdpdCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzUHVuY3QpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjptaXJyb3JlZENoYXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjpjYXRlZ29yeSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6CisgICAg
ICAgIChXVEY6OlVuaWNvZGU6OmlzTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpkaWdp
dFZhbHVlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Y29tYmluaW5nQ2xhc3MpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjpkZWNvbXBvc2l0aW9uVHlwZSk6CisgICAgICAgIChXVEY6OlVuaWNv
ZGU6OnVtZW1jYXNlY21wKToKKworMjAwOC0wOC0yNiAgRG9taW5payAgPHNldCBFTUFJTF9BRERS
RVNTIGVudmlyb25tZW50IHZhcmlhYmxlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvVW5pY29kZS5oOgorCiAyMDA4LTA4LTI2
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZiBhbmQgVGltLgpJbmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
R05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM1OTE2KQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTUwLDkgKzUwLDE2IEBACiAjIEdsb2JhbCBmbGFncyB0byBDUFAKIGdsb2Jh
bF9jcHBmbGFncyA6PQogCitpZiBVU0VfSUNVX1VOSUNPREUKIGdsb2JhbF9jcHBmbGFncyArPSBc
Ci0JLURXVEZfVVNFX0lDVV9VTklDT0RFPTEKKyAgICAgIC1EV1RGX1VTRV9JQ1VfVU5JQ09ERT0x
CitlbmRpZgogCitpZiBVU0VfR0xJQl9VTklDT0RFCitnbG9iYWxfY3BwZmxhZ3MgKz0gXAorICAg
ICAgLURXVEZfVVNFX0dMSUJfVU5JQ09ERT0xCitlbmRpZgorCiAjIERlZmF1bHQgY29tcGlsZXIg
ZmxhZ3MKIGdsb2JhbF9jZmxhZ3MgOj0gXAogCS1XYWxsIC1XIC1XY2FzdC1hbGlnbiAtV2NoYXIt
c3Vic2NyaXB0cyAtV3JldHVybi10eXBlIFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzU5MTYpCisr
KyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU5LDE0ICsxNjU5
LDkgQEAKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAgXAogCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Qm91bmRhcmllcy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1Uu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaCBcCi0JV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCi0JV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWMuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAotCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNMYXRpbjEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCBc
CkBAIC0xOTQ1LDEwICsxOTQwLDMzIEBACiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy96bGliL3RyZWVzLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96
Y29uZi5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemxpYi5oIFwK
LQlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvenV0aWwuaCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3p1dGlsLmggCisKKyMgLS0tLQorIyBpY3Ug
dW5pY29kZSBiYWNrZW5kCisjIC0tLS0KK2lmIFVTRV9JQ1VfVU5JQ09ERQord2ViY29yZWd0a19z
b3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCitlbmRpZiAjIEVORCBVU0VfQ1VSTAogCiAj
IC0tLS0KKyMgZ2xpYiB1bmljb2RlIGJhY2tlbmQKKyMgLS0tLQoraWYgVVNFX0dMSUJfVU5JQ09E
RQord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRDb2RlY0d0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3Rr
LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAorZW5k
aWYKKworIyAtLS0tCiAjIGN1cmwgaHR0cCBiYWNrZW5kCiAjIC0tLS0KIGlmIFVTRV9DVVJMCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJvdW5kYXJp
ZXNHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUg
PGdsaWIuaD4KKworI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJ
dGVyYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBmaW5kTmV4dFdvcmRGcm9t
SW5kZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9y
d2FyZCkKK3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihj
aGFycywgbGVuKTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdGV4
dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiAh
PSBUZXh0QnJlYWtEb25lKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVu
IHRoZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFs
cGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiBnX3VuaWNoYXJf
aXNhbG51bShjaGFyc1twb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9z
aXRpb247CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBw
b3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOworICAgIH0gZWxzZSB7
CisgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7Cisg
ICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7CisgICAgICAgICAgICAv
LyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBicmVh
aworICAgICAgICAgICAgLy8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0
aW9uID4gMCAmJiBnX3VuaWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbl0pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJl
YWtQcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywg
aW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBUZXh0
QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKyAgICAq
ZW5kID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgaWYgKCplbmQgPCAw
KQorICAgICAgICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdGV4dEJy
ZWFrUHJldmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAy
MDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRleHRDb2RlY0d0ay5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCit1c2luZyBzdGQ6OmF1dG9fcHRyOwordXNpbmcg
c3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qgc2l6ZV90IENvbnZlcnNp
b25CdWZmZXJTaXplID0gMTYzODQ7CisgICAgCitzdGF0aWMgYXV0b19wdHI8VGV4dENvZGVjPiBu
ZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCop
Cit7CisgICAgcmV0dXJuIGF1dG9fcHRyPFRleHRDb2RlYz4obmV3IFRleHRDb2RlY0d0ayhlbmNv
ZGluZykpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcigiVVRG
LTgiLCAiVVRGLTgiKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVj
cyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdHJhcigiVVRGLTgi
LCBuZXdUZXh0Q29kZWNHdGssIDApOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJF
eHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sK
KyAgICAvLyBGSVhNRSBob3cgdG8gZ2V0IHN1cHBvcnRlZCBlbmNvZGluZ3M/CisKKyAgICByZWdp
c3RyYXIoIlVURi04IiwgIlVURi04Iik7CisgICAgcmVnaXN0cmFyKCJJU08tODg1OS0xIiwgIklT
Ty04ODU5LTEiKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICAvLyBGSVhNRSBob3cgdG8g
Z2V0IHN1cHBvcnRlZCBlbmNvZGluZ3M/CisKKyAgICByZWdpc3RyYXIoIlVURi04IiwgbmV3VGV4
dENvZGVjR3RrLCAwKTsKKyAgICByZWdpc3RyYXIoIklTTy04ODU5LTEiLCBuZXdUZXh0Q29kZWNH
dGssIDApOworfQorCitUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2Rp
bmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKKyAgICAsIG1fbnVtQnVm
ZmVyZWRCeXRlcygwKQorICAgICwgbV9pY29udkRlY29kZXIoKEdJQ29udikgLTEpCisgICAgLCBt
X2ljb252RW5jb2RlcigoR0lDb252KSAtMSkKK3sKK30KKworVGV4dENvZGVjR3RrOjp+VGV4dENv
ZGVjR3RrKCkKK3sKKyAgICByZWxlYXNlSUNvbnYoKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6
OnJlbGVhc2VJQ29udigpIGNvbnN0Cit7CisgICAgaWYgKG1faWNvbnZEZWNvZGVyICE9IChHSUNv
bnYpIC0xKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkRlY29kZXIpOworICAgICAg
ICBtX2ljb252RGVjb2RlciA9IChHSUNvbnYpIC0xOworICAgIH0KKyAgICBpZiAobV9pY29udkVu
Y29kZXIgIT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgZ19pY29udl9jbG9zZShtX2ljb252RW5j
b2Rlcik7CisgICAgICAgIG1faWNvbnZFbmNvZGVyID0gKEdJQ29udikgLTE7CisgICAgfQorfQor
Cit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9pY29udkRlY29kZXIgPT0gKEdJQ29udikgLTEpOworCisgICAgLy8gYXBwZW5kT21p
dHRpbmdCT00gaXMgZ29uZSAoc2VlIGRlY29kZSgpKSwgc28gd2UgbmVlZCB0byBhdm9pZCBnZW5l
cmF0aW5nIGV4dHJhIEJPTSdzCisgICAgLy8gaGVyZS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkg
c3BlY2lmeWluZyB0aGUgZW5kaWFubmVzcyBleHBsaWNpdGx5IAorICAgIC8vIHdoZW4gaW5pdGlh
bGl6aW5nIGxpYmljb252CisKKyNpZiAoR19CWVRFX09SREVSID09IEdfQklHX0VORElBTikKKyAg
ICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbigiVVRGLTE2QkUiLCBtX2VuY29kaW5nLm5h
bWUoKSk7CisjZWxzZQorICAgIG1faWNvbnZEZWNvZGVyID0gZ19pY29udl9vcGVuKCJVVEYtMTZM
RSIsIG1fZW5jb2RpbmcubmFtZSgpKTsKKyNlbmRpZgorfQorCit2b2lkIFRleHRDb2RlY0d0azo6
Y3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pY29udkVuY29kZXIg
PT0gKEdJQ29udikgLTEpOworCisgICAgbV9pY29udkVuY29kZXIgPSBnX2ljb252X29wZW4obV9l
bmNvZGluZy5uYW1lKCksICJVVEYtMTYiKTsKK30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVj
b2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKK3sKKyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9y
IHRoZSBwYXNzZWQtaW4gZW5jb2RpbmcuCisgICAgaWYgKG1faWNvbnZEZWNvZGVyID09IChHSUNv
bnYpIC0xKSB7CisgICAgICAgIGNyZWF0ZUlDb252RGVjb2RlcigpOworICAgICAgICBBU1NFUlQo
bV9pY29udkRlY29kZXIgIT0gKEdJQ29udikgLTEpOworICAgICAgICBpZiAobV9pY29udkRlY29k
ZXIgPT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRp
bmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBlbmNvZGluZyB3YXMgaW4gdGFibGUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNpemVf
dCBjb3VudDsKKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgVUNoYXIgKmJ1ZmZlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihnX2NvbnZlcnRfd2l0aF9pY29udihieXRlcywgbGVuZ3Ro
LCBtX2ljb252RGVjb2RlciwgMCwgJmNvdW50LCAmZXJyKSk7CisgICAgaWYgKGVycikgeworICAg
ICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yIik7CisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKworICAgIC8v
IGFwcGVuZE9taXR0aW5nQk9NKHJlc3VsdCwgYnVmZmVyLCBjb3VudCAvIHNpemVvZihVQ2hhcikp
OworICAgIC8vIHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zMzM4MAorCisg
ICAgcmVzdWx0LmFwcGVuZChidWZmZXIsIGNvdW50IC8gc2l6ZW9mKFVDaGFyKSk7CisKKyAgICBn
X2ZyZWUoYnVmZmVyKTsKKworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cit9CisK
K0NTdHJpbmcgVGV4dENvZGVjR3RrOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCit7CisgICAgaWYgKCFs
ZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlmIChtX2ljb252RW5jb2RlciA9PSAo
R0lDb252KSAtMSkKKyAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7CisgICAgaWYgKG1faWNv
bnZFbmNvZGVyID09IChHSUNvbnYpIC0xKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisg
ICAgc2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJyID0gTlVMTDsKKyAgICBjaGFyICpidWZm
ZXIgPSBnX2NvbnZlcnRfd2l0aF9pY29udihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihj
aGFyYWN0ZXJzKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgbV9pY29udkVuY29kZXIsIDAsICZj
b3VudCwgJmVycik7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBj
b252ZXJzaW9uIGVycm9yIik7CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgfQorCisg
ICAgQ1N0cmluZyByZXN1bHQgPSBDU3RyaW5nKGJ1ZmZlciwgY291bnQpOworCisgICAgZ19mcmVl
KGJ1ZmZlcik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFr
SXRlcmF0b3JHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExhcnMgS25vbGwgPGxhcnNAdHJvbGx0ZWNoLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisKKyNp
bmNsdWRlIDxwYW5nby9wYW5nby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gVUJy
ZWFrSXRlcmF0b3JUeXBlIHsKKyAgICBVQlJLX0NIQVJBQ1RFUiwKKyAgICBVQlJLX1dPUkQsCisg
ICAgVUJSS19MSU5FLAorICAgIFVCUktfU0VOVEVOQ0UKK307CisKK2NsYXNzIFRleHRCcmVha0l0
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBVQnJlYWtJdGVyYXRvclR5cGUgbV90eXBlOworICAgIGlu
dCBtX2xlbmd0aDsKKyAgICBQYW5nb0xvZ0F0dHIgKm1fbG9nX2F0dHJzOworCisgICAgaW50IG1f
aW5kZXg7Cit9OworCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRlcmF0b3IoYm9v
bCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciomIGl0ZXJhdG9yLAorICAgIFVC
cmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQor
eworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghY3JlYXRl
ZEl0ZXJhdG9yKSB7CisgICAgICAgIGl0ZXJhdG9yID0gbmV3IFRleHRCcmVha0l0ZXJhdG9yKCk7
CisgICAgICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7CisgICAgfQorICAgIGlmICghaXRlcmF0
b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgbG9uZyB1dGY4bGVuOworICAgIGNoYXIgKnV0
ZjggPSBnX3V0ZjE2X3RvX3V0Zjgoc3RyaW5nLCBsZW5ndGgsIDAsICZ1dGY4bGVuLCAwKTsKKwor
ICAgIC8vIEZJWE1FOiBhc3N1bWVzIG5vIHN1cnJvZ2F0ZSBwYWlycworCisgICAgaXRlcmF0b3It
Pm1fdHlwZSA9IHR5cGU7CisgICAgaXRlcmF0b3ItPm1fbGVuZ3RoID0gbGVuZ3RoOworICAgIGl0
ZXJhdG9yLT5tX2xvZ19hdHRycyA9IGdfbmV3MChQYW5nb0xvZ0F0dHIsIGxlbmd0aCArIDEpOwor
ICAgIGl0ZXJhdG9yLT5tX2luZGV4ID0gLTE7CisgICAgcGFuZ29fZ2V0X2xvZ19hdHRycyh1dGY4
LCB1dGY4bGVuLCAtMSwgMCwgaXRlcmF0b3ItPm1fbG9nX2F0dHJzLCBsZW5ndGggKyAxKTsKKwor
ICAgIGdfZnJlZSh1dGY4KTsKKworICAgIHJldHVybiBpdGVyYXRvcjsKK30KKworVGV4dEJyZWFr
SXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50
IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRv
ciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkQ2hhcmFjdGVy
QnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciwgVUJS
S19DSEFSQUNURVIsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIHdv
cmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAg
c3RhdGljIGJvb2wgY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGlj
IFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNXb3JkQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4g
c2V0VXBJdGVyYXRvcihjcmVhdGVkV29yZEJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY1dv
cmRCcmVha0l0ZXJhdG9yLCBVQlJLX1dPUkQsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4dEJy
ZWFrSXRlcmF0b3IqIGxpbmVCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBs
ZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZExpbmVCcmVha0l0ZXJhdG9yID0gZmFs
c2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNMaW5lQnJlYWtJdGVyYXRv
cjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkTGluZUJyZWFrSXRlcmF0b3IsCisg
ICAgICAgIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yLCBVQlJLX0xJTkUsIHN0cmluZywgbGVuZ3Ro
KTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBV
Q2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRTZW50
ZW5jZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihj
cmVhdGVkU2VudGVuY2VCcmVha0l0ZXJhdG9yLAorICAgICAgICBzdGF0aWNTZW50ZW5jZUJyZWFr
SXRlcmF0b3IsIFVCUktfU0VOVEVOQ0UsIHN0cmluZywgbGVuZ3RoKTsKK30KKworaW50IHRleHRC
cmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdGV4dEJyZWFr
Rm9sbG93aW5nKGJpLCAtMSk7Cit9CisKK2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJh
dG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdGV4dEJyZWFrUHJlY2VkaW5nKGJpLCBiaS0+bV9sZW5n
dGggKyAxKTsKK30KKworaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQor
eworICAgIGZvciAoaW50IGkgPSBiaS0+bV9pbmRleCArIDE7IGkgPD0gYmktPm1fbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19MSU5FICYmIGJpLT5tX2xvZ19h
dHRyc1tpXS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7Cisg
ICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVC
UktfV09SRCAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfc3RhcnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmktPm1fbG9nX2F0dHJzW2ld
LmlzX3dvcmRfZW5kKSkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJB
Q1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfY3Vyc29yX3Bvc2l0aW9uKSB7CisgICAgICAg
ICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBl
bHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgKGJpLT5tX2xvZ19hdHRyc1tp
XS5pc19zZW50ZW5jZV9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNlX2VuZCkpIHsK
KyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBUZXh0QnJlYWtEb25lOworfQorCitpbnQgdGV4dEJy
ZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIGZvciAoaW50IGkgPSBi
aS0+bV9pbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGlmIChiaS0+bV90eXBlID09
IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfbGluZV9icmVhaykgeworICAgICAg
ICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0g
ZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5p
c193b3JkX3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX2VuZCkpIHsKKyAgICAgICAgICAgIGJp
LT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IGVsc2UgaWYg
KGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2N1
cnNvcl9wb3NpdGlvbikgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRF
TkNFICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNfc2VudGVuY2Vfc3RhcnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJpLT5tX2xvZ19hdHRy
c1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7Cisg
ICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGV4dEJy
ZWFrRmlyc3QoYmkpOworfQorCitpbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJh
dG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBiaS0+bV9pbmRleCA9IHBvczsKKyAgICByZXR1cm4g
dGV4dEJyZWFrUHJldmlvdXMoYmkpOworfQorCitpbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRC
cmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBpZiAocG9zIDwgMCkKKyAgICAgICAg
cG9zID0gLTE7CisgICAgYmktPm1faW5kZXggPSBwb3M7CisgICAgcmV0dXJuIHRleHRCcmVha05l
eHQoYmkpOworfQorCitpbnQgdGV4dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJdGVyYXRvciogYmkp
Cit7CisgICAgcmV0dXJuIGJpLT5tX2luZGV4OworfQorCitib29sIGlzVGV4dEJyZWFrKFRleHRC
cmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBpZiAoYmktPm1faW5kZXggPj0gMCkg
eworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1fbG9nX2F0dHJz
W2JpLT5tX2luZGV4XS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfV09SRCAmJiBiaS0+bV9sb2df
YXR0cnNbYmktPm1faW5kZXhdLmlzX3dvcmRfZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gVFJV
RTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGJp
LT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfY2hhcl9icmVhaykgeworICAgICAgICAgICAg
cmV0dXJuIFRSVUU7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRF
TkNFICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfc2VudGVuY2VfZW5kKSB7Cisg
ICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3Rr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3Rr
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgVGV4dENvZGVjR1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2luY2x1ZGUgPGds
aWIuaD4KKworI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBUZXh0Q29kZWNHdGsgOiBwdWJs
aWMgVGV4dENvZGVjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
QmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAgICAg
c3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0
Q29kZWNSZWdpc3RyYXIpOworCisgICAgICAgIFRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2Rp
bmcmKTsKKyAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjR3RrKCk7CisKKyAgICAgICAgdmlydHVh
bCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBi
b29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgICAgIHZpcnR1YWwgQ1N0cmlu
ZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5n
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZEZWNvZGVyKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3Q7CisgICAgICAgIHZv
aWQgcmVsZWFzZUlDb252KCkgY29uc3Q7CisKKyAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rp
bmc7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZXNbMTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xlIG11
bHRpLWJ5dGUgY2hhcmFjdGVyICAgICAgICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29u
dkRlY29kZXI7CisgICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworICAgICAg
ICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0Q29kZWNHVEtfaApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCShyZXZpc2lvbiAzNTkx
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg5LDExICs4OSwyMSBAQAogICAgIHJldHVybiB1YnJrX2ZpcnN0KGJp
KTsKIH0KIAoraW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAg
IHJldHVybiB1YnJrX2xhc3QoYmkpOworfQorCiBpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJ
dGVyYXRvciogYmkpCiB7CiAgICAgcmV0dXJuIHVicmtfbmV4dChiaSk7CiB9CiAKK2ludCB0ZXh0
QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIHVicmtf
cHJldmlvdXMoYmkpOworfQorCiBpbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJh
dG9yKiBiaSwgaW50IHBvcykKIHsKICAgICByZXR1cm4gdWJya19wcmVjZWRpbmcoYmksIHBvcyk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5j
cHAJKHJldmlzaW9uIDM1OTE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQAogI2lmIFBMQVRG
T1JNKFFUKQogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0LmgiCiAjZW5kaWYKKyNpZiBQTEFURk9S
TShHVEspCisjaW5jbHVkZSAiZ3RrL1RleHRDb2RlY0d0ay5oIgorI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTE3Niw2ICsxNzksMTEgQEAKICAgICBUZXh0Q29kZWNJQ1U6OnJl
Z2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBU
ZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5k
aWYKKworI2lmIFVTRShHTElCX1VOSUNPREUpCisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJh
c2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVj
R3RrOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOworI2VuZGlmCiB9CiAK
IHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMoKQpAQCAtMTk0LDYgKzIwMiwxMSBAQAog
ICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5n
TmFtZU1hcCk7CiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2Rl
Y01hcCk7CiAjZW5kaWYKKworI2lmIFVTRShHTElCX1VOSUNPREUpCisgICAgVGV4dENvZGVjR3Rr
OjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXAp
OworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhhZGRUb1RleHRDb2Rl
Y01hcCk7CisjZW5kaWYKIH0KIAogc3RkOjphdXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2Rl
Yyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDM1OTE2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDkgQEAKICAgICBUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0
IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAKICAgICBpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFr
SXRlcmF0b3IqKTsKKyAgICBpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciopOwog
ICAgIGludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKik7CisgICAgaW50IHRleHRC
cmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha0N1cnJl
bnQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRC
cmVha0l0ZXJhdG9yKiwgaW50KTsKICAgICBpbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVh
a0l0ZXJhdG9yKiwgaW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
Y3BwCShyZXZpc2lvbiAzNTkxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSA8dW5pY29k
ZS91bm9ybS5oPgogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogI2luY2x1ZGUgPFFTdHJpbmc+Cisj
ZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgPGdsaWIuaD4KICNlbmRpZgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTA1LDYgKzEw
NywyMiBAQAogICAgIFFTdHJpbmcgc3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihj
aGFyYWN0ZXJzKSwgbGVuZ3RoKTsKICAgICBzdHIgPSBzdHIubm9ybWFsaXplZChRU3RyaW5nOjpO
b3JtYWxpemF0aW9uRm9ybV9DKTsKICAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0aGlzKS0+ZW5j
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oc3RyLnV0ZjE2KCkpLCBzdHIubGVu
Z3RoKCksIGhhbmRsaW5nKTsKKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisgICAgY2hhciAqdXRm
OHNvdXJjZSA9IGdfdXRmMTZfdG9fdXRmOChjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIE5VTEwp
OworICAgIGNoYXIgKnV0Zjhub3JtYWxpemVkID0gZ191dGY4X25vcm1hbGl6ZSh1dGY4c291cmNl
LCAtMSwgR19OT1JNQUxJWkVfTkZDKTsKKworICAgIGdfZnJlZSAodXRmOHNvdXJjZSk7CisKKyAg
ICBsb25nIHV0ZjE2bGVuZ3RoOworICAgIFVDaGFyKiB1dGYxNm5vcm1hbGl6ZWQgPSBnX3V0Zjhf
dG9fdXRmMTYodXRmOG5vcm1hbGl6ZWQsIC0xLCAwLCAmdXRmMTZsZW5ndGgsIE5VTEwpOworCisg
ICAgZ19mcmVlICh1dGY4bm9ybWFsaXplZCk7CisKKyAgICBDU3RyaW5nIHJlc3VsdCA9IG5ld1Rl
eHRDb2RlYygqdGhpcyktPmVuY29kZSh1dGYxNm5vcm1hbGl6ZWQsIHV0ZjE2bGVuZ3RoLCBoYW5k
bGluZyk7CisKKyAgICBnX2ZyZWUgKHV0ZjE2bm9ybWFsaXplZCk7CisKKyAgICByZXR1cm4gcmVz
dWx0OwogI2VuZGlmCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAJKHJldmlzaW9uIDM1OTE2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw4ICszOSw2IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHVuaWNv
ZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogY29uZmlndXJlLmFjCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24gMzU5MTYpCisrKyBjb25maWd1cmUu
YWMJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxOCArMTc0LDE4IEBACiAjIGRldGVybWluZSB0aGUg
VW5pY29kZSBiYWNrZW5kCiBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBVbmljb2RlIGJhY2tlbmQgdG8g
dXNlXSkKIEFDX0FSR19XSVRIKHVuaWNvZGVfYmFja2VuZCwKLSAgICAgICAgICAgIEFDX0hFTFBf
U1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3VAOj5AXSwKKyAgICAgICAgICAg
IEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3UvZ2xpYkA6PkBd
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBVbmljb2RlIGJhY2tlbmQgW2Rl
ZmF1bHQ9aWN1XV0pLAotICAgICAgICAgICAgW10sW3VuaWNvZGVfYmFja2VuZD0iaWN1Il0pCisg
ICAgICAgICAgICBbXSxbd2l0aF91bmljb2RlX2JhY2tlbmQ9ImljdSJdKQogCi1jYXNlICIkdW5p
Y29kZV9iYWNrZW5kIiBpbgotICAgICBpY3UpIDs7Ci0gICAgICopIEFDX01TR19FUlJPUihbSW52
YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1Ll0pIDs7CitjYXNlICIkd2l0aF91bmlj
b2RlX2JhY2tlbmQiIGluCisgICAgIGljdXxnbGliKSA7OworICAgICAqKSBBQ19NU0dfRVJST1Io
W0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdSBvciBnbGliLl0pIDs7CiBlc2Fj
CiAKLUFDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tlbmRdKQorQUNfTVNHX1JFU1VMVChbJHdp
dGhfdW5pY29kZV9iYWNrZW5kXSkKIAotaWYgdGVzdCAiJHVuaWNvZGVfYmFja2VuZCIgPSAiaWN1
IjsgdGhlbgoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCiAJ
aWYgdGVzdCAiJG9zX2RhcndpbiIgPSAieWVzIjsgdGhlbgogCQlVTklDT0RFX0NGTEFHUz0iLUlc
JChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL2ljdSAtSVwkKHNyY2RpcikvV2ViQ29yZS9pY3UiCiAJ
CVVOSUNPREVfTElCUz0iLWxpY3Vjb3JlIgpAQCAtMjA2LDYgKzIwNiwxMSBAQAogCWZpCiBmaQog
CisjIHJlZHVjZSBmcm9tIDEuMjIgdG8gMS4xOCBmb3Igbm93LCBuZWVkcyB0byBiZSBjaGFuZ2Vk
IHRvIHNvbWV0aGluZyBmcmliaWQgYmFzZWQgcG90ZW50aWFsbHkKK2lmIHRlc3QgIiR3aXRoX3Vu
aWNvZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KKyAgIFBLR19DSEVDS19NT0RVTEVTKFtVTklD
T0RFXSwgW2dsaWItMi4wIHBhbmdvID49IDEuMF0pCitmaQorCiBBQ19TVUJTVChbVU5JQ09ERV9D
RkxBR1NdKQogQUNfU1VCU1QoW1VOSUNPREVfTElCU10pCiAKQEAgLTU3Niw2ICs1ODEsMTAgQEAK
IEFNX0NPTkRJVElPTkFMKFtUQVJHRVRfUVVBUlRaXSwgW3Rlc3QgIiR3aXRoX3RhcmdldCIgPSAi
cXVhcnR6Il0pCiBBTV9DT05ESVRJT05BTChbVEFSR0VUX0RJUkVDVEZCXSwgW3Rlc3QgIiR3aXRo
X3RhcmdldCIgPSAiZGlyZWN0ZmIiXSkKIAorIyBVbmljb2RlIGJhY2tlbmQgY29uZGl0aW9uYWxz
CitBTV9DT05ESVRJT05BTChbVVNFX0lDVV9VTklDT0RFXSwgW3Rlc3QgIiR3aXRoX3VuaWNvZGVf
YmFja2VuZCIgPSAiaWN1Il0pCitBTV9DT05ESVRJT05BTChbVVNFX0dMSUJfVU5JQ09ERV0sIFt0
ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiXSkKKwogIyBIVFRQIGJhY2tlbmQg
Y29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbVVNFX0NVUkxdLCBbdGVzdCAiJHdpdGhfaHR0
cF9iYWNrZW5kIiA9ICJjdXJsIl0pCiBBTV9DT05ESVRJT05BTChbVVNFX1NPVVBdLCBbdGVzdCAi
JHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJzb3VwIl0pCkBAIC02MjEsNyArNjMwLDcgQEAKIEJ1aWxk
IGNvbmZpZ3VyYXRpb246CiAgRW5hYmxlIGRlYnVnZ2luZyAoc2xvdykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RlYnVnCiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCi0g
VW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkdW5pY29kZV9iYWNrZW5kCisgVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF91bmljb2RlX2JhY2tlbmQKICBIVFRQIGJhY2tl
bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2h0
dHBfYmFja2VuZAogIEZvbnQgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJHdpdGhfZm9udF9iYWNrZW5kCiAgT3B0aW1pemVkIG1lbW9yeSBhbGxv
Y2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9j
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>23031</attachid>
            <date>2008-08-27 08:01:57 -0700</date>
            <delta_ts>2008-08-27 08:01:57 -0700</delta_ts>
            <desc>Overview and Comparison of Text Codecs in Safari Win/Mac and libiconv</desc>
            <filename>Text Codecs Comparison.txt</filename>
            <type>text/plain</type>
            <size>3411</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">VGV4dCBDb2RlY3MgQ29tcGFyaXNvbg0KDQpTYWZhcmkgV2luICgzLjEuMiA1MjUuMjEpICAgICAg
ICAgIFNhZmFyaSBNYWMgT1MgKDMuMS4yIDU1MjUuMjAuMSkgICAgICAgIGxpYmljb252IGVuY29k
aW5nIG5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyb20gaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3
YXJlL2xpYmljb252LykgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpVbmljb2Rl
IChVVEYtOCkgICAgICAgICAgICAgICAgICAgIFVuaWNvZGUgKFVURi04KSAgICAgICAgICAgICAg
ICAgICAgICAgIFVURi04DQoNCldlc3Rlcm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vz
dGVybiAoSVNPIExhdGluIDEpICAgICAgICAgICAgICAgICAgSVNPLTg4NTktMQ0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZXN0ZXJuIChNYWMgT1MgUm9tYW4pICAgICAgICAg
ICAgICAgICBNYWNSb21hbg0KDQpKYXBhbmVzZSAoU2hpZnQgSklTKSAgICAgICAgICAgICAgIEph
cGFuZXNlIChTaGlmdCBKSVMpICAgICAgICAgICAgICAgICAgIFNISUZUX0pJUw0KSmFwYW5lc2Ug
KEVVQykgICAgICAgICAgICAgICAgICAgICBKYXBhbmVzZSAoRVVDKSAgICAgICAgICAgICAgICAg
ICAgICAgICBFVUNfSlANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmFwYW5l
c2UgKElTTyAyMDIyLUpQKSAgICAgICAgICAgICAgICAgSVNPLTIwMjItSlANCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSmFwYW5lc2UgKFNoaWZ0IEpJUyBYMDIxMykNCg0KVHJh
ZGlvbmFsIENoaW5lc2UgKEJpZzUpICAgICAgICAgICBUcmFkaXRpb25hbCBDaGluZXNlIChCaWcg
NSkgICAgICAgICAgICBCSUc1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YWRpdGlvbmFsIENoaW5lc2UgKEJpZyA1IEhLU0NTKSAgICAgIEJJRzUtSEtTQ1MNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhZGl0aW9uYWwgQ2hpbmVzZSAoV2luZG93cywg
RE9TKSAgICAgQ1A5NTANCg0KS29yZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLb3Jl
YW4gKElTTyAyMDIyLUtSKSAgICAgICAgICAgICAgICAgICBJU08tMjAyMi1LUg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBLb3JlYW4gKE1hYyBPUykNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgS29yZWFuIChXaW5kb3dzLCBET1MpICAgICAgICAgICAgICAg
ICAgQ1A5NDkNCg0KQXJhYmljIChJU08pICAgICAgICAgICAgICAgICAgICAgICBBcmFiaWMgKElT
TyA4ODU5LTYpICAgICAgICAgICAgICAgICAgICBJU08tODg1OS02DQpBcmFiaWMgKFdpbmRvd3Mp
ICAgICAgICAgICAgICAgICAgIEFyYWJpYyAoV2luZG93cykgICAgICAgICAgICAgICAgICAgICAg
IENQMTI1Ng0KDQpIZWJyZXcgKElTTyB2aXN1YWwpICAgICAgICAgICAgICAgIEhlYnJldyAoSVNP
IDg4NTktOCkgICAgICAgICAgICAgICAgICAgIElTTy04ODU5LTgNCkhlYnJldyAoV2luZG93cykg
ICAgICAgICAgICAgICAgICAgSGVicmV3IChXaW5kb3dzKSAgICAgICAgICAgICAgICAgICAgICAg
Q1AxMjU1DQoNCkdyZWVrIChJU08pICAgICAgICAgICAgICAgICAgICAgICAgR3JlZWsgKElTTyA4
ODU5LTcpICAgICAgICAgICAgICAgICAgICAgSVNPLTg4NTktNw0KR3JlZWsgKFdpbmRvd3MpICAg
ICAgICAgICAgICAgICAgICBHcmVlayAoV2luZG93cykgICAgICAgICAgICAgICAgICAgICAgICBD
UDg2OSAod2l0aCAtLWVuYWJsZS1leHRyYS1lbmNvZGluZ3MpDQoNCkN5cmlsbGljIChJU08pICAg
ICAgICAgICAgICAgICAgICAgQ3lyaWxsaWMgKElTTyA4ODU5LTUpICAgICAgICAgICAgICAgICAg
SVNPLTg4NTktNQ0KQ3lyaWxsaWMgKEtPSTgtUikgICAgICAgICAgICAgICAgICBDeXJpbGxpYyAo
S09JOC1SKSAgICAgICAgICAgICAgICAgICAgICBLT0k4LVINCkN5cmlsbGljIChXaW5kb3dzKSAg
ICAgICAgICAgICAgICAgQ3lyaWxsaWMgKFdpbmRvd3MpICAgICAgICAgICAgICAgICAgICAgQ1A4
NjYNCkN5cmlsbGljIChLT0k4LVUpICAgICAgICAgICAgICAgICAgVWtyYW5pYW4gKEtPSTgtVSkg
ICAgICAgICAgICAgICAgICAgICAgS09JOC1VDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEN5cmlsbGljIChNYWMgT1MpICAgICAgICAgICAgICAgICAgICAgIE1hY0N5cmlsbGlj
DQoNClRoYWkgKFdpbmRvd3MpICAgICAgICAgICAgICAgICAgICAgVGhhaSAoV2luZG93cywgRE9T
KSAgICAgICAgICAgICAgICAgICAgQ1A4NzQNCg0KU2ltcGxpZmllZCBDaGluZXNlIChHQjIzMTIp
ICAgICAgICBTaW1wbGlmaWVkIENoaW5lc2UgKEdCMjMxMikgICAgICAgICAgICBHQksgKD8pDQpT
aW1wbGlmaWVkIENoaW5lc2UgKEhaKSAgICAgICAgICAgIFNpbXBsaWZpZWQgQ2hpbmVzZSAoSFog
R0IgMjMxMikgICAgICAgIEhaDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENo
aW5lc2UgKEdCIDE4MDMwKSAgICAgICAgICAgICAgICAgICAgIEdCMTgwMzANCg0KQ2VudHJhbCBF
dXJvcGVhbiAoSVNPKSAgICAgICAgICAgICBDZW50cmFsIEV1cm9wZWFuIChJU08gTGF0aW4gMikg
ICAgICAgICBJU08tODg1OS0yDQpDZW50cmFsIEV1cm9wZWFuIChXaW5kb3dzKSAgICAgICAgIENl
bnRyYWwgRXVyb3BlYW4gKFdpbmRvd3MgTGF0aW4gMikgICAgIENQMTI1MA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDZW50cmFsIEV1cm9wZWFuIChNYWMgT1MpICAgICAgICAg
ICAgICBNYWNDZW50cmFsRXVyb3BlDQoNClZpZXRuYW1lc2UgKFdpbmRvd3MpICAgICAgICAgICAg
ICAgVmlldG5hbWVzZSAoV2luZG93cykgICAgICAgICAgICAgICAgICAgQ1AxMjU4DQoNClR1cmtp
c2ggKFdpbmRvd3MpICAgICAgICAgICAgICAgICAgVHVya2lzaCAoV2luZG93cyBMYXRpbiA1KSAg
ICAgICAgICAgICAgQ1AxMjU0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1
cmtpc2ggKElTTyBMYXRpbiA1KSAgICAgICAgICAgICAgICAgIElTTy04ODU5LTkNCg0KQmFsdGlj
IChXaW5kb3dzKSAgICAgICAgICAgICAgICAgICBCYWx0aWMgUmltIChXaW5kb3dzKSAgICAgICAg
ICAgICAgICAgICBDUDEyNTcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Vu
dHJhbCBFdXJvcGVhbiAoSVNPIExhdGluIDQpICAgICAgICAgSVNPLTg4NTktNA0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23124</attachid>
            <date>2008-09-02 13:04:11 -0700</date>
            <delta_ts>2008-09-04 06:24:46 -0700</delta_ts>
            <desc>patch updated for probing for iconv encodings, updated to revision 36025</desc>
            <filename>remove_glib_enumerating_codecs.patch</filename>
            <type>text/plain</type>
            <size>65455</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2MDI1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDkt
MDIgIERvbWluaWsgUvZ0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnku
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkxNAorICAgICAgICBbR1RL
XSBJbXBsZW1lbnQgVW5pY29kZSBmdW5jdGlvbmFsaXR5IHVzaW5nIEdMaWIKKworICAgICAgICBB
ZGRpbmcgb3B0aW9ucyBmb3IgLS13aXRoLXVuaWNvZGUtYmFja2VuZD1pY3V8Z2xpYgorICAgICAg
ICBhbmQgY2hlY2tpbmcgZm9yIHBhbmdvIHZlcnNpb24gPj0gMS4yMS4wIGlmIGdsaWIgYmFja2Vu
ZAorICAgICAgICBpcyBzZWxlY3RlZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIGNvbmZpZ3VyZS5hYzoKKwogMjAwOC0wOC0yOCAgQWxwIFRva2VyICA8YWxwQG51YW50
aS5jb20+CiAKICAgICAgICAgR1RLKyBkaXN0L2J1aWxkIGZpeC4gTGlzdCBuZXdseSBhZGRlZCBo
ZWFkZXIgZmlsZXMuCkluZGV4OiBHTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBHTlVtYWtl
ZmlsZS5hbQkocmV2aXNpb24gMzYwMjUpCisrKyBHTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5
KQpAQCAtNTAsOCArNTAsMTUgQEAgSURMX0JJTkRJTkdTIDo9CiAjIEdsb2JhbCBmbGFncyB0byBD
UFAKIGdsb2JhbF9jcHBmbGFncyA6PQogCitpZiBVU0VfSUNVX1VOSUNPREUKIGdsb2JhbF9jcHBm
bGFncyArPSBcCi0JLURXVEZfVVNFX0lDVV9VTklDT0RFPTEKKyAgICAgIC1EV1RGX1VTRV9JQ1Vf
VU5JQ09ERT0xCitlbmRpZgorCitpZiBVU0VfR0xJQl9VTklDT0RFCitnbG9iYWxfY3BwZmxhZ3Mg
Kz0gXAorICAgICAgLURXVEZfVVNFX0dMSUJfVU5JQ09ERT0xCitlbmRpZgogCiAjIERlZmF1bHQg
Y29tcGlsZXIgZmxhZ3MKIGdsb2JhbF9jZmxhZ3MgOj0gXApJbmRleDogY29uZmlndXJlLmFjCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24gMzYwMjUpCisrKyBjb25maWd1cmUu
YWMJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwxOCArMTc0LDE4IEBAIGZpCiAjIGRldGVybWluZSB0
aGUgVW5pY29kZSBiYWNrZW5kCiBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBVbmljb2RlIGJhY2tlbmQg
dG8gdXNlXSkKIEFDX0FSR19XSVRIKHVuaWNvZGVfYmFja2VuZCwKLSAgICAgICAgICAgIEFDX0hF
TFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3VAOj5AXSwKKyAgICAgICAg
ICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3UvZ2xpYkA6
PkBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBVbmljb2RlIGJhY2tlbmQg
W2RlZmF1bHQ9aWN1XV0pLAotICAgICAgICAgICAgW10sW3VuaWNvZGVfYmFja2VuZD0iaWN1Il0p
CisgICAgICAgICAgICBbXSxbd2l0aF91bmljb2RlX2JhY2tlbmQ9ImljdSJdKQogCi1jYXNlICIk
dW5pY29kZV9iYWNrZW5kIiBpbgotICAgICBpY3UpIDs7Ci0gICAgICopIEFDX01TR19FUlJPUihb
SW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1Ll0pIDs7CitjYXNlICIkd2l0aF91
bmljb2RlX2JhY2tlbmQiIGluCisgICAgIGljdXxnbGliKSA7OworICAgICAqKSBBQ19NU0dfRVJS
T1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdSBvciBnbGliLl0pIDs7CiBl
c2FjCiAKLUFDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tlbmRdKQorQUNfTVNHX1JFU1VMVChb
JHdpdGhfdW5pY29kZV9iYWNrZW5kXSkKIAotaWYgdGVzdCAiJHVuaWNvZGVfYmFja2VuZCIgPSAi
aWN1IjsgdGhlbgoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVu
CiAJaWYgdGVzdCAiJG9zX2RhcndpbiIgPSAieWVzIjsgdGhlbgogCQlVTklDT0RFX0NGTEFHUz0i
LUlcJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL2ljdSAtSVwkKHNyY2RpcikvV2ViQ29yZS9pY3Ui
CiAJCVVOSUNPREVfTElCUz0iLWxpY3Vjb3JlIgpAQCAtMjA2LDYgKzIwNiwxMCBAQCBpZiB0ZXN0
ICIkdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCiAJZmkKIGZpCiAKK2lmIHRlc3QgIiR3
aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KKyAgIFBLR19DSEVDS19NT0RVTEVT
KFtVTklDT0RFXSwgW2dsaWItMi4wIHBhbmdvID49IDEuMjEuMF0pCitmaQorCiBBQ19TVUJTVChb
VU5JQ09ERV9DRkxBR1NdKQogQUNfU1VCU1QoW1VOSUNPREVfTElCU10pCiAKQEAgLTU3Niw2ICs1
ODAsMTAgQEAgQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9XSU4zMl0sIFt0ZXN0ICIkdwogQU1fQ09O
RElUSU9OQUwoW1RBUkdFVF9RVUFSVFpdLCBbdGVzdCAiJHdpdGhfdGFyZ2V0IiA9ICJxdWFydHoi
XSkKIEFNX0NPTkRJVElPTkFMKFtUQVJHRVRfRElSRUNURkJdLCBbdGVzdCAiJHdpdGhfdGFyZ2V0
IiA9ICJkaXJlY3RmYiJdKQogCisjIFVuaWNvZGUgYmFja2VuZCBjb25kaXRpb25hbHMKK0FNX0NP
TkRJVElPTkFMKFtVU0VfSUNVX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5k
IiA9ICJpY3UiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfR0xJQl9VTklDT0RFXSwgW3Rlc3QgIiR3
aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiZ2xpYiJdKQorCiAjIEhUVFAgYmFja2VuZCBjb25kaXRp
b25hbHMKIEFNX0NPTkRJVElPTkFMKFtVU0VfQ1VSTF0sIFt0ZXN0ICIkd2l0aF9odHRwX2JhY2tl
bmQiID0gImN1cmwiXSkKIEFNX0NPTkRJVElPTkFMKFtVU0VfU09VUF0sIFt0ZXN0ICIkd2l0aF9o
dHRwX2JhY2tlbmQiID0gInNvdXAiXSkKQEAgLTYyMSw3ICs2MjksNyBAQCBXZWJLaXQgd2FzIGNv
bmZpZ3VyZWQgd2l0aCB0aGUgZm9sbG93aW5nCiBCdWlsZCBjb25maWd1cmF0aW9uOgogIEVuYWJs
ZSBkZWJ1Z2dpbmcgKHNsb3cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVu
YWJsZV9kZWJ1ZwogIENvZGUgY292ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJGVuYWJsZV9jb3ZlcmFnZQotIFVuaWNvZGUgYmFja2VuZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHVuaWNvZGVfYmFja2VuZAorIFVu
aWNvZGUgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
JHdpdGhfdW5pY29kZV9iYWNrZW5kCiAgSFRUUCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF9odHRwX2JhY2tlbmQKICBGb250IGJhY2tl
bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2Zv
bnRfYmFja2VuZAogIE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJGVuYWJsZV9mYXN0X21hbGxvYwpJbmRleDogSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gMzYwMjUpCisrKyBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwzNiBAQAorMjAwOC0wOS0wMiAgRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJv
ZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTkxNAorICAgICAgICBbR1RLXSBJbXBsZW1lbnQgVW5pY29kZSBmdW5jdGlvbmFsaXR5
IHVzaW5nIEdMaWIKKworICAgICAgICBPcmlnaW5hbCBwYXRjaCBieSBKw7xyZyBCaWxsZXRlciBh
bmQgTmFpZW0gU2hhaWsuCisgICAgICAgIEltcGxlbWVudGluZyBVbmljb2RlIGZ1bmN0aW9uYWxp
dHkgYmFzZWQgb24gZ2xpYi4KKworICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAg
ICAgICAgKiB3dGYvdW5pY29kZS9nbGliOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9n
bGliL1VuaWNvZGVHTGliLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpVbmljb2RlOjopOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjpmb2xkQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRv
TG93ZXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6dG9UaXRsZUNhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0FyYWJpY0No
YXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0Zvcm1hdENoYXIpOgorICAgICAgICAoV1RG
OjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNQ
cmludGFibGVDaGFyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNEaWdpdCk6CisgICAgICAg
IChXVEY6OlVuaWNvZGU6OmlzUHVuY3QpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjptaXJyb3Jl
ZENoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjYXRlZ29yeSk6CisgICAgICAgIChXVEY6
OlVuaWNvZGU6OmRpcmVjdGlvbik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzTG93ZXIpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpkaWdpdFZhbHVlKToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6Y29tYmluaW5nQ2xhc3MpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpkZWNvbXBvc2l0aW9u
VHlwZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnVtZW1jYXNlY21wKToKKwogMjAwOC0wOS0w
MiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBidWls
ZCBmaXhlcwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAkocmV2aXNpb24g
MzYwMjUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJxdDQvVW5pY29kZVF0NC5oIgogI2Vs
aWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUgPHd0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1
Lmg+CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgPHd0Zi91bmljb2RlL2dsaWIv
VW5pY29kZUdMaWIuaD4KICNlbHNlCiAjZXJyb3IgIlVua25vd24gVW5pY29kZSBpbXBsZW1lbnRh
dGlvbiIKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmlj
b2RlR0xpYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIv
VW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L2dsaWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NzcgQEAKKy8vIC0q
LSBjLWJhc2ljLW9mZnNldDogMiAtKi0KKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBsaWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAbnlwb3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBC
aWxsZXRlciA8akBiaXRyb24uY2g+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEtKU19VTklDT0RF
X0dMSUJfSAorI2RlZmluZSBLSlNfVU5JQ09ERV9HTElCX0gKKworI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisKK3R5cGVkZWYgdWludDE2X3QgVUNo
YXI7Cit0eXBlZGVmIGludDMyX3QgVUNoYXIzMjsKKworLy8gY29waWVkIGZyb20gR0xpYgorCisv
KiBUYWJsZSBvZiBjYXNlZm9sZGluZyBjYXNlcyB0aGF0IGNhbid0IGJlIGRlcml2ZWQgYnkgbG93
ZXJjYXNpbmcKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgIGd1aW50MTYgY2g7CisgIGdj
aGFyIGRhdGFbN107Cit9IGNhc2Vmb2xkX3RhYmxlW10gPSB7CisgIHsgMHgwMGI1LCAiXHhjZVx4
YmMiIH0sCisgIHsgMHgwMGRmLCAiXHg3M1x4NzMiIH0sCisgIHsgMHgwMTMwLCAiXHg2OVx4Y2Nc
eDg3IiB9LAorICB7IDB4MDE0OSwgIlx4Y2FceGJjXHg2ZSIgfSwKKyAgeyAweDAxN2YsICJceDcz
IiB9LAorICB7IDB4MDFmMCwgIlx4NmFceGNjXHg4YyIgfSwKKyAgeyAweDAzNDUsICJceGNlXHhi
OSIgfSwKKyAgeyAweDAzOTAsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgw
M2IwLCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgxIiB9LAorICB7IDB4MDNjMiwgIlx4Y2ZceDgz
IiB9LAorICB7IDB4MDNkMCwgIlx4Y2VceGIyIiB9LAorICB7IDB4MDNkMSwgIlx4Y2VceGI4IiB9
LAorICB7IDB4MDNkNSwgIlx4Y2ZceDg2IiB9LAorICB7IDB4MDNkNiwgIlx4Y2ZceDgwIiB9LAor
ICB7IDB4MDNmMCwgIlx4Y2VceGJhIiB9LAorICB7IDB4MDNmMSwgIlx4Y2ZceDgxIiB9LAorICB7
IDB4MDNmNSwgIlx4Y2VceGI1IiB9LAorICB7IDB4MDU4NywgIlx4ZDVceGE1XHhkNlx4ODIiIH0s
CisgIHsgMHgxZTk2LCAiXHg2OFx4Y2NceGIxIiB9LAorICB7IDB4MWU5NywgIlx4NzRceGNjXHg4
OCIgfSwKKyAgeyAweDFlOTgsICJceDc3XHhjY1x4OGEiIH0sCisgIHsgMHgxZTk5LCAiXHg3OVx4
Y2NceDhhIiB9LAorICB7IDB4MWU5YSwgIlx4NjFceGNhXHhiZSIgfSwKKyAgeyAweDFlOWIsICJc
eGUxXHhiOVx4YTEiIH0sCisgIHsgMHgxZjUwLCAiXHhjZlx4ODVceGNjXHg5MyIgfSwKKyAgeyAw
eDFmNTIsICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4ODAiIH0sCisgIHsgMHgxZjU0LCAiXHhjZlx4
ODVceGNjXHg5M1x4Y2NceDgxIiB9LAorICB7IDB4MWY1NiwgIlx4Y2ZceDg1XHhjY1x4OTNceGNk
XHg4MiIgfSwKKyAgeyAweDFmODAsICJceGUxXHhiY1x4ODBceGNlXHhiOSIgfSwKKyAgeyAweDFm
ODEsICJceGUxXHhiY1x4ODFceGNlXHhiOSIgfSwKKyAgeyAweDFmODIsICJceGUxXHhiY1x4ODJc
eGNlXHhiOSIgfSwKKyAgeyAweDFmODMsICJceGUxXHhiY1x4ODNceGNlXHhiOSIgfSwKKyAgeyAw
eDFmODQsICJceGUxXHhiY1x4ODRceGNlXHhiOSIgfSwKKyAgeyAweDFmODUsICJceGUxXHhiY1x4
ODVceGNlXHhiOSIgfSwKKyAgeyAweDFmODYsICJceGUxXHhiY1x4ODZceGNlXHhiOSIgfSwKKyAg
eyAweDFmODcsICJceGUxXHhiY1x4ODdceGNlXHhiOSIgfSwKKyAgeyAweDFmODgsICJceGUxXHhi
Y1x4ODBceGNlXHhiOSIgfSwKKyAgeyAweDFmODksICJceGUxXHhiY1x4ODFceGNlXHhiOSIgfSwK
KyAgeyAweDFmOGEsICJceGUxXHhiY1x4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmOGIsICJceGUx
XHhiY1x4ODNceGNlXHhiOSIgfSwKKyAgeyAweDFmOGMsICJceGUxXHhiY1x4ODRceGNlXHhiOSIg
fSwKKyAgeyAweDFmOGQsICJceGUxXHhiY1x4ODVceGNlXHhiOSIgfSwKKyAgeyAweDFmOGUsICJc
eGUxXHhiY1x4ODZceGNlXHhiOSIgfSwKKyAgeyAweDFmOGYsICJceGUxXHhiY1x4ODdceGNlXHhi
OSIgfSwKKyAgeyAweDFmOTAsICJceGUxXHhiY1x4YTBceGNlXHhiOSIgfSwKKyAgeyAweDFmOTEs
ICJceGUxXHhiY1x4YTFceGNlXHhiOSIgfSwKKyAgeyAweDFmOTIsICJceGUxXHhiY1x4YTJceGNl
XHhiOSIgfSwKKyAgeyAweDFmOTMsICJceGUxXHhiY1x4YTNceGNlXHhiOSIgfSwKKyAgeyAweDFm
OTQsICJceGUxXHhiY1x4YTRceGNlXHhiOSIgfSwKKyAgeyAweDFmOTUsICJceGUxXHhiY1x4YTVc
eGNlXHhiOSIgfSwKKyAgeyAweDFmOTYsICJceGUxXHhiY1x4YTZceGNlXHhiOSIgfSwKKyAgeyAw
eDFmOTcsICJceGUxXHhiY1x4YTdceGNlXHhiOSIgfSwKKyAgeyAweDFmOTgsICJceGUxXHhiY1x4
YTBceGNlXHhiOSIgfSwKKyAgeyAweDFmOTksICJceGUxXHhiY1x4YTFceGNlXHhiOSIgfSwKKyAg
eyAweDFmOWEsICJceGUxXHhiY1x4YTJceGNlXHhiOSIgfSwKKyAgeyAweDFmOWIsICJceGUxXHhi
Y1x4YTNceGNlXHhiOSIgfSwKKyAgeyAweDFmOWMsICJceGUxXHhiY1x4YTRceGNlXHhiOSIgfSwK
KyAgeyAweDFmOWQsICJceGUxXHhiY1x4YTVceGNlXHhiOSIgfSwKKyAgeyAweDFmOWUsICJceGUx
XHhiY1x4YTZceGNlXHhiOSIgfSwKKyAgeyAweDFmOWYsICJceGUxXHhiY1x4YTdceGNlXHhiOSIg
fSwKKyAgeyAweDFmYTAsICJceGUxXHhiZFx4YTBceGNlXHhiOSIgfSwKKyAgeyAweDFmYTEsICJc
eGUxXHhiZFx4YTFceGNlXHhiOSIgfSwKKyAgeyAweDFmYTIsICJceGUxXHhiZFx4YTJceGNlXHhi
OSIgfSwKKyAgeyAweDFmYTMsICJceGUxXHhiZFx4YTNceGNlXHhiOSIgfSwKKyAgeyAweDFmYTQs
ICJceGUxXHhiZFx4YTRceGNlXHhiOSIgfSwKKyAgeyAweDFmYTUsICJceGUxXHhiZFx4YTVceGNl
XHhiOSIgfSwKKyAgeyAweDFmYTYsICJceGUxXHhiZFx4YTZceGNlXHhiOSIgfSwKKyAgeyAweDFm
YTcsICJceGUxXHhiZFx4YTdceGNlXHhiOSIgfSwKKyAgeyAweDFmYTgsICJceGUxXHhiZFx4YTBc
eGNlXHhiOSIgfSwKKyAgeyAweDFmYTksICJceGUxXHhiZFx4YTFceGNlXHhiOSIgfSwKKyAgeyAw
eDFmYWEsICJceGUxXHhiZFx4YTJceGNlXHhiOSIgfSwKKyAgeyAweDFmYWIsICJceGUxXHhiZFx4
YTNceGNlXHhiOSIgfSwKKyAgeyAweDFmYWMsICJceGUxXHhiZFx4YTRceGNlXHhiOSIgfSwKKyAg
eyAweDFmYWQsICJceGUxXHhiZFx4YTVceGNlXHhiOSIgfSwKKyAgeyAweDFmYWUsICJceGUxXHhi
ZFx4YTZceGNlXHhiOSIgfSwKKyAgeyAweDFmYWYsICJceGUxXHhiZFx4YTdceGNlXHhiOSIgfSwK
KyAgeyAweDFmYjIsICJceGUxXHhiZFx4YjBceGNlXHhiOSIgfSwKKyAgeyAweDFmYjMsICJceGNl
XHhiMVx4Y2VceGI5IiB9LAorICB7IDB4MWZiNCwgIlx4Y2VceGFjXHhjZVx4YjkiIH0sCisgIHsg
MHgxZmI2LCAiXHhjZVx4YjFceGNkXHg4MiIgfSwKKyAgeyAweDFmYjcsICJceGNlXHhiMVx4Y2Rc
eDgyXHhjZVx4YjkiIH0sCisgIHsgMHgxZmJjLCAiXHhjZVx4YjFceGNlXHhiOSIgfSwKKyAgeyAw
eDFmYmUsICJceGNlXHhiOSIgfSwKKyAgeyAweDFmYzIsICJceGUxXHhiZFx4YjRceGNlXHhiOSIg
fSwKKyAgeyAweDFmYzMsICJceGNlXHhiN1x4Y2VceGI5IiB9LAorICB7IDB4MWZjNCwgIlx4Y2Vc
eGFlXHhjZVx4YjkiIH0sCisgIHsgMHgxZmM2LCAiXHhjZVx4YjdceGNkXHg4MiIgfSwKKyAgeyAw
eDFmYzcsICJceGNlXHhiN1x4Y2RceDgyXHhjZVx4YjkiIH0sCisgIHsgMHgxZmNjLCAiXHhjZVx4
YjdceGNlXHhiOSIgfSwKKyAgeyAweDFmZDIsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODAiIH0s
CisgIHsgMHgxZmQzLCAiXHhjZVx4YjlceGNjXHg4OFx4Y2NceDgxIiB9LAorICB7IDB4MWZkNiwg
Ilx4Y2VceGI5XHhjZFx4ODIiIH0sCisgIHsgMHgxZmQ3LCAiXHhjZVx4YjlceGNjXHg4OFx4Y2Rc
eDgyIiB9LAorICB7IDB4MWZlMiwgIlx4Y2ZceDg1XHhjY1x4ODhceGNjXHg4MCIgfSwKKyAgeyAw
eDFmZTMsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgxZmU0LCAiXHhjZlx4
ODFceGNjXHg5MyIgfSwKKyAgeyAweDFmZTYsICJceGNmXHg4NVx4Y2RceDgyIiB9LAorICB7IDB4
MWZlNywgIlx4Y2ZceDg1XHhjY1x4ODhceGNkXHg4MiIgfSwKKyAgeyAweDFmZjIsICJceGUxXHhi
ZFx4YmNceGNlXHhiOSIgfSwKKyAgeyAweDFmZjMsICJceGNmXHg4OVx4Y2VceGI5IiB9LAorICB7
IDB4MWZmNCwgIlx4Y2ZceDhlXHhjZVx4YjkiIH0sCisgIHsgMHgxZmY2LCAiXHhjZlx4ODlceGNk
XHg4MiIgfSwKKyAgeyAweDFmZjcsICJceGNmXHg4OVx4Y2RceDgyXHhjZVx4YjkiIH0sCisgIHsg
MHgxZmZjLCAiXHhjZlx4ODlceGNlXHhiOSIgfSwKKyAgeyAweDIxNjAsICJceGUyXHg4NVx4YjAi
IH0sCisgIHsgMHgyMTYxLCAiXHhlMlx4ODVceGIxIiB9LAorICB7IDB4MjE2MiwgIlx4ZTJceDg1
XHhiMiIgfSwKKyAgeyAweDIxNjMsICJceGUyXHg4NVx4YjMiIH0sCisgIHsgMHgyMTY0LCAiXHhl
Mlx4ODVceGI0IiB9LAorICB7IDB4MjE2NSwgIlx4ZTJceDg1XHhiNSIgfSwKKyAgeyAweDIxNjYs
ICJceGUyXHg4NVx4YjYiIH0sCisgIHsgMHgyMTY3LCAiXHhlMlx4ODVceGI3IiB9LAorICB7IDB4
MjE2OCwgIlx4ZTJceDg1XHhiOCIgfSwKKyAgeyAweDIxNjksICJceGUyXHg4NVx4YjkiIH0sCisg
IHsgMHgyMTZhLCAiXHhlMlx4ODVceGJhIiB9LAorICB7IDB4MjE2YiwgIlx4ZTJceDg1XHhiYiIg
fSwKKyAgeyAweDIxNmMsICJceGUyXHg4NVx4YmMiIH0sCisgIHsgMHgyMTZkLCAiXHhlMlx4ODVc
eGJkIiB9LAorICB7IDB4MjE2ZSwgIlx4ZTJceDg1XHhiZSIgfSwKKyAgeyAweDIxNmYsICJceGUy
XHg4NVx4YmYiIH0sCisgIHsgMHgyNGI2LCAiXHhlMlx4OTNceDkwIiB9LAorICB7IDB4MjRiNywg
Ilx4ZTJceDkzXHg5MSIgfSwKKyAgeyAweDI0YjgsICJceGUyXHg5M1x4OTIiIH0sCisgIHsgMHgy
NGI5LCAiXHhlMlx4OTNceDkzIiB9LAorICB7IDB4MjRiYSwgIlx4ZTJceDkzXHg5NCIgfSwKKyAg
eyAweDI0YmIsICJceGUyXHg5M1x4OTUiIH0sCisgIHsgMHgyNGJjLCAiXHhlMlx4OTNceDk2IiB9
LAorICB7IDB4MjRiZCwgIlx4ZTJceDkzXHg5NyIgfSwKKyAgeyAweDI0YmUsICJceGUyXHg5M1x4
OTgiIH0sCisgIHsgMHgyNGJmLCAiXHhlMlx4OTNceDk5IiB9LAorICB7IDB4MjRjMCwgIlx4ZTJc
eDkzXHg5YSIgfSwKKyAgeyAweDI0YzEsICJceGUyXHg5M1x4OWIiIH0sCisgIHsgMHgyNGMyLCAi
XHhlMlx4OTNceDljIiB9LAorICB7IDB4MjRjMywgIlx4ZTJceDkzXHg5ZCIgfSwKKyAgeyAweDI0
YzQsICJceGUyXHg5M1x4OWUiIH0sCisgIHsgMHgyNGM1LCAiXHhlMlx4OTNceDlmIiB9LAorICB7
IDB4MjRjNiwgIlx4ZTJceDkzXHhhMCIgfSwKKyAgeyAweDI0YzcsICJceGUyXHg5M1x4YTEiIH0s
CisgIHsgMHgyNGM4LCAiXHhlMlx4OTNceGEyIiB9LAorICB7IDB4MjRjOSwgIlx4ZTJceDkzXHhh
MyIgfSwKKyAgeyAweDI0Y2EsICJceGUyXHg5M1x4YTQiIH0sCisgIHsgMHgyNGNiLCAiXHhlMlx4
OTNceGE1IiB9LAorICB7IDB4MjRjYywgIlx4ZTJceDkzXHhhNiIgfSwKKyAgeyAweDI0Y2QsICJc
eGUyXHg5M1x4YTciIH0sCisgIHsgMHgyNGNlLCAiXHhlMlx4OTNceGE4IiB9LAorICB7IDB4MjRj
ZiwgIlx4ZTJceDkzXHhhOSIgfSwKKyAgeyAweGZiMDAsICJceDY2XHg2NiIgfSwKKyAgeyAweGZi
MDEsICJceDY2XHg2OSIgfSwKKyAgeyAweGZiMDIsICJceDY2XHg2YyIgfSwKKyAgeyAweGZiMDMs
ICJceDY2XHg2Nlx4NjkiIH0sCisgIHsgMHhmYjA0LCAiXHg2Nlx4NjZceDZjIiB9LAorICB7IDB4
ZmIwNSwgIlx4NzNceDc0IiB9LAorICB7IDB4ZmIwNiwgIlx4NzNceDc0IiB9LAorICB7IDB4ZmIx
MywgIlx4ZDVceGI0XHhkNVx4YjYiIH0sCisgIHsgMHhmYjE0LCAiXHhkNVx4YjRceGQ1XHhhNSIg
fSwKKyAgeyAweGZiMTUsICJceGQ1XHhiNFx4ZDVceGFiIiB9LAorICB7IDB4ZmIxNiwgIlx4ZDVc
eGJlXHhkNVx4YjYiIH0sCisgIHsgMHhmYjE3LCAiXHhkNVx4YjRceGQ1XHhhZCIgfSwKK307CisK
KworLy8gc29tZSBkZWZpbmVzIGZyb20gSUNVCisKKyNkZWZpbmUgVTE2X0lTX0xFQUQoYykgKCgo
YykmMHhmZmZmZmMwMCk9PTB4ZDgwMCkKKyNkZWZpbmUgVTE2X0lTX1RSQUlMKGMpICgoKGMpJjB4
ZmZmZmZjMDApPT0weGRjMDApCisjZGVmaW5lIFUxNl9TVVJST0dBVEVfT0ZGU0VUICgoMHhkODAw
PDwxMFVMKSsweGRjMDAtMHgxMDAwMCkKKyNkZWZpbmUgVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxl
YWQsIHRyYWlsKSBcCisgICAgKCgoVUNoYXIzMikobGVhZCk8PDEwVUwpKyhVQ2hhcjMyKSh0cmFp
bCktVTE2X1NVUlJPR0FURV9PRkZTRVQpCisKKyNkZWZpbmUgVTE2X0xFQUQoc3VwcGxlbWVudGFy
eSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpPj4xMCkrMHhkN2MwKQorI2RlZmluZSBVMTZfVFJB
SUwoc3VwcGxlbWVudGFyeSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpJjB4M2ZmKXwweGRjMDAp
CisKKyNkZWZpbmUgVV9JU19TVVJST0dBVEUoYykgKCgoYykmMHhmZmZmZjgwMCk9PTB4ZDgwMCkK
KyNkZWZpbmUgVTE2X0lTX1NJTkdMRShjKSAhVV9JU19TVVJST0dBVEUoYykKKyNkZWZpbmUgVTE2
X0lTX1NVUlJPR0FURShjKSBVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNfU1VSUk9H
QVRFX0xFQUQoYykgKCgoYykmMHg0MDApPT0wKQorCisjZGVmaW5lIFUxNl9ORVhUKHMsIGksIGxl
bmd0aCwgYykgeyBcCisgICAgKGMpPShzKVsoaSkrK107IFwKKyAgICBpZihVMTZfSVNfTEVBRChj
KSkgeyBcCisgICAgICAgIHVpbnQxNl90IF9fYzI7IFwKKyAgICAgICAgaWYoKGkpPChsZW5ndGgp
ICYmIFUxNl9JU19UUkFJTChfX2MyPShzKVsoaSldKSkgeyBcCisgICAgICAgICAgICArKyhpKTsg
XAorICAgICAgICAgICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWSgoYyksIF9fYzIpOyBcCisg
ICAgICAgIH0gXAorICAgIH0gXAorfQorCisjZGVmaW5lIFVfTUFTSyh4KSAoKHVpbnQzMl90KTE8
PCh4KSkKKworbmFtZXNwYWNlIFdURiB7CisgIG5hbWVzcGFjZSBVbmljb2RlIHsKKworICAgIGVu
dW0gRGlyZWN0aW9uIHsKKyAgICAgIExlZnRUb1JpZ2h0LAorICAgICAgUmlnaHRUb0xlZnQsCisg
ICAgICBFdXJvcGVhbk51bWJlciwKKyAgICAgIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yLAorICAg
ICAgRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yLAorICAgICAgQXJhYmljTnVtYmVyLAorICAgICAg
Q29tbW9uTnVtYmVyU2VwYXJhdG9yLAorICAgICAgQmxvY2tTZXBhcmF0b3IsCisgICAgICBTZWdt
ZW50U2VwYXJhdG9yLAorICAgICAgV2hpdGVTcGFjZU5ldXRyYWwsCisgICAgICBPdGhlck5ldXRy
YWwsCisgICAgICBMZWZ0VG9SaWdodEVtYmVkZGluZywKKyAgICAgIExlZnRUb1JpZ2h0T3ZlcnJp
ZGUsCisgICAgICBSaWdodFRvTGVmdEFyYWJpYywKKyAgICAgIFJpZ2h0VG9MZWZ0RW1iZWRkaW5n
LAorICAgICAgUmlnaHRUb0xlZnRPdmVycmlkZSwKKyAgICAgIFBvcERpcmVjdGlvbmFsRm9ybWF0
LAorICAgICAgTm9uU3BhY2luZ01hcmssCisgICAgICBCb3VuZGFyeU5ldXRyYWwKKyAgICB9Owor
CisgICAgZW51bSBEZWNvbXBvc2l0aW9uVHlwZSB7CisgICAgICBEZWNvbXBvc2l0aW9uTm9uZSwK
KyAgICAgIERlY29tcG9zaXRpb25DYW5vbmljYWwsCisgICAgICBEZWNvbXBvc2l0aW9uQ29tcGF0
LAorICAgICAgRGVjb21wb3NpdGlvbkNpcmNsZSwKKyAgICAgIERlY29tcG9zaXRpb25GaW5hbCwK
KyAgICAgIERlY29tcG9zaXRpb25Gb250LAorICAgICAgRGVjb21wb3NpdGlvbkZyYWN0aW9uLAor
ICAgICAgRGVjb21wb3NpdGlvbkluaXRpYWwsCisgICAgICBEZWNvbXBvc2l0aW9uSXNvbGF0ZWQs
CisgICAgICBEZWNvbXBvc2l0aW9uTWVkaWFsLAorICAgICAgRGVjb21wb3NpdGlvbk5hcnJvdywK
KyAgICAgIERlY29tcG9zaXRpb25Ob0JyZWFrLAorICAgICAgRGVjb21wb3NpdGlvblNtYWxsLAor
ICAgICAgRGVjb21wb3NpdGlvblNxdWFyZSwKKyAgICAgIERlY29tcG9zaXRpb25TdWIsCisgICAg
ICBEZWNvbXBvc2l0aW9uU3VwZXIsCisgICAgICBEZWNvbXBvc2l0aW9uVmVydGljYWwsCisgICAg
ICBEZWNvbXBvc2l0aW9uV2lkZSwKKyAgICB9OworCisgICAgZW51bSBDaGFyQ2F0ZWdvcnkgewor
ICAgICAgTm9DYXRlZ29yeSA9ICAwLAorICAgICAgT3RoZXJfTm90QXNzaWduZWQgPSBVX01BU0so
R19VTklDT0RFX1VOQVNTSUdORUQpLAorICAgICAgTGV0dGVyX1VwcGVyY2FzZSA9IFVfTUFTSyhH
X1VOSUNPREVfVVBQRVJDQVNFX0xFVFRFUiksCisgICAgICBMZXR0ZXJfTG93ZXJjYXNlID0gVV9N
QVNLKEdfVU5JQ09ERV9MT1dFUkNBU0VfTEVUVEVSKSwKKyAgICAgIExldHRlcl9UaXRsZWNhc2Ug
PSBVX01BU0soR19VTklDT0RFX1RJVExFQ0FTRV9MRVRURVIpLAorICAgICAgTGV0dGVyX01vZGlm
aWVyID0gVV9NQVNLKEdfVU5JQ09ERV9NT0RJRklFUl9MRVRURVIpLAorICAgICAgTGV0dGVyX090
aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9MRVRURVIpLAorCisgICAgICBNYXJrX05vblNw
YWNpbmcgPSBVX01BU0soR19VTklDT0RFX05PTl9TUEFDSU5HX01BUkspLAorICAgICAgTWFya19F
bmNsb3NpbmcgPSBVX01BU0soR19VTklDT0RFX0VOQ0xPU0lOR19NQVJLKSwKKyAgICAgIE1hcmtf
U3BhY2luZ0NvbWJpbmluZyA9IFVfTUFTSyhHX1VOSUNPREVfQ09NQklOSU5HX01BUkspLAorCisg
ICAgICBOdW1iZXJfRGVjaW1hbERpZ2l0ID0gVV9NQVNLKEdfVU5JQ09ERV9ERUNJTUFMX05VTUJF
UiksCisgICAgICBOdW1iZXJfTGV0dGVyID0gVV9NQVNLKEdfVU5JQ09ERV9MRVRURVJfTlVNQkVS
KSwKKyAgICAgIE51bWJlcl9PdGhlciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfTlVNQkVSKSwK
KworICAgICAgU2VwYXJhdG9yX1NwYWNlID0gVV9NQVNLKEdfVU5JQ09ERV9TUEFDRV9TRVBBUkFU
T1IpLAorICAgICAgU2VwYXJhdG9yX0xpbmUgPSBVX01BU0soR19VTklDT0RFX0xJTkVfU0VQQVJB
VE9SKSwKKyAgICAgIFNlcGFyYXRvcl9QYXJhZ3JhcGggPSBVX01BU0soR19VTklDT0RFX1BBUkFH
UkFQSF9TRVBBUkFUT1IpLAorCisgICAgICBPdGhlcl9Db250cm9sID0gVV9NQVNLKEdfVU5JQ09E
RV9DT05UUk9MKSwKKyAgICAgIE90aGVyX0Zvcm1hdCA9IFVfTUFTSyhHX1VOSUNPREVfRk9STUFU
KSwKKyAgICAgIE90aGVyX1ByaXZhdGVVc2UgPSBVX01BU0soR19VTklDT0RFX1BSSVZBVEVfVVNF
KSwKKyAgICAgIE90aGVyX1N1cnJvZ2F0ZSA9IFVfTUFTSyhHX1VOSUNPREVfU1VSUk9HQVRFKSwK
KworICAgICAgUHVuY3R1YXRpb25fRGFzaCA9IFVfTUFTSyhHX1VOSUNPREVfREFTSF9QVU5DVFVB
VElPTiksCisgICAgICBQdW5jdHVhdGlvbl9PcGVuID0gVV9NQVNLKEdfVU5JQ09ERV9PUEVOX1BV
TkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX0Nsb3NlID0gVV9NQVNLKEdfVU5JQ09ERV9D
TE9TRV9QVU5DVFVBVElPTiksCisgICAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IgPSBVX01BU0so
R19VTklDT0RFX0NPTk5FQ1RfUFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fT3RoZXIg
PSBVX01BU0soR19VTklDT0RFX09USEVSX1BVTkNUVUFUSU9OKSwKKworICAgICAgU3ltYm9sX01h
dGggPSBVX01BU0soR19VTklDT0RFX01BVEhfU1lNQk9MKSwKKyAgICAgIFN5bWJvbF9DdXJyZW5j
eSA9IFVfTUFTSyhHX1VOSUNPREVfQ1VSUkVOQ1lfU1lNQk9MKSwKKyAgICAgIFN5bWJvbF9Nb2Rp
ZmllciA9IFVfTUFTSyhHX1VOSUNPREVfTU9ESUZJRVJfU1lNQk9MKSwKKyAgICAgIFN5bWJvbF9P
dGhlciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfU1lNQk9MKSwKKworICAgICAgUHVuY3R1YXRp
b25fSW5pdGlhbFF1b3RlID0gVV9NQVNLKEdfVU5JQ09ERV9JTklUSUFMX1BVTkNUVUFUSU9OKSwK
KyAgICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUgPSBVX01BU0soR19VTklDT0RFX0ZJTkFMX1BV
TkNUVUFUSU9OKQorICAgIH07CisKKyAgICBpbmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMy
IGNoKQorICAgIHsKKyAgICAgICAgLy8gYWRkIGdfdW5pY2hhcl9jYXNlZm9sZCB0byBHTGliIHVw
c3RyZWFtPworCisgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgIGludCBlbmQgPSBHX05f
RUxFTUVOVFMoY2FzZWZvbGRfdGFibGUpOworCisgICAgICAgIGlmIChjaCA+PSBjYXNlZm9sZF90
YWJsZVtzdGFydF0uY2ggJiYKKyAgICAgICAgICAgIGNoIDw9IGNhc2Vmb2xkX3RhYmxlW2VuZCAt
IDFdLmNoKSB7CisgICAgICAgICAgICB3aGlsZSAoVFJVRSkgeworICAgICAgICAgICAgICAgIGlu
dCBoYWxmID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgICAgICAgICAgICAgICAgaWYgKGNoID09IGNh
c2Vmb2xkX3RhYmxlW2hhbGZdLmNoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnX3V0
ZjhfZ2V0X2NoYXIoY2FzZWZvbGRfdGFibGVbaGFsZl0uZGF0YSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChoYWxmID09IHN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPiBjYXNlZm9sZF90YWJsZVtoYWxmXS5jaCkg
eworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGhhbGY7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gaGFsZjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZ191bmljaGFyX3Rv
bG93ZXIgKGNoKTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IGZvbGRDYXNlKFVDaGFyKiByZXN1
bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJv
b2wqIGVycm9yKQorICAgIHsKKyAgICAgICAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOworCisgICAg
ICAgIGNoYXIgKnV0ZjhzcmMgPSBnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAs
ICZnZXJyb3IpOworICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBU
UlVFOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgY2hhciAq
dXRmOHJlc3VsdCA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4c3JjLCAtMSk7CisgICAgICAgIGdfZnJl
ZSh1dGY4c3JjKTsKKworICAgICAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAg
ICAgIFVDaGFyKiB1dGYxNnJlc3VsdCA9IGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LCAtMSwg
MCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhyZXN1
bHQpOworICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOwor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHV0ZjE2cmVz
dWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOwor
ICAgICAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB1dGYx
NnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJl
c3VsdCwgdXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZ19mcmVl
KHV0ZjE2cmVzdWx0KTsKKworICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAg
fQorCisgICAgaW5saW5lIGludCB0b0xvd2VyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5n
dGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQorICAgIHsK
KyAgICAgICAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOworCisgICAgICAgIGNoYXIgKnV0ZjhzcmMg
PSBnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3IpOworICAgICAg
ICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgY2hhciAqdXRmOHJlc3VsdCA9IGdfdXRm
OF9zdHJkb3duKHV0ZjhzcmMsIC0xKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhzcmMpOworCisgICAg
ICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAgVUNoYXIqIHV0ZjE2cmVz
dWx0ID0gZ191dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1bHQsIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5n
dGgsICZnZXJyb3IpOworICAgICAgICBnX2ZyZWUodXRmOHJlc3VsdCk7CisgICAgICAgIGlmIChn
ZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRM
ZW5ndGgpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICBnX2ZyZWUo
dXRmMTZyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAg
ICAgICB9CisgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LCB1dGYxNnJlc3VsdExl
bmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworCisg
ICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICB9CisKKyAgICBpbmxpbmUgVUNo
YXIzMiB0b0xvd2VyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX3Rv
bG93ZXIoYyk7CisgICAgfQorCisgICAgaW5saW5lIFVDaGFyMzIgdG9VcHBlcihVQ2hhcjMyIGMp
CisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl90b3VwcGVyKGMpOworICAgIH0KKworICAg
IGlubGluZSBpbnQgdG9VcHBlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25z
dCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICB7CisgICAgICAg
IEdFcnJvciAqZ2Vycm9yID0gTlVMTDsKKworICAgICAgICBjaGFyICp1dGY4c3JjID0gZ191dGYx
Nl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yKTsKKyAgICAgICAgaWYgKGdl
cnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgKnV0ZjhyZXN1bHQgPSBnX3V0Zjhfc3RydXAo
dXRmOHNyYywgLTEpOworICAgICAgICBnX2ZyZWUodXRmOHNyYyk7CisKKyAgICAgICAgbG9uZyB1
dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICBVQ2hhciogdXRmMTZyZXN1bHQgPSBnX3V0
ZjhfdG9fdXRmMTYodXRmOHJlc3VsdCwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJv
cik7CisgICAgICAgIGdfZnJlZSh1dGY4cmVzdWx0KTsKKyAgICAgICAgaWYgKGdlcnJvcikgewor
ICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgewor
ICAgICAgICAgICAgKmVycm9yID0gVFJVRTsKKyAgICAgICAgICAgIGdfZnJlZSh1dGYxNnJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKyAg
ICAgICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZyZXN1bHQsIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSk7CisgICAgICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisKKyAgICAgICAgcmV0
dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMyIHRvVGl0
bGVDYXNlKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX3RvdGl0bGUo
Yyk7CisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKKyAg
ICB7CisgICAgICByZXR1cm4gYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2RkY7CisgICAgfQorCisg
ICAgaW5saW5lIGJvb2wgaXNGb3JtYXRDaGFyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1
cm4gZ191bmljaGFyX3R5cGUoYykgPT0gR19VTklDT0RFX0ZPUk1BVDsKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBpc1NlcGFyYXRvclNwYWNlKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1
cm4gZ191bmljaGFyX3R5cGUoYykgPT0gR19VTklDT0RFX1NQQUNFX1NFUEFSQVRPUjsKKyAgICB9
CisKKyAgICBpbmxpbmUgYm9vbCBpc1ByaW50YWJsZUNoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAg
ICAgIHJldHVybiBnX3VuaWNoYXJfaXNwcmludChjKTsKKyAgICB9CisgICAgCisgICAgaW5saW5l
IGJvb2wgaXNEaWdpdChVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9p
c2RpZ2l0KGMpOworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUHVuY3QoVUNoYXIzMiBjKQor
ICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNwdW5jdChjKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgVUNoYXIzMiBtaXJyb3JlZENoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIGd1bmlj
aGFyIG1pcnJvciA9IDA7CisgICAgICBnX3VuaWNoYXJfZ2V0X21pcnJvcl9jaGFyKGMsICZtaXJy
b3IpOworICAgICAgcmV0dXJuIG1pcnJvcjsKKyAgICB9CisKKyAgICBpbmxpbmUgQ2hhckNhdGVn
b3J5IGNhdGVnb3J5KFVDaGFyMzIgYykKKyAgICB7CisgICAgICBpZiAoYyA+IDB4ZmZmZikgewor
ICAgICAgICAgIHJldHVybiBOb0NhdGVnb3J5OworICAgICAgfQorICAgICAgcmV0dXJuIChDaGFy
Q2F0ZWdvcnkpIFVfTUFTSyhnX3VuaWNoYXJfdHlwZShjKSk7CisgICAgfQorCisgICAgaW5saW5l
IERpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIFBhbmdvQmlkaVR5
cGUgdHlwZSA9IHBhbmdvX2JpZGlfdHlwZV9mb3JfdW5pY2hhcihjKTsKKyAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTDogcmV0dXJuIExlZnRUb1JpZ2h0
OworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUjogcmV0dXJuIFJpZ2h0VG9MZWZ0OworICAg
ICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQUw6IHJldHVybiBSaWdodFRvTGVmdEFyYWJpYzsKKyAg
ICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0xSRTogcmV0dXJuIExlZnRUb1JpZ2h0RW1iZWRkaW5n
OworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUkxFOiByZXR1cm4gUmlnaHRUb0xlZnRFbWJl
ZGRpbmc7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MUk86IHJldHVybiBMZWZ0VG9SaWdo
dE92ZXJyaWRlOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUkxPOiByZXR1cm4gUmlnaHRU
b0xlZnRPdmVycmlkZTsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1BERjogcmV0dXJuIFBv
cERpcmVjdGlvbmFsRm9ybWF0OworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRU46IHJldHVy
biBFdXJvcGVhbk51bWJlcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0FOOiByZXR1cm4g
QXJhYmljTnVtYmVyOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVM6IHJldHVybiBFdXJv
cGVhbk51bWJlclNlcGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0VUOiByZXR1
cm4gRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVf
Q1M6IHJldHVybiBDb21tb25OdW1iZXJTZXBhcmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9OU006IHJldHVybiBOb25TcGFjaW5nTWFyazsKKyAgICAgIGNhc2UgUEFOR09fQklESV9U
WVBFX0JOOiByZXR1cm4gQm91bmRhcnlOZXV0cmFsOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZ
UEVfQjogcmV0dXJuIEJsb2NrU2VwYXJhdG9yOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVf
UzogcmV0dXJuIFNlZ21lbnRTZXBhcmF0b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9X
UzogcmV0dXJuIFdoaXRlU3BhY2VOZXV0cmFsOworICAgICAgZGVmYXVsdDogcmV0dXJuIE90aGVy
TmV1dHJhbDsKKyAgICAgIH0gCisgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNMb3dlcihVQ2hh
cjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc2xvd2VyKGMpOworICAgIH0K
KworICAgIGlubGluZSBpbnQgZGlnaXRWYWx1ZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0
dXJuIGdfdW5pY2hhcl9kaWdpdF92YWx1ZShjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdWludDhf
dCBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyIGMpCisgICAgeworICAgICAgLy8gcmV0dXJuIGdfdW5p
Y2hhcl9jb21iaW5pbmdfY2xhc3MoYyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBp
bmxpbmUgRGVjb21wb3NpdGlvblR5cGUgZGVjb21wb3NpdGlvblR5cGUoVUNoYXIzMiBjKQorICAg
IHsKKyAgICAgIC8vIEZJWE1FCisgICAgICByZXR1cm4gRGVjb21wb3NpdGlvbk5vbmU7CisgICAg
fQorCisgICAgaW5saW5lIGludCB1bWVtY2FzZWNtcChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNo
YXIqIGIsIGludCBsZW4pCisgICAgeworICAgICAgY2hhciAqdXRmOGEgPSBnX3V0ZjE2X3RvX3V0
ZjgoYSwgbGVuLCAwLCAwLCBOVUxMKTsKKyAgICAgIGNoYXIgKnV0ZjhiID0gZ191dGYxNl90b191
dGY4KGIsIGxlbiwgMCwgMCwgTlVMTCk7CisKKyAgICAgIGNoYXIgKmZvbGRlZEEgPSBnX3V0Zjhf
Y2FzZWZvbGQodXRmOGEsIC0xKTsKKyAgICAgIGNoYXIgKmZvbGRlZEIgPSBnX3V0ZjhfY2FzZWZv
bGQodXRmOGIsIC0xKTsKKworICAgICAgZ19mcmVlKHV0ZjhhKTsKKyAgICAgIGdfZnJlZSh1dGY4
Yik7CisKKyAgICAgIGludCByZXN1bHQgPSBnX3V0ZjhfY29sbGF0ZShmb2xkZWRBLCBmb2xkZWRC
KTsKKworICAgICAgZ19mcmVlKGZvbGRlZEEpOworICAgICAgZ19mcmVlKGZvbGRlZEIpOworCisg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICB9Cit9CisKKyNlbmRpZgorLy8gdmltOiB0
cz0yIHN3PTIgZXQKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjAyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMDgtMDktMDIgIERvbWluaWsgUsO2dHRzY2hl
cyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVuaWNvZGUg
ZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgT3JpZ2luYWwgcGF0Y2ggYnkgSsO8
cmcgQmlsbGV0ZXIgYW5kIE5haWVtIFNoYWlrLgorICAgICAgICBBZGRlZCBwcm9iaW5nIGZvciBh
IGhhcmQtY29kZWQgbGlzdHMgb2YgdGV4dCBlbmNvZGluZ3MuCisgICAgICAgIFRoZSBiYXNpcyBv
ZiB0aGlzIGxpc3QgaXMgdGFrZW4gZnJvbSB0aGUgZW5jb2RpbmdzIHN1cHBvcnRlZCBieSBpY29u
diwKKyAgICAgICAgdGhlbiBleHRlbmRlZCBieSB0aXMtNjIwLCB3aW5kb3dzLTEyNTEsIGV1Yy1r
ciBhbmQgd2luZG93cy0xMjUzLgorCisgICAgICAgIFByb2JpbmcgaXMgbmVjZXNzYXJ5IHdpdGgg
dGhlIGN1cnJlbnQgZGVzaWduIG9mIHRleHQgY29kZWNzCisgICAgICAgIGFzIGljb252LmggZG9l
cyBub3Qgc3VwcG9ydCBlbnVtZXJhdGluZyBhdmFpbGFibGUgZW5jb2RpbmdzLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBs
ZUZvbnREYXRhR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJh
dG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtMYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRl
eHRCcmVha1ByZXZpb3VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29kZSk6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpidWlsZEJhc2VUZXh0Q29kZWNNYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRD
b2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3Rr
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpzZXRVcEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmNoYXJhY3RlckJyZWFrSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJyZWFr
SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bGluZUJyZWFrSXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6c2VudGVuY2VCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRl
eHRCcmVha0ZpcnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha0xhc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dEJyZWFrTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQ
cmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmVjZWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dEJyZWFrRm9sbG93aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRC
cmVha0N1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNUZXh0QnJlYWspOgorICAgICAgICAq
IHBsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlY0d0ayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnRlc3RFbmNvZGluZ0F2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjR3RrOjpyZWxlYXNlSUNvbnYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpj
cmVhdGVJQ29udkRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpjcmVh
dGVJQ29udkVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjplbmNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oOiBBZGRlZC4KKwogMjAwOC0wOS0wMiAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBSb2Jlbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzYwMjUpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU3LDE0ICsxNjU3LDkgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAgXAogCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Qm91bmRhcmllcy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJp
ZXNJQ1UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaCBc
Ci0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCi0JV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWMuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAg
XAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNMYXRpbjEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2
LmNwcCBcCkBAIC0xOTUzLDggKzE5NDgsMzEgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvdHJlZXMuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3pjb25mLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvemxpYi96bGliLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvemxpYi96dXRpbC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3ps
aWIvenV0aWwuaCAKKworIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQKKyMgLS0tLQoraWYg
VVNFX0lDVV9VTklDT0RFCit3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjSUNVLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAg
XAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmggXAogCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVUd0ay5j
cHAKK2VuZGlmICMgRU5EIFVTRV9DVVJMCisKKyMgLS0tLQorIyBnbGliIHVuaWNvZGUgYmFja2Vu
ZAorIyAtLS0tCitpZiBVU0VfR0xJQl9VTklDT0RFCit3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAor
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsv
VGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwCitlbmRpZgogCiAjIC0tLS0KICMgY3VybCBodHRwIGJh
Y2tlbmQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRh
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1w
bGVGb250RGF0YUd0ay5jcHAJKHJldmlzaW9uIDM2MDI1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4
ICszOSw2IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR2x5cGhC
dWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4K
LSNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9yLmgJKHJldmlzaW9uIDM2MDI1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRl
cmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKIAogICAgIGludCB0ZXh0QnJlYWtGaXJz
dChUZXh0QnJlYWtJdGVyYXRvciopOworICAgIGludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0
ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKKyAg
ICBpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4
dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0QnJlYWtQcmVj
ZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwogICAgIGludCB0ZXh0QnJlYWtGb2xsb3dp
bmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCShyZXZpc2lvbiAzNjAyNSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDExICs4OSwyMSBAQCBpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3Iq
IGJpCiAgICAgcmV0dXJuIHVicmtfZmlyc3QoYmkpOwogfQogCitpbnQgdGV4dEJyZWFrTGFzdChU
ZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIHVicmtfbGFzdChiaSk7Cit9CisK
IGludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKIHsKICAgICByZXR1cm4g
dWJya19uZXh0KGJpKTsKIH0KIAoraW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJh
dG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdWJya19wcmV2aW91cyhiaSk7Cit9CisKIGludCB0ZXh0
QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQogewogICAgIHJl
dHVybiB1YnJrX3ByZWNlZGluZyhiaSwgcG9zKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiAzNjAyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaW5j
bHVkZSA8dW5pY29kZS91bm9ybS5oPgogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogI2luY2x1ZGUg
PFFTdHJpbmc+CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgPGdsaWIuaD4KICNl
bmRpZgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpA
QCAtMTA1LDYgKzEwNywyMiBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVD
aGFyCiAgICAgUVN0cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJh
Y3RlcnMpLCBsZW5ndGgpOwogICAgIHN0ciA9IHN0ci5ub3JtYWxpemVkKFFTdHJpbmc6Ok5vcm1h
bGl6YXRpb25Gb3JtX0MpOwogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgo
KSwgaGFuZGxpbmcpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBjaGFyICp1dGY4c291
cmNlID0gZ191dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgTlVMTCk7Cisg
ICAgY2hhciAqdXRmOG5vcm1hbGl6ZWQgPSBnX3V0Zjhfbm9ybWFsaXplKHV0Zjhzb3VyY2UsIC0x
LCBHX05PUk1BTElaRV9ORkMpOworCisgICAgZ19mcmVlICh1dGY4c291cmNlKTsKKworICAgIGxv
bmcgdXRmMTZsZW5ndGg7CisgICAgVUNoYXIqIHV0ZjE2bm9ybWFsaXplZCA9IGdfdXRmOF90b191
dGYxNih1dGY4bm9ybWFsaXplZCwgLTEsIDAsICZ1dGYxNmxlbmd0aCwgTlVMTCk7CisKKyAgICBn
X2ZyZWUgKHV0Zjhub3JtYWxpemVkKTsKKworICAgIENTdHJpbmcgcmVzdWx0ID0gbmV3VGV4dENv
ZGVjKCp0aGlzKS0+ZW5jb2RlKHV0ZjE2bm9ybWFsaXplZCwgdXRmMTZsZW5ndGgsIGhhbmRsaW5n
KTsKKworICAgIGdfZnJlZSAodXRmMTZub3JtYWxpemVkKTsKKworICAgIHJldHVybiByZXN1bHQ7
CiAjZW5kaWYKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1Jl
Z2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAzNjAyNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDkg
QEAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJxdC9UZXh0Q29kZWNRdC5oIgogI2VuZGlm
CisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgImd0ay9UZXh0Q29kZWNHdGsuaCIKKyNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNzYsNiArMTc5LDExIEBAIHN0YXRpYyB2
b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoKQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJC
YXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2Rl
Y0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisj
aWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29k
aW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKKyAgICBUZXh0Q29kZWNHdGs6OnJl
Z2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CisjZW5kaWYKIH0KIAogc3RhdGlj
IHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCkBAIC0xOTQsNiArMjAyLDExIEBAIHN0YXRpYyB2
b2lkIGV4dGVuZFRleHRDb2RlY01hcHMoKQogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjTWFjOjpy
ZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKKworI2lmIFVTRShHTElC
X1VOSUNPREUpCisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1l
cyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJF
eHRlbmRlZENvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CisjZW5kaWYKIH0KIAogc3RkOjphdXRv
X3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlYyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0
ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3Vu
ZGFyaWVzR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisKKyNpbmNs
dWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiVGV4dEJy
ZWFrSXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbnQgZmluZE5leHRXb3Jk
RnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29s
IGZvcndhcmQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0
b3IoY2hhcnMsIGxlbik7CisKKyAgICBpZiAoZm9yd2FyZCkgeworICAgICAgICBwb3NpdGlvbiA9
IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRp
b24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcg
d2hlbiB0aGUgY2hhcmFjdGVyIHByZWNlZWRpbmcgdGhlIGJyZWFrCisgICAgICAgICAgICAvLyBp
cyBhbHBoYW51bWVyaWMuCisgICAgICAgICAgICBpZiAocG9zaXRpb24gPCBsZW4gJiYgZ191bmlj
aGFyX2lzYWxudW0oY2hhcnNbcG9zaXRpb24gLSAxXSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhp
dCwgcG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAgICB9IGVs
c2UgeworICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9zaXRpb24p
OworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICAg
ICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUg
YnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChw
b3NpdGlvbiA+IDAgJiYgZ191bmljaGFyX2lzYWxudW0oY2hhcnNbcG9zaXRpb25dKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGV4
dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hh
cnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpCit7CisgICAg
VGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7Cisg
ICAgKmVuZCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgIGlmICgqZW5k
IDwgMCkKKyAgICAgICAgKmVuZCA9IHRleHRCcmVha0xhc3QoaXQpOworICAgICpzdGFydCA9IHRl
eHRCcmVha1ByZXZpb3VzKGl0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0
ZXJhdG9yR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9sbCA8bGFyc0B0cm9sbHRlY2guY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKworI2luY2x1ZGUgPHBhbmdv
L3BhbmdvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBVQnJlYWtJdGVyYXRvclR5
cGUgeworICAgIFVCUktfQ0hBUkFDVEVSLAorICAgIFVCUktfV09SRCwKKyAgICBVQlJLX0xJTkUs
CisgICAgVUJSS19TRU5URU5DRQorfTsKKworY2xhc3MgVGV4dEJyZWFrSXRlcmF0b3IgeworcHVi
bGljOgorICAgIFVCcmVha0l0ZXJhdG9yVHlwZSBtX3R5cGU7CisgICAgaW50IG1fbGVuZ3RoOwor
ICAgIFBhbmdvTG9nQXR0ciAqbV9sb2dfYXR0cnM7CisKKyAgICBpbnQgbV9pbmRleDsKK307CisK
K3N0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRvcihib29sJiBjcmVhdGVkSXRl
cmF0b3IsIFRleHRCcmVha0l0ZXJhdG9yKiYgaXRlcmF0b3IsCisgICAgVUJyZWFrSXRlcmF0b3JU
eXBlIHR5cGUsIGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFz
dHJpbmcpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFjcmVhdGVkSXRlcmF0b3IpIHsK
KyAgICAgICAgaXRlcmF0b3IgPSBuZXcgVGV4dEJyZWFrSXRlcmF0b3IoKTsKKyAgICAgICAgY3Jl
YXRlZEl0ZXJhdG9yID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBsb25nIHV0ZjhsZW47CisgICAgY2hhciAqdXRmOCA9IGdfdXRmMTZf
dG9fdXRmOChzdHJpbmcsIGxlbmd0aCwgMCwgJnV0ZjhsZW4sIDApOworCisgICAgLy8gRklYTUU6
IGFzc3VtZXMgbm8gc3Vycm9nYXRlIHBhaXJzCisKKyAgICBpdGVyYXRvci0+bV90eXBlID0gdHlw
ZTsKKyAgICBpdGVyYXRvci0+bV9sZW5ndGggPSBsZW5ndGg7CisgICAgaXRlcmF0b3ItPm1fbG9n
X2F0dHJzID0gZ19uZXcwKFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7CisgICAgaXRlcmF0b3It
Pm1faW5kZXggPSAtMTsKKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHV0ZjgsIHV0ZjhsZW4sIC0x
LCAwLCBpdGVyYXRvci0+bV9sb2dfYXR0cnMsIGxlbmd0aCArIDEpOworCisgICAgZ19mcmVlKHV0
ZjgpOworCisgICAgcmV0dXJuIGl0ZXJhdG9yOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogY2hh
cmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQorewor
ICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gZmFsc2U7Cisg
ICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
OworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9y
LAorICAgICAgICBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwg
c3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0
b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBj
cmVhdGVkV29yZEJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRl
cmF0b3IqIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9y
KGNyZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljV29yZEJyZWFrSXRlcmF0
b3IsIFVCUktfV09SRCwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciog
bGluZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBjcmVhdGVkTGluZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0
aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yOworICAgIHJldHVy
biBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRMaW5lQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGlj
TGluZUJyZWFrSXRlcmF0b3IsIFVCUktfTElORSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0
QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZFNlbnRlbmNlQnJlYWtJdGVy
YXRvciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljU2VudGVu
Y2VCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRTZW50ZW5j
ZUJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgVUJS
S19TRU5URU5DRSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitpbnQgdGV4dEJyZWFrRmlyc3QoVGV4
dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiB0ZXh0QnJlYWtGb2xsb3dpbmcoYmks
IC0xKTsKK30KKworaW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQorewor
ICAgIHJldHVybiB0ZXh0QnJlYWtQcmVjZWRpbmcoYmksIGJpLT5tX2xlbmd0aCArIDEpOworfQor
CitpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgZm9yIChp
bnQgaSA9IGJpLT5tX2luZGV4ICsgMTsgaSA8PSBiaS0+bV9sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2xp
bmVfYnJlYWspIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIChi
aS0+bV9sb2dfYXR0cnNbaV0uaXNfd29yZF9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfd29yZF9lbmQp
KSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsK
KyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5t
X2xvZ19hdHRyc1tpXS5pc19jdXJzb3JfcG9zaXRpb24pIHsKKyAgICAgICAgICAgIGJpLT5tX2lu
ZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5t
X3R5cGUgPT0gVUJSS19TRU5URU5DRSAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNl
X3N0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfc2VudGVuY2VfZW5kKSkgeworICAgICAgICAgICAg
YmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIFRleHRCcmVha0RvbmU7Cit9CisKK2ludCB0ZXh0QnJlYWtQcmV2aW91cyhU
ZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgZm9yIChpbnQgaSA9IGJpLT5tX2luZGV4IC0g
MTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19MSU5FICYm
IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAgICBiaS0+bV9p
bmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+
bV90eXBlID09IFVCUktfV09SRCAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfc3RhcnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmktPm1f
bG9nX2F0dHJzW2ldLmlzX3dvcmRfZW5kKSkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBp
OworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9
PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfY3Vyc29yX3Bvc2l0aW9u
KSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsK
KyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgKGJpLT5t
X2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRl
bmNlX2VuZCkpIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0ZXh0QnJlYWtGaXJzdChiaSk7
Cit9CisKK2ludCB0ZXh0QnJlYWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQg
cG9zKQoreworICAgIGJpLT5tX2luZGV4ID0gcG9zOworICAgIHJldHVybiB0ZXh0QnJlYWtQcmV2
aW91cyhiaSk7Cit9CisKK2ludCB0ZXh0QnJlYWtGb2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3Iq
IGJpLCBpbnQgcG9zKQoreworICAgIGlmIChwb3MgPCAwKQorICAgICAgICBwb3MgPSAtMTsKKyAg
ICBiaS0+bV9pbmRleCA9IHBvczsKKyAgICByZXR1cm4gdGV4dEJyZWFrTmV4dChiaSk7Cit9CisK
K2ludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1
cm4gYmktPm1faW5kZXg7Cit9CisKK2Jvb2wgaXNUZXh0QnJlYWsoVGV4dEJyZWFrSXRlcmF0b3Iq
IGJpLCBpbnQgcG9zKQoreworICAgIGlmIChiaS0+bV9pbmRleCA+PSAwKSB7CisgICAgICAgIGlm
IChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhd
LmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9IGVs
c2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9p
bmRleF0uaXNfd29yZF9lbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9
IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmktPm1fbG9nX2F0dHJz
W2JpLT5tX2luZGV4XS5pc19jaGFyX2JyZWFrKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICAgICAgfSBlbHNlIGlmIChiaS0+bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgYmktPm1f
bG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19zZW50ZW5jZV9lbmQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KKworfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNv
bXBhbnkuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dENv
ZGVjR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCit1c2luZyBzdGQ6OmF1dG9fcHRyOwordXNpbmcg
c3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCisKKy8vIGFwcGVuZE9taXR0aW5n
Qk9NIGlzIGdvbmUgKGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzMzMzgwKSwgc28g
d2UgbmVlZCB0byBhdm9pZCBnZW5lcmF0aW5nIGV4dHJhIEJPTSdzCisvLyBoZXJlLiBUaGlzIGNh
biBiZSBhY2hpZXZlZCBieSBzcGVjaWZ5aW5nIHRoZSBVVEYtMTYgY29kZWNzJyBlbmRpYW5uZXNz
IGV4cGxpY2l0bHkgd2hlbiBpbml0aWFsaXppbmcgaWNvbnYKKworI2lmIChHX0JZVEVfT1JERVIg
PT0gR19CSUdfRU5ESUFOKQorICAgIGNvbnN0IGdjaGFyKiBXZWJDb3JlOjpUZXh0Q29kZWNHdGs6
Om1faW50ZXJuYWxFbmNvZGluZ05hbWUgPSAiVVRGLTE2QkUiOworI2Vsc2UgCisgICAgY29uc3Qg
Z2NoYXIqIFdlYkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJV
VEYtMTZMRSI7CisjZW5kaWYKKworCisvLyBsaXN0IG9mIHRleHQgZW5jb2RpbmdzIGFuZCB0aGVp
ciBhbGlhc2VzCisvLyB0aGUgZmlyc3QgZW50cnkvImFsaWFzIiBpcyB0aGUgY2Fub25pY2FsIG5h
bWUsIGVhY2ggYWxpYXMgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYSBOVUxMCisKKy8vIFVu
aWNvZGUKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19VVEZfOCAgICAgICAgICAgID0geyAiVVRGLTgiICwgTlVMTH07IAorCisvLyBXZXN0
ZXJuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfSVNPXzg4NTlfMSAgICAgICA9IHsgIklTTy04ODU5LTEiLCAiQ1A4MTkiLCAiSUJNODE5
IiwgIklTTy1JUi0xMDAiLCAiSVNPODg1OS0xIiwgIklTT184ODU5LTEiLCAiSVNPXzg4NTktMTox
OTg3IiwgICJMMSIsICJMQVRJTjEiLCAiQ1NJU09MQVRJTjEiICwgTlVMTH07CitUZXh0Q29kZWNH
dGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4g
ICAgICAgICA9IHsgIk1BQ1JPTUFOIiwgIk1BQyIsICJNQUNJTlRPU0giLCAiQ1NNQUNJTlRPU0gi
ICwgTlVMTH07CisKKy8vIEphcGFuZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTICAgICAgICA9IHsgIlNISUZUX0pJ
UyIsICJNU19LQU5KSSIsICJTSElGVC1KSVMiLCAiU0pJUyIsICJDU1NISUZUSklTIiAsIE5VTEx9
OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlh
c2VzX0VVQ19KUCAgICAgICAgICAgPSB7ICJFVUNfSlAiLCAiRVVDLUpQIiwgIkVVQ0pQIiwgIkVY
VEVOREVEX1VOSVhfQ09ERV9QQUNLRURfRk9STUFUX0ZPUl9KQVBBTkVTRSIsICJDU0VVQ1BLREZN
VEpBUEFORVNFIiAsIE5VTEx9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQICAgICAgPSB7ICJJU08tMjAyMi1KUCIg
LCBOVUxMfTsKKworLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0Fs
aWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0JJRzUgICAgICAgICAgICAgPSB7
ICJCSUc1IiwgIkJJRy01IiwgIkJJRy1GSVZFIiwgIkJJRzUiLCAiQklHRklWRSIsICJDTi1CSUc1
IiwgIkNTQklHNSIgLCBOVUxMfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19CSUc1X0hLU0NTICAgICAgID0geyAiQklHNS1IS1NDUyIs
ICJCSUc1LUhLU0NTOjIwMDQiLCAiQklHNUhLU0NTIiAsIE5VTEx9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTUwICAgICAgICAg
ICAgPSB7ICJDUDk1MCIgLCBOVUxMfTsKKworLy8gS29yZWFuCitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1IgICAgICA9
IHsgIklTTy0yMDIyLUtSIiwgIkNTSVNPMjAyMktSIiAsIE5VTEx9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTQ5ICAgICAgICAg
ICAgPSB7ICJDUDk0OSIsICJVSEMiICwgTlVMTH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfRVVDX0tSICAgICAgICAgICA9IHsgIkVV
Qy1LUiIsICJDU0VVQ0tSIiwgTlVMTCB9OworCisvLyBBcmFiaWMKK1RleHRDb2RlY0d0azo6Y29k
ZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV82ICAgICAg
ID0geyAiSVNPLTg4NTktNiIsICJBUkFCSUMiLCAiQVNNTy03MDgiLCAiRUNNQS0xMTQiLCAiSVNP
LUlSLTEyNyIgLCAiSVNPODg1OS02IiwgIklTT184ODU5LTYiLCAiSVNPXzg4NTktNjoxOTg3Iiwg
IkNTSVNPTEFUSU5BUkFCSUMiICwgTlVMTH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0
IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU2ICAgICAgICAgICA9IHsgIkNQMTI1
NiIsICJNUy1BUkFCIiwgIldJTkRPV1MtMTI1NiIgLCBOVUxMfTsKKworLy8gSGVicmV3CitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNP
Xzg4NTlfOCAgICAgICA9IHsgIklTTy04ODU5LTgiLCAiSEVCUkVXIiAsICJJU08tODg1OS04Iiwg
IklTTy1JUi0xMzgiLCAiSVNPODg1OS04IiwgIklTT184ODU5LTgiLCAiSVNPXzg4NTktODoxOTg4
IiwgIkNTSVNPTEFUSU5IRUJSRVciICwgTlVMTH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU1ICAgICAgICAgICA9IHsgIkNQ
MTI1NSIsICJNUy1IRUJSIiwgIldJTkRPV1MtMTI1NSIgLCBOVUxMfTsKKworLy8gR3JlZWsKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19J
U09fODg1OV83ICAgICAgID0geyAiSVNPLTg4NTktNyIsICJFQ01BLTExOCIsICJFTE9UXzkyOCIs
ICJHUkVFSyIsICJHUkVFSzgiLCAiSVNPLUlSLTEyNiIsICJJU084ODU5LTciLCAiSVNPXzg4NTkt
NyIsICJJU09fODg1OS03OjE5ODciLCAiSVNPXzg4NTktNzoyMDAzIiwgIkNTSSIgLCBOVUxMfTsK
K1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19DUDg2OSAgICAgICAgICAgID0geyAiQ1A4NjkiLCAiODY5IiwgIkNQLUdSIiwgIklCTTg2OSIs
ICJDU0lCTTg2OSIgLCBOVUxMfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMgICAgID0geyAiV0lORE9XUy0xMjUz
IiwgTlVMTCB9OworCisvLyBDeXJpbGxpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBU
ZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUgICAgICAgPSB7ICJJU08tODg1
OS01IiwgIkNZUklMTElDIiwgIklTTy1JUi0xNDQiLCAiSVNPODg1OS01IiwgIklTT184ODU5LTUi
LCAiSVNPXzg4NTktNToxOTg4IiwgIkNTSVNPTEFUSU5DWVJJTExJQyIgLCBOVUxMfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19LT0k4
X1IgICAgICAgICAgID0geyAiS09JOC1SIiwgIkNTS09JOFIiICwgTlVMTH07CitUZXh0Q29kZWNH
dGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A4NjYgICAg
ICAgICAgICA9IHsgIkNQODY2IiwgIjg2NiIsICJJQk04NjYiLCAiQ1NJQk04NjYiICwgTlVMTH07
CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFz
ZXNfS09JOF9VICAgICAgICAgICA9IHsgIktPSTgtVSIgLCBOVUxMfTsKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTEg
ICAgID0geyAiV0lORE9XUy0xMjUxIiwgTlVMTCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01BQ0NZUklMTElDICAgICAgPSB7ICJN
QUNDWVJJTExJQyIgLCBOVUxMfTsKKworLy8gVGhhaQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQODc0ICAgICAgICAgICAgPSB7ICJD
UDg3NCIsICJXSU5ET1dTLTg3NCIgLCBOVUxMfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19USVNfNjIwICAgICAgICAgID0geyAiVElT
LTYyMCIsIE5VTEx9OworCisvLyBTaW1wbGlmaWVkIENoaW5lc2UKK1RleHRDb2RlY0d0azo6Y29k
ZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19HQksgICAgICAgICAgICAg
ID0geyAiR0JLIiAsIE5VTEx9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0haICAgICAgICAgICAgICAgPSB7ICJIWiIsICJIWi1HQi0y
MzEyIiAsIE5VTEx9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0dCMTgwMzAgICAgICAgICAgPSB7ICJHQjE4MDMwIiAsIE5VTEx9Owor
CisvLyBDZW50cmFsIEV1cm9wZWFuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMiAgICAgICA9IHsgIklTTy04ODU5LTIi
LCAiSVNPLUlSLTEwMSIsICJJU084ODU5LTIiLCAiSVNPXzg4NTktMiIsICJJU09fODg1OS0yOjE5
ODciLCAiTDIiLCAiTEFUSU4yIiwgIkNTSVNPTEFUSU4yIiAsIE5VTEx9OworVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1MCAgICAg
ICAgICAgPSB7ICJDUDEyNTAiLCAiTVMtRUUiLCAiV0lORE9XUy0xMjUwIiAsIE5VTEx9OworVGV4
dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01B
Q0NFTlRSQUxFVVJPUEUgPSB7ICJNQUNDRU5UUkFMRVVST1BFIiAsIE5VTEx9OworCisvLyBWaWV0
bmFtZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfQ1AxMjU4ICAgICAgICAgICA9IHsgIkNQMTI1OCIsICJXSU5ET1dTLTEyNTgiICwg
TlVMTH07CisKKy8vIFR1cmtpc2gKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTQgICAgICAgICAgID0geyAiQ1AxMjU0IiwgIk1T
LVRVUksiLCAiV0lORE9XUy0xMjU0IiAsIE5VTEx9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzkgICAgICAgPSB7ICJJ
U08tODg1OS05IiwgIklTTy1JUi0xNDgiLCAiSVNPODg1OS05IiwgIklTT184ODU5LTkiLCAiSVNP
Xzg4NTktOToxOTg5IiwgIkw1IiwgIkxBVElONSIsICJDU0lTT0xBVElONSIgLCBOVUxMfTsKKwor
Ly8gQmFsdGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfQ1AxMjU3ICAgICAgICAgICA9IHsgIkNQMTI1NyIsICJXSU5CQUxUUklNIiwg
IldJTkRPV1MtMTI1NyIgLCBOVUxMfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV80ICAgICAgID0geyAiSVNPLTg4NTkt
NCIsICJJU08tSVItMTEwIiwgIklTTzg4NTktNCIsICJJU09fODg1OS00IiwgIklTT184ODU5LTQ6
MTk4OCIsICJMNCIsICJMQVRJTjQiLCAiQ1NJU09MQVRJTjQiICwgTlVMTH07CisKK2djb25zdHBv
aW50ZXIgY29uc3QgVGV4dENvZGVjR3RrOjptX2ljb252QmFzZUNvZGVjTGlzdFtdID0geyAKKyAg
ICAvLyBVbmljb2RlCisgICAgJm1fY29kZWNBbGlhc2VzX1VURl84LAorCisgICAgLy8gV2VzdGVy
bgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV8xCit9OworCitnY29uc3Rwb2ludGVyIGNv
bnN0IFRleHRDb2RlY0d0azo6bV9pY29udkV4dGVuZGVkQ29kZWNMaXN0W10gPSAKK3sKKyAgICAv
LyBXZXN0ZXJuCisgICAgJm1fY29kZWNBbGlhc2VzX01BQ1JPTUFOLAorCisgICAgLy8gSmFwYW5l
c2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTLAorICAgICZtX2NvZGVjQWxpYXNlc19F
VUNfSlAsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQLAorCisgICAgLy8gU2ltcGxp
ZmllZCBDaGluZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0JJRzUsCisgICAgJm1fY29kZWNBbGlh
c2VzX0JJRzVfSEtTQ1MsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQOTUwLAorCisgICAgLy8gS29y
ZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSLAorICAgICZtX2NvZGVjQWxpYXNl
c19DUDk0OSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfRVVDX0tSLAorCisgICAgLy8gQXJhYmljCisg
ICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzYsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1
NiwKKyAgICAKKyAgICAvLyBIZWJyZXcKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOCwK
KyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU1LAorICAgIAorICAgIC8vIEdyZWVrCisgICAgJm1f
Y29kZWNBbGlhc2VzX0lTT184ODU5XzcsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQODY5LAorICAg
ICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMsCisgICAgCisgICAgLy8gQ3lyaWxsaWMKKyAg
ICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfS09JOF9S
LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2NiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfS09JOF9V
LAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTEsCisgICAgJm1fY29kZWNBbGlhc2Vz
X01BQ0NZUklMTElDLAorICAgIAorICAgIC8vIFRoYWkKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4
NzQsCisgICAgJm1fY29kZWNBbGlhc2VzX1RJU182MjAsCisgICAgCisgICAgLy8gVHJhZGl0aW9u
YWwgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19HQkssCisgICAgJm1fY29kZWNBbGlhc2Vz
X0haLAorICAgICZtX2NvZGVjQWxpYXNlc19HQjE4MDMwLAorICAgIAorICAgIC8vIENlbnRyYWwg
RXVyb3BlYW4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMiwKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfQ1AxMjUwLAorICAgICZtX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFLAorICAg
IAorICAgIC8vIFZpZXRuYW1lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU4LAorICAgIAor
ICAgIC8vIFR1cmtpc2gKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU0LAorICAgICZtX2NvZGVj
QWxpYXNlc19JU09fODg1OV85LAorICAgIAorICAgIC8vIEJhbHRpYworICAgICZtX2NvZGVjQWxp
YXNlc19DUDEyNTcsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzQKK307CisKKworY29u
c3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJTaXplID0gMTYzODQ7CisgICAgCisKK3N0YXRpYyBh
dXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nLCBjb25zdCB2b2lkKikKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gdG9vIG5vaXN5
IGlmIGVhY2ggVVRGLTggY29kZWMgY3JlYXRpb24gaXMgbG9nZ2VkCisgICAgLy8gaWYgKHN0cmNt
cChlbmNvZGluZy5uYW1lKCksICJVVEYtOCIpKQorICAgIC8vICAgIExPRyhUZXh0Q29udmVyc2lv
biwgImNyZWF0aW5nIG5ldyB0ZXh0IGNvZGVjIGZvciBlbmNvZGluZyBuYW1lICVzIiwgZW5jb2Rp
bmcubmFtZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGF1dG9fcHRyPFRleHRDb2RlYz4obmV3
IFRleHRDb2RlY0d0ayhlbmNvZGluZykpOworfQorCitnYm9vbGVhbiBUZXh0Q29kZWNHdGs6OnRl
c3RFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciogZW5jTmFtZSkKK3sKKyAgICBHSUNvbnYg
dGVzdGVyOworICAgIC8vIHRlc3QgZGVjb2RpbmcKKyAgICB0ZXN0ZXIgPSBnX2ljb252X29wZW4o
bV9pbnRlcm5hbEVuY29kaW5nTmFtZSwgZW5jTmFtZSk7CisgICAgaWYgKHRlc3RlciA9PSAoR0lD
b252KS0xKSB7CisgICAgICAgIExPR19FUlJPUigiJXMgbm90IGRlY29kYWJsZSA9PiBub3QgYXZh
aWxhYmxlISIsIGVuY05hbWUpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAvLyB0ZXN0IGVuY29kaW5n
CisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNOYW1lLCBtX2ludGVybmFsRW5jb2Rp
bmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSAoR0lDb252KS0xKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIiVzIG5vdCBlbmNvZGFibGUgPT4gbm90IGF2YWlsYWJsZSEiLCBlbmNOYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGdfaWNvbnZfY2xvc2UodGVzdGVyKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7Cisg
ICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlz
dExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9
IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZiht
X2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxp
c3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IChjb2RlY0FsaWFz
TGlzdCopZW5jb2RpbmdMaXN0W2ldOworICAgICAgICBpbnQgY29kZWNDb3VudCA9IC0xOworICAg
ICAgICBjb25zdCBnY2hhciAqY2Fub25pY2FsTmFtZSwgKmN1cnJlbnRBbGlhczsKKyAgICAgICAg
Ym9vbCBjYW5vbmljYWxBdmFpbGFibGUgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgLy8gZm9y
IGVhY2ggb2YgdGhlIGFsaWFzIGxpc3RzOgorICAgICAgICAvLyBiYWlsIG91dCBpZiBjYW5vbmlj
YWwgaXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAgLy8gdGhlbiBjb250aW51ZSB0ZXN0aW5nIGVh
Y2ggYWxpYXMsIAorICAgICAgICAvLyBpZiBhdmFpbGFibGUsIGFkZCBpdCB0byB0aGUgbGlzdCwg
bWFwcGluZyBpdCB0byBpdHMgY2Fub25pY2FsIG5hbWUKKworICAgICAgICB3aGlsZSAoKGN1cnJl
bnRBbGlhcyA9ICgqY29kZWNBbGlhc2VzKVsrK2NvZGVjQ291bnRdKSAmJiBjYW5vbmljYWxBdmFp
bGFibGUpIHsKKyAgICAgICAgICAgIGJvb2wgY3VycmVudEF2YWlsYWJsZSA9IHRlc3RFbmNvZGlu
Z0F2YWlsYWJsZShjdXJyZW50QWxpYXMpOworCisgICAgICAgICAgICBpZiAoY29kZWNDb3VudCA9
PSAwICYmIGN1cnJlbnRBdmFpbGFibGUpIHsKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxOYW1l
ID0gY3VycmVudEFsaWFzOworICAgICAgICAgICAgICAgIGNhbm9uaWNhbEF2YWlsYWJsZSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgTE9HX1ZFUkJPU0UoVGV4dENvbnZlcnNpb24sICJyZWdpc3Rl
cmluZyBlbmNvZGluZyBjYW5vbmljYWwgJXMiLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAg
ICAgICByZWdpc3RyYXIoY2Fub25pY2FsTmFtZSwgY2Fub25pY2FsTmFtZSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNvZGVjQ291bnQgPT0gMCAmJiAhY3VycmVudEF2YWlsYWJsZSkgeworICAg
ICAgICAgICAgICAgIGNhbm9uaWNhbEF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgfSBl
bHNlIGlmIChjb2RlY0NvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIGlmICh0ZXN0RW5jb2Rp
bmdBdmFpbGFibGUoY3VycmVudEFsaWFzKSkgeworICAgICAgICAgICAgICAgICAgICBMT0dfVkVS
Qk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVuY29kaW5nIG5hbWUgYWxpYXMgJXMg
dG8gY2Fub25pY2FsICVzIiwgY3VycmVudEFsaWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVnaXN0cmFyKGN1cnJlbnRBbGlhcywgY2Fub25pY2FsTmFtZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9Cit9CisKK3Zv
aWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0
cmFyLCBib29sIGV4dGVuZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBlbmNvZGluZ0xp
c3Q7CisgICAgdW5zaWduZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAgIGlmIChleHRlbmRlZCkg
eworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3Q7CisgICAg
ICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29kZWNMaXN0KS9zaXplb2Yo
Z3BvaW50ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZC
YXNlQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZCYXNlQ29k
ZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIGNvZGVjQWxpYXNMaXN0ICpj
b2RlY0FsaWFzZXMgPSAoY29kZWNBbGlhc0xpc3QqKWVuY29kaW5nTGlzdFtpXTsKKyAgICAgICAg
Ly8gYnkgY29udmVudGlvbiwgdGhlIGZpcnN0ICJhbGlhcyIgc2hvdWxkIGJlIHRoZSBjYW5vbmlj
YWwgbmFtZSwgc2VlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcyBsaXN0cyAKKyAgICAgICAg
Y29uc3QgZ2NoYXIgKmNvZGVjTmFtZSA9ICgqY29kZWNBbGlhc2VzKVswXTsKKyAgICAgICAgaWYg
KHRlc3RFbmNvZGluZ0F2YWlsYWJsZShjb2RlY05hbWUpKQorICAgICAgICAgICAgcmVnaXN0cmFy
KGNvZGVjTmFtZSwgbmV3VGV4dENvZGVjR3RrLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dENv
ZGVjR3RrOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciBy
ZWdpc3RyYXIpCit7CisgICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKHJlZ2lzdHJhciwgZmFsc2Up
OworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1Jl
Z2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0ZXJDb2RlY3MocmVnaXN0cmFyLCBmYWxz
ZSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdGVyRW5jb2Rp
bmdOYW1lcyhyZWdpc3RyYXIsIHRydWUpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0
ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJl
Z2lzdGVyQ29kZWNzKHJlZ2lzdHJhciwgdHJ1ZSk7Cit9CisKK1RleHRDb2RlY0d0azo6VGV4dENv
ZGVjR3RrKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCisgICAgOiBtX2VuY29kaW5nKGVu
Y29kaW5nKQorICAgICwgbV9udW1CdWZmZXJlZEJ5dGVzKDApCisgICAgLCBtX2ljb252RGVjb2Rl
cigoR0lDb252KSAtMSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKChHSUNvbnYpIC0xKQoreworfQor
CitUZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGsoKQoreworICAgIHJlbGVhc2VJQ29udigpOwor
fQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVsZWFzZUlDb252KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9pY29udkRlY29kZXIgIT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSht
X2ljb252RGVjb2Rlcik7CisgICAgICAgIG1faWNvbnZEZWNvZGVyID0gKEdJQ29udikgLTE7Cisg
ICAgfQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSAoR0lDb252KSAtMSkgeworICAgICAgICBn
X2ljb252X2Nsb3NlKG1faWNvbnZFbmNvZGVyKTsKKyAgICAgICAgbV9pY29udkVuY29kZXIgPSAo
R0lDb252KSAtMTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkRl
Y29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2RlciA9PSAoR0lDb252KSAt
MSk7CisKKyAgICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2ludGVybmFsRW5jb2Rp
bmdOYW1lLCBtX2VuY29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpjcmVh
dGVJQ29udkVuY29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RW5jb2RlciA9PSAo
R0lDb252KSAtMSk7CisKKyAgICBtX2ljb252RW5jb2RlciA9IGdfaWNvbnZfb3BlbihtX2VuY29k
aW5nLm5hbWUoKSwgbV9pbnRlcm5hbEVuY29kaW5nTmFtZSk7Cit9CisKK1N0cmluZyBUZXh0Q29k
ZWNHdGs6OmRlY29kZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVz
aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpCit7CisgICAgLy8gR2V0IGEgY29u
dmVydGVyIGZvciB0aGUgcGFzc2VkLWluIGVuY29kaW5nLgorICAgIGlmIChtX2ljb252RGVjb2Rl
ciA9PSAoR0lDb252KSAtMSkgeworICAgICAgICBjcmVhdGVJQ29udkRlY29kZXIoKTsKKyAgICAg
ICAgQVNTRVJUKG1faWNvbnZEZWNvZGVyICE9IChHSUNvbnYpIC0xKTsKKyAgICAgICAgaWYgKG1f
aWNvbnZEZWNvZGVyID09IChHSUNvbnYpIC0xKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoImVy
cm9yIGNyZWF0aW5nIElDb252IGVuY29kZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRh
YmxlIik7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzaXplX3QgY291bnQ7CisgICAgR0Vycm9yICplcnIgPSBOVUxMOworICAgIFVDaGFyICpi
dWZmZXIgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4oZ19jb252ZXJ0X3dpdGhfaWNvbnYoYnl0
ZXMsIGxlbmd0aCwgbV9pY29udkRlY29kZXIsIDAsICZjb3VudCwgJmVycikpOworICAgIGlmIChl
cnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHSUNvbnYgY29udmVyc2lvbiBlcnJvciIpOworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7
CisKKyAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlciwgY291bnQgLyBzaXplb2YoVUNoYXIpKTsKKwor
ICAgIGdfZnJlZShidWZmZXIpOworCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
K30KKworQ1N0cmluZyBUZXh0Q29kZWNHdGs6OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGluZykKK3sKKyAgICBp
ZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgaWYgKG1faWNvbnZFbmNvZGVy
ID09IChHSUNvbnYpIC0xKQorICAgICAgICBjcmVhdGVJQ29udkVuY29kZXIoKTsKKyAgICBpZiAo
bV9pY29udkVuY29kZXIgPT0gKEdJQ29udikgLTEpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7
CisKKyAgICBzaXplX3QgY291bnQ7CisgICAgR0Vycm9yICplcnIgPSBOVUxMOworICAgIGNoYXIg
KmJ1ZmZlciA9IGdfY29udmVydF93aXRoX2ljb252KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGNoYXJhY3RlcnMpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBtX2ljb252RW5jb2Rlciwg
MCwgJmNvdW50LCAmZXJyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lD
b252IGNvbnZlcnNpb24gZXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICB9
CisKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmcoYnVmZmVyLCBjb3VudCk7CisKKyAgICBn
X2ZyZWUoYnVmZmVyKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNv
bXBhbnkuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRleHRDb2RlY0dUS19oCisjZGVmaW5lIFRleHRD
b2RlY0dUS19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJUZXh0Q29kZWMuaCIK
KyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgVGV4dENvZGVjR3RrIDogcHVibGljIFRleHRDb2RlYyB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhcik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29k
ZWNSZWdpc3RyYXIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBUZXh0
Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgICAgIHZpcnR1YWwgflRleHRDb2Rl
Y0d0aygpOworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6
ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3Ip
OworICAgICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxl
bmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IGNyZWF0ZUlDb252RGVjb2RlcigpIGNvbnN0OworICAgICAgICB2b2lkIGNyZWF0ZUlDb252RW5j
b2RlcigpIGNvbnN0OworICAgICAgICB2b2lkIHJlbGVhc2VJQ29udigpIGNvbnN0OworCisgICAg
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3Ry
YXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKTsgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVu
ZGVkKTsKKyAgICAgICAgc3RhdGljIGdib29sZWFuIHRlc3RFbmNvZGluZ0F2YWlsYWJsZShjb25z
dCBnY2hhciopOworCisgICAgICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOworICAgICAgICB1
bnNpZ25lZCBtX251bUJ1ZmZlcmVkQnl0ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZm
ZXJlZEJ5dGVzWzE2XTsgLy8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJh
Y3RlciAgICAgICAgCisgICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZEZWNvZGVyOworICAg
ICAgICBtdXRhYmxlIEdJQ29udiBtX2ljb252RW5jb2RlcjsKKworICAgICAgICBzdGF0aWMgY29u
c3QgZ2NoYXIqIG1faW50ZXJuYWxFbmNvZGluZ05hbWU7CisKKyAgICAgICAgdHlwZWRlZiBjb25z
dCBnY2hhciogY29uc3QgY29kZWNBbGlhc0xpc3RbXTsKKworICAgICAgICAvLyBVbmljb2RlCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19VVEZfODsKKworICAg
ICAgICAvLyBXZXN0ZXJuCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19JU09fODg1OV8xOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfTUFDUk9NQU47CisKKyAgICAgICAgLy8gSmFwYW5lc2UKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1NISUZUX0pJUzsKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19KUDsKKyAgICAgICAgc3RhdGljIGNvZGVj
QWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQOworCisgICAgICAgIC8vIFRyYWRp
dGlvbmFsIENoaW5lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX0JJRzU7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19C
SUc1X0hLU0NTOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
Q1A5NTA7CisKKyAgICAgICAgLy8gS29yZWFuCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlz
dCBtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0NQOTQ5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfRVVDX0tSOworCisgICAgICAgIC8vIEFyYWJpYworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNjsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NjsKKworICAgICAgICAvLyBI
ZWJyZXcKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184
ODU5Xzg7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEy
NTU7CisKKyAgICAgICAgLy8gR3JlZWsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1f
Y29kZWNBbGlhc2VzX0lTT184ODU5Xzc7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19DUDg2OTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX1dJTkRPV1NfMTI1MzsKKworICAgICAgICAvLyBDeXJpbGxpYworICAgICAgICBz
dGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNTsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0tPSThfUjsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQODY2OworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfS09JOF9VOworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxOworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUM7CisKKyAgICAgICAgLy8g
VGhhaQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NzQ7
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19USVNfNjIwOwor
CisgICAgICAgIC8vIFNpbXBsaWZpZWQgQ2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfR0JLOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfSFo7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19HQjE4MDMwOworCisgICAgICAgIC8vIENlbnRyYWwgRXVyb3BlYW4KKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5XzI7CisgICAgICAg
IHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTA7CisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFOworCisg
ICAgICAgIC8vIFZpZXRuYW1lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0NQMTI1ODsKKworICAgICAgICAvLyBUdXJraXNoCisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTQ7CisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV85OworCisgICAgICAgIC8vIEJhbHRp
YworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU3Owor
ICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNDsK
KworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252QmFzZUNvZGVjTGlz
dFtdOworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252RXh0ZW5kZWRD
b2RlY0xpc3RbXTsKKworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFRleHRDb2RlY0dUS19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23167</attachid>
            <date>2008-09-04 06:24:46 -0700</date>
            <delta_ts>2008-09-08 10:08:22 -0700</delta_ts>
            <desc>replacing icu with glib, updated for 36087, ChangeLogs now UTF-8, coding style fixes</desc>
            <filename>remove_glib_enumerating_codecs_now_utf8.patch</filename>
            <type>text/plain</type>
            <size>65469</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2MDg3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDkt
MDIgIERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dU
S10gSW1wbGVtZW50IFVuaWNvZGUgZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAg
QWRkaW5nIG9wdGlvbnMgZm9yIC0td2l0aC11bmljb2RlLWJhY2tlbmQ9aWN1fGdsaWIKKyAgICAg
ICAgYW5kIGNoZWNraW5nIGZvciBwYW5nbyB2ZXJzaW9uID49IDEuMjEuMCBpZiBnbGliIGJhY2tl
bmQKKyAgICAgICAgaXMgc2VsZWN0ZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMDgtMDgtMjggIEFscCBUb2tlciAgPGFscEBudWFu
dGkuY29tPgogCiAgICAgICAgIEdUSysgZGlzdC9idWlsZCBmaXguIExpc3QgbmV3bHkgYWRkZWQg
aGVhZGVyIGZpbGVzLgpAQCAtNTIwLDcgKzUzNCw3IEBACiAKICAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKIAotMjAwOC0wMy0wOSAgSvxyZyBCaWxsZXRlciAgPGpAYml0cm9uLmNoPgorMjAwOC0w
My0wOSAgSsO8cmcgQmlsbGV0ZXIgIDxqQGJpdHJvbi5jaD4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbHAgVG9rZXIuCiAKSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1h
a2VmaWxlLmFtCShyZXZpc2lvbiAzNjA4NykKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw4ICs1MCwxNSBAQCBJRExfQklORElOR1MgOj0KICMgR2xvYmFsIGZsYWdzIHRv
IENQUAogZ2xvYmFsX2NwcGZsYWdzIDo9CiAKK2lmIFVTRV9JQ1VfVU5JQ09ERQogZ2xvYmFsX2Nw
cGZsYWdzICs9IFwKIAktRFdURl9VU0VfSUNVX1VOSUNPREU9MQorZW5kaWYKKworaWYgVVNFX0dM
SUJfVU5JQ09ERQorZ2xvYmFsX2NwcGZsYWdzICs9IFwKKwktRFdURl9VU0VfR0xJQl9VTklDT0RF
PTEKK2VuZGlmCiAKICMgRGVmYXVsdCBjb21waWxlciBmbGFncwogZ2xvYmFsX2NmbGFncyA6PSBc
CkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlndXJlLmFjCShyZXZpc2lv
biAzNjA4NykKKysrIGNvbmZpZ3VyZS5hYwkod29ya2luZyBjb3B5KQpAQCAtMTc0LDE4ICsxNzQs
MTggQEAgZmkKICMgZGV0ZXJtaW5lIHRoZSBVbmljb2RlIGJhY2tlbmQKIEFDX01TR19DSEVDS0lO
RyhbdGhlIFVuaWNvZGUgYmFja2VuZCB0byB1c2VdKQogQUNfQVJHX1dJVEgodW5pY29kZV9iYWNr
ZW5kLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC11bmljb2RlLWJhY2tlbmQ9
QDw6QGljdUA6PkBdLAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC11bmljb2Rl
LWJhY2tlbmQ9QDw6QGljdS9nbGliQDo+QF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
U2VsZWN0IFVuaWNvZGUgYmFja2VuZCBbZGVmYXVsdD1pY3VdXSksCi0gICAgICAgICAgICBbXSxb
dW5pY29kZV9iYWNrZW5kPSJpY3UiXSkKKyAgICAgICAgICAgIFtdLFt3aXRoX3VuaWNvZGVfYmFj
a2VuZD0iaWN1Il0pCiAKLWNhc2UgIiR1bmljb2RlX2JhY2tlbmQiIGluCi0gICAgIGljdSkgOzsK
LSAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIFVuaWNvZGUgYmFja2VuZDogbXVzdCBiZSBp
Y3UuXSkgOzsKK2Nhc2UgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgaW4KKyAgICAgaWN1fGdsaWIp
IDs7CisgICAgICopIEFDX01TR19FUlJPUihbSW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3Qg
YmUgaWN1IG9yIGdsaWIuXSkgOzsKIGVzYWMKIAotQUNfTVNHX1JFU1VMVChbJHVuaWNvZGVfYmFj
a2VuZF0pCitBQ19NU0dfUkVTVUxUKFskd2l0aF91bmljb2RlX2JhY2tlbmRdKQogCi1pZiB0ZXN0
ICIkdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCitpZiB0ZXN0ICIkd2l0aF91bmljb2Rl
X2JhY2tlbmQiID0gImljdSI7IHRoZW4KIAlpZiB0ZXN0ICIkb3NfZGFyd2luIiA9ICJ5ZXMiOyB0
aGVuCiAJCVVOSUNPREVfQ0ZMQUdTPSItSVwkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvaWN1IC1J
XCQoc3JjZGlyKS9XZWJDb3JlL2ljdSIKIAkJVU5JQ09ERV9MSUJTPSItbGljdWNvcmUiCkBAIC0y
MDYsNiArMjA2LDEwIEBAIGlmIHRlc3QgIiR1bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4K
IAlmaQogZmkKIAoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIjsgdGhl
bgorICAgUEtHX0NIRUNLX01PRFVMRVMoW1VOSUNPREVdLCBbZ2xpYi0yLjAgcGFuZ28gPj0gMS4y
MS4wXSkKK2ZpCisKIEFDX1NVQlNUKFtVTklDT0RFX0NGTEFHU10pCiBBQ19TVUJTVChbVU5JQ09E
RV9MSUJTXSkKIApAQCAtNTc2LDYgKzU4MCwxMCBAQCBBTV9DT05ESVRJT05BTChbVEFSR0VUX1dJ
TjMyXSwgW3Rlc3QgIiR3CiBBTV9DT05ESVRJT05BTChbVEFSR0VUX1FVQVJUWl0sIFt0ZXN0ICIk
d2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9ESVJFQ1RG
Ql0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAKKyMgVW5pY29kZSBiYWNr
ZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9JQ1VfVU5JQ09ERV0sIFt0ZXN0
ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSJdKQorQU1fQ09ORElUSU9OQUwoW1VTRV9H
TElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIl0pCisK
ICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW1VTRV9DVVJMXSwg
W3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCJdKQogQU1fQ09ORElUSU9OQUwoW1VT
RV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAic291cCJdKQpAQCAtNjIxLDcg
KzYyOSw3IEBAIFdlYktpdCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcKIEJ1aWxk
IGNvbmZpZ3VyYXRpb246CiAgRW5hYmxlIGRlYnVnZ2luZyAoc2xvdykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RlYnVnCiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCi0g
VW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkdW5pY29kZV9iYWNrZW5kCisgVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF91bmljb2RlX2JhY2tlbmQKICBIVFRQIGJhY2tl
bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2h0
dHBfYmFja2VuZAogIEZvbnQgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJHdpdGhfZm9udF9iYWNrZW5kCiAgT3B0aW1pemVkIG1lbW9yeSBhbGxv
Y2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9j
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNjA4NykKKysrIEphdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDA4LTA5LTAyICBEb21pbmlr
IFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIE9yaWdpbmFsIHBh
dGNoIGJ5IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgSW1wbGVtZW50
aW5nIFVuaWNvZGUgZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiBnbGliLgorCisgICAgICAgICogd3Rm
L3VuaWNvZGUvVW5pY29kZS5oOgorICAgICAgICAqIHd0Zi91bmljb2RlL2dsaWI6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaDogQWRkZWQuCisgICAgICAg
IChXVEY6OlVuaWNvZGU6Oik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmZvbGRDYXNlKToKKyAg
ICAgICAgKFdURjo6VW5pY29kZTo6dG9Mb3dlcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRv
VXBwZXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmlzQXJhYmljQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzRm9y
bWF0Q2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc1ByaW50YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjppc0RpZ2l0KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNQdW5jdCk6CisgICAgICAg
IChXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNh
dGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKToKKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUp
OgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdDbGFzcyk6CisgICAgICAgIChXVEY6
OlVuaWNvZGU6OmRlY29tcG9zaXRpb25UeXBlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dW1l
bWNhc2VjbXApOgorCiAyMDA4LTA5LTA0ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IHRoZSA2NC1iaXQgYnVpbGQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9Vbmljb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvVW5pY29kZS5oCShyZXZpc2lvbiAzNjA4NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmlj
b2RlL1VuaWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUg
InF0NC9Vbmljb2RlUXQ0LmgiCiAjZWxpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaD4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oPgogI2Vsc2UKICNlcnJvciAiVW5r
bm93biBVbmljb2RlIGltcGxlbWVudGF0aW9uIgogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCShyZXZpc2lvbiAwKQorKysgSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU3NyBAQAorLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorLyoKKyAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgS0pTX1VOSUNPREVfR0xJQl9ICisjZGVmaW5lIEtKU19VTklDT0RFX0dMSUJf
SAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4K
KwordHlwZWRlZiB1aW50MTZfdCBVQ2hhcjsKK3R5cGVkZWYgaW50MzJfdCBVQ2hhcjMyOworCisv
LyBjb3BpZWQgZnJvbSBHTGliCisKKy8qIFRhYmxlIG9mIGNhc2Vmb2xkaW5nIGNhc2VzIHRoYXQg
Y2FuJ3QgYmUgZGVyaXZlZCBieSBsb3dlcmNhc2luZworICovCitzdGF0aWMgY29uc3Qgc3RydWN0
IHsKKyAgZ3VpbnQxNiBjaDsKKyAgZ2NoYXIgZGF0YVs3XTsKK30gY2FzZWZvbGRfdGFibGVbXSA9
IHsKKyAgeyAweDAwYjUsICJceGNlXHhiYyIgfSwKKyAgeyAweDAwZGYsICJceDczXHg3MyIgfSwK
KyAgeyAweDAxMzAsICJceDY5XHhjY1x4ODciIH0sCisgIHsgMHgwMTQ5LCAiXHhjYVx4YmNceDZl
IiB9LAorICB7IDB4MDE3ZiwgIlx4NzMiIH0sCisgIHsgMHgwMWYwLCAiXHg2YVx4Y2NceDhjIiB9
LAorICB7IDB4MDM0NSwgIlx4Y2VceGI5IiB9LAorICB7IDB4MDM5MCwgIlx4Y2VceGI5XHhjY1x4
ODhceGNjXHg4MSIgfSwKKyAgeyAweDAzYjAsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0s
CisgIHsgMHgwM2MyLCAiXHhjZlx4ODMiIH0sCisgIHsgMHgwM2QwLCAiXHhjZVx4YjIiIH0sCisg
IHsgMHgwM2QxLCAiXHhjZVx4YjgiIH0sCisgIHsgMHgwM2Q1LCAiXHhjZlx4ODYiIH0sCisgIHsg
MHgwM2Q2LCAiXHhjZlx4ODAiIH0sCisgIHsgMHgwM2YwLCAiXHhjZVx4YmEiIH0sCisgIHsgMHgw
M2YxLCAiXHhjZlx4ODEiIH0sCisgIHsgMHgwM2Y1LCAiXHhjZVx4YjUiIH0sCisgIHsgMHgwNTg3
LCAiXHhkNVx4YTVceGQ2XHg4MiIgfSwKKyAgeyAweDFlOTYsICJceDY4XHhjY1x4YjEiIH0sCisg
IHsgMHgxZTk3LCAiXHg3NFx4Y2NceDg4IiB9LAorICB7IDB4MWU5OCwgIlx4NzdceGNjXHg4YSIg
fSwKKyAgeyAweDFlOTksICJceDc5XHhjY1x4OGEiIH0sCisgIHsgMHgxZTlhLCAiXHg2MVx4Y2Fc
eGJlIiB9LAorICB7IDB4MWU5YiwgIlx4ZTFceGI5XHhhMSIgfSwKKyAgeyAweDFmNTAsICJceGNm
XHg4NVx4Y2NceDkzIiB9LAorICB7IDB4MWY1MiwgIlx4Y2ZceDg1XHhjY1x4OTNceGNjXHg4MCIg
fSwKKyAgeyAweDFmNTQsICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4ODEiIH0sCisgIHsgMHgxZjU2
LCAiXHhjZlx4ODVceGNjXHg5M1x4Y2RceDgyIiB9LAorICB7IDB4MWY4MCwgIlx4ZTFceGJjXHg4
MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4MSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7
IDB4MWY4MiwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4MywgIlx4ZTFceGJj
XHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4NCwgIlx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAor
ICB7IDB4MWY4NSwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4NiwgIlx4ZTFc
eGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4MWY4NywgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9
LAorICB7IDB4MWY4OCwgIlx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4OSwgIlx4
ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7IDB4MWY4YSwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5
IiB9LAorICB7IDB4MWY4YiwgIlx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4Yywg
Ilx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZCwgIlx4ZTFceGJjXHg4NVx4Y2Vc
eGI5IiB9LAorICB7IDB4MWY4ZSwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4MWY4
ZiwgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICB7IDB4MWY5MCwgIlx4ZTFceGJjXHhhMFx4
Y2VceGI5IiB9LAorICB7IDB4MWY5MSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4
MWY5MiwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWY5MywgIlx4ZTFceGJjXHhh
M1x4Y2VceGI5IiB9LAorICB7IDB4MWY5NCwgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7
IDB4MWY5NSwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWY5NiwgIlx4ZTFceGJj
XHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5NywgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAor
ICB7IDB4MWY5OCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5OSwgIlx4ZTFc
eGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWY5YSwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9
LAorICB7IDB4MWY5YiwgIlx4ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWY5YywgIlx4
ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZCwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5
IiB9LAorICB7IDB4MWY5ZSwgIlx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5Ziwg
Ilx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZhMCwgIlx4ZTFceGJkXHhhMFx4Y2Vc
eGI5IiB9LAorICB7IDB4MWZhMSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZh
MiwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWZhMywgIlx4ZTFceGJkXHhhM1x4
Y2VceGI5IiB9LAorICB7IDB4MWZhNCwgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4
MWZhNSwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWZhNiwgIlx4ZTFceGJkXHhh
Nlx4Y2VceGI5IiB9LAorICB7IDB4MWZhNywgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7
IDB4MWZhOCwgIlx4ZTFceGJkXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWZhOSwgIlx4ZTFceGJk
XHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZhYSwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAor
ICB7IDB4MWZhYiwgIlx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZhYywgIlx4ZTFc
eGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWZhZCwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9
LAorICB7IDB4MWZhZSwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWZhZiwgIlx4
ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZiMiwgIlx4ZTFceGJkXHhiMFx4Y2VceGI5
IiB9LAorICB7IDB4MWZiMywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgIHsgMHgxZmI0LCAiXHhj
ZVx4YWNceGNlXHhiOSIgfSwKKyAgeyAweDFmYjYsICJceGNlXHhiMVx4Y2RceDgyIiB9LAorICB7
IDB4MWZiNywgIlx4Y2VceGIxXHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmYmMsICJceGNl
XHhiMVx4Y2VceGI5IiB9LAorICB7IDB4MWZiZSwgIlx4Y2VceGI5IiB9LAorICB7IDB4MWZjMiwg
Ilx4ZTFceGJkXHhiNFx4Y2VceGI5IiB9LAorICB7IDB4MWZjMywgIlx4Y2VceGI3XHhjZVx4Yjki
IH0sCisgIHsgMHgxZmM0LCAiXHhjZVx4YWVceGNlXHhiOSIgfSwKKyAgeyAweDFmYzYsICJceGNl
XHhiN1x4Y2RceDgyIiB9LAorICB7IDB4MWZjNywgIlx4Y2VceGI3XHhjZFx4ODJceGNlXHhiOSIg
fSwKKyAgeyAweDFmY2MsICJceGNlXHhiN1x4Y2VceGI5IiB9LAorICB7IDB4MWZkMiwgIlx4Y2Vc
eGI5XHhjY1x4ODhceGNjXHg4MCIgfSwKKyAgeyAweDFmZDMsICJceGNlXHhiOVx4Y2NceDg4XHhj
Y1x4ODEiIH0sCisgIHsgMHgxZmQ2LCAiXHhjZVx4YjlceGNkXHg4MiIgfSwKKyAgeyAweDFmZDcs
ICJceGNlXHhiOVx4Y2NceDg4XHhjZFx4ODIiIH0sCisgIHsgMHgxZmUyLCAiXHhjZlx4ODVceGNj
XHg4OFx4Y2NceDgwIiB9LAorICB7IDB4MWZlMywgIlx4Y2ZceDg1XHhjY1x4ODhceGNjXHg4MSIg
fSwKKyAgeyAweDFmZTQsICJceGNmXHg4MVx4Y2NceDkzIiB9LAorICB7IDB4MWZlNiwgIlx4Y2Zc
eDg1XHhjZFx4ODIiIH0sCisgIHsgMHgxZmU3LCAiXHhjZlx4ODVceGNjXHg4OFx4Y2RceDgyIiB9
LAorICB7IDB4MWZmMiwgIlx4ZTFceGJkXHhiY1x4Y2VceGI5IiB9LAorICB7IDB4MWZmMywgIlx4
Y2ZceDg5XHhjZVx4YjkiIH0sCisgIHsgMHgxZmY0LCAiXHhjZlx4OGVceGNlXHhiOSIgfSwKKyAg
eyAweDFmZjYsICJceGNmXHg4OVx4Y2RceDgyIiB9LAorICB7IDB4MWZmNywgIlx4Y2ZceDg5XHhj
ZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmZmMsICJceGNmXHg4OVx4Y2VceGI5IiB9LAorICB7
IDB4MjE2MCwgIlx4ZTJceDg1XHhiMCIgfSwKKyAgeyAweDIxNjEsICJceGUyXHg4NVx4YjEiIH0s
CisgIHsgMHgyMTYyLCAiXHhlMlx4ODVceGIyIiB9LAorICB7IDB4MjE2MywgIlx4ZTJceDg1XHhi
MyIgfSwKKyAgeyAweDIxNjQsICJceGUyXHg4NVx4YjQiIH0sCisgIHsgMHgyMTY1LCAiXHhlMlx4
ODVceGI1IiB9LAorICB7IDB4MjE2NiwgIlx4ZTJceDg1XHhiNiIgfSwKKyAgeyAweDIxNjcsICJc
eGUyXHg4NVx4YjciIH0sCisgIHsgMHgyMTY4LCAiXHhlMlx4ODVceGI4IiB9LAorICB7IDB4MjE2
OSwgIlx4ZTJceDg1XHhiOSIgfSwKKyAgeyAweDIxNmEsICJceGUyXHg4NVx4YmEiIH0sCisgIHsg
MHgyMTZiLCAiXHhlMlx4ODVceGJiIiB9LAorICB7IDB4MjE2YywgIlx4ZTJceDg1XHhiYyIgfSwK
KyAgeyAweDIxNmQsICJceGUyXHg4NVx4YmQiIH0sCisgIHsgMHgyMTZlLCAiXHhlMlx4ODVceGJl
IiB9LAorICB7IDB4MjE2ZiwgIlx4ZTJceDg1XHhiZiIgfSwKKyAgeyAweDI0YjYsICJceGUyXHg5
M1x4OTAiIH0sCisgIHsgMHgyNGI3LCAiXHhlMlx4OTNceDkxIiB9LAorICB7IDB4MjRiOCwgIlx4
ZTJceDkzXHg5MiIgfSwKKyAgeyAweDI0YjksICJceGUyXHg5M1x4OTMiIH0sCisgIHsgMHgyNGJh
LCAiXHhlMlx4OTNceDk0IiB9LAorICB7IDB4MjRiYiwgIlx4ZTJceDkzXHg5NSIgfSwKKyAgeyAw
eDI0YmMsICJceGUyXHg5M1x4OTYiIH0sCisgIHsgMHgyNGJkLCAiXHhlMlx4OTNceDk3IiB9LAor
ICB7IDB4MjRiZSwgIlx4ZTJceDkzXHg5OCIgfSwKKyAgeyAweDI0YmYsICJceGUyXHg5M1x4OTki
IH0sCisgIHsgMHgyNGMwLCAiXHhlMlx4OTNceDlhIiB9LAorICB7IDB4MjRjMSwgIlx4ZTJceDkz
XHg5YiIgfSwKKyAgeyAweDI0YzIsICJceGUyXHg5M1x4OWMiIH0sCisgIHsgMHgyNGMzLCAiXHhl
Mlx4OTNceDlkIiB9LAorICB7IDB4MjRjNCwgIlx4ZTJceDkzXHg5ZSIgfSwKKyAgeyAweDI0YzUs
ICJceGUyXHg5M1x4OWYiIH0sCisgIHsgMHgyNGM2LCAiXHhlMlx4OTNceGEwIiB9LAorICB7IDB4
MjRjNywgIlx4ZTJceDkzXHhhMSIgfSwKKyAgeyAweDI0YzgsICJceGUyXHg5M1x4YTIiIH0sCisg
IHsgMHgyNGM5LCAiXHhlMlx4OTNceGEzIiB9LAorICB7IDB4MjRjYSwgIlx4ZTJceDkzXHhhNCIg
fSwKKyAgeyAweDI0Y2IsICJceGUyXHg5M1x4YTUiIH0sCisgIHsgMHgyNGNjLCAiXHhlMlx4OTNc
eGE2IiB9LAorICB7IDB4MjRjZCwgIlx4ZTJceDkzXHhhNyIgfSwKKyAgeyAweDI0Y2UsICJceGUy
XHg5M1x4YTgiIH0sCisgIHsgMHgyNGNmLCAiXHhlMlx4OTNceGE5IiB9LAorICB7IDB4ZmIwMCwg
Ilx4NjZceDY2IiB9LAorICB7IDB4ZmIwMSwgIlx4NjZceDY5IiB9LAorICB7IDB4ZmIwMiwgIlx4
NjZceDZjIiB9LAorICB7IDB4ZmIwMywgIlx4NjZceDY2XHg2OSIgfSwKKyAgeyAweGZiMDQsICJc
eDY2XHg2Nlx4NmMiIH0sCisgIHsgMHhmYjA1LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhmYjA2LCAi
XHg3M1x4NzQiIH0sCisgIHsgMHhmYjEzLCAiXHhkNVx4YjRceGQ1XHhiNiIgfSwKKyAgeyAweGZi
MTQsICJceGQ1XHhiNFx4ZDVceGE1IiB9LAorICB7IDB4ZmIxNSwgIlx4ZDVceGI0XHhkNVx4YWIi
IH0sCisgIHsgMHhmYjE2LCAiXHhkNVx4YmVceGQ1XHhiNiIgfSwKKyAgeyAweGZiMTcsICJceGQ1
XHhiNFx4ZDVceGFkIiB9LAorfTsKKworCisvLyBzb21lIGRlZmluZXMgZnJvbSBJQ1UKKworI2Rl
ZmluZSBVMTZfSVNfTEVBRChjKSAoKChjKSYweGZmZmZmYzAwKT09MHhkODAwKQorI2RlZmluZSBV
MTZfSVNfVFJBSUwoYykgKCgoYykmMHhmZmZmZmMwMCk9PTB4ZGMwMCkKKyNkZWZpbmUgVTE2X1NV
UlJPR0FURV9PRkZTRVQgKCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKQorI2RlZmluZSBV
MTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpIFwKKyAgICAoKChVQ2hhcjMyKShsZWFk
KTw8MTBVTCkrKFVDaGFyMzIpKHRyYWlsKS1VMTZfU1VSUk9HQVRFX09GRlNFVCkKKworI2RlZmlu
ZSBVMTZfTEVBRChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSk+PjEwKSsw
eGQ3YzApCisjZGVmaW5lIFUxNl9UUkFJTChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxl
bWVudGFyeSkmMHgzZmYpfDB4ZGMwMCkKKworI2RlZmluZSBVX0lTX1NVUlJPR0FURShjKSAoKChj
KSYweGZmZmZmODAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfU0lOR0xFKGMpICFVX0lTX1NV
UlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMp
CisjZGVmaW5lIFUxNl9JU19TVVJST0dBVEVfTEVBRChjKSAoKChjKSYweDQwMCk9PTApCisKKyNk
ZWZpbmUgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwKKyAgICAoYyk9KHMpWyhpKSsrXTsg
XAorICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAor
ICAgICAgICBpZigoaSk8KGxlbmd0aCkgJiYgVTE2X0lTX1RSQUlMKF9fYzI9KHMpWyhpKV0pKSB7
IFwKKyAgICAgICAgICAgICsrKGkpOyBcCisgICAgICAgICAgICAoYyk9VTE2X0dFVF9TVVBQTEVN
RU5UQVJZKChjKSwgX19jMik7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCit9CisKKyNkZWZpbmUg
VV9NQVNLKHgpICgodWludDMyX3QpMTw8KHgpKQorCituYW1lc3BhY2UgV1RGIHsKKyAgbmFtZXNw
YWNlIFVuaWNvZGUgeworCisgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgTGVmdFRvUmlnaHQs
CisgICAgICBSaWdodFRvTGVmdCwKKyAgICAgIEV1cm9wZWFuTnVtYmVyLAorICAgICAgRXVyb3Bl
YW5OdW1iZXJTZXBhcmF0b3IsCisgICAgICBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3IsCisgICAg
ICBBcmFiaWNOdW1iZXIsCisgICAgICBDb21tb25OdW1iZXJTZXBhcmF0b3IsCisgICAgICBCbG9j
a1NlcGFyYXRvciwKKyAgICAgIFNlZ21lbnRTZXBhcmF0b3IsCisgICAgICBXaGl0ZVNwYWNlTmV1
dHJhbCwKKyAgICAgIE90aGVyTmV1dHJhbCwKKyAgICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nLAor
ICAgICAgTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICAgIFJpZ2h0VG9MZWZ0QXJhYmljLAorICAg
ICAgUmlnaHRUb0xlZnRFbWJlZGRpbmcsCisgICAgICBSaWdodFRvTGVmdE92ZXJyaWRlLAorICAg
ICAgUG9wRGlyZWN0aW9uYWxGb3JtYXQsCisgICAgICBOb25TcGFjaW5nTWFyaywKKyAgICAgIEJv
dW5kYXJ5TmV1dHJhbAorICAgIH07CisKKyAgICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAg
ICAgIERlY29tcG9zaXRpb25Ob25lLAorICAgICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAg
ICAgIERlY29tcG9zaXRpb25Db21wYXQsCisgICAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlLAorICAg
ICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAgICAgRGVjb21wb3NpdGlvbkZvbnQsCisgICAgICBE
ZWNvbXBvc2l0aW9uRnJhY3Rpb24sCisgICAgICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAg
IERlY29tcG9zaXRpb25Jc29sYXRlZCwKKyAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAg
ICBEZWNvbXBvc2l0aW9uTmFycm93LAorICAgICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisgICAg
ICBEZWNvbXBvc2l0aW9uU21hbGwsCisgICAgICBEZWNvbXBvc2l0aW9uU3F1YXJlLAorICAgICAg
RGVjb21wb3NpdGlvblN1YiwKKyAgICAgIERlY29tcG9zaXRpb25TdXBlciwKKyAgICAgIERlY29t
cG9zaXRpb25WZXJ0aWNhbCwKKyAgICAgIERlY29tcG9zaXRpb25XaWRlLAorICAgIH07CisKKyAg
ICBlbnVtIENoYXJDYXRlZ29yeSB7CisgICAgICBOb0NhdGVnb3J5ID0gIDAsCisgICAgICBPdGhl
cl9Ob3RBc3NpZ25lZCA9IFVfTUFTSyhHX1VOSUNPREVfVU5BU1NJR05FRCksCisgICAgICBMZXR0
ZXJfVXBwZXJjYXNlID0gVV9NQVNLKEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVSKSwKKyAgICAg
IExldHRlcl9Mb3dlcmNhc2UgPSBVX01BU0soR19VTklDT0RFX0xPV0VSQ0FTRV9MRVRURVIpLAor
ICAgICAgTGV0dGVyX1RpdGxlY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVfVElUTEVDQVNFX0xFVFRF
UiksCisgICAgICBMZXR0ZXJfTW9kaWZpZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX0xF
VFRFUiksCisgICAgICBMZXR0ZXJfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX0xFVFRF
UiksCisKKyAgICAgIE1hcmtfTm9uU3BhY2luZyA9IFVfTUFTSyhHX1VOSUNPREVfTk9OX1NQQUNJ
TkdfTUFSSyksCisgICAgICBNYXJrX0VuY2xvc2luZyA9IFVfTUFTSyhHX1VOSUNPREVfRU5DTE9T
SU5HX01BUkspLAorICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nID0gVV9NQVNLKEdfVU5JQ09E
RV9DT01CSU5JTkdfTUFSSyksCisKKyAgICAgIE51bWJlcl9EZWNpbWFsRGlnaXQgPSBVX01BU0so
R19VTklDT0RFX0RFQ0lNQUxfTlVNQkVSKSwKKyAgICAgIE51bWJlcl9MZXR0ZXIgPSBVX01BU0so
R19VTklDT0RFX0xFVFRFUl9OVU1CRVIpLAorICAgICAgTnVtYmVyX090aGVyID0gVV9NQVNLKEdf
VU5JQ09ERV9PVEhFUl9OVU1CRVIpLAorCisgICAgICBTZXBhcmF0b3JfU3BhY2UgPSBVX01BU0so
R19VTklDT0RFX1NQQUNFX1NFUEFSQVRPUiksCisgICAgICBTZXBhcmF0b3JfTGluZSA9IFVfTUFT
SyhHX1VOSUNPREVfTElORV9TRVBBUkFUT1IpLAorICAgICAgU2VwYXJhdG9yX1BhcmFncmFwaCA9
IFVfTUFTSyhHX1VOSUNPREVfUEFSQUdSQVBIX1NFUEFSQVRPUiksCisKKyAgICAgIE90aGVyX0Nv
bnRyb2wgPSBVX01BU0soR19VTklDT0RFX0NPTlRST0wpLAorICAgICAgT3RoZXJfRm9ybWF0ID0g
VV9NQVNLKEdfVU5JQ09ERV9GT1JNQVQpLAorICAgICAgT3RoZXJfUHJpdmF0ZVVzZSA9IFVfTUFT
SyhHX1VOSUNPREVfUFJJVkFURV9VU0UpLAorICAgICAgT3RoZXJfU3Vycm9nYXRlID0gVV9NQVNL
KEdfVU5JQ09ERV9TVVJST0dBVEUpLAorCisgICAgICBQdW5jdHVhdGlvbl9EYXNoID0gVV9NQVNL
KEdfVU5JQ09ERV9EQVNIX1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9uX09wZW4gPSBV
X01BU0soR19VTklDT0RFX09QRU5fUFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fQ2xv
c2UgPSBVX01BU0soR19VTklDT0RFX0NMT1NFX1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0
aW9uX0Nvbm5lY3RvciA9IFVfTUFTSyhHX1VOSUNPREVfQ09OTkVDVF9QVU5DVFVBVElPTiksCisg
ICAgICBQdW5jdHVhdGlvbl9PdGhlciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfUFVOQ1RVQVRJ
T04pLAorCisgICAgICBTeW1ib2xfTWF0aCA9IFVfTUFTSyhHX1VOSUNPREVfTUFUSF9TWU1CT0wp
LAorICAgICAgU3ltYm9sX0N1cnJlbmN5ID0gVV9NQVNLKEdfVU5JQ09ERV9DVVJSRU5DWV9TWU1C
T0wpLAorICAgICAgU3ltYm9sX01vZGlmaWVyID0gVV9NQVNLKEdfVU5JQ09ERV9NT0RJRklFUl9T
WU1CT0wpLAorICAgICAgU3ltYm9sX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9TWU1C
T0wpLAorCisgICAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUgPSBVX01BU0soR19VTklDT0RF
X0lOSVRJQUxfUFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSA9IFVf
TUFTSyhHX1VOSUNPREVfRklOQUxfUFVOQ1RVQVRJT04pCisgICAgfTsKKworICAgIGlubGluZSBV
Q2hhcjMyIGZvbGRDYXNlKFVDaGFyMzIgY2gpCisgICAgeworICAgICAgICAvLyBhZGQgZ191bmlj
aGFyX2Nhc2Vmb2xkIHRvIEdMaWIgdXBzdHJlYW0/CisKKyAgICAgICAgaW50IHN0YXJ0ID0gMDsK
KyAgICAgICAgaW50IGVuZCA9IEdfTl9FTEVNRU5UUyhjYXNlZm9sZF90YWJsZSk7CisKKyAgICAg
ICAgaWYgKGNoID49IGNhc2Vmb2xkX3RhYmxlW3N0YXJ0XS5jaCAmJgorICAgICAgICAgICAgY2gg
PD0gY2FzZWZvbGRfdGFibGVbZW5kIC0gMV0uY2gpIHsKKyAgICAgICAgICAgIHdoaWxlIChUUlVF
KSB7CisgICAgICAgICAgICAgICAgaW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT0gY2FzZWZvbGRfdGFibGVbaGFsZl0uY2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdfdXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxmXS5k
YXRhKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhbGYgPT0gc3RhcnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+IGNh
c2Vmb2xkX3RhYmxlW2hhbGZdLmNoKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaGFs
ZjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSBo
YWxmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlciAoY2gpOworICAgIH0KKworICAgIGlubGluZSBp
bnQgZm9sZENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIq
IHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3Ig
KmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRm
OChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsK
KyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIH0KKworICAgICAgICBjaGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X2Nhc2Vmb2xkKHV0Zjhz
cmMsIC0xKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhzcmMpOworCisgICAgICAgIGxvbmcgdXRmMTZy
ZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAgVUNoYXIqIHV0ZjE2cmVzdWx0ID0gZ191dGY4X3Rv
X3V0ZjE2KHV0ZjhyZXN1bHQsIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3IpOwor
ICAgICAgICBnX2ZyZWUodXRmOHJlc3VsdCk7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAg
ICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K
KworICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAg
ICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9CisgICAgICAg
IG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihV
Q2hhcikpOworICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworCisgICAgICAgIHJldHVybiB1
dGYxNnJlc3VsdExlbmd0aDsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIq
IHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0
aCwgYm9vbCogZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisK
KyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwg
MCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJv
ciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBj
aGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X3N0cmRvd24odXRmOHNyYywgLTEpOworICAgICAgICBn
X2ZyZWUodXRmOHNyYyk7CisKKyAgICAgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOwor
ICAgICAgICBVQ2hhciogdXRmMTZyZXN1bHQgPSBnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdCwg
LTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvcik7CisgICAgICAgIGdfZnJlZSh1dGY4
cmVzdWx0KTsKKyAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgKmVycm9yID0gVFJV
RTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1dGYx
NnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgeworICAgICAgICAgICAgKmVycm9yID0gVFJV
RTsKKyAgICAgICAgICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
dXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgdXRm
MTZyZXN1bHQsIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIGdf
ZnJlZSh1dGYxNnJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOwor
ICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMyIHRvTG93ZXIoVUNoYXIzMiBjKQorICAgIHsKKyAg
ICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlcihjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgVUNo
YXIzMiB0b1VwcGVyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX3Rv
dXBwZXIoYyk7CisgICAgfQorCisgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQs
IGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wq
IGVycm9yKQorICAgIHsKKyAgICAgICAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOworCisgICAgICAg
IGNoYXIgKnV0ZjhzcmMgPSBnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZn
ZXJyb3IpOworICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVF
OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgY2hhciAqdXRm
OHJlc3VsdCA9IGdfdXRmOF9zdHJ1cCh1dGY4c3JjLCAtMSk7CisgICAgICAgIGdfZnJlZSh1dGY4
c3JjKTsKKworICAgICAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgIFVD
aGFyKiB1dGYxNnJlc3VsdCA9IGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LCAtMSwgMCwgJnV0
ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhyZXN1bHQpOwor
ICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVu
Z3RoID4gcmVzdWx0TGVuZ3RoKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVFOworICAgICAg
ICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3Vs
dExlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdCwg
dXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZ19mcmVlKHV0ZjE2
cmVzdWx0KTsKKworICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorCisg
ICAgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJl
dHVybiBnX3VuaWNoYXJfdG90aXRsZShjKTsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0Fy
YWJpY0NoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBjID49IDB4MDYwMCAmJiBj
IDw9IDB4MDZGRjsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIz
MiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVf
Rk9STUFUOworICAgIH0KKworICAgIGlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIz
MiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVf
U1BBQ0VfU0VQQVJBVE9SOworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUHJpbnRhYmxlQ2hh
cihVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3ByaW50KGMpOwor
ICAgIH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBpc0RpZ2l0KFVDaGFyMzIgYykKKyAgICB7Cisg
ICAgICByZXR1cm4gZ191bmljaGFyX2lzZGlnaXQoYyk7CisgICAgfQorCisgICAgaW5saW5lIGJv
b2wgaXNQdW5jdChVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3B1
bmN0KGMpOworICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMyIG1pcnJvcmVkQ2hhcihVQ2hhcjMy
IGMpCisgICAgeworICAgICAgZ3VuaWNoYXIgbWlycm9yID0gMDsKKyAgICAgIGdfdW5pY2hhcl9n
ZXRfbWlycm9yX2NoYXIoYywgJm1pcnJvcik7CisgICAgICByZXR1cm4gbWlycm9yOworICAgIH0K
KworICAgIGlubGluZSBDaGFyQ2F0ZWdvcnkgY2F0ZWdvcnkoVUNoYXIzMiBjKQorICAgIHsKKyAg
ICAgIGlmIChjID4gMHhmZmZmKSB7CisgICAgICAgICAgcmV0dXJuIE5vQ2F0ZWdvcnk7CisgICAg
ICB9CisgICAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBlKGMp
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCisg
ICAgeworICAgICAgUGFuZ29CaWRpVHlwZSB0eXBlID0gcGFuZ29fYmlkaV90eXBlX2Zvcl91bmlj
aGFyKGMpOworICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQ
RV9MOiByZXR1cm4gTGVmdFRvUmlnaHQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOiBy
ZXR1cm4gUmlnaHRUb0xlZnQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTDogcmV0dXJu
IFJpZ2h0VG9MZWZ0QXJhYmljOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTFJFOiByZXR1
cm4gTGVmdFRvUmlnaHRFbWJlZGRpbmc7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9STEU6
IHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGluZzsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X0xSTzogcmV0dXJuIExlZnRUb1JpZ2h0T3ZlcnJpZGU7CisgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9STE86IHJldHVybiBSaWdodFRvTGVmdE92ZXJyaWRlOworICAgICAgY2FzZSBQQU5HT19C
SURJX1RZUEVfUERGOiByZXR1cm4gUG9wRGlyZWN0aW9uYWxGb3JtYXQ7CisgICAgICBjYXNlIFBB
TkdPX0JJRElfVFlQRV9FTjogcmV0dXJuIEV1cm9wZWFuTnVtYmVyOworICAgICAgY2FzZSBQQU5H
T19CSURJX1RZUEVfQU46IHJldHVybiBBcmFiaWNOdW1iZXI7CisgICAgICBjYXNlIFBBTkdPX0JJ
RElfVFlQRV9FUzogcmV0dXJuIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOworICAgICAgY2FzZSBQ
QU5HT19CSURJX1RZUEVfRVQ6IHJldHVybiBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3I7CisgICAg
ICBjYXNlIFBBTkdPX0JJRElfVFlQRV9DUzogcmV0dXJuIENvbW1vbk51bWJlclNlcGFyYXRvcjsK
KyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX05TTTogcmV0dXJuIE5vblNwYWNpbmdNYXJrOwor
ICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQk46IHJldHVybiBCb3VuZGFyeU5ldXRyYWw7Cisg
ICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9COiByZXR1cm4gQmxvY2tTZXBhcmF0b3I7CisgICAg
ICBjYXNlIFBBTkdPX0JJRElfVFlQRV9TOiByZXR1cm4gU2VnbWVudFNlcGFyYXRvcjsKKyAgICAg
IGNhc2UgUEFOR09fQklESV9UWVBFX1dTOiByZXR1cm4gV2hpdGVTcGFjZU5ldXRyYWw7CisgICAg
ICBkZWZhdWx0OiByZXR1cm4gT3RoZXJOZXV0cmFsOworICAgICAgfSAKKyAgICB9CisKKyAgICBp
bmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmlj
aGFyX2lzbG93ZXIoYyk7CisgICAgfQorCisgICAgaW5saW5lIGludCBkaWdpdFZhbHVlKFVDaGFy
MzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX2RpZ2l0X3ZhbHVlKGMpOworICAg
IH0KKworICAgIGlubGluZSB1aW50OF90IGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYykKKyAgICB7
CisgICAgICAvLyByZXR1cm4gZ191bmljaGFyX2NvbWJpbmluZ19jbGFzcyhjKTsKKyAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGlubGluZSBEZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBvc2l0
aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgLy8gRklYTUUKKyAgICAgIHJldHVybiBE
ZWNvbXBvc2l0aW9uTm9uZTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHVtZW1jYXNlY21wKGNv
bnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAgICB7CisgICAgICBjaGFy
ICp1dGY4YSA9IGdfdXRmMTZfdG9fdXRmOChhLCBsZW4sIDAsIDAsIE5VTEwpOworICAgICAgY2hh
ciAqdXRmOGIgPSBnX3V0ZjE2X3RvX3V0ZjgoYiwgbGVuLCAwLCAwLCBOVUxMKTsKKworICAgICAg
Y2hhciAqZm9sZGVkQSA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4YSwgLTEpOworICAgICAgY2hhciAq
Zm9sZGVkQiA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4YiwgLTEpOworCisgICAgICBnX2ZyZWUodXRm
OGEpOworICAgICAgZ19mcmVlKHV0ZjhiKTsKKworICAgICAgaW50IHJlc3VsdCA9IGdfdXRmOF9j
b2xsYXRlKGZvbGRlZEEsIGZvbGRlZEIpOworCisgICAgICBnX2ZyZWUoZm9sZGVkQSk7CisgICAg
ICBnX2ZyZWUoZm9sZGVkQik7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgIH0K
K30KKworI2VuZGlmCisvLyB2aW06IHRzPTIgc3c9MiBldApJbmRleDogV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2MDg3KQorKysg
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NiBAQAorMjAwOC0w
OS0wMiAgRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBh
bnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkxNAorICAgICAgICBb
R1RLXSBJbXBsZW1lbnQgVW5pY29kZSBmdW5jdGlvbmFsaXR5IHVzaW5nIEdMaWIKKworICAgICAg
ICBPcmlnaW5hbCBwYXRjaCBieSBKw7xyZyBCaWxsZXRlciBhbmQgTmFpZW0gU2hhaWsuCisgICAg
ICAgIEFkZGVkIHByb2JpbmcgZm9yIGEgaGFyZC1jb2RlZCBsaXN0cyBvZiB0ZXh0IGVuY29kaW5n
cy4KKyAgICAgICAgVGhlIGJhc2lzIG9mIHRoaXMgbGlzdCBpcyB0YWtlbiBmcm9tIHRoZSBlbmNv
ZGluZ3Mgc3VwcG9ydGVkIGJ5IGljb252LAorICAgICAgICB0aGVuIGV4dGVuZGVkIGJ5IHRpcy02
MjAsIHdpbmRvd3MtMTI1MSwgZXVjLWtyIGFuZCB3aW5kb3dzLTEyNTMuCisKKyAgICAgICAgUHJv
YmluZyBpcyBuZWNlc3Nhcnkgd2l0aCB0aGUgY3VycmVudCBkZXNpZ24gb2YgdGV4dCBjb2RlY3MK
KyAgICAgICAgYXMgaWNvbnYuaCBkb2VzIG5vdCBzdXBwb3J0IGVudW1lcmF0aW5nIGF2YWlsYWJs
ZSBlbmNvZGluZ3MuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRCcmVha0l0ZXJhdG9ySUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha0xhc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJldmlvdXMpOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFbmNvZGlu
Zzo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRleHRDb2RlY01hcHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZp
bmROZXh0V29yZEZyb21JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFVwSXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyQnJlYWtJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjp3b3JkQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpsaW5l
QnJlYWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpzZW50ZW5jZUJyZWFrSXRlcmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrRmlyc3QpOgorICAgICAgICAoV2ViQ29yZTo6
dGV4dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtOZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRleHRCcmVha1ByZXZpb3VzKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRC
cmVha1ByZWNlZGluZyk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtGb2xsb3dpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpp
c1RleHRCcmVhayk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6bmV3VGV4
dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6dGVzdEVuY29kaW5n
QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJDb2Rl
Y3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VFbmNvZGlu
Z05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlQ29k
ZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZEVu
Y29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckV4
dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6VGV4dENvZGVj
R3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6flRleHRDb2RlY0d0ayk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlbGVhc2VJQ29udik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RGVjb2Rlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RW5jb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6
OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmg6IEFk
ZGVkLgorCiAyMDA4LTA5LTA0ICBBbHAgVG9rZXIgIDxhbHBAbnVhbnRpLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjA4NykKKysrIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NzUsMTQgKzE2NzUsOSBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Qm91bmRhcmllc0lDVS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVy
YXRvci5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3Bw
IFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5o
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
SUNVLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENv
ZGVjVVRGMTYuY3BwIFwKQEAgLTE5NzEsOCArMTk2NiwzMSBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi90cmVlcy5oIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemNvbmYuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3psaWIuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy96bGliL3p1dGlsLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvemxpYi96dXRpbC5oIAorCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAorIyAt
LS0tCitpZiBVU0VfSUNVX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVz
SUNVLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNw
cCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1Uu
aCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVR3RrLmNwcAorZW5kaWYgIyBFTkQgVVNFX0NVUkwKKworIyAtLS0tCisjIGdsaWIgdW5pY29k
ZSBiYWNrZW5kCisjIC0tLS0KK2lmIFVTRV9HTElCX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNl
cyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKK2VuZGlmCiAKICMgLS0tLQogIyBjdXJs
IGh0dHAgYmFja2VuZApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxl
Rm9udERhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAkocmV2aXNpb24gMzYwODcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDggKzM5LDYgQEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91
Y2hhci5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkocmV2aXNpb24gMzYwODcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNl
QnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwogCiAgICAgaW50IHRleHRC
cmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKik7CisgICAgaW50IHRleHRCcmVha0xhc3QoVGV4
dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRv
ciopOworICAgIGludCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRvciopOwogICAg
IGludCB0ZXh0QnJlYWtDdXJyZW50KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRC
cmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciosIGludCk7CiAgICAgaW50IHRleHRCcmVh
a0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciosIGludCk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHJldmlzaW9uIDM2MDg3KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODksMTEgKzg5LDIxIEBAIGludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJ
dGVyYXRvciogYmkKICAgICByZXR1cm4gdWJya19maXJzdChiaSk7CiB9CiAKK2ludCB0ZXh0QnJl
YWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdWJya19sYXN0KGJp
KTsKK30KKwogaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQogewogICAg
IHJldHVybiB1YnJrX25leHQoYmkpOwogfQogCitpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJy
ZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiB1YnJrX3ByZXZpb3VzKGJpKTsKK30KKwog
aW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCiB7
CiAgICAgcmV0dXJuIHVicmtfcHJlY2VkaW5nKGJpLCBwb3MpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHJldmlzaW9uIDM2MDg3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDgg
QEAKICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAj
aW5jbHVkZSA8UVN0cmluZz4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xp
Yi5oPgogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CkBAIC0xMDUsNiArMTA3LDIyIEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUo
Y29uc3QgVUNoYXIKICAgICBRU3RyaW5nIHN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFy
Kj4oY2hhcmFjdGVycyksIGxlbmd0aCk7CiAgICAgc3RyID0gc3RyLm5vcm1hbGl6ZWQoUVN0cmlu
Zzo6Tm9ybWFsaXphdGlvbkZvcm1fQyk7CiAgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcykt
PmVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyICo+KHN0ci51dGYxNigpKSwgc3Ry
Lmxlbmd0aCgpLCBoYW5kbGluZyk7CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIGNoYXIg
KnV0Zjhzb3VyY2UgPSBnX3V0ZjE2X3RvX3V0ZjgoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCBO
VUxMKTsKKyAgICBjaGFyICp1dGY4bm9ybWFsaXplZCA9IGdfdXRmOF9ub3JtYWxpemUodXRmOHNv
dXJjZSwgLTEsIEdfTk9STUFMSVpFX05GQyk7CisKKyAgICBnX2ZyZWUgKHV0Zjhzb3VyY2UpOwor
CisgICAgbG9uZyB1dGYxNmxlbmd0aDsKKyAgICBVQ2hhciogdXRmMTZub3JtYWxpemVkID0gZ191
dGY4X3RvX3V0ZjE2KHV0Zjhub3JtYWxpemVkLCAtMSwgMCwgJnV0ZjE2bGVuZ3RoLCBOVUxMKTsK
KworICAgIGdfZnJlZSAodXRmOG5vcm1hbGl6ZWQpOworCisgICAgQ1N0cmluZyByZXN1bHQgPSBu
ZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUodXRmMTZub3JtYWxpemVkLCB1dGYxNmxlbmd0aCwg
aGFuZGxpbmcpOworCisgICAgZ19mcmVlICh1dGYxNm5vcm1hbGl6ZWQpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDM2MDg3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsOSBAQAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0Lmgi
CiAjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiZ3RrL1RleHRDb2RlY0d0ay5o
IgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTE3Niw2ICsxNzksMTEgQEAg
c3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpy
ZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAg
VGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2Vu
ZGlmCisKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJC
YXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQog
CiBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKQEAgLTE5NCw2ICsyMDIsMTEgQEAg
c3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdp
c3RlckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29k
ZWNNYWM6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYg
VVNFKEdMSUJfVU5JQ09ERSkKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNv
ZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpy
ZWdpc3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBz
dGQ6OmF1dG9fcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVz
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3Vu
ZGFyaWVzR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsv
VGV4dEJvdW5kYXJpZXNHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIK
KworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBmaW5k
TmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRp
b24sIGJvb2wgZm9yd2FyZCkKK3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJl
YWtJdGVyYXRvcihjaGFycywgbGVuKTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBv
c2l0aW9uID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxl
IChwb3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNl
YXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsKKyAgICAgICAg
ICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAm
JiBnX3VuaWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcG9zaXRpb247CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9s
bG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBw
b3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7Cisg
ICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgZm9sbG93
aW5nIHRoZSBicmVhaworICAgICAgICAgICAgLy8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uID4gMCAmJiBnX3VuaWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbl0p
KQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRp
b24gPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVD
aGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkK
K3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywg
bGVuKTsKKyAgICAqZW5kID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAg
aWYgKCplbmQgPCAwKQorICAgICAgICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgKnN0
YXJ0ID0gdGV4dEJyZWFrUHJldmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJh
dG9yR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4
dEJyZWFrSXRlcmF0b3JHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgorCisjaW5jbHVk
ZSA8cGFuZ28vcGFuZ28uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFVCcmVha0l0
ZXJhdG9yVHlwZSB7CisgICAgVUJSS19DSEFSQUNURVIsCisgICAgVUJSS19XT1JELAorICAgIFVC
UktfTElORSwKKyAgICBVQlJLX1NFTlRFTkNFCit9OworCitjbGFzcyBUZXh0QnJlYWtJdGVyYXRv
ciB7CitwdWJsaWM6CisgICAgVUJyZWFrSXRlcmF0b3JUeXBlIG1fdHlwZTsKKyAgICBpbnQgbV9s
ZW5ndGg7CisgICAgUGFuZ29Mb2dBdHRyICptX2xvZ19hdHRyczsKKworICAgIGludCBtX2luZGV4
OworfTsKKworc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKGJvb2wmIGNy
ZWF0ZWRJdGVyYXRvciwgVGV4dEJyZWFrSXRlcmF0b3IqJiBpdGVyYXRvciwKKyAgICBVQnJlYWtJ
dGVyYXRvclR5cGUgdHlwZSwgY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAg
ICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWNyZWF0ZWRJdGVy
YXRvcikgeworICAgICAgICBpdGVyYXRvciA9IG5ldyBUZXh0QnJlYWtJdGVyYXRvcigpOworICAg
ICAgICBjcmVhdGVkSXRlcmF0b3IgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIWl0ZXJhdG9yKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGxvbmcgdXRmOGxlbjsKKyAgICBjaGFyICp1dGY4ID0g
Z191dGYxNl90b191dGY4KHN0cmluZywgbGVuZ3RoLCAwLCAmdXRmOGxlbiwgMCk7CisKKyAgICAv
LyBGSVhNRTogYXNzdW1lcyBubyBzdXJyb2dhdGUgcGFpcnMKKworICAgIGl0ZXJhdG9yLT5tX3R5
cGUgPSB0eXBlOworICAgIGl0ZXJhdG9yLT5tX2xlbmd0aCA9IGxlbmd0aDsKKyAgICBpdGVyYXRv
ci0+bV9sb2dfYXR0cnMgPSBnX25ldzAoUGFuZ29Mb2dBdHRyLCBsZW5ndGggKyAxKTsKKyAgICBp
dGVyYXRvci0+bV9pbmRleCA9IC0xOworICAgIHBhbmdvX2dldF9sb2dfYXR0cnModXRmOCwgdXRm
OGxlbiwgLTEsIDAsIGl0ZXJhdG9yLT5tX2xvZ19hdHRycywgbGVuZ3RoICsgMSk7CisKKyAgICBn
X2ZyZWUodXRmOCk7CisKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9CisKK1RleHRCcmVha0l0ZXJh
dG9yKiBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5n
dGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZENoYXJhY3RlckJyZWFrSXRlcmF0b3IgPSBm
YWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0NoYXJhY3RlckJyZWFr
SXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3IsCisgICAgICAgIHN0YXRpY0NoYXJhY3RlckJyZWFrSXRlcmF0b3IsIFVCUktfQ0hB
UkFDVEVSLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJl
YWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRp
YyBib29sIGNyZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0
QnJlYWtJdGVyYXRvciogc3RhdGljV29yZEJyZWFrSXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVw
SXRlcmF0b3IoY3JlYXRlZFdvcmRCcmVha0l0ZXJhdG9yLAorICAgICAgICBzdGF0aWNXb3JkQnJl
YWtJdGVyYXRvciwgVUJSS19XT1JELCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK1RleHRCcmVha0l0
ZXJhdG9yKiBsaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3Ro
KQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRMaW5lQnJlYWtJdGVyYXRvciA9IGZhbHNlOwor
ICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljTGluZUJyZWFrSXRlcmF0b3I7Cisg
ICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZExpbmVCcmVha0l0ZXJhdG9yLAorICAgICAg
ICBzdGF0aWNMaW5lQnJlYWtJdGVyYXRvciwgVUJSS19MSU5FLCBzdHJpbmcsIGxlbmd0aCk7Cit9
CisKK1RleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIq
IHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkU2VudGVuY2VC
cmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0
aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3I7CisgICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRl
ZFNlbnRlbmNlQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljU2VudGVuY2VCcmVha0l0ZXJh
dG9yLCBVQlJLX1NFTlRFTkNFLCBzdHJpbmcsIGxlbmd0aCk7Cit9CisKK2ludCB0ZXh0QnJlYWtG
aXJzdChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIHRleHRCcmVha0ZvbGxv
d2luZyhiaSwgLTEpOworfQorCitpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVyYXRvciog
YmkpCit7CisgICAgcmV0dXJuIHRleHRCcmVha1ByZWNlZGluZyhiaSwgYmktPm1fbGVuZ3RoICsg
MSk7Cit9CisKK2ludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAg
ICBmb3IgKGludCBpID0gYmktPm1faW5kZXggKyAxOyBpIDw9IGJpLT5tX2xlbmd0aDsgaSsrKSB7
CisgICAgICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNb
aV0uaXNfbGluZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dP
UkQgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX3N0YXJ0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc193
b3JkX2VuZCkpIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIg
JiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikgeworICAgICAgICAgICAg
YmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBp
ZiAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNf
c2VudGVuY2Vfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAg
ICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gVGV4dEJyZWFrRG9uZTsKK30KKworaW50IHRleHRCcmVha1By
ZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmktPm1f
aW5kZXggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJL
X0xJTkUgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAgICAg
IGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IGVsc2Ug
aWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNfd29y
ZF9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfd29yZF9lbmQpKSB7CisgICAgICAgICAgICBiaS0+bV9p
bmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChiaS0+
bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ19hdHRyc1tpXS5pc19jdXJzb3Jf
cG9zaXRpb24pIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5DRSAm
JiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNlX3N0YXJ0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBiaS0+bV9sb2dfYXR0cnNbaV0u
aXNfc2VudGVuY2VfZW5kKSkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAg
ICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRleHRCcmVha0Zp
cnN0KGJpKTsKK30KKworaW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciog
YmksIGludCBwb3MpCit7CisgICAgYmktPm1faW5kZXggPSBwb3M7CisgICAgcmV0dXJuIHRleHRC
cmVha1ByZXZpb3VzKGJpKTsKK30KKworaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJ
dGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgaWYgKHBvcyA8IDApCisgICAgICAgIHBvcyA9
IC0xOworICAgIGJpLT5tX2luZGV4ID0gcG9zOworICAgIHJldHVybiB0ZXh0QnJlYWtOZXh0KGJp
KTsKK30KKworaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQorewor
ICAgIHJldHVybiBiaS0+bV9pbmRleDsKK30KKworYm9vbCBpc1RleHRCcmVhayhUZXh0QnJlYWtJ
dGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgaWYgKGJpLT5tX2luZGV4ID49IDApIHsKKyAg
ICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19MSU5FICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+
bV9pbmRleF0uaXNfbGluZV9icmVhaykgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAg
ICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgYmktPm1fbG9nX2F0dHJz
W2JpLT5tX2luZGV4XS5pc193b3JkX2VuZCkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9s
b2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX2NoYXJfYnJlYWspIHsKKyAgICAgICAgICAgIHJldHVy
biBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5DRSAm
JiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX3NlbnRlbmNlX2VuZCkgeworICAgICAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0Bh
Y2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXh0Q29kZWNHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK3VzaW5nIHN0ZDo6YXV0b19wdHI7
Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKKworLy8gYXBwZW5k
T21pdHRpbmdCT00gaXMgZ29uZSAoaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzMz
ODApLCBzbyB3ZSBuZWVkIHRvIGF2b2lkIGdlbmVyYXRpbmcgZXh0cmEgQk9NJ3MKKy8vIGhlcmUu
IFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNwZWNpZnlpbmcgdGhlIFVURi0xNiBjb2RlY3MnIGVu
ZGlhbm5lc3MgZXhwbGljaXRseSB3aGVuIGluaXRpYWxpemluZyBpY29udgorCisjaWYgKEdfQllU
RV9PUkRFUiA9PSBHX0JJR19FTkRJQU4pCisgICAgY29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRleHRD
b2RlY0d0azo6bV9pbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZCRSI7CisjZWxzZSAKKyAg
ICBjb25zdCBnY2hhciogV2ViQ29yZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdO
YW1lID0gIlVURi0xNkxFIjsKKyNlbmRpZgorCisKKy8vIGxpc3Qgb2YgdGV4dCBlbmNvZGluZ3Mg
YW5kIHRoZWlyIGFsaWFzZXMKKy8vIHRoZSBmaXJzdCBlbnRyeS8iYWxpYXMiIGlzIHRoZSBjYW5v
bmljYWwgbmFtZSwgZWFjaCBhbGlhcyBsaXN0IG11c3QgYmUgdGVybWluYXRlZCBieSBhIDAKKwor
Ly8gVW5pY29kZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX1VURl84ICAgICAgICAgICAgPSB7ICJVVEYtOCIgLCAwfTsgCisKKy8vIFdl
c3Rlcm4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19JU09fODg1OV8xICAgICAgID0geyAiSVNPLTg4NTktMSIsICJDUDgxOSIsICJJQk04
MTkiLCAiSVNPLUlSLTEwMCIsICJJU084ODU5LTEiLCAiSVNPXzg4NTktMSIsICJJU09fODg1OS0x
OjE5ODciLCAgIkwxIiwgIkxBVElOMSIsICJDU0lTT0xBVElOMSIgLCAwfTsKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNST01BTiAg
ICAgICAgID0geyAiTUFDUk9NQU4iLCAiTUFDIiwgIk1BQ0lOVE9TSCIsICJDU01BQ0lOVE9TSCIg
LCAwfTsKKworLy8gSmFwYW5lc2UKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19TSElGVF9KSVMgICAgICAgID0geyAiU0hJRlRfSklTIiwg
Ik1TX0tBTkpJIiwgIlNISUZULUpJUyIsICJTSklTIiwgIkNTU0hJRlRKSVMiICwgMH07CitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfRVVD
X0pQICAgICAgICAgICA9IHsgIkVVQ19KUCIsICJFVUMtSlAiLCAiRVVDSlAiLCAiRVhURU5ERURf
VU5JWF9DT0RFX1BBQ0tFRF9GT1JNQVRfRk9SX0pBUEFORVNFIiwgIkNTRVVDUEtERk1USkFQQU5F
U0UiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfSVNPXzIwMjJfSlAgICAgICA9IHsgIklTTy0yMDIyLUpQIiAsIDB9OworCisv
LyBUcmFkaXRpb25hbCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQklHNSAgICAgICAgICAgICA9IHsgIkJJRzUiLCAiQklH
LTUiLCAiQklHLUZJVkUiLCAiQklHNSIsICJCSUdGSVZFIiwgIkNOLUJJRzUiLCAiQ1NCSUc1IiAs
IDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNB
bGlhc2VzX0JJRzVfSEtTQ1MgICAgICAgPSB7ICJCSUc1LUhLU0NTIiwgIkJJRzUtSEtTQ1M6MjAw
NCIsICJCSUc1SEtTQ1MiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A5NTAgICAgICAgICAgICA9IHsgIkNQOTUwIiAsIDB9
OworCisvLyBLb3JlYW4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3Rr
OjptX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiAgICAgID0geyAiSVNPLTIwMjItS1IiLCAiQ1NJ
U08yMDIyS1IiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfQ1A5NDkgICAgICAgICAgICA9IHsgIkNQOTQ5IiwgIlVIQyIgLCAw
fTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19FVUNfS1IgICAgICAgICAgID0geyAiRVVDLUtSIiwgIkNTRVVDS1IiLCAwIH07CisKKy8v
IEFyYWJpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0lTT184ODU5XzYgICAgICAgPSB7ICJJU08tODg1OS02IiwgIkFSQUJJQyIsICJB
U01PLTcwOCIsICJFQ01BLTExNCIsICJJU08tSVItMTI3IiAsICJJU084ODU5LTYiLCAiSVNPXzg4
NTktNiIsICJJU09fODg1OS02OjE5ODciLCAiQ1NJU09MQVRJTkFSQUJJQyIgLCAwfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEy
NTYgICAgICAgICAgID0geyAiQ1AxMjU2IiwgIk1TLUFSQUIiLCAiV0lORE9XUy0xMjU2IiAsIDB9
OworCisvLyBIZWJyZXcKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3Rr
OjptX2NvZGVjQWxpYXNlc19JU09fODg1OV84ICAgICAgID0geyAiSVNPLTg4NTktOCIsICJIRUJS
RVciICwgIklTTy04ODU5LTgiLCAiSVNPLUlSLTEzOCIsICJJU084ODU5LTgiLCAiSVNPXzg4NTkt
OCIsICJJU09fODg1OS04OjE5ODgiLCAiQ1NJU09MQVRJTkhFQlJFVyIgLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTUg
ICAgICAgICAgID0geyAiQ1AxMjU1IiwgIk1TLUhFQlIiLCAiV0lORE9XUy0xMjU1IiAsIDB9Owor
CisvLyBHcmVlaworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0lTT184ODU5XzcgICAgICAgPSB7ICJJU08tODg1OS03IiwgIkVDTUEtMTE4
IiwgIkVMT1RfOTI4IiwgIkdSRUVLIiwgIkdSRUVLOCIsICJJU08tSVItMTI2IiwgIklTTzg4NTkt
NyIsICJJU09fODg1OS03IiwgIklTT184ODU5LTc6MTk4NyIsICJJU09fODg1OS03OjIwMDMiLCAi
Q1NJIiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0NQODY5ICAgICAgICAgICAgPSB7ICJDUDg2OSIsICI4NjkiLCAiQ1AtR1Ii
LCAiSUJNODY5IiwgIkNTSUJNODY5IiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MyAgICAgPSB7ICJXSU5E
T1dTLTEyNTMiLCAwIH07CisKKy8vIEN5cmlsbGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSAgICAgICA9IHsgIklT
Ty04ODU5LTUiLCAiQ1lSSUxMSUMiLCAiSVNPLUlSLTE0NCIsICJJU084ODU5LTUiLCAiSVNPXzg4
NTktNSIsICJJU09fODg1OS01OjE5ODgiLCAiQ1NJU09MQVRJTkNZUklMTElDIiAsIDB9OworVGV4
dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0tP
SThfUiAgICAgICAgICAgPSB7ICJLT0k4LVIiLCAiQ1NLT0k4UiIgLCAwfTsKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDg2NiAgICAg
ICAgICAgID0geyAiQ1A4NjYiLCAiODY2IiwgIklCTTg2NiIsICJDU0lCTTg2NiIgLCAwfTsKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19L
T0k4X1UgICAgICAgICAgID0geyAiS09JOC1VIiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0Fs
aWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MSAgICAgPSB7
ICJXSU5ET1dTLTEyNTEiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQyAgICAgID0geyAiTUFDQ1lSSUxMSUMi
ICwgMH07CisKKy8vIFRoYWkKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19DUDg3NCAgICAgICAgICAgID0geyAiQ1A4NzQiLCAiV0lORE9X
Uy04NzQiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfVElTXzYyMCAgICAgICAgICA9IHsgIlRJUy02MjAiLCAwfTsKKworLy8g
U2ltcGxpZmllZCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2Rl
Y0d0azo6bV9jb2RlY0FsaWFzZXNfR0JLICAgICAgICAgICAgICA9IHsgIkdCSyIgLCAwfTsKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19I
WiAgICAgICAgICAgICAgID0geyAiSFoiLCAiSFotR0ItMjMxMiIgLCAwfTsKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19HQjE4MDMwICAg
ICAgICAgID0geyAiR0IxODAzMCIgLCAwfTsKKworLy8gQ2VudHJhbCBFdXJvcGVhbgorVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184
ODU5XzIgICAgICAgPSB7ICJJU08tODg1OS0yIiwgIklTTy1JUi0xMDEiLCAiSVNPODg1OS0yIiwg
IklTT184ODU5LTIiLCAiSVNPXzg4NTktMjoxOTg3IiwgIkwyIiwgIkxBVElOMiIsICJDU0lTT0xB
VElOMiIgLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjpt
X2NvZGVjQWxpYXNlc19DUDEyNTAgICAgICAgICAgID0geyAiQ1AxMjUwIiwgIk1TLUVFIiwgIldJ
TkRPV1MtMTI1MCIgLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFID0geyAiTUFDQ0VOVFJBTEVVUk9Q
RSIgLCAwfTsKKworLy8gVmlldG5hbWVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBU
ZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1OCAgICAgICAgICAgPSB7ICJDUDEyNTgi
LCAiV0lORE9XUy0xMjU4IiAsIDB9OworCisvLyBUdXJraXNoCitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU0ICAgICAgICAgICA9
IHsgIkNQMTI1NCIsICJNUy1UVVJLIiwgIldJTkRPV1MtMTI1NCIgLCAwfTsKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV85
ICAgICAgID0geyAiSVNPLTg4NTktOSIsICJJU08tSVItMTQ4IiwgIklTTzg4NTktOSIsICJJU09f
ODg1OS05IiwgIklTT184ODU5LTk6MTk4OSIsICJMNSIsICJMQVRJTjUiLCAiQ1NJU09MQVRJTjUi
ICwgMH07CisKKy8vIEJhbHRpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NyAgICAgICAgICAgPSB7ICJDUDEyNTciLCAiV0lO
QkFMVFJJTSIsICJXSU5ET1dTLTEyNTciICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNCAgICAgICA9IHsgIklT
Ty04ODU5LTQiLCAiSVNPLUlSLTExMCIsICJJU084ODU5LTQiLCAiSVNPXzg4NTktNCIsICJJU09f
ODg1OS00OjE5ODgiLCAiTDQiLCAiTEFUSU40IiwgIkNTSVNPTEFUSU40IiAsIDB9OworCitnY29u
c3Rwb2ludGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkJhc2VDb2RlY0xpc3RbXSA9IHsg
CisgICAgLy8gVW5pY29kZQorICAgICZtX2NvZGVjQWxpYXNlc19VVEZfOCwKKworICAgIC8vIFdl
c3Rlcm4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMQorfTsKKworZ2NvbnN0cG9pbnRl
ciBjb25zdCBUZXh0Q29kZWNHdGs6Om1faWNvbnZFeHRlbmRlZENvZGVjTGlzdFtdID0gCit7Cisg
ICAgLy8gV2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19NQUNST01BTiwKKworICAgIC8vIEph
cGFuZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX1NISUZUX0pJUywKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfRVVDX0pQLAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9KUCwKKworICAgIC8vIFNp
bXBsaWZpZWQgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19CSUc1LAorICAgICZtX2NvZGVj
QWxpYXNlc19CSUc1X0hLU0NTLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDk1MCwKKworICAgIC8v
IEtvcmVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiwKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfQ1A5NDksCisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19LUiwKKworICAgIC8vIEFyYWJp
YworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV82LAorICAgICZtX2NvZGVjQWxpYXNlc19D
UDEyNTYsCisgICAgCisgICAgLy8gSGVicmV3CisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5
XzgsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NSwKKyAgICAKKyAgICAvLyBHcmVlaworICAg
ICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV83LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2OSwK
KyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzLAorICAgIAorICAgIC8vIEN5cmlsbGlj
CisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUsCisgICAgJm1fY29kZWNBbGlhc2VzX0tP
SThfUiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4NjYsCisgICAgJm1fY29kZWNBbGlhc2VzX0tP
SThfVSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxLAorICAgICZtX2NvZGVjQWxp
YXNlc19NQUNDWVJJTExJQywKKyAgICAKKyAgICAvLyBUaGFpCisgICAgJm1fY29kZWNBbGlhc2Vz
X0NQODc0LAorICAgICZtX2NvZGVjQWxpYXNlc19USVNfNjIwLAorICAgIAorICAgIC8vIFRyYWRp
dGlvbmFsIENoaW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0JLLAorICAgICZtX2NvZGVjQWxp
YXNlc19IWiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0IxODAzMCwKKyAgICAKKyAgICAvLyBDZW50
cmFsIEV1cm9wZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIsCisgICAgJm1fY29k
ZWNBbGlhc2VzX0NQMTI1MCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSwK
KyAgICAKKyAgICAvLyBWaWV0bmFtZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1OCwKKyAg
ICAKKyAgICAvLyBUdXJraXNoCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NCwKKyAgICAmbV9j
b2RlY0FsaWFzZXNfSVNPXzg4NTlfOSwKKyAgICAKKyAgICAvLyBCYWx0aWMKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfQ1AxMjU3LAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV80Cit9OworCisK
K2NvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OworICAgIAorCitzdGF0
aWMgYXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIHRvbyBu
b2lzeSBpZiBlYWNoIFVURi04IGNvZGVjIGNyZWF0aW9uIGlzIGxvZ2dlZAorICAgIC8vIGlmIChz
dHJjbXAoZW5jb2RpbmcubmFtZSgpLCAiVVRGLTgiKSkKKyAgICAvLyAgICBMT0coVGV4dENvbnZl
cnNpb24sICJjcmVhdGluZyBuZXcgdGV4dCBjb2RlYyBmb3IgZW5jb2RpbmcgbmFtZSAlcyIsIGVu
Y29kaW5nLm5hbWUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiBhdXRvX3B0cjxUZXh0Q29kZWM+
KG5ldyBUZXh0Q29kZWNHdGsoZW5jb2RpbmcpKTsKK30KKworZ2Jvb2xlYW4gVGV4dENvZGVjR3Rr
Ojppc0VuY29kaW5nQXZhaWxhYmxlKGNvbnN0IGdjaGFyKiBlbmNOYW1lKQoreworICAgIEdJQ29u
diB0ZXN0ZXI7CisgICAgLy8gdGVzdCBkZWNvZGluZworICAgIHRlc3RlciA9IGdfaWNvbnZfb3Bl
bihtX2ludGVybmFsRW5jb2RpbmdOYW1lLCBlbmNOYW1lKTsKKyAgICBpZiAodGVzdGVyID09IChH
SUNvbnYpLTEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCIlcyBub3QgZGVjb2RhYmxlID0+IG5vdCBh
dmFpbGFibGUhIiwgZW5jTmFtZSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBnX2ljb252X2Nsb3NlKHRlc3Rlcik7CisgICAgICAgIC8vIHRlc3QgZW5jb2Rp
bmcKKyAgICAgICAgdGVzdGVyID0gZ19pY29udl9vcGVuKGVuY05hbWUsIG1faW50ZXJuYWxFbmNv
ZGluZ05hbWUpOworICAgICAgICBpZiAodGVzdGVyID09IChHSUNvbnYpLTEpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiJXMgbm90IGVuY29kYWJsZSA9PiBub3QgYXZhaWxhYmxlISIsIGVuY05h
bWUpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBleHRlbmRlZCkKK3sK
KyAgICBjb25zdCB2b2lkKiBjb25zdCogZW5jb2RpbmdMaXN0OworICAgIHVuc2lnbmVkIGludCBs
aXN0TGVuZ3RoID0gMDsKKyAgICBpZiAoZXh0ZW5kZWQpIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0
ID0gbV9pY29udkV4dGVuZGVkQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9m
KG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdCkvc2l6ZW9mKGdwb2ludGVyKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252QmFzZUNvZGVjTGlzdDsKKyAgICAgICAg
bGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252QmFzZUNvZGVjTGlzdCkvc2l6ZW9mKGdwb2ludGVy
KTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7
ICsraSkgeworICAgICAgICBjb2RlY0FsaWFzTGlzdCAqY29kZWNBbGlhc2VzID0gc3RhdGljX2Nh
c3Q8Y29kZWNBbGlhc0xpc3QqPihlbmNvZGluZ0xpc3RbaV0pOworICAgICAgICBpbnQgY29kZWND
b3VudCA9IC0xOworICAgICAgICBjb25zdCBnY2hhciAqY2Fub25pY2FsTmFtZSwgKmN1cnJlbnRB
bGlhczsKKyAgICAgICAgYm9vbCBjYW5vbmljYWxBdmFpbGFibGUgPSB0cnVlOworICAgICAgICAK
KyAgICAgICAgLy8gZm9yIGVhY2ggb2YgdGhlIGFsaWFzIGxpc3RzOgorICAgICAgICAvLyBiYWls
IG91dCBpZiBjYW5vbmljYWwgaXMgbm90IGF2YWlsYWJsZSwKKyAgICAgICAgLy8gdGhlbiBjb250
aW51ZSB0ZXN0aW5nIGVhY2ggYWxpYXMsIAorICAgICAgICAvLyBpZiBhdmFpbGFibGUsIGFkZCBp
dCB0byB0aGUgbGlzdCwgbWFwcGluZyBpdCB0byBpdHMgY2Fub25pY2FsIG5hbWUKKworICAgICAg
ICB3aGlsZSAoKGN1cnJlbnRBbGlhcyA9ICgqY29kZWNBbGlhc2VzKVsrK2NvZGVjQ291bnRdKSAm
JiBjYW5vbmljYWxBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIGJvb2wgY3VycmVudEF2YWlsYWJs
ZSA9IGlzRW5jb2RpbmdBdmFpbGFibGUoY3VycmVudEFsaWFzKTsKKworICAgICAgICAgICAgaWYg
KGNvZGVjQ291bnQgPT0gMCAmJiBjdXJyZW50QXZhaWxhYmxlKSB7CisgICAgICAgICAgICAgICAg
Y2Fub25pY2FsTmFtZSA9IGN1cnJlbnRBbGlhczsKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxB
dmFpbGFibGUgPSB0cnVlOworICAgICAgICAgICAgICAgIExPR19WRVJCT1NFKFRleHRDb252ZXJz
aW9uLCAicmVnaXN0ZXJpbmcgZW5jb2RpbmcgY2Fub25pY2FsICVzIiwgY2Fub25pY2FsTmFtZSk7
CisgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGNhbm9uaWNhbE5hbWUsIGNhbm9uaWNhbE5hbWUp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlY0NvdW50ID09IDAgJiYgIWN1cnJlbnRBdmFp
bGFibGUpIHsKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxBdmFpbGFibGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY29kZWNDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShjdXJyZW50QWxpYXMpKSB7CisgICAgICAgICAgICAgICAg
ICAgIExPR19WRVJCT1NFKFRleHRDb252ZXJzaW9uLCAicmVnaXN0ZXJpbmcgZW5jb2RpbmcgbmFt
ZSBhbGlhcyAlcyB0byBjYW5vbmljYWwgJXMiLCBjdXJyZW50QWxpYXMsIGNhbm9uaWNhbE5hbWUp
OworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXIoY3VycmVudEFsaWFzLCBjYW5vbmljYWxO
YW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
IH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCogY29uc3Qq
IGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlzdExlbmd0aCA9IDA7CisgICAgaWYg
KGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRlZENvZGVj
TGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRDb2RlY0xp
c3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0
ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9p
Y29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29kZWNB
bGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4oZW5j
b2RpbmdMaXN0W2ldKTsKKyAgICAgICAgLy8gYnkgY29udmVudGlvbiwgdGhlIGZpcnN0ICJhbGlh
cyIgc2hvdWxkIGJlIHRoZSBjYW5vbmljYWwgbmFtZSwgc2VlIHRoZSBkZWZpbml0aW9uIG9mIHRo
ZSBhbGlhcyBsaXN0cyAKKyAgICAgICAgY29uc3QgZ2NoYXIgKmNvZGVjTmFtZSA9ICgqY29kZWNB
bGlhc2VzKVswXTsKKyAgICAgICAgaWYgKGlzRW5jb2RpbmdBdmFpbGFibGUoY29kZWNOYW1lKSkK
KyAgICAgICAgICAgIHJlZ2lzdHJhcihjb2RlY05hbWUsIG5ld1RleHRDb2RlY0d0aywgMCk7Cisg
ICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdGVyRW5jb2RpbmdO
YW1lcyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
QmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdGVy
Q29kZWNzKHJlZ2lzdHJhciwgZmFsc2UpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0
ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikK
K3sKKyAgICByZWdpc3RlckVuY29kaW5nTmFtZXMocmVnaXN0cmFyLCB0cnVlKTsKK30KKwordm9p
ZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
IHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckNvZGVjcyhyZWdpc3RyYXIsIHRydWUpOworfQor
CitUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKKyAgICAsIG1fbnVtQnVmZmVyZWRCeXRlcygw
KQorICAgICwgbV9pY29udkRlY29kZXIoKEdJQ29udikgLTEpCisgICAgLCBtX2ljb252RW5jb2Rl
cigoR0lDb252KSAtMSkKK3sKK30KKworVGV4dENvZGVjR3RrOjp+VGV4dENvZGVjR3RrKCkKK3sK
KyAgICByZWxlYXNlSUNvbnYoKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlbGVhc2VJQ29u
digpIGNvbnN0Cit7CisgICAgaWYgKG1faWNvbnZEZWNvZGVyICE9IChHSUNvbnYpIC0xKSB7Cisg
ICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkRlY29kZXIpOworICAgICAgICBtX2ljb252RGVj
b2RlciA9IChHSUNvbnYpIC0xOworICAgIH0KKyAgICBpZiAobV9pY29udkVuY29kZXIgIT0gKEdJ
Q29udikgLTEpIHsKKyAgICAgICAgZ19pY29udl9jbG9zZShtX2ljb252RW5jb2Rlcik7CisgICAg
ICAgIG1faWNvbnZFbmNvZGVyID0gKEdJQ29udikgLTE7CisgICAgfQorfQorCit2b2lkIFRleHRD
b2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pY29u
dkRlY29kZXIgPT0gKEdJQ29udikgLTEpOworCisgICAgbV9pY29udkRlY29kZXIgPSBnX2ljb252
X29wZW4obV9pbnRlcm5hbEVuY29kaW5nTmFtZSwgbV9lbmNvZGluZy5uYW1lKCkpOworfQorCit2
b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9pY29udkVuY29kZXIgPT0gKEdJQ29udikgLTEpOworCisgICAgbV9pY29udkVuY29kZXIg
PSBnX2ljb252X29wZW4obV9lbmNvZGluZy5uYW1lKCksIG1faW50ZXJuYWxFbmNvZGluZ05hbWUp
OworfQorCitTdHJpbmcgVGV4dENvZGVjR3RrOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMsIHNp
emVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9y
KQoreworICAgIC8vIEdldCBhIGNvbnZlcnRlciBmb3IgdGhlIHBhc3NlZC1pbiBlbmNvZGluZy4K
KyAgICBpZiAobV9pY29udkRlY29kZXIgPT0gKEdJQ29udikgLTEpIHsKKyAgICAgICAgY3JlYXRl
SUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2ljb252RGVjb2RlciAhPSAoR0lDb252
KSAtMSk7CisgICAgICAgIGlmIChtX2ljb252RGVjb2RlciA9PSAoR0lDb252KSAtMSkgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJlcnJvciBjcmVhdGluZyBJQ29udiBlbmNvZGVyIGV2ZW4gdGhv
dWdoIGVuY29kaW5nIHdhcyBpbiB0YWJsZSIpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJy
ID0gMDsKKyAgICBVQ2hhciAqYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGdfY29u
dmVydF93aXRoX2ljb252KGJ5dGVzLCBsZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAwLCAmY291bnQs
ICZlcnIpKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lDb252IGNvbnZl
cnNpb24gZXJyb3IiKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZl
Y3RvcjxVQ2hhcj4gcmVzdWx0OworCisgICAgcmVzdWx0LmFwcGVuZChidWZmZXIsIGNvdW50IC8g
c2l6ZW9mKFVDaGFyKSk7CisKKyAgICBnX2ZyZWUoYnVmZmVyKTsKKworICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KHJlc3VsdCk7Cit9CisKK0NTdHJpbmcgVGV4dENvZGVjR3RrOjplbmNvZGUoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcg
aGFuZGxpbmcpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAg
IGlmIChtX2ljb252RW5jb2RlciA9PSAoR0lDb252KSAtMSkKKyAgICAgICAgY3JlYXRlSUNvbnZF
bmNvZGVyKCk7CisgICAgaWYgKG1faWNvbnZFbmNvZGVyID09IChHSUNvbnYpIC0xKQorICAgICAg
ICByZXR1cm4gQ1N0cmluZygpOworCisgICAgc2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJy
ID0gMDsKKyAgICBjaGFyICpidWZmZXIgPSBnX2NvbnZlcnRfd2l0aF9pY29udihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwg
bV9pY29udkVuY29kZXIsIDAsICZjb3VudCwgJmVycik7CisgICAgaWYgKGVycikgeworICAgICAg
ICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yIik7CisgICAgICAgIHJldHVybiBD
U3RyaW5nKCk7CisgICAgfQorCisgICAgQ1N0cmluZyByZXN1bHQgPSBDU3RyaW5nKGJ1ZmZlciwg
Y291bnQpOworCisgICAgZ19mcmVlKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENvZGVjR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q29kZWNHdGsuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBv
cC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNo
PgorICogQ29weXJpZ2h0IChDKSAyMDA4IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0
dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUZXh0Q29kZWNHVEtf
aAorI2RlZmluZSBUZXh0Q29kZWNHVEtfaAorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVk
ZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRDb2RlY0d0ayA6IHB1YmxpYyBUZXh0Q29kZWMgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1l
cyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJh
c2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgICAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7
CisKKyAgICAgICAgVGV4dENvZGVjR3RrKGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgICAgICB2
aXJ0dWFsIH5UZXh0Q29kZWNHdGsoKTsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUo
Y29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3Is
IGJvb2wmIHNhd0Vycm9yKTsKKyAgICAgICAgdmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBV
Q2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkRlY29kZXIoKSBjb25zdDsKKyAgICAgICAgdm9p
ZCBjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCByZWxlYXNlSUNvbnYo
KSBjb25zdDsKKworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5j
b2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBleHRlbmRlZCk7ICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lz
dHJhciwgYm9vbCBleHRlbmRlZCk7CisgICAgICAgIHN0YXRpYyBnYm9vbGVhbiBpc0VuY29kaW5n
QXZhaWxhYmxlKGNvbnN0IGdjaGFyKik7CisKKyAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rp
bmc7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5zaWdu
ZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZXNbMTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xlIG11
bHRpLWJ5dGUgY2hhcmFjdGVyICAgICAgICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29u
dkRlY29kZXI7CisgICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworCisgICAg
ICAgIHN0YXRpYyBjb25zdCBnY2hhciogbV9pbnRlcm5hbEVuY29kaW5nTmFtZTsKKworICAgICAg
ICB0eXBlZGVmIGNvbnN0IGdjaGFyKiBjb25zdCBjb2RlY0FsaWFzTGlzdFtdOworCisgICAgICAg
IC8vIFVuaWNvZGUKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2Vz
X1VURl84OworCisgICAgICAgIC8vIFdlc3Rlcm4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5XzE7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19NQUNST01BTjsKKworICAgICAgICAvLyBKYXBhbmVzZQorICAg
ICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTOworICAg
ICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfRVVDX0pQOworICAgICAg
ICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlA7CisKKyAg
ICAgICAgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfQklHNTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1f
Y29kZWNBbGlhc2VzX0JJRzVfSEtTQ1M7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19DUDk1MDsKKworICAgICAgICAvLyBLb3JlYW4KKyAgICAgICAgc3RhdGlj
IGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSOworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A5NDk7CisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19FVUNfS1I7CisKKyAgICAgICAgLy8gQXJhYmlj
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV82
OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU2Owor
CisgICAgICAgIC8vIEhlYnJldworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2Rl
Y0FsaWFzZXNfSVNPXzg4NTlfODsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0NQMTI1NTsKKworICAgICAgICAvLyBHcmVlaworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNzsKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQODY5OworICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzOworCisgICAgICAgIC8vIEN5cmls
bGljCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1
OV81OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfS09JOF9S
OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NjY7Cisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19LT0k4X1U7CisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTE7Cisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQzsK
KworICAgICAgICAvLyBUaGFpCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19DUDg3NDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX1RJU182MjA7CisKKyAgICAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlCisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19HQks7CisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19IWjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0dCMTgwMzA7CisKKyAgICAgICAgLy8gQ2VudHJhbCBFdXJv
cGVhbgorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4
NTlfMjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1
MDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ0NFTlRS
QUxFVVJPUEU7CisKKyAgICAgICAgLy8gVmlldG5hbWVzZQorICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU4OworCisgICAgICAgIC8vIFR1cmtpc2gKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NDsKKyAgICAg
ICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5Xzk7CisKKyAg
ICAgICAgLy8gQmFsdGljCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19DUDEyNTc7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNl
c19JU09fODg1OV80OworCisgICAgICAgIHN0YXRpYyBnY29uc3Rwb2ludGVyIGNvbnN0IG1faWNv
bnZCYXNlQ29kZWNMaXN0W107CisgICAgICAgIHN0YXRpYyBnY29uc3Rwb2ludGVyIGNvbnN0IG1f
aWNvbnZFeHRlbmRlZENvZGVjTGlzdFtdOworCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVGV4dENvZGVjR1RLX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23263</attachid>
            <date>2008-09-08 10:08:22 -0700</date>
            <delta_ts>2008-11-20 08:11:30 -0800</delta_ts>
            <desc>Replacing ICU with glib</desc>
            <filename>replace_icu_with_glib.patch</filename>
            <type>text/plain</type>
            <size>69316</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM2MjY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMDkt
MDIgIERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dU
S10gSW1wbGVtZW50IFVuaWNvZGUgZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAg
QWRkaW5nIG9wdGlvbnMgZm9yIC0td2l0aC11bmljb2RlLWJhY2tlbmQ9aWN1fGdsaWIKKyAgICAg
ICAgYW5kIGNoZWNraW5nIGZvciBwYW5nbyB2ZXJzaW9uID49IDEuMjEuMCBpZiBnbGliIGJhY2tl
bmQKKyAgICAgICAgaXMgc2VsZWN0ZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMDgtMDktMDQgIE1hcmNvIEJhcmlzaW9uZSAgPG1h
cmNvLmJhcmlzaW9uZUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCkBAIC01MjksNyArNTQzLDcgQEAKIAogICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgogCi0yMDA4LTAzLTA5ICBK/HJnIEJpbGxldGVyICA8akBiaXRyb24uY2g+CisyMDA4LTAzLTA5
ICBKw7xyZyBCaWxsZXRlciAgPGpAYml0cm9uLmNoPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFs
cCBUb2tlci4KIApJbmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gR05VbWFrZWZp
bGUuYW0JKHJldmlzaW9uIDM2MjY4KQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTUwLDggKzUwLDE1IEBAIElETF9CSU5ESU5HUyA6PQogIyBHbG9iYWwgZmxhZ3MgdG8gQ1BQ
CiBnbG9iYWxfY3BwZmxhZ3MgOj0KIAoraWYgVVNFX0lDVV9VTklDT0RFCiBnbG9iYWxfY3BwZmxh
Z3MgKz0gXAogCS1EV1RGX1VTRV9JQ1VfVU5JQ09ERT0xCitlbmRpZgorCitpZiBVU0VfR0xJQl9V
TklDT0RFCitnbG9iYWxfY3BwZmxhZ3MgKz0gXAorCS1EV1RGX1VTRV9HTElCX1VOSUNPREU9MQor
ZW5kaWYKIAogIyBEZWZhdWx0IGNvbXBpbGVyIGZsYWdzCiBnbG9iYWxfY2ZsYWdzIDo9IFwKSW5k
ZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDM2
MjY4KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTggKzE3NCwxOCBA
QCBmaQogIyBkZXRlcm1pbmUgdGhlIFVuaWNvZGUgYmFja2VuZAogQUNfTVNHX0NIRUNLSU5HKFt0
aGUgVW5pY29kZSBiYWNrZW5kIHRvIHVzZV0pCiBBQ19BUkdfV0lUSCh1bmljb2RlX2JhY2tlbmQs
Ci0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXVuaWNvZGUtYmFja2VuZD1APDpA
aWN1QDo+QF0sCisgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXVuaWNvZGUtYmFj
a2VuZD1APDpAaWN1L2dsaWJAOj5AXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTZWxl
Y3QgVW5pY29kZSBiYWNrZW5kIFtkZWZhdWx0PWljdV1dKSwKLSAgICAgICAgICAgIFtdLFt1bmlj
b2RlX2JhY2tlbmQ9ImljdSJdKQorICAgICAgICAgICAgW10sW3dpdGhfdW5pY29kZV9iYWNrZW5k
PSJpY3UiXSkKIAotY2FzZSAiJHVuaWNvZGVfYmFja2VuZCIgaW4KLSAgICAgaWN1KSA7OwotICAg
ICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdS5d
KSA7OworY2FzZSAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiBpbgorICAgICBpY3V8Z2xpYikgOzsK
KyAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIFVuaWNvZGUgYmFja2VuZDogbXVzdCBiZSBp
Y3Ugb3IgZ2xpYi5dKSA7OwogZXNhYwogCi1BQ19NU0dfUkVTVUxUKFskdW5pY29kZV9iYWNrZW5k
XSkKK0FDX01TR19SRVNVTFQoWyR3aXRoX3VuaWNvZGVfYmFja2VuZF0pCiAKLWlmIHRlc3QgIiR1
bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4KK2lmIHRlc3QgIiR3aXRoX3VuaWNvZGVfYmFj
a2VuZCIgPSAiaWN1IjsgdGhlbgogCWlmIHRlc3QgIiRvc19kYXJ3aW4iID0gInllcyI7IHRoZW4K
IAkJVU5JQ09ERV9DRkxBR1M9Ii1JXCQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9pY3UgLUlcJChz
cmNkaXIpL1dlYkNvcmUvaWN1IgogCQlVTklDT0RFX0xJQlM9Ii1saWN1Y29yZSIKQEAgLTIwNiw2
ICsyMDYsMTAgQEAgaWYgdGVzdCAiJHVuaWNvZGVfYmFja2VuZCIgPSAiaWN1IjsgdGhlbgogCWZp
CiBmaQogCitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiOyB0aGVuCisg
ICBQS0dfQ0hFQ0tfTU9EVUxFUyhbVU5JQ09ERV0sIFtnbGliLTIuMCBwYW5nbyA+PSAxLjIxLjBd
KQorZmkKKwogQUNfU1VCU1QoW1VOSUNPREVfQ0ZMQUdTXSkKIEFDX1NVQlNUKFtVTklDT0RFX0xJ
QlNdKQogCkBAIC01NzYsNiArNTgwLDEwIEBAIEFNX0NPTkRJVElPTkFMKFtUQVJHRVRfV0lOMzJd
LCBbdGVzdCAiJHcKIEFNX0NPTkRJVElPTkFMKFtUQVJHRVRfUVVBUlRaXSwgW3Rlc3QgIiR3aXRo
X3RhcmdldCIgPSAicXVhcnR6Il0pCiBBTV9DT05ESVRJT05BTChbVEFSR0VUX0RJUkVDVEZCXSwg
W3Rlc3QgIiR3aXRoX3RhcmdldCIgPSAiZGlyZWN0ZmIiXSkKIAorIyBVbmljb2RlIGJhY2tlbmQg
Y29uZGl0aW9uYWxzCitBTV9DT05ESVRJT05BTChbVVNFX0lDVV9VTklDT0RFXSwgW3Rlc3QgIiR3
aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiaWN1Il0pCitBTV9DT05ESVRJT05BTChbVVNFX0dMSUJf
VU5JQ09ERV0sIFt0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiXSkKKwogIyBI
VFRQIGJhY2tlbmQgY29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbVVNFX0NVUkxdLCBbdGVz
dCAiJHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJjdXJsIl0pCiBBTV9DT05ESVRJT05BTChbVVNFX1NP
VVBdLCBbdGVzdCAiJHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJzb3VwIl0pCkBAIC02MjEsNyArNjI5
LDcgQEAgV2ViS2l0IHdhcyBjb25maWd1cmVkIHdpdGggdGhlIGZvbGxvd2luZwogQnVpbGQgY29u
ZmlndXJhdGlvbjoKICBFbmFibGUgZGVidWdnaW5nIChzbG93KSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICRlbmFibGVfZGVidWcKICBDb2RlIGNvdmVyYWdlIHN1cHBvcnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY292ZXJhZ2UKLSBVbmlj
b2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR1
bmljb2RlX2JhY2tlbmQKKyBVbmljb2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICR3aXRoX3VuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFja2VuZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfaHR0cF9i
YWNrZW5kCiAgRm9udCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAkd2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRv
ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2MjY4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDgtMDktMDIgIERvbWluaWsgUsO2
dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVu
aWNvZGUgZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgT3JpZ2luYWwgcGF0Y2gg
YnkgSsO8cmcgQmlsbGV0ZXIgYW5kIE5haWVtIFNoYWlrLgorICAgICAgICBJbXBsZW1lbnRpbmcg
VW5pY29kZSBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIGdsaWIuCisKKyAgICAgICAgKiB3dGYvdW5p
Y29kZS9Vbmljb2RlLmg6CisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYjogQWRkZWQuCisgICAg
ICAgICogd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Zm9sZENhc2UpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjp0b0xvd2VyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dG9VcHBl
cik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvVGl0bGVDYXNlKToKKyAgICAgICAgKFdURjo6
VW5pY29kZTo6aXNBcmFiaWNDaGFyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNGb3JtYXRD
aGFyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNTZXBhcmF0b3JTcGFjZSk6CisgICAgICAg
IChXVEY6OlVuaWNvZGU6OmlzUHJpbnRhYmxlQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6
OmlzRGlnaXQpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1B1bmN0KToKKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6bWlycm9yZWRDaGFyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Y2F0ZWdv
cnkpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24pOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjppc0xvd2VyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6ZGlnaXRWYWx1ZSk6Cisg
ICAgICAgIChXVEY6OlVuaWNvZGU6OmNvbWJpbmluZ0NsYXNzKToKKyAgICAgICAgKFdURjo6VW5p
Y29kZTo6ZGVjb21wb3NpdGlvblR5cGUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp1bWVtY2Fz
ZWNtcCk6CisKIDIwMDgtMDktMDggIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
d3RmL3VuaWNvZGUvVW5pY29kZS5oCShyZXZpc2lvbiAzNjI2OCkKKysrIEphdmFTY3JpcHRDb3Jl
L3d0Zi91bmljb2RlL1VuaWNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAog
I2luY2x1ZGUgInF0NC9Vbmljb2RlUXQ0LmgiCiAjZWxpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaD4KKyNlbGlmIFVTRShHTElCX1VOSUNP
REUpCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oPgogI2Vsc2UKICNl
cnJvciAiVW5rbm93biBVbmljb2RlIGltcGxlbWVudGF0aW9uIgogI2VuZGlmCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCShyZXZpc2lvbiAw
KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU3NyBAQAorLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQor
LyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHly
aWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHly
aWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgS0pTX1VOSUNPREVfR0xJQl9ICisjZGVmaW5lIEtKU19VTklD
T0RFX0dMSUJfSAorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cGFuZ28v
cGFuZ28uaD4KKwordHlwZWRlZiB1aW50MTZfdCBVQ2hhcjsKK3R5cGVkZWYgaW50MzJfdCBVQ2hh
cjMyOworCisvLyBjb3BpZWQgZnJvbSBHTGliCisKKy8qIFRhYmxlIG9mIGNhc2Vmb2xkaW5nIGNh
c2VzIHRoYXQgY2FuJ3QgYmUgZGVyaXZlZCBieSBsb3dlcmNhc2luZworICovCitzdGF0aWMgY29u
c3Qgc3RydWN0IHsKKyAgZ3VpbnQxNiBjaDsKKyAgZ2NoYXIgZGF0YVs3XTsKK30gY2FzZWZvbGRf
dGFibGVbXSA9IHsKKyAgeyAweDAwYjUsICJceGNlXHhiYyIgfSwKKyAgeyAweDAwZGYsICJceDcz
XHg3MyIgfSwKKyAgeyAweDAxMzAsICJceDY5XHhjY1x4ODciIH0sCisgIHsgMHgwMTQ5LCAiXHhj
YVx4YmNceDZlIiB9LAorICB7IDB4MDE3ZiwgIlx4NzMiIH0sCisgIHsgMHgwMWYwLCAiXHg2YVx4
Y2NceDhjIiB9LAorICB7IDB4MDM0NSwgIlx4Y2VceGI5IiB9LAorICB7IDB4MDM5MCwgIlx4Y2Vc
eGI5XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgeyAweDAzYjAsICJceGNmXHg4NVx4Y2NceDg4XHhj
Y1x4ODEiIH0sCisgIHsgMHgwM2MyLCAiXHhjZlx4ODMiIH0sCisgIHsgMHgwM2QwLCAiXHhjZVx4
YjIiIH0sCisgIHsgMHgwM2QxLCAiXHhjZVx4YjgiIH0sCisgIHsgMHgwM2Q1LCAiXHhjZlx4ODYi
IH0sCisgIHsgMHgwM2Q2LCAiXHhjZlx4ODAiIH0sCisgIHsgMHgwM2YwLCAiXHhjZVx4YmEiIH0s
CisgIHsgMHgwM2YxLCAiXHhjZlx4ODEiIH0sCisgIHsgMHgwM2Y1LCAiXHhjZVx4YjUiIH0sCisg
IHsgMHgwNTg3LCAiXHhkNVx4YTVceGQ2XHg4MiIgfSwKKyAgeyAweDFlOTYsICJceDY4XHhjY1x4
YjEiIH0sCisgIHsgMHgxZTk3LCAiXHg3NFx4Y2NceDg4IiB9LAorICB7IDB4MWU5OCwgIlx4Nzdc
eGNjXHg4YSIgfSwKKyAgeyAweDFlOTksICJceDc5XHhjY1x4OGEiIH0sCisgIHsgMHgxZTlhLCAi
XHg2MVx4Y2FceGJlIiB9LAorICB7IDB4MWU5YiwgIlx4ZTFceGI5XHhhMSIgfSwKKyAgeyAweDFm
NTAsICJceGNmXHg4NVx4Y2NceDkzIiB9LAorICB7IDB4MWY1MiwgIlx4Y2ZceDg1XHhjY1x4OTNc
eGNjXHg4MCIgfSwKKyAgeyAweDFmNTQsICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4ODEiIH0sCisg
IHsgMHgxZjU2LCAiXHhjZlx4ODVceGNjXHg5M1x4Y2RceDgyIiB9LAorICB7IDB4MWY4MCwgIlx4
ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4MWY4MSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5
IiB9LAorICB7IDB4MWY4MiwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4Mywg
Ilx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7IDB4MWY4NCwgIlx4ZTFceGJjXHg4NFx4Y2Vc
eGI5IiB9LAorICB7IDB4MWY4NSwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4
NiwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAorICB7IDB4MWY4NywgIlx4ZTFceGJjXHg4N1x4
Y2VceGI5IiB9LAorICB7IDB4MWY4OCwgIlx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAorICB7IDB4
MWY4OSwgIlx4ZTFceGJjXHg4MVx4Y2VceGI5IiB9LAorICB7IDB4MWY4YSwgIlx4ZTFceGJjXHg4
Mlx4Y2VceGI5IiB9LAorICB7IDB4MWY4YiwgIlx4ZTFceGJjXHg4M1x4Y2VceGI5IiB9LAorICB7
IDB4MWY4YywgIlx4ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZCwgIlx4ZTFceGJj
XHg4NVx4Y2VceGI5IiB9LAorICB7IDB4MWY4ZSwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAor
ICB7IDB4MWY4ZiwgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICB7IDB4MWY5MCwgIlx4ZTFc
eGJjXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5MSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9
LAorICB7IDB4MWY5MiwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWY5MywgIlx4
ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWY5NCwgIlx4ZTFceGJjXHhhNFx4Y2VceGI5
IiB9LAorICB7IDB4MWY5NSwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWY5Niwg
Ilx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWY5NywgIlx4ZTFceGJjXHhhN1x4Y2Vc
eGI5IiB9LAorICB7IDB4MWY5OCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWY5
OSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWY5YSwgIlx4ZTFceGJjXHhhMlx4
Y2VceGI5IiB9LAorICB7IDB4MWY5YiwgIlx4ZTFceGJjXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4
MWY5YywgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZCwgIlx4ZTFceGJjXHhh
NVx4Y2VceGI5IiB9LAorICB7IDB4MWY5ZSwgIlx4ZTFceGJjXHhhNlx4Y2VceGI5IiB9LAorICB7
IDB4MWY5ZiwgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZhMCwgIlx4ZTFceGJk
XHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWZhMSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAor
ICB7IDB4MWZhMiwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAorICB7IDB4MWZhMywgIlx4ZTFc
eGJkXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZhNCwgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9
LAorICB7IDB4MWZhNSwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9LAorICB7IDB4MWZhNiwgIlx4
ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4MWZhNywgIlx4ZTFceGJkXHhhN1x4Y2VceGI5
IiB9LAorICB7IDB4MWZhOCwgIlx4ZTFceGJkXHhhMFx4Y2VceGI5IiB9LAorICB7IDB4MWZhOSwg
Ilx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICB7IDB4MWZhYSwgIlx4ZTFceGJkXHhhMlx4Y2Vc
eGI5IiB9LAorICB7IDB4MWZhYiwgIlx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICB7IDB4MWZh
YywgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICB7IDB4MWZhZCwgIlx4ZTFceGJkXHhhNVx4
Y2VceGI5IiB9LAorICB7IDB4MWZhZSwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICB7IDB4
MWZhZiwgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9LAorICB7IDB4MWZiMiwgIlx4ZTFceGJkXHhi
MFx4Y2VceGI5IiB9LAorICB7IDB4MWZiMywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgIHsgMHgx
ZmI0LCAiXHhjZVx4YWNceGNlXHhiOSIgfSwKKyAgeyAweDFmYjYsICJceGNlXHhiMVx4Y2RceDgy
IiB9LAorICB7IDB4MWZiNywgIlx4Y2VceGIxXHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFm
YmMsICJceGNlXHhiMVx4Y2VceGI5IiB9LAorICB7IDB4MWZiZSwgIlx4Y2VceGI5IiB9LAorICB7
IDB4MWZjMiwgIlx4ZTFceGJkXHhiNFx4Y2VceGI5IiB9LAorICB7IDB4MWZjMywgIlx4Y2VceGI3
XHhjZVx4YjkiIH0sCisgIHsgMHgxZmM0LCAiXHhjZVx4YWVceGNlXHhiOSIgfSwKKyAgeyAweDFm
YzYsICJceGNlXHhiN1x4Y2RceDgyIiB9LAorICB7IDB4MWZjNywgIlx4Y2VceGI3XHhjZFx4ODJc
eGNlXHhiOSIgfSwKKyAgeyAweDFmY2MsICJceGNlXHhiN1x4Y2VceGI5IiB9LAorICB7IDB4MWZk
MiwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MCIgfSwKKyAgeyAweDFmZDMsICJceGNlXHhiOVx4
Y2NceDg4XHhjY1x4ODEiIH0sCisgIHsgMHgxZmQ2LCAiXHhjZVx4YjlceGNkXHg4MiIgfSwKKyAg
eyAweDFmZDcsICJceGNlXHhiOVx4Y2NceDg4XHhjZFx4ODIiIH0sCisgIHsgMHgxZmUyLCAiXHhj
Zlx4ODVceGNjXHg4OFx4Y2NceDgwIiB9LAorICB7IDB4MWZlMywgIlx4Y2ZceDg1XHhjY1x4ODhc
eGNjXHg4MSIgfSwKKyAgeyAweDFmZTQsICJceGNmXHg4MVx4Y2NceDkzIiB9LAorICB7IDB4MWZl
NiwgIlx4Y2ZceDg1XHhjZFx4ODIiIH0sCisgIHsgMHgxZmU3LCAiXHhjZlx4ODVceGNjXHg4OFx4
Y2RceDgyIiB9LAorICB7IDB4MWZmMiwgIlx4ZTFceGJkXHhiY1x4Y2VceGI5IiB9LAorICB7IDB4
MWZmMywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0sCisgIHsgMHgxZmY0LCAiXHhjZlx4OGVceGNlXHhi
OSIgfSwKKyAgeyAweDFmZjYsICJceGNmXHg4OVx4Y2RceDgyIiB9LAorICB7IDB4MWZmNywgIlx4
Y2ZceDg5XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgeyAweDFmZmMsICJceGNmXHg4OVx4Y2VceGI5
IiB9LAorICB7IDB4MjE2MCwgIlx4ZTJceDg1XHhiMCIgfSwKKyAgeyAweDIxNjEsICJceGUyXHg4
NVx4YjEiIH0sCisgIHsgMHgyMTYyLCAiXHhlMlx4ODVceGIyIiB9LAorICB7IDB4MjE2MywgIlx4
ZTJceDg1XHhiMyIgfSwKKyAgeyAweDIxNjQsICJceGUyXHg4NVx4YjQiIH0sCisgIHsgMHgyMTY1
LCAiXHhlMlx4ODVceGI1IiB9LAorICB7IDB4MjE2NiwgIlx4ZTJceDg1XHhiNiIgfSwKKyAgeyAw
eDIxNjcsICJceGUyXHg4NVx4YjciIH0sCisgIHsgMHgyMTY4LCAiXHhlMlx4ODVceGI4IiB9LAor
ICB7IDB4MjE2OSwgIlx4ZTJceDg1XHhiOSIgfSwKKyAgeyAweDIxNmEsICJceGUyXHg4NVx4YmEi
IH0sCisgIHsgMHgyMTZiLCAiXHhlMlx4ODVceGJiIiB9LAorICB7IDB4MjE2YywgIlx4ZTJceDg1
XHhiYyIgfSwKKyAgeyAweDIxNmQsICJceGUyXHg4NVx4YmQiIH0sCisgIHsgMHgyMTZlLCAiXHhl
Mlx4ODVceGJlIiB9LAorICB7IDB4MjE2ZiwgIlx4ZTJceDg1XHhiZiIgfSwKKyAgeyAweDI0YjYs
ICJceGUyXHg5M1x4OTAiIH0sCisgIHsgMHgyNGI3LCAiXHhlMlx4OTNceDkxIiB9LAorICB7IDB4
MjRiOCwgIlx4ZTJceDkzXHg5MiIgfSwKKyAgeyAweDI0YjksICJceGUyXHg5M1x4OTMiIH0sCisg
IHsgMHgyNGJhLCAiXHhlMlx4OTNceDk0IiB9LAorICB7IDB4MjRiYiwgIlx4ZTJceDkzXHg5NSIg
fSwKKyAgeyAweDI0YmMsICJceGUyXHg5M1x4OTYiIH0sCisgIHsgMHgyNGJkLCAiXHhlMlx4OTNc
eDk3IiB9LAorICB7IDB4MjRiZSwgIlx4ZTJceDkzXHg5OCIgfSwKKyAgeyAweDI0YmYsICJceGUy
XHg5M1x4OTkiIH0sCisgIHsgMHgyNGMwLCAiXHhlMlx4OTNceDlhIiB9LAorICB7IDB4MjRjMSwg
Ilx4ZTJceDkzXHg5YiIgfSwKKyAgeyAweDI0YzIsICJceGUyXHg5M1x4OWMiIH0sCisgIHsgMHgy
NGMzLCAiXHhlMlx4OTNceDlkIiB9LAorICB7IDB4MjRjNCwgIlx4ZTJceDkzXHg5ZSIgfSwKKyAg
eyAweDI0YzUsICJceGUyXHg5M1x4OWYiIH0sCisgIHsgMHgyNGM2LCAiXHhlMlx4OTNceGEwIiB9
LAorICB7IDB4MjRjNywgIlx4ZTJceDkzXHhhMSIgfSwKKyAgeyAweDI0YzgsICJceGUyXHg5M1x4
YTIiIH0sCisgIHsgMHgyNGM5LCAiXHhlMlx4OTNceGEzIiB9LAorICB7IDB4MjRjYSwgIlx4ZTJc
eDkzXHhhNCIgfSwKKyAgeyAweDI0Y2IsICJceGUyXHg5M1x4YTUiIH0sCisgIHsgMHgyNGNjLCAi
XHhlMlx4OTNceGE2IiB9LAorICB7IDB4MjRjZCwgIlx4ZTJceDkzXHhhNyIgfSwKKyAgeyAweDI0
Y2UsICJceGUyXHg5M1x4YTgiIH0sCisgIHsgMHgyNGNmLCAiXHhlMlx4OTNceGE5IiB9LAorICB7
IDB4ZmIwMCwgIlx4NjZceDY2IiB9LAorICB7IDB4ZmIwMSwgIlx4NjZceDY5IiB9LAorICB7IDB4
ZmIwMiwgIlx4NjZceDZjIiB9LAorICB7IDB4ZmIwMywgIlx4NjZceDY2XHg2OSIgfSwKKyAgeyAw
eGZiMDQsICJceDY2XHg2Nlx4NmMiIH0sCisgIHsgMHhmYjA1LCAiXHg3M1x4NzQiIH0sCisgIHsg
MHhmYjA2LCAiXHg3M1x4NzQiIH0sCisgIHsgMHhmYjEzLCAiXHhkNVx4YjRceGQ1XHhiNiIgfSwK
KyAgeyAweGZiMTQsICJceGQ1XHhiNFx4ZDVceGE1IiB9LAorICB7IDB4ZmIxNSwgIlx4ZDVceGI0
XHhkNVx4YWIiIH0sCisgIHsgMHhmYjE2LCAiXHhkNVx4YmVceGQ1XHhiNiIgfSwKKyAgeyAweGZi
MTcsICJceGQ1XHhiNFx4ZDVceGFkIiB9LAorfTsKKworCisvLyBzb21lIGRlZmluZXMgZnJvbSBJ
Q1UKKworI2RlZmluZSBVMTZfSVNfTEVBRChjKSAoKChjKSYweGZmZmZmYzAwKT09MHhkODAwKQor
I2RlZmluZSBVMTZfSVNfVFJBSUwoYykgKCgoYykmMHhmZmZmZmMwMCk9PTB4ZGMwMCkKKyNkZWZp
bmUgVTE2X1NVUlJPR0FURV9PRkZTRVQgKCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKQor
I2RlZmluZSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpIFwKKyAgICAoKChVQ2hh
cjMyKShsZWFkKTw8MTBVTCkrKFVDaGFyMzIpKHRyYWlsKS1VMTZfU1VSUk9HQVRFX09GRlNFVCkK
KworI2RlZmluZSBVMTZfTEVBRChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFy
eSk+PjEwKSsweGQ3YzApCisjZGVmaW5lIFUxNl9UUkFJTChzdXBwbGVtZW50YXJ5KSAoVUNoYXIp
KCgoc3VwcGxlbWVudGFyeSkmMHgzZmYpfDB4ZGMwMCkKKworI2RlZmluZSBVX0lTX1NVUlJPR0FU
RShjKSAoKChjKSYweGZmZmZmODAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfU0lOR0xFKGMp
ICFVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VS
Uk9HQVRFKGMpCisjZGVmaW5lIFUxNl9JU19TVVJST0dBVEVfTEVBRChjKSAoKChjKSYweDQwMCk9
PTApCisKKyNkZWZpbmUgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwKKyAgICAoYyk9KHMp
WyhpKSsrXTsgXAorICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7IFwKKyAgICAgICAgdWludDE2X3Qg
X19jMjsgXAorICAgICAgICBpZigoaSk8KGxlbmd0aCkgJiYgVTE2X0lTX1RSQUlMKF9fYzI9KHMp
WyhpKV0pKSB7IFwKKyAgICAgICAgICAgICsrKGkpOyBcCisgICAgICAgICAgICAoYyk9VTE2X0dF
VF9TVVBQTEVNRU5UQVJZKChjKSwgX19jMik7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCit9CisK
KyNkZWZpbmUgVV9NQVNLKHgpICgodWludDMyX3QpMTw8KHgpKQorCituYW1lc3BhY2UgV1RGIHsK
KyAgbmFtZXNwYWNlIFVuaWNvZGUgeworCisgICAgZW51bSBEaXJlY3Rpb24geworICAgICAgTGVm
dFRvUmlnaHQsCisgICAgICBSaWdodFRvTGVmdCwKKyAgICAgIEV1cm9wZWFuTnVtYmVyLAorICAg
ICAgRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3IsCisgICAgICBFdXJvcGVhbk51bWJlclRlcm1pbmF0
b3IsCisgICAgICBBcmFiaWNOdW1iZXIsCisgICAgICBDb21tb25OdW1iZXJTZXBhcmF0b3IsCisg
ICAgICBCbG9ja1NlcGFyYXRvciwKKyAgICAgIFNlZ21lbnRTZXBhcmF0b3IsCisgICAgICBXaGl0
ZVNwYWNlTmV1dHJhbCwKKyAgICAgIE90aGVyTmV1dHJhbCwKKyAgICAgIExlZnRUb1JpZ2h0RW1i
ZWRkaW5nLAorICAgICAgTGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICAgIFJpZ2h0VG9MZWZ0QXJh
YmljLAorICAgICAgUmlnaHRUb0xlZnRFbWJlZGRpbmcsCisgICAgICBSaWdodFRvTGVmdE92ZXJy
aWRlLAorICAgICAgUG9wRGlyZWN0aW9uYWxGb3JtYXQsCisgICAgICBOb25TcGFjaW5nTWFyaywK
KyAgICAgIEJvdW5kYXJ5TmV1dHJhbAorICAgIH07CisKKyAgICBlbnVtIERlY29tcG9zaXRpb25U
eXBlIHsKKyAgICAgIERlY29tcG9zaXRpb25Ob25lLAorICAgICAgRGVjb21wb3NpdGlvbkNhbm9u
aWNhbCwKKyAgICAgIERlY29tcG9zaXRpb25Db21wYXQsCisgICAgICBEZWNvbXBvc2l0aW9uQ2ly
Y2xlLAorICAgICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAgICAgRGVjb21wb3NpdGlvbkZvbnQs
CisgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24sCisgICAgICBEZWNvbXBvc2l0aW9uSW5pdGlh
bCwKKyAgICAgIERlY29tcG9zaXRpb25Jc29sYXRlZCwKKyAgICAgIERlY29tcG9zaXRpb25NZWRp
YWwsCisgICAgICBEZWNvbXBvc2l0aW9uTmFycm93LAorICAgICAgRGVjb21wb3NpdGlvbk5vQnJl
YWssCisgICAgICBEZWNvbXBvc2l0aW9uU21hbGwsCisgICAgICBEZWNvbXBvc2l0aW9uU3F1YXJl
LAorICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAgICAgIERlY29tcG9zaXRpb25TdXBlciwKKyAg
ICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCwKKyAgICAgIERlY29tcG9zaXRpb25XaWRlLAorICAg
IH07CisKKyAgICBlbnVtIENoYXJDYXRlZ29yeSB7CisgICAgICBOb0NhdGVnb3J5ID0gIDAsCisg
ICAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9IFVfTUFTSyhHX1VOSUNPREVfVU5BU1NJR05FRCksCisg
ICAgICBMZXR0ZXJfVXBwZXJjYXNlID0gVV9NQVNLKEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVS
KSwKKyAgICAgIExldHRlcl9Mb3dlcmNhc2UgPSBVX01BU0soR19VTklDT0RFX0xPV0VSQ0FTRV9M
RVRURVIpLAorICAgICAgTGV0dGVyX1RpdGxlY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVfVElUTEVD
QVNFX0xFVFRFUiksCisgICAgICBMZXR0ZXJfTW9kaWZpZXIgPSBVX01BU0soR19VTklDT0RFX01P
RElGSUVSX0xFVFRFUiksCisgICAgICBMZXR0ZXJfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09U
SEVSX0xFVFRFUiksCisKKyAgICAgIE1hcmtfTm9uU3BhY2luZyA9IFVfTUFTSyhHX1VOSUNPREVf
Tk9OX1NQQUNJTkdfTUFSSyksCisgICAgICBNYXJrX0VuY2xvc2luZyA9IFVfTUFTSyhHX1VOSUNP
REVfRU5DTE9TSU5HX01BUkspLAorICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nID0gVV9NQVNL
KEdfVU5JQ09ERV9DT01CSU5JTkdfTUFSSyksCisKKyAgICAgIE51bWJlcl9EZWNpbWFsRGlnaXQg
PSBVX01BU0soR19VTklDT0RFX0RFQ0lNQUxfTlVNQkVSKSwKKyAgICAgIE51bWJlcl9MZXR0ZXIg
PSBVX01BU0soR19VTklDT0RFX0xFVFRFUl9OVU1CRVIpLAorICAgICAgTnVtYmVyX090aGVyID0g
VV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9OVU1CRVIpLAorCisgICAgICBTZXBhcmF0b3JfU3BhY2Ug
PSBVX01BU0soR19VTklDT0RFX1NQQUNFX1NFUEFSQVRPUiksCisgICAgICBTZXBhcmF0b3JfTGlu
ZSA9IFVfTUFTSyhHX1VOSUNPREVfTElORV9TRVBBUkFUT1IpLAorICAgICAgU2VwYXJhdG9yX1Bh
cmFncmFwaCA9IFVfTUFTSyhHX1VOSUNPREVfUEFSQUdSQVBIX1NFUEFSQVRPUiksCisKKyAgICAg
IE90aGVyX0NvbnRyb2wgPSBVX01BU0soR19VTklDT0RFX0NPTlRST0wpLAorICAgICAgT3RoZXJf
Rm9ybWF0ID0gVV9NQVNLKEdfVU5JQ09ERV9GT1JNQVQpLAorICAgICAgT3RoZXJfUHJpdmF0ZVVz
ZSA9IFVfTUFTSyhHX1VOSUNPREVfUFJJVkFURV9VU0UpLAorICAgICAgT3RoZXJfU3Vycm9nYXRl
ID0gVV9NQVNLKEdfVU5JQ09ERV9TVVJST0dBVEUpLAorCisgICAgICBQdW5jdHVhdGlvbl9EYXNo
ID0gVV9NQVNLKEdfVU5JQ09ERV9EQVNIX1BVTkNUVUFUSU9OKSwKKyAgICAgIFB1bmN0dWF0aW9u
X09wZW4gPSBVX01BU0soR19VTklDT0RFX09QRU5fUFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1
YXRpb25fQ2xvc2UgPSBVX01BU0soR19VTklDT0RFX0NMT1NFX1BVTkNUVUFUSU9OKSwKKyAgICAg
IFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9IFVfTUFTSyhHX1VOSUNPREVfQ09OTkVDVF9QVU5DVFVB
VElPTiksCisgICAgICBQdW5jdHVhdGlvbl9PdGhlciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJf
UFVOQ1RVQVRJT04pLAorCisgICAgICBTeW1ib2xfTWF0aCA9IFVfTUFTSyhHX1VOSUNPREVfTUFU
SF9TWU1CT0wpLAorICAgICAgU3ltYm9sX0N1cnJlbmN5ID0gVV9NQVNLKEdfVU5JQ09ERV9DVVJS
RU5DWV9TWU1CT0wpLAorICAgICAgU3ltYm9sX01vZGlmaWVyID0gVV9NQVNLKEdfVU5JQ09ERV9N
T0RJRklFUl9TWU1CT0wpLAorICAgICAgU3ltYm9sX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9P
VEhFUl9TWU1CT0wpLAorCisgICAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUgPSBVX01BU0so
R19VTklDT0RFX0lOSVRJQUxfUFVOQ1RVQVRJT04pLAorICAgICAgUHVuY3R1YXRpb25fRmluYWxR
dW90ZSA9IFVfTUFTSyhHX1VOSUNPREVfRklOQUxfUFVOQ1RVQVRJT04pCisgICAgfTsKKworICAg
IGlubGluZSBVQ2hhcjMyIGZvbGRDYXNlKFVDaGFyMzIgY2gpCisgICAgeworICAgICAgICAvLyBh
ZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRvIEdMaWIgdXBzdHJlYW0/CisKKyAgICAgICAgaW50IHN0
YXJ0ID0gMDsKKyAgICAgICAgaW50IGVuZCA9IEdfTl9FTEVNRU5UUyhjYXNlZm9sZF90YWJsZSk7
CisKKyAgICAgICAgaWYgKGNoID49IGNhc2Vmb2xkX3RhYmxlW3N0YXJ0XS5jaCAmJgorICAgICAg
ICAgICAgY2ggPD0gY2FzZWZvbGRfdGFibGVbZW5kIC0gMV0uY2gpIHsKKyAgICAgICAgICAgIHdo
aWxlIChUUlVFKSB7CisgICAgICAgICAgICAgICAgaW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8g
MjsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gY2FzZWZvbGRfdGFibGVbaGFsZl0uY2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdfdXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJs
ZVtoYWxmXS5kYXRhKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhbGYgPT0gc3RhcnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA+IGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmNoKSB7CisgICAgICAgICAgICAgICAgICAgIHN0
YXJ0ID0gaGFsZjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBlbmQgPSBoYWxmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlciAoY2gpOworICAgIH0KKworICAg
IGlubGluZSBpbnQgZm9sZENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29u
c3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgeworICAgICAg
ICBHRXJyb3IgKmdlcnJvciA9IE5VTEw7CisKKyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRm
MTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlmIChn
ZXJyb3IpIHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4g
LTE7CisgICAgICAgIH0KKworICAgICAgICBjaGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X2Nhc2Vm
b2xkKHV0ZjhzcmMsIC0xKTsKKyAgICAgICAgZ19mcmVlKHV0ZjhzcmMpOworCisgICAgICAgIGxv
bmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAgVUNoYXIqIHV0ZjE2cmVzdWx0ID0g
Z191dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1bHQsIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZn
ZXJyb3IpOworICAgICAgICBnX2ZyZWUodXRmOHJlc3VsdCk7CisgICAgICAgIGlmIChnZXJyb3Ip
IHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgp
IHsKKyAgICAgICAgICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICBnX2ZyZWUodXRmMTZy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9
CisgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LCB1dGYxNnJlc3VsdExlbmd0aCAq
IHNpemVvZihVQ2hhcikpOworICAgICAgICBnX2ZyZWUodXRmMTZyZXN1bHQpOworCisgICAgICAg
IHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHRvTG93
ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50
IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgeworICAgICAgICBHRXJyb3IgKmdlcnJvciA9
IE5VTEw7CisKKyAgICAgICAgY2hhciAqdXRmOHNyYyA9IGdfdXRmMTZfdG9fdXRmOChzcmMsIHNy
Y0xlbmd0aCwgMCwgMCwgJmdlcnJvcik7CisgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAg
ICAgICplcnJvciA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKwor
ICAgICAgICBjaGFyICp1dGY4cmVzdWx0ID0gZ191dGY4X3N0cmRvd24odXRmOHNyYywgLTEpOwor
ICAgICAgICBnX2ZyZWUodXRmOHNyYyk7CisKKyAgICAgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0
aCA9IC0xOworICAgICAgICBVQ2hhciogdXRmMTZyZXN1bHQgPSBnX3V0ZjhfdG9fdXRmMTYodXRm
OHJlc3VsdCwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvcik7CisgICAgICAgIGdf
ZnJlZSh1dGY4cmVzdWx0KTsKKyAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgKmVy
cm9yID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgeworICAgICAgICAgICAgKmVy
cm9yID0gVFJVRTsKKyAgICAgICAgICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHJl
c3VsdCwgdXRmMTZyZXN1bHQsIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgICAgIGdfZnJlZSh1dGYxNnJlc3VsdCk7CisKKyAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0
TGVuZ3RoOworICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMyIHRvTG93ZXIoVUNoYXIzMiBjKQor
ICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlcihjKTsKKyAgICB9CisKKyAgICBp
bmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191
bmljaGFyX3RvdXBwZXIoYyk7CisgICAgfQorCisgICAgaW5saW5lIGludCB0b1VwcGVyKFVDaGFy
KiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5n
dGgsIGJvb2wqIGVycm9yKQorICAgIHsKKyAgICAgICAgR0Vycm9yICpnZXJyb3IgPSBOVUxMOwor
CisgICAgICAgIGNoYXIgKnV0ZjhzcmMgPSBnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgs
IDAsIDAsICZnZXJyb3IpOworICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJy
b3IgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAg
Y2hhciAqdXRmOHJlc3VsdCA9IGdfdXRmOF9zdHJ1cCh1dGY4c3JjLCAtMSk7CisgICAgICAgIGdf
ZnJlZSh1dGY4c3JjKTsKKworICAgICAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7Cisg
ICAgICAgIFVDaGFyKiB1dGYxNnJlc3VsdCA9IGdfdXRmOF90b191dGYxNih1dGY4cmVzdWx0LCAt
MSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yKTsKKyAgICAgICAgZ19mcmVlKHV0Zjhy
ZXN1bHQpOworICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVF
OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHV0ZjE2
cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7CisgICAgICAgICAgICAqZXJyb3IgPSBUUlVF
OworICAgICAgICAgICAgZ19mcmVlKHV0ZjE2cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB1
dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkocmVzdWx0LCB1dGYx
NnJlc3VsdCwgdXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgZ19m
cmVlKHV0ZjE2cmVzdWx0KTsKKworICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7Cisg
ICAgfQorCisgICAgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjKQorICAgIHsK
KyAgICAgIHJldHVybiBnX3VuaWNoYXJfdG90aXRsZShjKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
Ym9vbCBpc0FyYWJpY0NoYXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBjID49IDB4
MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAgICB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENo
YXIoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBH
X1VOSUNPREVfRk9STUFUOworICAgIH0KKworICAgIGlubGluZSBib29sIGlzU2VwYXJhdG9yU3Bh
Y2UoVUNoYXIzMiBjKQorICAgIHsKKyAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBH
X1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SOworICAgIH0KKworICAgIGlubGluZSBib29sIGlzUHJp
bnRhYmxlQ2hhcihVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3By
aW50KGMpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgYm9vbCBpc0RpZ2l0KFVDaGFyMzIgYykK
KyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX2lzZGlnaXQoYyk7CisgICAgfQorCisgICAg
aW5saW5lIGJvb2wgaXNQdW5jdChVQ2hhcjMyIGMpCisgICAgeworICAgICAgcmV0dXJuIGdfdW5p
Y2hhcl9pc3B1bmN0KGMpOworICAgIH0KKworICAgIGlubGluZSBVQ2hhcjMyIG1pcnJvcmVkQ2hh
cihVQ2hhcjMyIGMpCisgICAgeworICAgICAgZ3VuaWNoYXIgbWlycm9yID0gMDsKKyAgICAgIGdf
dW5pY2hhcl9nZXRfbWlycm9yX2NoYXIoYywgJm1pcnJvcik7CisgICAgICByZXR1cm4gbWlycm9y
OworICAgIH0KKworICAgIGlubGluZSBDaGFyQ2F0ZWdvcnkgY2F0ZWdvcnkoVUNoYXIzMiBjKQor
ICAgIHsKKyAgICAgIGlmIChjID4gMHhmZmZmKSB7CisgICAgICAgICAgcmV0dXJuIE5vQ2F0ZWdv
cnk7CisgICAgICB9CisgICAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hh
cl90eXBlKGMpKTsKKyAgICB9CisKKyAgICBpbmxpbmUgRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hh
cjMyIGMpCisgICAgeworICAgICAgUGFuZ29CaWRpVHlwZSB0eXBlID0gcGFuZ29fYmlkaV90eXBl
X2Zvcl91bmljaGFyKGMpOworICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICBjYXNlIFBBTkdP
X0JJRElfVFlQRV9MOiByZXR1cm4gTGVmdFRvUmlnaHQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9SOiByZXR1cm4gUmlnaHRUb0xlZnQ7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9B
TDogcmV0dXJuIFJpZ2h0VG9MZWZ0QXJhYmljOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVf
TFJFOiByZXR1cm4gTGVmdFRvUmlnaHRFbWJlZGRpbmc7CisgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9STEU6IHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGluZzsKKyAgICAgIGNhc2UgUEFOR09f
QklESV9UWVBFX0xSTzogcmV0dXJuIExlZnRUb1JpZ2h0T3ZlcnJpZGU7CisgICAgICBjYXNlIFBB
TkdPX0JJRElfVFlQRV9STE86IHJldHVybiBSaWdodFRvTGVmdE92ZXJyaWRlOworICAgICAgY2Fz
ZSBQQU5HT19CSURJX1RZUEVfUERGOiByZXR1cm4gUG9wRGlyZWN0aW9uYWxGb3JtYXQ7CisgICAg
ICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FTjogcmV0dXJuIEV1cm9wZWFuTnVtYmVyOworICAgICAg
Y2FzZSBQQU5HT19CSURJX1RZUEVfQU46IHJldHVybiBBcmFiaWNOdW1iZXI7CisgICAgICBjYXNl
IFBBTkdPX0JJRElfVFlQRV9FUzogcmV0dXJuIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOworICAg
ICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVQ6IHJldHVybiBFdXJvcGVhbk51bWJlclRlcm1pbmF0
b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9DUzogcmV0dXJuIENvbW1vbk51bWJlclNl
cGFyYXRvcjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX05TTTogcmV0dXJuIE5vblNwYWNp
bmdNYXJrOworICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQk46IHJldHVybiBCb3VuZGFyeU5l
dXRyYWw7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9COiByZXR1cm4gQmxvY2tTZXBhcmF0
b3I7CisgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9TOiByZXR1cm4gU2VnbWVudFNlcGFyYXRv
cjsKKyAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1dTOiByZXR1cm4gV2hpdGVTcGFjZU5ldXRy
YWw7CisgICAgICBkZWZhdWx0OiByZXR1cm4gT3RoZXJOZXV0cmFsOworICAgICAgfSAKKyAgICB9
CisKKyAgICBpbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1
cm4gZ191bmljaGFyX2lzbG93ZXIoYyk7CisgICAgfQorCisgICAgaW5saW5lIGludCBkaWdpdFZh
bHVlKFVDaGFyMzIgYykKKyAgICB7CisgICAgICByZXR1cm4gZ191bmljaGFyX2RpZ2l0X3ZhbHVl
KGMpOworICAgIH0KKworICAgIGlubGluZSB1aW50OF90IGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIg
YykKKyAgICB7CisgICAgICAvLyByZXR1cm4gZ191bmljaGFyX2NvbWJpbmluZ19jbGFzcyhjKTsK
KyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlubGluZSBEZWNvbXBvc2l0aW9uVHlwZSBk
ZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgeworICAgICAgLy8gRklYTUUKKyAgICAg
IHJldHVybiBEZWNvbXBvc2l0aW9uTm9uZTsKKyAgICB9CisKKyAgICBpbmxpbmUgaW50IHVtZW1j
YXNlY21wKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAgICB7Cisg
ICAgICBjaGFyICp1dGY4YSA9IGdfdXRmMTZfdG9fdXRmOChhLCBsZW4sIDAsIDAsIE5VTEwpOwor
ICAgICAgY2hhciAqdXRmOGIgPSBnX3V0ZjE2X3RvX3V0ZjgoYiwgbGVuLCAwLCAwLCBOVUxMKTsK
KworICAgICAgY2hhciAqZm9sZGVkQSA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4YSwgLTEpOworICAg
ICAgY2hhciAqZm9sZGVkQiA9IGdfdXRmOF9jYXNlZm9sZCh1dGY4YiwgLTEpOworCisgICAgICBn
X2ZyZWUodXRmOGEpOworICAgICAgZ19mcmVlKHV0ZjhiKTsKKworICAgICAgaW50IHJlc3VsdCA9
IGdfdXRmOF9jb2xsYXRlKGZvbGRlZEEsIGZvbGRlZEIpOworCisgICAgICBnX2ZyZWUoZm9sZGVk
QSk7CisgICAgICBnX2ZyZWUoZm9sZGVkQik7CisKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgIH0KK30KKworI2VuZGlmCisvLyB2aW06IHRzPTIgc3c9MiBldApJbmRleDogV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2
MjY4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBA
QAorMjAwOC0wOS0wMiAgRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNj
ZXNzLWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkxNAor
ICAgICAgICBbR1RLXSBJbXBsZW1lbnQgVW5pY29kZSBmdW5jdGlvbmFsaXR5IHVzaW5nIEdMaWIK
KworICAgICAgICBPcmlnaW5hbCBwYXRjaCBieSBKw7xyZyBCaWxsZXRlciBhbmQgTmFpZW0gU2hh
aWsuCisKKyAgICAgICAgQWRkZWQgcHJvYmluZyBmb3IgYSBoYXJkLWNvZGVkIGxpc3RzIG9mIHRl
eHQgZW5jb2RpbmdzLgorICAgICAgICBUaGUgYmFzaXMgb2YgdGhpcyBsaXN0IGlzIHRha2VuIGZy
b20gdGhlIGVuY29kaW5ncyBzdXBwb3J0ZWQgYnkgaWNvbnYsCisgICAgICAgIHRoZW4gZXh0ZW5k
ZWQgYnkgdGlzLTYyMCwgd2luZG93cy0xMjUxLCBldWMta3IgYW5kIHdpbmRvd3MtMTI1My4KKyAg
ICAgICAgUHJvYmluZyBpcyBuZWNlc3Nhcnkgd2l0aCB0aGUgY3VycmVudCBkZXNpZ24gb2YgdGV4
dCBjb2RlY3MKKyAgICAgICAgYXMgaWNvbnYuaCBkb2VzIG5vdCBzdXBwb3J0IGVudW1lcmF0aW5n
IGF2YWlsYWJsZSBlbmNvZGluZ3MuCisKKyAgICAgICAgQ2hhbmdlZCBiZWhhdmlvdXIgb2YgR1RL
IHZlcnNpb24gb2YgdGV4dEJyZWFrTGFzdCBhbmQgdGV4dEJyZWFrRmlyc3QKKyAgICAgICAgdG8g
bG9vayBmb3IgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIGJyZWFrcy4KKworICAgICAgICBUZXh0Q29k
ZWNHdGsgbm93IHN1cHBvcnRzIHBhcnRpYWxseSB0cmFuc21pdHRlZCBtdWx0aWJ5dGUgY2hhcmFj
dGVycy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrTGFzdCk6CisgICAg
ICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmV2aW91cyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9UZXh0RW5jb2RpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjplbmNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YnVpbGRCYXNlVGV4dENvZGVjTWFwcyk6CisgICAgICAgIChXZWJD
b3JlOjpleHRlbmRUZXh0Q29kZWNNYXBzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9U
ZXh0Qm91bmRhcmllc0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRX
b3JkRnJvbUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRXb3JkQm91bmRhcnkpOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBJdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OndvcmRCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVCcmVha0l0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbnRlbmNlQnJlYWtJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtGaXJzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJl
YWtMYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha05leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dEJyZWFrUHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJl
Y2VkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha0ZvbGxvd2luZyk6CisgICAgICAg
IChXZWJDb3JlOjp0ZXh0QnJlYWtDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dEJy
ZWFrKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpuZXdUZXh0Q29kZWNH
dGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjp0ZXN0RW5jb2RpbmdBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckVuY29kaW5nTmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdO
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGspOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjp+VGV4dENvZGVjR3RrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVsZWFzZUlDb252KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZFbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY0d0azo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZW5jb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaDogQWRkZWQuCisK
IDIwMDgtMDktMDggIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBCdWlsZCBmaXggZm9yIHRoZSBRdC9XaW5kb3dzIGJ1aWxkLCBkZWZpbmUgVVNFX0pTQyB0
bwpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzNjI2OCkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0J
KHdvcmtpbmcgY29weSkKQEAgLTE2NzcsMTQgKzE2NzcsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3Vu
ZGFyaWVzLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oIFwKLQlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dENvZGVjLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Yy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBcCi0JV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjTGF0aW4xLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xh
dGluMS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwKQEAg
LTE5NzMsOCArMTk2OCwzMSBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi90cmVlcy5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3psaWIvemNvbmYuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy96bGliL3psaWIuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGli
L3p1dGlsLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96dXRpbC5o
IAorCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfSUNVX1VO
SUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAorZW5kaWYg
IyBFTkQgVVNFX0NVUkwKKworIyAtLS0tCisjIGdsaWIgdW5pY29kZSBiYWNrZW5kCisjIC0tLS0K
K2lmIFVTRV9HTElCX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZ3RrL1RleHRDb2RlY0d0ay5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRC
b3VuZGFyaWVzR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJ
dGVyYXRvckd0ay5jcHAKK2VuZGlmCiAKICMgLS0tLQogIyBjdXJsIGh0dHAgYmFja2VuZApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRh
R3RrLmNwcAkocmV2aXNpb24gMzYyNjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9TaW1wbGVGb250RGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDYgQEAK
ICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgog
I2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUg
PHVuaWNvZGUvdW5vcm0uaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3IuaAkocmV2aXNpb24gMzYyNjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25z
dCBVQ2hhciosIGludCBsZW5ndGgpOwogCiAgICAgaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVh
a0l0ZXJhdG9yKik7CisgICAgaW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqKTsK
ICAgICBpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciopOworICAgIGludCB0ZXh0
QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0QnJlYWtDdXJy
ZW50KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0
QnJlYWtJdGVyYXRvciosIGludCk7CiAgICAgaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJl
YWtJdGVyYXRvciosIGludCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
QnJlYWtJdGVyYXRvcklDVS5jcHAJKHJldmlzaW9uIDM2MjY4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTEg
Kzg5LDIxIEBAIGludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciogYmkKICAgICBy
ZXR1cm4gdWJya19maXJzdChiaSk7CiB9CiAKK2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0
ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdWJya19sYXN0KGJpKTsKK30KKwogaW50IHRleHRC
cmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQogewogICAgIHJldHVybiB1YnJrX25leHQo
YmkpOwogfQogCitpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQor
eworICAgIHJldHVybiB1YnJrX3ByZXZpb3VzKGJpKTsKK30KKwogaW50IHRleHRCcmVha1ByZWNl
ZGluZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCiB7CiAgICAgcmV0dXJuIHVicmtf
cHJlY2VkaW5nKGJpLCBwb3MpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Zy5jcHAJKHJldmlzaW9uIDM2MjY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDx1bmlj
b2RlL3Vub3JtLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5jbHVkZSA8UVN0cmluZz4K
KyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5oPgogI2VuZGlmCiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0xMDUsNiAr
MTA3LDIyIEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoY29uc3QgVUNoYXIKICAgICBR
U3RyaW5nIHN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oY2hhcmFjdGVycyksIGxl
bmd0aCk7CiAgICAgc3RyID0gc3RyLm5vcm1hbGl6ZWQoUVN0cmluZzo6Tm9ybWFsaXphdGlvbkZv
cm1fQyk7CiAgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyICo+KHN0ci51dGYxNigpKSwgc3RyLmxlbmd0aCgpLCBoYW5kbGlu
Zyk7CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIGNoYXIgKnV0Zjhzb3VyY2UgPSBnX3V0
ZjE2X3RvX3V0ZjgoY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCBOVUxMKTsKKyAgICBjaGFyICp1
dGY4bm9ybWFsaXplZCA9IGdfdXRmOF9ub3JtYWxpemUodXRmOHNvdXJjZSwgLTEsIEdfTk9STUFM
SVpFX05GQyk7CisKKyAgICBnX2ZyZWUgKHV0Zjhzb3VyY2UpOworCisgICAgbG9uZyB1dGYxNmxl
bmd0aDsKKyAgICBVQ2hhciogdXRmMTZub3JtYWxpemVkID0gZ191dGY4X3RvX3V0ZjE2KHV0Zjhu
b3JtYWxpemVkLCAtMSwgMCwgJnV0ZjE2bGVuZ3RoLCBOVUxMKTsKKworICAgIGdfZnJlZSAodXRm
OG5vcm1hbGl6ZWQpOworCisgICAgQ1N0cmluZyByZXN1bHQgPSBuZXdUZXh0Q29kZWMoKnRoaXMp
LT5lbmNvZGUodXRmMTZub3JtYWxpemVkLCB1dGYxNmxlbmd0aCwgaGFuZGxpbmcpOworCisgICAg
Z19mcmVlICh1dGYxNm5vcm1hbGl6ZWQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKICNlbmRpZgog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3Ry
eS5jcHAJKHJldmlzaW9uIDM2MjY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOSBAQAogI2lmIFBM
QVRGT1JNKFFUKQogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0LmgiCiAjZW5kaWYKKyNpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSAiZ3RrL1RleHRDb2RlY0d0ay5oIgorI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiAKQEAgLTE3Niw2ICsxNzksMTEgQEAgc3RhdGljIHZvaWQgYnVpbGRC
YXNlVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGlu
Z05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjSUNVOjpyZWdp
c3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlmCisKKyNpZiBVU0UoR0xJ
Ql9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhh
ZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNl
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBleHRl
bmRUZXh0Q29kZWNNYXBzKCkKQEAgLTE5NCw2ICsyMDIsMTEgQEAgc3RhdGljIHZvaWQgZXh0ZW5k
VGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckVuY29kaW5nTmFtZXMo
YWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyQ29k
ZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNFKEdMSUJfVU5JQ09ERSkK
KyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKGFkZFRvVGV4
dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29k
ZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGQ6OmF1dG9fcHRyPFRleHRD
b2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUgPGdsaWIu
aD4KKworI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRv
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgo
Y29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkK
K3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywg
bGVuKTsKKworICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFr
Rm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0
QnJlYWtEb25lKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBj
aGFyYWN0ZXIgcHJlY2VlZGluZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVt
ZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiBnX3VuaWNoYXJfaXNhbG51
bShjaGFyc1twb3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247
CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlv
bik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAg
IHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7CisgICAgICAgICAgICAvLyBXZSBz
dG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBicmVhaworICAg
ICAgICAgICAgLy8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4g
MCAmJiBnX3VuaWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbl0pKQorICAgICAgICAgICAgICAg
IHJldHVybiBwb3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtQcmVj
ZWRpbmcoaXQsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKwordm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxl
biwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKyAgICAqZW5kID0g
dGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAg
ICAgICAqZW5kID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdGV4dEJyZWFrUHJl
dmlvdXMoaXQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEb21p
bmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKwor
I2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBV
QnJlYWtJdGVyYXRvclR5cGUgeworICAgIFVCUktfQ0hBUkFDVEVSLAorICAgIFVCUktfV09SRCwK
KyAgICBVQlJLX0xJTkUsCisgICAgVUJSS19TRU5URU5DRQorfTsKKworY2xhc3MgVGV4dEJyZWFr
SXRlcmF0b3IgeworcHVibGljOgorICAgIFVCcmVha0l0ZXJhdG9yVHlwZSBtX3R5cGU7CisgICAg
aW50IG1fbGVuZ3RoOworICAgIFBhbmdvTG9nQXR0ciAqbV9sb2dfYXR0cnM7CisKKyAgICBpbnQg
bV9pbmRleDsKK307CisKK3N0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc2V0VXBJdGVyYXRvcihi
b29sJiBjcmVhdGVkSXRlcmF0b3IsIFRleHRCcmVha0l0ZXJhdG9yKiYgaXRlcmF0b3IsCisgICAg
VUJyZWFrSXRlcmF0b3JUeXBlIHR5cGUsIGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgp
Cit7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFjcmVh
dGVkSXRlcmF0b3IpIHsKKyAgICAgICAgaXRlcmF0b3IgPSBuZXcgVGV4dEJyZWFrSXRlcmF0b3Io
KTsKKyAgICAgICAgY3JlYXRlZEl0ZXJhdG9yID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFpdGVy
YXRvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsb25nIHV0ZjhsZW47CisgICAgY2hhciAq
dXRmOCA9IGdfdXRmMTZfdG9fdXRmOChzdHJpbmcsIGxlbmd0aCwgMCwgJnV0ZjhsZW4sIDApOwor
CisgICAgLy8gRklYTUU6IGFzc3VtZXMgbm8gc3Vycm9nYXRlIHBhaXJzCisKKyAgICBpdGVyYXRv
ci0+bV90eXBlID0gdHlwZTsKKyAgICBpdGVyYXRvci0+bV9sZW5ndGggPSBsZW5ndGg7CisgICAg
aXRlcmF0b3ItPm1fbG9nX2F0dHJzID0gZ19uZXcwKFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7
CisgICAgaXRlcmF0b3ItPm1faW5kZXggPSAtMTsKKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHV0
ZjgsIHV0ZjhsZW4sIC0xLCAwLCBpdGVyYXRvci0+bV9sb2dfYXR0cnMsIGxlbmd0aCArIDEpOwor
CisgICAgZ19mcmVlKHV0ZjgpOworCisgICAgcmV0dXJuIGl0ZXJhdG9yOworfQorCitUZXh0QnJl
YWtJdGVyYXRvciogY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBp
bnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRDaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yLAorICAgICAgICBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLCBV
QlJLX0NIQVJBQ1RFUiwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciog
d29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBjcmVhdGVkV29yZEJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0
aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yOworICAgIHJldHVy
biBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGlj
V29yZEJyZWFrSXRlcmF0b3IsIFVCUktfV09SRCwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0
QnJlYWtJdGVyYXRvciogbGluZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50
IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkTGluZUJyZWFrSXRlcmF0b3IgPSBm
YWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0xpbmVCcmVha0l0ZXJh
dG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRMaW5lQnJlYWtJdGVyYXRvciwK
KyAgICAgICAgc3RhdGljTGluZUJyZWFrSXRlcmF0b3IsIFVCUktfTElORSwgc3RyaW5nLCBsZW5n
dGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZFNl
bnRlbmNlQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRv
ciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9y
KGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY1NlbnRlbmNlQnJl
YWtJdGVyYXRvciwgVUJSS19TRU5URU5DRSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitpbnQgdGV4
dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIC8vIHNlZSB0ZXh0QnJl
YWtMYXN0CisgICAgCisgICAgaW50IGZpcnN0Q3Vyc29yUG9zaXRpb24gPSAtMTsKKyAgICBpbnQg
cG9zID0gMDsKKyAgICB3aGlsZShwb3MgPD0gYmktPm1fbGVuZ3RoICYmIChmaXJzdEN1cnNvclBv
c2l0aW9uIDwgMCkpIHsKKyAgICAgICAgaWYgKGJpLT5tX2xvZ19hdHRyc1twb3NdLmlzX2N1cnNv
cl9wb3NpdGlvbikgeworICAgICAgICAgICAgZmlyc3RDdXJzb3JQb3NpdGlvbiA9IHBvczsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBiaS0+bV9pbmRleCA9IGZpcnN0Q3Vyc29yUG9zaXRpb247Cisg
ICAgcmV0dXJuIGZpcnN0Q3Vyc29yUG9zaXRpb247Cit9CisKK2ludCB0ZXh0QnJlYWtMYXN0KFRl
eHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICAvLyB0ZXh0QnJlYWtMYXN0IGlzIG5vdCBtZWFu
dCAKKyAgICAvLyB0byBmaW5kIGJyZWFrcyBhY2NvcmRpbmcgdG8gYmktPm1fdHlwZSBidXQgcmVh
bGx5IGxhc3QgY2hhcmFjdGVyIAorICAgIC8vIChjbXAgSUNVIGRvY3VtZW50YXRpb24gZm9yIHVi
cmtfZmlyc3QgYW5kIHVicmtfbGFzdCkKKyAgICAvLyBzbyB3ZSBzaG91bGQgYWR2YW5jZSBvciB0
cmF2ZXJzZSBiYWNrIGJhc2VkIG9uIGJpLT5tX2xvZ19hdHRycyBjdXJzb3IgcG9zaXRpb25zCisg
ICAgCisgICAgLy8gZnJvbSBJQ1UgZG9jcyBmb3IgdWJya19sYXN0OgorICAgIC8vICJEZXRlcm1p
bmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGJleW9uZCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhl
IHRleHQgYmVpbmcgc2Nhbm5lZC4iIAorCisgICAgLy8gSWYgbGFzdCBjaGFyYWN0ZXIgcG9zaXRp
b24gaW4gdGhlIG9yaWdpbmFsIHN0cmluZyBpcyBhIHdoaXRlc3BhY2UsCisgICAgLy8gdHJhdmVy
c2UgdG8gdGhlIGxlZnQgdW50aWwgdGhlIGZpcnN0IG5vbi13aGl0ZSBjaGFyYWN0ZXIgcG9zaXRp
b24gaXMgZm91bmQKKyAgICAvLyBhbmQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qg
d2hpdGUtc3BhY2UgY2hhciBhZnRlciB0aGlzIG9uZS4KKyAgICAvLyBvdGhlcndpc2UgcmV0dXJu
IG1fbGVuZ3RoLCBhcyAidGhlIGZpcnN0IGNoYXJhY3RlciBiZXlvbmQgdGhlIGxhc3QiIGlzIG91
dHNpZGUgb3VyIHN0cmluZy4KKyAgICAKKyAgICBib29sIHdoaXRlU3BhY2VBdFRoZUVuZCA9IHRy
dWU7CisgICAgaW50IG5leHRXaGl0ZVNwYWNlUG9zID0gYmktPm1fbGVuZ3RoOworICAgIAorICAg
IGludCBwb3MgPSBiaS0+bV9sZW5ndGg7CisgICAgd2hpbGUgKHBvcyA+PSAwICYmIHdoaXRlU3Bh
Y2VBdFRoZUVuZCkgeworICAgICAgICBpZiAoYmktPm1fbG9nX2F0dHJzW3Bvc10uaXNfY3Vyc29y
X3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAod2hpdGVTcGFjZUF0VGhlRW5kID0gYmktPm1f
bG9nX2F0dHJzW3Bvc10uaXNfd2hpdGUpIHsKKyAgICAgICAgICAgICAgICBuZXh0V2hpdGVTcGFj
ZVBvcyA9IHBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwb3MtLTsKKyAg
ICB9CisgICAgYmktPm1faW5kZXggPSBuZXh0V2hpdGVTcGFjZVBvczsKKyAgICByZXR1cm4gbmV4
dFdoaXRlU3BhY2VQb3M7Cit9CisKK2ludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9y
KiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmktPm1faW5kZXggKyAxOyBpIDw9IGJpLT5tX2xl
bmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+
bV9sb2dfYXR0cnNbaV0uaXNfbGluZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5kZXgg
PSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlw
ZSA9PSBVQlJLX1dPUkQgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX3N0YXJ0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJpLT5tX2xvZ19h
dHRyc1tpXS5pc193b3JkX2VuZCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdGFuZGFsb25l
IHNwZWNpYWwgY2hhcmFjdGVycywgc3VjaCBhcyB0aGUgZXVybyBzeW1ib2wg4oKsLCAKKyAgICAg
ICAgICAgIC8vIGFyZSBub3QgbWFya2VkIGFzIHdvcmRfc3RhcnQgJiB3b3JkX2VuZCBhcyBvcHBv
c2VkIHRvIHRoZSB3YXkgSUNVIGRvZXMgaXQKKyAgICAgICAgICAgIC8vIFRoaXMgbGVhZHMgLSBm
b3IgZXhhbXBsZSAtIHRvIGRpZmZlcmVudCB3b3JkIHNlbGVjdGlvbiBiZWhhdmlvdXIgd2hlbiBy
aWdodCBjbGlja2luZy4KKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAg
IHJldHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNU
RVIgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikgeworICAgICAgICAg
ICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gZWxz
ZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIChiaS0+bV9sb2dfYXR0cnNbaV0u
aXNfc2VudGVuY2Vfc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7Cisg
ICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gVGV4dEJyZWFrRG9uZTsKK30KKworaW50IHRleHRCcmVh
a1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmkt
Pm1faW5kZXggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBV
QlJLX0xJTkUgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAg
ICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IGVs
c2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNf
d29yZF9zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfd29yZF9lbmQpKSB7CisgICAgICAgICAgICBiaS0+
bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIGlmIChi
aS0+bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGJpLT5tX2xvZ19hdHRyc1tpXS5pc19jdXJz
b3JfcG9zaXRpb24pIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAg
IHJldHVybiBpOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5D
RSAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNlX3N0YXJ0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBiaS0+bV9sb2dfYXR0cnNb
aV0uaXNfc2VudGVuY2VfZW5kKSkgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAg
ICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRleHRCcmVh
a0ZpcnN0KGJpKTsKK30KKworaW50IHRleHRCcmVha1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRv
ciogYmksIGludCBwb3MpCit7CisgICAgYmktPm1faW5kZXggPSBwb3M7CisgICAgcmV0dXJuIHRl
eHRCcmVha1ByZXZpb3VzKGJpKTsKK30KKworaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0QnJl
YWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgaWYgKHBvcyA8IDApCisgICAgICAgIHBv
cyA9IC0xOworICAgIGJpLT5tX2luZGV4ID0gcG9zOworICAgIHJldHVybiB0ZXh0QnJlYWtOZXh0
KGJpKTsKK30KKworaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQor
eworICAgIHJldHVybiBiaS0+bV9pbmRleDsKK30KKworYm9vbCBpc1RleHRCcmVhayhUZXh0QnJl
YWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgaWYgKGJpLT5tX2luZGV4ID49IDApIHsK
KyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19MSU5FICYmIGJpLT5tX2xvZ19hdHRyc1ti
aS0+bV9pbmRleF0uaXNfbGluZV9icmVhaykgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgYmktPm1fbG9nX2F0
dHJzW2JpLT5tX2luZGV4XS5pc193b3JkX2VuZCkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgICAgIH0gZWxzZSBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+
bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX2NoYXJfYnJlYWspIHsKKyAgICAgICAgICAgIHJl
dHVybiBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5D
RSAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX3NlbnRlbmNlX2VuZCkgeworICAg
ICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNF
OworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNH
dGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hl
c0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXh0Q29kZWNHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK3VzaW5nIHN0ZDo6YXV0b19w
dHI7Cit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKKworLy8gYXBw
ZW5kT21pdHRpbmdCT00gaXMgZ29uZSAoaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
MzMzODApLCBzbyB3ZSBuZWVkIHRvIGF2b2lkIGdlbmVyYXRpbmcgZXh0cmEgQk9NJ3MKKy8vIGhl
cmUuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNwZWNpZnlpbmcgdGhlIFVURi0xNiBjb2RlY3Mn
IGVuZGlhbm5lc3MgZXhwbGljaXRseSB3aGVuIGluaXRpYWxpemluZyBpY29udgorCisjaWYgKEdf
QllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4pCisgICAgY29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRl
eHRDb2RlY0d0azo6bV9pbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZCRSI7CisjZWxzZSAK
KyAgICBjb25zdCBnY2hhciogV2ViQ29yZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2Rp
bmdOYW1lID0gIlVURi0xNkxFIjsKKyNlbmRpZgorCisKKy8vIGxpc3Qgb2YgdGV4dCBlbmNvZGlu
Z3MgYW5kIHRoZWlyIGFsaWFzZXMKKy8vIHRoZSBmaXJzdCBlbnRyeS8iYWxpYXMiIGlzIHRoZSBj
YW5vbmljYWwgbmFtZSwgZWFjaCBhbGlhcyBsaXN0IG11c3QgYmUgdGVybWluYXRlZCBieSBhIDAK
KworLy8gVW5pY29kZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX1VURl84ICAgICAgICAgICAgPSB7ICJVVEYtOCIgLCAwfTsgCisKKy8v
IFdlc3Rlcm4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19JU09fODg1OV8xICAgICAgID0geyAiSVNPLTg4NTktMSIsICJDUDgxOSIsICJJ
Qk04MTkiLCAiSVNPLUlSLTEwMCIsICJJU084ODU5LTEiLCAiSVNPXzg4NTktMSIsICJJU09fODg1
OS0xOjE5ODciLCAgIkwxIiwgIkxBVElOMSIsICJDU0lTT0xBVElOMSIgLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNST01B
TiAgICAgICAgID0geyAiTUFDUk9NQU4iLCAiTUFDIiwgIk1BQ0lOVE9TSCIsICJDU01BQ0lOVE9T
SCIgLCAwfTsKKworLy8gSmFwYW5lc2UKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19TSElGVF9KSVMgICAgICAgID0geyAiU0hJRlRfSklT
IiwgIk1TX0tBTkpJIiwgIlNISUZULUpJUyIsICJTSklTIiwgIkNTU0hJRlRKSVMiICwgMH07CitU
ZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNf
RVVDX0pQICAgICAgICAgICA9IHsgIkVVQ19KUCIsICJFVUMtSlAiLCAiRVVDSlAiLCAiRVhURU5E
RURfVU5JWF9DT0RFX1BBQ0tFRF9GT1JNQVRfRk9SX0pBUEFORVNFIiwgIkNTRVVDUEtERk1USkFQ
QU5FU0UiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlAgICAgICA9IHsgIklTTy0yMDIyLUpQIiAsIDB9Owor
CisvLyBUcmFkaXRpb25hbCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQklHNSAgICAgICAgICAgICA9IHsgIkJJRzUiLCAi
QklHLTUiLCAiQklHLUZJVkUiLCAiQklHNSIsICJCSUdGSVZFIiwgIkNOLUJJRzUiLCAiQ1NCSUc1
IiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0JJRzVfSEtTQ1MgICAgICAgPSB7ICJCSUc1LUhLU0NTIiwgIkJJRzUtSEtTQ1M6
MjAwNCIsICJCSUc1SEtTQ1MiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A5NTAgICAgICAgICAgICA9IHsgIkNQOTUwIiAs
IDB9OworCisvLyBLb3JlYW4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiAgICAgID0geyAiSVNPLTIwMjItS1IiLCAi
Q1NJU08yMDIyS1IiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2Rl
Y0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A5NDkgICAgICAgICAgICA9IHsgIkNQOTQ5IiwgIlVIQyIg
LCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19FVUNfS1IgICAgICAgICAgID0geyAiRVVDLUtSIiwgIkNTRVVDS1IiLCAwIH07CisK
Ky8vIEFyYWJpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0lTT184ODU5XzYgICAgICAgPSB7ICJJU08tODg1OS02IiwgIkFSQUJJQyIs
ICJBU01PLTcwOCIsICJFQ01BLTExNCIsICJJU08tSVItMTI3IiAsICJJU084ODU5LTYiLCAiSVNP
Xzg4NTktNiIsICJJU09fODg1OS02OjE5ODciLCAiQ1NJU09MQVRJTkFSQUJJQyIgLCAwfTsKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19D
UDEyNTYgICAgICAgICAgID0geyAiQ1AxMjU2IiwgIk1TLUFSQUIiLCAiV0lORE9XUy0xMjU2IiAs
IDB9OworCisvLyBIZWJyZXcKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV84ICAgICAgID0geyAiSVNPLTg4NTktOCIsICJI
RUJSRVciICwgIklTTy04ODU5LTgiLCAiSVNPLUlSLTEzOCIsICJJU084ODU5LTgiLCAiSVNPXzg4
NTktOCIsICJJU09fODg1OS04OjE5ODgiLCAiQ1NJU09MQVRJTkhFQlJFVyIgLCAwfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEy
NTUgICAgICAgICAgID0geyAiQ1AxMjU1IiwgIk1TLUhFQlIiLCAiV0lORE9XUy0xMjU1IiAsIDB9
OworCisvLyBHcmVlaworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzcgICAgICAgPSB7ICJJU08tODg1OS03IiwgIkVDTUEt
MTE4IiwgIkVMT1RfOTI4IiwgIkdSRUVLIiwgIkdSRUVLOCIsICJJU08tSVItMTI2IiwgIklTTzg4
NTktNyIsICJJU09fODg1OS03IiwgIklTT184ODU5LTc6MTk4NyIsICJJU09fODg1OS03OjIwMDMi
LCAiQ1NJIiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0NQODY5ICAgICAgICAgICAgPSB7ICJDUDg2OSIsICI4NjkiLCAiQ1At
R1IiLCAiSUJNODY5IiwgIkNTSUJNODY5IiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MyAgICAgPSB7ICJX
SU5ET1dTLTEyNTMiLCAwIH07CisKKy8vIEN5cmlsbGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSAgICAgICA9IHsg
IklTTy04ODU5LTUiLCAiQ1lSSUxMSUMiLCAiSVNPLUlSLTE0NCIsICJJU084ODU5LTUiLCAiSVNP
Xzg4NTktNSIsICJJU09fODg1OS01OjE5ODgiLCAiQ1NJU09MQVRJTkNZUklMTElDIiAsIDB9Owor
VGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2Vz
X0tPSThfUiAgICAgICAgICAgPSB7ICJLT0k4LVIiLCAiQ1NLT0k4UiIgLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDg2NiAg
ICAgICAgICAgID0geyAiQ1A4NjYiLCAiODY2IiwgIklCTTg2NiIsICJDU0lCTTg2NiIgLCAwfTsK
K1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19LT0k4X1UgICAgICAgICAgID0geyAiS09JOC1VIiAsIDB9OworVGV4dENvZGVjR3RrOjpjb2Rl
Y0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MSAgICAg
PSB7ICJXSU5ET1dTLTEyNTEiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQyAgICAgID0geyAiTUFDQ1lSSUxM
SUMiICwgMH07CisKKy8vIFRoYWkKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDg3NCAgICAgICAgICAgID0geyAiQ1A4NzQiLCAiV0lO
RE9XUy04NzQiICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfVElTXzYyMCAgICAgICAgICA9IHsgIlRJUy02MjAiLCAwfTsKKwor
Ly8gU2ltcGxpZmllZCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfR0JLICAgICAgICAgICAgICA9IHsgIkdCSyIgLCAwfTsK
K1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19IWiAgICAgICAgICAgICAgID0geyAiSFoiLCAiSFotR0ItMjMxMiIgLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19HQjE4MDMw
ICAgICAgICAgID0geyAiR0IxODAzMCIgLCAwfTsKKworLy8gQ2VudHJhbCBFdXJvcGVhbgorVGV4
dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lT
T184ODU5XzIgICAgICAgPSB7ICJJU08tODg1OS0yIiwgIklTTy1JUi0xMDEiLCAiSVNPODg1OS0y
IiwgIklTT184ODU5LTIiLCAiSVNPXzg4NTktMjoxOTg3IiwgIkwyIiwgIkxBVElOMiIsICJDU0lT
T0xBVElOMiIgLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3Rr
OjptX2NvZGVjQWxpYXNlc19DUDEyNTAgICAgICAgICAgID0geyAiQ1AxMjUwIiwgIk1TLUVFIiwg
IldJTkRPV1MtMTI1MCIgLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFID0geyAiTUFDQ0VOVFJBTEVV
Uk9QRSIgLCAwfTsKKworLy8gVmlldG5hbWVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1OCAgICAgICAgICAgPSB7ICJDUDEy
NTgiLCAiV0lORE9XUy0xMjU4IiAsIDB9OworCisvLyBUdXJraXNoCitUZXh0Q29kZWNHdGs6OmNv
ZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU0ICAgICAgICAg
ICA9IHsgIkNQMTI1NCIsICJNUy1UVVJLIiwgIldJTkRPV1MtMTI1NCIgLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1
OV85ICAgICAgID0geyAiSVNPLTg4NTktOSIsICJJU08tSVItMTQ4IiwgIklTTzg4NTktOSIsICJJ
U09fODg1OS05IiwgIklTT184ODU5LTk6MTk4OSIsICJMNSIsICJMQVRJTjUiLCAiQ1NJU09MQVRJ
TjUiICwgMH07CisKKy8vIEJhbHRpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0
Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NyAgICAgICAgICAgPSB7ICJDUDEyNTciLCAi
V0lOQkFMVFJJTSIsICJXSU5ET1dTLTEyNTciICwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNCAgICAgICA9IHsg
IklTTy04ODU5LTQiLCAiSVNPLUlSLTExMCIsICJJU084ODU5LTQiLCAiSVNPXzg4NTktNCIsICJJ
U09fODg1OS00OjE5ODgiLCAiTDQiLCAiTEFUSU40IiwgIkNTSVNPTEFUSU40IiAsIDB9OworCitn
Y29uc3Rwb2ludGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkJhc2VDb2RlY0xpc3RbXSA9
IHsgCisgICAgLy8gVW5pY29kZQorICAgICZtX2NvZGVjQWxpYXNlc19VVEZfOCwKKworICAgIC8v
IFdlc3Rlcm4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMQorfTsKKworZ2NvbnN0cG9p
bnRlciBjb25zdCBUZXh0Q29kZWNHdGs6Om1faWNvbnZFeHRlbmRlZENvZGVjTGlzdFtdID0gCit7
CisgICAgLy8gV2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19NQUNST01BTiwKKworICAgIC8v
IEphcGFuZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX1NISUZUX0pJUywKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfRVVDX0pQLAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9KUCwKKworICAgIC8v
IFNpbXBsaWZpZWQgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19CSUc1LAorICAgICZtX2Nv
ZGVjQWxpYXNlc19CSUc1X0hLU0NTLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDk1MCwKKworICAg
IC8vIEtvcmVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiwKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfQ1A5NDksCisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19LUiwKKworICAgIC8vIEFy
YWJpYworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV82LAorICAgICZtX2NvZGVjQWxpYXNl
c19DUDEyNTYsCisgICAgCisgICAgLy8gSGVicmV3CisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184
ODU5XzgsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NSwKKyAgICAKKyAgICAvLyBHcmVlawor
ICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV83LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2
OSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzLAorICAgIAorICAgIC8vIEN5cmls
bGljCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUsCisgICAgJm1fY29kZWNBbGlhc2Vz
X0tPSThfUiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4NjYsCisgICAgJm1fY29kZWNBbGlhc2Vz
X0tPSThfVSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxLAorICAgICZtX2NvZGVj
QWxpYXNlc19NQUNDWVJJTExJQywKKyAgICAKKyAgICAvLyBUaGFpCisgICAgJm1fY29kZWNBbGlh
c2VzX0NQODc0LAorICAgICZtX2NvZGVjQWxpYXNlc19USVNfNjIwLAorICAgIAorICAgIC8vIFRy
YWRpdGlvbmFsIENoaW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0JLLAorICAgICZtX2NvZGVj
QWxpYXNlc19IWiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0IxODAzMCwKKyAgICAKKyAgICAvLyBD
ZW50cmFsIEV1cm9wZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIsCisgICAgJm1f
Y29kZWNBbGlhc2VzX0NQMTI1MCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9Q
RSwKKyAgICAKKyAgICAvLyBWaWV0bmFtZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1OCwK
KyAgICAKKyAgICAvLyBUdXJraXNoCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NCwKKyAgICAm
bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOSwKKyAgICAKKyAgICAvLyBCYWx0aWMKKyAgICAmbV9j
b2RlY0FsaWFzZXNfQ1AxMjU3LAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV80Cit9Owor
CisKK2NvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OworICAgIAorCitz
dGF0aWMgYXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIHRv
byBub2lzeSBpZiBlYWNoIFVURi04IGNvZGVjIGNyZWF0aW9uIGlzIGxvZ2dlZAorICAgIC8vIGlm
IChzdHJjbXAoZW5jb2RpbmcubmFtZSgpLCAiVVRGLTgiKSkKKyAgICAvLyAgICAgTE9HKFRleHRD
b252ZXJzaW9uLCAiY3JlYXRpbmcgbmV3IHRleHQgY29kZWMgZm9yIGVuY29kaW5nIG5hbWUgJXMi
LCBlbmNvZGluZy5uYW1lKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gYXV0b19wdHI8VGV4dENv
ZGVjPihuZXcgVGV4dENvZGVjR3RrKGVuY29kaW5nKSk7Cit9CisKK2dib29sZWFuIFRleHRDb2Rl
Y0d0azo6aXNFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciogZW5jTmFtZSkKK3sKKyAgICBH
SUNvbnYgdGVzdGVyOworICAgIC8vIHRlc3QgZGVjb2RpbmcKKyAgICB0ZXN0ZXIgPSBnX2ljb252
X29wZW4obV9pbnRlcm5hbEVuY29kaW5nTmFtZSwgZW5jTmFtZSk7CisgICAgaWYgKHRlc3RlciA9
PSAoR0lDb252KS0xKSB7CisgICAgICAgIExPR19FUlJPUigiJXMgbm90IGRlY29kYWJsZSA9PiBu
b3QgYXZhaWxhYmxlISIsIGVuY05hbWUpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAvLyB0ZXN0IGVu
Y29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNOYW1lLCBtX2ludGVybmFs
RW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSAoR0lDb252KS0xKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIiVzIG5vdCBlbmNvZGFibGUgPT4gbm90IGF2YWlsYWJsZSEiLCBl
bmNOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGdfaWNvbnZfY2xvc2UodGVzdGVyKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVF
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQp
Cit7CisgICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBp
bnQgbGlzdExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5n
TGlzdCA9IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNp
emVvZihtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAg
ICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9p
bnRlcik7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IHN0YXRp
Y19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAgICAgaW50IGNv
ZGVjQ291bnQgPSAtMTsKKyAgICAgICAgY29uc3QgZ2NoYXIgKmNhbm9uaWNhbE5hbWUsICpjdXJy
ZW50QWxpYXM7CisgICAgICAgIGJvb2wgY2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIGZvciBlYWNoIG9mIHRoZSBhbGlhcyBsaXN0czoKKyAgICAgICAgLy8g
YmFpbCBvdXQgaWYgY2Fub25pY2FsIGlzIG5vdCBhdmFpbGFibGUsCisgICAgICAgIC8vIHRoZW4g
Y29udGludWUgdGVzdGluZyBlYWNoIGFsaWFzLCAKKyAgICAgICAgLy8gaWYgYXZhaWxhYmxlLCBh
ZGQgaXQgdG8gdGhlIGxpc3QsIG1hcHBpbmcgaXQgdG8gaXRzIGNhbm9uaWNhbCBuYW1lCisKKyAg
ICAgICAgd2hpbGUgKChjdXJyZW50QWxpYXMgPSAoKmNvZGVjQWxpYXNlcylbKytjb2RlY0NvdW50
XSkgJiYgY2Fub25pY2FsQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBib29sIGN1cnJlbnRBdmFp
bGFibGUgPSBpc0VuY29kaW5nQXZhaWxhYmxlKGN1cnJlbnRBbGlhcyk7CisKKyAgICAgICAgICAg
IGlmIChjb2RlY0NvdW50ID09IDAgJiYgY3VycmVudEF2YWlsYWJsZSkgeworICAgICAgICAgICAg
ICAgIGNhbm9uaWNhbE5hbWUgPSBjdXJyZW50QWxpYXM7CisgICAgICAgICAgICAgICAgY2Fub25p
Y2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBMT0dfVkVSQk9TRShUZXh0Q29u
dmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVuY29kaW5nIGNhbm9uaWNhbCAlcyIsIGNhbm9uaWNhbE5h
bWUpOworICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihjYW5vbmljYWxOYW1lLCBjYW5vbmljYWxO
YW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZWNDb3VudCA9PSAwICYmICFjdXJyZW50
QXZhaWxhYmxlKSB7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsQXZhaWxhYmxlID0gZmFsc2U7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVjQ291bnQgPiAwKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzRW5jb2RpbmdBdmFpbGFibGUoY3VycmVudEFsaWFzKSkgeworICAgICAgICAgICAg
ICAgICAgICBMT0dfVkVSQk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVuY29kaW5n
IG5hbWUgYWxpYXMgJXMgdG8gY2Fub25pY2FsICVzIiwgY3VycmVudEFsaWFzLCBjYW5vbmljYWxO
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGN1cnJlbnRBbGlhcywgY2Fub25p
Y2FsTmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNv
bnN0KiBlbmNvZGluZ0xpc3Q7CisgICAgdW5zaWduZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAg
IGlmIChleHRlbmRlZCkgeworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRD
b2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29k
ZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5n
TGlzdCA9IG1faWNvbnZCYXNlQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9m
KG1faWNvbnZCYXNlQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIGNv
ZGVjQWxpYXNMaXN0ICpjb2RlY0FsaWFzZXMgPSBzdGF0aWNfY2FzdDxjb2RlY0FsaWFzTGlzdCo+
KGVuY29kaW5nTGlzdFtpXSk7CisgICAgICAgIC8vIGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCAi
YWxpYXMiIHNob3VsZCBiZSB0aGUgY2Fub25pY2FsIG5hbWUsIHNlZSB0aGUgZGVmaW5pdGlvbiBv
ZiB0aGUgYWxpYXMgbGlzdHMgCisgICAgICAgIGNvbnN0IGdjaGFyICpjb2RlY05hbWUgPSAoKmNv
ZGVjQWxpYXNlcylbMF07CisgICAgICAgIGlmIChpc0VuY29kaW5nQXZhaWxhYmxlKGNvZGVjTmFt
ZSkpCisgICAgICAgICAgICByZWdpc3RyYXIoY29kZWNOYW1lLCBuZXdUZXh0Q29kZWNHdGssIDAp
OworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFt
ZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29k
aW5nTmFtZXMocmVnaXN0cmFyLCBmYWxzZSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdp
c3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdp
c3RlckNvZGVjcyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJl
Z2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3Ry
YXIpCit7CisgICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKHJlZ2lzdHJhciwgdHJ1ZSk7Cit9CisK
K3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0ZXJDb2RlY3MocmVnaXN0cmFyLCB0cnVlKTsK
K30KKworVGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZykKKyAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCisgICAgLCBtX251bUJ1ZmZlcmVkQnl0
ZXMoMCkKKyAgICAsIG1faWNvbnZEZWNvZGVyKChHSUNvbnYpIC0xKQorICAgICwgbV9pY29udkVu
Y29kZXIoKEdJQ29udikgLTEpCit7Cit9CisKK1RleHRDb2RlY0d0azo6flRleHRDb2RlY0d0aygp
Cit7CisgICAgcmVsZWFzZUlDb252KCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWxlYXNl
SUNvbnYoKSBjb25zdAoreworICAgIGlmIChtX2ljb252RGVjb2RlciAhPSAoR0lDb252KSAtMSkg
eworICAgICAgICBnX2ljb252X2Nsb3NlKG1faWNvbnZEZWNvZGVyKTsKKyAgICAgICAgbV9pY29u
dkRlY29kZXIgPSAoR0lDb252KSAtMTsKKyAgICB9CisgICAgaWYgKG1faWNvbnZFbmNvZGVyICE9
IChHSUNvbnYpIC0xKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVuY29kZXIpOwor
ICAgICAgICBtX2ljb252RW5jb2RlciA9IChHSUNvbnYpIC0xOworICAgIH0KK30KKwordm9pZCBU
ZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RGVjb2RlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
aWNvbnZEZWNvZGVyID09IChHSUNvbnYpIC0xKTsKKworICAgIG1faWNvbnZEZWNvZGVyID0gZ19p
Y29udl9vcGVuKG1faW50ZXJuYWxFbmNvZGluZ05hbWUsIG1fZW5jb2RpbmcubmFtZSgpKTsKK30K
Kwordm9pZCBUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RW5jb2RlcigpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1faWNvbnZFbmNvZGVyID09IChHSUNvbnYpIC0xKTsKKworICAgIG1faWNvbnZFbmNv
ZGVyID0gZ19pY29udl9vcGVuKG1fZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2RpbmdO
YW1lKTsKK30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikKK3sKKyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2Rp
bmcuCisgICAgaWYgKG1faWNvbnZEZWNvZGVyID09IChHSUNvbnYpIC0xKSB7CisgICAgICAgIGNy
ZWF0ZUlDb252RGVjb2RlcigpOworICAgICAgICBBU1NFUlQobV9pY29udkRlY29kZXIgIT0gKEdJ
Q29udikgLTEpOworICAgICAgICBpZiAobV9pY29udkRlY29kZXIgPT0gKEdJQ29udikgLTEpIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVu
IHRob3VnaCBlbmNvZGluZyB3YXMgaW4gdGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNpemVfdCBjb3VudFdyaXR0ZW4sIGNvdW50
UmVhZCwgY29udmVyc2lvbkxlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBjb252ZXJzaW9uQnl0ZXM7
CisgICAgY2hhciAqcHJlZml4ZWRCeXRlcyA9IDA7CisKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5
dGVzKSB7CisgICAgICAgIGNvbnZlcnNpb25MZW5ndGggPSBsZW5ndGggKyBtX251bUJ1ZmZlcmVk
Qnl0ZXM7CisgICAgICAgIHByZWZpeGVkQnl0ZXMgPSAoY2hhciopZmFzdE1hbGxvYyhjb252ZXJz
aW9uTGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KHByZWZpeGVkQnl0ZXMsIG1fYnVmZmVyZWRCeXRl
cywgbV9udW1CdWZmZXJlZEJ5dGVzKTsKKyAgICAgICAgbWVtY3B5KHByZWZpeGVkQnl0ZXMgKyBt
X251bUJ1ZmZlcmVkQnl0ZXMsIGJ5dGVzLCBsZW5ndGgpOworICAgICAgICAKKyAgICAgICAgY29u
dmVyc2lvbkJ5dGVzID0gcHJlZml4ZWRCeXRlczsKKyAgICAgICAgCisgICAgICAgIC8vIGFsbCBi
dWZmZXJlZCBieXRlcyBhcmUgY29uc3VtZWQgbm93CisgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRl
cyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gbm8gcHJldmlvdXNseSBidWZmZXJlZCBw
YXJ0aWFsIGRhdGEsIAorICAgICAgICAvLyBqdXN0IGNvbnZlcnQgdGhlIGRhdGEgdGhhdCB3YXMg
cGFzc2VkIGluCisgICAgICAgIGNvbnZlcnNpb25CeXRlcyA9IGJ5dGVzOworICAgICAgICBjb252
ZXJzaW9uTGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKworICAgIEdFcnJvciAqZXJyID0gMDsKKyAg
ICBVQ2hhciAqYnVmZmVyID0gMDsgCisKKyAgICBidWZmZXIgPSByZWludGVycHJldF9jYXN0PFVD
aGFyKj4oZ19jb252ZXJ0X3dpdGhfaWNvbnYoY29udmVyc2lvbkJ5dGVzLCBjb252ZXJzaW9uTGVu
Z3RoLCBtX2ljb252RGVjb2RlciwgJmNvdW50UmVhZCwgJmNvdW50V3JpdHRlbiwgJmVycikpOyAK
KworCisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9u
IGVycm9yIik7CisgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7IC8vIHJlc2V0IHN0YXRl
IGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIGRlY29kZQorICAgICAgICBmYXN0RnJlZShwcmVmaXhl
ZEJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICAKKyAgICAvLyBQ
YXJ0aWFsIGlucHV0IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBtYXkgbm90IHJlc3VsdCBpbiBh
biBlcnJvciBiZWluZyByYWlzZWQuIAorICAgIC8vIEZyb20gdGhlIGdub21lIGxpYnJhcnkgZG9j
dW1lbnRhdGlvbiBvbiBnX2NvbnZlcnRfd2l0aF9pY29udjoKKyAgICAvLyAiRXZlbiBpZiB0aGUg
Y29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCwgdGhpcyBtYXkgYmUgbGVzcyB0aGFuIGxlbiBpZiB0
aGVyZSB3ZXJlIHBhcnRpYWwgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4iCisg
ICAgLy8gVGhhdCdzIHdoeSB3ZSBuZWVkIHRvIGNvbXBhcmUgY29udmVyc2lvbkxlbmd0aCBhZ2Fp
bnN0IGNvdW50UmVhZCAKKworICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IGNvbnZlcnNpb25MZW5n
dGggLSBjb3VudFJlYWQ7CisgICAgaWYgKG1fbnVtQnVmZmVyZWRCeXRlcyA+IDApIHsKKyAgICAg
ICAgaWYgKGZsdXNoKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlBhcnRpYWwgYnl0ZXMgYXQg
ZW5kIG9mIGlucHV0IHdoaWxlIGZsdXNoIHJlcXVlc3RlZC4iKTsKKyAgICAgICAgICAgIG1fbnVt
QnVmZmVyZWRCeXRlcyA9IDA7IC8vIHJlc2V0IHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRv
IGRlY29kZQorICAgICAgICAgICAgZmFzdEZyZWUocHJlZml4ZWRCeXRlcyk7CisgICAgICAgICAg
ICBnX2ZyZWUoYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAg
fQorICAgICAgICBtZW1jcHkobV9idWZmZXJlZEJ5dGVzLCBjb252ZXJzaW9uQnl0ZXMgKyBjb3Vu
dFJlYWQsIG1fbnVtQnVmZmVyZWRCeXRlcyk7CisgICAgfQorCisgICAgZmFzdEZyZWUocHJlZml4
ZWRCeXRlcyk7CisgICAgCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisKKyAgICByZXN1bHQu
YXBwZW5kKGJ1ZmZlciwgY291bnRXcml0dGVuIC8gc2l6ZW9mKFVDaGFyKSk7CisKKyAgICBnX2Zy
ZWUoYnVmZmVyKTsKKworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cit9CisKK0NT
dHJpbmcgVGV4dENvZGVjR3RrOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxpbmcpCit7CisgICAgaWYgKCFsZW5n
dGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlmIChtX2ljb252RW5jb2RlciA9PSAoR0lD
b252KSAtMSkKKyAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7CisgICAgaWYgKG1faWNvbnZF
bmNvZGVyID09IChHSUNvbnYpIC0xKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAg
c2l6ZV90IGNvdW50OworICAgIEdFcnJvciAqZXJyID0gMDsKKyAgICBjaGFyICpidWZmZXIgPSBn
X2NvbnZlcnRfd2l0aF9pY29udihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0
ZXJzKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgbV9pY29udkVuY29kZXIsIDAsICZjb3VudCwg
JmVycik7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJz
aW9uIGVycm9yIik7CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgfQorCisgICAgQ1N0
cmluZyByZXN1bHQgPSBDU3RyaW5nKGJ1ZmZlciwgY291bnQpOworCisgICAgZ19mcmVlKGJ1ZmZl
cik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERv
bWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBUZXh0Q29kZWNHVEtfaAorI2RlZmluZSBUZXh0Q29kZWNHVEtfaAor
CisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRD
b2RlY0d0ayA6IHB1YmxpYyBUZXh0Q29kZWMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOwor
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
KTsKKworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhF
bmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVu
ZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAgICAgVGV4dENvZGVjR3RrKGNv
bnN0IFRleHRFbmNvZGluZyYpOworICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNHdGsoKTsKKwor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgs
IGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKKyAgICAgICAg
dmlydHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5j
b2RhYmxlSGFuZGxpbmcpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29u
dkRlY29kZXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkVuY29kZXIoKSBjb25z
dDsKKyAgICAgICAgdm9pZCByZWxlYXNlSUNvbnYoKSBjb25zdDsKKworICAgICAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJh
ciwgYm9vbCBleHRlbmRlZCk7ICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJD
b2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBleHRlbmRlZCk7CisgICAg
ICAgIHN0YXRpYyBnYm9vbGVhbiBpc0VuY29kaW5nQXZhaWxhYmxlKGNvbnN0IGdjaGFyKik7CisK
KyAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgICAgIHNpemVfdCBtX251bUJ1
ZmZlcmVkQnl0ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzE2XTsg
Ly8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJhY3RlciAgICAgICAgCisg
ICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZEZWNvZGVyOworICAgICAgICBtdXRhYmxlIEdJ
Q29udiBtX2ljb252RW5jb2RlcjsKKworICAgICAgICBzdGF0aWMgY29uc3QgZ2NoYXIqIG1faW50
ZXJuYWxFbmNvZGluZ05hbWU7CisKKyAgICAgICAgdHlwZWRlZiBjb25zdCBnY2hhciogY29uc3Qg
Y29kZWNBbGlhc0xpc3RbXTsKKworICAgICAgICAvLyBVbmljb2RlCisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19VVEZfODsKKworICAgICAgICAvLyBXZXN0ZXJu
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV8x
OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfTUFDUk9NQU47
CisKKyAgICAgICAgLy8gSmFwYW5lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1f
Y29kZWNBbGlhc2VzX1NISUZUX0pJUzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1f
Y29kZWNBbGlhc2VzX0VVQ19KUDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0lTT18yMDIyX0pQOworCisgICAgICAgIC8vIFRyYWRpdGlvbmFsIENoaW5lc2UK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0JJRzU7CisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19CSUc1X0hLU0NTOworICAg
ICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A5NTA7CisKKyAgICAg
ICAgLy8gS29yZWFuCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNl
c19JU09fMjAyMl9LUjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX0NQOTQ5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
RVVDX0tSOworCisgICAgICAgIC8vIEFyYWJpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NjsKKworICAgICAgICAvLyBIZWJyZXcKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5Xzg7CisgICAgICAg
IHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTU7CisKKyAgICAgICAg
Ly8gR3JlZWsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lT
T184ODU5Xzc7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDg2OTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1dJTkRP
V1NfMTI1MzsKKworICAgICAgICAvLyBDeXJpbGxpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0tPSThfUjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0NQODY2OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfS09JOF9VOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfV0lORE9XU18xMjUxOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUM7CisKKyAgICAgICAgLy8gVGhhaQorICAgICAgICBz
dGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NzQ7CisgICAgICAgIHN0YXRp
YyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19USVNfNjIwOworCisgICAgICAgIC8vIFNp
bXBsaWZpZWQgQ2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfR0JLOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
SFo7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19HQjE4MDMw
OworCisgICAgICAgIC8vIENlbnRyYWwgRXVyb3BlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5XzI7CisgICAgICAgIHN0YXRpYyBjb2RlY0Fs
aWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFOworCisgICAgICAgIC8vIFZpZXRu
YW1lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1
ODsKKworICAgICAgICAvLyBUdXJraXNoCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19DUDEyNTQ7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2Nv
ZGVjQWxpYXNlc19JU09fODg1OV85OworCisgICAgICAgIC8vIEJhbHRpYworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU3OworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNDsKKworICAgICAgICBzdGF0
aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252QmFzZUNvZGVjTGlzdFtdOworICAgICAgICBz
dGF0aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3RbXTsKKwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRDb2RlY0dU
S19oCg==
</data>
<flag name="review"
          id="10359"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25314</attachid>
            <date>2008-11-20 08:11:30 -0800</date>
            <delta_ts>2008-11-21 04:38:24 -0800</delta_ts>
            <desc>Replacing ICU with glib</desc>
            <filename>replace_icu_by_glib.diff</filename>
            <type>text/plain</type>
            <size>77103</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzODYxOSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksMTAgKzIyOSwyOCBAQAog
CUphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHAgXAogCUphdmFT
Y3JpcHRDb3JlL3d0Zi91bmljb2RlL1VURjguY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9VVEY4LmggXAotCUphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaCBcCisJ
SmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCisKKyMgLS0tLQorIyBpY3UgdW5p
Y29kZSBiYWNrZW5kCisjIC0tLS0KK2lmIFVTRV9JQ1VfVU5JQ09ERQoramF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNV
LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaAorZW5k
aWYgIyBVU0VfSUNVX1VOSUNPREUKIAorIyAtLS0tCisjIGdsaWIgdW5pY29kZSBiYWNrZW5kCisj
IC0tLS0KK2lmIFVTRV9HTElCX1VOSUNPREUKK2phdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAor
CUphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaCBcCisJSmF2YVNj
cmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYlR5cGVzLmggXAorCUphdmFTY3Jp
cHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCBcCisJSmF2YVNj
cmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9DYXNlZm9sZFRhYmxlRnJvbUdMaWIuaAorZW5kaWYK
KwogIyBEZWJ1ZyBidWlsZAogaWYgRU5BQkxFX0RFQlVHCiBqYXZhc2NyaXB0Y29yZV9idWlsdF9z
b3VyY2VzICs9IFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHJldmlz
aW9uIDM4NjE5KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAicXQ0L1VuaWNvZGVRdDQuaCIK
ICNlbGlmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvVW5pY29k
ZUljdS5oPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9n
bGliL1VuaWNvZGVHTGliLmg+CiAjZWxzZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUgaW1wbGVt
ZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIv
VW5pY29kZUdMaWJUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmlj
b2RlL2dsaWIvVW5pY29kZUdMaWJUeXBlcy5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYlR5cGVzLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxz
dGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcg
QmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLD
tnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFVuaWNvZGVHTGliVHlwZXNfaAorI2RlZmluZSBVbmljb2RlR0xpYlR5
cGVzX2gKKwordHlwZWRlZiB1aW50MTZfdCBVQ2hhcjsKK3R5cGVkZWYgaW50MzJfdCBVQ2hhcjMy
OworCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvQ2FzZWZv
bGRUYWJsZUZyb21HTGliLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvZ2xpYi9DYXNlZm9sZFRhYmxlRnJvbUdMaWIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvQ2FzZWZvbGRUYWJsZUZyb21HTGliLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2Ug
U3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgg
RG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29t
PgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBDYXNlZm9sZFRhYmxlRnJvbUdMaWJfaAorI2RlZmlu
ZSBDYXNlZm9sZFRhYmxlRnJvbUdMaWJfaAorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisvLyBjb3Bp
ZWQgZnJvbSBHTGliCisKKy8qIFRhYmxlIG9mIGNhc2Vmb2xkaW5nIGNhc2VzIHRoYXQgY2FuJ3Qg
YmUgZGVyaXZlZCBieSBsb3dlcmNhc2luZworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAg
ICBndWludDE2IGNoOworICAgIGdjaGFyIGRhdGFbN107Cit9IGNhc2Vmb2xkX3RhYmxlW10gPSB7
CisgICAgeyAweDAwYjUsICJceGNlXHhiYyIgfSwKKyAgICB7IDB4MDBkZiwgIlx4NzNceDczIiB9
LAorICAgIHsgMHgwMTMwLCAiXHg2OVx4Y2NceDg3IiB9LAorICAgIHsgMHgwMTQ5LCAiXHhjYVx4
YmNceDZlIiB9LAorICAgIHsgMHgwMTdmLCAiXHg3MyIgfSwKKyAgICB7IDB4MDFmMCwgIlx4NmFc
eGNjXHg4YyIgfSwKKyAgICB7IDB4MDM0NSwgIlx4Y2VceGI5IiB9LAorICAgIHsgMHgwMzkwLCAi
XHhjZVx4YjlceGNjXHg4OFx4Y2NceDgxIiB9LAorICAgIHsgMHgwM2IwLCAiXHhjZlx4ODVceGNj
XHg4OFx4Y2NceDgxIiB9LAorICAgIHsgMHgwM2MyLCAiXHhjZlx4ODMiIH0sCisgICAgeyAweDAz
ZDAsICJceGNlXHhiMiIgfSwKKyAgICB7IDB4MDNkMSwgIlx4Y2VceGI4IiB9LAorICAgIHsgMHgw
M2Q1LCAiXHhjZlx4ODYiIH0sCisgICAgeyAweDAzZDYsICJceGNmXHg4MCIgfSwKKyAgICB7IDB4
MDNmMCwgIlx4Y2VceGJhIiB9LAorICAgIHsgMHgwM2YxLCAiXHhjZlx4ODEiIH0sCisgICAgeyAw
eDAzZjUsICJceGNlXHhiNSIgfSwKKyAgICB7IDB4MDU4NywgIlx4ZDVceGE1XHhkNlx4ODIiIH0s
CisgICAgeyAweDFlOTYsICJceDY4XHhjY1x4YjEiIH0sCisgICAgeyAweDFlOTcsICJceDc0XHhj
Y1x4ODgiIH0sCisgICAgeyAweDFlOTgsICJceDc3XHhjY1x4OGEiIH0sCisgICAgeyAweDFlOTks
ICJceDc5XHhjY1x4OGEiIH0sCisgICAgeyAweDFlOWEsICJceDYxXHhjYVx4YmUiIH0sCisgICAg
eyAweDFlOWIsICJceGUxXHhiOVx4YTEiIH0sCisgICAgeyAweDFmNTAsICJceGNmXHg4NVx4Y2Nc
eDkzIiB9LAorICAgIHsgMHgxZjUyLCAiXHhjZlx4ODVceGNjXHg5M1x4Y2NceDgwIiB9LAorICAg
IHsgMHgxZjU0LCAiXHhjZlx4ODVceGNjXHg5M1x4Y2NceDgxIiB9LAorICAgIHsgMHgxZjU2LCAi
XHhjZlx4ODVceGNjXHg5M1x4Y2RceDgyIiB9LAorICAgIHsgMHgxZjgwLCAiXHhlMVx4YmNceDgw
XHhjZVx4YjkiIH0sCisgICAgeyAweDFmODEsICJceGUxXHhiY1x4ODFceGNlXHhiOSIgfSwKKyAg
ICB7IDB4MWY4MiwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjgzLCAiXHhl
MVx4YmNceDgzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmODQsICJceGUxXHhiY1x4ODRceGNlXHhi
OSIgfSwKKyAgICB7IDB4MWY4NSwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICAgIHsgMHgx
Zjg2LCAiXHhlMVx4YmNceDg2XHhjZVx4YjkiIH0sCisgICAgeyAweDFmODcsICJceGUxXHhiY1x4
ODdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4OCwgIlx4ZTFceGJjXHg4MFx4Y2VceGI5IiB9LAor
ICAgIHsgMHgxZjg5LCAiXHhlMVx4YmNceDgxXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOGEsICJc
eGUxXHhiY1x4ODJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4YiwgIlx4ZTFceGJjXHg4M1x4Y2Vc
eGI5IiB9LAorICAgIHsgMHgxZjhjLCAiXHhlMVx4YmNceDg0XHhjZVx4YjkiIH0sCisgICAgeyAw
eDFmOGQsICJceGUxXHhiY1x4ODVceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4ZSwgIlx4ZTFceGJj
XHg4Nlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjhmLCAiXHhlMVx4YmNceDg3XHhjZVx4YjkiIH0s
CisgICAgeyAweDFmOTAsICJceGUxXHhiY1x4YTBceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5MSwg
Ilx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjkyLCAiXHhlMVx4YmNceGEyXHhj
ZVx4YjkiIH0sCisgICAgeyAweDFmOTMsICJceGUxXHhiY1x4YTNceGNlXHhiOSIgfSwKKyAgICB7
IDB4MWY5NCwgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjk1LCAiXHhlMVx4
YmNceGE1XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTYsICJceGUxXHhiY1x4YTZceGNlXHhiOSIg
fSwKKyAgICB7IDB4MWY5NywgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZjk4
LCAiXHhlMVx4YmNceGEwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTksICJceGUxXHhiY1x4YTFc
eGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5YSwgIlx4ZTFceGJjXHhhMlx4Y2VceGI5IiB9LAorICAg
IHsgMHgxZjliLCAiXHhlMVx4YmNceGEzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOWMsICJceGUx
XHhiY1x4YTRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5ZCwgIlx4ZTFceGJjXHhhNVx4Y2VceGI5
IiB9LAorICAgIHsgMHgxZjllLCAiXHhlMVx4YmNceGE2XHhjZVx4YjkiIH0sCisgICAgeyAweDFm
OWYsICJceGUxXHhiY1x4YTdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhMCwgIlx4ZTFceGJkXHhh
MFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmExLCAiXHhlMVx4YmRceGExXHhjZVx4YjkiIH0sCisg
ICAgeyAweDFmYTIsICJceGUxXHhiZFx4YTJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhMywgIlx4
ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmE0LCAiXHhlMVx4YmRceGE0XHhjZVx4
YjkiIH0sCisgICAgeyAweDFmYTUsICJceGUxXHhiZFx4YTVceGNlXHhiOSIgfSwKKyAgICB7IDB4
MWZhNiwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmE3LCAiXHhlMVx4YmRc
eGE3XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTgsICJceGUxXHhiZFx4YTBceGNlXHhiOSIgfSwK
KyAgICB7IDB4MWZhOSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmFhLCAi
XHhlMVx4YmRceGEyXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYWIsICJceGUxXHhiZFx4YTNceGNl
XHhiOSIgfSwKKyAgICB7IDB4MWZhYywgIlx4ZTFceGJkXHhhNFx4Y2VceGI5IiB9LAorICAgIHsg
MHgxZmFkLCAiXHhlMVx4YmRceGE1XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYWUsICJceGUxXHhi
ZFx4YTZceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhZiwgIlx4ZTFceGJkXHhhN1x4Y2VceGI5IiB9
LAorICAgIHsgMHgxZmIyLCAiXHhlMVx4YmRceGIwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYjMs
ICJceGNlXHhiMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmI0LCAiXHhjZVx4YWNceGNlXHhiOSIg
fSwKKyAgICB7IDB4MWZiNiwgIlx4Y2VceGIxXHhjZFx4ODIiIH0sCisgICAgeyAweDFmYjcsICJc
eGNlXHhiMVx4Y2RceDgyXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYmMsICJceGNlXHhiMVx4Y2Vc
eGI5IiB9LAorICAgIHsgMHgxZmJlLCAiXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYzIsICJceGUx
XHhiZFx4YjRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZjMywgIlx4Y2VceGI3XHhjZVx4YjkiIH0s
CisgICAgeyAweDFmYzQsICJceGNlXHhhZVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmM2LCAiXHhj
ZVx4YjdceGNkXHg4MiIgfSwKKyAgICB7IDB4MWZjNywgIlx4Y2VceGI3XHhjZFx4ODJceGNlXHhi
OSIgfSwKKyAgICB7IDB4MWZjYywgIlx4Y2VceGI3XHhjZVx4YjkiIH0sCisgICAgeyAweDFmZDIs
ICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODAiIH0sCisgICAgeyAweDFmZDMsICJceGNlXHhiOVx4
Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDFmZDYsICJceGNlXHhiOVx4Y2RceDgyIiB9LAor
ICAgIHsgMHgxZmQ3LCAiXHhjZVx4YjlceGNjXHg4OFx4Y2RceDgyIiB9LAorICAgIHsgMHgxZmUy
LCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgwIiB9LAorICAgIHsgMHgxZmUzLCAiXHhjZlx4ODVc
eGNjXHg4OFx4Y2NceDgxIiB9LAorICAgIHsgMHgxZmU0LCAiXHhjZlx4ODFceGNjXHg5MyIgfSwK
KyAgICB7IDB4MWZlNiwgIlx4Y2ZceDg1XHhjZFx4ODIiIH0sCisgICAgeyAweDFmZTcsICJceGNm
XHg4NVx4Y2NceDg4XHhjZFx4ODIiIH0sCisgICAgeyAweDFmZjIsICJceGUxXHhiZFx4YmNceGNl
XHhiOSIgfSwKKyAgICB7IDB4MWZmMywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0sCisgICAgeyAweDFm
ZjQsICJceGNmXHg4ZVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmY2LCAiXHhjZlx4ODlceGNkXHg4
MiIgfSwKKyAgICB7IDB4MWZmNywgIlx4Y2ZceDg5XHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgICB7
IDB4MWZmYywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0sCisgICAgeyAweDIxNjAsICJceGUyXHg4NVx4
YjAiIH0sCisgICAgeyAweDIxNjEsICJceGUyXHg4NVx4YjEiIH0sCisgICAgeyAweDIxNjIsICJc
eGUyXHg4NVx4YjIiIH0sCisgICAgeyAweDIxNjMsICJceGUyXHg4NVx4YjMiIH0sCisgICAgeyAw
eDIxNjQsICJceGUyXHg4NVx4YjQiIH0sCisgICAgeyAweDIxNjUsICJceGUyXHg4NVx4YjUiIH0s
CisgICAgeyAweDIxNjYsICJceGUyXHg4NVx4YjYiIH0sCisgICAgeyAweDIxNjcsICJceGUyXHg4
NVx4YjciIH0sCisgICAgeyAweDIxNjgsICJceGUyXHg4NVx4YjgiIH0sCisgICAgeyAweDIxNjks
ICJceGUyXHg4NVx4YjkiIH0sCisgICAgeyAweDIxNmEsICJceGUyXHg4NVx4YmEiIH0sCisgICAg
eyAweDIxNmIsICJceGUyXHg4NVx4YmIiIH0sCisgICAgeyAweDIxNmMsICJceGUyXHg4NVx4YmMi
IH0sCisgICAgeyAweDIxNmQsICJceGUyXHg4NVx4YmQiIH0sCisgICAgeyAweDIxNmUsICJceGUy
XHg4NVx4YmUiIH0sCisgICAgeyAweDIxNmYsICJceGUyXHg4NVx4YmYiIH0sCisgICAgeyAweDI0
YjYsICJceGUyXHg5M1x4OTAiIH0sCisgICAgeyAweDI0YjcsICJceGUyXHg5M1x4OTEiIH0sCisg
ICAgeyAweDI0YjgsICJceGUyXHg5M1x4OTIiIH0sCisgICAgeyAweDI0YjksICJceGUyXHg5M1x4
OTMiIH0sCisgICAgeyAweDI0YmEsICJceGUyXHg5M1x4OTQiIH0sCisgICAgeyAweDI0YmIsICJc
eGUyXHg5M1x4OTUiIH0sCisgICAgeyAweDI0YmMsICJceGUyXHg5M1x4OTYiIH0sCisgICAgeyAw
eDI0YmQsICJceGUyXHg5M1x4OTciIH0sCisgICAgeyAweDI0YmUsICJceGUyXHg5M1x4OTgiIH0s
CisgICAgeyAweDI0YmYsICJceGUyXHg5M1x4OTkiIH0sCisgICAgeyAweDI0YzAsICJceGUyXHg5
M1x4OWEiIH0sCisgICAgeyAweDI0YzEsICJceGUyXHg5M1x4OWIiIH0sCisgICAgeyAweDI0YzIs
ICJceGUyXHg5M1x4OWMiIH0sCisgICAgeyAweDI0YzMsICJceGUyXHg5M1x4OWQiIH0sCisgICAg
eyAweDI0YzQsICJceGUyXHg5M1x4OWUiIH0sCisgICAgeyAweDI0YzUsICJceGUyXHg5M1x4OWYi
IH0sCisgICAgeyAweDI0YzYsICJceGUyXHg5M1x4YTAiIH0sCisgICAgeyAweDI0YzcsICJceGUy
XHg5M1x4YTEiIH0sCisgICAgeyAweDI0YzgsICJceGUyXHg5M1x4YTIiIH0sCisgICAgeyAweDI0
YzksICJceGUyXHg5M1x4YTMiIH0sCisgICAgeyAweDI0Y2EsICJceGUyXHg5M1x4YTQiIH0sCisg
ICAgeyAweDI0Y2IsICJceGUyXHg5M1x4YTUiIH0sCisgICAgeyAweDI0Y2MsICJceGUyXHg5M1x4
YTYiIH0sCisgICAgeyAweDI0Y2QsICJceGUyXHg5M1x4YTciIH0sCisgICAgeyAweDI0Y2UsICJc
eGUyXHg5M1x4YTgiIH0sCisgICAgeyAweDI0Y2YsICJceGUyXHg5M1x4YTkiIH0sCisgICAgeyAw
eGZiMDAsICJceDY2XHg2NiIgfSwKKyAgICB7IDB4ZmIwMSwgIlx4NjZceDY5IiB9LAorICAgIHsg
MHhmYjAyLCAiXHg2Nlx4NmMiIH0sCisgICAgeyAweGZiMDMsICJceDY2XHg2Nlx4NjkiIH0sCisg
ICAgeyAweGZiMDQsICJceDY2XHg2Nlx4NmMiIH0sCisgICAgeyAweGZiMDUsICJceDczXHg3NCIg
fSwKKyAgICB7IDB4ZmIwNiwgIlx4NzNceDc0IiB9LAorICAgIHsgMHhmYjEzLCAiXHhkNVx4YjRc
eGQ1XHhiNiIgfSwKKyAgICB7IDB4ZmIxNCwgIlx4ZDVceGI0XHhkNVx4YTUiIH0sCisgICAgeyAw
eGZiMTUsICJceGQ1XHhiNFx4ZDVceGFiIiB9LAorICAgIHsgMHhmYjE2LCAiXHhkNVx4YmVceGQ1
XHhiNiIgfSwKKyAgICB7IDB4ZmIxNywgIlx4ZDVceGI0XHhkNVx4YWQiIH0KK307CisKKworI2Vu
ZGlmCisKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZU1hY3Jv
c0Zyb21JQ1UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxz
dGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcg
QmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLD
tnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFVuaWNvZGVNYWNyb3NGcm9tSUNVX2gKKyNkZWZpbmUgVW5pY29kZU1h
Y3Jvc0Zyb21JQ1VfaAorCisvLyBzb21lIGRlZmluZXMgZnJvbSBJQ1UKKworI2RlZmluZSBVMTZf
SVNfTEVBRChjKSAoKChjKSYweGZmZmZmYzAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfVFJB
SUwoYykgKCgoYykmMHhmZmZmZmMwMCk9PTB4ZGMwMCkKKyNkZWZpbmUgVTE2X1NVUlJPR0FURV9P
RkZTRVQgKCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKQorI2RlZmluZSBVMTZfR0VUX1NV
UFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpIFwKKyAgICAoKChVQ2hhcjMyKShsZWFkKTw8MTBVTCkr
KFVDaGFyMzIpKHRyYWlsKS1VMTZfU1VSUk9HQVRFX09GRlNFVCkKKworI2RlZmluZSBVMTZfTEVB
RChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSk+PjEwKSsweGQ3YzApCisj
ZGVmaW5lIFUxNl9UUkFJTChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSkm
MHgzZmYpfDB4ZGMwMCkKKworI2RlZmluZSBVX0lTX1NVUlJPR0FURShjKSAoKChjKSYweGZmZmZm
ODAwKT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfU0lOR0xFKGMpICFVX0lTX1NVUlJPR0FURShj
KQorI2RlZmluZSBVMTZfSVNfU1VSUk9HQVRFKGMpIFVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5l
IFUxNl9JU19TVVJST0dBVEVfTEVBRChjKSAoKChjKSYweDQwMCk9PTApCisKKyNkZWZpbmUgVTE2
X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwKKyAgICAoYyk9KHMpWyhpKSsrXTsgXAorICAgIGlm
KFUxNl9JU19MRUFEKGMpKSB7IFwKKyAgICAgICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBp
ZigoaSk8KGxlbmd0aCkgJiYgVTE2X0lTX1RSQUlMKF9fYzI9KHMpWyhpKV0pKSB7IFwKKyAgICAg
ICAgICAgICsrKGkpOyBcCisgICAgICAgICAgICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChj
KSwgX19jMik7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCit9CisKKyNkZWZpbmUgVV9NQVNLKHgp
ICgodWludDMyX3QpMTw8KHgpKQorCisjZW5kaWYKKwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3Jp
cHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzOTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxz
dGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcg
QmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLD
tnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFVuaWNvZGVHTGliX2gKKyNkZWZpbmUgVW5pY29kZUdMaWJfaAorCisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKworI2lu
Y2x1ZGUgPHd0Zi9HT3duUHRyLmg+CisKKyNpbmNsdWRlICJDYXNlZm9sZFRhYmxlRnJvbUdMaWIu
aCIKKyNpbmNsdWRlICJVbmljb2RlR0xpYlR5cGVzLmgiCisjaW5jbHVkZSAiVW5pY29kZU1hY3Jv
c0Zyb21JQ1UuaCIKKworbmFtZXNwYWNlIFdURiB7CisgICAgbmFtZXNwYWNlIFVuaWNvZGUgewor
CisgICAgICAgIGVudW0gRGlyZWN0aW9uIHsKKyAgICAgICAgICAgIExlZnRUb1JpZ2h0LAorICAg
ICAgICAgICAgUmlnaHRUb0xlZnQsCisgICAgICAgICAgICBFdXJvcGVhbk51bWJlciwKKyAgICAg
ICAgICAgIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yLAorICAgICAgICAgICAgRXVyb3BlYW5OdW1i
ZXJUZXJtaW5hdG9yLAorICAgICAgICAgICAgQXJhYmljTnVtYmVyLAorICAgICAgICAgICAgQ29t
bW9uTnVtYmVyU2VwYXJhdG9yLAorICAgICAgICAgICAgQmxvY2tTZXBhcmF0b3IsCisgICAgICAg
ICAgICBTZWdtZW50U2VwYXJhdG9yLAorICAgICAgICAgICAgV2hpdGVTcGFjZU5ldXRyYWwsCisg
ICAgICAgICAgICBPdGhlck5ldXRyYWwsCisgICAgICAgICAgICBMZWZ0VG9SaWdodEVtYmVkZGlu
ZywKKyAgICAgICAgICAgIExlZnRUb1JpZ2h0T3ZlcnJpZGUsCisgICAgICAgICAgICBSaWdodFRv
TGVmdEFyYWJpYywKKyAgICAgICAgICAgIFJpZ2h0VG9MZWZ0RW1iZWRkaW5nLAorICAgICAgICAg
ICAgUmlnaHRUb0xlZnRPdmVycmlkZSwKKyAgICAgICAgICAgIFBvcERpcmVjdGlvbmFsRm9ybWF0
LAorICAgICAgICAgICAgTm9uU3BhY2luZ01hcmssCisgICAgICAgICAgICBCb3VuZGFyeU5ldXRy
YWwKKyAgICAgICAgfTsKKworICAgICAgICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAg
ICAgICAgIERlY29tcG9zaXRpb25Ob25lLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkNhbm9u
aWNhbCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25Db21wYXQsCisgICAgICAgICAgICBEZWNv
bXBvc2l0aW9uQ2lyY2xlLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAgICAg
ICAgICAgRGVjb21wb3NpdGlvbkZvbnQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rp
b24sCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAgICAgICAgIERlY29t
cG9zaXRpb25Jc29sYXRlZCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAg
ICAgICAgICBEZWNvbXBvc2l0aW9uTmFycm93LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbk5v
QnJlYWssCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uU21hbGwsCisgICAgICAgICAgICBEZWNv
bXBvc2l0aW9uU3F1YXJlLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAgICAgICAg
ICAgIERlY29tcG9zaXRpb25TdXBlciwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNh
bCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25XaWRlLAorICAgICAgICB9OworCisgICAgICAg
IGVudW0gQ2hhckNhdGVnb3J5IHsKKyAgICAgICAgICAgIE5vQ2F0ZWdvcnkgPSAgMCwKKyAgICAg
ICAgICAgIE90aGVyX05vdEFzc2lnbmVkID0gVV9NQVNLKEdfVU5JQ09ERV9VTkFTU0lHTkVEKSwK
KyAgICAgICAgICAgIExldHRlcl9VcHBlcmNhc2UgPSBVX01BU0soR19VTklDT0RFX1VQUEVSQ0FT
RV9MRVRURVIpLAorICAgICAgICAgICAgTGV0dGVyX0xvd2VyY2FzZSA9IFVfTUFTSyhHX1VOSUNP
REVfTE9XRVJDQVNFX0xFVFRFUiksCisgICAgICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlID0gVV9N
QVNLKEdfVU5JQ09ERV9USVRMRUNBU0VfTEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9Nb2Rp
ZmllciA9IFVfTUFTSyhHX1VOSUNPREVfTU9ESUZJRVJfTEVUVEVSKSwKKyAgICAgICAgICAgIExl
dHRlcl9PdGhlciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfTEVUVEVSKSwKKworICAgICAgICAg
ICAgTWFya19Ob25TcGFjaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9OT05fU1BBQ0lOR19NQVJLKSwK
KyAgICAgICAgICAgIE1hcmtfRW5jbG9zaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9FTkNMT1NJTkdf
TUFSSyksCisgICAgICAgICAgICBNYXJrX1NwYWNpbmdDb21iaW5pbmcgPSBVX01BU0soR19VTklD
T0RFX0NPTUJJTklOR19NQVJLKSwKKworICAgICAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCA9
IFVfTUFTSyhHX1VOSUNPREVfREVDSU1BTF9OVU1CRVIpLAorICAgICAgICAgICAgTnVtYmVyX0xl
dHRlciA9IFVfTUFTSyhHX1VOSUNPREVfTEVUVEVSX05VTUJFUiksCisgICAgICAgICAgICBOdW1i
ZXJfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX05VTUJFUiksCisKKyAgICAgICAgICAg
IFNlcGFyYXRvcl9TcGFjZSA9IFVfTUFTSyhHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SKSwKKyAg
ICAgICAgICAgIFNlcGFyYXRvcl9MaW5lID0gVV9NQVNLKEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRP
UiksCisgICAgICAgICAgICBTZXBhcmF0b3JfUGFyYWdyYXBoID0gVV9NQVNLKEdfVU5JQ09ERV9Q
QVJBR1JBUEhfU0VQQVJBVE9SKSwKKworICAgICAgICAgICAgT3RoZXJfQ29udHJvbCA9IFVfTUFT
SyhHX1VOSUNPREVfQ09OVFJPTCksCisgICAgICAgICAgICBPdGhlcl9Gb3JtYXQgPSBVX01BU0so
R19VTklDT0RFX0ZPUk1BVCksCisgICAgICAgICAgICBPdGhlcl9Qcml2YXRlVXNlID0gVV9NQVNL
KEdfVU5JQ09ERV9QUklWQVRFX1VTRSksCisgICAgICAgICAgICBPdGhlcl9TdXJyb2dhdGUgPSBV
X01BU0soR19VTklDT0RFX1NVUlJPR0FURSksCisKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX0Rh
c2ggPSBVX01BU0soR19VTklDT0RFX0RBU0hfUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVu
Y3R1YXRpb25fT3BlbiA9IFVfTUFTSyhHX1VOSUNPREVfT1BFTl9QVU5DVFVBVElPTiksCisgICAg
ICAgICAgICBQdW5jdHVhdGlvbl9DbG9zZSA9IFVfTUFTSyhHX1VOSUNPREVfQ0xPU0VfUFVOQ1RV
QVRJT04pLAorICAgICAgICAgICAgUHVuY3R1YXRpb25fQ29ubmVjdG9yID0gVV9NQVNLKEdfVU5J
Q09ERV9DT05ORUNUX1BVTkNUVUFUSU9OKSwKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX090aGVy
ID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9QVU5DVFVBVElPTiksCisKKyAgICAgICAgICAgIFN5
bWJvbF9NYXRoID0gVV9NQVNLKEdfVU5JQ09ERV9NQVRIX1NZTUJPTCksCisgICAgICAgICAgICBT
eW1ib2xfQ3VycmVuY3kgPSBVX01BU0soR19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCksCisgICAg
ICAgICAgICBTeW1ib2xfTW9kaWZpZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX1NZTUJP
TCksCisgICAgICAgICAgICBTeW1ib2xfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX1NZ
TUJPTCksCisKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSA9IFVfTUFTSyhH
X1VOSUNPREVfSU5JVElBTF9QVU5DVFVBVElPTiksCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9G
aW5hbFF1b3RlID0gVV9NQVNLKEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElPTikKKyAgICAgICAg
fTsKKworICAgICAgICBpbmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGNoKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBhZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRvIEdMaWIgdXBzdHJl
YW0/CisKKyAgICAgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgICAgICBpbnQgZW5kID0g
R19OX0VMRU1FTlRTKGNhc2Vmb2xkX3RhYmxlKTsKKworICAgICAgICAgICAgaWYgKGNoID49IGNh
c2Vmb2xkX3RhYmxlW3N0YXJ0XS5jaCAmJgorICAgICAgICAgICAgICAgIGNoIDw9IGNhc2Vmb2xk
X3RhYmxlW2VuZCAtIDFdLmNoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoID09IGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmNoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdfdXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxm
XS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbGYgPT0gc3RhcnQpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2gg
PiBjYXNlZm9sZF90YWJsZVtoYWxmXS5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ID0gaGFsZjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kID0gaGFsZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlciAoY2gpOworICAgICAgICB9CisKKyAgICAg
ICAgaW5saW5lIGludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBj
b25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGdlcnJvcjsKKworICAgICAgICAgICAgR093blB0
cjxjaGFyPiB1dGY4c3JjOworICAgICAgICAgICAgdXRmOHNyYy5zZXQoZ191dGYxNl90b191dGY4
KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7CisgICAgICAgICAgICBp
ZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdPd25QdHI8Y2hh
cj4gdXRmOHJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjhyZXN1bHQuc2V0KGdfdXRmOF9jYXNlZm9s
ZCh1dGY4c3JjLmdldCgpLCAtMSkpOworCisgICAgICAgICAgICBsb25nIHV0ZjE2cmVzdWx0TGVu
Z3RoID0gLTE7CisgICAgICAgICAgICBHT3duUHRyPFVDaGFyPiB1dGYxNnJlc3VsdDsKKyAgICAg
ICAgICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdC5nZXQoKSwg
LTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAg
ICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodXRm
MTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqZXJyb3Ig
PSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LmdldCgpLCB1
dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAgICAgICAgICByZXR1cm4g
dXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgaW50IHRvTG93
ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50
IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdPd25QdHI8
R0Vycm9yPiBnZXJyb3I7CisKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOHNyYzsKKyAg
ICAgICAgICAgIHV0ZjhzcmMuc2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwg
MCwgJmdlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAg
ICAgICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhyZXN1bHQ7CisgICAg
ICAgICAgICB1dGY4cmVzdWx0LnNldChnX3V0Zjhfc3RyZG93bih1dGY4c3JjLmdldCgpLCAtMSkp
OworCisgICAgICAgICAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgICAg
ICBHT3duUHRyPFVDaGFyPiB1dGYxNnJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjE2cmVzdWx0LnNl
dChnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdC5nZXQoKSwgLTEsIDAsICZ1dGYxNnJlc3VsdExl
bmd0aCwgJmdlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdlcnJvcikgeworICAg
ICAgICAgICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1
bHRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqZXJyb3IgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNp
emVvZihVQ2hhcikpOworCisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmxpbmUgVUNoYXIzMiB0b0xvd2VyKFVDaGFyMzIgYykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl90b2xvd2VyKGMpOworICAgICAg
ICB9CisKKyAgICAgICAgaW5saW5lIFVDaGFyMzIgdG9VcHBlcihVQ2hhcjMyIGMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG91cHBlcihjKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlubGluZSBpbnQgdG9VcHBlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVu
Z3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGdlcnJvcjsKKworICAgICAgICAgICAg
R093blB0cjxjaGFyPiB1dGY4c3JjOworICAgICAgICAgICAgdXRmOHNyYy5zZXQoZ191dGYxNl90
b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7CisgICAgICAg
ICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdPd25Q
dHI8Y2hhcj4gdXRmOHJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjhyZXN1bHQuc2V0KGdfdXRmOF9z
dHJ1cCh1dGY4c3JjLmdldCgpLCAtMSkpOworCisgICAgICAgICAgICBsb25nIHV0ZjE2cmVzdWx0
TGVuZ3RoID0gLTE7CisgICAgICAgICAgICBHT3duUHRyPFVDaGFyPiB1dGYxNnJlc3VsdDsKKyAg
ICAgICAgICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdC5nZXQo
KSwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvci5vdXRQdHIoKSkpOworICAgICAg
ICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgICAgICplcnJvciA9IHRydWU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqZXJy
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LmdldCgp
LCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAgICAgICAgICByZXR1
cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgVUNoYXIz
MiB0b1RpdGxlQ2FzZShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBn
X3VuaWNoYXJfdG90aXRsZShjKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBib29sIGlz
QXJhYmljQ2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjID49
IDB4MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBib29s
IGlzRm9ybWF0Q2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBn
X3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOworICAgICAgICB9CisKKyAgICAg
ICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfU1BBQ0VfU0VQ
QVJBVE9SOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgaXNQcmludGFibGVDaGFy
KFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3By
aW50KGMpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlubGluZSBib29sIGlzRGlnaXQoVUNo
YXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ191bmljaGFyX2lzZGlnaXQo
Yyk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgYm9vbCBpc1B1bmN0KFVDaGFyMzIgYykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc3B1bmN0KGMpOworICAg
ICAgICB9CisKKyAgICAgICAgaW5saW5lIFVDaGFyMzIgbWlycm9yZWRDaGFyKFVDaGFyMzIgYykK
KyAgICAgICAgeworICAgICAgICAgICAgZ3VuaWNoYXIgbWlycm9yID0gMDsKKyAgICAgICAgICAg
IGdfdW5pY2hhcl9nZXRfbWlycm9yX2NoYXIoYywgJm1pcnJvcik7CisgICAgICAgICAgICByZXR1
cm4gbWlycm9yOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIENoYXJDYXRlZ29yeSBjYXRl
Z29yeShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjID4gMHhmZmZmKQor
ICAgICAgICAgICAgICAgIHJldHVybiBOb0NhdGVnb3J5OworCisgICAgICAgICAgICByZXR1cm4g
KENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBlKGMpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKFVDaGFyMzIgYykKKyAgICAgICAgewor
ICAgICAgICAgICAgUGFuZ29CaWRpVHlwZSB0eXBlID0gcGFuZ29fYmlkaV90eXBlX2Zvcl91bmlj
aGFyKGMpOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIFBB
TkdPX0JJRElfVFlQRV9MOiAKKyAgICAgICAgICAgICAgICByZXR1cm4gTGVmdFRvUmlnaHQ7Cisg
ICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOiAKKyAgICAgICAgICAgICAgICByZXR1
cm4gUmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRBcmFiaWM7CisgICAgICAgICAgICBjYXNl
IFBBTkdPX0JJRElfVFlQRV9MUkU6CisgICAgICAgICAgICAgICAgcmV0dXJuIExlZnRUb1JpZ2h0
RW1iZWRkaW5nOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUkxFOgorICAgICAg
ICAgICAgICAgIHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGluZzsKKyAgICAgICAgICAgIGNhc2Ug
UEFOR09fQklESV9UWVBFX0xSTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gTGVmdFRvUmlnaHRP
dmVycmlkZTsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1JMTzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRPdmVycmlkZTsKKyAgICAgICAgICAgIGNhc2UgUEFO
R09fQklESV9UWVBFX1BERjoKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9wRGlyZWN0aW9uYWxG
b3JtYXQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FTjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRXVyb3BlYW5OdW1iZXI7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9BTjoKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJhYmljTnVtYmVyOworICAgICAgICAg
ICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV1cm9w
ZWFuTnVtYmVyU2VwYXJhdG9yOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyVGVybWluYXRvcjsKKyAgICAg
ICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0NTOgorICAgICAgICAgICAgICAgIHJldHVybiBD
b21tb25OdW1iZXJTZXBhcmF0b3I7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9O
U006CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vblNwYWNpbmdNYXJrOworICAgICAgICAgICAg
Y2FzZSBQQU5HT19CSURJX1RZUEVfQk46CisgICAgICAgICAgICAgICAgcmV0dXJuIEJvdW5kYXJ5
TmV1dHJhbDsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0I6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEJsb2NrU2VwYXJhdG9yOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJ
X1RZUEVfUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VnbWVudFNlcGFyYXRvcjsKKyAgICAg
ICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1dTOgorICAgICAgICAgICAgICAgIHJldHVybiBX
aGl0ZVNwYWNlTmV1dHJhbDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIE90aGVyTmV1dHJhbDsKKyAgICAgICAgICAgIH0gCisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGdfdW5pY2hhcl9pc2xvd2VyKGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5l
IGludCBkaWdpdFZhbHVlKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGdfdW5pY2hhcl9kaWdpdF92YWx1ZShjKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSB1
aW50OF90IGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gcmV0dXJuIGdfdW5pY2hhcl9jb21iaW5pbmdfY2xhc3MoYyk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBEZWNvbXBvc2l0aW9uVHlwZSBkZWNv
bXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
CisgICAgICAgICAgICByZXR1cm4gRGVjb21wb3NpdGlvbk5vbmU7CisgICAgICAgIH0KKworICAg
ICAgICBpbmxpbmUgaW50IHVtZW1jYXNlY21wKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciog
YiwgaW50IGxlbikKKyAgICAgICAgeworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4YTsK
KyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOGI7CisKKyAgICAgICAgICAgIHV0ZjhhLnNl
dChnX3V0ZjE2X3RvX3V0ZjgoYSwgbGVuLCAwLCAwLCAwKSk7CisgICAgICAgICAgICB1dGY4Yi5z
ZXQoZ191dGYxNl90b191dGY4KGIsIGxlbiwgMCwgMCwgMCkpOworCisgICAgICAgICAgICBHT3du
UHRyPGNoYXI+IGZvbGRlZEE7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IGZvbGRlZEI7CisK
KyAgICAgICAgICAgIGZvbGRlZEEuc2V0KGdfdXRmOF9jYXNlZm9sZCh1dGY4YS5nZXQoKSwgLTEp
KTsKKyAgICAgICAgICAgIGZvbGRlZEIuc2V0KGdfdXRmOF9jYXNlZm9sZCh1dGY4Yi5nZXQoKSwg
LTEpKTsKKworICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdfdXRmOF9jb2xsYXRlKGZvbGRlZEEu
Z2V0KCksIGZvbGRlZEIuZ2V0KCkpOworCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisKKyAgICB9Cit9CisKKyNlbmRpZgorCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAz
ODYxOSkKKysrIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQyIEBACisyMDA4LTExLTIwICBEb21pbmlrIFLDtnR0c2NoZXMgIDxkb21pbmlrLnJvZXR0
c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTkxNAorICAgICAgICBbR1RLXSBJbXBsZW1lbnQgVW5pY29kZSBmdW5jdGlvbmFsaXR5IHVz
aW5nIEdMaWIKKworICAgICAgICBPcmlnaW5hbCBwYXRjaCBieSBKw7xyZyBCaWxsZXRlciBhbmQg
TmFpZW0gU2hhaWsuCisgICAgICAgIEltcGxlbWVudGluZyBVbmljb2RlIGZ1bmN0aW9uYWxpdHkg
YmFzZWQgb24gR0xpYi4KKworCU5vdyB1c2luZyBHT3duUHRyIGZvciBHTGliLWFsbG9jYXRlZCBv
YmplY3RzLgorCQorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHd0Zi91bmlj
b2RlL1VuaWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliOiBBZGRlZC4KKyAgICAg
ICAgKiB3dGYvdW5pY29kZS9nbGliL0Nhc2Vmb2xkVGFibGVGcm9tR0xpYi5oOiBBZGRlZC4KKyAg
ICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpVbmljb2RlOjopOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpmb2xkQ2FzZSk6CisgICAg
ICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjp0b1Vw
cGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dG9UaXRsZUNhc2UpOgorICAgICAgICAoV1RG
OjpVbmljb2RlOjppc0FyYWJpY0NoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0Zvcm1h
dENoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNlKToKKyAgICAg
ICAgKFdURjo6VW5pY29kZTo6aXNQcmludGFibGVDaGFyKToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6aXNEaWdpdCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzUHVuY3QpOgorICAgICAgICAo
V1RGOjpVbmljb2RlOjptaXJyb3JlZENoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjYXRl
Z29yeSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbik6CisgICAgICAgIChXVEY6
OlVuaWNvZGU6OmlzTG93ZXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpkaWdpdFZhbHVlKToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6Y29tYmluaW5nQ2xhc3MpOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjpkZWNvbXBvc2l0aW9uVHlwZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnVtZW1j
YXNlY21wKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliVHlwZXMuaDog
QWRkZWQuCisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlDVS5o
OiBBZGRlZC4KKwogMjAwOC0xMS0xOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogR05VbWFrZWZpbGUu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM4NjE5KQorKysgR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDE2IEBACiAjIEdsb2JhbCBm
bGFncyB0byBDUFAKIGdsb2JhbF9jcHBmbGFncyA6PQogCitpZiBVU0VfSUNVX1VOSUNPREUKIGds
b2JhbF9jcHBmbGFncyArPSBcCiAJLURXVEZfVVNFX0lDVV9VTklDT0RFPTEKK2VuZGlmCiAKK2lm
IFVTRV9HTElCX1VOSUNPREUKK2dsb2JhbF9jcHBmbGFncyArPSBcCisJLURXVEZfVVNFX0dMSUJf
VU5JQ09ERT0xCitlbmRpZgorCiAjIERlZmF1bHQgY29tcGlsZXIgZmxhZ3MKIGdsb2JhbF9jZmxh
Z3MgOj0gXAogCS1XYWxsIC1XIC1XY2FzdC1hbGlnbiAtV2NoYXItc3Vic2NyaXB0cyAtV3JldHVy
bi10eXBlIFwKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAzODYxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAKKzIwMDgtMTEtMjAgIERvbWluaWsgUsO2dHRzY2hlcyAg
PGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVuaWNvZGUg
ZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgT3JpZ2luYWwgcGF0Y2ggYnkgSsO8
cmcgQmlsbGV0ZXIgYW5kIE5haWVtIFNoYWlrLgorCisgICAgICAgIEFkZGVkIHByb2JpbmcgZm9y
IGEgaGFyZC1jb2RlZCBsaXN0cyBvZiB0ZXh0IGVuY29kaW5ncy4KKyAgICAgICAgVGhlIGJhc2lz
IG9mIHRoaXMgbGlzdCBpcyB0YWtlbiBmcm9tIHRoZSBlbmNvZGluZ3Mgc3VwcG9ydGVkIGJ5IGlj
b252LAorICAgICAgICB0aGVuIGV4dGVuZGVkIGJ5IHRpcy02MjAsIHdpbmRvd3MtMTI1MSwgZXVj
LWtyIGFuZCB3aW5kb3dzLTEyNTMuCisgICAgICAgIFByb2JpbmcgaXMgbmVjZXNzYXJ5IHdpdGgg
dGhlIGN1cnJlbnQgZGVzaWduIG9mIHRleHQgY29kZWNzCisgICAgICAgIGFzIGljb252LmggZG9l
cyBub3Qgc3VwcG9ydCBlbnVtZXJhdGluZyBhdmFpbGFibGUgZW5jb2RpbmdzLgorCisgICAgICAg
IENoYW5nZWQgYmVoYXZpb3VyIG9mIEdUSyB2ZXJzaW9uIG9mIHRleHRCcmVha0xhc3QgYW5kIHRl
eHRCcmVha0ZpcnN0CisgICAgICAgIHRvIGxvb2sgZm9yIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiBi
cmVha3MuCisKKwlOb3cgdXNpbmcgR093blB0ciBmb3IgR0xpYi1hbGxvY2F0ZWQgb2JqZWN0cy4K
KworICAgICAgICBUZXh0Q29kZWNHdGsgbm93IHN1cHBvcnRzIHBhcnRpYWxseSB0cmFuc21pdHRl
ZCBtdWx0aWJ5dGUgY2hhcmFjdGVycy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGV4
dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmV2aW91cyk6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEVuY29kaW5nOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRCYXNlVGV4dENvZGVjTWFw
cyk6CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRUZXh0Q29kZWNNYXBzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRX
b3JkQm91bmRhcnkpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJh
dG9yR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VXBJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0ZXJCcmVha0l0ZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbnRlbmNlQnJl
YWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtGaXJzdCk6CisgICAgICAg
IChXZWJDb3JlOjp0ZXh0QnJlYWtMYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha05l
eHQpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJldmlvdXMpOgorICAgICAgICAoV2Vi
Q29yZTo6dGV4dEJyZWFrUHJlY2VkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha0Zv
bGxvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtDdXJyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVGV4dEJyZWFrKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0
Q29kZWNHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJD
b3JlOjpuZXdUZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpp
c0VuY29kaW5nQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVn
aXN0ZXJFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVn
aXN0ZXJDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJh
c2VFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0
ZXJCYXNlQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJF
eHRlbmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpy
ZWdpc3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6
VGV4dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6flRleHRDb2Rl
Y0d0ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlbGVhc2VJQ29udik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RW5jb2Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29kZWNHdGs6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVj
R3RrLmg6IEFkZGVkLgorCiAyMDA4LTExLTIwICBKb2VyZyBCb3JuZW1hbm4gIDxqb2VyZy5ib3Ju
ZW1hbm5AdHJvbGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFu
bi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzg2MTkpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzY0LDE0ICsxMzY0LDkgQEAKIAlXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nSW1wbC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllcy5oIFwKLQlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRC
cmVha0l0ZXJhdG9ySUNVLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0
ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5j
cHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCBcCi0JV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCBcCkBAIC0xNzI0LDEwICsxNzE5LDMzIEBA
CiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVy
LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rl
ci5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVj
b2Rlci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURl
Y29kZXIuaAorCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0Vf
SUNVX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJ
Q1UuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAor
ZW5kaWYgIyBVU0VfSUNVX1VOSUNPREUKIAogIyAtLS0tCisjIGdsaWIgdW5pY29kZSBiYWNrZW5k
CisjIC0tLS0KK2lmIFVTRV9HTElCX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
Z3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9U
ZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKK2VuZGlmCisKKyMgLS0tLQogIyBjdXJsIGh0dHAgYmFj
a2VuZAogIyAtLS0tCiBpZiBVU0VfQ1VSTApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVy
IDxqQGJpdHJvbi5jaD4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
eHRCb3VuZGFyaWVzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJTdHJpbmdJ
bXBsLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBjaGFycywgaW50
IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0
b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisKKyAgICBpZiAoZm9yd2Fy
ZCkgeworICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24p
OworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICAg
ICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHByZWNlZWRpbmcgdGhl
IGJyZWFrCisgICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVyaWMuCisgICAgICAgICAgICBpZiAo
cG9zaXRpb24gPCBsZW4gJiYgZ191bmljaGFyX2lzYWxudW0oY2hhcnNbcG9zaXRpb24gLSAxXSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAgICBwb3NpdGlv
biA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVh
a1ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4
dEJyZWFrRG9uZSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUg
Y2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVt
ZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgZ191bmljaGFyX2lzYWxudW0o
Y2hhcnNbcG9zaXRpb25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAg
ICAgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgZmluZFdvcmRC
b3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBz
dGFydCwgaW50KiBlbmQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFr
SXRlcmF0b3IoY2hhcnMsIGxlbik7CisgICAgKmVuZCA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwg
cG9zaXRpb24pOworICAgIGlmICgqZW5kIDwgMCkKKyAgICAgICAgKmVuZCA9IHRleHRCcmVha0xh
c3QoaXQpOworICAgICpzdGFydCA9IHRleHRCcmVha1ByZXZpb3VzKGl0KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29k
ZWNHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENv
ZGVjR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4
dENvZGVjR3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55
cG9wLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24u
Y2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJv
ZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGV4dENvZGVjR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisKK3VzaW5nIHN0ZDo6YXV0b19wdHI7Cit1c2luZyBzdGQ6Om1pbjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisKKworLy8gYXBwZW5kT21pdHRpbmdCT00gaXMgZ29uZSAo
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzMzODApLCBzbyB3ZSBuZWVkIHRvIGF2
b2lkIGdlbmVyYXRpbmcgZXh0cmEgQk9NJ3MKKy8vIGhlcmUuIFRoaXMgY2FuIGJlIGFjaGlldmVk
IGJ5IHNwZWNpZnlpbmcgdGhlIFVURi0xNiBjb2RlY3MnIGVuZGlhbm5lc3MgZXhwbGljaXRseSB3
aGVuIGluaXRpYWxpemluZyBpY29udgorCisjaWYgKEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJ
QU4pCisgICAgY29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRlcm5hbEVu
Y29kaW5nTmFtZSA9ICJVVEYtMTZCRSI7CisjZWxzZSAKKyAgICBjb25zdCBnY2hhciogV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdOYW1lID0gIlVURi0xNkxFIjsKKyNl
bmRpZgorCisKKy8vIGxpc3Qgb2YgdGV4dCBlbmNvZGluZ3MgYW5kIHRoZWlyIGFsaWFzZXMKKy8v
IHRoZSBmaXJzdCBlbnRyeS8iYWxpYXMiIGlzIHRoZSBjYW5vbmljYWwgbmFtZSwgZWFjaCBhbGlh
cyBsaXN0IG11c3QgYmUgdGVybWluYXRlZCBieSBhIDAKKworLy8gVW5pY29kZQorVGV4dENvZGVj
R3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1VURl84ICAg
ICAgICAgICAgPSB7ICJVVEYtOCIsIDB9OyAKKworLy8gV2VzdGVybgorVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzEgICAg
ICAgPSB7ICJJU08tODg1OS0xIiwgIkNQODE5IiwgIklCTTgxOSIsICJJU08tSVItMTAwIiwgIklT
Tzg4NTktMSIsICJJU09fODg1OS0xIiwgIklTT184ODU5LTE6MTk4NyIsICAiTDEiLCAiTEFUSU4x
IiwgIkNTSVNPTEFUSU4xIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4gICAgICAgICA9IHsgIk1BQ1JPTUFOIiwg
Ik1BQyIsICJNQUNJTlRPU0giLCAiQ1NNQUNJTlRPU0giLCAwfTsKKworLy8gSmFwYW5lc2UKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19T
SElGVF9KSVMgICAgICAgID0geyAiU0hJRlRfSklTIiwgIk1TX0tBTkpJIiwgIlNISUZULUpJUyIs
ICJTSklTIiwgIkNTU0hJRlRKSVMiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3Qg
VGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19FVUNfSlAgICAgICAgICAgID0geyAiRVVDX0pQ
IiwgIkVVQy1KUCIsICJFVUNKUCIsICJFWFRFTkRFRF9VTklYX0NPREVfUEFDS0VEX0ZPUk1BVF9G
T1JfSkFQQU5FU0UiLCAiQ1NFVUNQS0RGTVRKQVBBTkVTRSIsIDB9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQICAg
ICAgPSB7ICJJU08tMjAyMi1KUCIsIDB9OworCisvLyBUcmFkaXRpb25hbCBDaGluZXNlCitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQklH
NSAgICAgICAgICAgICA9IHsgIkJJRzUiLCAiQklHLTUiLCAiQklHLUZJVkUiLCAiQklHNSIsICJC
SUdGSVZFIiwgIkNOLUJJRzUiLCAiQ1NCSUc1IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQklHNV9IS1NDUyAgICAgICA9IHsg
IkJJRzUtSEtTQ1MiLCAiQklHNS1IS1NDUzoyMDA0IiwgIkJJRzVIS1NDUyIsIDB9OworVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTUw
ICAgICAgICAgICAgPSB7ICJDUDk1MCIsIDB9OworCisvLyBLb3JlYW4KK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiAg
ICAgID0geyAiSVNPLTIwMjItS1IiLCAiQ1NJU08yMDIyS1IiLCAwfTsKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDk0OSAgICAgICAg
ICAgID0geyAiQ1A5NDkiLCAiVUhDIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0
IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfRVVDX0tSICAgICAgICAgICA9IHsgIkVVQy1L
UiIsICJDU0VVQ0tSIiwgMCB9OworCisvLyBBcmFiaWMKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlh
c0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV82ICAgICAgID0geyAi
SVNPLTg4NTktNiIsICJBUkFCSUMiLCAiQVNNTy03MDgiLCAiRUNNQS0xMTQiLCAiSVNPLUlSLTEy
NyIsICJJU084ODU5LTYiLCAiSVNPXzg4NTktNiIsICJJU09fODg1OS02OjE5ODciLCAiQ1NJU09M
QVRJTkFSQUJJQyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NiAgICAgICAgICAgPSB7ICJDUDEyNTYiLCAiTVMtQVJB
QiIsICJXSU5ET1dTLTEyNTYiLCAwfTsKKworLy8gSGVicmV3CitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOCAgICAgICA9
IHsgIklTTy04ODU5LTgiLCAiSEVCUkVXIiwgIklTTy04ODU5LTgiLCAiSVNPLUlSLTEzOCIsICJJ
U084ODU5LTgiLCAiSVNPXzg4NTktOCIsICJJU09fODg1OS04OjE5ODgiLCAiQ1NJU09MQVRJTkhF
QlJFVyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0NQMTI1NSAgICAgICAgICAgPSB7ICJDUDEyNTUiLCAiTVMtSEVCUiIsICJX
SU5ET1dTLTEyNTUiLCAwfTsKKworLy8gR3JlZWsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV83ICAgICAgID0geyAiSVNP
LTg4NTktNyIsICJFQ01BLTExOCIsICJFTE9UXzkyOCIsICJHUkVFSyIsICJHUkVFSzgiLCAiSVNP
LUlSLTEyNiIsICJJU084ODU5LTciLCAiSVNPXzg4NTktNyIsICJJU09fODg1OS03OjE5ODciLCAi
SVNPXzg4NTktNzoyMDAzIiwgIkNTSSIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQODY5ICAgICAgICAgICAgPSB7ICJDUDg2
OSIsICI4NjkiLCAiQ1AtR1IiLCAiSUJNODY5IiwgIkNTSUJNODY5IiwgMH07CitUZXh0Q29kZWNH
dGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfV0lORE9XU18x
MjUzICAgICA9IHsgIldJTkRPV1MtMTI1MyIsIDAgfTsKKworLy8gQ3lyaWxsaWMKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1
OV81ICAgICAgID0geyAiSVNPLTg4NTktNSIsICJDWVJJTExJQyIsICJJU08tSVItMTQ0IiwgIklT
Tzg4NTktNSIsICJJU09fODg1OS01IiwgIklTT184ODU5LTU6MTk4OCIsICJDU0lTT0xBVElOQ1lS
SUxMSUMiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjpt
X2NvZGVjQWxpYXNlc19LT0k4X1IgICAgICAgICAgID0geyAiS09JOC1SIiwgIkNTS09JOFIiLCAw
fTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19DUDg2NiAgICAgICAgICAgID0geyAiQ1A4NjYiLCAiODY2IiwgIklCTTg2NiIsICJDU0lC
TTg2NiIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0tPSThfVSAgICAgICAgICAgPSB7ICJLT0k4LVUiLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19XSU5ET1dT
XzEyNTEgICAgID0geyAiV0lORE9XUy0xMjUxIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUMgICAgICA9IHsg
Ik1BQ0NZUklMTElDIiwgMH07CisKKy8vIFRoYWkKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDg3NCAgICAgICAgICAgID0geyAiQ1A4
NzQiLCAiV0lORE9XUy04NzQiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19USVNfNjIwICAgICAgICAgID0geyAiVElTLTYyMCIs
IDB9OworCisvLyBTaW1wbGlmaWVkIENoaW5lc2UKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19HQksgICAgICAgICAgICAgID0geyAiR0JL
IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfSFogICAgICAgICAgICAgICA9IHsgIkhaIiwgIkhaLUdCLTIzMTIiLCAwfTsKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19H
QjE4MDMwICAgICAgICAgID0geyAiR0IxODAzMCIsIDB9OworCisvLyBDZW50cmFsIEV1cm9wZWFu
CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFz
ZXNfSVNPXzg4NTlfMiAgICAgICA9IHsgIklTTy04ODU5LTIiLCAiSVNPLUlSLTEwMSIsICJJU084
ODU5LTIiLCAiSVNPXzg4NTktMiIsICJJU09fODg1OS0yOjE5ODciLCAiTDIiLCAiTEFUSU4yIiwg
IkNTSVNPTEFUSU4yIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2Rl
Y0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjUwICAgICAgICAgICA9IHsgIkNQMTI1MCIsICJNUy1F
RSIsICJXSU5ET1dTLTEyNTAiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFID0geyAiTUFDQ0VOVFJB
TEVVUk9QRSIsIDB9OworCisvLyBWaWV0bmFtZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU4ICAgICAgICAgICA9IHsgIkNQ
MTI1OCIsICJXSU5ET1dTLTEyNTgiLCAwfTsKKworLy8gVHVya2lzaAorVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NCAgICAgICAg
ICAgPSB7ICJDUDEyNTQiLCAiTVMtVFVSSyIsICJXSU5ET1dTLTEyNTQiLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1
OV85ICAgICAgID0geyAiSVNPLTg4NTktOSIsICJJU08tSVItMTQ4IiwgIklTTzg4NTktOSIsICJJ
U09fODg1OS05IiwgIklTT184ODU5LTk6MTk4OSIsICJMNSIsICJMQVRJTjUiLCAiQ1NJU09MQVRJ
TjUiLCAwfTsKKworLy8gQmFsdGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU3ICAgICAgICAgICA9IHsgIkNQMTI1NyIsICJX
SU5CQUxUUklNIiwgIldJTkRPV1MtMTI1NyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzQgICAgICAgPSB7ICJJ
U08tODg1OS00IiwgIklTTy1JUi0xMTAiLCAiSVNPODg1OS00IiwgIklTT184ODU5LTQiLCAiSVNP
Xzg4NTktNDoxOTg4IiwgIkw0IiwgIkxBVElONCIsICJDU0lTT0xBVElONCIsIDB9OworCitnY29u
c3Rwb2ludGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkJhc2VDb2RlY0xpc3RbXSA9IHsg
CisgICAgLy8gVW5pY29kZQorICAgICZtX2NvZGVjQWxpYXNlc19VVEZfOCwKKworICAgIC8vIFdl
c3Rlcm4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMQorfTsKKworZ2NvbnN0cG9pbnRl
ciBjb25zdCBUZXh0Q29kZWNHdGs6Om1faWNvbnZFeHRlbmRlZENvZGVjTGlzdFtdID0gCit7Cisg
ICAgLy8gV2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19NQUNST01BTiwKKworICAgIC8vIEph
cGFuZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX1NISUZUX0pJUywKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfRVVDX0pQLAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9KUCwKKworICAgIC8vIFNp
bXBsaWZpZWQgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19CSUc1LAorICAgICZtX2NvZGVj
QWxpYXNlc19CSUc1X0hLU0NTLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDk1MCwKKworICAgIC8v
IEtvcmVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiwKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfQ1A5NDksCisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19LUiwKKworICAgIC8vIEFyYWJp
YworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV82LAorICAgICZtX2NvZGVjQWxpYXNlc19D
UDEyNTYsCisgICAgCisgICAgLy8gSGVicmV3CisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5
XzgsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NSwKKyAgICAKKyAgICAvLyBHcmVlaworICAg
ICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV83LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2OSwK
KyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzLAorICAgIAorICAgIC8vIEN5cmlsbGlj
CisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUsCisgICAgJm1fY29kZWNBbGlhc2VzX0tP
SThfUiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4NjYsCisgICAgJm1fY29kZWNBbGlhc2VzX0tP
SThfVSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxLAorICAgICZtX2NvZGVjQWxp
YXNlc19NQUNDWVJJTExJQywKKyAgICAKKyAgICAvLyBUaGFpCisgICAgJm1fY29kZWNBbGlhc2Vz
X0NQODc0LAorICAgICZtX2NvZGVjQWxpYXNlc19USVNfNjIwLAorICAgIAorICAgIC8vIFRyYWRp
dGlvbmFsIENoaW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0JLLAorICAgICZtX2NvZGVjQWxp
YXNlc19IWiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0IxODAzMCwKKyAgICAKKyAgICAvLyBDZW50
cmFsIEV1cm9wZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIsCisgICAgJm1fY29k
ZWNBbGlhc2VzX0NQMTI1MCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSwK
KyAgICAKKyAgICAvLyBWaWV0bmFtZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1OCwKKyAg
ICAKKyAgICAvLyBUdXJraXNoCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NCwKKyAgICAmbV9j
b2RlY0FsaWFzZXNfSVNPXzg4NTlfOSwKKyAgICAKKyAgICAvLyBCYWx0aWMKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfQ1AxMjU3LAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV80Cit9OworCisK
K2NvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OworICAgIAorCitzdGF0
aWMgYXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIHRvbyBu
b2lzeSBpZiBlYWNoIFVURi04IGNvZGVjIGNyZWF0aW9uIGlzIGxvZ2dlZAorICAgIC8vIGlmIChz
dHJjbXAoZW5jb2RpbmcubmFtZSgpLCAiVVRGLTgiKSkKKyAgICAvLyAgICAgTE9HKFRleHRDb252
ZXJzaW9uLCAiY3JlYXRpbmcgbmV3IHRleHQgY29kZWMgZm9yIGVuY29kaW5nIG5hbWUgJXMiLCBl
bmNvZGluZy5uYW1lKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gYXV0b19wdHI8VGV4dENvZGVj
PihuZXcgVGV4dENvZGVjR3RrKGVuY29kaW5nKSk7Cit9CisKK2dib29sZWFuIFRleHRDb2RlY0d0
azo6aXNFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciogZW5jTmFtZSkKK3sKKyAgICBHSUNv
bnYgdGVzdGVyOworICAgIC8vIHRlc3QgZGVjb2RpbmcKKyAgICB0ZXN0ZXIgPSBnX2ljb252X29w
ZW4obV9pbnRlcm5hbEVuY29kaW5nTmFtZSwgZW5jTmFtZSk7CisgICAgaWYgKHRlc3RlciA9PSBy
ZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIExPR19FUlJPUigiJXMgbm90
IGRlY29kYWJsZSA9PiBub3QgYXZhaWxhYmxlISIsIGVuY05hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAg
ICAgICAvLyB0ZXN0IGVuY29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNO
YW1lLCBtX2ludGVybmFsRW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSByZWlu
dGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIiVzIG5v
dCBlbmNvZGFibGUgPT4gbm90IGF2YWlsYWJsZSEiLCBlbmNOYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdfaWNvbnZfY2xvc2Uo
dGVzdGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCogY29u
c3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlzdExlbmd0aCA9IDA7CisgICAg
aWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRlZENv
ZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRDb2Rl
Y0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdM
aXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2Yo
bV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29k
ZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4o
ZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAgICAgaW50IGNvZGVjQ291bnQgPSAtMTsKKyAgICAgICAg
Y29uc3QgZ2NoYXIgKmNhbm9uaWNhbE5hbWUsICpjdXJyZW50QWxpYXM7CisgICAgICAgIGJvb2wg
Y2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIGZvciBlYWNo
IG9mIHRoZSBhbGlhcyBsaXN0czoKKyAgICAgICAgLy8gYmFpbCBvdXQgaWYgY2Fub25pY2FsIGlz
IG5vdCBhdmFpbGFibGUsCisgICAgICAgIC8vIHRoZW4gY29udGludWUgdGVzdGluZyBlYWNoIGFs
aWFzLCAKKyAgICAgICAgLy8gaWYgYXZhaWxhYmxlLCBhZGQgaXQgdG8gdGhlIGxpc3QsIG1hcHBp
bmcgaXQgdG8gaXRzIGNhbm9uaWNhbCBuYW1lCisKKyAgICAgICAgd2hpbGUgKChjdXJyZW50QWxp
YXMgPSAoKmNvZGVjQWxpYXNlcylbKytjb2RlY0NvdW50XSkgJiYgY2Fub25pY2FsQXZhaWxhYmxl
KSB7CisgICAgICAgICAgICBib29sIGN1cnJlbnRBdmFpbGFibGUgPSBpc0VuY29kaW5nQXZhaWxh
YmxlKGN1cnJlbnRBbGlhcyk7CisKKyAgICAgICAgICAgIGlmIChjb2RlY0NvdW50ID09IDAgJiYg
Y3VycmVudEF2YWlsYWJsZSkgeworICAgICAgICAgICAgICAgIGNhbm9uaWNhbE5hbWUgPSBjdXJy
ZW50QWxpYXM7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBMT0dfVkVSQk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVu
Y29kaW5nIGNhbm9uaWNhbCAlcyIsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgIHJl
Z2lzdHJhcihjYW5vbmljYWxOYW1lLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY29kZWNDb3VudCA9PSAwICYmICFjdXJyZW50QXZhaWxhYmxlKQorICAgICAgICAgICAg
ICAgIGNhbm9uaWNhbEF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAoY29k
ZWNDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShj
dXJyZW50QWxpYXMpKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19WRVJCT1NFKFRleHRDb252
ZXJzaW9uLCAicmVnaXN0ZXJpbmcgZW5jb2RpbmcgbmFtZSBhbGlhcyAlcyB0byBjYW5vbmljYWwg
JXMiLCBjdXJyZW50QWxpYXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RyYXIoY3VycmVudEFsaWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNH
dGs6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0
ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNp
Z25lZCBpbnQgbGlzdExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVu
Y29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0
aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7
CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVv
ZihncG9pbnRlcik7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBs
aXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9
IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAgICAg
Ly8gYnkgY29udmVudGlvbiwgdGhlIGZpcnN0ICJhbGlhcyIgc2hvdWxkIGJlIHRoZSBjYW5vbmlj
YWwgbmFtZSwgc2VlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcyBsaXN0cyAKKyAgICAgICAg
Y29uc3QgZ2NoYXIgKmNvZGVjTmFtZSA9ICgqY29kZWNBbGlhc2VzKVswXTsKKyAgICAgICAgaWYg
KGlzRW5jb2RpbmdBdmFpbGFibGUoY29kZWNOYW1lKSkKKyAgICAgICAgICAgIHJlZ2lzdHJhcihj
b2RlY05hbWUsIG5ld1RleHRDb2RlY0d0aywgMCk7CisgICAgfQorfQorCit2b2lkIFRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVn
aXN0cmFyKQoreworICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhyZWdpc3RyYXIsIGZhbHNlKTsK
K30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdGVyQ29kZWNzKHJlZ2lzdHJhciwgZmFsc2Up
OworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMo
RW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29kaW5n
TmFtZXMocmVnaXN0cmFyLCB0cnVlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
RXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdp
c3RlckNvZGVjcyhyZWdpc3RyYXIsIHRydWUpOworfQorCitUZXh0Q29kZWNHdGs6OlRleHRDb2Rl
Y0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNv
ZGluZykKKyAgICAsIG1fbnVtQnVmZmVyZWRCeXRlcygwKQorICAgICwgbV9pY29udkRlY29kZXIo
cmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKHJlaW50
ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCit7Cit9CisKK1RleHRDb2RlY0d0azo6flRleHRDb2Rl
Y0d0aygpCit7CisgICAgcmVsZWFzZUlDb252KCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpy
ZWxlYXNlSUNvbnYoKSBjb25zdAoreworICAgIGlmIChtX2ljb252RGVjb2RlciAhPSByZWludGVy
cHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkRl
Y29kZXIpOworICAgICAgICBtX2ljb252RGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252
PigtMSk7CisgICAgfQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSByZWludGVycHJldF9jYXN0
PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVuY29kZXIpOwor
ICAgICAgICBtX2ljb252RW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSk7Cisg
ICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+
KC0xKSk7CisKKyAgICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2ludGVybmFsRW5j
b2RpbmdOYW1lLCBtX2VuY29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpj
cmVhdGVJQ29udkVuY29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2RlciA9
PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKworICAgIG1faWNvbnZFbmNvZGVyID0g
Z19pY29udl9vcGVuKG1fZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2RpbmdOYW1lKTsK
K30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXpl
X3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikK
K3sKKyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2RpbmcuCisg
ICAgaWYgKG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsK
KyAgICAgICAgY3JlYXRlSUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2ljb252RGVj
b2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKyAgICAgICAgaWYgKG1faWNv
bnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBlbmNv
ZGluZyB3YXMgaW4gdGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHNpemVfdCBjb3VudFdyaXR0ZW4sIGNvdW50UmVhZCwgY29udmVy
c2lvbkxlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBjb252ZXJzaW9uQnl0ZXM7CisgICAgY2hhciog
cHJlZml4ZWRCeXRlcyA9IDA7CisKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzKSB7CisgICAg
ICAgIGNvbnZlcnNpb25MZW5ndGggPSBsZW5ndGggKyBtX251bUJ1ZmZlcmVkQnl0ZXM7CisgICAg
ICAgIHByZWZpeGVkQnl0ZXMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjb252ZXJz
aW9uTGVuZ3RoKSk7CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzLCBtX2J1ZmZlcmVkQnl0
ZXMsIG1fbnVtQnVmZmVyZWRCeXRlcyk7CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzICsg
bV9udW1CdWZmZXJlZEJ5dGVzLCBieXRlcywgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGNv
bnZlcnNpb25CeXRlcyA9IHByZWZpeGVkQnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBhbGwg
YnVmZmVyZWQgYnl0ZXMgYXJlIGNvbnN1bWVkIG5vdworICAgICAgICBtX251bUJ1ZmZlcmVkQnl0
ZXMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIG5vIHByZXZpb3VzbHkgYnVmZmVyZWQg
cGFydGlhbCBkYXRhLCAKKyAgICAgICAgLy8ganVzdCBjb252ZXJ0IHRoZSBkYXRhIHRoYXQgd2Fz
IHBhc3NlZCBpbgorICAgICAgICBjb252ZXJzaW9uQnl0ZXMgPSBieXRlczsKKyAgICAgICAgY29u
dmVyc2lvbkxlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
OworICAgIEdPd25QdHI8VUNoYXI+IGJ1ZmZlcjsKKworICAgIGJ1ZmZlci5vdXRQdHIoKSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihnX2NvbnZlcnRfd2l0aF9pY29udihjb252ZXJzaW9uQnl0
ZXMsIGNvbnZlcnNpb25MZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAmY291bnRSZWFkLCAmY291bnRX
cml0dGVuLCAmZXJyLm91dFB0cigpKSk7IAorCisKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExP
R19FUlJPUigiR0lDb252IGNvbnZlcnNpb24gZXJyb3IiKTsKKyAgICAgICAgbV9udW1CdWZmZXJl
ZEJ5dGVzID0gMDsgLy8gcmVzZXQgc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVjb2Rl
CisgICAgICAgIGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorICAgIAorICAgIC8vIFBhcnRpYWwgaW5wdXQgYXQgdGhlIGVuZCBvZiB0aGUg
c3RyaW5nIG1heSBub3QgcmVzdWx0IGluIGFuIGVycm9yIGJlaW5nIHJhaXNlZC4gCisgICAgLy8g
RnJvbSB0aGUgZ25vbWUgbGlicmFyeSBkb2N1bWVudGF0aW9uIG9uIGdfY29udmVydF93aXRoX2lj
b252OgorICAgIC8vICJFdmVuIGlmIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLCB0aGlz
IG1heSBiZSBsZXNzIHRoYW4gbGVuIGlmIHRoZXJlIHdlcmUgcGFydGlhbCBjaGFyYWN0ZXJzIGF0
IHRoZSBlbmQgb2YgdGhlIGlucHV0LiIKKyAgICAvLyBUaGF0J3Mgd2h5IHdlIG5lZWQgdG8gY29t
cGFyZSBjb252ZXJzaW9uTGVuZ3RoIGFnYWluc3QgY291bnRSZWFkIAorCisgICAgbV9udW1CdWZm
ZXJlZEJ5dGVzID0gY29udmVyc2lvbkxlbmd0aCAtIGNvdW50UmVhZDsKKyAgICBpZiAobV9udW1C
dWZmZXJlZEJ5dGVzID4gMCkgeworICAgICAgICBpZiAoZmx1c2gpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiUGFydGlhbCBieXRlcyBhdCBlbmQgb2YgaW5wdXQgd2hpbGUgZmx1c2ggcmVxdWVz
dGVkLiIpOworICAgICAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsgLy8gcmVzZXQgc3Rh
dGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVjb2RlCisgICAgICAgICAgICBmYXN0RnJlZShw
cmVmaXhlZEJ5dGVzKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQor
ICAgICAgICBtZW1jcHkobV9idWZmZXJlZEJ5dGVzLCBjb252ZXJzaW9uQnl0ZXMgKyBjb3VudFJl
YWQsIG1fbnVtQnVmZmVyZWRCeXRlcyk7CisgICAgfQorCisgICAgZmFzdEZyZWUocHJlZml4ZWRC
eXRlcyk7CisgICAgCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisKKyAgICByZXN1bHQuYXBw
ZW5kKGJ1ZmZlci5nZXQoKSwgY291bnRXcml0dGVuIC8gc2l6ZW9mKFVDaGFyKSk7CisKKyAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworfQorCitDU3RyaW5nIFRleHRDb2RlY0d0azo6
ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJs
ZUhhbmRsaW5nIGhhbmRsaW5nKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4g
IiI7CisKKyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+
KC0xKSkKKyAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7CisgICAgaWYgKG1faWNvbnZFbmNv
ZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisgICAgICAgIHJldHVybiBDU3Ry
aW5nKCk7CisKKyAgICBzaXplX3QgY291bnQ7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyOwor
ICAgIEdPd25QdHI8Y2hhcj4gYnVmZmVyOworCisgICAgYnVmZmVyLm91dFB0cigpID0gZ19jb252
ZXJ0X3dpdGhfaWNvbnYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcmFjdGVycyks
IGxlbmd0aCAqIHNpemVvZihVQ2hhciksIG1faWNvbnZFbmNvZGVyLCAwLCAmY291bnQsICZlcnIu
b3V0UHRyKCkpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHSUNvbnYgY29u
dmVyc2lvbiBlcnJvciIpOworICAgICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIH0KKworICAg
IENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZyhidWZmZXIuZ2V0KCksIGNvdW50KTsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9y
R3RrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTGFycyBLbm9sbCA8bGFyc0B0cm9sbHRlY2guY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
RG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29t
PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgi
CisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIFVCcmVha0l0ZXJhdG9yVHlwZSB7CisgICAg
VUJSS19DSEFSQUNURVIsCisgICAgVUJSS19XT1JELAorICAgIFVCUktfTElORSwKKyAgICBVQlJL
X1NFTlRFTkNFCit9OworCitjbGFzcyBUZXh0QnJlYWtJdGVyYXRvciB7CitwdWJsaWM6CisgICAg
VUJyZWFrSXRlcmF0b3JUeXBlIG1fdHlwZTsKKyAgICBpbnQgbV9sZW5ndGg7CisgICAgUGFuZ29M
b2dBdHRyKiBtX2xvZ19hdHRyczsKKworICAgIGludCBtX2luZGV4OworfTsKKworc3RhdGljIFRl
eHRCcmVha0l0ZXJhdG9yKiBzZXRVcEl0ZXJhdG9yKGJvb2wmIGNyZWF0ZWRJdGVyYXRvciwgVGV4
dEJyZWFrSXRlcmF0b3IqJiBpdGVyYXRvciwKKyAgICBVQnJlYWtJdGVyYXRvclR5cGUgdHlwZSwg
Y29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWNyZWF0ZWRJdGVyYXRvcikgeworICAgICAgICBp
dGVyYXRvciA9IG5ldyBUZXh0QnJlYWtJdGVyYXRvcigpOworICAgICAgICBjcmVhdGVkSXRlcmF0
b3IgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGxvbmcgdXRmOGxlbjsKKyAgICBHT3duUHRyPGNoYXI+IHV0Zjg7CisgICAgdXRmOC5z
ZXQoZ191dGYxNl90b191dGY4KHN0cmluZywgbGVuZ3RoLCAwLCAmdXRmOGxlbiwgMCkpOworCisg
ICAgLy8gRklYTUU6IGFzc3VtZXMgbm8gc3Vycm9nYXRlIHBhaXJzCisKKyAgICBpdGVyYXRvci0+
bV90eXBlID0gdHlwZTsKKyAgICBpdGVyYXRvci0+bV9sZW5ndGggPSBsZW5ndGg7CisgICAgaXRl
cmF0b3ItPm1fbG9nX2F0dHJzID0gZ19uZXcwKFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7Cisg
ICAgaXRlcmF0b3ItPm1faW5kZXggPSAtMTsKKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHV0Zjgu
Z2V0KCksIHV0ZjhsZW4sIC0xLCAwLCBpdGVyYXRvci0+bV9sb2dfYXR0cnMsIGxlbmd0aCArIDEp
OworCisgICAgcmV0dXJuIGl0ZXJhdG9yOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogY2hhcmFj
dGVyQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAg
IHN0YXRpYyBib29sIGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAg
c3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOwor
ICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLAor
ICAgICAgICBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgc3Ry
aW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3Io
Y29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVh
dGVkV29yZEJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNy
ZWF0ZWRXb3JkQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljV29yZEJyZWFrSXRlcmF0b3Is
IFVCUktfV09SRCwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogbGlu
ZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBjcmVhdGVkTGluZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMg
VGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBz
ZXRVcEl0ZXJhdG9yKGNyZWF0ZWRMaW5lQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljTGlu
ZUJyZWFrSXRlcmF0b3IsIFVCUktfTElORSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJl
YWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGlu
dCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZFNlbnRlbmNlQnJlYWtJdGVyYXRv
ciA9IGZhbHNlOworICAgIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljU2VudGVuY2VC
cmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRTZW50ZW5jZUJy
ZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgVUJSS19T
RU5URU5DRSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJy
ZWFrSXRlcmF0b3IqIGJpKQoreworICAgIC8vIHNlZSB0ZXh0QnJlYWtMYXN0CisgICAgCisgICAg
aW50IGZpcnN0Q3Vyc29yUG9zaXRpb24gPSAtMTsKKyAgICBpbnQgcG9zID0gMDsKKyAgICB3aGls
ZShwb3MgPD0gYmktPm1fbGVuZ3RoICYmIChmaXJzdEN1cnNvclBvc2l0aW9uIDwgMCkpIHsKKyAg
ICAgICAgaWYgKGJpLT5tX2xvZ19hdHRyc1twb3NdLmlzX2N1cnNvcl9wb3NpdGlvbikKKyAgICAg
ICAgICAgIGZpcnN0Q3Vyc29yUG9zaXRpb24gPSBwb3M7CisgICAgfQorICAgIGJpLT5tX2luZGV4
ID0gZmlyc3RDdXJzb3JQb3NpdGlvbjsKKyAgICByZXR1cm4gZmlyc3RDdXJzb3JQb3NpdGlvbjsK
K30KKworaW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIC8v
IHRleHRCcmVha0xhc3QgaXMgbm90IG1lYW50IHRvIGZpbmQgYnJlYWtzIGFjY29yZGluZyB0byBi
aS0+bV90eXBlIGJ1dCByZWFsbHkgbGFzdCBjaGFyYWN0ZXIgCisgICAgLy8gKGNtcCBJQ1UgZG9j
dW1lbnRhdGlvbiBmb3IgdWJya19maXJzdCBhbmQgdWJya19sYXN0KQorICAgIC8vIHNvIHdlIHNo
b3VsZCBhZHZhbmNlIG9yIHRyYXZlcnNlIGJhY2sgYmFzZWQgb24gYmktPm1fbG9nX2F0dHJzIGN1
cnNvciBwb3NpdGlvbnMKKyAgICAKKyAgICAvLyBmcm9tIElDVSBkb2NzIGZvciB1YnJrX2xhc3Q6
CisgICAgLy8gIkRldGVybWluZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgYmV5b25kIHRoZSBsYXN0
IGNoYXJhY3RlciBpbiB0aGUgdGV4dCBiZWluZyBzY2FubmVkLiIgCisKKyAgICAvLyBJZiBsYXN0
IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGlzIGEgd2hpdGVzcGFj
ZSwKKyAgICAvLyB0cmF2ZXJzZSB0byB0aGUgbGVmdCB1bnRpbCB0aGUgZmlyc3Qgbm9uLXdoaXRl
IGNoYXJhY3RlciBwb3NpdGlvbiBpcyBmb3VuZAorICAgIC8vIGFuZCByZXR1cm4gdGhlIHBvc2l0
aW9uIG9mIHRoZSBmaXJzdCB3aGl0ZS1zcGFjZSBjaGFyIGFmdGVyIHRoaXMgb25lLgorICAgIC8v
IG90aGVyd2lzZSByZXR1cm4gbV9sZW5ndGgsIGFzICJ0aGUgZmlyc3QgY2hhcmFjdGVyIGJleW9u
ZCB0aGUgbGFzdCIgaXMgb3V0c2lkZSBvdXIgc3RyaW5nLgorICAgIAorICAgIGJvb2wgd2hpdGVT
cGFjZUF0VGhlRW5kID0gdHJ1ZTsKKyAgICBpbnQgbmV4dFdoaXRlU3BhY2VQb3MgPSBiaS0+bV9s
ZW5ndGg7CisgICAgCisgICAgaW50IHBvcyA9IGJpLT5tX2xlbmd0aDsKKyAgICB3aGlsZSAocG9z
ID49IDAgJiYgd2hpdGVTcGFjZUF0VGhlRW5kKSB7CisgICAgICAgIGlmIChiaS0+bV9sb2dfYXR0
cnNbcG9zXS5pc19jdXJzb3JfcG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh3aGl0ZVNwYWNl
QXRUaGVFbmQgPSBiaS0+bV9sb2dfYXR0cnNbcG9zXS5pc193aGl0ZSkKKyAgICAgICAgICAgICAg
ICBuZXh0V2hpdGVTcGFjZVBvcyA9IHBvczsKKyAgICAgICAgfQorICAgICAgICBwb3MtLTsKKyAg
ICB9CisgICAgYmktPm1faW5kZXggPSBuZXh0V2hpdGVTcGFjZVBvczsKKyAgICByZXR1cm4gbmV4
dFdoaXRlU3BhY2VQb3M7Cit9CisKK2ludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9y
KiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmktPm1faW5kZXggKyAxOyBpIDw9IGJpLT5tX2xl
bmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+
bV9sb2dfYXR0cnNbaV0uaXNfbGluZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5kZXgg
PSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gCisgICAgICAgIGlmIChiaS0+
bV90eXBlID09IFVCUktfV09SRCAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfc3RhcnQg
fHwgYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfZW5kKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IFNpbmdsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyAoaS5lLiB3aGl0ZSBzcGFjZSBhcm91bmQg
dGhlbSksIHN1Y2ggYXMgdGhlIGV1cm8gc3ltYm9sIOKCrCwgCisgICAgICAgICAgICAvLyBhcmUg
bm90IG1hcmtlZCBhcyB3b3JkX3N0YXJ0ICYgd29yZF9lbmQgYXMgb3Bwb3NlZCB0byB0aGUgd2F5
IElDVSBkb2VzIGl0CisgICAgICAgICAgICAvLyBUaGlzIGxlYWRzIC0gZm9yIGV4YW1wbGUgLSB0
byBkaWZmZXJlbnQgd29yZCBzZWxlY3Rpb24gYmVoYXZpb3VyIHdoZW4gcmlnaHQgY2xpY2tpbmcu
CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+
bV9sb2dfYXR0cnNbaV0uaXNfY3Vyc29yX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBiaS0+bV9p
bmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYg
KGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5DRSAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3Nl
bnRlbmNlX3N0YXJ0IHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7Cisg
ICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gVGV4dEJyZWFrRG9uZTsKK30KKworaW50IHRleHRCcmVh
a1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmkt
Pm1faW5kZXggLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBV
QlJLX0xJTkUgJiYgYmktPm1fbG9nX2F0dHJzW2ldLmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAg
ICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IAor
ICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgKGJpLT5tX2xvZ19hdHRyc1tp
XS5pc193b3JkX3N0YXJ0IHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX2VuZCkpIHsKKyAg
ICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAg
ICB9IAorICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9s
b2dfYXR0cnNbaV0uaXNfY3Vyc29yX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRl
eCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGJp
LT5tX3R5cGUgPT0gVUJSS19TRU5URU5DRSAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRl
bmNlX3N0YXJ0IHx8IGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAg
ICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdGV4dEJyZWFrRmlyc3QoYmkpOworfQorCitpbnQgdGV4dEJy
ZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBiaS0+
bV9pbmRleCA9IHBvczsKKyAgICByZXR1cm4gdGV4dEJyZWFrUHJldmlvdXMoYmkpOworfQorCitp
bnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sK
KyAgICBpZiAocG9zIDwgMCkKKyAgICAgICAgcG9zID0gLTE7CisgICAgYmktPm1faW5kZXggPSBw
b3M7CisgICAgcmV0dXJuIHRleHRCcmVha05leHQoYmkpOworfQorCitpbnQgdGV4dEJyZWFrQ3Vy
cmVudChUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgcmV0dXJuIGJpLT5tX2luZGV4Owor
fQorCitib29sIGlzVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sK
KyAgICBpZiAoYmktPm1faW5kZXggPj0gMCkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBV
QlJLX0xJTkUgJiYgYmktPm1fbG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19saW5lX2JyZWFrKSB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGJpLT5t
X3R5cGUgPT0gVUJSS19XT1JEICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfd29y
ZF9lbmQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IAorICAgICAgICBp
ZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1f
aW5kZXhdLmlzX2NoYXJfYnJlYWspIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9IAorICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGJpLT5tX2xv
Z19hdHRyc1tiaS0+bV9pbmRleF0uaXNfc2VudGVuY2VfZW5kKSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK30KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBB
bGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERvbWlu
aWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBUZXh0Q29kZWNHVEtfaAorI2RlZmluZSBUZXh0Q29kZWNHVEtfaAorCisj
aW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAiVGV4
dEVuY29kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRDb2Rl
Y0d0ayA6IHB1YmxpYyBUZXh0Q29kZWMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZv
aWQgcmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAg
ICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsK
KworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNv
ZGluZ05hbWVSZWdpc3RyYXIpOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVk
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAgICAgVGV4dENvZGVjR3RrKGNvbnN0
IFRleHRFbmNvZGluZyYpOworICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNHdGsoKTsKKworICAg
ICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJv
b2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKKyAgICAgICAgdmly
dHVhbCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkRl
Y29kZXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdDsK
KyAgICAgICAgdm9pZCByZWxlYXNlSUNvbnYoKSBjb25zdDsKKworICAgICAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhciwg
Ym9vbCBleHRlbmRlZCk7ICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBleHRlbmRlZCk7CisgICAgICAg
IHN0YXRpYyBnYm9vbGVhbiBpc0VuY29kaW5nQXZhaWxhYmxlKGNvbnN0IGdjaGFyKik7CisKKyAg
ICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgICAgIHNpemVfdCBtX251bUJ1ZmZl
cmVkQnl0ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXJlZEJ5dGVzWzE2XTsgLy8g
YmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJhY3RlciAgICAgICAgCisgICAg
ICAgIG11dGFibGUgR0lDb252IG1faWNvbnZEZWNvZGVyOworICAgICAgICBtdXRhYmxlIEdJQ29u
diBtX2ljb252RW5jb2RlcjsKKworICAgICAgICBzdGF0aWMgY29uc3QgZ2NoYXIqIG1faW50ZXJu
YWxFbmNvZGluZ05hbWU7CisKKyAgICAgICAgdHlwZWRlZiBjb25zdCBnY2hhciogY29uc3QgY29k
ZWNBbGlhc0xpc3RbXTsKKworICAgICAgICAvLyBVbmljb2RlCisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19VVEZfODsKKworICAgICAgICAvLyBXZXN0ZXJuCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV8xOwor
ICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfTUFDUk9NQU47CisK
KyAgICAgICAgLy8gSmFwYW5lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX1NISUZUX0pJUzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0VVQ19KUDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNB
bGlhc2VzX0lTT18yMDIyX0pQOworCisgICAgICAgIC8vIFRyYWRpdGlvbmFsIENoaW5lc2UKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0JJRzU7CisgICAgICAg
IHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19CSUc1X0hLU0NTOworICAgICAg
ICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A5NTA7CisKKyAgICAgICAg
Ly8gS29yZWFuCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19J
U09fMjAyMl9LUjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2Vz
X0NQOTQ5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfRVVD
X0tSOworCisgICAgICAgIC8vIEFyYWJpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0
IG1fY29kZWNBbGlhc2VzX0NQMTI1NjsKKworICAgICAgICAvLyBIZWJyZXcKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5Xzg7CisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTU7CisKKyAgICAgICAgLy8g
R3JlZWsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184
ODU5Xzc7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDg2
OTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1dJTkRPV1Nf
MTI1MzsKKworICAgICAgICAvLyBDeXJpbGxpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0tPSThfUjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0
IG1fY29kZWNBbGlhc2VzX0NQODY2OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfS09JOF9VOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2Rl
Y0FsaWFzZXNfV0lORE9XU18xMjUxOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUM7CisKKyAgICAgICAgLy8gVGhhaQorICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NzQ7CisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19USVNfNjIwOworCisgICAgICAgIC8vIFNpbXBs
aWZpZWQgQ2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfR0JLOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSFo7
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19HQjE4MDMwOwor
CisgICAgICAgIC8vIENlbnRyYWwgRXVyb3BlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5XzI7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlz
dCBtX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFMRVVST1BFOworCisgICAgICAgIC8vIFZpZXRuYW1l
c2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1ODsK
KworICAgICAgICAvLyBUdXJraXNoCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2Nv
ZGVjQWxpYXNlc19DUDEyNTQ7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19JU09fODg1OV85OworCisgICAgICAgIC8vIEJhbHRpYworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU3OworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNDsKKworICAgICAgICBzdGF0aWMg
Z2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252QmFzZUNvZGVjTGlzdFtdOworICAgICAgICBzdGF0
aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3RbXTsKKworICAg
IH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRDb2RlY0dUS19o
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5j
cHAJKHJldmlzaW9uIDM4NjE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0
ZXJhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksMTEgKzg5LDIxIEBACiAgICAgcmV0
dXJuIHVicmtfZmlyc3QoYmkpOwogfQogCitpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVy
YXRvciogYmkpCit7CisgICAgcmV0dXJuIHVicmtfbGFzdChiaSk7Cit9CisKIGludCB0ZXh0QnJl
YWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKIHsKICAgICByZXR1cm4gdWJya19uZXh0KGJp
KTsKIH0KIAoraW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sK
KyAgICByZXR1cm4gdWJya19wcmV2aW91cyhiaSk7Cit9CisKIGludCB0ZXh0QnJlYWtQcmVjZWRp
bmcoVGV4dEJyZWFrSXRlcmF0b3IqIGJpLCBpbnQgcG9zKQogewogICAgIHJldHVybiB1YnJrX3By
ZWNlZGluZyhiaSwgcG9zKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rp
bmdSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMzg2MTkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
Niw5IEBACiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAicXQvVGV4dENvZGVjUXQuaCIKICNl
bmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJndGsvVGV4dENvZGVjR3RrLmgiCisj
ZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtMTkyLDYgKzE5NSwxMSBAQAogICAg
IFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGlu
Z05hbWVNYXApOwogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRvVGV4
dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBUZXh0Q29k
ZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFw
KTsKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01h
cCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCkBAIC0y
MTAsNiArMjE4LDExIEBACiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckVuY29kaW5nTmFtZXMo
YWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyQ29k
ZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNFKEdMSUJfVU5JQ09ERSkK
KyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKGFkZFRvVGV4
dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29k
ZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGQ6OmF1dG9fcHRyPFRleHRD
b2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkocmV2aXNpb24gMzg2MTkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsOSBAQAogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJy
ZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKIAogICAgIGludCB0ZXh0QnJl
YWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciopOworICAgIGludCB0ZXh0QnJlYWtMYXN0KFRleHRC
cmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3Iq
KTsKKyAgICBpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBp
bnQgdGV4dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0QnJl
YWtQcmVjZWRpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwogICAgIGludCB0ZXh0QnJlYWtG
b2xsb3dpbmcoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRFbmNvZGluZy5jcHAJKHJldmlzaW9uIDM4NjE5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAK
ICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5j
bHVkZSA8UVN0cmluZz4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2luY2x1ZGUgPHd0Zi9HT3duUHRyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTEwNiw2ICsxMDksMjAgQEAKICAgICBR
U3RyaW5nIHN0cihyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oY2hhcmFjdGVycyksIGxl
bmd0aCk7CiAgICAgc3RyID0gc3RyLm5vcm1hbGl6ZWQoUVN0cmluZzo6Tm9ybWFsaXphdGlvbkZv
cm1fQyk7CiAgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyICo+KHN0ci51dGYxNigpKSwgc3RyLmxlbmd0aCgpLCBoYW5kbGlu
Zyk7CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIEdPd25QdHI8Y2hhcj4gdXRmOHNvdXJj
ZTsKKyAgICB1dGY4c291cmNlLnNldChnX3V0ZjE2X3RvX3V0ZjgoY2hhcmFjdGVycywgbGVuZ3Ro
LCAwLCAwLCAwKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IHV0Zjhub3JtYWxpemVkOworICAgIHV0
Zjhub3JtYWxpemVkLnNldChnX3V0Zjhfbm9ybWFsaXplKHV0Zjhzb3VyY2UuZ2V0KCksIC0xLCBH
X05PUk1BTElaRV9ORkMpKTsKKworICAgIGxvbmcgdXRmMTZsZW5ndGg7CisgICAgR093blB0cjxV
Q2hhcj4gdXRmMTZub3JtYWxpemVkOworICAgIHV0ZjE2bm9ybWFsaXplZC5zZXQoZ191dGY4X3Rv
X3V0ZjE2KHV0Zjhub3JtYWxpemVkLmdldCgpLCAtMSwgMCwgJnV0ZjE2bGVuZ3RoLCAwKSk7CisK
KyAgICBDU3RyaW5nIHJlc3VsdCA9IG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZSh1dGYxNm5v
cm1hbGl6ZWQuZ2V0KCksIHV0ZjE2bGVuZ3RoLCBoYW5kbGluZyk7CisKKyAgICByZXR1cm4gcmVz
dWx0OwogI2VuZGlmCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAJKHJldmlzaW9uIDM4NjE5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw4ICszOSw2IEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHVuaWNv
ZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMzg2MTkpCisrKyBDaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOC0xMS0yMCAgRG9taW5payBSw7Z0dHNjaGVz
ICA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVuaWNvZGUg
ZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgQWRkaW5nIG9wdGlvbnMgZm9yIC0t
d2l0aC11bmljb2RlLWJhY2tlbmQ9aWN1fGdsaWIKKyAgICAgICAgYW5kIGNoZWNraW5nIGZvciBw
YW5nbyB2ZXJzaW9uID49IDEuMjEuMCBpZiBnbGliIGJhY2tlbmQKKyAgICAgICAgaXMgc2VsZWN0
ZWQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBjb25maWd1cmUuYWM6
CisKIDIwMDgtMDktMDkgIEpvZXJnIEJvcm5lbWFubiAgPGpvZXJnLmJvcm5lbWFubkB0cm9sbHRl
Y2guY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogY29u
ZmlndXJlLmFjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24gMzg2MTkpCisr
KyBjb25maWd1cmUuYWMJKHdvcmtpbmcgY29weSkKQEAgLTIxMywxOCArMjEzLDE4IEBACiAjIGRl
dGVybWluZSB0aGUgVW5pY29kZSBiYWNrZW5kCiBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBVbmljb2Rl
IGJhY2tlbmQgdG8gdXNlXSkKIEFDX0FSR19XSVRIKHVuaWNvZGVfYmFja2VuZCwKLSAgICAgICAg
ICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3VAOj5AXSwK
KyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBp
Y3UvZ2xpYkA6PkBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBVbmljb2Rl
IGJhY2tlbmQgW2RlZmF1bHQ9aWN1XV0pLAotICAgICAgICAgICAgW10sW3VuaWNvZGVfYmFja2Vu
ZD0iaWN1Il0pCisgICAgICAgICAgICBbXSxbd2l0aF91bmljb2RlX2JhY2tlbmQ9ImljdSJdKQog
Ci1jYXNlICIkdW5pY29kZV9iYWNrZW5kIiBpbgotICAgICBpY3UpIDs7Ci0gICAgICopIEFDX01T
R19FUlJPUihbSW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1Ll0pIDs7CitjYXNl
ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiIGluCisgICAgIGljdXxnbGliKSA7OworICAgICAqKSBB
Q19NU0dfRVJST1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdSBvciBnbGli
Ll0pIDs7CiBlc2FjCiAKLUFDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tlbmRdKQorQUNfTVNH
X1JFU1VMVChbJHdpdGhfdW5pY29kZV9iYWNrZW5kXSkKIAotaWYgdGVzdCAiJHVuaWNvZGVfYmFj
a2VuZCIgPSAiaWN1IjsgdGhlbgoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJp
Y3UiOyB0aGVuCiAJaWYgdGVzdCAiJG9zX2RhcndpbiIgPSAieWVzIjsgdGhlbgogCQlVTklDT0RF
X0NGTEFHUz0iLUlcJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL2ljdSAtSVwkKHNyY2RpcikvV2Vi
Q29yZS9pY3UiCiAJCVVOSUNPREVfTElCUz0iLWxpY3Vjb3JlIgpAQCAtMjQ1LDYgKzI0NSwxMCBA
QAogCWZpCiBmaQogCitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiOyB0
aGVuCisgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbVU5JQ09ERV0sIFtnbGliLTIuMCBwYW5nbyA+PSAx
LjIxLjBdKQorZmkKKwogQUNfU1VCU1QoW1VOSUNPREVfQ0ZMQUdTXSkKIEFDX1NVQlNUKFtVTklD
T0RFX0xJQlNdKQogCkBAIC02ODMsNiArNjg3LDEwIEBACiBBTV9DT05ESVRJT05BTChbVEFSR0VU
X1FVQVJUWl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9O
QUwoW1RBUkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0p
CiAKKyMgVW5pY29kZSBiYWNrZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9J
Q1VfVU5JQ09ERV0sIFt0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSJdKQorQU1f
Q09ORElUSU9OQUwoW1VTRV9HTElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNr
ZW5kIiA9ICJnbGliIl0pCisKICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElU
SU9OQUwoW1VTRV9DVVJMXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCJdKQog
QU1fQ09ORElUSU9OQUwoW1VTRV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAi
c291cCJdKQpAQCAtNzMwLDcgKzczOCw3IEBACiAgRW5hYmxlIGRlYnVnZ2luZyAoc2xvdykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RlYnVnCiAgRW5hYmxlIEdD
QyBidWlsZCBvcHRpbWl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxl
X29wdGltaXphdGlvbnMKICBDb2RlIGNvdmVyYWdlIHN1cHBvcnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY292ZXJhZ2UKLSBVbmljb2RlIGJhY2tlbmQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR1bmljb2RlX2JhY2tlbmQK
KyBVbmljb2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICR3aXRoX3VuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFja2VuZCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfaHR0cF9iYWNrZW5kCiAgRm9udCBi
YWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkd2l0
aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25348</attachid>
            <date>2008-11-21 04:38:24 -0800</date>
            <delta_ts>2008-12-01 05:54:44 -0800</delta_ts>
            <desc>Replacing ICU with glib</desc>
            <filename>replace_icu_with_glib_20081121.diff</filename>
            <type>text/plain</type>
            <size>77529</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjE5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDgtMTEt
MjAgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAg
IEFkZGluZyBvcHRpb25zIGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWljdXxnbGliCisgICAg
ICAgIGFuZCBjaGVja2luZyBmb3IgcGFuZ28gdmVyc2lvbiA+PSAxLjIxLjAgaWYgZ2xpYiBiYWNr
ZW5kCisgICAgICAgIGlzIHNlbGVjdGVkLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDA4LTA5LTA5ICBKb2VyZyBCb3JuZW1hbm4gIDxq
b2VyZy5ib3JuZW1hbm5AdHJvbGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1v
biBIYXVzbWFubi4KSW5kZXg6IEdOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiAzODYxOSkKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw4ICs1MCwxNSBAQCBJRExfQklORElOR1MgOj0KICMgR2xvYmFsIGZsYWdzIHRvIENQ
UAogZ2xvYmFsX2NwcGZsYWdzIDo9CiAKK2lmIFVTRV9JQ1VfVU5JQ09ERQogZ2xvYmFsX2NwcGZs
YWdzICs9IFwKIAktRFdURl9VU0VfSUNVX1VOSUNPREU9MQorZW5kaWYKKworaWYgVVNFX0dMSUJf
VU5JQ09ERQorZ2xvYmFsX2NwcGZsYWdzICs9IFwKKwktRFdURl9VU0VfR0xJQl9VTklDT0RFPTEK
K2VuZGlmCiAKICMgRGVmYXVsdCBjb21waWxlciBmbGFncwogZ2xvYmFsX2NmbGFncyA6PSBcCklu
ZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlndXJlLmFjCShyZXZpc2lvbiAz
ODYxOSkKKysrIGNvbmZpZ3VyZS5hYwkod29ya2luZyBjb3B5KQpAQCAtMjEzLDE4ICsyMTMsMTgg
QEAgQUNfU1VCU1QoW1BOR19MSUJTXSkKICMgZGV0ZXJtaW5lIHRoZSBVbmljb2RlIGJhY2tlbmQK
IEFDX01TR19DSEVDS0lORyhbdGhlIFVuaWNvZGUgYmFja2VuZCB0byB1c2VdKQogQUNfQVJHX1dJ
VEgodW5pY29kZV9iYWNrZW5kLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC11
bmljb2RlLWJhY2tlbmQ9QDw6QGljdUA6PkBdLAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkco
Wy0td2l0aC11bmljb2RlLWJhY2tlbmQ9QDw6QGljdS9nbGliQDo+QF0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbU2VsZWN0IFVuaWNvZGUgYmFja2VuZCBbZGVmYXVsdD1pY3VdXSksCi0g
ICAgICAgICAgICBbXSxbdW5pY29kZV9iYWNrZW5kPSJpY3UiXSkKKyAgICAgICAgICAgIFtdLFt3
aXRoX3VuaWNvZGVfYmFja2VuZD0iaWN1Il0pCiAKLWNhc2UgIiR1bmljb2RlX2JhY2tlbmQiIGlu
Ci0gICAgIGljdSkgOzsKLSAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIFVuaWNvZGUgYmFj
a2VuZDogbXVzdCBiZSBpY3UuXSkgOzsKK2Nhc2UgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgaW4K
KyAgICAgaWN1fGdsaWIpIDs7CisgICAgICopIEFDX01TR19FUlJPUihbSW52YWxpZCBVbmljb2Rl
IGJhY2tlbmQ6IG11c3QgYmUgaWN1IG9yIGdsaWIuXSkgOzsKIGVzYWMKIAotQUNfTVNHX1JFU1VM
VChbJHVuaWNvZGVfYmFja2VuZF0pCitBQ19NU0dfUkVTVUxUKFskd2l0aF91bmljb2RlX2JhY2tl
bmRdKQogCi1pZiB0ZXN0ICIkdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCitpZiB0ZXN0
ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4KIAlpZiB0ZXN0ICIkb3NfZGFy
d2luIiA9ICJ5ZXMiOyB0aGVuCiAJCVVOSUNPREVfQ0ZMQUdTPSItSVwkKHNyY2RpcikvSmF2YVNj
cmlwdENvcmUvaWN1IC1JXCQoc3JjZGlyKS9XZWJDb3JlL2ljdSIKIAkJVU5JQ09ERV9MSUJTPSIt
bGljdWNvcmUiCkBAIC0yNDUsNiArMjQ1LDEwIEBAIGlmIHRlc3QgIiR1bmljb2RlX2JhY2tlbmQi
ID0gImljdSI7IHRoZW4KIAlmaQogZmkKIAoraWYgdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5k
IiA9ICJnbGliIjsgdGhlbgorICAgUEtHX0NIRUNLX01PRFVMRVMoW1VOSUNPREVdLCBbZ2xpYi0y
LjAgcGFuZ28gPj0gMS4yMS4wXSkKK2ZpCisKIEFDX1NVQlNUKFtVTklDT0RFX0NGTEFHU10pCiBB
Q19TVUJTVChbVU5JQ09ERV9MSUJTXSkKIApAQCAtNjgzLDYgKzY4NywxMCBAQCBBTV9DT05ESVRJ
T05BTChbVEFSR0VUX1dJTjMyXSwgW3Rlc3QgIiR3CiBBTV9DT05ESVRJT05BTChbVEFSR0VUX1FV
QVJUWl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9OQUwo
W1RBUkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAK
KyMgVW5pY29kZSBiYWNrZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9JQ1Vf
VU5JQ09ERV0sIFt0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSJdKQorQU1fQ09O
RElUSU9OQUwoW1VTRV9HTElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5k
IiA9ICJnbGliIl0pCisKICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9O
QUwoW1VTRV9DVVJMXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCJdKQogQU1f
Q09ORElUSU9OQUwoW1VTRV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAic291
cCJdKQpAQCAtNzMwLDcgKzczOCw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgRW5hYmxlIGRl
YnVnZ2luZyAoc2xvdykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxl
X2RlYnVnCiAgRW5hYmxlIEdDQyBidWlsZCBvcHRpbWl6YXRpb24gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAkZW5hYmxlX29wdGltaXphdGlvbnMKICBDb2RlIGNvdmVyYWdlIHN1cHBvcnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY292ZXJhZ2UKLSBV
bmljb2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICR1bmljb2RlX2JhY2tlbmQKKyBVbmljb2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX3VuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFja2Vu
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfaHR0
cF9iYWNrZW5kCiAgRm9udCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAkd2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9j
YXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjE5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDIgQEAKKzIwMDgtMTEtMjAgIERvbWluaWsg
UsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIE9yaWdpbmFsIHBh
dGNoIGJ5IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgSW1wbGVtZW50
aW5nIFVuaWNvZGUgZnVuY3Rpb25hbGl0eSBiYXNlZCBvbiBHTGliLgorCisgICAgICAgIE5vdyB1
c2luZyBHT3duUHRyIGZvciBHTGliLWFsbG9jYXRlZCBvYmplY3RzLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogd3RmL3VuaWNvZGUvVW5pY29kZS5oOgorICAgICAgICAq
IHd0Zi91bmljb2RlL2dsaWI6IEFkZGVkLgorICAgICAgICAqIHd0Zi91bmljb2RlL2dsaWIvQ2Fz
ZWZvbGRUYWJsZUZyb21HTGliLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi91bmljb2RlL2dsaWIv
VW5pY29kZUdMaWIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6Oik6CisgICAgICAg
IChXVEY6OlVuaWNvZGU6OmZvbGRDYXNlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dG9Mb3dl
cik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvVXBwZXIpOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzQXJhYmljQ2hhcik6
CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzRm9ybWF0Q2hhcik6CisgICAgICAgIChXVEY6OlVu
aWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1ByaW50
YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0RpZ2l0KToKKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6aXNQdW5jdCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hh
cik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5KToKKyAgICAgICAgKFdURjo6VW5p
Y29kZTo6ZGlyZWN0aW9uKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAg
ICAgIChXVEY6OlVuaWNvZGU6OmRpZ2l0VmFsdWUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpj
b21iaW5pbmdDbGFzcyk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRlY29tcG9zaXRpb25UeXBl
KToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dW1lbWNhc2VjbXApOgorICAgICAgICAqIHd0Zi91
bmljb2RlL2dsaWIvVW5pY29kZUdMaWJUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmg6IEFkZGVkLgorCiAyMDA4LTExLTE5ICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzg2MTkpCisr
KyBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI5LDkg
KzIyOSwyNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93
dGYvdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9VVEY4LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVVRGOC5oIFwKLQlK
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmggXAorCUphdmFTY3JpcHRDb3JlL3d0
Zi91bmljb2RlL1VuaWNvZGUuaAorCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAorIyAt
LS0tCitpZiBVU0VfSUNVX1VOSUNPREUKK2phdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgKK2VuZGlmICMgVVNFX0lDVV9VTklD
T0RFCisKKyMgLS0tLQorIyBnbGliIHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfR0xJ
Ql9VTklDT0RFCitqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKKwlKYXZhU2NyaXB0Q29yZS93
dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi91bmlj
b2RlL2dsaWIvVW5pY29kZUdMaWJUeXBlcy5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29k
ZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi91bmlj
b2RlL2dsaWIvQ2FzZWZvbGRUYWJsZUZyb21HTGliLmgKK2VuZGlmCiAKICMgRGVidWcgYnVpbGQK
IGlmIEVOQUJMRV9ERUJVRwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAko
cmV2aXNpb24gMzg2MTkpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJxdDQvVW5pY29kZVF0
NC5oIgogI2VsaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUgPHd0Zi91bmljb2RlL2ljdS9V
bmljb2RlSWN1Lmg+CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL2dsaWIvVW5pY29kZUdMaWIuaD4KICNlbHNlCiAjZXJyb3IgIlVua25vd24gVW5pY29kZSBp
bXBsZW1lbnRhdGlvbiIKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
Z2xpYi9DYXNlZm9sZFRhYmxlRnJvbUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS9nbGliL0Nhc2Vmb2xkVGFibGVGcm9tR0xpYi5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9DYXNlZm9sZFRhYmxlRnJvbUdMaWIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogIENvcHlyaWdo
dCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3Mt
Y29tcGFueS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIENhc2Vmb2xkVGFibGVGcm9tR0xp
Yl9oCisjZGVmaW5lIENhc2Vmb2xkVGFibGVGcm9tR0xpYl9oCisKKyNpbmNsdWRlIDxnbGliLmg+
CisKKy8vIGNvcGllZCBmcm9tIEdMaWIKKworLyogVGFibGUgb2YgY2FzZWZvbGRpbmcgY2FzZXMg
dGhhdCBjYW4ndCBiZSBkZXJpdmVkIGJ5IGxvd2VyY2FzaW5nCisgKi8KK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgeworICAgIGd1aW50MTYgY2g7CisgICAgZ2NoYXIgZGF0YVs3XTsKK30gY2FzZWZvbGRf
dGFibGVbXSA9IHsKKyAgICB7IDB4MDBiNSwgIlx4Y2VceGJjIiB9LAorICAgIHsgMHgwMGRmLCAi
XHg3M1x4NzMiIH0sCisgICAgeyAweDAxMzAsICJceDY5XHhjY1x4ODciIH0sCisgICAgeyAweDAx
NDksICJceGNhXHhiY1x4NmUiIH0sCisgICAgeyAweDAxN2YsICJceDczIiB9LAorICAgIHsgMHgw
MWYwLCAiXHg2YVx4Y2NceDhjIiB9LAorICAgIHsgMHgwMzQ1LCAiXHhjZVx4YjkiIH0sCisgICAg
eyAweDAzOTAsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDAzYjAsICJc
eGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDAzYzIsICJceGNmXHg4MyIgfSwK
KyAgICB7IDB4MDNkMCwgIlx4Y2VceGIyIiB9LAorICAgIHsgMHgwM2QxLCAiXHhjZVx4YjgiIH0s
CisgICAgeyAweDAzZDUsICJceGNmXHg4NiIgfSwKKyAgICB7IDB4MDNkNiwgIlx4Y2ZceDgwIiB9
LAorICAgIHsgMHgwM2YwLCAiXHhjZVx4YmEiIH0sCisgICAgeyAweDAzZjEsICJceGNmXHg4MSIg
fSwKKyAgICB7IDB4MDNmNSwgIlx4Y2VceGI1IiB9LAorICAgIHsgMHgwNTg3LCAiXHhkNVx4YTVc
eGQ2XHg4MiIgfSwKKyAgICB7IDB4MWU5NiwgIlx4NjhceGNjXHhiMSIgfSwKKyAgICB7IDB4MWU5
NywgIlx4NzRceGNjXHg4OCIgfSwKKyAgICB7IDB4MWU5OCwgIlx4NzdceGNjXHg4YSIgfSwKKyAg
ICB7IDB4MWU5OSwgIlx4NzlceGNjXHg4YSIgfSwKKyAgICB7IDB4MWU5YSwgIlx4NjFceGNhXHhi
ZSIgfSwKKyAgICB7IDB4MWU5YiwgIlx4ZTFceGI5XHhhMSIgfSwKKyAgICB7IDB4MWY1MCwgIlx4
Y2ZceDg1XHhjY1x4OTMiIH0sCisgICAgeyAweDFmNTIsICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4
ODAiIH0sCisgICAgeyAweDFmNTQsICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4ODEiIH0sCisgICAg
eyAweDFmNTYsICJceGNmXHg4NVx4Y2NceDkzXHhjZFx4ODIiIH0sCisgICAgeyAweDFmODAsICJc
eGUxXHhiY1x4ODBceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4MSwgIlx4ZTFceGJjXHg4MVx4Y2Vc
eGI5IiB9LAorICAgIHsgMHgxZjgyLCAiXHhlMVx4YmNceDgyXHhjZVx4YjkiIH0sCisgICAgeyAw
eDFmODMsICJceGUxXHhiY1x4ODNceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4NCwgIlx4ZTFceGJj
XHg4NFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjg1LCAiXHhlMVx4YmNceDg1XHhjZVx4YjkiIH0s
CisgICAgeyAweDFmODYsICJceGUxXHhiY1x4ODZceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4Nywg
Ilx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZjg4LCAiXHhlMVx4YmNceDgwXHhj
ZVx4YjkiIH0sCisgICAgeyAweDFmODksICJceGUxXHhiY1x4ODFceGNlXHhiOSIgfSwKKyAgICB7
IDB4MWY4YSwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjhiLCAiXHhlMVx4
YmNceDgzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOGMsICJceGUxXHhiY1x4ODRceGNlXHhiOSIg
fSwKKyAgICB7IDB4MWY4ZCwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjhl
LCAiXHhlMVx4YmNceDg2XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOGYsICJceGUxXHhiY1x4ODdc
eGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5MCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9LAorICAg
IHsgMHgxZjkxLCAiXHhlMVx4YmNceGExXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTIsICJceGUx
XHhiY1x4YTJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5MywgIlx4ZTFceGJjXHhhM1x4Y2VceGI5
IiB9LAorICAgIHsgMHgxZjk0LCAiXHhlMVx4YmNceGE0XHhjZVx4YjkiIH0sCisgICAgeyAweDFm
OTUsICJceGUxXHhiY1x4YTVceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5NiwgIlx4ZTFceGJjXHhh
Nlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjk3LCAiXHhlMVx4YmNceGE3XHhjZVx4YjkiIH0sCisg
ICAgeyAweDFmOTgsICJceGUxXHhiY1x4YTBceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5OSwgIlx4
ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjlhLCAiXHhlMVx4YmNceGEyXHhjZVx4
YjkiIH0sCisgICAgeyAweDFmOWIsICJceGUxXHhiY1x4YTNceGNlXHhiOSIgfSwKKyAgICB7IDB4
MWY5YywgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjlkLCAiXHhlMVx4YmNc
eGE1XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOWUsICJceGUxXHhiY1x4YTZceGNlXHhiOSIgfSwK
KyAgICB7IDB4MWY5ZiwgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmEwLCAi
XHhlMVx4YmRceGEwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTEsICJceGUxXHhiZFx4YTFceGNl
XHhiOSIgfSwKKyAgICB7IDB4MWZhMiwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAorICAgIHsg
MHgxZmEzLCAiXHhlMVx4YmRceGEzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTQsICJceGUxXHhi
ZFx4YTRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhNSwgIlx4ZTFceGJkXHhhNVx4Y2VceGI5IiB9
LAorICAgIHsgMHgxZmE2LCAiXHhlMVx4YmRceGE2XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTcs
ICJceGUxXHhiZFx4YTdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhOCwgIlx4ZTFceGJkXHhhMFx4
Y2VceGI5IiB9LAorICAgIHsgMHgxZmE5LCAiXHhlMVx4YmRceGExXHhjZVx4YjkiIH0sCisgICAg
eyAweDFmYWEsICJceGUxXHhiZFx4YTJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhYiwgIlx4ZTFc
eGJkXHhhM1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmFjLCAiXHhlMVx4YmRceGE0XHhjZVx4Yjki
IH0sCisgICAgeyAweDFmYWQsICJceGUxXHhiZFx4YTVceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZh
ZSwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmFmLCAiXHhlMVx4YmRceGE3
XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYjIsICJceGUxXHhiZFx4YjBceGNlXHhiOSIgfSwKKyAg
ICB7IDB4MWZiMywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYjQsICJceGNlXHhh
Y1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmI2LCAiXHhjZVx4YjFceGNkXHg4MiIgfSwKKyAgICB7
IDB4MWZiNywgIlx4Y2VceGIxXHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZiYywgIlx4
Y2VceGIxXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYmUsICJceGNlXHhiOSIgfSwKKyAgICB7IDB4
MWZjMiwgIlx4ZTFceGJkXHhiNFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmMzLCAiXHhjZVx4Yjdc
eGNlXHhiOSIgfSwKKyAgICB7IDB4MWZjNCwgIlx4Y2VceGFlXHhjZVx4YjkiIH0sCisgICAgeyAw
eDFmYzYsICJceGNlXHhiN1x4Y2RceDgyIiB9LAorICAgIHsgMHgxZmM3LCAiXHhjZVx4YjdceGNk
XHg4Mlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmNjLCAiXHhjZVx4YjdceGNlXHhiOSIgfSwKKyAg
ICB7IDB4MWZkMiwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MCIgfSwKKyAgICB7IDB4MWZkMywg
Ilx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgICB7IDB4MWZkNiwgIlx4Y2VceGI5XHhj
ZFx4ODIiIH0sCisgICAgeyAweDFmZDcsICJceGNlXHhiOVx4Y2NceDg4XHhjZFx4ODIiIH0sCisg
ICAgeyAweDFmZTIsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODAiIH0sCisgICAgeyAweDFmZTMs
ICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDFmZTQsICJceGNmXHg4MVx4
Y2NceDkzIiB9LAorICAgIHsgMHgxZmU2LCAiXHhjZlx4ODVceGNkXHg4MiIgfSwKKyAgICB7IDB4
MWZlNywgIlx4Y2ZceDg1XHhjY1x4ODhceGNkXHg4MiIgfSwKKyAgICB7IDB4MWZmMiwgIlx4ZTFc
eGJkXHhiY1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmYzLCAiXHhjZlx4ODlceGNlXHhiOSIgfSwK
KyAgICB7IDB4MWZmNCwgIlx4Y2ZceDhlXHhjZVx4YjkiIH0sCisgICAgeyAweDFmZjYsICJceGNm
XHg4OVx4Y2RceDgyIiB9LAorICAgIHsgMHgxZmY3LCAiXHhjZlx4ODlceGNkXHg4Mlx4Y2VceGI5
IiB9LAorICAgIHsgMHgxZmZjLCAiXHhjZlx4ODlceGNlXHhiOSIgfSwKKyAgICB7IDB4MjE2MCwg
Ilx4ZTJceDg1XHhiMCIgfSwKKyAgICB7IDB4MjE2MSwgIlx4ZTJceDg1XHhiMSIgfSwKKyAgICB7
IDB4MjE2MiwgIlx4ZTJceDg1XHhiMiIgfSwKKyAgICB7IDB4MjE2MywgIlx4ZTJceDg1XHhiMyIg
fSwKKyAgICB7IDB4MjE2NCwgIlx4ZTJceDg1XHhiNCIgfSwKKyAgICB7IDB4MjE2NSwgIlx4ZTJc
eDg1XHhiNSIgfSwKKyAgICB7IDB4MjE2NiwgIlx4ZTJceDg1XHhiNiIgfSwKKyAgICB7IDB4MjE2
NywgIlx4ZTJceDg1XHhiNyIgfSwKKyAgICB7IDB4MjE2OCwgIlx4ZTJceDg1XHhiOCIgfSwKKyAg
ICB7IDB4MjE2OSwgIlx4ZTJceDg1XHhiOSIgfSwKKyAgICB7IDB4MjE2YSwgIlx4ZTJceDg1XHhi
YSIgfSwKKyAgICB7IDB4MjE2YiwgIlx4ZTJceDg1XHhiYiIgfSwKKyAgICB7IDB4MjE2YywgIlx4
ZTJceDg1XHhiYyIgfSwKKyAgICB7IDB4MjE2ZCwgIlx4ZTJceDg1XHhiZCIgfSwKKyAgICB7IDB4
MjE2ZSwgIlx4ZTJceDg1XHhiZSIgfSwKKyAgICB7IDB4MjE2ZiwgIlx4ZTJceDg1XHhiZiIgfSwK
KyAgICB7IDB4MjRiNiwgIlx4ZTJceDkzXHg5MCIgfSwKKyAgICB7IDB4MjRiNywgIlx4ZTJceDkz
XHg5MSIgfSwKKyAgICB7IDB4MjRiOCwgIlx4ZTJceDkzXHg5MiIgfSwKKyAgICB7IDB4MjRiOSwg
Ilx4ZTJceDkzXHg5MyIgfSwKKyAgICB7IDB4MjRiYSwgIlx4ZTJceDkzXHg5NCIgfSwKKyAgICB7
IDB4MjRiYiwgIlx4ZTJceDkzXHg5NSIgfSwKKyAgICB7IDB4MjRiYywgIlx4ZTJceDkzXHg5NiIg
fSwKKyAgICB7IDB4MjRiZCwgIlx4ZTJceDkzXHg5NyIgfSwKKyAgICB7IDB4MjRiZSwgIlx4ZTJc
eDkzXHg5OCIgfSwKKyAgICB7IDB4MjRiZiwgIlx4ZTJceDkzXHg5OSIgfSwKKyAgICB7IDB4MjRj
MCwgIlx4ZTJceDkzXHg5YSIgfSwKKyAgICB7IDB4MjRjMSwgIlx4ZTJceDkzXHg5YiIgfSwKKyAg
ICB7IDB4MjRjMiwgIlx4ZTJceDkzXHg5YyIgfSwKKyAgICB7IDB4MjRjMywgIlx4ZTJceDkzXHg5
ZCIgfSwKKyAgICB7IDB4MjRjNCwgIlx4ZTJceDkzXHg5ZSIgfSwKKyAgICB7IDB4MjRjNSwgIlx4
ZTJceDkzXHg5ZiIgfSwKKyAgICB7IDB4MjRjNiwgIlx4ZTJceDkzXHhhMCIgfSwKKyAgICB7IDB4
MjRjNywgIlx4ZTJceDkzXHhhMSIgfSwKKyAgICB7IDB4MjRjOCwgIlx4ZTJceDkzXHhhMiIgfSwK
KyAgICB7IDB4MjRjOSwgIlx4ZTJceDkzXHhhMyIgfSwKKyAgICB7IDB4MjRjYSwgIlx4ZTJceDkz
XHhhNCIgfSwKKyAgICB7IDB4MjRjYiwgIlx4ZTJceDkzXHhhNSIgfSwKKyAgICB7IDB4MjRjYywg
Ilx4ZTJceDkzXHhhNiIgfSwKKyAgICB7IDB4MjRjZCwgIlx4ZTJceDkzXHhhNyIgfSwKKyAgICB7
IDB4MjRjZSwgIlx4ZTJceDkzXHhhOCIgfSwKKyAgICB7IDB4MjRjZiwgIlx4ZTJceDkzXHhhOSIg
fSwKKyAgICB7IDB4ZmIwMCwgIlx4NjZceDY2IiB9LAorICAgIHsgMHhmYjAxLCAiXHg2Nlx4Njki
IH0sCisgICAgeyAweGZiMDIsICJceDY2XHg2YyIgfSwKKyAgICB7IDB4ZmIwMywgIlx4NjZceDY2
XHg2OSIgfSwKKyAgICB7IDB4ZmIwNCwgIlx4NjZceDY2XHg2YyIgfSwKKyAgICB7IDB4ZmIwNSwg
Ilx4NzNceDc0IiB9LAorICAgIHsgMHhmYjA2LCAiXHg3M1x4NzQiIH0sCisgICAgeyAweGZiMTMs
ICJceGQ1XHhiNFx4ZDVceGI2IiB9LAorICAgIHsgMHhmYjE0LCAiXHhkNVx4YjRceGQ1XHhhNSIg
fSwKKyAgICB7IDB4ZmIxNSwgIlx4ZDVceGI0XHhkNVx4YWIiIH0sCisgICAgeyAweGZiMTYsICJc
eGQ1XHhiZVx4ZDVceGI2IiB9LAorICAgIHsgMHhmYjE3LCAiXHhkNVx4YjRceGQ1XHhhZCIgfQor
fTsKKworCisjZW5kaWYKKwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9V
bmljb2RlR0xpYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ds
aWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmlj
b2RlL2dsaWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTkgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNv
bT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0
cm9uLmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWlu
aWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFVuaWNvZGVHTGliX2gKKyNkZWZpbmUgVW5pY29kZUdMaWJfaAorCisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRl
IDxnbGliLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKworI2luY2x1ZGUgPHd0Zi9HT3du
UHRyLmg+CisKKyNpbmNsdWRlICJDYXNlZm9sZFRhYmxlRnJvbUdMaWIuaCIKKyNpbmNsdWRlICJV
bmljb2RlR0xpYlR5cGVzLmgiCisjaW5jbHVkZSAiVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisgICAgbmFtZXNwYWNlIFVuaWNvZGUgeworCisgICAgICAgIGVudW0g
RGlyZWN0aW9uIHsKKyAgICAgICAgICAgIExlZnRUb1JpZ2h0LAorICAgICAgICAgICAgUmlnaHRU
b0xlZnQsCisgICAgICAgICAgICBFdXJvcGVhbk51bWJlciwKKyAgICAgICAgICAgIEV1cm9wZWFu
TnVtYmVyU2VwYXJhdG9yLAorICAgICAgICAgICAgRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yLAor
ICAgICAgICAgICAgQXJhYmljTnVtYmVyLAorICAgICAgICAgICAgQ29tbW9uTnVtYmVyU2VwYXJh
dG9yLAorICAgICAgICAgICAgQmxvY2tTZXBhcmF0b3IsCisgICAgICAgICAgICBTZWdtZW50U2Vw
YXJhdG9yLAorICAgICAgICAgICAgV2hpdGVTcGFjZU5ldXRyYWwsCisgICAgICAgICAgICBPdGhl
ck5ldXRyYWwsCisgICAgICAgICAgICBMZWZ0VG9SaWdodEVtYmVkZGluZywKKyAgICAgICAgICAg
IExlZnRUb1JpZ2h0T3ZlcnJpZGUsCisgICAgICAgICAgICBSaWdodFRvTGVmdEFyYWJpYywKKyAg
ICAgICAgICAgIFJpZ2h0VG9MZWZ0RW1iZWRkaW5nLAorICAgICAgICAgICAgUmlnaHRUb0xlZnRP
dmVycmlkZSwKKyAgICAgICAgICAgIFBvcERpcmVjdGlvbmFsRm9ybWF0LAorICAgICAgICAgICAg
Tm9uU3BhY2luZ01hcmssCisgICAgICAgICAgICBCb3VuZGFyeU5ldXRyYWwKKyAgICAgICAgfTsK
KworICAgICAgICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAgICAgICAgIERlY29tcG9z
aXRpb25Ob25lLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAgICAgICAg
ICAgIERlY29tcG9zaXRpb25Db21wYXQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uQ2lyY2xl
LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAgICAgICAgICAgRGVjb21wb3Np
dGlvbkZvbnQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24sCisgICAgICAgICAg
ICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25Jc29sYXRl
ZCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAgICAgICAgICBEZWNvbXBv
c2l0aW9uTmFycm93LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisgICAgICAg
ICAgICBEZWNvbXBvc2l0aW9uU21hbGwsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uU3F1YXJl
LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAgICAgICAgICAgIERlY29tcG9zaXRp
b25TdXBlciwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCwKKyAgICAgICAgICAg
IERlY29tcG9zaXRpb25XaWRlLAorICAgICAgICB9OworCisgICAgICAgIGVudW0gQ2hhckNhdGVn
b3J5IHsKKyAgICAgICAgICAgIE5vQ2F0ZWdvcnkgPSAgMCwKKyAgICAgICAgICAgIE90aGVyX05v
dEFzc2lnbmVkID0gVV9NQVNLKEdfVU5JQ09ERV9VTkFTU0lHTkVEKSwKKyAgICAgICAgICAgIExl
dHRlcl9VcHBlcmNhc2UgPSBVX01BU0soR19VTklDT0RFX1VQUEVSQ0FTRV9MRVRURVIpLAorICAg
ICAgICAgICAgTGV0dGVyX0xvd2VyY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVfTE9XRVJDQVNFX0xF
VFRFUiksCisgICAgICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlID0gVV9NQVNLKEdfVU5JQ09ERV9U
SVRMRUNBU0VfTEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9Nb2RpZmllciA9IFVfTUFTSyhH
X1VOSUNPREVfTU9ESUZJRVJfTEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9PdGhlciA9IFVf
TUFTSyhHX1VOSUNPREVfT1RIRVJfTEVUVEVSKSwKKworICAgICAgICAgICAgTWFya19Ob25TcGFj
aW5nID0gVV9NQVNLKEdfVU5JQ09ERV9OT05fU1BBQ0lOR19NQVJLKSwKKyAgICAgICAgICAgIE1h
cmtfRW5jbG9zaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9FTkNMT1NJTkdfTUFSSyksCisgICAgICAg
ICAgICBNYXJrX1NwYWNpbmdDb21iaW5pbmcgPSBVX01BU0soR19VTklDT0RFX0NPTUJJTklOR19N
QVJLKSwKKworICAgICAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCA9IFVfTUFTSyhHX1VOSUNP
REVfREVDSU1BTF9OVU1CRVIpLAorICAgICAgICAgICAgTnVtYmVyX0xldHRlciA9IFVfTUFTSyhH
X1VOSUNPREVfTEVUVEVSX05VTUJFUiksCisgICAgICAgICAgICBOdW1iZXJfT3RoZXIgPSBVX01B
U0soR19VTklDT0RFX09USEVSX05VTUJFUiksCisKKyAgICAgICAgICAgIFNlcGFyYXRvcl9TcGFj
ZSA9IFVfTUFTSyhHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SKSwKKyAgICAgICAgICAgIFNlcGFy
YXRvcl9MaW5lID0gVV9NQVNLKEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRPUiksCisgICAgICAgICAg
ICBTZXBhcmF0b3JfUGFyYWdyYXBoID0gVV9NQVNLKEdfVU5JQ09ERV9QQVJBR1JBUEhfU0VQQVJB
VE9SKSwKKworICAgICAgICAgICAgT3RoZXJfQ29udHJvbCA9IFVfTUFTSyhHX1VOSUNPREVfQ09O
VFJPTCksCisgICAgICAgICAgICBPdGhlcl9Gb3JtYXQgPSBVX01BU0soR19VTklDT0RFX0ZPUk1B
VCksCisgICAgICAgICAgICBPdGhlcl9Qcml2YXRlVXNlID0gVV9NQVNLKEdfVU5JQ09ERV9QUklW
QVRFX1VTRSksCisgICAgICAgICAgICBPdGhlcl9TdXJyb2dhdGUgPSBVX01BU0soR19VTklDT0RF
X1NVUlJPR0FURSksCisKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX0Rhc2ggPSBVX01BU0soR19V
TklDT0RFX0RBU0hfUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVuY3R1YXRpb25fT3BlbiA9
IFVfTUFTSyhHX1VOSUNPREVfT1BFTl9QVU5DVFVBVElPTiksCisgICAgICAgICAgICBQdW5jdHVh
dGlvbl9DbG9zZSA9IFVfTUFTSyhHX1VOSUNPREVfQ0xPU0VfUFVOQ1RVQVRJT04pLAorICAgICAg
ICAgICAgUHVuY3R1YXRpb25fQ29ubmVjdG9yID0gVV9NQVNLKEdfVU5JQ09ERV9DT05ORUNUX1BV
TkNUVUFUSU9OKSwKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX090aGVyID0gVV9NQVNLKEdfVU5J
Q09ERV9PVEhFUl9QVU5DVFVBVElPTiksCisKKyAgICAgICAgICAgIFN5bWJvbF9NYXRoID0gVV9N
QVNLKEdfVU5JQ09ERV9NQVRIX1NZTUJPTCksCisgICAgICAgICAgICBTeW1ib2xfQ3VycmVuY3kg
PSBVX01BU0soR19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCksCisgICAgICAgICAgICBTeW1ib2xf
TW9kaWZpZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX1NZTUJPTCksCisgICAgICAgICAg
ICBTeW1ib2xfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX1NZTUJPTCksCisKKyAgICAg
ICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVfSU5JVElB
TF9QVU5DVFVBVElPTiksCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlID0gVV9N
QVNLKEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElPTikKKyAgICAgICAgfTsKKworICAgICAgICBp
bmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGNoKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBhZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRvIEdMaWIgdXBzdHJlYW0/CisKKyAgICAgICAg
ICAgIGludCBzdGFydCA9IDA7CisgICAgICAgICAgICBpbnQgZW5kID0gR19OX0VMRU1FTlRTKGNh
c2Vmb2xkX3RhYmxlKTsKKworICAgICAgICAgICAgaWYgKGNoID49IGNhc2Vmb2xkX3RhYmxlW3N0
YXJ0XS5jaCAmJgorICAgICAgICAgICAgICAgIGNoIDw9IGNhc2Vmb2xkX3RhYmxlW2VuZCAtIDFd
LmNoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNoID09IGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmNoKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdfdXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxmXS5kYXRhKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhbGYgPT0gc3RhcnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPiBjYXNlZm9sZF90YWJs
ZVtoYWxmXS5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaGFsZjsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gaGFsZjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBn
X3VuaWNoYXJfdG9sb3dlciAoY2gpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGludCBm
b2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3Jj
LCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICAgICAgeworICAgICAgICAgICAgKmVy
cm9yID0gZmFsc2U7CisgICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9yOworCisgICAg
ICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhzcmM7CisgICAgICAgICAgICB1dGY4c3JjLnNldChn
X3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAqZXJyb3IgPSB0cnVl
OworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgR093blB0cjxjaGFyPiB1dGY4cmVzdWx0OworICAgICAgICAgICAgdXRmOHJlc3VsdC5zZXQo
Z191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMuZ2V0KCksIC0xKSk7CisKKyAgICAgICAgICAgIGxvbmcg
dXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAgICAgIEdPd25QdHI8VUNoYXI+IHV0ZjE2
cmVzdWx0OworICAgICAgICAgICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYxNih1dGY4
cmVzdWx0LmdldCgpLCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91dFB0cigp
KSk7CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgeworICAgICAgICAg
ICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0
TGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KHJlc3VsdCwgdXRmMTZy
ZXN1bHQuZ2V0KCksIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKKyAgICAg
ICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIGlu
bGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBV
Q2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICAgICAgeworICAgICAg
ICAgICAgKmVycm9yID0gZmFsc2U7CisgICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9y
OworCisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhzcmM7CisgICAgICAgICAgICB1dGY4
c3JjLnNldChnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3Iub3V0
UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAqZXJy
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4cmVzdWx0OworICAgICAgICAgICAgdXRmOHJl
c3VsdC5zZXQoZ191dGY4X3N0cmRvd24odXRmOHNyYy5nZXQoKSwgLTEpKTsKKworICAgICAgICAg
ICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICAgICAgR093blB0cjxVQ2hh
cj4gdXRmMTZyZXN1bHQ7CisgICAgICAgICAgICB1dGYxNnJlc3VsdC5zZXQoZ191dGY4X3RvX3V0
ZjE2KHV0ZjhyZXN1bHQuZ2V0KCksIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3Iu
b3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAq
ZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXRm
MTZyZXN1bHRMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0
LCB1dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsK
KworICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9CisKKyAg
ICAgICAgaW5saW5lIFVDaGFyMzIgdG9Mb3dlcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlcihjKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZ191bmljaGFyX3RvdXBwZXIoYyk7CisgICAgICAgIH0KKworICAgICAgICBpbmxp
bmUgaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNo
YXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICplcnJvciA9IGZhbHNlOworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGdlcnJvcjsK
KworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4c3JjOworICAgICAgICAgICAgdXRmOHNy
Yy5zZXQoZ191dGYxNl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0
cigpKSk7CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVycm9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjhyZXN1
bHQuc2V0KGdfdXRmOF9zdHJ1cCh1dGY4c3JjLmdldCgpLCAtMSkpOworCisgICAgICAgICAgICBs
b25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgICAgICBHT3duUHRyPFVDaGFyPiB1
dGYxNnJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9fdXRmMTYo
dXRmOHJlc3VsdC5nZXQoKSwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvci5vdXRQ
dHIoKSkpOworICAgICAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgICAgICplcnJv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAqZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB1dGYxNnJl
c3VsdExlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQsIHV0
ZjE2cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisg
ICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgVUNoYXIzMiB0b1RpdGxlQ2FzZShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG90aXRsZShjKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBjID49IDB4MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlubGluZSBib29sIGlzRm9ybWF0Q2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFUOworICAg
ICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hhcjMyIGMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VO
SUNPREVfU1BBQ0VfU0VQQVJBVE9SOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wg
aXNQcmludGFibGVDaGFyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGdfdW5pY2hhcl9pc3ByaW50KGMpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlubGluZSBi
b29sIGlzRGlnaXQoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ191
bmljaGFyX2lzZGlnaXQoYyk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgYm9vbCBpc1B1
bmN0KFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9p
c3B1bmN0KGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIFVDaGFyMzIgbWlycm9yZWRD
aGFyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgZ3VuaWNoYXIgbWlycm9yID0g
MDsKKyAgICAgICAgICAgIGdfdW5pY2hhcl9nZXRfbWlycm9yX2NoYXIoYywgJm1pcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm4gbWlycm9yOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIENo
YXJDYXRlZ29yeSBjYXRlZ29yeShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjID4gMHhmZmZmKQorICAgICAgICAgICAgICAgIHJldHVybiBOb0NhdGVnb3J5OworCisgICAg
ICAgICAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBlKGMpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKFVDaGFyMzIg
YykKKyAgICAgICAgeworICAgICAgICAgICAgUGFuZ29CaWRpVHlwZSB0eXBlID0gcGFuZ29fYmlk
aV90eXBlX2Zvcl91bmljaGFyKGMpOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MOiAKKyAgICAgICAgICAgICAgICByZXR1cm4g
TGVmdFRvUmlnaHQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOiAKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJ
RElfVFlQRV9BTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRBcmFiaWM7Cisg
ICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MUkU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIExlZnRUb1JpZ2h0RW1iZWRkaW5nOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZ
UEVfUkxFOgorICAgICAgICAgICAgICAgIHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGluZzsKKyAg
ICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0xSTzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gTGVmdFRvUmlnaHRPdmVycmlkZTsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X1JMTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRPdmVycmlkZTsKKyAgICAg
ICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1BERjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
UG9wRGlyZWN0aW9uYWxGb3JtYXQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9F
TjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRXVyb3BlYW5OdW1iZXI7CisgICAgICAgICAgICBj
YXNlIFBBTkdPX0JJRElfVFlQRV9BTjoKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJhYmljTnVt
YmVyOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVM6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOworICAgICAgICAgICAgY2FzZSBQQU5H
T19CSURJX1RZUEVfRVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyVGVy
bWluYXRvcjsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0NTOgorICAgICAgICAg
ICAgICAgIHJldHVybiBDb21tb25OdW1iZXJTZXBhcmF0b3I7CisgICAgICAgICAgICBjYXNlIFBB
TkdPX0JJRElfVFlQRV9OU006CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vblNwYWNpbmdNYXJr
OworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQk46CisgICAgICAgICAgICAgICAg
cmV0dXJuIEJvdW5kYXJ5TmV1dHJhbDsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X0I6CisgICAgICAgICAgICAgICAgcmV0dXJuIEJsb2NrU2VwYXJhdG9yOworICAgICAgICAgICAg
Y2FzZSBQQU5HT19CSURJX1RZUEVfUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gU2VnbWVudFNl
cGFyYXRvcjsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1dTOgorICAgICAgICAg
ICAgICAgIHJldHVybiBXaGl0ZVNwYWNlTmV1dHJhbDsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE90aGVyTmV1dHJhbDsKKyAgICAgICAgICAgIH0gCisgICAg
ICAgIH0KKworICAgICAgICBpbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc2xvd2VyKGMpOworICAgICAgICB9CisK
KyAgICAgICAgaW5saW5lIGludCBkaWdpdFZhbHVlKFVDaGFyMzIgYykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9kaWdpdF92YWx1ZShjKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlubGluZSB1aW50OF90IGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYykKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gcmV0dXJuIGdfdW5pY2hhcl9jb21iaW5pbmdfY2xhc3MoYyk7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBEZWNvbXBv
c2l0aW9uVHlwZSBkZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FCisgICAgICAgICAgICByZXR1cm4gRGVjb21wb3NpdGlvbk5vbmU7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmxpbmUgaW50IHVtZW1jYXNlY21wKGNvbnN0IFVDaGFyKiBh
LCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAgICAgICAgeworICAgICAgICAgICAgR093blB0
cjxjaGFyPiB1dGY4YTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOGI7CisKKyAgICAg
ICAgICAgIHV0ZjhhLnNldChnX3V0ZjE2X3RvX3V0ZjgoYSwgbGVuLCAwLCAwLCAwKSk7CisgICAg
ICAgICAgICB1dGY4Yi5zZXQoZ191dGYxNl90b191dGY4KGIsIGxlbiwgMCwgMCwgMCkpOworCisg
ICAgICAgICAgICBHT3duUHRyPGNoYXI+IGZvbGRlZEE7CisgICAgICAgICAgICBHT3duUHRyPGNo
YXI+IGZvbGRlZEI7CisKKyAgICAgICAgICAgIGZvbGRlZEEuc2V0KGdfdXRmOF9jYXNlZm9sZCh1
dGY4YS5nZXQoKSwgLTEpKTsKKyAgICAgICAgICAgIGZvbGRlZEIuc2V0KGdfdXRmOF9jYXNlZm9s
ZCh1dGY4Yi5nZXQoKSwgLTEpKTsKKworICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdfdXRmOF9j
b2xsYXRlKGZvbGRlZEEuZ2V0KCksIGZvbGRlZEIuZ2V0KCkpOworCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICB9Cit9CisKKyNlbmRpZgorCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliVHlwZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliVHlwZXMuaAko
cmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdM
aWJUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdo
dCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNA
YWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBVbmljb2RlR0xpYlR5
cGVzX2gKKyNkZWZpbmUgVW5pY29kZUdMaWJUeXBlc19oCisKK3R5cGVkZWYgdWludDE2X3QgVUNo
YXI7Cit0eXBlZGVmIGludDMyX3QgVUNoYXIzMjsKKworI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlDVS5o
CShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2Rl
TWFjcm9zRnJvbUlDVS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0
c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBVbmljb2Rl
TWFjcm9zRnJvbUlDVV9oCisjZGVmaW5lIFVuaWNvZGVNYWNyb3NGcm9tSUNVX2gKKworLy8gc29t
ZSBkZWZpbmVzIGZyb20gSUNVCisKKyNkZWZpbmUgVTE2X0lTX0xFQUQoYykgKCgoYykmMHhmZmZm
ZmMwMCk9PTB4ZDgwMCkKKyNkZWZpbmUgVTE2X0lTX1RSQUlMKGMpICgoKGMpJjB4ZmZmZmZjMDAp
PT0weGRjMDApCisjZGVmaW5lIFUxNl9TVVJST0dBVEVfT0ZGU0VUICgoMHhkODAwPDwxMFVMKSsw
eGRjMDAtMHgxMDAwMCkKKyNkZWZpbmUgVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxlYWQsIHRyYWls
KSBcCisgICAgKCgoVUNoYXIzMikobGVhZCk8PDEwVUwpKyhVQ2hhcjMyKSh0cmFpbCktVTE2X1NV
UlJPR0FURV9PRkZTRVQpCisKKyNkZWZpbmUgVTE2X0xFQUQoc3VwcGxlbWVudGFyeSkgKFVDaGFy
KSgoKHN1cHBsZW1lbnRhcnkpPj4xMCkrMHhkN2MwKQorI2RlZmluZSBVMTZfVFJBSUwoc3VwcGxl
bWVudGFyeSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpJjB4M2ZmKXwweGRjMDApCisKKyNkZWZp
bmUgVV9JU19TVVJST0dBVEUoYykgKCgoYykmMHhmZmZmZjgwMCk9PTB4ZDgwMCkKKyNkZWZpbmUg
VTE2X0lTX1NJTkdMRShjKSAhVV9JU19TVVJST0dBVEUoYykKKyNkZWZpbmUgVTE2X0lTX1NVUlJP
R0FURShjKSBVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNfU1VSUk9HQVRFX0xFQUQo
YykgKCgoYykmMHg0MDApPT0wKQorCisjZGVmaW5lIFUxNl9ORVhUKHMsIGksIGxlbmd0aCwgYykg
eyBcCisgICAgKGMpPShzKVsoaSkrK107IFwKKyAgICBpZihVMTZfSVNfTEVBRChjKSkgeyBcCisg
ICAgICAgIHVpbnQxNl90IF9fYzI7IFwKKyAgICAgICAgaWYoKGkpPChsZW5ndGgpICYmIFUxNl9J
U19UUkFJTChfX2MyPShzKVsoaSldKSkgeyBcCisgICAgICAgICAgICArKyhpKTsgXAorICAgICAg
ICAgICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWSgoYyksIF9fYzIpOyBcCisgICAgICAgIH0g
XAorICAgIH0gXAorfQorCisjZGVmaW5lIFVfTUFTSyh4KSAoKHVpbnQzMl90KTE8PCh4KSkKKwor
I2VuZGlmCisKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAzODYxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAKKzIwMDgtMTEtMjAgIERvbWluaWsgUsO2dHRzY2hlcyAg
PGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVuaWNvZGUg
ZnVuY3Rpb25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgT3JpZ2luYWwgcGF0Y2ggYnkgSsO8
cmcgQmlsbGV0ZXIgYW5kIE5haWVtIFNoYWlrLgorCisgICAgICAgIEFkZGVkIHByb2JpbmcgZm9y
IGEgaGFyZC1jb2RlZCBsaXN0cyBvZiB0ZXh0IGVuY29kaW5ncy4KKyAgICAgICAgVGhlIGJhc2lz
IG9mIHRoaXMgbGlzdCBpcyB0YWtlbiBmcm9tIHRoZSBlbmNvZGluZ3Mgc3VwcG9ydGVkIGJ5IGlj
b252LAorICAgICAgICB0aGVuIGV4dGVuZGVkIGJ5IHRpcy02MjAsIHdpbmRvd3MtMTI1MSwgZXVj
LWtyIGFuZCB3aW5kb3dzLTEyNTMuCisgICAgICAgIFByb2JpbmcgaXMgbmVjZXNzYXJ5IHdpdGgg
dGhlIGN1cnJlbnQgZGVzaWduIG9mIHRleHQgY29kZWNzCisgICAgICAgIGFzIGljb252LmggZG9l
cyBub3Qgc3VwcG9ydCBlbnVtZXJhdGluZyBhdmFpbGFibGUgZW5jb2RpbmdzLgorCisgICAgICAg
IENoYW5nZWQgYmVoYXZpb3VyIG9mIEdUSyB2ZXJzaW9uIG9mIHRleHRCcmVha0xhc3QgYW5kIHRl
eHRCcmVha0ZpcnN0CisgICAgICAgIHRvIGxvb2sgZm9yIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiBi
cmVha3MuCisKKyAgICAgICAgTm93IHVzaW5nIEdPd25QdHIgZm9yIEdMaWItYWxsb2NhdGVkIG9i
amVjdHMuCisKKyAgICAgICAgVGV4dENvZGVjR3RrIG5vdyBzdXBwb3J0cyBwYXJ0aWFsbHkgdHJh
bnNtaXR0ZWQgbXVsdGlieXRlIGNoYXJhY3RlcnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRleHRCcmVha0xhc3QpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJldmlvdXMp
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRFbmNvZGluZzo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRleHRD
b2RlY01hcHMpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmROZXh0V29yZEZyb21JbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpmaW5kV29yZEJvdW5kYXJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJl
YWtJdGVyYXRvckd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFVwSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2hhcmFjdGVyQnJl
YWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjp3b3JkQnJlYWtJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpsaW5lQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpzZW50
ZW5jZUJyZWFrSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrRmlyc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0
QnJlYWtOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRCcmVha1ByZXZpb3VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRleHRCcmVha1ByZWNlZGluZyk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0
QnJlYWtGb2xsb3dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrQ3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1RleHRCcmVhayk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENvZGVjR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6bmV3VGV4dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0d0azo6aXNFbmNvZGluZ0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNH
dGs6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNH
dGs6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVn
aXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6
OnJlZ2lzdGVyQmFzZUNvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJl
Z2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNHdGs6OlRleHRDb2RlY0d0ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6On5U
ZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWxlYXNlSUNv
bnYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkRlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkVuY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRDb2RlY0d0ay5oOiBBZGRlZC4KKwogMjAwOC0xMS0yMCAgSm9lcmcgQm9ybmVtYW5uICA8am9l
cmcuYm9ybmVtYW5uQHRyb2xsdGVjaC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM4NjE5KQorKysgV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTM2NCwxNCArMTM2NCw5IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEJvdW5kYXJpZXMuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVz
SUNVLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmggXAot
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAotCVdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVLmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwK
LQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmggXAogCVdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjTGF0aW4xLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5j
cHAgXApAQCAtMTcyNCw4ICsxNzE5LDMxIEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHAg
XAotCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIu
aAorCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfSUNVX1VO
SUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaCBc
CisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAorZW5kaWYg
IyBVU0VfSUNVX1VOSUNPREUKKworIyAtLS0tCisjIGdsaWIgdW5pY29kZSBiYWNrZW5kCisjIC0t
LS0KK2lmIFVTRV9HTElCX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRCb3VuZGFyaWVzR3RrLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJl
YWtJdGVyYXRvckd0ay5jcHAKK2VuZGlmCiAKICMgLS0tLQogIyBjdXJsIGh0dHAgYmFja2VuZApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnRE
YXRhR3RrLmNwcAkocmV2aXNpb24gMzg2MTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9TaW1wbGVGb250RGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDYg
QEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1
ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaAkocmV2aXNpb24gMzg2MTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihj
b25zdCBVQ2hhciosIGludCBsZW5ndGgpOwogCiAgICAgaW50IHRleHRCcmVha0ZpcnN0KFRleHRC
cmVha0l0ZXJhdG9yKik7CisgICAgaW50IHRleHRCcmVha0xhc3QoVGV4dEJyZWFrSXRlcmF0b3Iq
KTsKICAgICBpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciopOworICAgIGludCB0
ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRvciopOwogICAgIGludCB0ZXh0QnJlYWtD
dXJyZW50KFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRCcmVha1ByZWNlZGluZyhU
ZXh0QnJlYWtJdGVyYXRvciosIGludCk7CiAgICAgaW50IHRleHRCcmVha0ZvbGxvd2luZyhUZXh0
QnJlYWtJdGVyYXRvciosIGludCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3JJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAJKHJldmlzaW9uIDM4NjE5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODks
MTEgKzg5LDIxIEBAIGludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJdGVyYXRvciogYmkKICAg
ICByZXR1cm4gdWJya19maXJzdChiaSk7CiB9CiAKK2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVh
a0l0ZXJhdG9yKiBiaSkKK3sKKyAgICByZXR1cm4gdWJya19sYXN0KGJpKTsKK30KKwogaW50IHRl
eHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQogewogICAgIHJldHVybiB1YnJrX25l
eHQoYmkpOwogfQogCitpbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGJp
KQoreworICAgIHJldHVybiB1YnJrX3ByZXZpb3VzKGJpKTsKK30KKwogaW50IHRleHRCcmVha1By
ZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCiB7CiAgICAgcmV0dXJuIHVi
cmtfcHJlY2VkaW5nKGJpLCBwb3MpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNv
ZGluZy5jcHAJKHJldmlzaW9uIDM4NjE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx1
bmljb2RlL3Vub3JtLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5jbHVkZSA8UVN0cmlu
Zz4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PHd0Zi9HT3duUHRyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTEwNiw2ICsxMDksMjAgQEAgQ1N0cmluZyBUZXh0RW5jb2Rp
bmc6OmVuY29kZShjb25zdCBVQ2hhcgogICAgIFFTdHJpbmcgc3RyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgUUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoKTsKICAgICBzdHIgPSBzdHIubm9ybWFs
aXplZChRU3RyaW5nOjpOb3JtYWxpemF0aW9uRm9ybV9DKTsKICAgICByZXR1cm4gbmV3VGV4dENv
ZGVjKCp0aGlzKS0+ZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oc3RyLnV0
ZjE2KCkpLCBzdHIubGVuZ3RoKCksIGhhbmRsaW5nKTsKKyNlbGlmIFVTRShHTElCX1VOSUNPREUp
CisgICAgR093blB0cjxjaGFyPiB1dGY4c291cmNlOworICAgIHV0Zjhzb3VyY2Uuc2V0KGdfdXRm
MTZfdG9fdXRmOChjaGFyYWN0ZXJzLCBsZW5ndGgsIDAsIDAsIDApKTsKKworICAgIEdPd25QdHI8
Y2hhcj4gdXRmOG5vcm1hbGl6ZWQ7CisgICAgdXRmOG5vcm1hbGl6ZWQuc2V0KGdfdXRmOF9ub3Jt
YWxpemUodXRmOHNvdXJjZS5nZXQoKSwgLTEsIEdfTk9STUFMSVpFX05GQykpOworCisgICAgbG9u
ZyB1dGYxNmxlbmd0aDsKKyAgICBHT3duUHRyPFVDaGFyPiB1dGYxNm5vcm1hbGl6ZWQ7CisgICAg
dXRmMTZub3JtYWxpemVkLnNldChnX3V0ZjhfdG9fdXRmMTYodXRmOG5vcm1hbGl6ZWQuZ2V0KCks
IC0xLCAwLCAmdXRmMTZsZW5ndGgsIDApKTsKKworICAgIENTdHJpbmcgcmVzdWx0ID0gbmV3VGV4
dENvZGVjKCp0aGlzKS0+ZW5jb2RlKHV0ZjE2bm9ybWFsaXplZC5nZXQoKSwgdXRmMTZsZW5ndGgs
IGhhbmRsaW5nKTsKKworICAgIHJldHVybiByZXN1bHQ7CiAjZW5kaWYKIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCShyZXZpc2lv
biAzODYxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAKICNpZiBQTEFURk9STShRVCkKICNp
bmNsdWRlICJxdC9UZXh0Q29kZWNRdC5oIgogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorI2lu
Y2x1ZGUgImd0ay9UZXh0Q29kZWNHdGsuaCIKKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCkBAIC0xOTIsNiArMTk1LDExIEBAIHN0YXRpYyB2b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01h
cHMoKQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1Rl
eHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlQ29kZWNz
KGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAg
ICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2Rp
bmdOYW1lTWFwKTsKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1Rl
eHRDb2RlY01hcCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFw
cygpCkBAIC0yMTAsNiArMjE4LDExIEBAIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMo
KQogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29k
aW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckNvZGVjcyhhZGRUb1RleHRD
b2RlY01hcCk7CiAjZW5kaWYKKworI2lmIFVTRShHTElCX1VOSUNPREUpCisgICAgVGV4dENvZGVj
R3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVN
YXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhhZGRUb1RleHRD
b2RlY01hcCk7CisjZW5kaWYKIH0KIAogc3RkOjphdXRvX3B0cjxUZXh0Q29kZWM+IG5ld1RleHRD
b2RlYyhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJn
IEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRl
ICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitpbnQgZmluZE5leHRXb3JkRnJvbUluZGV4KGNvbnN0IFVDaGFyKiBj
aGFycywgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBib29sIGZvcndhcmQpCit7CisgICAgVGV4dEJy
ZWFrSXRlcmF0b3IqIGl0ID0gd29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisKKyAgICBp
ZiAoZm9yd2FyZCkgeworICAgICAgICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwg
cG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRpb24gIT0gVGV4dEJyZWFrRG9uZSkgewor
ICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgd2hlbiB0aGUgY2hhcmFjdGVyIHByZWNl
ZWRpbmcgdGhlIGJyZWFrCisgICAgICAgICAgICAvLyBpcyBhbHBoYW51bWVyaWMuCisgICAgICAg
ICAgICBpZiAocG9zaXRpb24gPCBsZW4gJiYgZ191bmljaGFyX2lzYWxudW0oY2hhcnNbcG9zaXRp
b24gLSAxXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgICAgICAg
ICBwb3NpdGlvbiA9IHRleHRCcmVha0ZvbGxvd2luZyhpdCwgcG9zaXRpb24pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3NpdGlvbiA9
IHRleHRCcmVha1ByZWNlZGluZyhpdCwgcG9zaXRpb24pOworICAgICAgICB3aGlsZSAocG9zaXRp
b24gIT0gVGV4dEJyZWFrRG9uZSkgeworICAgICAgICAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcg
d2hlbiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlz
IGFscGhhbnVtZXJpYy4KKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+IDAgJiYgZ191bmljaGFy
X2lzYWxudW0oY2hhcnNbcG9zaXRpb25dKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRp
b247CisKKyAgICAgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3Np
dGlvbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQg
ZmluZFdvcmRCb3VuZGFyeShjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW4sIGludCBwb3NpdGlv
biwgaW50KiBzdGFydCwgaW50KiBlbmQpCit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0g
d29yZEJyZWFrSXRlcmF0b3IoY2hhcnMsIGxlbik7CisgICAgKmVuZCA9IHRleHRCcmVha0ZvbGxv
d2luZyhpdCwgcG9zaXRpb24pOworICAgIGlmICgqZW5kIDwgMCkKKyAgICAgICAgKmVuZCA9IHRl
eHRCcmVha0xhc3QoaXQpOworICAgICpzdGFydCA9IHRleHRCcmVha1ByZXZpb3VzKGl0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGFycyBLbm9s
bCA8bGFyc0B0cm9sbHRlY2guY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRl
ciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVz
IDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisKKyNpbmNsdWRlIDxwYW5n
by9wYW5nby5oPgorCisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitlbnVtIFVCcmVha0l0ZXJhdG9yVHlwZSB7CisgICAgVUJSS19DSEFSQUNURVIsCisg
ICAgVUJSS19XT1JELAorICAgIFVCUktfTElORSwKKyAgICBVQlJLX1NFTlRFTkNFCit9OworCitj
bGFzcyBUZXh0QnJlYWtJdGVyYXRvciB7CitwdWJsaWM6CisgICAgVUJyZWFrSXRlcmF0b3JUeXBl
IG1fdHlwZTsKKyAgICBpbnQgbV9sZW5ndGg7CisgICAgUGFuZ29Mb2dBdHRyKiBtX2xvZ19hdHRy
czsKKworICAgIGludCBtX2luZGV4OworfTsKKworc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBz
ZXRVcEl0ZXJhdG9yKGJvb2wmIGNyZWF0ZWRJdGVyYXRvciwgVGV4dEJyZWFrSXRlcmF0b3IqJiBp
dGVyYXRvciwKKyAgICBVQnJlYWtJdGVyYXRvclR5cGUgdHlwZSwgY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoIWNyZWF0ZWRJdGVyYXRvcikgeworICAgICAgICBpdGVyYXRvciA9IG5ldyBUZXh0
QnJlYWtJdGVyYXRvcigpOworICAgICAgICBjcmVhdGVkSXRlcmF0b3IgPSB0cnVlOworICAgIH0K
KyAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxvbmcgdXRmOGxl
bjsKKyAgICBHT3duUHRyPGNoYXI+IHV0Zjg7CisgICAgdXRmOC5zZXQoZ191dGYxNl90b191dGY4
KHN0cmluZywgbGVuZ3RoLCAwLCAmdXRmOGxlbiwgMCkpOworCisgICAgLy8gRklYTUU6IGFzc3Vt
ZXMgbm8gc3Vycm9nYXRlIHBhaXJzCisKKyAgICBpdGVyYXRvci0+bV90eXBlID0gdHlwZTsKKyAg
ICBpdGVyYXRvci0+bV9sZW5ndGggPSBsZW5ndGg7CisgICAgaXRlcmF0b3ItPm1fbG9nX2F0dHJz
ID0gZ19uZXcwKFBhbmdvTG9nQXR0ciwgbGVuZ3RoICsgMSk7CisgICAgaXRlcmF0b3ItPm1faW5k
ZXggPSAtMTsKKyAgICBwYW5nb19nZXRfbG9nX2F0dHJzKHV0ZjguZ2V0KCksIHV0ZjhsZW4sIC0x
LCAwLCBpdGVyYXRvci0+bV9sb2dfYXR0cnMsIGxlbmd0aCArIDEpOworCisgICAgcmV0dXJuIGl0
ZXJhdG9yOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihj
b25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0
ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0
ZXJhdG9yKiBzdGF0aWNDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0
ZXJhdG9yKGNyZWF0ZWRDaGFyYWN0ZXJCcmVha0l0ZXJhdG9yLAorICAgICAgICBzdGF0aWNDaGFy
YWN0ZXJCcmVha0l0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgc3RyaW5nLCBsZW5ndGgpOworfQor
CitUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVkV29yZEJyZWFrSXRlcmF0
b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1dvcmRCcmVh
a0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRXb3JkQnJlYWtJdGVy
YXRvciwKKyAgICAgICAgc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIFVCUktfV09SRCwgc3RyaW5n
LCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogbGluZUJyZWFrSXRlcmF0b3IoY29u
c3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVk
TGluZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3Iq
IHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yOworICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0
ZWRMaW5lQnJlYWtJdGVyYXRvciwKKyAgICAgICAgc3RhdGljTGluZUJyZWFrSXRlcmF0b3IsIFVC
UktfTElORSwgc3RyaW5nLCBsZW5ndGgpOworfQorCitUZXh0QnJlYWtJdGVyYXRvciogc2VudGVu
Y2VCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAg
c3RhdGljIGJvb2wgY3JlYXRlZFNlbnRlbmNlQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0
YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yOworICAg
IHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IsCisgICAg
ICAgIHN0YXRpY1NlbnRlbmNlQnJlYWtJdGVyYXRvciwgVUJSS19TRU5URU5DRSwgc3RyaW5nLCBs
ZW5ndGgpOworfQorCitpbnQgdGV4dEJyZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQor
eworICAgIC8vIHNlZSB0ZXh0QnJlYWtMYXN0CisgICAgCisgICAgaW50IGZpcnN0Q3Vyc29yUG9z
aXRpb24gPSAtMTsKKyAgICBpbnQgcG9zID0gMDsKKyAgICB3aGlsZShwb3MgPD0gYmktPm1fbGVu
Z3RoICYmIChmaXJzdEN1cnNvclBvc2l0aW9uIDwgMCkpIHsKKyAgICAgICAgaWYgKGJpLT5tX2xv
Z19hdHRyc1twb3NdLmlzX2N1cnNvcl9wb3NpdGlvbikKKyAgICAgICAgICAgIGZpcnN0Q3Vyc29y
UG9zaXRpb24gPSBwb3M7CisgICAgfQorICAgIGJpLT5tX2luZGV4ID0gZmlyc3RDdXJzb3JQb3Np
dGlvbjsKKyAgICByZXR1cm4gZmlyc3RDdXJzb3JQb3NpdGlvbjsKK30KKworaW50IHRleHRCcmVh
a0xhc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIC8vIHRleHRCcmVha0xhc3QgaXMg
bm90IG1lYW50IHRvIGZpbmQgYnJlYWtzIGFjY29yZGluZyB0byBiaS0+bV90eXBlIGJ1dCByZWFs
bHkgbGFzdCBjaGFyYWN0ZXIgCisgICAgLy8gKGNtcCBJQ1UgZG9jdW1lbnRhdGlvbiBmb3IgdWJy
a19maXJzdCBhbmQgdWJya19sYXN0KQorICAgIC8vIHNvIHdlIHNob3VsZCBhZHZhbmNlIG9yIHRy
YXZlcnNlIGJhY2sgYmFzZWQgb24gYmktPm1fbG9nX2F0dHJzIGN1cnNvciBwb3NpdGlvbnMKKyAg
ICAKKyAgICAvLyBmcm9tIElDVSBkb2NzIGZvciB1YnJrX2xhc3Q6CisgICAgLy8gIkRldGVybWlu
ZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgYmV5b25kIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUg
dGV4dCBiZWluZyBzY2FubmVkLiIgCisKKyAgICAvLyBJZiBsYXN0IGNoYXJhY3RlciBwb3NpdGlv
biBpbiB0aGUgb3JpZ2luYWwgc3RyaW5nIGlzIGEgd2hpdGVzcGFjZSwKKyAgICAvLyB0cmF2ZXJz
ZSB0byB0aGUgbGVmdCB1bnRpbCB0aGUgZmlyc3Qgbm9uLXdoaXRlIGNoYXJhY3RlciBwb3NpdGlv
biBpcyBmb3VuZAorICAgIC8vIGFuZCByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCB3
aGl0ZS1zcGFjZSBjaGFyIGFmdGVyIHRoaXMgb25lLgorICAgIC8vIG90aGVyd2lzZSByZXR1cm4g
bV9sZW5ndGgsIGFzICJ0aGUgZmlyc3QgY2hhcmFjdGVyIGJleW9uZCB0aGUgbGFzdCIgaXMgb3V0
c2lkZSBvdXIgc3RyaW5nLgorICAgIAorICAgIGJvb2wgd2hpdGVTcGFjZUF0VGhlRW5kID0gdHJ1
ZTsKKyAgICBpbnQgbmV4dFdoaXRlU3BhY2VQb3MgPSBiaS0+bV9sZW5ndGg7CisgICAgCisgICAg
aW50IHBvcyA9IGJpLT5tX2xlbmd0aDsKKyAgICB3aGlsZSAocG9zID49IDAgJiYgd2hpdGVTcGFj
ZUF0VGhlRW5kKSB7CisgICAgICAgIGlmIChiaS0+bV9sb2dfYXR0cnNbcG9zXS5pc19jdXJzb3Jf
cG9zaXRpb24pIHsKKyAgICAgICAgICAgIGlmICh3aGl0ZVNwYWNlQXRUaGVFbmQgPSBiaS0+bV9s
b2dfYXR0cnNbcG9zXS5pc193aGl0ZSkKKyAgICAgICAgICAgICAgICBuZXh0V2hpdGVTcGFjZVBv
cyA9IHBvczsKKyAgICAgICAgfQorICAgICAgICBwb3MtLTsKKyAgICB9CisgICAgYmktPm1faW5k
ZXggPSBuZXh0V2hpdGVTcGFjZVBvczsKKyAgICByZXR1cm4gbmV4dFdoaXRlU3BhY2VQb3M7Cit9
CisKK2ludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICBmb3Ig
KGludCBpID0gYmktPm1faW5kZXggKyAxOyBpIDw9IGJpLT5tX2xlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfTElORSAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNf
bGluZV9icmVhaykgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgIH0gCisgICAgICAgIGlmIChiaS0+bV90eXBlID09IFVCUktfV09S
RCAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3dvcmRfc3RhcnQgfHwgYmktPm1fbG9nX2F0dHJz
W2ldLmlzX3dvcmRfZW5kKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFNpbmdsZSBtdWx0aWJ5
dGUgY2hhcmFjdGVycyAoaS5lLiB3aGl0ZSBzcGFjZSBhcm91bmQgdGhlbSksIHN1Y2ggYXMgdGhl
IGV1cm8gc3ltYm9sIOKCrCwgCisgICAgICAgICAgICAvLyBhcmUgbm90IG1hcmtlZCBhcyB3b3Jk
X3N0YXJ0ICYgd29yZF9lbmQgYXMgb3Bwb3NlZCB0byB0aGUgd2F5IElDVSBkb2VzIGl0CisgICAg
ICAgICAgICAvLyBUaGlzIGxlYWRzIC0gZm9yIGV4YW1wbGUgLSB0byBkaWZmZXJlbnQgd29yZCBz
ZWxlY3Rpb24gYmVoYXZpb3VyIHdoZW4gcmlnaHQgY2xpY2tpbmcuCisgICAgICAgICAgICBiaS0+
bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoYmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNf
Y3Vyc29yX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJS
S19TRU5URU5DRSAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNlX3N0YXJ0IHx8IGJp
LT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAgICAgICAgICBiaS0+bV9p
bmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gVGV4dEJyZWFrRG9uZTsKK30KKworaW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVh
a0l0ZXJhdG9yKiBiaSkKK3sKKyAgICBmb3IgKGludCBpID0gYmktPm1faW5kZXggLSAxOyBpID49
IDA7IGktLSkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1f
bG9nX2F0dHJzW2ldLmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0g
aTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IAorICAgICAgICBpZiAoYmktPm1f
dHlwZSA9PSBVQlJLX1dPUkQgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX3N0YXJ0IHx8
IGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX2VuZCkpIHsKKyAgICAgICAgICAgIGJpLT5tX2lu
ZGV4ID0gaTsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IAorICAgICAgICBpZiAo
YmktPm1fdHlwZSA9PSBVQlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfY3Vy
c29yX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAg
ICByZXR1cm4gaTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19T
RU5URU5DRSAmJiAoYmktPm1fbG9nX2F0dHJzW2ldLmlzX3NlbnRlbmNlX3N0YXJ0IHx8IGJpLT5t
X2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9lbmQpKSB7CisgICAgICAgICAgICBiaS0+bV9pbmRl
eCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gdGV4dEJyZWFrRmlyc3QoYmkpOworfQorCitpbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRC
cmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBiaS0+bV9pbmRleCA9IHBvczsKKyAg
ICByZXR1cm4gdGV4dEJyZWFrUHJldmlvdXMoYmkpOworfQorCitpbnQgdGV4dEJyZWFrRm9sbG93
aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBpZiAocG9zIDwgMCkK
KyAgICAgICAgcG9zID0gLTE7CisgICAgYmktPm1faW5kZXggPSBwb3M7CisgICAgcmV0dXJuIHRl
eHRCcmVha05leHQoYmkpOworfQorCitpbnQgdGV4dEJyZWFrQ3VycmVudChUZXh0QnJlYWtJdGVy
YXRvciogYmkpCit7CisgICAgcmV0dXJuIGJpLT5tX2luZGV4OworfQorCitib29sIGlzVGV4dEJy
ZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKK3sKKyAgICBpZiAoYmktPm1faW5k
ZXggPj0gMCkgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1f
bG9nX2F0dHJzW2JpLT5tX2luZGV4XS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JE
ICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfd29yZF9lbmQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9IAorICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBV
QlJLX0NIQVJBQ1RFUiAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX2NoYXJfYnJl
YWspIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IAorICAgICAgICBpZiAo
YmktPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRl
eF0uaXNfc2VudGVuY2VfZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcg
QmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA4IERvbWluaWsgUsO2
dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDb2RlY0d0ay5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9H
T3duUHRyLmg+CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCit1c2luZyBzdGQ6OmF1dG9fcHRyOwor
dXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCisKKy8vIGFwcGVuZE9t
aXR0aW5nQk9NIGlzIGdvbmUgKGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzMzMzgw
KSwgc28gd2UgbmVlZCB0byBhdm9pZCBnZW5lcmF0aW5nIGV4dHJhIEJPTSdzCisvLyBoZXJlLiBU
aGlzIGNhbiBiZSBhY2hpZXZlZCBieSBzcGVjaWZ5aW5nIHRoZSBVVEYtMTYgY29kZWNzJyBlbmRp
YW5uZXNzIGV4cGxpY2l0bHkgd2hlbiBpbml0aWFsaXppbmcgaWNvbnYKKworI2lmIChHX0JZVEVf
T1JERVIgPT0gR19CSUdfRU5ESUFOKQorICAgIGNvbnN0IGdjaGFyKiBXZWJDb3JlOjpUZXh0Q29k
ZWNHdGs6Om1faW50ZXJuYWxFbmNvZGluZ05hbWUgPSAiVVRGLTE2QkUiOworI2Vsc2UgCisgICAg
Y29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRlcm5hbEVuY29kaW5nTmFt
ZSA9ICJVVEYtMTZMRSI7CisjZW5kaWYKKworCisvLyBsaXN0IG9mIHRleHQgZW5jb2RpbmdzIGFu
ZCB0aGVpciBhbGlhc2VzCisvLyB0aGUgZmlyc3QgZW50cnkvImFsaWFzIiBpcyB0aGUgY2Fub25p
Y2FsIG5hbWUsIGVhY2ggYWxpYXMgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYSAwCisKKy8v
IFVuaWNvZGUKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19VVEZfOCAgICAgICAgICAgID0geyAiVVRGLTgiLCAwfTsgCisKKy8vIFdlc3Rl
cm4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19JU09fODg1OV8xICAgICAgID0geyAiSVNPLTg4NTktMSIsICJDUDgxOSIsICJJQk04MTki
LCAiSVNPLUlSLTEwMCIsICJJU084ODU5LTEiLCAiSVNPXzg4NTktMSIsICJJU09fODg1OS0xOjE5
ODciLCAgIkwxIiwgIkxBVElOMSIsICJDU0lTT0xBVElOMSIsIDB9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01BQ1JPTUFOICAgICAg
ICAgPSB7ICJNQUNST01BTiIsICJNQUMiLCAiTUFDSU5UT1NIIiwgIkNTTUFDSU5UT1NIIiwgMH07
CisKKy8vIEphcGFuZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTICAgICAgICA9IHsgIlNISUZUX0pJUyIsICJNU19L
QU5KSSIsICJTSElGVC1KSVMiLCAiU0pJUyIsICJDU1NISUZUSklTIiwgMH07CitUZXh0Q29kZWNH
dGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfRVVDX0pQICAg
ICAgICAgICA9IHsgIkVVQ19KUCIsICJFVUMtSlAiLCAiRVVDSlAiLCAiRVhURU5ERURfVU5JWF9D
T0RFX1BBQ0tFRF9GT1JNQVRfRk9SX0pBUEFORVNFIiwgIkNTRVVDUEtERk1USkFQQU5FU0UiLCAw
fTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19JU09fMjAyMl9KUCAgICAgID0geyAiSVNPLTIwMjItSlAiLCAwfTsKKworLy8gVHJhZGl0
aW9uYWwgQ2hpbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0JJRzUgICAgICAgICAgICAgPSB7ICJCSUc1IiwgIkJJRy01IiwgIkJJ
Ry1GSVZFIiwgIkJJRzUiLCAiQklHRklWRSIsICJDTi1CSUc1IiwgIkNTQklHNSIsIDB9OworVGV4
dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0JJ
RzVfSEtTQ1MgICAgICAgPSB7ICJCSUc1LUhLU0NTIiwgIkJJRzUtSEtTQ1M6MjAwNCIsICJCSUc1
SEtTQ1MiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjpt
X2NvZGVjQWxpYXNlc19DUDk1MCAgICAgICAgICAgID0geyAiQ1A5NTAiLCAwfTsKKworLy8gS29y
ZWFuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfSVNPXzIwMjJfS1IgICAgICA9IHsgIklTTy0yMDIyLUtSIiwgIkNTSVNPMjAyMktSIiwg
MH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfQ1A5NDkgICAgICAgICAgICA9IHsgIkNQOTQ5IiwgIlVIQyIsIDB9OworVGV4dENvZGVj
R3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0VVQ19LUiAg
ICAgICAgICAgPSB7ICJFVUMtS1IiLCAiQ1NFVUNLUiIsIDAgfTsKKworLy8gQXJhYmljCitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNP
Xzg4NTlfNiAgICAgICA9IHsgIklTTy04ODU5LTYiLCAiQVJBQklDIiwgIkFTTU8tNzA4IiwgIkVD
TUEtMTE0IiwgIklTTy1JUi0xMjciLCAiSVNPODg1OS02IiwgIklTT184ODU5LTYiLCAiSVNPXzg4
NTktNjoxOTg3IiwgIkNTSVNPTEFUSU5BUkFCSUMiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNB
bGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTYgICAgICAgICAgID0g
eyAiQ1AxMjU2IiwgIk1TLUFSQUIiLCAiV0lORE9XUy0xMjU2IiwgMH07CisKKy8vIEhlYnJldwor
VGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2Vz
X0lTT184ODU5XzggICAgICAgPSB7ICJJU08tODg1OS04IiwgIkhFQlJFVyIsICJJU08tODg1OS04
IiwgIklTTy1JUi0xMzgiLCAiSVNPODg1OS04IiwgIklTT184ODU5LTgiLCAiSVNPXzg4NTktODox
OTg4IiwgIkNTSVNPTEFUSU5IRUJSRVciLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTUgICAgICAgICAgID0geyAiQ1Ax
MjU1IiwgIk1TLUhFQlIiLCAiV0lORE9XUy0xMjU1IiwgMH07CisKKy8vIEdyZWVrCitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4
NTlfNyAgICAgICA9IHsgIklTTy04ODU5LTciLCAiRUNNQS0xMTgiLCAiRUxPVF85MjgiLCAiR1JF
RUsiLCAiR1JFRUs4IiwgIklTTy1JUi0xMjYiLCAiSVNPODg1OS03IiwgIklTT184ODU5LTciLCAi
SVNPXzg4NTktNzoxOTg3IiwgIklTT184ODU5LTc6MjAwMyIsICJDU0kiLCAwfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDg2OSAg
ICAgICAgICAgID0geyAiQ1A4NjkiLCAiODY5IiwgIkNQLUdSIiwgIklCTTg2OSIsICJDU0lCTTg2
OSIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX1dJTkRPV1NfMTI1MyAgICAgPSB7ICJXSU5ET1dTLTEyNTMiLCAwIH07CisKKy8v
IEN5cmlsbGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfSVNPXzg4NTlfNSAgICAgICA9IHsgIklTTy04ODU5LTUiLCAiQ1lSSUxMSUMi
LCAiSVNPLUlSLTE0NCIsICJJU084ODU5LTUiLCAiSVNPXzg4NTktNSIsICJJU09fODg1OS01OjE5
ODgiLCAiQ1NJU09MQVRJTkNZUklMTElDIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfS09JOF9SICAgICAgICAgICA9IHsgIktP
STgtUiIsICJDU0tPSThSIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A4NjYgICAgICAgICAgICA9IHsgIkNQODY2IiwgIjg2
NiIsICJJQk04NjYiLCAiQ1NJQk04NjYiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19LT0k4X1UgICAgICAgICAgID0geyAiS09J
OC1VIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfV0lORE9XU18xMjUxICAgICA9IHsgIldJTkRPV1MtMTI1MSIsIDB9OworVGV4
dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01B
Q0NZUklMTElDICAgICAgPSB7ICJNQUNDWVJJTExJQyIsIDB9OworCisvLyBUaGFpCitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A4NzQg
ICAgICAgICAgICA9IHsgIkNQODc0IiwgIldJTkRPV1MtODc0IiwgMH07CitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfVElTXzYyMCAgICAg
ICAgICA9IHsgIlRJUy02MjAiLCAwfTsKKworLy8gU2ltcGxpZmllZCBDaGluZXNlCitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfR0JLICAg
ICAgICAgICAgICA9IHsgIkdCSyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBU
ZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0haICAgICAgICAgICAgICAgPSB7ICJIWiIsICJI
Wi1HQi0yMzEyIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfR0IxODAzMCAgICAgICAgICA9IHsgIkdCMTgwMzAiLCAwfTsKKwor
Ly8gQ2VudHJhbCBFdXJvcGVhbgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIgICAgICAgPSB7ICJJU08tODg1OS0yIiwg
IklTTy1JUi0xMDEiLCAiSVNPODg1OS0yIiwgIklTT184ODU5LTIiLCAiSVNPXzg4NTktMjoxOTg3
IiwgIkwyIiwgIkxBVElOMiIsICJDU0lTT0xBVElOMiIsIDB9OworVGV4dENvZGVjR3RrOjpjb2Rl
Y0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1MCAgICAgICAgICAg
PSB7ICJDUDEyNTAiLCAiTVMtRUUiLCAiV0lORE9XUy0xMjUwIiwgMH07CitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVV
Uk9QRSA9IHsgIk1BQ0NFTlRSQUxFVVJPUEUiLCAwfTsKKworLy8gVmlldG5hbWVzZQorVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1
OCAgICAgICAgICAgPSB7ICJDUDEyNTgiLCAiV0lORE9XUy0xMjU4IiwgMH07CisKKy8vIFR1cmtp
c2gKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19DUDEyNTQgICAgICAgICAgID0geyAiQ1AxMjU0IiwgIk1TLVRVUksiLCAiV0lORE9XUy0x
MjU0IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfSVNPXzg4NTlfOSAgICAgICA9IHsgIklTTy04ODU5LTkiLCAiSVNPLUlSLTE0
OCIsICJJU084ODU5LTkiLCAiSVNPXzg4NTktOSIsICJJU09fODg1OS05OjE5ODkiLCAiTDUiLCAi
TEFUSU41IiwgIkNTSVNPTEFUSU41IiwgMH07CisKKy8vIEJhbHRpYworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NyAgICAgICAg
ICAgPSB7ICJDUDEyNTciLCAiV0lOQkFMVFJJTSIsICJXSU5ET1dTLTEyNTciLCAwfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09f
ODg1OV80ICAgICAgID0geyAiSVNPLTg4NTktNCIsICJJU08tSVItMTEwIiwgIklTTzg4NTktNCIs
ICJJU09fODg1OS00IiwgIklTT184ODU5LTQ6MTk4OCIsICJMNCIsICJMQVRJTjQiLCAiQ1NJU09M
QVRJTjQiLCAwfTsKKworZ2NvbnN0cG9pbnRlciBjb25zdCBUZXh0Q29kZWNHdGs6Om1faWNvbnZC
YXNlQ29kZWNMaXN0W10gPSB7IAorICAgIC8vIFVuaWNvZGUKKyAgICAmbV9jb2RlY0FsaWFzZXNf
VVRGXzgsCisKKyAgICAvLyBXZXN0ZXJuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzEK
K307CisKK2djb25zdHBvaW50ZXIgY29uc3QgVGV4dENvZGVjR3RrOjptX2ljb252RXh0ZW5kZWRD
b2RlY0xpc3RbXSA9IAoreworICAgIC8vIFdlc3Rlcm4KKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFD
Uk9NQU4sCisKKyAgICAvLyBKYXBhbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19TSElGVF9KSVMs
CisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19KUCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzIw
MjJfSlAsCisKKyAgICAvLyBTaW1wbGlmaWVkIENoaW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNf
QklHNSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQklHNV9IS1NDUywKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfQ1A5NTAsCisKKyAgICAvLyBLb3JlYW4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJf
S1IsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQOTQ5LAorICAgICZtX2NvZGVjQWxpYXNlc19FVUNf
S1IsCisKKyAgICAvLyBBcmFiaWMKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNiwKKyAg
ICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU2LAorICAgIAorICAgIC8vIEhlYnJldworICAgICZtX2Nv
ZGVjQWxpYXNlc19JU09fODg1OV84LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTUsCisgICAg
CisgICAgLy8gR3JlZWsKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNywKKyAgICAmbV9j
b2RlY0FsaWFzZXNfQ1A4NjksCisgICAgJm1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MywKKyAg
ICAKKyAgICAvLyBDeXJpbGxpYworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV81LAorICAg
ICZtX2NvZGVjQWxpYXNlc19LT0k4X1IsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQODY2LAorICAg
ICZtX2NvZGVjQWxpYXNlc19LT0k4X1UsCisgICAgJm1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1
MSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUMsCisgICAgCisgICAgLy8gVGhhaQor
ICAgICZtX2NvZGVjQWxpYXNlc19DUDg3NCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfVElTXzYyMCwK
KyAgICAKKyAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0dC
SywKKyAgICAmbV9jb2RlY0FsaWFzZXNfSFosCisgICAgJm1fY29kZWNBbGlhc2VzX0dCMTgwMzAs
CisgICAgCisgICAgLy8gQ2VudHJhbCBFdXJvcGVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09f
ODg1OV8yLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTAsCisgICAgJm1fY29kZWNBbGlhc2Vz
X01BQ0NFTlRSQUxFVVJPUEUsCisgICAgCisgICAgLy8gVmlldG5hbWVzZQorICAgICZtX2NvZGVj
QWxpYXNlc19DUDEyNTgsCisgICAgCisgICAgLy8gVHVya2lzaAorICAgICZtX2NvZGVjQWxpYXNl
c19DUDEyNTQsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzksCisgICAgCisgICAgLy8g
QmFsdGljCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NywKKyAgICAmbV9jb2RlY0FsaWFzZXNf
SVNPXzg4NTlfNAorfTsKKworCitjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAx
NjM4NDsKKyAgICAKKworc3RhdGljIGF1dG9fcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjR3Rr
KGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQoreworI2lmbmRlZiBO
REVCVUcKKyAgICAvLyB0b28gbm9pc3kgaWYgZWFjaCBVVEYtOCBjb2RlYyBjcmVhdGlvbiBpcyBs
b2dnZWQKKyAgICAvLyBpZiAoc3RyY21wKGVuY29kaW5nLm5hbWUoKSwgIlVURi04IikpCisgICAg
Ly8gICAgIExPRyhUZXh0Q29udmVyc2lvbiwgImNyZWF0aW5nIG5ldyB0ZXh0IGNvZGVjIGZvciBl
bmNvZGluZyBuYW1lICVzIiwgZW5jb2RpbmcubmFtZSgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IGF1dG9fcHRyPFRleHRDb2RlYz4obmV3IFRleHRDb2RlY0d0ayhlbmNvZGluZykpOworfQorCitn
Ym9vbGVhbiBUZXh0Q29kZWNHdGs6OmlzRW5jb2RpbmdBdmFpbGFibGUoY29uc3QgZ2NoYXIqIGVu
Y05hbWUpCit7CisgICAgR0lDb252IHRlc3RlcjsKKyAgICAvLyB0ZXN0IGRlY29kaW5nCisgICAg
dGVzdGVyID0gZ19pY29udl9vcGVuKG1faW50ZXJuYWxFbmNvZGluZ05hbWUsIGVuY05hbWUpOwor
ICAgIGlmICh0ZXN0ZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAg
ICBMT0dfRVJST1IoIiVzIG5vdCBkZWNvZGFibGUgPT4gbm90IGF2YWlsYWJsZSEiLCBlbmNOYW1l
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAgICAgIGdfaWNvbnZf
Y2xvc2UodGVzdGVyKTsKKyAgICAgICAgLy8gdGVzdCBlbmNvZGluZworICAgICAgICB0ZXN0ZXIg
PSBnX2ljb252X29wZW4oZW5jTmFtZSwgbV9pbnRlcm5hbEVuY29kaW5nTmFtZSk7CisgICAgICAg
IGlmICh0ZXN0ZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCIlcyBub3QgZW5jb2RhYmxlID0+IG5vdCBhdmFpbGFibGUhIiwgZW5jTmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBnX2ljb252X2Nsb3NlKHRlc3Rlcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRW5jb2RpbmdO
YW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKQorewor
ICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBlbmNvZGluZ0xpc3Q7CisgICAgdW5zaWduZWQgaW50IGxp
c3RMZW5ndGggPSAwOworICAgIGlmIChleHRlbmRlZCkgeworICAgICAgICBlbmNvZGluZ0xpc3Qg
PSBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2Yo
bV9pY29udkV4dGVuZGVkQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZCYXNlQ29kZWNMaXN0OworICAgICAgICBs
aXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZCYXNlQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIp
OworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsg
KytpKSB7CisgICAgICAgIGNvZGVjQWxpYXNMaXN0ICpjb2RlY0FsaWFzZXMgPSBzdGF0aWNfY2Fz
dDxjb2RlY0FsaWFzTGlzdCo+KGVuY29kaW5nTGlzdFtpXSk7CisgICAgICAgIGludCBjb2RlY0Nv
dW50ID0gLTE7CisgICAgICAgIGNvbnN0IGdjaGFyICpjYW5vbmljYWxOYW1lLCAqY3VycmVudEFs
aWFzOworICAgICAgICBib29sIGNhbm9uaWNhbEF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgIAor
ICAgICAgICAvLyBmb3IgZWFjaCBvZiB0aGUgYWxpYXMgbGlzdHM6CisgICAgICAgIC8vIGJhaWwg
b3V0IGlmIGNhbm9uaWNhbCBpcyBub3QgYXZhaWxhYmxlLAorICAgICAgICAvLyB0aGVuIGNvbnRp
bnVlIHRlc3RpbmcgZWFjaCBhbGlhcywgCisgICAgICAgIC8vIGlmIGF2YWlsYWJsZSwgYWRkIGl0
IHRvIHRoZSBsaXN0LCBtYXBwaW5nIGl0IHRvIGl0cyBjYW5vbmljYWwgbmFtZQorCisgICAgICAg
IHdoaWxlICgoY3VycmVudEFsaWFzID0gKCpjb2RlY0FsaWFzZXMpWysrY29kZWNDb3VudF0pICYm
IGNhbm9uaWNhbEF2YWlsYWJsZSkgeworICAgICAgICAgICAgYm9vbCBjdXJyZW50QXZhaWxhYmxl
ID0gaXNFbmNvZGluZ0F2YWlsYWJsZShjdXJyZW50QWxpYXMpOworCisgICAgICAgICAgICBpZiAo
Y29kZWNDb3VudCA9PSAwICYmIGN1cnJlbnRBdmFpbGFibGUpIHsKKyAgICAgICAgICAgICAgICBj
YW5vbmljYWxOYW1lID0gY3VycmVudEFsaWFzOworICAgICAgICAgICAgICAgIGNhbm9uaWNhbEF2
YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgTE9HX1ZFUkJPU0UoVGV4dENvbnZlcnNp
b24sICJyZWdpc3RlcmluZyBlbmNvZGluZyBjYW5vbmljYWwgJXMiLCBjYW5vbmljYWxOYW1lKTsK
KyAgICAgICAgICAgICAgICByZWdpc3RyYXIoY2Fub25pY2FsTmFtZSwgY2Fub25pY2FsTmFtZSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVjQ291bnQgPT0gMCAmJiAhY3VycmVudEF2YWls
YWJsZSkKKyAgICAgICAgICAgICAgICBjYW5vbmljYWxBdmFpbGFibGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGNvZGVjQ291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
RW5jb2RpbmdBdmFpbGFibGUoY3VycmVudEFsaWFzKSkgeworICAgICAgICAgICAgICAgICAgICBM
T0dfVkVSQk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVuY29kaW5nIG5hbWUgYWxp
YXMgJXMgdG8gY2Fub25pY2FsICVzIiwgY3VycmVudEFsaWFzLCBjYW5vbmljYWxOYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVnaXN0cmFyKGN1cnJlbnRBbGlhcywgY2Fub25pY2FsTmFtZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9Cit9
CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIg
cmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBlbmNv
ZGluZ0xpc3Q7CisgICAgdW5zaWduZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAgIGlmIChleHRl
bmRlZCkgeworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3Q7
CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29kZWNMaXN0KS9z
aXplb2YoZ3BvaW50ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1f
aWNvbnZCYXNlQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZC
YXNlQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIGNvZGVjQWxpYXNM
aXN0ICpjb2RlY0FsaWFzZXMgPSBzdGF0aWNfY2FzdDxjb2RlY0FsaWFzTGlzdCo+KGVuY29kaW5n
TGlzdFtpXSk7CisgICAgICAgIC8vIGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCAiYWxpYXMiIHNo
b3VsZCBiZSB0aGUgY2Fub25pY2FsIG5hbWUsIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYWxp
YXMgbGlzdHMgCisgICAgICAgIGNvbnN0IGdjaGFyICpjb2RlY05hbWUgPSAoKmNvZGVjQWxpYXNl
cylbMF07CisgICAgICAgIGlmIChpc0VuY29kaW5nQXZhaWxhYmxlKGNvZGVjTmFtZSkpCisgICAg
ICAgICAgICByZWdpc3RyYXIoY29kZWNOYW1lLCBuZXdUZXh0Q29kZWNHdGssIDApOworICAgIH0K
K30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2Rp
bmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29kaW5nTmFtZXMo
cmVnaXN0cmFyLCBmYWxzZSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VD
b2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckNvZGVj
cyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0
ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7Cisg
ICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKHJlZ2lzdHJhciwgdHJ1ZSk7Cit9CisKK3ZvaWQgVGV4
dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdp
c3RyYXIpCit7CisgICAgcmVnaXN0ZXJDb2RlY3MocmVnaXN0cmFyLCB0cnVlKTsKK30KKworVGV4
dENvZGVjR3RrOjpUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKKyAg
ICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCisgICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkKKyAg
ICAsIG1faWNvbnZEZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisgICAgLCBt
X2ljb252RW5jb2RlcihyZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQoreworfQorCitUZXh0
Q29kZWNHdGs6On5UZXh0Q29kZWNHdGsoKQoreworICAgIHJlbGVhc2VJQ29udigpOworfQorCit2
b2lkIFRleHRDb2RlY0d0azo6cmVsZWFzZUlDb252KCkgY29uc3QKK3sKKyAgICBpZiAobV9pY29u
dkRlY29kZXIgIT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICBnX2lj
b252X2Nsb3NlKG1faWNvbnZEZWNvZGVyKTsKKyAgICAgICAgbV9pY29udkRlY29kZXIgPSByZWlu
dGVycHJldF9jYXN0PEdJQ29udj4oLTEpOworICAgIH0KKyAgICBpZiAobV9pY29udkVuY29kZXIg
IT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICBnX2ljb252X2Nsb3Nl
KG1faWNvbnZFbmNvZGVyKTsKKyAgICAgICAgbV9pY29udkVuY29kZXIgPSByZWludGVycHJldF9j
YXN0PEdJQ29udj4oLTEpOworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OmNyZWF0ZUlD
b252RGVjb2RlcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faWNvbnZEZWNvZGVyID09IHJlaW50
ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpOworCisgICAgbV9pY29udkRlY29kZXIgPSBnX2ljb252
X29wZW4obV9pbnRlcm5hbEVuY29kaW5nTmFtZSwgbV9lbmNvZGluZy5uYW1lKCkpOworfQorCit2
b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSk7CisKKyAg
ICBtX2ljb252RW5jb2RlciA9IGdfaWNvbnZfb3BlbihtX2VuY29kaW5nLm5hbWUoKSwgbV9pbnRl
cm5hbEVuY29kaW5nTmFtZSk7Cit9CisKK1N0cmluZyBUZXh0Q29kZWNHdGs6OmRlY29kZShjb25z
dCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJv
ciwgYm9vbCYgc2F3RXJyb3IpCit7CisgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0aGUgcGFz
c2VkLWluIGVuY29kaW5nLgorICAgIGlmIChtX2ljb252RGVjb2RlciA9PSByZWludGVycHJldF9j
YXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGNyZWF0ZUlDb252RGVjb2RlcigpOworICAgICAg
ICBBU1NFUlQobV9pY29udkRlY29kZXIgIT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSk7
CisgICAgICAgIGlmIChtX2ljb252RGVjb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4o
LTEpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoImVycm9yIGNyZWF0aW5nIElDb252IGVuY29k
ZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxlIik7CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX3QgY291bnRXcml0dGVu
LCBjb3VudFJlYWQsIGNvbnZlcnNpb25MZW5ndGg7CisgICAgY29uc3QgY2hhciogY29udmVyc2lv
bkJ5dGVzOworICAgIGNoYXIqIHByZWZpeGVkQnl0ZXMgPSAwOworCisgICAgaWYgKG1fbnVtQnVm
ZmVyZWRCeXRlcykgeworICAgICAgICBjb252ZXJzaW9uTGVuZ3RoID0gbGVuZ3RoICsgbV9udW1C
dWZmZXJlZEJ5dGVzOworICAgICAgICBwcmVmaXhlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGZhc3RNYWxsb2MoY29udmVyc2lvbkxlbmd0aCkpOworICAgICAgICBtZW1jcHkocHJlZml4ZWRC
eXRlcywgbV9idWZmZXJlZEJ5dGVzLCBtX251bUJ1ZmZlcmVkQnl0ZXMpOworICAgICAgICBtZW1j
cHkocHJlZml4ZWRCeXRlcyArIG1fbnVtQnVmZmVyZWRCeXRlcywgYnl0ZXMsIGxlbmd0aCk7Cisg
ICAgICAgIAorICAgICAgICBjb252ZXJzaW9uQnl0ZXMgPSBwcmVmaXhlZEJ5dGVzOworICAgICAg
ICAKKyAgICAgICAgLy8gYWxsIGJ1ZmZlcmVkIGJ5dGVzIGFyZSBjb25zdW1lZCBub3cKKyAgICAg
ICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBubyBw
cmV2aW91c2x5IGJ1ZmZlcmVkIHBhcnRpYWwgZGF0YSwgCisgICAgICAgIC8vIGp1c3QgY29udmVy
dCB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgaW4KKyAgICAgICAgY29udmVyc2lvbkJ5dGVzID0g
Ynl0ZXM7CisgICAgICAgIGNvbnZlcnNpb25MZW5ndGggPSBsZW5ndGg7CisgICAgfQorCisgICAg
R093blB0cjxHRXJyb3I+IGVycjsKKyAgICBHT3duUHRyPFVDaGFyPiBidWZmZXI7CisKKyAgICBi
dWZmZXIub3V0UHRyKCkgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4oZ19jb252ZXJ0X3dpdGhf
aWNvbnYoY29udmVyc2lvbkJ5dGVzLCBjb252ZXJzaW9uTGVuZ3RoLCBtX2ljb252RGVjb2Rlciwg
JmNvdW50UmVhZCwgJmNvdW50V3JpdHRlbiwgJmVyci5vdXRQdHIoKSkpOyAKKworCisgICAgaWYg
KGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yIik7Cisg
ICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7IC8vIHJlc2V0IHN0YXRlIGZvciBzdWJzZXF1
ZW50IGNhbGxzIHRvIGRlY29kZQorICAgICAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAg
ICAgICAgc2F3RXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQor
ICAgIAorICAgIC8vIFBhcnRpYWwgaW5wdXQgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG1heSBu
b3QgcmVzdWx0IGluIGFuIGVycm9yIGJlaW5nIHJhaXNlZC4gCisgICAgLy8gRnJvbSB0aGUgZ25v
bWUgbGlicmFyeSBkb2N1bWVudGF0aW9uIG9uIGdfY29udmVydF93aXRoX2ljb252OgorICAgIC8v
ICJFdmVuIGlmIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLCB0aGlzIG1heSBiZSBsZXNz
IHRoYW4gbGVuIGlmIHRoZXJlIHdlcmUgcGFydGlhbCBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2Yg
dGhlIGlucHV0LiIKKyAgICAvLyBUaGF0J3Mgd2h5IHdlIG5lZWQgdG8gY29tcGFyZSBjb252ZXJz
aW9uTGVuZ3RoIGFnYWluc3QgY291bnRSZWFkIAorCisgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0g
Y29udmVyc2lvbkxlbmd0aCAtIGNvdW50UmVhZDsKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVz
ID4gMCkgeworICAgICAgICBpZiAoZmx1c2gpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiUGFy
dGlhbCBieXRlcyBhdCBlbmQgb2YgaW5wdXQgd2hpbGUgZmx1c2ggcmVxdWVzdGVkLiIpOworICAg
ICAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsgLy8gcmVzZXQgc3RhdGUgZm9yIHN1YnNl
cXVlbnQgY2FsbHMgdG8gZGVjb2RlCisgICAgICAgICAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVz
KTsKKyAgICAgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkobV9idWZmZXJlZEJ5dGVzLCBjb252ZXJz
aW9uQnl0ZXMgKyBjb3VudFJlYWQsIG1fbnVtQnVmZmVyZWRCeXRlcyk7CisgICAgfQorCisgICAg
ZmFzdEZyZWUocHJlZml4ZWRCeXRlcyk7CisgICAgCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7
CisKKyAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgY291bnRXcml0dGVuIC8gc2l6ZW9m
KFVDaGFyKSk7CisKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworfQorCitDU3Ry
aW5nIFRleHRDb2RlY0d0azo6ZW5jb2RlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nIGhhbmRsaW5nKQoreworICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gcmVpbnRl
cnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7Cisg
ICAgaWYgKG1faWNvbnZFbmNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisg
ICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisKKyAgICBzaXplX3QgY291bnQ7CisKKyAgICBHT3du
UHRyPEdFcnJvcj4gZXJyOworICAgIEdPd25QdHI8Y2hhcj4gYnVmZmVyOworCisgICAgYnVmZmVy
Lm91dFB0cigpID0gZ19jb252ZXJ0X3dpdGhfaWNvbnYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCAqIHNpemVvZihVQ2hhciksIG1faWNvbnZFbmNvZGVy
LCAwLCAmY291bnQsICZlcnIub3V0UHRyKCkpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJHSUNvbnYgY29udmVyc2lvbiBlcnJvciIpOworICAgICAgICByZXR1cm4gQ1N0cmlu
ZygpOworICAgIH0KKworICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZyhidWZmZXIuZ2V0KCks
IGNvdW50KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnku
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFRleHRDb2RlY0dUS19oCisjZGVmaW5lIFRleHRDb2RlY0dU
S19oCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
VGV4dENvZGVjR3RrIDogcHVibGljIFRleHRDb2RlYyB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgdm9pZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJh
cik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdp
c3RyYXIpOworCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05h
bWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
RXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBUZXh0Q29kZWNH
dGsoY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0d0aygp
OworCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxl
bmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAg
ICAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwg
VW5lbmNvZGFibGVIYW5kbGluZyk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNyZWF0
ZUlDb252RGVjb2RlcigpIGNvbnN0OworICAgICAgICB2b2lkIGNyZWF0ZUlDb252RW5jb2Rlcigp
IGNvbnN0OworICAgICAgICB2b2lkIHJlbGVhc2VJQ29udigpIGNvbnN0OworCisgICAgICAgIHN0
YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVn
aXN0cmFyLCBib29sIGV4dGVuZGVkKTsgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCByZWdp
c3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKTsK
KyAgICAgICAgc3RhdGljIGdib29sZWFuIGlzRW5jb2RpbmdBdmFpbGFibGUoY29uc3QgZ2NoYXIq
KTsKKworICAgICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKKyAgICAgICAgc2l6ZV90IG1f
bnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtX2J1ZmZlcmVkQnl0ZXNb
MTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xlIG11bHRpLWJ5dGUgY2hhcmFjdGVyICAgICAg
ICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29udkRlY29kZXI7CisgICAgICAgIG11dGFi
bGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworCisgICAgICAgIHN0YXRpYyBjb25zdCBnY2hhciog
bV9pbnRlcm5hbEVuY29kaW5nTmFtZTsKKworICAgICAgICB0eXBlZGVmIGNvbnN0IGdjaGFyKiBj
b25zdCBjb2RlY0FsaWFzTGlzdFtdOworCisgICAgICAgIC8vIFVuaWNvZGUKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1VURl84OworCisgICAgICAgIC8vIFdl
c3Rlcm4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184
ODU5XzE7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUNS
T01BTjsKKworICAgICAgICAvLyBKYXBhbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfRVVDX0pQOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlA7CisKKyAgICAgICAgLy8gVHJhZGl0aW9uYWwgQ2hp
bmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQklHNTsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0JJRzVfSEtTQ1M7
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDk1MDsKKwor
ICAgICAgICAvLyBLb3JlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNB
bGlhc2VzX0lTT18yMDIyX0tSOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2Rl
Y0FsaWFzZXNfQ1A5NDk7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19FVUNfS1I7CisKKyAgICAgICAgLy8gQXJhYmljCisgICAgICAgIHN0YXRpYyBjb2RlY0Fs
aWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV82OworICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU2OworCisgICAgICAgIC8vIEhlYnJldworICAg
ICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfODsKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NTsKKworICAg
ICAgICAvLyBHcmVlaworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfSVNPXzg4NTlfNzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX0NQODY5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
V0lORE9XU18xMjUzOworCisgICAgICAgIC8vIEN5cmlsbGljCisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV81OworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfS09JOF9SOworICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NjY7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19LT0k4X1U7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlz
dCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTE7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQzsKKworICAgICAgICAvLyBUaGFpCisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDg3NDsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1RJU182MjA7CisKKyAgICAgICAg
Ly8gU2ltcGxpZmllZCBDaGluZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2Nv
ZGVjQWxpYXNlc19HQks7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19IWjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0dC
MTgwMzA7CisKKyAgICAgICAgLy8gQ2VudHJhbCBFdXJvcGVhbgorICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMjsKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1MDsKKyAgICAgICAgc3RhdGljIGNvZGVj
QWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ0NFTlRSQUxFVVJPUEU7CisKKyAgICAgICAgLy8g
VmlldG5hbWVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
Q1AxMjU4OworCisgICAgICAgIC8vIFR1cmtpc2gKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0
IG1fY29kZWNBbGlhc2VzX0lTT184ODU5Xzk7CisKKyAgICAgICAgLy8gQmFsdGljCisgICAgICAg
IHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTc7CisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV80OworCisgICAgICAg
IHN0YXRpYyBnY29uc3Rwb2ludGVyIGNvbnN0IG1faWNvbnZCYXNlQ29kZWNMaXN0W107CisgICAg
ICAgIHN0YXRpYyBnY29uc3Rwb2ludGVyIGNvbnN0IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdFtd
OworCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENv
ZGVjR1RLX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25627</attachid>
            <date>2008-12-01 05:54:44 -0800</date>
            <delta_ts>2009-01-14 08:51:34 -0800</delta_ts>
            <desc>Replacing ICU with glib, IDN support</desc>
            <filename>replace_icu_with_glib_idn.diff</filename>
            <type>text/plain</type>
            <size>79945</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4ODU4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMTIt
MDEgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAg
IEFkZGluZyBvcHRpb25zIGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWljdXxnbGliCisgICAg
ICAgIGFuZCBjaGVja2luZyBmb3IgcGFuZ28gdmVyc2lvbiA+PSAxLjIxLjAgaWYgR0xpYiBiYWNr
ZW5kCisgICAgICAgIGlzIHNlbGVjdGVkLiBBbHNvLCBpbiBHTGliIGJhY2tlbmQgY2FzZSwgY2hl
Y2tpbmcKKyAgICAgICAgZm9yIGlkbmEuaCBmcm9tIGxpYmlkbiwgcmVxdWlyZWQgZm9yIElETi4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIGNvbmZpZ3VyZS5hYzoKKwog
MjAwOC0xMS0yOCAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBhbmQgc2xpZ2h0bHkgbW9kaWZpZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgpJ
bmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDM4ODU4KQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUw
LDE1IEBAIElETF9CSU5ESU5HUyA6PQogIyBHbG9iYWwgZmxhZ3MgdG8gQ1BQCiBnbG9iYWxfY3Bw
ZmxhZ3MgOj0KIAoraWYgVVNFX0lDVV9VTklDT0RFCiBnbG9iYWxfY3BwZmxhZ3MgKz0gXAogCS1E
V1RGX1VTRV9JQ1VfVU5JQ09ERT0xCitlbmRpZgorCitpZiBVU0VfR0xJQl9VTklDT0RFCitnbG9i
YWxfY3BwZmxhZ3MgKz0gXAorCS1EV1RGX1VTRV9HTElCX1VOSUNPREU9MQorZW5kaWYKIAogIyBE
ZWZhdWx0IGNvbXBpbGVyIGZsYWdzCiBnbG9iYWxfY2ZsYWdzIDo9IFwKSW5kZXg6IGNvbmZpZ3Vy
ZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDM4ODU4KQorKysgY29u
ZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsMTggKzIyMiwxOCBAQCBBQ19TVUJTVChb
UE5HX0xJQlNdKQogIyBkZXRlcm1pbmUgdGhlIFVuaWNvZGUgYmFja2VuZAogQUNfTVNHX0NIRUNL
SU5HKFt0aGUgVW5pY29kZSBiYWNrZW5kIHRvIHVzZV0pCiBBQ19BUkdfV0lUSCh1bmljb2RlX2Jh
Y2tlbmQsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXVuaWNvZGUtYmFja2Vu
ZD1APDpAaWN1QDo+QF0sCisgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXVuaWNv
ZGUtYmFja2VuZD1APDpAaWN1L2dsaWJAOj5AXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFtTZWxlY3QgVW5pY29kZSBiYWNrZW5kIFtkZWZhdWx0PWljdV1dKSwKLSAgICAgICAgICAgIFtd
LFt1bmljb2RlX2JhY2tlbmQ9ImljdSJdKQorICAgICAgICAgICAgW10sW3dpdGhfdW5pY29kZV9i
YWNrZW5kPSJpY3UiXSkKIAotY2FzZSAiJHVuaWNvZGVfYmFja2VuZCIgaW4KLSAgICAgaWN1KSA7
OwotICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJl
IGljdS5dKSA7OworY2FzZSAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiBpbgorICAgICBpY3V8Z2xp
YikgOzsKKyAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIFVuaWNvZGUgYmFja2VuZDogbXVz
dCBiZSBpY3Ugb3IgZ2xpYi5dKSA7OwogZXNhYwogCi1BQ19NU0dfUkVTVUxUKFskdW5pY29kZV9i
YWNrZW5kXSkKK0FDX01TR19SRVNVTFQoWyR3aXRoX3VuaWNvZGVfYmFja2VuZF0pCiAKLWlmIHRl
c3QgIiR1bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4KK2lmIHRlc3QgIiR3aXRoX3VuaWNv
ZGVfYmFja2VuZCIgPSAiaWN1IjsgdGhlbgogCWlmIHRlc3QgIiRvc19kYXJ3aW4iID0gInllcyI7
IHRoZW4KIAkJVU5JQ09ERV9DRkxBR1M9Ii1JXCQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9pY3Ug
LUlcJChzcmNkaXIpL1dlYkNvcmUvaWN1IgogCQlVTklDT0RFX0xJQlM9Ii1saWN1Y29yZSIKQEAg
LTI1NCw2ICsyNTQsMTggQEAgaWYgdGVzdCAiJHVuaWNvZGVfYmFja2VuZCIgPSAiaWN1IjsgdGhl
bgogCWZpCiBmaQogCitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiOyB0
aGVuCisJUEtHX0NIRUNLX01PRFVMRVMoW1VOSUNPREVdLCBbZ2xpYi0yLjAgcGFuZ28gPj0gMS4y
MS4wXSkKKwlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsaWJpZG5dKQorCUFDX0NIRUNLX0hFQURFUihp
ZG5hLmgsCisJCUFDX0NIRUNLX0xJQihpZG4sIHN0cmluZ3ByZXBfY2hlY2tfdmVyc2lvbiwKKwkJ
CVtsaWJpZG49eWVzIFVOSUNPREVfTElCUz0iJHtVTklDT0RFX0xJQlN9IC1saWRuIl0sIGxpYmlk
bj1ubyksCisJCWxpYmlkbj1ubykKKwlpZiB0ZXN0ICIkbGliaWRuIiA9ICJubyIgOyB0aGVuCisJ
CUFDX01TR19FUlJPUihbTGliaWRuIG5vdCBmb3VuZCwgbmVlZGVkIGZvciBHTGliIHVuaWNvZGUg
YmFja2VuZC5dKQorCWZpCitmaQorCiBBQ19TVUJTVChbVU5JQ09ERV9DRkxBR1NdKQogQUNfU1VC
U1QoW1VOSUNPREVfTElCU10pCiAKQEAgLTcwOCw2ICs3MjAsMTAgQEAgQU1fQ09ORElUSU9OQUwo
W1RBUkdFVF9XSU4zMl0sIFt0ZXN0ICIkdwogQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9RVUFSVFpd
LCBbdGVzdCAiJHdpdGhfdGFyZ2V0IiA9ICJxdWFydHoiXSkKIEFNX0NPTkRJVElPTkFMKFtUQVJH
RVRfRElSRUNURkJdLCBbdGVzdCAiJHdpdGhfdGFyZ2V0IiA9ICJkaXJlY3RmYiJdKQogCisjIFVu
aWNvZGUgYmFja2VuZCBjb25kaXRpb25hbHMKK0FNX0NPTkRJVElPTkFMKFtVU0VfSUNVX1VOSUNP
REVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiXSkKK0FNX0NPTkRJVElP
TkFMKFtVU0VfR0xJQl9VTklDT0RFXSwgW3Rlc3QgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAi
Z2xpYiJdKQorCiAjIEhUVFAgYmFja2VuZCBjb25kaXRpb25hbHMKIEFNX0NPTkRJVElPTkFMKFtV
U0VfQ1VSTF0sIFt0ZXN0ICIkd2l0aF9odHRwX2JhY2tlbmQiID0gImN1cmwiXSkKIEFNX0NPTkRJ
VElPTkFMKFtVU0VfU09VUF0sIFt0ZXN0ICIkd2l0aF9odHRwX2JhY2tlbmQiID0gInNvdXAiXSkK
QEAgLTc1Nyw3ICs3NzMsNyBAQCBCdWlsZCBjb25maWd1cmF0aW9uOgogIEVuYWJsZSBkZWJ1Z2dp
bmcgKHNsb3cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9kZWJ1
ZwogIEVuYWJsZSBHQ0MgYnVpbGQgb3B0aW1pemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogJGVuYWJsZV9vcHRpbWl6YXRpb25zCiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCi0gVW5pY29k
ZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkdW5p
Y29kZV9iYWNrZW5kCisgVW5pY29kZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiAkd2l0aF91bmljb2RlX2JhY2tlbmQKICBIVFRQIGJhY2tlbmQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRoX2h0dHBfYmFj
a2VuZAogIEZvbnQgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogJHdpdGhfZm9udF9iYWNrZW5kCiAgT3B0aW1pemVkIG1lbW9yeSBhbGxvY2F0b3Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9jCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAzODg1OCkKKysrIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDA4LTEyLTAxICBEb21pbmlrIFLDtnR0
c2NoZXMgIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkxNAorICAgICAgICBbR1RLXSBJbXBsZW1lbnQgVW5p
Y29kZSBmdW5jdGlvbmFsaXR5IHVzaW5nIEdMaWIKKworICAgICAgICBPcmlnaW5hbCBwYXRjaCBi
eSBKw7xyZyBCaWxsZXRlciBhbmQgTmFpZW0gU2hhaWsuCisgICAgICAgIEltcGxlbWVudGluZyBV
bmljb2RlIGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gR0xpYi4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOgorICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAgICAgKiB3dGYv
dW5pY29kZS9nbGliOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL0Nhc2Vmb2xk
VGFibGVGcm9tR0xpYi5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNv
ZGVHTGliLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpVbmljb2RlOjopOgorICAgICAgICAoV1RG
OjpVbmljb2RlOjpmb2xkQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6
dG9UaXRsZUNhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0FyYWJpY0NoYXIpOgorICAg
ICAgICAoV1RGOjpVbmljb2RlOjppc0Zvcm1hdENoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc1NlcGFyYXRvclNwYWNlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNQcmludGFibGVD
aGFyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNEaWdpdCk6CisgICAgICAgIChXVEY6OlVu
aWNvZGU6OmlzUHVuY3QpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjptaXJyb3JlZENoYXIpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpjYXRlZ29yeSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6
OmRpcmVjdGlvbik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzTG93ZXIpOgorICAgICAgICAo
V1RGOjpVbmljb2RlOjpkaWdpdFZhbHVlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Y29tYmlu
aW5nQ2xhc3MpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpkZWNvbXBvc2l0aW9uVHlwZSk6Cisg
ICAgICAgIChXVEY6OlVuaWNvZGU6OnVtZW1jYXNlY21wKToKKyAgICAgICAgKiB3dGYvdW5pY29k
ZS9nbGliL1VuaWNvZGVHTGliVHlwZXMuaDogQWRkZWQuCisgICAgICAgICogd3RmL3VuaWNvZGUv
Z2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oOiBBZGRlZC4KKwogMjAwOC0xMS0yOSAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQ2Ftcm9uIFp3YXJpY2guCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzg4
NTgpCisrKyBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
MjI5LDkgKzIyOSwyNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvdW5pY29kZS9Db2xsYXRvckRlZmF1bHQuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93
dGYvdW5pY29kZS9VVEY4LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVVRGOC5o
IFwKLQlKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmggXAorCUphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAorCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2Vu
ZAorIyAtLS0tCitpZiBVU0VfSUNVX1VOSUNPREUKK2phdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCUphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgKK2VuZGlmICMgVVNFX0lD
VV9VTklDT0RFCisKKyMgLS0tLQorIyBnbGliIHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBV
U0VfR0xJQl9VTklDT0RFCitqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKKwlKYXZhU2NyaXB0
Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmggXAorCUphdmFTY3JpcHRDb3JlL3d0
Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWJUeXBlcy5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmggXAorCUphdmFTY3JpcHRDb3JlL3d0
Zi91bmljb2RlL2dsaWIvQ2FzZWZvbGRUYWJsZUZyb21HTGliLmgKK2VuZGlmCiAKICMgRGVidWcg
YnVpbGQKIGlmIEVOQUJMRV9ERUJVRwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
VW5pY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNv
ZGUuaAkocmV2aXNpb24gMzg4NTgpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmlj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJxdDQvVW5p
Y29kZVF0NC5oIgogI2VsaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L2ljdS9Vbmljb2RlSWN1Lmg+CisjZWxpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgPHd0
Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaD4KICNlbHNlCiAjZXJyb3IgIlVua25vd24gVW5p
Y29kZSBpbXBsZW1lbnRhdGlvbiIKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvZ2xpYi9DYXNlZm9sZFRhYmxlRnJvbUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvdW5pY29kZS9nbGliL0Nhc2Vmb2xkVGFibGVGcm9tR0xpYi5oCShyZXZpc2lv
biAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9DYXNlZm9sZFRhYmxlRnJv
bUdMaWIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICogIENv
cHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0Bh
Y2Nlc3MtY29tcGFueS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIENhc2Vmb2xkVGFibGVG
cm9tR0xpYl9oCisjZGVmaW5lIENhc2Vmb2xkVGFibGVGcm9tR0xpYl9oCisKKyNpbmNsdWRlIDxn
bGliLmg+CisKKy8vIGNvcGllZCBmcm9tIEdMaWIKKworLyogVGFibGUgb2YgY2FzZWZvbGRpbmcg
Y2FzZXMgdGhhdCBjYW4ndCBiZSBkZXJpdmVkIGJ5IGxvd2VyY2FzaW5nCisgKi8KK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgeworICAgIGd1aW50MTYgY2g7CisgICAgZ2NoYXIgZGF0YVs3XTsKK30gY2Fz
ZWZvbGRfdGFibGVbXSA9IHsKKyAgICB7IDB4MDBiNSwgIlx4Y2VceGJjIiB9LAorICAgIHsgMHgw
MGRmLCAiXHg3M1x4NzMiIH0sCisgICAgeyAweDAxMzAsICJceDY5XHhjY1x4ODciIH0sCisgICAg
eyAweDAxNDksICJceGNhXHhiY1x4NmUiIH0sCisgICAgeyAweDAxN2YsICJceDczIiB9LAorICAg
IHsgMHgwMWYwLCAiXHg2YVx4Y2NceDhjIiB9LAorICAgIHsgMHgwMzQ1LCAiXHhjZVx4YjkiIH0s
CisgICAgeyAweDAzOTAsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDAz
YjAsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDAzYzIsICJceGNmXHg4
MyIgfSwKKyAgICB7IDB4MDNkMCwgIlx4Y2VceGIyIiB9LAorICAgIHsgMHgwM2QxLCAiXHhjZVx4
YjgiIH0sCisgICAgeyAweDAzZDUsICJceGNmXHg4NiIgfSwKKyAgICB7IDB4MDNkNiwgIlx4Y2Zc
eDgwIiB9LAorICAgIHsgMHgwM2YwLCAiXHhjZVx4YmEiIH0sCisgICAgeyAweDAzZjEsICJceGNm
XHg4MSIgfSwKKyAgICB7IDB4MDNmNSwgIlx4Y2VceGI1IiB9LAorICAgIHsgMHgwNTg3LCAiXHhk
NVx4YTVceGQ2XHg4MiIgfSwKKyAgICB7IDB4MWU5NiwgIlx4NjhceGNjXHhiMSIgfSwKKyAgICB7
IDB4MWU5NywgIlx4NzRceGNjXHg4OCIgfSwKKyAgICB7IDB4MWU5OCwgIlx4NzdceGNjXHg4YSIg
fSwKKyAgICB7IDB4MWU5OSwgIlx4NzlceGNjXHg4YSIgfSwKKyAgICB7IDB4MWU5YSwgIlx4NjFc
eGNhXHhiZSIgfSwKKyAgICB7IDB4MWU5YiwgIlx4ZTFceGI5XHhhMSIgfSwKKyAgICB7IDB4MWY1
MCwgIlx4Y2ZceDg1XHhjY1x4OTMiIH0sCisgICAgeyAweDFmNTIsICJceGNmXHg4NVx4Y2NceDkz
XHhjY1x4ODAiIH0sCisgICAgeyAweDFmNTQsICJceGNmXHg4NVx4Y2NceDkzXHhjY1x4ODEiIH0s
CisgICAgeyAweDFmNTYsICJceGNmXHg4NVx4Y2NceDkzXHhjZFx4ODIiIH0sCisgICAgeyAweDFm
ODAsICJceGUxXHhiY1x4ODBceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4MSwgIlx4ZTFceGJjXHg4
MVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjgyLCAiXHhlMVx4YmNceDgyXHhjZVx4YjkiIH0sCisg
ICAgeyAweDFmODMsICJceGUxXHhiY1x4ODNceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4NCwgIlx4
ZTFceGJjXHg4NFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjg1LCAiXHhlMVx4YmNceDg1XHhjZVx4
YjkiIH0sCisgICAgeyAweDFmODYsICJceGUxXHhiY1x4ODZceGNlXHhiOSIgfSwKKyAgICB7IDB4
MWY4NywgIlx4ZTFceGJjXHg4N1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZjg4LCAiXHhlMVx4YmNc
eDgwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmODksICJceGUxXHhiY1x4ODFceGNlXHhiOSIgfSwK
KyAgICB7IDB4MWY4YSwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjhiLCAi
XHhlMVx4YmNceDgzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOGMsICJceGUxXHhiY1x4ODRceGNl
XHhiOSIgfSwKKyAgICB7IDB4MWY4ZCwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9LAorICAgIHsg
MHgxZjhlLCAiXHhlMVx4YmNceDg2XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOGYsICJceGUxXHhi
Y1x4ODdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5MCwgIlx4ZTFceGJjXHhhMFx4Y2VceGI5IiB9
LAorICAgIHsgMHgxZjkxLCAiXHhlMVx4YmNceGExXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTIs
ICJceGUxXHhiY1x4YTJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5MywgIlx4ZTFceGJjXHhhM1x4
Y2VceGI5IiB9LAorICAgIHsgMHgxZjk0LCAiXHhlMVx4YmNceGE0XHhjZVx4YjkiIH0sCisgICAg
eyAweDFmOTUsICJceGUxXHhiY1x4YTVceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5NiwgIlx4ZTFc
eGJjXHhhNlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjk3LCAiXHhlMVx4YmNceGE3XHhjZVx4Yjki
IH0sCisgICAgeyAweDFmOTgsICJceGUxXHhiY1x4YTBceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5
OSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjlhLCAiXHhlMVx4YmNceGEy
XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOWIsICJceGUxXHhiY1x4YTNceGNlXHhiOSIgfSwKKyAg
ICB7IDB4MWY5YywgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjlkLCAiXHhl
MVx4YmNceGE1XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOWUsICJceGUxXHhiY1x4YTZceGNlXHhi
OSIgfSwKKyAgICB7IDB4MWY5ZiwgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAorICAgIHsgMHgx
ZmEwLCAiXHhlMVx4YmRceGEwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTEsICJceGUxXHhiZFx4
YTFceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhMiwgIlx4ZTFceGJkXHhhMlx4Y2VceGI5IiB9LAor
ICAgIHsgMHgxZmEzLCAiXHhlMVx4YmRceGEzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTQsICJc
eGUxXHhiZFx4YTRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhNSwgIlx4ZTFceGJkXHhhNVx4Y2Vc
eGI5IiB9LAorICAgIHsgMHgxZmE2LCAiXHhlMVx4YmRceGE2XHhjZVx4YjkiIH0sCisgICAgeyAw
eDFmYTcsICJceGUxXHhiZFx4YTdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhOCwgIlx4ZTFceGJk
XHhhMFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmE5LCAiXHhlMVx4YmRceGExXHhjZVx4YjkiIH0s
CisgICAgeyAweDFmYWEsICJceGUxXHhiZFx4YTJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhYiwg
Ilx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmFjLCAiXHhlMVx4YmRceGE0XHhj
ZVx4YjkiIH0sCisgICAgeyAweDFmYWQsICJceGUxXHhiZFx4YTVceGNlXHhiOSIgfSwKKyAgICB7
IDB4MWZhZSwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmFmLCAiXHhlMVx4
YmRceGE3XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYjIsICJceGUxXHhiZFx4YjBceGNlXHhiOSIg
fSwKKyAgICB7IDB4MWZiMywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYjQsICJc
eGNlXHhhY1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmI2LCAiXHhjZVx4YjFceGNkXHg4MiIgfSwK
KyAgICB7IDB4MWZiNywgIlx4Y2VceGIxXHhjZFx4ODJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZi
YywgIlx4Y2VceGIxXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYmUsICJceGNlXHhiOSIgfSwKKyAg
ICB7IDB4MWZjMiwgIlx4ZTFceGJkXHhiNFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmMzLCAiXHhj
ZVx4YjdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZjNCwgIlx4Y2VceGFlXHhjZVx4YjkiIH0sCisg
ICAgeyAweDFmYzYsICJceGNlXHhiN1x4Y2RceDgyIiB9LAorICAgIHsgMHgxZmM3LCAiXHhjZVx4
YjdceGNkXHg4Mlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmNjLCAiXHhjZVx4YjdceGNlXHhiOSIg
fSwKKyAgICB7IDB4MWZkMiwgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MCIgfSwKKyAgICB7IDB4
MWZkMywgIlx4Y2VceGI5XHhjY1x4ODhceGNjXHg4MSIgfSwKKyAgICB7IDB4MWZkNiwgIlx4Y2Vc
eGI5XHhjZFx4ODIiIH0sCisgICAgeyAweDFmZDcsICJceGNlXHhiOVx4Y2NceDg4XHhjZFx4ODIi
IH0sCisgICAgeyAweDFmZTIsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODAiIH0sCisgICAgeyAw
eDFmZTMsICJceGNmXHg4NVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDFmZTQsICJceGNm
XHg4MVx4Y2NceDkzIiB9LAorICAgIHsgMHgxZmU2LCAiXHhjZlx4ODVceGNkXHg4MiIgfSwKKyAg
ICB7IDB4MWZlNywgIlx4Y2ZceDg1XHhjY1x4ODhceGNkXHg4MiIgfSwKKyAgICB7IDB4MWZmMiwg
Ilx4ZTFceGJkXHhiY1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmYzLCAiXHhjZlx4ODlceGNlXHhi
OSIgfSwKKyAgICB7IDB4MWZmNCwgIlx4Y2ZceDhlXHhjZVx4YjkiIH0sCisgICAgeyAweDFmZjYs
ICJceGNmXHg4OVx4Y2RceDgyIiB9LAorICAgIHsgMHgxZmY3LCAiXHhjZlx4ODlceGNkXHg4Mlx4
Y2VceGI5IiB9LAorICAgIHsgMHgxZmZjLCAiXHhjZlx4ODlceGNlXHhiOSIgfSwKKyAgICB7IDB4
MjE2MCwgIlx4ZTJceDg1XHhiMCIgfSwKKyAgICB7IDB4MjE2MSwgIlx4ZTJceDg1XHhiMSIgfSwK
KyAgICB7IDB4MjE2MiwgIlx4ZTJceDg1XHhiMiIgfSwKKyAgICB7IDB4MjE2MywgIlx4ZTJceDg1
XHhiMyIgfSwKKyAgICB7IDB4MjE2NCwgIlx4ZTJceDg1XHhiNCIgfSwKKyAgICB7IDB4MjE2NSwg
Ilx4ZTJceDg1XHhiNSIgfSwKKyAgICB7IDB4MjE2NiwgIlx4ZTJceDg1XHhiNiIgfSwKKyAgICB7
IDB4MjE2NywgIlx4ZTJceDg1XHhiNyIgfSwKKyAgICB7IDB4MjE2OCwgIlx4ZTJceDg1XHhiOCIg
fSwKKyAgICB7IDB4MjE2OSwgIlx4ZTJceDg1XHhiOSIgfSwKKyAgICB7IDB4MjE2YSwgIlx4ZTJc
eDg1XHhiYSIgfSwKKyAgICB7IDB4MjE2YiwgIlx4ZTJceDg1XHhiYiIgfSwKKyAgICB7IDB4MjE2
YywgIlx4ZTJceDg1XHhiYyIgfSwKKyAgICB7IDB4MjE2ZCwgIlx4ZTJceDg1XHhiZCIgfSwKKyAg
ICB7IDB4MjE2ZSwgIlx4ZTJceDg1XHhiZSIgfSwKKyAgICB7IDB4MjE2ZiwgIlx4ZTJceDg1XHhi
ZiIgfSwKKyAgICB7IDB4MjRiNiwgIlx4ZTJceDkzXHg5MCIgfSwKKyAgICB7IDB4MjRiNywgIlx4
ZTJceDkzXHg5MSIgfSwKKyAgICB7IDB4MjRiOCwgIlx4ZTJceDkzXHg5MiIgfSwKKyAgICB7IDB4
MjRiOSwgIlx4ZTJceDkzXHg5MyIgfSwKKyAgICB7IDB4MjRiYSwgIlx4ZTJceDkzXHg5NCIgfSwK
KyAgICB7IDB4MjRiYiwgIlx4ZTJceDkzXHg5NSIgfSwKKyAgICB7IDB4MjRiYywgIlx4ZTJceDkz
XHg5NiIgfSwKKyAgICB7IDB4MjRiZCwgIlx4ZTJceDkzXHg5NyIgfSwKKyAgICB7IDB4MjRiZSwg
Ilx4ZTJceDkzXHg5OCIgfSwKKyAgICB7IDB4MjRiZiwgIlx4ZTJceDkzXHg5OSIgfSwKKyAgICB7
IDB4MjRjMCwgIlx4ZTJceDkzXHg5YSIgfSwKKyAgICB7IDB4MjRjMSwgIlx4ZTJceDkzXHg5YiIg
fSwKKyAgICB7IDB4MjRjMiwgIlx4ZTJceDkzXHg5YyIgfSwKKyAgICB7IDB4MjRjMywgIlx4ZTJc
eDkzXHg5ZCIgfSwKKyAgICB7IDB4MjRjNCwgIlx4ZTJceDkzXHg5ZSIgfSwKKyAgICB7IDB4MjRj
NSwgIlx4ZTJceDkzXHg5ZiIgfSwKKyAgICB7IDB4MjRjNiwgIlx4ZTJceDkzXHhhMCIgfSwKKyAg
ICB7IDB4MjRjNywgIlx4ZTJceDkzXHhhMSIgfSwKKyAgICB7IDB4MjRjOCwgIlx4ZTJceDkzXHhh
MiIgfSwKKyAgICB7IDB4MjRjOSwgIlx4ZTJceDkzXHhhMyIgfSwKKyAgICB7IDB4MjRjYSwgIlx4
ZTJceDkzXHhhNCIgfSwKKyAgICB7IDB4MjRjYiwgIlx4ZTJceDkzXHhhNSIgfSwKKyAgICB7IDB4
MjRjYywgIlx4ZTJceDkzXHhhNiIgfSwKKyAgICB7IDB4MjRjZCwgIlx4ZTJceDkzXHhhNyIgfSwK
KyAgICB7IDB4MjRjZSwgIlx4ZTJceDkzXHhhOCIgfSwKKyAgICB7IDB4MjRjZiwgIlx4ZTJceDkz
XHhhOSIgfSwKKyAgICB7IDB4ZmIwMCwgIlx4NjZceDY2IiB9LAorICAgIHsgMHhmYjAxLCAiXHg2
Nlx4NjkiIH0sCisgICAgeyAweGZiMDIsICJceDY2XHg2YyIgfSwKKyAgICB7IDB4ZmIwMywgIlx4
NjZceDY2XHg2OSIgfSwKKyAgICB7IDB4ZmIwNCwgIlx4NjZceDY2XHg2YyIgfSwKKyAgICB7IDB4
ZmIwNSwgIlx4NzNceDc0IiB9LAorICAgIHsgMHhmYjA2LCAiXHg3M1x4NzQiIH0sCisgICAgeyAw
eGZiMTMsICJceGQ1XHhiNFx4ZDVceGI2IiB9LAorICAgIHsgMHhmYjE0LCAiXHhkNVx4YjRceGQ1
XHhhNSIgfSwKKyAgICB7IDB4ZmIxNSwgIlx4ZDVceGI0XHhkNVx4YWIiIH0sCisgICAgeyAweGZi
MTYsICJceGQ1XHhiZVx4ZDVceGI2IiB9LAorICAgIHsgMHhmYjE3LCAiXHhkNVx4YjRceGQ1XHhh
ZCIgfQorfTsKKworCisjZW5kaWYKKwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUv
Z2xpYi9Vbmljb2RlR0xpYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmlj
b2RlL2dsaWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0
Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTkg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55
cG9wLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIg
PGpAYml0cm9uLmNoPgorICogIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMg
PGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFVuaWNvZGVHTGliX2gKKyNkZWZpbmUgVW5pY29kZUdMaWJfaAorCisjaW5jbHVkZSA8
c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KKworI2luY2x1ZGUgPHd0
Zi9HT3duUHRyLmg+CisKKyNpbmNsdWRlICJDYXNlZm9sZFRhYmxlRnJvbUdMaWIuaCIKKyNpbmNs
dWRlICJVbmljb2RlR0xpYlR5cGVzLmgiCisjaW5jbHVkZSAiVW5pY29kZU1hY3Jvc0Zyb21JQ1Uu
aCIKKworbmFtZXNwYWNlIFdURiB7CisgICAgbmFtZXNwYWNlIFVuaWNvZGUgeworCisgICAgICAg
IGVudW0gRGlyZWN0aW9uIHsKKyAgICAgICAgICAgIExlZnRUb1JpZ2h0LAorICAgICAgICAgICAg
UmlnaHRUb0xlZnQsCisgICAgICAgICAgICBFdXJvcGVhbk51bWJlciwKKyAgICAgICAgICAgIEV1
cm9wZWFuTnVtYmVyU2VwYXJhdG9yLAorICAgICAgICAgICAgRXVyb3BlYW5OdW1iZXJUZXJtaW5h
dG9yLAorICAgICAgICAgICAgQXJhYmljTnVtYmVyLAorICAgICAgICAgICAgQ29tbW9uTnVtYmVy
U2VwYXJhdG9yLAorICAgICAgICAgICAgQmxvY2tTZXBhcmF0b3IsCisgICAgICAgICAgICBTZWdt
ZW50U2VwYXJhdG9yLAorICAgICAgICAgICAgV2hpdGVTcGFjZU5ldXRyYWwsCisgICAgICAgICAg
ICBPdGhlck5ldXRyYWwsCisgICAgICAgICAgICBMZWZ0VG9SaWdodEVtYmVkZGluZywKKyAgICAg
ICAgICAgIExlZnRUb1JpZ2h0T3ZlcnJpZGUsCisgICAgICAgICAgICBSaWdodFRvTGVmdEFyYWJp
YywKKyAgICAgICAgICAgIFJpZ2h0VG9MZWZ0RW1iZWRkaW5nLAorICAgICAgICAgICAgUmlnaHRU
b0xlZnRPdmVycmlkZSwKKyAgICAgICAgICAgIFBvcERpcmVjdGlvbmFsRm9ybWF0LAorICAgICAg
ICAgICAgTm9uU3BhY2luZ01hcmssCisgICAgICAgICAgICBCb3VuZGFyeU5ldXRyYWwKKyAgICAg
ICAgfTsKKworICAgICAgICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAgICAgICAgIERl
Y29tcG9zaXRpb25Ob25lLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAg
ICAgICAgICAgIERlY29tcG9zaXRpb25Db21wYXQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9u
Q2lyY2xlLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAgICAgICAgICAgRGVj
b21wb3NpdGlvbkZvbnQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24sCisgICAg
ICAgICAgICBEZWNvbXBvc2l0aW9uSW5pdGlhbCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25J
c29sYXRlZCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAgICAgICAgICBE
ZWNvbXBvc2l0aW9uTmFycm93LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisg
ICAgICAgICAgICBEZWNvbXBvc2l0aW9uU21hbGwsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9u
U3F1YXJlLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAgICAgICAgICAgIERlY29t
cG9zaXRpb25TdXBlciwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCwKKyAgICAg
ICAgICAgIERlY29tcG9zaXRpb25XaWRlLAorICAgICAgICB9OworCisgICAgICAgIGVudW0gQ2hh
ckNhdGVnb3J5IHsKKyAgICAgICAgICAgIE5vQ2F0ZWdvcnkgPSAgMCwKKyAgICAgICAgICAgIE90
aGVyX05vdEFzc2lnbmVkID0gVV9NQVNLKEdfVU5JQ09ERV9VTkFTU0lHTkVEKSwKKyAgICAgICAg
ICAgIExldHRlcl9VcHBlcmNhc2UgPSBVX01BU0soR19VTklDT0RFX1VQUEVSQ0FTRV9MRVRURVIp
LAorICAgICAgICAgICAgTGV0dGVyX0xvd2VyY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVfTE9XRVJD
QVNFX0xFVFRFUiksCisgICAgICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlID0gVV9NQVNLKEdfVU5J
Q09ERV9USVRMRUNBU0VfTEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9Nb2RpZmllciA9IFVf
TUFTSyhHX1VOSUNPREVfTU9ESUZJRVJfTEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9PdGhl
ciA9IFVfTUFTSyhHX1VOSUNPREVfT1RIRVJfTEVUVEVSKSwKKworICAgICAgICAgICAgTWFya19O
b25TcGFjaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9OT05fU1BBQ0lOR19NQVJLKSwKKyAgICAgICAg
ICAgIE1hcmtfRW5jbG9zaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9FTkNMT1NJTkdfTUFSSyksCisg
ICAgICAgICAgICBNYXJrX1NwYWNpbmdDb21iaW5pbmcgPSBVX01BU0soR19VTklDT0RFX0NPTUJJ
TklOR19NQVJLKSwKKworICAgICAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCA9IFVfTUFTSyhH
X1VOSUNPREVfREVDSU1BTF9OVU1CRVIpLAorICAgICAgICAgICAgTnVtYmVyX0xldHRlciA9IFVf
TUFTSyhHX1VOSUNPREVfTEVUVEVSX05VTUJFUiksCisgICAgICAgICAgICBOdW1iZXJfT3RoZXIg
PSBVX01BU0soR19VTklDT0RFX09USEVSX05VTUJFUiksCisKKyAgICAgICAgICAgIFNlcGFyYXRv
cl9TcGFjZSA9IFVfTUFTSyhHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SKSwKKyAgICAgICAgICAg
IFNlcGFyYXRvcl9MaW5lID0gVV9NQVNLKEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRPUiksCisgICAg
ICAgICAgICBTZXBhcmF0b3JfUGFyYWdyYXBoID0gVV9NQVNLKEdfVU5JQ09ERV9QQVJBR1JBUEhf
U0VQQVJBVE9SKSwKKworICAgICAgICAgICAgT3RoZXJfQ29udHJvbCA9IFVfTUFTSyhHX1VOSUNP
REVfQ09OVFJPTCksCisgICAgICAgICAgICBPdGhlcl9Gb3JtYXQgPSBVX01BU0soR19VTklDT0RF
X0ZPUk1BVCksCisgICAgICAgICAgICBPdGhlcl9Qcml2YXRlVXNlID0gVV9NQVNLKEdfVU5JQ09E
RV9QUklWQVRFX1VTRSksCisgICAgICAgICAgICBPdGhlcl9TdXJyb2dhdGUgPSBVX01BU0soR19V
TklDT0RFX1NVUlJPR0FURSksCisKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX0Rhc2ggPSBVX01B
U0soR19VTklDT0RFX0RBU0hfUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVuY3R1YXRpb25f
T3BlbiA9IFVfTUFTSyhHX1VOSUNPREVfT1BFTl9QVU5DVFVBVElPTiksCisgICAgICAgICAgICBQ
dW5jdHVhdGlvbl9DbG9zZSA9IFVfTUFTSyhHX1VOSUNPREVfQ0xPU0VfUFVOQ1RVQVRJT04pLAor
ICAgICAgICAgICAgUHVuY3R1YXRpb25fQ29ubmVjdG9yID0gVV9NQVNLKEdfVU5JQ09ERV9DT05O
RUNUX1BVTkNUVUFUSU9OKSwKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX090aGVyID0gVV9NQVNL
KEdfVU5JQ09ERV9PVEhFUl9QVU5DVFVBVElPTiksCisKKyAgICAgICAgICAgIFN5bWJvbF9NYXRo
ID0gVV9NQVNLKEdfVU5JQ09ERV9NQVRIX1NZTUJPTCksCisgICAgICAgICAgICBTeW1ib2xfQ3Vy
cmVuY3kgPSBVX01BU0soR19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCksCisgICAgICAgICAgICBT
eW1ib2xfTW9kaWZpZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX1NZTUJPTCksCisgICAg
ICAgICAgICBTeW1ib2xfT3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX1NZTUJPTCksCisK
KyAgICAgICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVf
SU5JVElBTF9QVU5DVFVBVElPTiksCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3Rl
ID0gVV9NQVNLKEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElPTikKKyAgICAgICAgfTsKKworICAg
ICAgICBpbmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGNoKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBhZGQgZ191bmljaGFyX2Nhc2Vmb2xkIHRvIEdMaWIgdXBzdHJlYW0/CisKKyAg
ICAgICAgICAgIGludCBzdGFydCA9IDA7CisgICAgICAgICAgICBpbnQgZW5kID0gR19OX0VMRU1F
TlRTKGNhc2Vmb2xkX3RhYmxlKTsKKworICAgICAgICAgICAgaWYgKGNoID49IGNhc2Vmb2xkX3Rh
YmxlW3N0YXJ0XS5jaCAmJgorICAgICAgICAgICAgICAgIGNoIDw9IGNhc2Vmb2xkX3RhYmxlW2Vu
ZCAtIDFdLmNoKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW50IGhhbGYgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09IGNhc2Vmb2xkX3RhYmxlW2hhbGZdLmNoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdfdXRmOF9nZXRfY2hhcihjYXNlZm9sZF90YWJsZVtoYWxmXS5kYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbGYgPT0gc3RhcnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPiBjYXNlZm9s
ZF90YWJsZVtoYWxmXS5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaGFsZjsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0g
aGFsZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBnX3VuaWNoYXJfdG9sb3dlciAoY2gpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5l
IGludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hh
ciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICAgICAgeworICAgICAgICAg
ICAgKmVycm9yID0gZmFsc2U7CisgICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9yOwor
CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhzcmM7CisgICAgICAgICAgICB1dGY4c3Jj
LnNldChnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJyb3Iub3V0UHRy
KCkpKTsKKyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAqZXJyb3Ig
PSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4cmVzdWx0OworICAgICAgICAgICAgdXRmOHJlc3Vs
dC5zZXQoZ191dGY4X2Nhc2Vmb2xkKHV0ZjhzcmMuZ2V0KCksIC0xKSk7CisKKyAgICAgICAgICAg
IGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAgICAgIEdPd25QdHI8VUNoYXI+
IHV0ZjE2cmVzdWx0OworICAgICAgICAgICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191dGYx
Nih1dGY4cmVzdWx0LmdldCgpLCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9yLm91
dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgeworICAg
ICAgICAgICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHV0ZjE2
cmVzdWx0TGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KHJlc3VsdCwg
dXRmMTZyZXN1bHQuZ2V0KCksIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisK
KyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlubGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBj
b25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgKmVycm9yID0gZmFsc2U7CisgICAgICAgICAgICBHT3duUHRyPEdFcnJvcj4g
Z2Vycm9yOworCisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhzcmM7CisgICAgICAgICAg
ICB1dGY4c3JjLnNldChnX3V0ZjE2X3RvX3V0Zjgoc3JjLCBzcmNMZW5ndGgsIDAsIDAsICZnZXJy
b3Iub3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICAqZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4cmVzdWx0OworICAgICAgICAgICAg
dXRmOHJlc3VsdC5zZXQoZ191dGY4X3N0cmRvd24odXRmOHNyYy5nZXQoKSwgLTEpKTsKKworICAg
ICAgICAgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICAgICAgR093blB0
cjxVQ2hhcj4gdXRmMTZyZXN1bHQ7CisgICAgICAgICAgICB1dGYxNnJlc3VsdC5zZXQoZ191dGY4
X3RvX3V0ZjE2KHV0ZjhyZXN1bHQuZ2V0KCksIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZn
ZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICAqZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHko
cmVzdWx0LCB1dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKKworICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9
CisKKyAgICAgICAgaW5saW5lIFVDaGFyMzIgdG9Mb3dlcihVQ2hhcjMyIGMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG9sb3dlcihjKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ191bmljaGFyX3RvdXBwZXIoYyk7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgaW50IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29u
c3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgICplcnJvciA9IGZhbHNlOworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGdl
cnJvcjsKKworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4c3JjOworICAgICAgICAgICAg
dXRmOHNyYy5zZXQoZ191dGYxNl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9y
Lm91dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAg
KmVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKKyAgICAgICAgICAgIHV0
ZjhyZXN1bHQuc2V0KGdfdXRmOF9zdHJ1cCh1dGY4c3JjLmdldCgpLCAtMSkpOworCisgICAgICAg
ICAgICBsb25nIHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgICAgICBHT3duUHRyPFVD
aGFyPiB1dGYxNnJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9f
dXRmMTYodXRmOHJlc3VsdC5nZXQoKSwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJv
ci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgICAg
ICplcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAqZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB1
dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShyZXN1
bHQsIHV0ZjE2cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikp
OworCisgICAgICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKwor
ICAgICAgICBpbmxpbmUgVUNoYXIzMiB0b1RpdGxlQ2FzZShVQ2hhcjMyIGMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdG90aXRsZShjKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlubGluZSBib29sIGlzQXJhYmljQ2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBjID49IDB4MDYwMCAmJiBjIDw9IDB4MDZGRjsKKyAgICAgICAgfQor
CisgICAgICAgIGlubGluZSBib29sIGlzRm9ybWF0Q2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfRk9STUFU
OworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgaXNTZXBhcmF0b3JTcGFjZShVQ2hh
cjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9
PSBHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5l
IGJvb2wgaXNQcmludGFibGVDaGFyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGdfdW5pY2hhcl9pc3ByaW50KGMpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlu
bGluZSBib29sIGlzRGlnaXQoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZ191bmljaGFyX2lzZGlnaXQoYyk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgYm9v
bCBpc1B1bmN0KFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5p
Y2hhcl9pc3B1bmN0KGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIFVDaGFyMzIgbWly
cm9yZWRDaGFyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgZ3VuaWNoYXIgbWly
cm9yID0gMDsKKyAgICAgICAgICAgIGdfdW5pY2hhcl9nZXRfbWlycm9yX2NoYXIoYywgJm1pcnJv
cik7CisgICAgICAgICAgICByZXR1cm4gbWlycm9yOworICAgICAgICB9CisKKyAgICAgICAgaW5s
aW5lIENoYXJDYXRlZ29yeSBjYXRlZ29yeShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjID4gMHhmZmZmKQorICAgICAgICAgICAgICAgIHJldHVybiBOb0NhdGVnb3J5Owor
CisgICAgICAgICAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hhcl90eXBl
KGMpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBEaXJlY3Rpb24gZGlyZWN0aW9uKFVD
aGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgUGFuZ29CaWRpVHlwZSB0eXBlID0gcGFu
Z29fYmlkaV90eXBlX2Zvcl91bmljaGFyKGMpOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MOiAKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTGVmdFRvUmlnaHQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOiAK
KyAgICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBjYXNlIFBB
TkdPX0JJRElfVFlQRV9BTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRBcmFi
aWM7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MUkU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIExlZnRUb1JpZ2h0RW1iZWRkaW5nOworICAgICAgICAgICAgY2FzZSBQQU5HT19C
SURJX1RZUEVfUkxFOgorICAgICAgICAgICAgICAgIHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGlu
ZzsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0xSTzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTGVmdFRvUmlnaHRPdmVycmlkZTsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklE
SV9UWVBFX1JMTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRPdmVycmlkZTsK
KyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1BERjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9wRGlyZWN0aW9uYWxGb3JtYXQ7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9FTjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRXVyb3BlYW5OdW1iZXI7CisgICAgICAg
ICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTjoKKyAgICAgICAgICAgICAgICByZXR1cm4gQXJh
YmljTnVtYmVyOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRVM6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOworICAgICAgICAgICAgY2Fz
ZSBQQU5HT19CSURJX1RZUEVfRVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV1cm9wZWFuTnVt
YmVyVGVybWluYXRvcjsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0NTOgorICAg
ICAgICAgICAgICAgIHJldHVybiBDb21tb25OdW1iZXJTZXBhcmF0b3I7CisgICAgICAgICAgICBj
YXNlIFBBTkdPX0JJRElfVFlQRV9OU006CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vblNwYWNp
bmdNYXJrOworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQk46CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEJvdW5kYXJ5TmV1dHJhbDsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklE
SV9UWVBFX0I6CisgICAgICAgICAgICAgICAgcmV0dXJuIEJsb2NrU2VwYXJhdG9yOworICAgICAg
ICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gU2Vn
bWVudFNlcGFyYXRvcjsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX1dTOgorICAg
ICAgICAgICAgICAgIHJldHVybiBXaGl0ZVNwYWNlTmV1dHJhbDsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE90aGVyTmV1dHJhbDsKKyAgICAgICAgICAgIH0g
CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9pc2xvd2VyKGMpOworICAgICAg
ICB9CisKKyAgICAgICAgaW5saW5lIGludCBkaWdpdFZhbHVlKFVDaGFyMzIgYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9kaWdpdF92YWx1ZShjKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlubGluZSB1aW50OF90IGNvbWJpbmluZ0NsYXNzKFVDaGFyMzIgYykKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gcmV0dXJuIGdfdW5pY2hhcl9jb21iaW5pbmdfY2xhc3Mo
Yyk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBE
ZWNvbXBvc2l0aW9uVHlwZSBkZWNvbXBvc2l0aW9uVHlwZShVQ2hhcjMyIGMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FCisgICAgICAgICAgICByZXR1cm4gRGVjb21wb3NpdGlvbk5v
bmU7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgaW50IHVtZW1jYXNlY21wKGNvbnN0IFVD
aGFyKiBhLCBjb25zdCBVQ2hhciogYiwgaW50IGxlbikKKyAgICAgICAgeworICAgICAgICAgICAg
R093blB0cjxjaGFyPiB1dGY4YTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOGI7CisK
KyAgICAgICAgICAgIHV0ZjhhLnNldChnX3V0ZjE2X3RvX3V0ZjgoYSwgbGVuLCAwLCAwLCAwKSk7
CisgICAgICAgICAgICB1dGY4Yi5zZXQoZ191dGYxNl90b191dGY4KGIsIGxlbiwgMCwgMCwgMCkp
OworCisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IGZvbGRlZEE7CisgICAgICAgICAgICBHT3du
UHRyPGNoYXI+IGZvbGRlZEI7CisKKyAgICAgICAgICAgIGZvbGRlZEEuc2V0KGdfdXRmOF9jYXNl
Zm9sZCh1dGY4YS5nZXQoKSwgLTEpKTsKKyAgICAgICAgICAgIGZvbGRlZEIuc2V0KGdfdXRmOF9j
YXNlZm9sZCh1dGY4Yi5nZXQoKSwgLTEpKTsKKworICAgICAgICAgICAgaW50IHJlc3VsdCA9IGdf
dXRmOF9jb2xsYXRlKGZvbGRlZEEuZ2V0KCksIGZvbGRlZEIuZ2V0KCkpOworCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICB9Cit9CisKKyNlbmRpZgorCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliVHlw
ZXMuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5p
Y29kZUdMaWJUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0
c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBVbmljb2Rl
R0xpYlR5cGVzX2gKKyNkZWZpbmUgVW5pY29kZUdMaWJUeXBlc19oCisKK3R5cGVkZWYgdWludDE2
X3QgVUNoYXI7Cit0eXBlZGVmIGludDMyX3QgVUNoYXIzMjsKKworI2VuZGlmCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJv
bUlDVS5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9V
bmljb2RlTWFjcm9zRnJvbUlDVS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgor
ICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJv
bi5jaD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlr
LnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBV
bmljb2RlTWFjcm9zRnJvbUlDVV9oCisjZGVmaW5lIFVuaWNvZGVNYWNyb3NGcm9tSUNVX2gKKwor
Ly8gc29tZSBkZWZpbmVzIGZyb20gSUNVCisKKyNkZWZpbmUgVTE2X0lTX0xFQUQoYykgKCgoYykm
MHhmZmZmZmMwMCk9PTB4ZDgwMCkKKyNkZWZpbmUgVTE2X0lTX1RSQUlMKGMpICgoKGMpJjB4ZmZm
ZmZjMDApPT0weGRjMDApCisjZGVmaW5lIFUxNl9TVVJST0dBVEVfT0ZGU0VUICgoMHhkODAwPDwx
MFVMKSsweGRjMDAtMHgxMDAwMCkKKyNkZWZpbmUgVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxlYWQs
IHRyYWlsKSBcCisgICAgKCgoVUNoYXIzMikobGVhZCk8PDEwVUwpKyhVQ2hhcjMyKSh0cmFpbCkt
VTE2X1NVUlJPR0FURV9PRkZTRVQpCisKKyNkZWZpbmUgVTE2X0xFQUQoc3VwcGxlbWVudGFyeSkg
KFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpPj4xMCkrMHhkN2MwKQorI2RlZmluZSBVMTZfVFJBSUwo
c3VwcGxlbWVudGFyeSkgKFVDaGFyKSgoKHN1cHBsZW1lbnRhcnkpJjB4M2ZmKXwweGRjMDApCisK
KyNkZWZpbmUgVV9JU19TVVJST0dBVEUoYykgKCgoYykmMHhmZmZmZjgwMCk9PTB4ZDgwMCkKKyNk
ZWZpbmUgVTE2X0lTX1NJTkdMRShjKSAhVV9JU19TVVJST0dBVEUoYykKKyNkZWZpbmUgVTE2X0lT
X1NVUlJPR0FURShjKSBVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNfU1VSUk9HQVRF
X0xFQUQoYykgKCgoYykmMHg0MDApPT0wKQorCisjZGVmaW5lIFUxNl9ORVhUKHMsIGksIGxlbmd0
aCwgYykgeyBcCisgICAgKGMpPShzKVsoaSkrK107IFwKKyAgICBpZihVMTZfSVNfTEVBRChjKSkg
eyBcCisgICAgICAgIHVpbnQxNl90IF9fYzI7IFwKKyAgICAgICAgaWYoKGkpPChsZW5ndGgpICYm
IFUxNl9JU19UUkFJTChfX2MyPShzKVsoaSldKSkgeyBcCisgICAgICAgICAgICArKyhpKTsgXAor
ICAgICAgICAgICAgKGMpPVUxNl9HRVRfU1VQUExFTUVOVEFSWSgoYyksIF9fYzIpOyBcCisgICAg
ICAgIH0gXAorICAgIH0gXAorfQorCisjZGVmaW5lIFVfTUFTSyh4KSAoKHVpbnQzMl90KTE8PCh4
KSkKKworI2VuZGlmCisKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMDgtMTItMDEgIERvbWluaWsgUsO2dHRz
Y2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmlj
b2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5
IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKworICAgICAgICBBZGRlZCBwcm9iaW5n
IGZvciBhIGhhcmQtY29kZWQgbGlzdHMgb2YgdGV4dCBlbmNvZGluZ3MuCisgICAgICAgIFRoZSBi
YXNpcyBvZiB0aGlzIGxpc3QgaXMgdGFrZW4gZnJvbSB0aGUgZW5jb2RpbmdzIHN1cHBvcnRlZCBi
eSBpY29udiwKKyAgICAgICAgdGhlbiBleHRlbmRlZCBieSBlLmcuIHRpcy02MjAsIHdpbmRvd3Mt
MTI1MSwgZXVjLWtyLCB3aW5kb3dzLTEyNTMgYW5kCisgICAgICAgIGEgbnVtYmVyIG9mIENoaW5l
c2Ugb25lcy4KKworICAgICAgICBQcm9iaW5nIGlzIG5lY2Vzc2FyeSB3aXRoIHRoZSBjdXJyZW50
IGRlc2lnbiBvZiB0ZXh0IGNvZGVjcworICAgICAgICBhcyBpY29udi5oIGRvZXMgbm90IHN1cHBv
cnQgZW51bWVyYXRpbmcgYXZhaWxhYmxlIGVuY29kaW5ncy4KKworICAgICAgICBDaGFuZ2VkIGJl
aGF2aW91ciBvZiBHVEsgdmVyc2lvbiBvZiB0ZXh0QnJlYWtMYXN0IGFuZCB0ZXh0QnJlYWtGaXJz
dAorICAgICAgICB0byBsb29rIGZvciBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgYnJlYWtzLgorCisg
ICAgICAgIFRleHRDb2RlY0d0ayBub3cgc3VwcG9ydHMgcGFydGlhbGx5IHRyYW5zbWl0dGVkIG11
bHRpYnl0ZSBjaGFyYWN0ZXJzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRFbmNvZGVkSG9z
dG5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0
ay5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dGV4dEJyZWFrTGFzdCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtQcmV2
aW91cyk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dEVuY29kaW5nOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRCYXNl
VGV4dENvZGVjTWFwcyk6CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRUZXh0Q29kZWNNYXBzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Qm91bmRhcmllc0d0ay5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmRXb3JkQm91bmRhcnkpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRCcmVha0l0ZXJhdG9yR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0VXBJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpjaGFyYWN0
ZXJCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OndvcmRCcmVha0l0ZXJhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmxpbmVCcmVha0l0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNlbnRlbmNlQnJlYWtJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtGaXJz
dCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtMYXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OnRleHRCcmVha05leHQpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJldmlvdXMpOgor
ICAgICAgICAoV2ViQ29yZTo6dGV4dEJyZWFrUHJlY2VkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OnRleHRCcmVha0ZvbGxvd2luZyk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0QnJlYWtDdXJyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dEJyZWFrKToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpuZXdUZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjR3RrOjppc0VuY29kaW5nQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY0d0azo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY0d0azo6cmVnaXN0ZXJDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3Rr
OjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJCYXNlQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0
azo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDb2RlY0d0azo6VGV4dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0
azo6flRleHRDb2RlY0d0ayk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlbGVh
c2VJQ29udik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RGVj
b2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RW5jb2Rl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENvZGVjR3RrLmg6IEFkZGVkLgorCiAyMDA4LTEyLTAxICBUb3IgQXJuZSBWZXN0YsO4
ICA8dGF2ZXN0Ym9AdHJvbGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBI
YXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcxLDE0ICsxMzcxLDkgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Qm91bmRhcmllcy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJ
Q1UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaCBcCi0J
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBcCi0JV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWMuaCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAot
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNMYXRpbjEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNw
cCBcCkBAIC0xNzMxLDggKzE3MjYsMzEgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcCBc
Ci0JV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5o
CisKKyMgLS0tLQorIyBpY3UgdW5pY29kZSBiYWNrZW5kCisjIC0tLS0KK2lmIFVTRV9JQ1VfVU5J
Q09ERQord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dENvZGVjSUNVLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VHdGsuY3BwCitlbmRpZiAj
IFVTRV9JQ1VfVU5JQ09ERQorCisjIC0tLS0KKyMgZ2xpYiB1bmljb2RlIGJhY2tlbmQKKyMgLS0t
LQoraWYgVVNFX0dMSUJfVU5JQ09ERQord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9ndGsvVGV4dENvZGVjR3RrLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4
dEJvdW5kYXJpZXNHdGsuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVh
a0l0ZXJhdG9yR3RrLmNwcAorZW5kaWYKIAogIyAtLS0tCiAjIGN1cmwgaHR0cCBiYWNrZW5kCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlIDx1bmljb2Rl
L3VpZG5hLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5jbHVkZSA8UVVybD4KKyNlbGlm
IFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGlkbmEuaD4K
KyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRpby5oPgpA
QCAtMTMzOSw2ICsxMzQzLDE5IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEVuY29kZWRIb3N0bmFtZShV
Q2hhckIKICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKICAgICBRQnl0ZUFycmF5IHJlc3VsdCA9IFFV
cmw6OnRvQWNlKFN0cmluZyhzdHIsIHN0ckxlbikpOwogICAgIGJ1ZmZlci5hcHBlbmQocmVzdWx0
LmNvbnN0RGF0YSgpLCByZXN1bHQubGVuZ3RoKCkpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkK
KyAgICAvLyBmaXJzdCB0cmFuc2xhdGUgdG8gdWNzNCwgbGliaWRuIGlzIGV4cGVjdGluZyBjb2Rl
IHBvaW50cyAKKyAgICBHT3duUHRyPGd1bmljaGFyPiB1Y3M0SG9zdG5hbWU7CisgICAgR093blB0
cjxHRXJyb3I+IHVjczRFcnI7CisgICAgdWNzNEhvc3RuYW1lLnNldChnX3V0ZjE2X3RvX3VjczQo
c3RyLCBzdHJMZW4sIDAsIDAsICZ1Y3M0RXJyLm91dFB0cigpKSk7CisgICAgaWYodWNzNEVycikK
KyAgICAgICAgcmV0dXJuOworICAgIGNoYXIqIGVuY29kZWRIb3N0bmFtZSA9IDA7CisgICAgaW50
IGVycjsKKyAgICBlcnIgPSBpZG5hX3RvX2FzY2lpXzR6KHVjczRIb3N0bmFtZS5nZXQoKSwgJmVu
Y29kZWRIb3N0bmFtZSwgSUROQV9BTExPV19VTkFTU0lHTkVEKTsKKyAgICBpZihlcnIgPT0gSURO
QV9TVUNDRVNTKQorICAgICAgICBidWZmZXIuYXBwZW5kKGVuY29kZWRIb3N0bmFtZSwgc3RybGVu
KGVuY29kZWRIb3N0bmFtZSkpOworICAgIGZyZWUoZW5jb2RlZEhvc3RuYW1lKTsKICNlbmRpZgog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxl
Rm9udERhdGFHdGsuY3BwCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCAr
MzksNiBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0j
aW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvci5oCShyZXZpc2lvbiAzODg1OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBUZXh0QnJlYWtJdGVyYXRvciogc2VudGVuY2VCcmVha0l0ZXJh
dG9yKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CiAKICAgICBpbnQgdGV4dEJyZWFrRmlyc3Qo
VGV4dEJyZWFrSXRlcmF0b3IqKTsKKyAgICBpbnQgdGV4dEJyZWFrTGFzdChUZXh0QnJlYWtJdGVy
YXRvciopOwogICAgIGludCB0ZXh0QnJlYWtOZXh0KFRleHRCcmVha0l0ZXJhdG9yKik7CisgICAg
aW50IHRleHRCcmVha1ByZXZpb3VzKFRleHRCcmVha0l0ZXJhdG9yKik7CiAgICAgaW50IHRleHRC
cmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqKTsKICAgICBpbnQgdGV4dEJyZWFrUHJlY2Vk
aW5nKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KTsKICAgICBpbnQgdGV4dEJyZWFrRm9sbG93aW5n
KFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSwxMSArODksMjEgQEAgaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0ZXJhdG9yKiBi
aQogICAgIHJldHVybiB1YnJrX2ZpcnN0KGJpKTsKIH0KIAoraW50IHRleHRCcmVha0xhc3QoVGV4
dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiB1YnJrX2xhc3QoYmkpOworfQorCiBp
bnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogYmkpCiB7CiAgICAgcmV0dXJuIHVi
cmtfbmV4dChiaSk7CiB9CiAKK2ludCB0ZXh0QnJlYWtQcmV2aW91cyhUZXh0QnJlYWtJdGVyYXRv
ciogYmkpCit7CisgICAgcmV0dXJuIHVicmtfcHJldmlvdXMoYmkpOworfQorCiBpbnQgdGV4dEJy
ZWFrUHJlY2VkaW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKIHsKICAgICByZXR1
cm4gdWJya19wcmVjZWRpbmcoYmksIHBvcyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmNwcAkocmV2aXNpb24gMzg4NTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1
ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKICNpbmNsdWRlIDxR
U3RyaW5nPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8d3RmL0dPd25QdHIuaD4KICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTEyLDYgKzExNSwyMCBAQCBDU3RyaW5nIFRleHRF
bmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyCiAgICAgUVN0cmluZyBzdHIocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOwogICAgIHN0ciA9IHN0ci5u
b3JtYWxpemVkKFFTdHJpbmc6Ok5vcm1hbGl6YXRpb25Gb3JtX0MpOwogICAgIHJldHVybiBuZXdU
ZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihz
dHIudXRmMTYoKSksIHN0ci5sZW5ndGgoKSwgaGFuZGxpbmcpOworI2VsaWYgVVNFKEdMSUJfVU5J
Q09ERSkKKyAgICBHT3duUHRyPGNoYXI+IHV0Zjhzb3VyY2U7CisgICAgdXRmOHNvdXJjZS5zZXQo
Z191dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgMCkpOworCisgICAgR093
blB0cjxjaGFyPiB1dGY4bm9ybWFsaXplZDsKKyAgICB1dGY4bm9ybWFsaXplZC5zZXQoZ191dGY4
X25vcm1hbGl6ZSh1dGY4c291cmNlLmdldCgpLCAtMSwgR19OT1JNQUxJWkVfTkZDKSk7CisKKyAg
ICBsb25nIHV0ZjE2bGVuZ3RoOworICAgIEdPd25QdHI8VUNoYXI+IHV0ZjE2bm9ybWFsaXplZDsK
KyAgICB1dGYxNm5vcm1hbGl6ZWQuc2V0KGdfdXRmOF90b191dGYxNih1dGY4bm9ybWFsaXplZC5n
ZXQoKSwgLTEsIDAsICZ1dGYxNmxlbmd0aCwgMCkpOworCisgICAgQ1N0cmluZyByZXN1bHQgPSBu
ZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUodXRmMTZub3JtYWxpemVkLmdldCgpLCB1dGYxNmxl
bmd0aCwgaGFuZGxpbmcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKICNlbmRpZgogfQogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHJl
dmlzaW9uIDM4ODU4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBAQAogI2lmIFBMQVRGT1JNKFFU
KQogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0LmgiCiAjZW5kaWYKKyNpZiBQTEFURk9STShHVEsp
CisjaW5jbHVkZSAiZ3RrL1RleHRDb2RlY0d0ay5oIgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiAKQEAgLTE5Miw2ICsxOTUsMTEgQEAgc3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENv
ZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFk
ZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VD
b2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlmCisKKyNpZiBVU0UoR0xJQl9VTklDT0RF
KQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRF
bmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFk
ZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29k
ZWNNYXBzKCkKQEAgLTIxMCw2ICsyMTgsMTEgQEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVj
TWFwcygpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3RlckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0
RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVyQ29kZWNzKGFkZFRv
VGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBUZXh0
Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5n
TmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKGFkZFRv
VGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGQ6OmF1dG9fcHRyPFRleHRDb2RlYz4gbmV3
VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCb3VuZGFyaWVzR3RrLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJvdW5kYXJpZXNHdGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lu
Y2x1ZGUgIlN0cmluZ0ltcGwuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2ludCBmaW5kTmV4dFdvcmRGcm9tSW5kZXgoY29uc3QgVUNo
YXIqIGNoYXJzLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGJvb2wgZm9yd2FyZCkKK3sKKyAgICBU
ZXh0QnJlYWtJdGVyYXRvciogaXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKwor
ICAgIGlmIChmb3J3YXJkKSB7CisgICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9sbG93aW5n
KGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChwb3NpdGlvbiAhPSBUZXh0QnJlYWtEb25l
KSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJjaGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIg
cHJlY2VlZGluZyB0aGUgYnJlYWsKKyAgICAgICAgICAgIC8vIGlzIGFscGhhbnVtZXJpYy4KKyAg
ICAgICAgICAgIGlmIChwb3NpdGlvbiA8IGxlbiAmJiBnX3VuaWNoYXJfaXNhbG51bShjaGFyc1tw
b3NpdGlvbiAtIDFdKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisKKyAgICAg
ICAgICAgIHBvc2l0aW9uID0gdGV4dEJyZWFrRm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gbGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvc2l0
aW9uID0gdGV4dEJyZWFrUHJlY2VkaW5nKGl0LCBwb3NpdGlvbik7CisgICAgICAgIHdoaWxlIChw
b3NpdGlvbiAhPSBUZXh0QnJlYWtEb25lKSB7CisgICAgICAgICAgICAvLyBXZSBzdG9wIHNlYXJj
aGluZyB3aGVuIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nIHRoZSBicmVhaworICAgICAgICAgICAg
Ly8gaXMgYWxwaGFudW1lcmljLgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gMCAmJiBnX3Vu
aWNoYXJfaXNhbG51bShjaGFyc1twb3NpdGlvbl0pKQorICAgICAgICAgICAgICAgIHJldHVybiBw
b3NpdGlvbjsKKworICAgICAgICAgICAgcG9zaXRpb24gPSB0ZXh0QnJlYWtQcmVjZWRpbmcoaXQs
IHBvc2l0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
dm9pZCBmaW5kV29yZEJvdW5kYXJ5KGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbiwgaW50IHBv
c2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKK3sKKyAgICBUZXh0QnJlYWtJdGVyYXRvciog
aXQgPSB3b3JkQnJlYWtJdGVyYXRvcihjaGFycywgbGVuKTsKKyAgICAqZW5kID0gdGV4dEJyZWFr
Rm9sbG93aW5nKGl0LCBwb3NpdGlvbik7CisgICAgaWYgKCplbmQgPCAwKQorICAgICAgICAqZW5k
ID0gdGV4dEJyZWFrTGFzdChpdCk7CisgICAgKnN0YXJ0ID0gdGV4dEJyZWFrUHJldmlvdXMoaXQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvZ3RrL1RleHRCcmVha0l0ZXJhdG9yR3RrLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJz
IEtub2xsIDxsYXJzQHRyb2xsdGVjaC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJp
bGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0
c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKworI2luY2x1ZGUg
PHBhbmdvL3BhbmdvLmg+CisKKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2VudW0gVUJyZWFrSXRlcmF0b3JUeXBlIHsKKyAgICBVQlJLX0NIQVJBQ1RF
UiwKKyAgICBVQlJLX1dPUkQsCisgICAgVUJSS19MSU5FLAorICAgIFVCUktfU0VOVEVOQ0UKK307
CisKK2NsYXNzIFRleHRCcmVha0l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBVQnJlYWtJdGVyYXRv
clR5cGUgbV90eXBlOworICAgIGludCBtX2xlbmd0aDsKKyAgICBQYW5nb0xvZ0F0dHIqIG1fbG9n
X2F0dHJzOworCisgICAgaW50IG1faW5kZXg7Cit9OworCitzdGF0aWMgVGV4dEJyZWFrSXRlcmF0
b3IqIHNldFVwSXRlcmF0b3IoYm9vbCYgY3JlYXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRv
ciomIGl0ZXJhdG9yLAorICAgIFVCcmVha0l0ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciog
c3RyaW5nLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghY3JlYXRlZEl0ZXJhdG9yKSB7CisgICAgICAgIGl0ZXJhdG9yID0gbmV3
IFRleHRCcmVha0l0ZXJhdG9yKCk7CisgICAgICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7Cisg
ICAgfQorICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJldHVybiAwOworCisgICAgbG9uZyB1
dGY4bGVuOworICAgIEdPd25QdHI8Y2hhcj4gdXRmODsKKyAgICB1dGY4LnNldChnX3V0ZjE2X3Rv
X3V0Zjgoc3RyaW5nLCBsZW5ndGgsIDAsICZ1dGY4bGVuLCAwKSk7CisKKyAgICAvLyBGSVhNRTog
YXNzdW1lcyBubyBzdXJyb2dhdGUgcGFpcnMKKworICAgIGl0ZXJhdG9yLT5tX3R5cGUgPSB0eXBl
OworICAgIGl0ZXJhdG9yLT5tX2xlbmd0aCA9IGxlbmd0aDsKKyAgICBpZihjcmVhdGVkSXRlcmF0
b3IpCisgICAgICAgIGdfZnJlZShpdGVyYXRvci0+bV9sb2dfYXR0cnMpOworICAgIGl0ZXJhdG9y
LT5tX2xvZ19hdHRycyA9IGdfbmV3MChQYW5nb0xvZ0F0dHIsIGxlbmd0aCArIDEpOworICAgIGl0
ZXJhdG9yLT5tX2luZGV4ID0gLTE7CisgICAgcGFuZ29fZ2V0X2xvZ19hdHRycyh1dGY4LmdldCgp
LCB1dGY4bGVuLCAtMSwgMCwgaXRlcmF0b3ItPm1fbG9nX2F0dHJzLCBsZW5ndGggKyAxKTsKKwor
ICAgIHJldHVybiBpdGVyYXRvcjsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJy
ZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBjcmVhdGVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciA9IGZhbHNlOworICAgIHN0YXRp
YyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKKyAgICBy
ZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciwKKyAgICAg
ICAgc3RhdGljQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciwgVUJSS19DSEFSQUNURVIsIHN0cmluZywg
bGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0
IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlZFdv
cmRCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBz
dGF0aWNXb3JkQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVk
V29yZEJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY1dvcmRCcmVha0l0ZXJhdG9yLCBVQlJL
X1dPUkQsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRlcmF0b3IqIGxpbmVCcmVh
a0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgc3RhdGlj
IGJvb2wgY3JlYXRlZExpbmVCcmVha0l0ZXJhdG9yID0gZmFsc2U7CisgICAgc3RhdGljIFRleHRC
cmVha0l0ZXJhdG9yKiBzdGF0aWNMaW5lQnJlYWtJdGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJ
dGVyYXRvcihjcmVhdGVkTGluZUJyZWFrSXRlcmF0b3IsCisgICAgICAgIHN0YXRpY0xpbmVCcmVh
a0l0ZXJhdG9yLCBVQlJLX0xJTkUsIHN0cmluZywgbGVuZ3RoKTsKK30KKworVGV4dEJyZWFrSXRl
cmF0b3IqIHNlbnRlbmNlQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVu
Z3RoKQoreworICAgIHN0YXRpYyBib29sIGNyZWF0ZWRTZW50ZW5jZUJyZWFrSXRlcmF0b3IgPSBm
YWxzZTsKKyAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1NlbnRlbmNlQnJlYWtJ
dGVyYXRvcjsKKyAgICByZXR1cm4gc2V0VXBJdGVyYXRvcihjcmVhdGVkU2VudGVuY2VCcmVha0l0
ZXJhdG9yLAorICAgICAgICBzdGF0aWNTZW50ZW5jZUJyZWFrSXRlcmF0b3IsIFVCUktfU0VOVEVO
Q0UsIHN0cmluZywgbGVuZ3RoKTsKK30KKworaW50IHRleHRCcmVha0ZpcnN0KFRleHRCcmVha0l0
ZXJhdG9yKiBiaSkKK3sKKyAgICAvLyBzZWUgdGV4dEJyZWFrTGFzdAorICAgIAorICAgIGludCBm
aXJzdEN1cnNvclBvc2l0aW9uID0gLTE7CisgICAgaW50IHBvcyA9IDA7CisgICAgd2hpbGUocG9z
IDw9IGJpLT5tX2xlbmd0aCAmJiAoZmlyc3RDdXJzb3JQb3NpdGlvbiA8IDApKSB7CisgICAgICAg
IGlmIChiaS0+bV9sb2dfYXR0cnNbcG9zXS5pc19jdXJzb3JfcG9zaXRpb24pCisgICAgICAgICAg
ICBmaXJzdEN1cnNvclBvc2l0aW9uID0gcG9zOworICAgIH0KKyAgICBiaS0+bV9pbmRleCA9IGZp
cnN0Q3Vyc29yUG9zaXRpb247CisgICAgcmV0dXJuIGZpcnN0Q3Vyc29yUG9zaXRpb247Cit9CisK
K2ludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBiaSkKK3sKKyAgICAvLyB0ZXh0
QnJlYWtMYXN0IGlzIG5vdCBtZWFudCB0byBmaW5kIGJyZWFrcyBhY2NvcmRpbmcgdG8gYmktPm1f
dHlwZSBidXQgcmVhbGx5IGxhc3QgY2hhcmFjdGVyIAorICAgIC8vIChjbXAgSUNVIGRvY3VtZW50
YXRpb24gZm9yIHVicmtfZmlyc3QgYW5kIHVicmtfbGFzdCkKKyAgICAvLyBzbyB3ZSBzaG91bGQg
YWR2YW5jZSBvciB0cmF2ZXJzZSBiYWNrIGJhc2VkIG9uIGJpLT5tX2xvZ19hdHRycyBjdXJzb3Ig
cG9zaXRpb25zCisgICAgCisgICAgLy8gZnJvbSBJQ1UgZG9jcyBmb3IgdWJya19sYXN0OgorICAg
IC8vICJEZXRlcm1pbmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGJleW9uZCB0aGUgbGFzdCBjaGFy
YWN0ZXIgaW4gdGhlIHRleHQgYmVpbmcgc2Nhbm5lZC4iIAorCisgICAgLy8gSWYgbGFzdCBjaGFy
YWN0ZXIgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsIHN0cmluZyBpcyBhIHdoaXRlc3BhY2UsCisg
ICAgLy8gdHJhdmVyc2UgdG8gdGhlIGxlZnQgdW50aWwgdGhlIGZpcnN0IG5vbi13aGl0ZSBjaGFy
YWN0ZXIgcG9zaXRpb24gaXMgZm91bmQKKyAgICAvLyBhbmQgcmV0dXJuIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgZmlyc3Qgd2hpdGUtc3BhY2UgY2hhciBhZnRlciB0aGlzIG9uZS4KKyAgICAvLyBvdGhl
cndpc2UgcmV0dXJuIG1fbGVuZ3RoLCBhcyAidGhlIGZpcnN0IGNoYXJhY3RlciBiZXlvbmQgdGhl
IGxhc3QiIGlzIG91dHNpZGUgb3VyIHN0cmluZy4KKyAgICAKKyAgICBib29sIHdoaXRlU3BhY2VB
dFRoZUVuZCA9IHRydWU7CisgICAgaW50IG5leHRXaGl0ZVNwYWNlUG9zID0gYmktPm1fbGVuZ3Ro
OworICAgIAorICAgIGludCBwb3MgPSBiaS0+bV9sZW5ndGg7CisgICAgd2hpbGUgKHBvcyA+PSAw
ICYmIHdoaXRlU3BhY2VBdFRoZUVuZCkgeworICAgICAgICBpZiAoYmktPm1fbG9nX2F0dHJzW3Bv
c10uaXNfY3Vyc29yX3Bvc2l0aW9uKSB7CisgICAgICAgICAgICBpZiAod2hpdGVTcGFjZUF0VGhl
RW5kID0gYmktPm1fbG9nX2F0dHJzW3Bvc10uaXNfd2hpdGUpCisgICAgICAgICAgICAgICAgbmV4
dFdoaXRlU3BhY2VQb3MgPSBwb3M7CisgICAgICAgIH0KKyAgICAgICAgcG9zLS07CisgICAgfQor
ICAgIGJpLT5tX2luZGV4ID0gbmV4dFdoaXRlU3BhY2VQb3M7CisgICAgcmV0dXJuIG5leHRXaGl0
ZVNwYWNlUG9zOworfQorCitpbnQgdGV4dEJyZWFrTmV4dChUZXh0QnJlYWtJdGVyYXRvciogYmkp
Cit7CisgICAgZm9yIChpbnQgaSA9IGJpLT5tX2luZGV4ICsgMTsgaSA8PSBiaS0+bV9sZW5ndGg7
IGkrKykgeworICAgICAgICBpZiAoYmktPm1fdHlwZSA9PSBVQlJLX0xJTkUgJiYgYmktPm1fbG9n
X2F0dHJzW2ldLmlzX2xpbmVfYnJlYWspIHsKKyAgICAgICAgICAgIGJpLT5tX2luZGV4ID0gaTsK
KyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IAorICAgICAgICBpZiAoYmktPm1fdHlw
ZSA9PSBVQlJLX1dPUkQgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX3N0YXJ0IHx8IGJp
LT5tX2xvZ19hdHRyc1tpXS5pc193b3JkX2VuZCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBT
aW5nbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgKGkuZS4gd2hpdGUgc3BhY2UgYXJvdW5kIHRoZW0p
LCBzdWNoIGFzIHRoZSBldXJvIHN5bWJvbCDigqwsIAorICAgICAgICAgICAgLy8gYXJlIG5vdCBt
YXJrZWQgYXMgd29yZF9zdGFydCAmIHdvcmRfZW5kIGFzIG9wcG9zZWQgdG8gdGhlIHdheSBJQ1Ug
ZG9lcyBpdAorICAgICAgICAgICAgLy8gVGhpcyBsZWFkcyAtIGZvciBleGFtcGxlIC0gdG8gZGlm
ZmVyZW50IHdvcmQgc2VsZWN0aW9uIGJlaGF2aW91ciB3aGVuIHJpZ2h0IGNsaWNraW5nLgorICAg
ICAgICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmktPm1fbG9n
X2F0dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikgeworICAgICAgICAgICAgYmktPm1faW5kZXgg
PSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gCisgICAgICAgIGlmIChiaS0+
bV90eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5j
ZV9zdGFydCB8fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfc2VudGVuY2VfZW5kKSkgeworICAgICAg
ICAgICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIFRleHRCcmVha0RvbmU7Cit9CisKK2ludCB0ZXh0QnJlYWtQcmV2
aW91cyhUZXh0QnJlYWtJdGVyYXRvciogYmkpCit7CisgICAgZm9yIChpbnQgaSA9IGJpLT5tX2lu
ZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19M
SU5FICYmIGJpLT5tX2xvZ19hdHRyc1tpXS5pc19saW5lX2JyZWFrKSB7CisgICAgICAgICAgICBi
aS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSAKKyAgICAg
ICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19XT1JEICYmIChiaS0+bV9sb2dfYXR0cnNbaV0uaXNf
d29yZF9zdGFydCB8fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfd29yZF9lbmQpKSB7CisgICAgICAg
ICAgICBiaS0+bV9pbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSAK
KyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmktPm1fbG9nX2F0
dHJzW2ldLmlzX2N1cnNvcl9wb3NpdGlvbikgeworICAgICAgICAgICAgYmktPm1faW5kZXggPSBp
OworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0gCisgICAgICAgIGlmIChiaS0+bV90
eXBlID09IFVCUktfU0VOVEVOQ0UgJiYgKGJpLT5tX2xvZ19hdHRyc1tpXS5pc19zZW50ZW5jZV9z
dGFydCB8fCBiaS0+bV9sb2dfYXR0cnNbaV0uaXNfc2VudGVuY2VfZW5kKSkgeworICAgICAgICAg
ICAgYmktPm1faW5kZXggPSBpOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHRleHRCcmVha0ZpcnN0KGJpKTsKK30KKworaW50IHRleHRCcmVha1By
ZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAgYmktPm1faW5k
ZXggPSBwb3M7CisgICAgcmV0dXJuIHRleHRCcmVha1ByZXZpb3VzKGJpKTsKK30KKworaW50IHRl
eHRCcmVha0ZvbGxvd2luZyhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAg
aWYgKHBvcyA8IDApCisgICAgICAgIHBvcyA9IC0xOworICAgIGJpLT5tX2luZGV4ID0gcG9zOwor
ICAgIHJldHVybiB0ZXh0QnJlYWtOZXh0KGJpKTsKK30KKworaW50IHRleHRCcmVha0N1cnJlbnQo
VGV4dEJyZWFrSXRlcmF0b3IqIGJpKQoreworICAgIHJldHVybiBiaS0+bV9pbmRleDsKK30KKwor
Ym9vbCBpc1RleHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciogYmksIGludCBwb3MpCit7CisgICAg
aWYgKGJpLT5tX2luZGV4ID49IDApIHsKKyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19M
SU5FICYmIGJpLT5tX2xvZ19hdHRyc1tiaS0+bV9pbmRleF0uaXNfbGluZV9icmVhaykgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gCisgICAgICAgIGlmIChiaS0+bV90eXBl
ID09IFVCUktfV09SRCAmJiBiaS0+bV9sb2dfYXR0cnNbYmktPm1faW5kZXhdLmlzX3dvcmRfZW5k
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSAKKyAgICAgICAgaWYgKGJp
LT5tX3R5cGUgPT0gVUJSS19DSEFSQUNURVIgJiYgYmktPm1fbG9nX2F0dHJzW2JpLT5tX2luZGV4
XS5pc19jaGFyX2JyZWFrKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSAK
KyAgICAgICAgaWYgKGJpLT5tX3R5cGUgPT0gVUJSS19TRU5URU5DRSAmJiBiaS0+bV9sb2dfYXR0
cnNbYmktPm1faW5kZXhdLmlzX3NlbnRlbmNlX2VuZCkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorCit9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q29kZWNHdGsu
aCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvR093blB0ci5oPgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwordXNpbmcgc3Rk
OjphdXRvX3B0cjsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKwor
CisvLyBhcHBlbmRPbWl0dGluZ0JPTSBpcyBnb25lIChodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8zMzM4MCksIHNvIHdlIG5lZWQgdG8gYXZvaWQgZ2VuZXJhdGluZyBleHRyYSBCT00n
cworLy8gaGVyZS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgc3BlY2lmeWluZyB0aGUgVVRGLTE2
IGNvZGVjcycgZW5kaWFubmVzcyBleHBsaWNpdGx5IHdoZW4gaW5pdGlhbGl6aW5nIGljb252CisK
KyNpZiAoR19CWVRFX09SREVSID09IEdfQklHX0VORElBTikKKyAgICBjb25zdCBnY2hhciogV2Vi
Q29yZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdOYW1lID0gIlVURi0xNkJFIjsK
KyNlbHNlIAorICAgIGNvbnN0IGdjaGFyKiBXZWJDb3JlOjpUZXh0Q29kZWNHdGs6Om1faW50ZXJu
YWxFbmNvZGluZ05hbWUgPSAiVVRGLTE2TEUiOworI2VuZGlmCisKKworLy8gbGlzdCBvZiB0ZXh0
IGVuY29kaW5ncyBhbmQgdGhlaXIgYWxpYXNlcworLy8gdGhlIGZpcnN0IGVudHJ5LyJhbGlhcyIg
aXMgdGhlIGNhbm9uaWNhbCBuYW1lLCBlYWNoIGFsaWFzIGxpc3QgbXVzdCBiZSB0ZXJtaW5hdGVk
IGJ5IGEgMAorCisvLyBVbmljb2RlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfVVRGXzggICAgICAgICAgICA9IHsgIlVURi04IiwgMH07
IAorCisvLyBXZXN0ZXJuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMSAgICAgICA9IHsgIklTTy04ODU5LTEiLCAiQ1A4
MTkiLCAiSUJNODE5IiwgIklTTy1JUi0xMDAiLCAiSVNPODg1OS0xIiwgIklTT184ODU5LTEiLCAi
SVNPXzg4NTktMToxOTg3IiwgICJMMSIsICJMQVRJTjEiLCAiQ1NJU09MQVRJTjEiLCAwfTsKK1Rl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19N
QUNST01BTiAgICAgICAgID0geyAiTUFDUk9NQU4iLCAiTUFDIiwgIk1BQ0lOVE9TSCIsICJDU01B
Q0lOVE9TSCIsIDB9OworCisvLyBKYXBhbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1NISUZUX0pJUyAgICAgICAgPSB7ICJTaGlm
dF9KSVMiLCAiTVNfS0FOSkkiLCAiU0hJRlQtSklTIiwgIlNKSVMiLCAiQ1NTSElGVEpJUyIsIDB9
OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlh
c2VzX0VVQ19KUCAgICAgICAgICAgPSB7ICJFVUNfSlAiLCAiRVVDLUpQIiwgIkVVQ0pQIiwgIkVY
VEVOREVEX1VOSVhfQ09ERV9QQUNLRURfRk9STUFUX0ZPUl9KQVBBTkVTRSIsICJDU0VVQ1BLREZN
VEpBUEFORVNFIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlAgICAgICA9IHsgIklTTy0yMDIyLUpQIiwgMH07
CisKKy8vIFRyYWRpdGlvbmFsIENoaW5lc2UKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3Qg
VGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19CSUc1ICAgICAgICAgICAgID0geyAiQklHNSIs
ICJCSUctNSIsICJCSUctRklWRSIsICJCSUc1IiwgIkJJR0ZJVkUiLCAiQ04tQklHNSIsICJDU0JJ
RzUiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19CSUc1X0hLU0NTICAgICAgID0geyAiQklHNS1IS1NDUyIsICJCSUc1LUhLU0NT
OjIwMDQiLCAiQklHNUhLU0NTIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A5NTAgICAgICAgICAgICA9IHsgIkNQOTUwIiwg
MH07CisKKy8vIEtvcmVhbgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSICAgICAgPSB7ICJJU08tMjAyMi1LUiIsICJD
U0lTTzIwMjJLUiIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0NQOTQ5ICAgICAgICAgICAgPSB7ICJDUDk0OSIsICJVSEMiLCAw
fTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19FVUNfS1IgICAgICAgICAgID0geyAiRVVDLUtSIiwgIkNTRVVDS1IiLCAwIH07CisKKy8v
IEFyYWJpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0lTT184ODU5XzYgICAgICAgPSB7ICJJU08tODg1OS02IiwgIkFSQUJJQyIsICJB
U01PLTcwOCIsICJFQ01BLTExNCIsICJJU08tSVItMTI3IiwgIklTTzg4NTktNiIsICJJU09fODg1
OS02IiwgIklTT184ODU5LTY6MTk4NyIsICJDU0lTT0xBVElOQVJBQklDIiwgMH07CitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU2
ICAgICAgICAgICA9IHsgIndpbmRvd3MtMTI1NiIsICJDUDEyNTYiLCAiTVMtQVJBQiIsIDB9OyAv
LyByZWFycmFuZ2VkLCB3aW5kb3dzLTEyNTYgbm93IGRlY2xhcmVkIHRoZSBjYW5vbmljYWwgbmFt
ZSBhbmQgcHV0IHRvIGxvd2VyY2FzZSB0byBmaXggL2Zhc3QvZW5jb2RpbmcvYWhyYW0tb3JnLWVn
Lmh0bWwgdGVzdCBjYXNlCisKKy8vIEhlYnJldworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzggICAgICAgPSB7ICJJU08t
ODg1OS04IiwgIkhFQlJFVyIsICJJU08tODg1OS04IiwgIklTTy1JUi0xMzgiLCAiSVNPODg1OS04
IiwgIklTT184ODU5LTgiLCAiSVNPXzg4NTktODoxOTg4IiwgIkNTSVNPTEFUSU5IRUJSRVciLCAw
fTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19DUDEyNTUgICAgICAgICAgID0geyAid2luZG93cy0xMjU1IiwgIkNQMTI1NSIsICJNUy1I
RUJSIiwgMH07IC8vIHJlYXJyYW5nZWQsIG1vdmVkIHdpbmRvd3MtMTI1NSBhcyBjYW5vbmljYWwg
YW5kIGxvd2VyY2FzZWQsIGZpeGluZyAvZmFzdC9lbmNvZGluZy9tZXRhLWNoYXJzZXQuaHRtbAor
CisvLyBHcmVlaworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0lTT184ODU5XzcgICAgICAgPSB7ICJJU08tODg1OS03IiwgIkVDTUEtMTE4
IiwgIkVMT1RfOTI4IiwgIkdSRUVLIiwgIkdSRUVLOCIsICJJU08tSVItMTI2IiwgIklTTzg4NTkt
NyIsICJJU09fODg1OS03IiwgIklTT184ODU5LTc6MTk4NyIsICJJU09fODg1OS03OjIwMDMiLCAi
Q1NJIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfQ1A4NjkgICAgICAgICAgICA9IHsgIkNQODY5IiwgIjg2OSIsICJDUC1HUiIs
ICJJQk04NjkiLCAiQ1NJQk04NjkiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3Qg
VGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMgICAgID0geyAiV0lORE9X
Uy0xMjUzIiwgMCB9OworCisvLyBDeXJpbGxpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUgICAgICAgPSB7ICJJU08t
ODg1OS01IiwgIkNZUklMTElDIiwgIklTTy1JUi0xNDQiLCAiSVNPODg1OS01IiwgIklTT184ODU5
LTUiLCAiSVNPXzg4NTktNToxOTg4IiwgIkNTSVNPTEFUSU5DWVJJTExJQyIsIDB9OworVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0tPSThf
UiAgICAgICAgICAgPSB7ICJLT0k4LVIiLCAiQ1NLT0k4UiIsIDB9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQODY2ICAgICAgICAg
ICAgPSB7ICJDUDg2NiIsICI4NjYiLCAiSUJNODY2IiwgIkNTSUJNODY2IiwgMH07CitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfS09JOF9V
ICAgICAgICAgICA9IHsgIktPSTgtVSIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MSAgICAgPSB7ICJ3aW5k
b3dzLTEyNTEiLCAiQ1AxMjUxIiwgMH07IC8vIENQMTI1MSBhZGRlZCB0byBwYXNzIC9mYXN0L2Vu
Y29kaW5nL2NoYXJzZXQtY3AxMjUxLmh0bWwKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3Qg
VGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQyAgICAgID0geyAibWFjLWN5
cmlsbGljIiwgIk1BQ0NZUklMTElDIiwgIngtbWFjLWN5cmlsbGljIiwgMH07IAorCisvLyBUaGFp
CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFz
ZXNfQ1A4NzQgICAgICAgICAgICA9IHsgIkNQODc0IiwgIldJTkRPV1MtODc0IiwgMH07CitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfVElT
XzYyMCAgICAgICAgICA9IHsgIlRJUy02MjAiLCAwfTsKKworLy8gU2ltcGxpZmllZCBDaGluZXNl
CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFz
ZXNfR0JLICAgICAgICAgICAgICA9IHsgIkdCSyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0Fs
aWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0haICAgICAgICAgICAgICAgPSB7
ICJIWiIsICJIWi1HQi0yMzEyIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfR0IxODAzMCAgICAgICAgICA9IHsgIkdCMTgwMzAi
LCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19FVUNfQ04gICAgICAgICAgID0geyAiRVVDX0NOIiwgIkVVQ0NOIiwgIkdCMjMxMiIs
ICJDTi1HQiIsICJDU0dCMjMxMiIsICJFVUNfQ04iLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNB
bGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc18yMzEyXzgwICAgICAgICAgID0g
eyAiR0JfMjMxMi04MCIsICJDSElORVNFIiwgImNzSVNPNThHQjIzMTI4MCIsICJHQjIzMTIuMTk4
MC0wIiwgIklTTy1JUi01OCIgfTsKKworLy8gQ2VudHJhbCBFdXJvcGVhbgorVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIg
ICAgICAgPSB7ICJJU08tODg1OS0yIiwgIklTTy1JUi0xMDEiLCAiSVNPODg1OS0yIiwgIklTT184
ODU5LTIiLCAiSVNPXzg4NTktMjoxOTg3IiwgIkwyIiwgIkxBVElOMiIsICJDU0lTT0xBVElOMiIs
IDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNB
bGlhc2VzX0NQMTI1MCAgICAgICAgICAgPSB7ICJDUDEyNTAiLCAiTVMtRUUiLCAiV0lORE9XUy0x
MjUwIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSA9IHsgIk1BQ0NFTlRSQUxFVVJPUEUiLCAwfTsK
KworLy8gVmlldG5hbWVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1OCAgICAgICAgICAgPSB7ICJDUDEyNTgiLCAiV0lORE9X
Uy0xMjU4IiwgMH07CisKKy8vIFR1cmtpc2gKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3Qg
VGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTQgICAgICAgICAgID0geyAiQ1AxMjU0
IiwgIk1TLVRVUksiLCAiV0lORE9XUy0xMjU0IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOSAgICAgICA9IHsg
IklTTy04ODU5LTkiLCAiSVNPLUlSLTE0OCIsICJJU084ODU5LTkiLCAiSVNPXzg4NTktOSIsICJJ
U09fODg1OS05OjE5ODkiLCAiTDUiLCAiTEFUSU41IiwgIkNTSVNPTEFUSU41IiwgMH07CisKKy8v
IEJhbHRpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0NQMTI1NyAgICAgICAgICAgPSB7ICJDUDEyNTciLCAiV0lOQkFMVFJJTSIsICJX
SU5ET1dTLTEyNTciLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV80ICAgICAgID0geyAiSVNPLTg4NTktNCIsICJJ
U08tSVItMTEwIiwgIklTTzg4NTktNCIsICJJU09fODg1OS00IiwgIklTT184ODU5LTQ6MTk4OCIs
ICJMNCIsICJMQVRJTjQiLCAiQ1NJU09MQVRJTjQiLCAwfTsKKworZ2NvbnN0cG9pbnRlciBjb25z
dCBUZXh0Q29kZWNHdGs6Om1faWNvbnZCYXNlQ29kZWNMaXN0W10gPSB7IAorICAgIC8vIFVuaWNv
ZGUKKyAgICAmbV9jb2RlY0FsaWFzZXNfVVRGXzgsCisKKyAgICAvLyBXZXN0ZXJuCisgICAgJm1f
Y29kZWNBbGlhc2VzX0lTT184ODU5XzEKK307CisKK2djb25zdHBvaW50ZXIgY29uc3QgVGV4dENv
ZGVjR3RrOjptX2ljb252RXh0ZW5kZWRDb2RlY0xpc3RbXSA9IAoreworICAgIC8vIFdlc3Rlcm4K
KyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4sCisKKyAgICAvLyBKYXBhbmVzZQorICAgICZt
X2NvZGVjQWxpYXNlc19TSElGVF9KSVMsCisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19KUCwKKyAg
ICAmbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlAsCisKKyAgICAvLyBTaW1wbGlmaWVkIENoaW5l
c2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfQklHNSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQklHNV9I
S1NDUywKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A5NTAsCisKKyAgICAvLyBLb3JlYW4KKyAgICAm
bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1IsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQOTQ5LAor
ICAgICZtX2NvZGVjQWxpYXNlc19FVUNfS1IsCisKKyAgICAvLyBBcmFiaWMKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfSVNPXzg4NTlfNiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU2LAorICAgIAor
ICAgIC8vIEhlYnJldworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV84LAorICAgICZtX2Nv
ZGVjQWxpYXNlc19DUDEyNTUsCisgICAgCisgICAgLy8gR3JlZWsKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfSVNPXzg4NTlfNywKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4NjksCisgICAgJm1fY29kZWNB
bGlhc2VzX1dJTkRPV1NfMTI1MywKKyAgICAKKyAgICAvLyBDeXJpbGxpYworICAgICZtX2NvZGVj
QWxpYXNlc19JU09fODg1OV81LAorICAgICZtX2NvZGVjQWxpYXNlc19LT0k4X1IsCisgICAgJm1f
Y29kZWNBbGlhc2VzX0NQODY2LAorICAgICZtX2NvZGVjQWxpYXNlc19LT0k4X1UsCisgICAgJm1f
Y29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxM
SUMsCisgICAgCisgICAgLy8gVGhhaQorICAgICZtX2NvZGVjQWxpYXNlc19DUDg3NCwKKyAgICAm
bV9jb2RlY0FsaWFzZXNfVElTXzYyMCwKKyAgICAKKyAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNl
CisgICAgJm1fY29kZWNBbGlhc2VzX0dCSywKKyAgICAmbV9jb2RlY0FsaWFzZXNfSFosCisgICAg
Jm1fY29kZWNBbGlhc2VzX0dCMTgwMzAsCisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19DTiwKKyAg
ICAmbV9jb2RlY0FsaWFzZXNfMjMxMl84MCwKKyAgICAKKyAgICAvLyBDZW50cmFsIEV1cm9wZWFu
CisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQ
MTI1MCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSwKKyAgICAKKyAgICAv
LyBWaWV0bmFtZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1OCwKKyAgICAKKyAgICAvLyBU
dXJraXNoCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NCwKKyAgICAmbV9jb2RlY0FsaWFzZXNf
SVNPXzg4NTlfOSwKKyAgICAKKyAgICAvLyBCYWx0aWMKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1Ax
MjU3LAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV80Cit9OworCisKK2NvbnN0IHNpemVf
dCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OworICAgIAorCitzdGF0aWMgYXV0b19wdHI8
VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywg
Y29uc3Qgdm9pZCopCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIHRvbyBub2lzeSBpZiBlYWNo
IFVURi04IGNvZGVjIGNyZWF0aW9uIGlzIGxvZ2dlZAorICAgIC8vIGlmIChzdHJjbXAoZW5jb2Rp
bmcubmFtZSgpLCAiVVRGLTgiKSkKKyAgICAvLyAgICAgTE9HKFRleHRDb252ZXJzaW9uLCAiY3Jl
YXRpbmcgbmV3IHRleHQgY29kZWMgZm9yIGVuY29kaW5nIG5hbWUgJXMiLCBlbmNvZGluZy5uYW1l
KCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gYXV0b19wdHI8VGV4dENvZGVjPihuZXcgVGV4dENv
ZGVjR3RrKGVuY29kaW5nKSk7Cit9CisKK2dib29sZWFuIFRleHRDb2RlY0d0azo6aXNFbmNvZGlu
Z0F2YWlsYWJsZShjb25zdCBnY2hhciogZW5jTmFtZSkKK3sKKyAgICBHSUNvbnYgdGVzdGVyOwor
ICAgIC8vIHRlc3QgZGVjb2RpbmcKKyAgICB0ZXN0ZXIgPSBnX2ljb252X29wZW4obV9pbnRlcm5h
bEVuY29kaW5nTmFtZSwgZW5jTmFtZSk7CisgICAgaWYgKHRlc3RlciA9PSByZWludGVycHJldF9j
YXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIExPR19FUlJPUigiJXMgbm90IGRlY29kYWJsZSA9
PiBub3QgYXZhaWxhYmxlISIsIGVuY05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAvLyB0ZXN0
IGVuY29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNOYW1lLCBtX2ludGVy
bmFsRW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSByZWludGVycHJldF9jYXN0
PEdJQ29udj4oLTEpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIiVzIG5vdCBlbmNvZGFibGUg
PT4gbm90IGF2YWlsYWJsZSEiLCBlbmNOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdfaWNvbnZfY2xvc2UodGVzdGVyKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRD
b2RlY0d0azo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdp
c3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5n
TGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlzdExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVk
KSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAg
ICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVv
ZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29u
dkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VD
b2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3Qg
KmNvZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0
W2ldKTsKKyAgICAgICAgaW50IGNvZGVjQ291bnQgPSAtMTsKKyAgICAgICAgY29uc3QgZ2NoYXIg
KmNhbm9uaWNhbE5hbWUsICpjdXJyZW50QWxpYXM7CisgICAgICAgIGJvb2wgY2Fub25pY2FsQXZh
aWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIGZvciBlYWNoIG9mIHRoZSBhbGlh
cyBsaXN0czoKKyAgICAgICAgLy8gYmFpbCBvdXQgaWYgY2Fub25pY2FsIGlzIG5vdCBhdmFpbGFi
bGUsCisgICAgICAgIC8vIHRoZW4gY29udGludWUgdGVzdGluZyBlYWNoIGFsaWFzLCAKKyAgICAg
ICAgLy8gaWYgYXZhaWxhYmxlLCBhZGQgaXQgdG8gdGhlIGxpc3QsIG1hcHBpbmcgaXQgdG8gaXRz
IGNhbm9uaWNhbCBuYW1lCisKKyAgICAgICAgd2hpbGUgKChjdXJyZW50QWxpYXMgPSAoKmNvZGVj
QWxpYXNlcylbKytjb2RlY0NvdW50XSkgJiYgY2Fub25pY2FsQXZhaWxhYmxlKSB7CisgICAgICAg
ICAgICBib29sIGN1cnJlbnRBdmFpbGFibGUgPSBpc0VuY29kaW5nQXZhaWxhYmxlKGN1cnJlbnRB
bGlhcyk7CisKKyAgICAgICAgICAgIGlmIChjb2RlY0NvdW50ID09IDAgJiYgY3VycmVudEF2YWls
YWJsZSkgeworICAgICAgICAgICAgICAgIGNhbm9uaWNhbE5hbWUgPSBjdXJyZW50QWxpYXM7Cisg
ICAgICAgICAgICAgICAgY2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBMT0dfVkVSQk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVuY29kaW5nIGNhbm9u
aWNhbCAlcyIsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihjYW5v
bmljYWxOYW1lLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZWND
b3VudCA9PSAwICYmICFjdXJyZW50QXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIGNhbm9uaWNh
bEF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAoY29kZWNDb3VudCA+IDAp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShjdXJyZW50QWxpYXMp
KSB7CisgICAgICAgICAgICAgICAgICAgIExPR19WRVJCT1NFKFRleHRDb252ZXJzaW9uLCAicmVn
aXN0ZXJpbmcgZW5jb2RpbmcgbmFtZSBhbGlhcyAlcyB0byBjYW5vbmljYWwgJXMiLCBjdXJyZW50
QWxpYXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXIoY3Vy
cmVudEFsaWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7Cisg
ICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlz
dExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9
IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZiht
X2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxp
c3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7
CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0
PGNvZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAgICAgLy8gYnkgY29udmVu
dGlvbiwgdGhlIGZpcnN0ICJhbGlhcyIgc2hvdWxkIGJlIHRoZSBjYW5vbmljYWwgbmFtZSwgc2Vl
IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcyBsaXN0cyAKKyAgICAgICAgY29uc3QgZ2NoYXIg
KmNvZGVjTmFtZSA9ICgqY29kZWNBbGlhc2VzKVswXTsKKyAgICAgICAgaWYgKGlzRW5jb2RpbmdB
dmFpbGFibGUoY29kZWNOYW1lKSkKKyAgICAgICAgICAgIHJlZ2lzdHJhcihjb2RlY05hbWUsIG5l
d1RleHRDb2RlY0d0aywgMCk7CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0
ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQorewor
ICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBU
ZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0
cmFyKQoreworICAgIHJlZ2lzdGVyQ29kZWNzKHJlZ2lzdHJhciwgZmFsc2UpOworfQorCit2b2lk
IFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1l
UmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29kaW5nTmFtZXMocmVnaXN0
cmFyLCB0cnVlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckNvZGVjcyhy
ZWdpc3RyYXIsIHRydWUpOworfQorCitUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayhjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKKyAgICAs
IG1fbnVtQnVmZmVyZWRCeXRlcygwKQorICAgICwgbV9pY29udkRlY29kZXIocmVpbnRlcnByZXRf
Y2FzdDxHSUNvbnY+KC0xKSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
R0lDb252PigtMSkpCit7Cit9CisKK1RleHRDb2RlY0d0azo6flRleHRDb2RlY0d0aygpCit7Cisg
ICAgcmVsZWFzZUlDb252KCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWxlYXNlSUNvbnYo
KSBjb25zdAoreworICAgIGlmIChtX2ljb252RGVjb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJ
Q29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkRlY29kZXIpOworICAg
ICAgICBtX2ljb252RGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSk7CisgICAg
fQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEp
KSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVuY29kZXIpOworICAgICAgICBtX2lj
b252RW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSk7CisgICAgfQorfQorCit2
b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSk7CisKKyAg
ICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2ludGVybmFsRW5jb2RpbmdOYW1lLCBt
X2VuY29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkVu
Y29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2RlciA9PSByZWludGVycHJl
dF9jYXN0PEdJQ29udj4oLTEpKTsKKworICAgIG1faWNvbnZFbmNvZGVyID0gZ19pY29udl9vcGVu
KG1fZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2RpbmdOYW1lKTsKK30KKworU3RyaW5n
IFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBi
b29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKK3sKKyAgICAvLyBH
ZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2RpbmcuCisgICAgaWYgKG1faWNv
bnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAgY3Jl
YXRlSUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2ljb252RGVjb2RlciAhPSByZWlu
dGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKyAgICAgICAgaWYgKG1faWNvbnZEZWNvZGVyID09
IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
ZXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBlbmNvZGluZyB3YXMgaW4g
dGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHNpemVfdCBjb3VudFdyaXR0ZW4sIGNvdW50UmVhZCwgY29udmVyc2lvbkxlbmd0aDsK
KyAgICBjb25zdCBjaGFyKiBjb252ZXJzaW9uQnl0ZXM7CisgICAgY2hhciogcHJlZml4ZWRCeXRl
cyA9IDA7CisKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzKSB7CisgICAgICAgIGNvbnZlcnNp
b25MZW5ndGggPSBsZW5ndGggKyBtX251bUJ1ZmZlcmVkQnl0ZXM7CisgICAgICAgIHByZWZpeGVk
Qnl0ZXMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjb252ZXJzaW9uTGVuZ3RoKSk7
CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzLCBtX2J1ZmZlcmVkQnl0ZXMsIG1fbnVtQnVm
ZmVyZWRCeXRlcyk7CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzICsgbV9udW1CdWZmZXJl
ZEJ5dGVzLCBieXRlcywgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGNvbnZlcnNpb25CeXRl
cyA9IHByZWZpeGVkQnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBhbGwgYnVmZmVyZWQgYnl0
ZXMgYXJlIGNvbnN1bWVkIG5vdworICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSAwOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIG5vIHByZXZpb3VzbHkgYnVmZmVyZWQgcGFydGlhbCBkYXRh
LCAKKyAgICAgICAgLy8ganVzdCBjb252ZXJ0IHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCBpbgor
ICAgICAgICBjb252ZXJzaW9uQnl0ZXMgPSBieXRlczsKKyAgICAgICAgY29udmVyc2lvbkxlbmd0
aCA9IGxlbmd0aDsKKyAgICB9CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyOworICAgIEdPd25Q
dHI8VUNoYXI+IGJ1ZmZlcjsKKworICAgIGJ1ZmZlci5vdXRQdHIoKSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VUNoYXIqPihnX2NvbnZlcnRfd2l0aF9pY29udihjb252ZXJzaW9uQnl0ZXMsIGNvbnZlcnNp
b25MZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAmY291bnRSZWFkLCAmY291bnRXcml0dGVuLCAmZXJy
Lm91dFB0cigpKSk7IAorCisKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lD
b252IGNvbnZlcnNpb24gZXJyb3IiKTsKKyAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsg
Ly8gcmVzZXQgc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVjb2RlCisgICAgICAgIGZh
c3RGcmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLy8gUGFydGlhbCBpbnB1dCBhdCB0
aGUgZW5kIG9mIHRoZSBzdHJpbmcgbWF5IG5vdCByZXN1bHQgaW4gYW4gZXJyb3IgYmVpbmcgcmFp
c2VkLiAKKyAgICAvLyBGcm9tIHRoZSBnbm9tZSBsaWJyYXJ5IGRvY3VtZW50YXRpb24gb24gZ19j
b252ZXJ0X3dpdGhfaWNvbnY6CisgICAgLy8gIkV2ZW4gaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1
Y2Nlc3NmdWwsIHRoaXMgbWF5IGJlIGxlc3MgdGhhbiBsZW4gaWYgdGhlcmUgd2VyZSBwYXJ0aWFs
IGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIgorICAgIC8vIFRoYXQncyB3aHkg
d2UgbmVlZCB0byBjb21wYXJlIGNvbnZlcnNpb25MZW5ndGggYWdhaW5zdCBjb3VudFJlYWQgCisK
KyAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSBjb252ZXJzaW9uTGVuZ3RoIC0gY291bnRSZWFkOwor
ICAgIGlmIChtX251bUJ1ZmZlcmVkQnl0ZXMgPiAwKSB7CisgICAgICAgIGlmIChmbHVzaCkgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJQYXJ0aWFsIGJ5dGVzIGF0IGVuZCBvZiBpbnB1dCB3aGls
ZSBmbHVzaCByZXF1ZXN0ZWQuIik7CisgICAgICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSAw
OyAvLyByZXNldCBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBkZWNvZGUKKyAgICAgICAg
ICAgIGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisgICAgICAgIG1lbWNw
eShtX2J1ZmZlcmVkQnl0ZXMsIGNvbnZlcnNpb25CeXRlcyArIGNvdW50UmVhZCwgbV9udW1CdWZm
ZXJlZEJ5dGVzKTsKKyAgICB9CisKKyAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAgICAK
KyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKworICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyLmdl
dCgpLCBjb3VudFdyaXR0ZW4gLyBzaXplb2YoVUNoYXIpKTsKKworICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KHJlc3VsdCk7Cit9CisKK0NTdHJpbmcgVGV4dENvZGVjR3RrOjplbmNvZGUoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFu
ZGxpbmcpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlm
IChtX2ljb252RW5jb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQorICAgICAg
ICBjcmVhdGVJQ29udkVuY29kZXIoKTsKKyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gcmVpbnRl
cnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAg
IHNpemVfdCBjb3VudDsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnI7CisgICAgR093blB0cjxj
aGFyPiBidWZmZXI7CisKKyAgICBidWZmZXIub3V0UHRyKCkgPSBnX2NvbnZlcnRfd2l0aF9pY29u
dihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoICogc2l6
ZW9mKFVDaGFyKSwgbV9pY29udkVuY29kZXIsIDAsICZjb3VudCwgJmVyci5vdXRQdHIoKSk7Cisg
ICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9y
Iik7CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgfQorCisgICAgQ1N0cmluZyByZXN1
bHQgPSBDU3RyaW5nKGJ1ZmZlci5nZXQoKSwgY291bnQpOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZ3RrL1RleHRDb2RlY0d0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9ndGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZ3RrL1RleHRDb2RlY0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBA
bnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJv
bi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsu
cm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGV4dENvZGVj
R1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2lu
Y2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBUZXh0Q29kZWNHdGsgOiBwdWJsaWMgVGV4dENvZGVj
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUVuY29kaW5n
TmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3Ry
YXIpOworCisgICAgICAgIFRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmKTsKKyAgICAg
ICAgdmlydHVhbCB+VGV4dENvZGVjR3RrKCk7CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZGVj
b2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVy
cm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNvZGUoY29u
c3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgY3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3Q7CisgICAgICAgIHZvaWQgcmVsZWFzZUlD
b252KCkgY29uc3Q7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ05hbWVz
KEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpOyAgICAgICAg
CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpOworICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gaXNFbmNv
ZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciopOworCisgICAgICAgIFRleHRFbmNvZGluZyBtX2Vu
Y29kaW5nOworICAgICAgICBzaXplX3QgbV9udW1CdWZmZXJlZEJ5dGVzOworICAgICAgICB1bnNp
Z25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlc1sxNl07IC8vIGJpZ2dlciB0aGFuIGFueSBzaW5nbGUg
bXVsdGktYnl0ZSBjaGFyYWN0ZXIgICAgICAgIAorICAgICAgICBtdXRhYmxlIEdJQ29udiBtX2lj
b252RGVjb2RlcjsKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29udkVuY29kZXI7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGdjaGFyKiBtX2ludGVybmFsRW5jb2RpbmdOYW1lOworCisgICAg
ICAgIHR5cGVkZWYgY29uc3QgZ2NoYXIqIGNvbnN0IGNvZGVjQWxpYXNMaXN0W107CisKKyAgICAg
ICAgLy8gVW5pY29kZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfVVRGXzg7CisKKyAgICAgICAgLy8gV2VzdGVybgorICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ1JPTUFOOworCisgICAgICAgIC8vIEphcGFuZXNlCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19TSElGVF9KSVM7Cisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19FVUNfSlA7CisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9KUDsKKwor
ICAgICAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19CSUc1OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfQklHNV9IS1NDUzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0
IG1fY29kZWNBbGlhc2VzX0NQOTUwOworCisgICAgICAgIC8vIEtvcmVhbgorICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1I7CisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDk0OTsKKyAgICAgICAgc3RhdGlj
IGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19LUjsKKworICAgICAgICAvLyBBcmFi
aWMKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5
XzY7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTY7
CisKKyAgICAgICAgLy8gSGVicmV3CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2Nv
ZGVjQWxpYXNlc19JU09fODg1OV84OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfQ1AxMjU1OworCisgICAgICAgIC8vIEdyZWVrCisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV83OworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4Njk7CisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTM7CisKKyAgICAgICAgLy8gQ3ly
aWxsaWMKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184
ODU5XzU7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19LT0k4
X1I7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDg2NjsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0tPSThfVTsKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MTsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ0NZUklMTElD
OworCisgICAgICAgIC8vIFRoYWkKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0NQODc0OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfVElTXzYyMDsKKworICAgICAgICAvLyBTaW1wbGlmaWVkIENoaW5lc2UKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0dCSzsKKyAgICAgICAgc3RhdGlj
IGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0haOworICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfR0IxODAzMDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19DTjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzXzIzMTJfODA7IAorCisgICAgICAgIC8vIENlbnRyYWwgRXVyb3Bl
YW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5
XzI7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTA7
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDRU5UUkFM
RVVST1BFOworCisgICAgICAgIC8vIFZpZXRuYW1lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1ODsKKworICAgICAgICAvLyBUdXJraXNoCisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTQ7CisgICAgICAg
IHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV85OworCisgICAg
ICAgIC8vIEJhbHRpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfQ1AxMjU3OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
SVNPXzg4NTlfNDsKKworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2ljb252
QmFzZUNvZGVjTGlzdFtdOworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBtX2lj
b252RXh0ZW5kZWRDb2RlY0xpc3RbXTsKKworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFRleHRDb2RlY0dUS19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25628</attachid>
            <date>2008-12-01 05:58:21 -0800</date>
            <delta_ts>2008-12-01 05:58:21 -0800</delta_ts>
            <desc>Fast/Encoding Test Results for GTK GLib-Unicode Release Build</desc>
            <filename>test_results_release_glib.zip</filename>
            <type>application/zip</type>
            <size>26536</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAAKeFejkAAAAAAAAAAAAAAAAdABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9VVAkAAwpvLUk37DNJVXgEAOgD6ANQSwMECgAAAAAAkHaBOQAAAAAAAAAAAAAAACYAFQB0bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL1VUCQADH+wzSTfsM0lVeAQA6APoA1BL
AwQUAAAACABjfns5ZRfGbZQAAACmAAAASgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvdXJsLWhvc3QtbmFtZS1ub24tYXNjaWktZXhwZWN0ZWQudHh0VVQJAAPZsy5J3+Uz
SVV4BADoA+gDFY7NCoJAFEb3PsW3rIWj/aAQREhIuKlw2seoozMYjty5Nq+frQ4czuK8tGf0jmCY
51OSNMvgRdDNaFk4GhJvXHivUrSDvdjuvMuzPENd3upSyupxx4YO6f6Yxn9k+fYEQ7qHYibbLKzx
VZ9FewTLBpOb4kJeqwqtUaRa1uRhJ7DRMG4dmRUxOreGjOBoFFH0LKSMflBLAwQUAAAACACdiHo5
ypf8RYgAAACrAAAAPwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvcHNl
dWRvLXhtbC00LWV4cGVjdGVkLnR4dFVUCQADqnMtSd/lM0lVeAQA6APoA1WNsQrCQBBE+3zFlFqk
iCLGdCKIhXYRbC9362Xhsid3G6J/b9JpNwzz3rSUFc+Y0I0eh329bXAUPG5XOLLBJKMcBRNrH0eF
EdD7FdiygsRGx+LBc0iJrIYPNLH3lDLu7bmsfzcLe2kXb7TjQKJFcepNyqTNrBcXp1xWm12FVZ6v
gkNHf/26+AJQSwMEFAAAAAgAkHaBOS6LdQIsAAAAPwAAAEgAFQB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL3V0Zi0zMi1iaWctZW5kaWFuLW5vYm9tLWFjdHVhbC50eHRVVAkA
Ax/sM0kf7DNJVXgEAOgD6APLSaxMLVJILFHQMNAx0FQozqxKVbAwMKgwMzDgUlAISs1LSS0Ky0wt
x6EEAFBLAwQKAAAAAACQdoE5AAAAAAAAAAAAAAAAKgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRz
L2Zhc3QvZW5jb2RpbmcvR0JLL1VUCQADIOwzSTfsM0lVeAQA6APoA1BLAwQUAAAACACQdoE5h+j/
bkMAAABNAAAAPAAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2Nu
LWdiLWV4cGVjdGVkLnR4dFVUCQADIOwzSSDsM0lVeAQA6APoAwvJSFVIy8/JyS/PzEtXKCnPV8jJ
zEstVijOyC/NSVHIyc/PVshMSc0ryUxOzMmptOLierKj4fnatkdNa15OnYrGAwBQSwMEFAAAAAgA
kHaBOV50/cXSAAAAPQEAADoAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5n
L0dCSy9nYjIzMTItZGlmZnMudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gD09XVVdAvyS3Qz0mszC8t
0S1JLS7RLUotLs0pKdZPSywu0U/NS85PycxL13d38tZPTzIyNjTSTa0oSE0uSU3RK6ko4TQyMLDQ
BQoaGCoYmliZGlkZG+kZwICCtoGhgQGXtrY2GdYkJpeUJuYQbYmDg4KuoY6pgjaIcHDgUgjJSFVI
y8/JyS8HGqxQUp6vkJOZl1qsUJyRX5qTopCTn5+tkJmSmleSmZyYk1NpxaXApftkR8PztW2Pmta8
nDqVS/vwpEO7D+0MAHIPr3QDSiugSAMAUEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAABBABUAdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvZ2JfMjMxMi04MC1leHBlY3Rl
ZC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlR
yMnPz1bITEnNK8lMTszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBAoAAAAAAJB2gTnaAcuHTgAA
AE4AAAA/ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY3NnYjIz
MTI4MC1hY3R1YWwudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDVGhlIGZvbGxvd2luZyB0d28gbGlu
ZXMgc2hvdWxkIGxvb2sgaWRlbnRpY2FsbHk6CgrDksK7wrlQ4oKsw6lGCgrkuIDnrYbigqzplZUK
UEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAAA9ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9lbmNvZGluZy9HQksvRVVDLUNOLWV4cGVjdGVkLnR4dFVUCQADIOwzSSDsM0lVeAQA6APoAwvJ
SFVIy8/JyS/PzEtXKCnPV8jJzEstVijOyC/NSVHIyc/PVshMSc0ryUxOzMmptOLierKj4fnatkdN
a15OnYrGAwBQSwMEFAAAAAgAkHaBOU2enExYAAAAsgAAADgAFQB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYmstYWN0dWFsLnR4dFVUCQADIOwzSSDsM0lVeAQA6APo
A8tJrEwtUkgsUdAw0DHQVCjOrEpVsDAwqDAzMOBSUAhKzUtJLQrLTC3HoSSHCO1OOfnJ2QrVHiG+
PrU4lcIV56dUKlQ7+btEQtRa6FhA1ZpbmFSYWphwAQBQSwMEFAAAAAgAkHaBOYfo/25DAAAATQAA
AD8AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy94LWV1Yy1jbi1l
eHBlY3RlZC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYo
zsgvzUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBAoAAAAAAJB2gTna
AcuHTgAAAE4AAAA+ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksv
aXNvLWlyLTU4LWFjdHVhbC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6ANUaGUgZm9sbG93aW5nIHR3
byBsaW5lcyBzaG91bGQgbG9vayBpZGVudGljYWxseToKCsOSwrvCuVDigqzDqUYKCuS4gOethuKC
rOmVlQpQSwMECgAAAAAAkHaBOdoBy4dOAAAATgAAADsAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL0dCSy9FVUMtQ04tYWN0dWFsLnR4dFVUCQADIOwzSSDsM0lVeAQA6APo
A1RoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIHNob3VsZCBsb29rIGlkZW50aWNhbGx5OgoKw5LCu8K5
UOKCrMOpRgoK5LiA562G4oKs6ZWVClBLAwQUAAAACACQdoE5h+j/bkMAAABNAAAAOgAVAHRtcC9s
YXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2diay1leHBlY3RlZC50eHRVVAkA
AyDsM0kg7DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnN
K8lMTszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTkpigIm1QAAAEUBAAA+ABUA
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY3NnYjIzMTI4MC1kaWZm
cy50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6AOdjb1KA0EUhWvnKW4/uZmfGAhbLSm0sLHwBcbZm2Tx
Zic4d0nSiUUeQMhDCNordsmbiBDyFm4KCzvxFAcOH5wPEcHIfGE4rFMrKJQF7ym3LNlMQhZDTUxV
3UzN5fjKxDy99QPnRxZptaAoVPVlJWfe2hE6j9aBOy+Gvhj4vv0JaOusVVrrf6pClDbwn0VlCeh6
Q9CnKksFNzOCSWJOy+4cZJmA64Yy5FlquQJO6Q7qihqpY2BeFwoUfr09HF43n48vx+1W6f3T7mP3
ft3N/fNFh+EX/gZQSwMEFAAAAAgAkHaBObwp2HPTAAAAPQEAADoAFQB0bXAvbGF5b3V0LXRlc3Qt
cmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9FVUMtQ04tZGlmZnMudHh0VVQJAAMg7DNJIOwzSVV4
BADoA+gD09XVVdAvyS3Qz0mszC8t0S1JLS7RLUotLs0pKdZPSywu0U/NS85PycxL13d38tZ3DXXW
dfbTTa0oSE0uSU3RK6ko4TQyMLDQNTTSNTBUMDSxMjWyMjbSM4ABBW0DQwMDLm1tbTKsSUwuKU3M
IdoSBwcFXUMdUwVtEOHgwKUQkpGqkJafk5NfDjRYoaQ8XyEnMy+1WKE4I780J0UhJz8/WyEzJTWv
JDM5MSen0opLgUv3yY6G52vbHjWteTl1Kpf24UmHdh/aGQDkHl7pBpRWQJEGAFBLAwQKAAAAAACQ
doE52gHLh04AAABOAAAAPAAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2Rpbmcv
R0JLL2NoaW5lc2UtYWN0dWFsLnR4dFVUCQADIOwzSSDsM0lVeAQA6APoA1RoZSBmb2xsb3dpbmcg
dHdvIGxpbmVzIHNob3VsZCBsb29rIGlkZW50aWNhbGx5OgoKw5LCu8K5UOKCrMOpRgoK5LiA562G
4oKs6ZWVClBLAwQUAAAACACQdoE5PKLxotUAAABFAQAAPgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2diXzIzMTItODAtZGlmZnMudHh0VVQJAAMg7DNJIOwzSVV4
BADoA+gDnY29TgJBFIVr5yluP17mB0jIVhsKLGws7M24e4ENlx3C3A3QGQsfwISHMNEeYwdvYkyM
b8FSWNgZTnGSc77kHEQEI/OF4bCJjaBQElxSaliSGYckhuoillU9MVfDazO5v/Nd53FgkdYLKoTK
jqzlwls7wLa3Dlwv6/us6zv2V6Cts1Zprc+8CoU0gf99lOeA7rIP+mR5ruB2SjCOzHHVjoOsInBV
U4I0jQ2XwDHOoCqplqoIzJtMgcKv3cP329Pn4+vPdqv04Xn/sX+/aePhZdRi+IOPUEsDBBQAAAAI
AJB2gTmH6P9uQwAAAE0AAAA/ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGlu
Zy9HQksvY3NnYjIzMTItZXhwZWN0ZWQudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDC8lIVUjLz8nJ
L8/MS1coKc9XyMnMSy1WKM7IL81JUcjJz89WyExJzSvJTE7Myam04uJ6sqPh+dq2R01rXk6disYD
AFBLAwQUAAAACACQdoE5h+j/bkMAAABNAAAAQAAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
c3QvZW5jb2RpbmcvR0JLL2lzby1pci01OC1leHBlY3RlZC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD
6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H5
2rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAAA+ABUAdG1wL2xheW91dC10ZXN0
LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY2hpbmVzZS1leHBlY3RlZC50eHRVVAkAAyDsM0kg
7DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJ
qbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTmnlMgGBgEAAN8BAAA3ABUAdG1wL2xh
eW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvZ2JrLWRpZmZzLnR4dFVUCQADIOwz
SSDsM0lVeAQA6APoA5WPy0rDQBSG1+YpzlKZTGcSGx2yCkFQUBGkCC5jctoOGTMlc0ISiyAufIO+
hd37PCKIb2GLl40U6ln8cODjv3DOQdDtTJistw1xQke8RtcYcmKcORJY5bbQ1UQcp6diclNy7GaY
ExYD6mgnlFLxIOQygGAYR2G8Hw7kzwGTgZQeY+y/GVlOTWa2TkgS4IEfAVtLknh8NEUYW2Nsu3IF
ai0YXaEDN7WNKcBYW4IusCKdZ8b0scc9/vby8L58en18/lgs/vxs1R1ryAh2pS/3wOk7BCVld7Ae
CHCJVYH1lcZ2E7OVQWpsXsL8ZHR+dr+Z/aVt0cM8vTi6/oKVr77hQzXsIjX0PgFQSwMEFAAAAAgA
kHaBOV2NDFvRAAAAOwEAADkAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5n
L0dCSy9jbi1nYi1kaWZmcy50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6AOVjbFKA0EURWvnK14/vszM
moBstVhoYWPhD4yzL8nicyY4b0nSiYUfEMhHBLRPSJf8SRDEv3BTpLDTW1y4HLgHEcHI08Swn6dW
UCgLPlNuWbIZ+iyGYkh1E0fm5urWhIijB6TZhIJQ3ZOZnBXWXqIr0Dpw/XJQlBdFz54C2jprldb6
/xYfpPX8Z0dVAbrzAehjVZWC+zHBMDGnafcLMk3ATaQMeZxaroFTeoSmpihN8MzzUoHCz/XL18fb
4fX9e7lUer/YbXebu27uV9cdhl/4B1BLAwQKAAAAAACQdoE52gHLh04AAABOAAAAOgAVAHRtcC9s
YXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2NuLWdiLWFjdHVhbC50eHRVVAkA
AyDsM0kg7DNJVXgEAOgD6ANUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBzaG91bGQgbG9vayBpZGVu
dGljYWxseToKCsOSwrvCuVDigqzDqUYKCuS4gOethuKCrOmVlQpQSwMECgAAAAAAkHaBOdoBy4dO
AAAATgAAAD0AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy94LWV1
Yy1jbi1hY3R1YWwudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDVGhlIGZvbGxvd2luZyB0d28gbGlu
ZXMgc2hvdWxkIGxvb2sgaWRlbnRpY2FsbHk6CgrDksK7wrlQ4oKsw6lGCgrkuIDnrYbigqzplZUK
UEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAABBABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9lbmNvZGluZy9HQksvY3NnYjIzMTI4MC1leHBlY3RlZC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD
6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H5
2rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTkUaGrt0gAAAD8BAAA7ABUAdG1wL2xheW91dC10ZXN0
LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY2hpbmVzZS1kaWZmcy50eHRVVAkAAyDsM0kg7DNJ
VXgEAOgD6APT1dVV0C/JLdDPSazMLy3RLUktLtEtSi0uzSkp1k9LLC7RT81Lzk/JzEvXd3fy1k/O
yMxLLU7VTa0oSE0uSU3RK6ko4TQyMLDQNTTSNTBUMDSxMjWyMjbSM4ABBW0DQwMDLm1tbXLsSUwu
KU3MIdoWBwcFXUMdUwVtEOHgwKUQkpGqkJafk5NfDjRZoaQ8XyEHZLBCcUZ+aU6KQk5+frZCZkpq
XklmcmJOTqUVlwKX7pMdDc/Xtj1qWvNy6lQu7cOTDu0+tDMAyD280g0orYAiDQBQSwMEFAAAAAgA
kHaBOYfo/25DAAAATQAAADwAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5n
L0dCSy94LWdiay1leHBlY3RlZC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6AMLyUhVSMvPyckvz8xL
Vygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsD
BBQAAAAIAJB2gTmrGleT0wAAAEMBAAA9ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9l
bmNvZGluZy9HQksvaXNvLWlyLTU4LWRpZmZzLnR4dFVUCQADIOwzSSDsM0lVeAQA6APoA52NsUoD
QRRFa+crXj++zMzqQthqSRELGwt/YNh9MUOe+0LmLUk6sfADhHyEoL1il/yJCOJfuBYWduItLlwO
3IOI4PR66ThupVdUyooryj1rdrOY1VHXSJu6K3c2OXcpC6YVlmOkzZIapXakGz0qvB9jKNAHCKdV
WVQnxcj/BKwP3htr7f9MsdE+8p89dQ0Yjkuw31XXBi7nBDNhlvXwDboW4NRRhjyXnltgkQWkljpN
TWTeVgYMvj/ffDzdvd0+fu52xh7u96/7l4thHh6mA4Zf+AtQSwMECgAAAAAAkHaBOdoBy4dOAAAA
TgAAAD8AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYl8yMzEy
LTgwLWFjdHVhbC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6ANUaGUgZm9sbG93aW5nIHR3byBsaW5l
cyBzaG91bGQgbG9vayBpZGVudGljYWxseToKCsOSwrvCuVDigqzDqUYKCuS4gOethuKCrOmVlQpQ
SwMEFAAAAAgAkHaBObB+oILSAAAAOwEAADkAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0
L2VuY29kaW5nL0dCSy94LWdiay1kaWZmcy50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6APT1dVV0C/J
LdDPSazMLy3RLUktLtEtSi0uzSkp1k9LLC7RT81Lzk/JzEvXd3fy1q/QTU/K1k2tKEhNLklN0Sup
KOE0MjCw0DU00jUwVDA0sTI1sjI20jOAAQVtA0MDAy5tbW3SbUlMLilNzCHaDgcHBV1DHVMFbRDh
4MClEJKRqpCWn5OTXw40V6GkPF8hJzMvtVihOCO/NCdFISc/P1shMyU1ryQzOTEnp9KKS4FL98mO
hudr2x41rXk5dSqX9uFJh3Yf2hkA5B5e6QaUVkCRBgBQSwMECgAAAAAAkHaBOdoBy4dOAAAATgAA
AD0AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9jc2diMjMxMi1h
Y3R1YWwudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDVGhlIGZvbGxvd2luZyB0d28gbGluZXMgc2hv
dWxkIGxvb2sgaWRlbnRpY2FsbHk6CgrDksK7wrlQ4oKsw6lGCgrkuIDnrYbigqzplZUKUEsDBBQA
AAAIAJB2gTlA696i1AAAAEEBAAA8ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNv
ZGluZy9HQksvY3NnYjIzMTItZGlmZnMudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gD09XVVdAvyS3Q
z0mszC8t0S1JLS7RLUotLs0pKdZPSywu0U/NS85PycxL13d38tZPLk5PMjI2NNJNrShITS5JTdEr
qSjhNDIwsNAFChoYKhiaWJkaWRkb6RnAgIK2gaGBAZe2tjZZFiUml5Qm5hBtjYODgq6hjqmCNohw
cOBSCMlIVUjLz8nJLwcarVBSnq+Qk5mXWqxQnJFfmpOikJOfn62QmZKaV5KZnJiTU2nFpcCl+2RH
w/O1bY+a1rycOpVL+/CkQ7sP7QwAcg+vdANKK6BIAwBQSwMECgAAAAAAkHaBOdoBy4dOAAAATgAA
ADoAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy94LWdiay1hY3R1
YWwudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDVGhlIGZvbGxvd2luZyB0d28gbGluZXMgc2hvdWxk
IGxvb2sgaWRlbnRpY2FsbHk6CgrDksK7wrlQ4oKsw6lGCgrkuIDnrYbigqzplZUKUEsDBAoAAAAA
AJB2gTnaAcuHTgAAAE4AAAA7ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGlu
Zy9HQksvZ2IyMzEyLWFjdHVhbC50eHRVVAkAAyDsM0kg7DNJVXgEAOgD6ANUaGUgZm9sbG93aW5n
IHR3byBsaW5lcyBzaG91bGQgbG9vayBpZGVudGljYWxseToKCsOSwrvCuVDigqzDqUYKCuS4gOet
huKCrOmVlQpQSwMEFAAAAAgAkHaBOX9EljPSAAAAQQEAADwAFQB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy94LWV1Yy1jbi1kaWZmcy50eHRVVAkAAyDsM0kg7DNJVXgE
AOgD6AOdjbFKA0EURWvnK14/eZmZ1YBstVhoYZPCHxhmX8yS50xw3pBNJyn8gEA+QtBesUv+RATx
L1wLCzvxFhcuB+5BRDByszTs16kICmXBW8qFJZuZz2IohtR28dpcnF2aHqkEDBGpX1IQasfSy1Fl
7Sm6Cq0Dd1JPqvq4GtufgLbOWqW1/pfIByme/6xpGkA3moD+rqZRcDUnmCXmtBquQVYJuIuUIc9T
4RY4pQV0LUXpgmde1woUvj/ffTzdv20eP3c7pQ/b/ev+ZTrMw8P5gOEX/gJQSwMEFAAAAAgAkHaB
OYfo/25DAAAATQAAAD0AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dC
Sy9nYjIzMTItZXhwZWN0ZWQudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDC8lIVUjLz8nJL8/MS1co
Kc9XyMnMSy1WKM7IL81JUcjJz89WyExJzSvJTE7Myam04uJ6sqPh+dq2R01rXk6disYDAFBLAwQU
AAAACACQdoE5E+KdTaUAAADjAAAATQAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5j
b2RpbmcvdXRmLTMyLWxpdHRsZS1lbmRpYW4tbm9ib20tZXhwZWN0ZWQudHh0VVQJAAMf7DNJH+wz
SVV4BADoA+gDTY4xDsIwEAR7v2IfECigQemhogNE7diHYsmxo5xDSJcK0dHwL/7AS7igSEG6amd2
deeSAmxb1WThQorQSHRLuDhPKHqkkiTgBBNDaqL31GQSOkYgsgxpFISro04GNON03C02uVLHUZHT
AVTBai4zfIbX1J0YLPmkwX1VRC/8cZ+5FNu6psZoJtRupM9MUjsb8LH7E97DUqlDawwxI/99sl7t
t+oLUEsDBBQAAAAIAI52gTlnv24nLgAAAPgAAAA9ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMv
ZmFzdC9lbmNvZGluZy9haHJhbS1vcmctZWctc3RkZXJyLnR4dFVUCQADHOwzSRzsM0lVeAQA6APo
A9PSUvBNLS5OTE+1UvALiPfMyyzJTMzJrErl0sIlo1BcmpycmpqSmoJbzaDXDQBQSwMECgAAAAAA
j3aBOe5wIMIFAAAABQAAAEQAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5n
L2ZyYW1lLWRlZmF1bHQtZW5jLWV4cGVjdGVkLnR4dFVUCQADHewzSR3sM0lVeAQA6APoA1BBU1MK
UEsDBAoAAAAAAKiFejmN+U7SOQAAADkAAAA/ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9lbmNvZGluZy9tZXRhLWNoYXJzZXQtZXhwZWN0ZWQudHh0VVQJAAMMby1J3+UzSVV4BADoA+gD
U2hvdWxkIHNlZSBIZWJyZXcgbGV0dGVyIEFsZXBoIHR3aWNlOiDXkNeQCgp3aW5kb3dzLTEyNTUK
UEsDBBQAAAAIAJB2gTksGi1zNwEAAB8CAABHABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9lbmNvZGluZy91dGYtMzItYmlnLWVuZGlhbi1ub2JvbS1kaWZmcy50eHRVVAkAAx/sM0kf7DNJ
VXgEAOgD6AOlUctO40AQPK+/oo4gu+Oxs6AopwgJPgBYOI89nWSk8YzlaUPCiRPithf+a/9hv4Qx
CoILEhKtPnVVdfWDiFBK15dO78MoJByFBo6jk1iudZSSfRuM9ZtylDXNa2rshtgbqz350ISOeNdz
K2xmspNftVILqmpSFarfy5N6Oa9m6j2Qq0qpLM/zn3rqVkbtvu24WoGq4gR5VdRYrTK63bKHGbue
DayXAA3hnWBtHaPZQ7aMaSy0wcsQnOOhSEUb4ZlNRFI0jDvL96mBjvhzfUGLZUYZXU+klNqDOxgd
twX+P74c1AcMhp1oxH3XBJfw56cPPAnHvueh1ZHR2wn9W6Sq+WDAhftPhH+Ps8n5amxbjhHLt2nm
9dl5lqcL8wAtOFKFOka0D4yFUrvT6Q3AZToqDzdpjS84r1BLAwQKAAAAAACRdoE5AAAAAAAAAAAA
AAAALQAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L1VUCQAD
IewzSTfsM0lVeAQA6APoA1BLAwQKAAAAAACQdoE5lCFPDBQAAAAUAAAAQgAVAHRtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1pLWV4cGVjdGVkLnR4dFVU
CQADIOwzSSDsM0lVeAQA6APoA9eW15Qg16DXm9eV158KClBBU1MKUEsDBAoAAAAAAJB2gTmt7RIZ
FAAAABQAAABCABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcv
ODg1OS04LWUtZXhwZWN0ZWQudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gD15/Xldeb16Ag15TXlgoK
UEFTUwpQSwMEFAAAAAgAkHaBOfUGX3WrAAAAEgEAAEIAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL2hlYnJldy9jc0lTTzg4NTk4SS1kaWZmcy50eHRVVAkAAyDsM0kg7DNJ
VXgEAOgD6AOlzT0OAUEYgOHanOLrx2d+lmRstUoVyZ5g7Y6fZLHZ+Ta4BxoFBRoFd5hDzHVEoZd4
i7d9EBEELStRZrt1Q0jWEdbWNSU5Mc0cCbvK18ViNRNzO6ntRuRumI6M6fXNEO22sjnZokNbamkp
DSqNUoHqxj0dR7ojvwGXSkrGOf+Dy3JqsvJnLEkAVTsC/lmSMAzHsIdwCadwCGfG/d1fwb/8w9/8
kwGD8SBN2RtQSwMECgAAAAAAkXaBOZQhTwwUAAAAFAAAAEEAFQB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL2hlYnJldy9sb2dpY2FsLWV4cGVjdGVkLnR4dFVUCQADIewzSSHs
M0lVeAQA6APoA9eW15Qg16DXm9eV158KClBBU1MKUEsDBAoAAAAAAJB2gTkWRV1BFAAAABQAAABD
ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvY3NJU084ODU5
OEktYWN0dWFsLnR4dFVUCQADIOwzSSDsM0lVeAQA6APoA8Omw6Qgw7DDq8Olw68KClBBU1MKUEsD
BBQAAAAIAJB2gTmupN4HpwAAAAwBAAA/ABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9l
bmNvZGluZy9oZWJyZXcvODg1OS04LWktZGlmZnMudHh0VVQJAAMg7DNJIOwzSVV4BADoA+gDnc0x
DoIwFIDh2Z7i7fXRFiRBJryBCSdAqEqCQOgj4j3UxUEHdXHQO/QQvY5xcDf+w79+iAiCNq2osl3T
E5I2hJ02fUVGLDNDQtd5U5T1Sqz1otNbEUXhFCMsUQ+tzkkXHg008qWMUPkoFahJHPpx4HvyG3Cp
pGSc83+tLKc+q36WkgRQjQPgnyUJQ3d0e3AXd3IHd2bc3u0V7Ms+7M0+GTCYz9KUvQFQSwMEFAAA
AAgAkXaBOQ2A30ymAAAACgEAAD4AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29k
aW5nL2hlYnJldy9sb2dpY2FsLWRpZmZzLnR4dFVUCQADIewzSSHsM0lVeAQA6APoA53NMQ6CMBSA
4dme4u310RY0MUx4AxNOUKEiSQUCj4j3UBcHHdTFQe/QQ/Q6xsHd+A//+iEiCNo0wupd3ROS6Qhb
0/WWOrHSHQlTZXVeVoVYm2VrtsLWRZlpi2ZoTEYmD2igUSjlDFWIUoGaxNMwjqJAfgMulZSMc/4n
pTPqtf0ZShJANY6Af5YkDP3R78Ff/Mkf/Jlxd3dXcC/3cDf3ZMBgMU9T9gZQSwMECgAAAAAAkXaB
ORZFXUEUAAAAFAAAAD8AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2hl
YnJldy9sb2dpY2FsLWFjdHVhbC50eHRVVAkAAyHsM0kh7DNJVXgEAOgD6APDpsOkIMOww6vDpcOv
CgpQQVNTClBLAwQUAAAACACQdoE50cptM64AAAASAQAAPwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1lLWRpZmZzLnR4dFVUCQADIOwzSSDsM0lV
eAQA6APoA53NPw6CMBSA8dmeont9tgVJkAkWExMHE06A8PyTIBB4RLyHujjooC4OeoceotcxDu7G
b/jWHwBwSZtK5smubAkIG4IamzanRi6ShiQWaZmti6Vc4bzGrfR9bwQ+IGBXYUqYDaijnqOUD9oB
pbkeBp4TuM5AfeNCaaWYEOJfK0mpTfKfpTDkoPsuF5+FIQN7tgd7shdu9/bIhHmam3mYFzdXc2ec
wSyKYybG0WTK3lBLAwQKAAAAAACQdoE5WDnYmhQAAAAUAAAAQAAVAHRtcC9sYXlvdXQtdGVzdC1y
ZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1lLWFjdHVhbC50eHRVVAkAAyDsM0kg
7DNJVXgEAOgD6APDr8Olw6vDsCDDpMOmCgpGQUlMClBLAwQKAAAAAACQdoE5lCFPDBQAAAAUAAAA
RQAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L2NzSVNPODg1
OThJLWV4cGVjdGVkLnR4dFVUCQADIOwzSSDsM0lVeAQA6APoA9eW15Qg16DXm9eV158KClBBU1MK
UEsDBAoAAAAAAJB2gTkWRV1BFAAAABQAAABAABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9lbmNvZGluZy9oZWJyZXcvODg1OS04LWktYWN0dWFsLnR4dFVUCQADIOwzSSDsM0lVeAQA6APo
A8Omw6Qgw7DDq8Olw68KClBBU1MKUEsDBBQAAAAIAI92gTlA/n+90gAAACwDAAA+ABUAdG1wL2xh
eW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9pbnZhbGlkLXhtbC1leHBlY3RlZC50eHRV
VAkAAx7sM0ke7DNJVXgEAOgD6APVjztrAzEQhHv9isWNnUICN8GENI5zBoMTH5wgtaLbOynoAber
YP97ny+PLoWLFK52ltkdvtFI7FP/AD59muBbeYxBFu5WahSiXjcN+G4wEZXNiTHxc7YljlO136IK
OO1s+tfxDjzBbMiZZ1d99/gj6emkv6IWcx7p5ncqYOrZwSMsL+k8FBT6D+7l/S2Ck/Mdyw9Ptwh/
lNFYyc74iX673u2vpSeXS2jhHeHSQcGbIXAcg/rXNlM2FWuRqCshnGozELa/vtBVo2FzeKn3la6E
OANQSwMEFAAAAAgAkHaBORnPA0emAAAA4wAAAEoAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YXN0L2VuY29kaW5nL3V0Zi0zMi1iaWctZW5kaWFuLW5vYm9tLWV4cGVjdGVkLnR4dFVUCQADH+wz
SR/sM0lVeAQA6APoA02OMQ7CMBAEe79iHxAooEEpkeADgKgd+1AsOXaUcwjpUiE6Gv7FH3gJFxQp
SFftzK7uXFKAbauaLFxIERqJbgkX5wlFj1SSBJxgYkhN9J6aTELHCESWIY2CcHXUyYBmnI77xSZX
6jgqcjqAKljNZYbP8Jq6E4MlnzS4r4rohT/uM5diW9fUGM2E2o30mUlqZwM+dn/Ce1gqdWiNIWbk
v0/Wq+1OfQFQSwMEFAAAAAgAj3aBObzmNqkZAQAAHgQAADwAFQB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL2ludmFsaWQteG1sLWFjdHVhbC50eHRVVAkAAx7sM0ke7DNJVXgE
AOgD6APVU01LxDAQvfdXDHupHhrYi8jiZdUKwqrFBjyIh2w6bbOkSUkm2v57s/UDDy7sgiKe8sJM
Zua9N+HoSZlmAco8C62qbOh0Fqg+ZREkV8vrFajaiQ6ZtIbQ0KWVoYsnq95BrnG6k2huYx741gZd
wRrBWUsMeOvwBXCQ2JOyBvjYY+6cdQu4Rx80ga1juHfo/Tae7tcvhUcTtH4C5cFYAmHArjcoiR00
dYMf0J+P/I3CUUpRlfSYaTQNtXAG8y+syAX8C1Z8h1Pzk8mqYlmWh1oVm8y2Js0Oer2vZLH6Vqvv
B/etqinbKP8fhx+yTsiMWqF+7Jc8CA8tdZr9Kpuptg9Sxq2s456NhXAeq894wvOSw8XdTbHKeZ4k
r1BLAwQUAAAACACPdoE5fcqLgjwBAADjAwAAOwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
c3QvZW5jb2RpbmcvaW52YWxpZC14bWwtZGlmZnMudHh0VVQJAAMe7DNJHuwzSVV4BADoA+gDxVKx
TsMwEJ3JV5y6BBTsOAWqKmJIEUVCQgjRbIjBTS5pkGNH8RnSvycpVLAgNTDgwT7rfPfePT/GGIRU
N6GSW+OIEVpiLVqnyIaFtBSizkxe6TKs9KtUVc66WjHsGswIc04dHU2FmLNoykQE0Xl8MY3PBBf7
BYGIhPCCIPgNjszISXUwSpIAi05nEAxbkniQ9jB9zxi+N3VUzHkfeOxhsVpBVbSyRp4ZTajp2mSu
7k+efwZLhbs7yfK+fweVhUlrDE3GlZe4D+3VNv3odewPMvgnXKEuaQOXEA3tqXXoBTeL27ux3OzG
OJXDGmFgyCHdtPgG2GXYUGU0pNsGl21r2hged9qDKfp003+EHfL+YXg+PGmn1PNAVhsCqcGsX3pD
8HG0D9Xka6xBmv8Y60cjRbOdk+BvThpVPtZJ71BLAwQUAAAACACQdoE5Z79uJy4AAAD4AAAASAAV
AHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvdXRmLTMyLWJpZy1lbmRpYW4t
bm9ib20tc3RkZXJyLnR4dFVUCQADH+wzSR/sM0lVeAQA6APoA9PSUvBNLS5OTE+1UvALiPfMyyzJ
TMzJrErl0sIlo1BcmpycmpqSmoJbzaDXDQBQSwMEFAAAAAgAp4V6OX1y7/dyAAAAjQAAAD8AFQB0
bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2FocmFtLW9yZy1lZy1leHBlY3Rl
ZC50eHRVVAkAAwpvLUnf5TNJVXgEAOgD6ANVjDEOAiEQRfs9xS+10EQTLey9gReYhXEhsAwZhuDx
l9byv7z3P9wMhEpq0fVMCv7RXjNDvlhVEhfspKlXWCDDoDZ3imVDb4hbEeXZu0Da2ODZzQ+yKOW6
LO/ixE/1hRGLl9Eut/vjiVML0rPHyn/8vBxQSwMEFAAAAAgAkHaBOWe/bicuAAAA+AAAAEsAFQB0
bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL3V0Zi0zMi1saXR0bGUtZW5kaWFu
LW5vYm9tLXN0ZGVyci50eHRVVAkAAx/sM0kf7DNJVXgEAOgD6APT0lLwTS0uTkxPtVLwC4j3zMss
yUzMyaxK5dLCJaNQXJqcnJqakpqCW82g1w0AUEsDBBQAAAAIAI92gTntmuRMNQEAAOoCAABDABUA
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9uYW1lc3BhY2UtdG9sZXJhbmNl
LWRpZmZzLnR4dFVUCQADHuwzSR7sM0lVeAQA6APoA62SQU7DMBBF1+QUs6RK3TgplaquskIgwa4c
wDgTEsmxo8xYpAfhJNyJczABWtQNBRUvLHvyxu/bilIKMu76zJldiKwYidWAFB1TVhviDL0NVeuf
Mm86pN5YVBwcDsbLCsceLWO14JEvCq3XKi+UziG/2qyKzVIv9H5AqnOtkzRNz/EZy9G4X9vKElQ+
X0E6TWWZqG3TEkxOQE9RvGDgYXut1rDXggD9EHoc3A4IGYKHKtjYoWdpbQxvIFGX+QwiIRwySg/W
7SgHCn+zvb8DdPjZI3QxA5KHauud+HzwyhluPdjGDJNCiOUMbPBspHr8XW6MgxyS/kv0JP1DcoF/
Di7AidwJ3NZi3ifvDRHSXCr4lf2AwiO68AzUhOgqwFGKcovOsG0+8G/weDeJT/yYC3h7fUneAVBL
AwQUAAAACACQdoE5Lot1AiwAAAA/AAAASwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvdXRmLTMyLWxpdHRsZS1lbmRpYW4tbm9ib20tYWN0dWFsLnR4dFVUCQADH+wzSR/s
M0lVeAQA6APoA8tJrEwtUkgsUdAw0DHQVCjOrEpVsDAwqDAzMOBSUAhKzUtJLQrLTC3HoQQAUEsD
BBQAAAAIAI92gTlBs1q30AAAADwBAABEABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9l
bmNvZGluZy9uYW1lc3BhY2UtdG9sZXJhbmNlLWFjdHVhbC50eHRVVAkAAx7sM0ke7DNJVXgEAOgD
6ANVj0FOxDAMRfc5hZetNB0J2Iw4AAJp2JUDmPSXREqTKHZF5yCchDtxDsyIAc0u/nnf/3sMUUgh
SsiyNggxvYwPw8FmX6aY38iA2kpFSycSKJVMU/HrgqxmDaz3rrvpaRVQ5gVS2cMcmONm64x+HJ+P
hISzw3W3PUmFj/PJsnLJQ2KNmXzgZutdd9eTL1nZtOtf9oom7mm21EvryiKQnSn47f1H0itSeScJ
ZU0TYTPRLlhYfTjj/+D19JN7uWPQktA42wublVZMe910T1+fH+4bUEsDBBQAAAAIAJB2gTnKw8pT
NQEAACUCAABKABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy91dGYtMzIt
bGl0dGxlLWVuZGlhbi1ub2JvbS1kaWZmcy50eHRVVAkAAx/sM0kf7DNJVXgEAOgD6AOtUbtOw0AQ
rPFXTAmyNz47BEWp0kBFxbO++DbkpPOd5VtDQkWF6Gj4L/6BL+GMQNAgUbDaamdmZx9EhFLarnR6
FwYh4SjUcxycxHKto5Tsm2CsvykHWdO0JmdFHBN7Y7UnH1ahJd523AibiWxlr1ZqTlVNqkJ1uJjV
i2k1UV+BXFVKZXme/4OtbmTQ7s+myyWoKmbIq6LGcpnR9YY9zNB2bGC9BGgIbwVr6xirHWTDGCdD
E7z0wTnui1S0EZ7ZRCTFinFr+S410BGXFyc0X2SU0cVISqk9uIXRcVPg7eHlU/2JwbATjbhrV8El
/OnxG0/Coeu4b3RkdHZEn4tUNd8MuHD3g/D6MBmdz4em4Rix+JhmWp8eZ3k6MvfQgn1VqANEe8+Y
K7U9Gj8BnKWjcn+V1viF8w5QSwMEFAAAAAgAj3aBORNc+qyEAAAA8gAAAEEAFQB0bXAvbGF5b3V0
LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2ZyYW1lLWRlZmF1bHQtZW5jLWRpZmZzLnR4dFVU
CQADHewzSR3sM0lVeAQA6APoA52NuwoCMRAAa/MV6Ze9bIKCXpVrBMFCuC8IyUaEe3HZwPn3XmMv
TjlTDCJqI+NihvCeq6BwEVy51EGKyaGI4SnO6TU9TV7DyJg4hz3irpG3haNwamSTgyM6o3VIVttj
e3KtuzT0RQNZIgUA/99ClBqGn1/ea7QarPZe4aPrewXX7nZXH1BLAwQUAAAACACPdoE5eKUFnNEA
AABAAQAARgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvbmFtZXNwYWNl
LXRvbGVyYW5jZS1leHBlY3RlZC50eHRVVAkAAx7sM0ke7DNJVXgEAOgD6ANVj0FOxDAMRfc9hZet
REdi2CAOgECCXecAJv0lkVKnil3ROQgn4U6cAw8woNnFP+/7fw8xKRnUCKJrhRLTYbjvb30OZUzy
Sg4stSyo+UgKoyI0lrDOEHNrZLujpr3uaFWQ8AxdOMAtmNLm+xx/GJ6fCBk/lqbdd6QLQpqOniZF
+syWhELkegpo2puOQhFjFy+/ORiqr3icPPncfGFV6JUr+O3+h9ILcnkjjWXNI2Fz0a+Y2UL8xv/B
y+kUfD6lt5JRWfyFzWsbxp1ttqPPj/fmC1BLAwQKAAAAAACPdoE59Dpr8QUAAAAFAAAAQgAVAHRt
cC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvZnJhbWUtZGVmYXVsdC1lbmMtYWN0
dWFsLnR4dFVUCQADHewzSR3sM0lVeAQA6APoA0ZBSUwKUEsDBBQAAAAIAJ2Iejl+InUgcgAAAI0A
AABCABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9mbG9yYWV4cHJlc3Mt
cnUtZXhwZWN0ZWQudHh0VVQJAAOpcy1J3+UzSVV4BADoA+gDVYwxDsIwEAR7v2JLKEAKEg09P+AD
F/uILTt3kc+W83zcUu5oZj9sDYSDaku+F6rgk/ajMPSLtWpmwU419wMtUsMgmzsn2dANaROtPHsf
qRo3BPbzg1pSuTv3Fq9hqi+MJEGH3ZbHc8HFovYSsPIfv7ofUEsDBBQAAAAIAJyIejnA4DvFbwAA
AIcAAABIABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9iYW5kYWktY28t
anAtcmVsZWFzZXMtZXhwZWN0ZWQudHh0VVQJAAOncy1J3+UzSVV4BADoA+gDRYwxEgIhEARzXjGh
Jj7A3EDTM7f2YO+g4FhqWep8vmSG09U9b+4GQiO15EchBX/paIUhG1aVzBUHaR4NFslwUp87p7pj
dKS9ivLsfSTtbAjs5wdZknpz7lG9hKnescS02ef1XHDpUUYJWPkPr+4HUEsDBBQAAAAIAJF2gTnq
DIteRAMAAEYjAAAkABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5odG1sVVQJAAMh
7DNJIewzSVV4BADoA+gD7ZpBb5swGIbv/RVW7663VpWyiXFYN1XVpk3quvNksAELMJExbfrvZ0Ig
lJrEYOpcemhC6/d7yft8NpXseInMM//MSygm6k0ymVH/J34uKgkeaCnBPS2rTJYeaobOPLSTBgV5
Vm9rv5aV4CmhggLRqAFhBPBCghzLMAF0s6ahpKQd/uyhdX0zHGwdpahfiO9hkAgafTlHOZeIbuQV
oY+o/nlKH0TF09uMBaj5cNubogiXSsjDgjAeo0jgnEJCI6xuAtWfL+pw576JykPYVxnJ4JMcKYVt
sgu5ked++9tMMxzKCmeNVXM904iwKCobn+1lzwY1sBcizvgjzhiBmzzTsh6OG+XpFdnw7dvMJNu3
cMaUq26WaxxSKIuMCsxDqmU7pjNKpim2Ya2zm8lcZ+WMfSUjeHUJAxardUQY5pAXQZFfbF7jPyA1
yjlSb9OFMcuZnRizc92NjEn1n8e0ISPqKYk1Fgu0Redq1xmdo7Pm3H79gb7/vYE3v7RPp8GwUax9
jQ3unstMvD0HpzjDhHFa6p/2w3HjILsiW6KtjQXS1sItUw7jYJxoN2qeoi6xprk1sWG5NXBLsoyD
y6uPl+Mw+wLzJLsqa6Stjw3V1uMkYFcfjqLdSSYHWn1YCq9yWgCwcnGK+MjMnTNvl5m19nP2FDM2
Dv5tb3pgxg4kE+K0dfZoOycrvJ2LY8TpAbbpVKipPc3UDmPqlh8rC8gEvF6NUnypME7SldkS3RtZ
cN2bOKW7gbQKYchH4b4QGKdpq2zRdj4WZDsPx2APLfz96IQYCyz+xsQKptMHQEIDQZ/QanX9Cap1
quWp0xjlGRTasB1azSQ8tDkRZ2bAmc3lzJbjzJbhzJxzDsu7P7/ru6/uDqEeyqZk69UuALzvZse8
7+Qae1bELMT6Aw6NZEqsXd0CqFsnO8yty1HEqDm7607/ZIIlCHFVUqKuKfhW5et7ygkVD4JSIIsi
Uy8gFLhM3uj07/V2db31q2vauHLmvni98VpKFVY0zJprt/viR8LqxfN3mw0ja+dJgglo9EAlXFfy
jWYETgTOYSFUn2Itm1cCIx79qhO0/f1waubh1HSzU6/p97OuuWdds/wmPM/Q7tsvqPn6zH9QSwEC
FwMKAAAAAACnhXo5AAAAAAAAAAAAAAAAHQANAAAAAAAAABAA7UEAAAAAdG1wL2xheW91dC10ZXN0
LXJlc3VsdHMvZmFzdC9VVAUAAwpvLUlVeAAAUEsBAhcDCgAAAAAAkHaBOQAAAAAAAAAAAAAAACYA
DQAAAAAAAAAQAO1BUAAAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvVVQF
AAMf7DNJVXgAAFBLAQIXAxQAAAAIAGN+ezllF8ZtlAAAAKYAAABKAA0AAAAAAAEAAACkgakAAAB0
bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL3VybC1ob3N0LW5hbWUtbm9uLWFz
Y2lpLWV4cGVjdGVkLnR4dFVUBQAD2bMuSVV4AABQSwECFwMUAAAACACdiHo5ypf8RYgAAACrAAAA
PwANAAAAAAABAAAApIG6AQAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9w
c2V1ZG8teG1sLTQtZXhwZWN0ZWQudHh0VVQFAAOqcy1JVXgAAFBLAQIXAxQAAAAIAJB2gTkui3UC
LAAAAD8AAABIAA0AAAAAAAEAAACkgbQCAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2Vu
Y29kaW5nL3V0Zi0zMi1iaWctZW5kaWFuLW5vYm9tLWFjdHVhbC50eHRVVAUAAx/sM0lVeAAAUEsB
AhcDCgAAAAAAkHaBOQAAAAAAAAAAAAAAACoADQAAAAAAAAAQAO1BWwMAAHRtcC9sYXlvdXQtdGVz
dC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL1VUBQADIOwzSVV4AABQSwECFwMUAAAACACQdoE5
h+j/bkMAAABNAAAAPAANAAAAAAABAAAApIG4AwAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9lbmNvZGluZy9HQksvY24tZ2ItZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAI
AJB2gTledP3F0gAAAD0BAAA6AA0AAAAAAAEAAACkgWoEAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL0dCSy9nYjIzMTItZGlmZnMudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQA
AAAIAJB2gTmH6P9uQwAAAE0AAABBAA0AAAAAAAEAAACkgakFAAB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYl8yMzEyLTgwLWV4cGVjdGVkLnR4dFVUBQADIOwzSVV4
AABQSwECFwMKAAAAAACQdoE52gHLh04AAABOAAAAPwANAAAAAAABAAAApIFgBgAAdG1wL2xheW91
dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY3NnYjIzMTI4MC1hY3R1YWwudHh0VVQF
AAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmH6P9uQwAAAE0AAAA9AA0AAAAAAAEAAACkgSAHAAB0
bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9FVUMtQ04tZXhwZWN0ZWQu
dHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTlNnpxMWAAAALIAAAA4AA0AAAAAAAEAAACk
gdMHAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYmstYWN0dWFs
LnR4dFVUBQADIOwzSVV4AABQSwECFwMUAAAACACQdoE5h+j/bkMAAABNAAAAPwANAAAAAAABAAAA
pIGWCAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksveC1ldWMtY24t
ZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTnaAcuHTgAAAE4AAAA+AA0A
AAAAAAEAAACkgUsJAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9p
c28taXItNTgtYWN0dWFsLnR4dFVUBQADIOwzSVV4AABQSwECFwMKAAAAAACQdoE52gHLh04AAABO
AAAAOwANAAAAAAABAAAApIEKCgAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGlu
Zy9HQksvRVVDLUNOLWFjdHVhbC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOYfo/25D
AAAATQAAADoADQAAAAAAAQAAAKSBxgoAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5j
b2RpbmcvR0JLL2diay1leHBlY3RlZC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOSmK
AibVAAAARQEAAD4ADQAAAAAAAQAAAKSBdgsAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvR0JLL2NzZ2IyMzEyODAtZGlmZnMudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAI
AJB2gTm8Kdhz0wAAAD0BAAA6AA0AAAAAAAEAAACkgbwMAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL0dCSy9FVUMtQ04tZGlmZnMudHh0VVQFAAMg7DNJVXgAAFBLAQIXAwoA
AAAAAJB2gTnaAcuHTgAAAE4AAAA8AA0AAAAAAAEAAACkgfwNAAB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy9jaGluZXNlLWFjdHVhbC50eHRVVAUAAyDsM0lVeAAAUEsB
AhcDFAAAAAgAkHaBOTyi8aLVAAAARQEAAD4ADQAAAAAAAQAAAKSBuQ4AAHRtcC9sYXlvdXQtdGVz
dC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2diXzIzMTItODAtZGlmZnMudHh0VVQFAAMg7DNJ
VXgAAFBLAQIXAxQAAAAIAJB2gTmH6P9uQwAAAE0AAAA/AA0AAAAAAAEAAACkgf8PAAB0bXAvbGF5
b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9jc2diMjMxMi1leHBlY3RlZC50eHRV
VAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOYfo/25DAAAATQAAAEAADQAAAAAAAQAAAKSBtBAA
AHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2lzby1pci01OC1leHBl
Y3RlZC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOYfo/25DAAAATQAAAD4ADQAAAAAA
AQAAAKSBahEAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2NoaW5l
c2UtZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmnlMgGBgEAAN8BAAA3
AA0AAAAAAAEAAACkgR4SAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dC
Sy9nYmstZGlmZnMudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTldjQxb0QAAADsBAAA5
AA0AAAAAAAEAAACkgY4TAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dC
Sy9jbi1nYi1kaWZmcy50eHRVVAUAAyDsM0lVeAAAUEsBAhcDCgAAAAAAkHaBOdoBy4dOAAAATgAA
ADoADQAAAAAAAQAAAKSByxQAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2Rpbmcv
R0JLL2NuLWdiLWFjdHVhbC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDCgAAAAAAkHaBOdoBy4dOAAAA
TgAAAD0ADQAAAAAAAQAAAKSBhhUAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2Rp
bmcvR0JLL3gtZXVjLWNuLWFjdHVhbC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOYfo
/25DAAAATQAAAEEADQAAAAAAAQAAAKSBRBYAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvR0JLL2NzZ2IyMzEyODAtZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQA
AAAIAJB2gTkUaGrt0gAAAD8BAAA7AA0AAAAAAAEAAACkgfsWAAB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy9jaGluZXNlLWRpZmZzLnR4dFVUBQADIOwzSVV4AABQSwEC
FwMUAAAACACQdoE5h+j/bkMAAABNAAAAPAANAAAAAAABAAAApIE7GAAAdG1wL2xheW91dC10ZXN0
LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksveC1nYmstZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgA
AFBLAQIXAxQAAAAIAJB2gTmrGleT0wAAAEMBAAA9AA0AAAAAAAEAAACkge0YAAB0bXAvbGF5b3V0
LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9pc28taXItNTgtZGlmZnMudHh0VVQFAAMg
7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTnaAcuHTgAAAE4AAAA/AA0AAAAAAAEAAACkgTAaAAB0bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYl8yMzEyLTgwLWFjdHVhbC50
eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBObB+oILSAAAAOwEAADkADQAAAAAAAQAAAKSB
8BoAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL3gtZ2JrLWRpZmZz
LnR4dFVUBQADIOwzSVV4AABQSwECFwMKAAAAAACQdoE52gHLh04AAABOAAAAPQANAAAAAAABAAAA
pIEuHAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY3NnYjIzMTIt
YWN0dWFsLnR4dFVUBQADIOwzSVV4AABQSwECFwMUAAAACACQdoE5QOveotQAAABBAQAAPAANAAAA
AAABAAAApIHsHAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvY3Nn
YjIzMTItZGlmZnMudHh0VVQFAAMg7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTnaAcuHTgAAAE4AAAA6
AA0AAAAAAAEAAACkgS8eAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dC
Sy94LWdiay1hY3R1YWwudHh0VVQFAAMg7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTnaAcuHTgAAAE4A
AAA7AA0AAAAAAAEAAACkgeoeAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5n
L0dCSy9nYjIzMTItYWN0dWFsLnR4dFVUBQADIOwzSVV4AABQSwECFwMUAAAACACQdoE5f0SWM9IA
AABBAQAAPAANAAAAAAABAAAApIGmHwAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNv
ZGluZy9HQksveC1ldWMtY24tZGlmZnMudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmH
6P9uQwAAAE0AAAA9AA0AAAAAAAEAAACkgecgAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0
L2VuY29kaW5nL0dCSy9nYjIzMTItZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAI
AJB2gTkT4p1NpQAAAOMAAABNAA0AAAAAAAEAAACkgZohAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL3V0Zi0zMi1saXR0bGUtZW5kaWFuLW5vYm9tLWV4cGVjdGVkLnR4dFVU
BQADH+wzSVV4AABQSwECFwMUAAAACACOdoE5Z79uJy4AAAD4AAAAPQANAAAAAAABAAAApIG/IgAA
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9haHJhbS1vcmctZWctc3RkZXJy
LnR4dFVUBQADHOwzSVV4AABQSwECFwMKAAAAAACPdoE57nAgwgUAAAAFAAAARAANAAAAAAABAAAA
pIFdIwAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9mcmFtZS1kZWZhdWx0
LWVuYy1leHBlY3RlZC50eHRVVAUAAx3sM0lVeAAAUEsBAhcDCgAAAAAAqIV6OY35TtI5AAAAOQAA
AD8ADQAAAAAAAQAAAKSB2SMAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2Rpbmcv
bWV0YS1jaGFyc2V0LWV4cGVjdGVkLnR4dFVUBQADDG8tSVV4AABQSwECFwMUAAAACACQdoE5LBot
czcBAAAfAgAARwANAAAAAAABAAAApIGEJAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9l
bmNvZGluZy91dGYtMzItYmlnLWVuZGlhbi1ub2JvbS1kaWZmcy50eHRVVAUAAx/sM0lVeAAAUEsB
AhcDCgAAAAAAkXaBOQAAAAAAAAAAAAAAAC0ADQAAAAAAAAAQAO1BNSYAAHRtcC9sYXlvdXQtdGVz
dC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L1VUBQADIewzSVV4AABQSwECFwMKAAAAAACQ
doE5lCFPDBQAAAAUAAAAQgANAAAAAAABAAAApIGVJgAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMv
ZmFzdC9lbmNvZGluZy9oZWJyZXcvODg1OS04LWktZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBL
AQIXAwoAAAAAAJB2gTmt7RIZFAAAABQAAABCAA0AAAAAAAEAAACkgR4nAAB0bXAvbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2hlYnJldy84ODU5LTgtZS1leHBlY3RlZC50eHRVVAUA
AyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOfUGX3WrAAAAEgEAAEIADQAAAAAAAQAAAKSBpycAAHRt
cC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L2NzSVNPODg1OThJLWRp
ZmZzLnR4dFVUBQADIOwzSVV4AABQSwECFwMKAAAAAACRdoE5lCFPDBQAAAAUAAAAQQANAAAAAAAB
AAAApIHHKAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvbG9n
aWNhbC1leHBlY3RlZC50eHRVVAUAAyHsM0lVeAAAUEsBAhcDCgAAAAAAkHaBORZFXUEUAAAAFAAA
AEMADQAAAAAAAQAAAKSBTykAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2Rpbmcv
aGVicmV3L2NzSVNPODg1OThJLWFjdHVhbC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaB
Oa6k3genAAAADAEAAD8ADQAAAAAAAQAAAKSB2SkAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
c3QvZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1pLWRpZmZzLnR4dFVUBQADIOwzSVV4AABQSwECFwMU
AAAACACRdoE5DYDfTKYAAAAKAQAAPgANAAAAAAABAAAApIHyKgAAdG1wL2xheW91dC10ZXN0LXJl
c3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvbG9naWNhbC1kaWZmcy50eHRVVAUAAyHsM0lVeAAA
UEsBAhcDCgAAAAAAkXaBORZFXUEUAAAAFAAAAD8ADQAAAAAAAQAAAKSBCSwAAHRtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L2xvZ2ljYWwtYWN0dWFsLnR4dFVUBQAD
IewzSVV4AABQSwECFwMUAAAACACQdoE50cptM64AAAASAQAAPwANAAAAAAABAAAApIGPLAAAdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvODg1OS04LWUtZGlmZnMu
dHh0VVQFAAMg7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTlYOdiaFAAAABQAAABAAA0AAAAAAAEAAACk
ga8tAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2hlYnJldy84ODU5LTgt
ZS1hY3R1YWwudHh0VVQFAAMg7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTmUIU8MFAAAABQAAABFAA0A
AAAAAAEAAACkgTYuAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2hlYnJl
dy9jc0lTTzg4NTk4SS1leHBlY3RlZC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDCgAAAAAAkHaBORZF
XUEUAAAAFAAAAEAADQAAAAAAAQAAAKSBwi4AAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1pLWFjdHVhbC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAA
AAgAj3aBOUD+f73SAAAALAMAAD4ADQAAAAAAAQAAAKSBSS8AAHRtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zhc3QvZW5jb2RpbmcvaW52YWxpZC14bWwtZXhwZWN0ZWQudHh0VVQFAAMe7DNJVXgAAFBL
AQIXAxQAAAAIAJB2gTkZzwNHpgAAAOMAAABKAA0AAAAAAAEAAACkgYwwAAB0bXAvbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL3V0Zi0zMi1iaWctZW5kaWFuLW5vYm9tLWV4cGVjdGVk
LnR4dFVUBQADH+wzSVV4AABQSwECFwMUAAAACACPdoE5vOY2qRkBAAAeBAAAPAANAAAAAAABAAAA
pIGvMQAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9pbnZhbGlkLXhtbC1h
Y3R1YWwudHh0VVQFAAMe7DNJVXgAAFBLAQIXAxQAAAAIAI92gTl9youCPAEAAOMDAAA7AA0AAAAA
AAEAAACkgTczAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL2ludmFsaWQt
eG1sLWRpZmZzLnR4dFVUBQADHuwzSVV4AABQSwECFwMUAAAACACQdoE5Z79uJy4AAAD4AAAASAAN
AAAAAAABAAAApIHhNAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy91dGYt
MzItYmlnLWVuZGlhbi1ub2JvbS1zdGRlcnIudHh0VVQFAAMf7DNJVXgAAFBLAQIXAxQAAAAIAKeF
ejl9cu/3cgAAAI0AAAA/AA0AAAAAAAEAAACkgYo1AAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YXN0L2VuY29kaW5nL2FocmFtLW9yZy1lZy1leHBlY3RlZC50eHRVVAUAAwpvLUlVeAAAUEsBAhcD
FAAAAAgAkHaBOWe/bicuAAAA+AAAAEsADQAAAAAAAQAAAKSBbjYAAHRtcC9sYXlvdXQtdGVzdC1y
ZXN1bHRzL2Zhc3QvZW5jb2RpbmcvdXRmLTMyLWxpdHRsZS1lbmRpYW4tbm9ib20tc3RkZXJyLnR4
dFVUBQADH+wzSVV4AABQSwECFwMUAAAACACPdoE57ZrkTDUBAADqAgAAQwANAAAAAAABAAAApIEa
NwAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9uYW1lc3BhY2UtdG9sZXJh
bmNlLWRpZmZzLnR4dFVUBQADHuwzSVV4AABQSwECFwMUAAAACACQdoE5Lot1AiwAAAA/AAAASwAN
AAAAAAABAAAApIHFOAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy91dGYt
MzItbGl0dGxlLWVuZGlhbi1ub2JvbS1hY3R1YWwudHh0VVQFAAMf7DNJVXgAAFBLAQIXAxQAAAAI
AI92gTlBs1q30AAAADwBAABEAA0AAAAAAAEAAACkgW85AAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL25hbWVzcGFjZS10b2xlcmFuY2UtYWN0dWFsLnR4dFVUBQADHuwzSVV4
AABQSwECFwMUAAAACACQdoE5ysPKUzUBAAAlAgAASgANAAAAAAABAAAApIG2OgAAdG1wL2xheW91
dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy91dGYtMzItbGl0dGxlLWVuZGlhbi1ub2JvbS1k
aWZmcy50eHRVVAUAAx/sM0lVeAAAUEsBAhcDFAAAAAgAj3aBORNc+qyEAAAA8gAAAEEADQAAAAAA
AQAAAKSBaDwAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvZnJhbWUtZGVm
YXVsdC1lbmMtZGlmZnMudHh0VVQFAAMd7DNJVXgAAFBLAQIXAxQAAAAIAI92gTl4pQWc0QAAAEAB
AABGAA0AAAAAAAEAAACkgWA9AAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5n
L25hbWVzcGFjZS10b2xlcmFuY2UtZXhwZWN0ZWQudHh0VVQFAAMe7DNJVXgAAFBLAQIXAwoAAAAA
AI92gTn0OmvxBQAAAAUAAABCAA0AAAAAAAEAAACkgao+AAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL2ZyYW1lLWRlZmF1bHQtZW5jLWFjdHVhbC50eHRVVAUAAx3sM0lVeAAA
UEsBAhcDFAAAAAgAnYh6OX4idSByAAAAjQAAAEIADQAAAAAAAQAAAKSBJD8AAHRtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvZmxvcmFleHByZXNzLXJ1LWV4cGVjdGVkLnR4dFVU
BQADqXMtSVV4AABQSwECFwMUAAAACACciHo5wOA7xW8AAACHAAAASAANAAAAAAABAAAApIELQAAA
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9iYW5kYWktY28tanAtcmVsZWFz
ZXMtZXhwZWN0ZWQudHh0VVQFAAOncy1JVXgAAFBLAQIXAxQAAAAIAJF2gTnqDIteRAMAAEYjAAAk
AA0AAAAAAAEAAACkgfVAAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRzLmh0bWxVVAUA
AyHsM0lVeAAAUEsFBgAAAABKAEoAAiMAAJBEAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25629</attachid>
            <date>2008-12-01 05:59:17 -0800</date>
            <delta_ts>2008-12-01 05:59:17 -0800</delta_ts>
            <desc>Fast/Encoding Test Results for GTK ICU-Unicode Release Build</desc>
            <filename>test_results_release_icu.zip</filename>
            <type>application/zip</type>
            <size>11018</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAAKeFejkAAAAAAAAAAAAAAAAdABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFz
dC9VVAkAAwpvLUlT7DNJVXgEAOgD6ANQSwMECgAAAAAApnaBOQAAAAAAAAAAAAAAACYAFQB0bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL1VUCQADSOwzSVPsM0lVeAQA6APoA1BL
AwQUAAAACABjfns5ZRfGbZQAAACmAAAASgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvdXJsLWhvc3QtbmFtZS1ub24tYXNjaWktZXhwZWN0ZWQudHh0VVQJAAPZsy5JN+wz
SVV4BADoA+gDFY7NCoJAFEb3PsW3rIWj/aAQREhIuKlw2seoozMYjty5Nq+frQ4czuK8tGf0jmCY
51OSNMvgRdDNaFk4GhJvXHivUrSDvdjuvMuzPENd3upSyupxx4YO6f6Yxn9k+fYEQ7qHYibbLKzx
VZ9FewTLBpOb4kJeqwqtUaRa1uRhJ7DRMG4dmRUxOreGjOBoFFH0LKSMflBLAwQUAAAACACdiHo5
ypf8RYgAAACrAAAAPwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvcHNl
dWRvLXhtbC00LWV4cGVjdGVkLnR4dFVUCQADqnMtSTfsM0lVeAQA6APoA1WNsQrCQBBE+3zFlFqk
iCLGdCKIhXYRbC9362Xhsid3G6J/b9JpNwzz3rSUFc+Y0I0eh329bXAUPG5XOLLBJKMcBRNrH0eF
EdD7FdiygsRGx+LBc0iJrIYPNLH3lDLu7bmsfzcLe2kXb7TjQKJFcepNyqTNrBcXp1xWm12FVZ6v
gkNHf/26+AJQSwMECgAAAAAApnaBOQAAAAAAAAAAAAAAACoAFQB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy9VVAkAA0jsM0lT7DNJVXgEAOgD6ANQSwMEFAAAAAgAkHaB
OYfo/25DAAAATQAAADwAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dC
Sy9jbi1nYi1leHBlY3RlZC50eHRVVAkAAyDsM0k37DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygp
z1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBBQA
AAAIAJB2gTmH6P9uQwAAAE0AAABBABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNv
ZGluZy9HQksvZ2JfMjMxMi04MC1leHBlY3RlZC50eHRVVAkAAyDsM0k37DNJVXgEAOgD6AMLyUhV
SMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H52rZHTWte
Tp2KxgMAUEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAAA9ABUAdG1wL2xheW91dC10ZXN0LXJlc3Vs
dHMvZmFzdC9lbmNvZGluZy9HQksvRVVDLUNOLWV4cGVjdGVkLnR4dFVUCQADIOwzSTfsM0lVeAQA
6APoAwvJSFVIy8/JyS/PzEtXKCnPV8jJzEstVijOyC/NSVHIyc/PVshMSc0ryUxOzMmptOLierKj
4fnatkdNa15OnYrGAwBQSwMEFAAAAAgAkHaBOYfo/25DAAAATQAAAD8AFQB0bXAvbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy94LWV1Yy1jbi1leHBlY3RlZC50eHRVVAkAAyDs
M0k37DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lM
TszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAAA6ABUAdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvZ2JrLWV4cGVjdGVkLnR4dFVU
CQADIOwzSTfsM0lVeAQA6APoAwvJSFVIy8/JyS/PzEtXKCnPV8jJzEstVijOyC/NSVHIyc/PVshM
Sc0ryUxOzMmptOLierKj4fnatkdNa15OnYrGAwBQSwMEFAAAAAgAkHaBOYfo/25DAAAATQAAAD8A
FQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9jc2diMjMxMi1leHBl
Y3RlZC50eHRVVAkAAyDsM0k37DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgv
zUlRyMnPz1bITEnNK8lMTszJqbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTmH6P9u
QwAAAE0AAABAABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvaXNv
LWlyLTU4LWV4cGVjdGVkLnR4dFVUCQADIOwzSTfsM0lVeAQA6APoAwvJSFVIy8/JyS/PzEtXKCnP
V8jJzEstVijOyC/NSVHIyc/PVshMSc0ryUxOzMmptOLierKj4fnatkdNa15OnYrGAwBQSwMEFAAA
AAgAkHaBOYfo/25DAAAATQAAAD4AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29k
aW5nL0dCSy9jaGluZXNlLWV4cGVjdGVkLnR4dFVUCQADIOwzSTfsM0lVeAQA6APoAwvJSFVIy8/J
yS/PzEtXKCnPV8jJzEstVijOyC/NSVHIyc/PVshMSc0ryUxOzMmptOLierKj4fnatkdNa15OnYrG
AwBQSwMEFAAAAAgAkHaBOYfo/25DAAAATQAAAEEAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YXN0L2VuY29kaW5nL0dCSy9jc2diMjMxMjgwLWV4cGVjdGVkLnR4dFVUCQADIOwzSTfsM0lVeAQA
6APoAwvJSFVIy8/JyS/PzEtXKCnPV8jJzEstVijOyC/NSVHIyc/PVshMSc0ryUxOzMmptOLierKj
4fnatkdNa15OnYrGAwBQSwMEFAAAAAgAkHaBOYfo/25DAAAATQAAADwAFQB0bXAvbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy94LWdiay1leHBlY3RlZC50eHRVVAkAAyDsM0k3
7DNJVXgEAOgD6AMLyUhVSMvPyckvz8xLVygpz1fIycxLLVYozsgvzUlRyMnPz1bITEnNK8lMTszJ
qbTi4nqyo+H52rZHTWteTp2KxgMAUEsDBBQAAAAIAJB2gTmH6P9uQwAAAE0AAAA9ABUAdG1wL2xh
eW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksvZ2IyMzEyLWV4cGVjdGVkLnR4dFVU
CQADIOwzSTfsM0lVeAQA6APoAwvJSFVIy8/JyS/PzEtXKCnPV8jJzEstVijOyC/NSVHIyc/PVshM
Sc0ryUxOzMmptOLierKj4fnatkdNa15OnYrGAwBQSwMEFAAAAAgAkHaBORPinU2lAAAA4wAAAE0A
FQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL3V0Zi0zMi1saXR0bGUtZW5k
aWFuLW5vYm9tLWV4cGVjdGVkLnR4dFVUCQADH+wzSTfsM0lVeAQA6APoA02OMQ7CMBAEe79iHxAo
oEHpoaIDRO3Yh2LJsaOcQ0iXCtHR8C/+wEu4oEhBumpndnXnkgJsW9Vk4UKK0Eh0S7g4Tyh6pJIk
4AQTQ2qi99RkEjpGILIMaRSEq6NOBjTjdNwtNrlSx1GR0wFUwWouM3yG19SdGCz5pMF9VUQv/HGf
uRTbuqbGaCbUbqTPTFI7G/Cx+xPew1KpQ2sMMSP/fbJe7bfqC1BLAwQUAAAACACkdoE5Z79uJy4A
AAD4AAAAPQAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvYWhyYW0tb3Jn
LWVnLXN0ZGVyci50eHRVVAkAA0TsM0lE7DNJVXgEAOgD6APT0lLwTS0uTkxPtVLwC4j3zMssyUzM
yaxK5dLCJaNQXJqcnJqakpqCW82g1w0AUEsDBAoAAAAAAI92gTnucCDCBQAAAAUAAABEABUAdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9mcmFtZS1kZWZhdWx0LWVuYy1leHBl
Y3RlZC50eHRVVAkAAx3sM0k37DNJVXgEAOgD6ANQQVNTClBLAwQKAAAAAACohXo5jflO0jkAAAA5
AAAAPwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvbWV0YS1jaGFyc2V0
LWV4cGVjdGVkLnR4dFVUCQADDG8tSTfsM0lVeAQA6APoA1Nob3VsZCBzZWUgSGVicmV3IGxldHRl
ciBBbGVwaCB0d2ljZTog15DXkAoKd2luZG93cy0xMjU1ClBLAwQKAAAAAACndoE5AAAAAAAAAAAA
AAAALQAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L1VUCQAD
SewzSVPsM0lVeAQA6APoA1BLAwQKAAAAAACQdoE5lCFPDBQAAAAUAAAAQgAVAHRtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1pLWV4cGVjdGVkLnR4dFVU
CQADIOwzSTfsM0lVeAQA6APoA9eW15Qg16DXm9eV158KClBBU1MKUEsDBAoAAAAAAJB2gTmt7RIZ
FAAAABQAAABCABUAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcv
ODg1OS04LWUtZXhwZWN0ZWQudHh0VVQJAAMg7DNJN+wzSVV4BADoA+gD15/Xldeb16Ag15TXlgoK
UEFTUwpQSwMECgAAAAAAkXaBOZQhTwwUAAAAFAAAAEEAFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYXN0L2VuY29kaW5nL2hlYnJldy9sb2dpY2FsLWV4cGVjdGVkLnR4dFVUCQADIewzSTfsM0lV
eAQA6APoA9eW15Qg16DXm9eV158KClBBU1MKUEsDBAoAAAAAAJB2gTmUIU8MFAAAABQAAABFABUA
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvY3NJU084ODU5OEkt
ZXhwZWN0ZWQudHh0VVQJAAMg7DNJN+wzSVV4BADoA+gD15bXlCDXoNeb15XXnwoKUEFTUwpQSwME
FAAAAAgAj3aBOUD+f73SAAAALAMAAD4AFQB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2Vu
Y29kaW5nL2ludmFsaWQteG1sLWV4cGVjdGVkLnR4dFVUCQADHuwzSTfsM0lVeAQA6APoA9WPO2sD
MRCEe/2KxY2dQgI3wYQ0jnMGgxMfnCC1ots7KegBt6tg/3ufL48uhYsUrnaW2R2+0UjsU/8APn2a
4Ft5jEEW7lZqFKJeNw34bjARlc2JMfFztiWOU7Xfogo47Wz61/EOPMFsyJlnV333+CPp6aS/ohZz
Hunmdypg6tnBIywv6TwUFPoP7uX9LYKT8x3LD0+3CH+U0VjJzviJfrve7a+lJ5dLaOEd4dJBwZsh
cByD+tc2UzYVa5GoKyGcajMQtr++0FWjYXN4qfeVroQ4A1BLAwQUAAAACACQdoE5Gc8DR6YAAADj
AAAASgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvdXRmLTMyLWJpZy1l
bmRpYW4tbm9ib20tZXhwZWN0ZWQudHh0VVQJAAMf7DNJN+wzSVV4BADoA+gDTY4xDsIwEAR7v2If
ECigQSmR4AOAqB37UCw5dpRzCOlSIToa/sUfeAkXFClIV+3Mru5cUoBtq5osXEgRGoluCRfnCUWP
VJIEnGBiSE30nppMQscIRJYhjYJwddTJgGacjvvFJlfqOCpyOoAqWM1lhs/wmroTgyWfNLiviuiF
P+4zl2Jb19QYzYTajfSZSWpnAz52f8J7WCp1aI0hZuS/T9ar7U59AVBLAwQUAAAACACnhXo5fXLv
93IAAACNAAAAPwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvYWhyYW0t
b3JnLWVnLWV4cGVjdGVkLnR4dFVUCQADCm8tSTfsM0lVeAQA6APoA1WMMQ4CIRBF+z3FL7XQRBMt
7L2BF5iFcSGwDBmG4PGX1vK/vPc/3AyESmrR9UwK/tFeM0O+WFUSF+ykqVdYIMOgNneKZUNviFsR
5dm7QNrY4NnND7Io5bos7+LET/WFEYuX0S63++OJUwvSs8fKf/y8HFBLAwQUAAAACACmdoE53l5A
0zQBAADqAgAAQwAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvbmFtZXNw
YWNlLXRvbGVyYW5jZS1kaWZmcy50eHRVVAkAA0fsM0lH7DNJVXgEAOgD6AOtkkFOwzAQRdfkFLOk
Mm7slkpVV1khkGBXDmCcCYnk2FFmItKDcBLuxDmYAC3qhoLAC8uevPH7tqK1hpzbLg9ulwbWjMS6
RxoCU1454hyjT2UTH/PoWqTOedScAvYuygrHDj1jOeeRzxbGrLVdaGPBXm5Wy421c7MfoIw1JlNK
/cXnPA8u/NhWFKDtxQrUNBVFprd1QzA5ASMN4gUH99srvYa9FgTo+tRhH3ZAyJAilMkPLUaW1trx
BjJ9bmcwEMIho/Rg1YxyoPDX27tbwIAfPUIvZkDyUE21E19MUQfHTQRfu35SCLGcgU+RnVSPv8uN
sZdD1L9Ez9Qvkgv8fXABTuTO4KYS8z5554iQLqSCn9kPKDxgSE9AdRpCCThKUW7ROvb1O/4FHu8m
8Ykfcw6vL8/ZG1BLAwQUAAAACACmdoE5QbNat9AAAAA8AQAARAAVAHRtcC9sYXlvdXQtdGVzdC1y
ZXN1bHRzL2Zhc3QvZW5jb2RpbmcvbmFtZXNwYWNlLXRvbGVyYW5jZS1hY3R1YWwudHh0VVQJAANH
7DNJR+wzSVV4BADoA+gDVY9BTsQwDEX3OYWXrTQdCdiMOAACadiVA5j0l0RKkyh2RecgnIQ7cQ7M
iAHNLv553/97DFFIIUrIsjYIMb2MD8PBZl+mmN/IgNpKRUsnEiiVTFPx64KsZg2s96676WkVUOYF
UtnDHJjjZuuMfhyfj4SEs8N1tz1JhY/zybJyyUNijZl84GbrXXfXky9Z2bTrX/aKJu5pttRL68oi
kJ0p+O39R9IrUnknCWVNE2Ez0S5YWH044//g9fSTe7lj0JLQONsLm5VWTHvddE9fnx/uG1BLAwQU
AAAACACmdoE5eKUFnNEAAABAAQAARgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5j
b2RpbmcvbmFtZXNwYWNlLXRvbGVyYW5jZS1leHBlY3RlZC50eHRVVAkAA0fsM0lH7DNJVXgEAOgD
6ANVj0FOxDAMRfc9hZetREdi2CAOgECCXecAJv0lkVKnil3ROQgn4U6cAw8woNnFP+/7fw8xKRnU
CKJrhRLTYbjvb30OZUzySg4stSyo+UgKoyI0lrDOEHNrZLujpr3uaFWQ8AxdOMAtmNLm+xx/GJ6f
CBk/lqbdd6QLQpqOniZF+syWhELkegpo2puOQhFjFy+/ORiqr3icPPncfGFV6JUr+O3+h9ILcnkj
jWXNI2Fz0a+Y2UL8xv/By+kUfD6lt5JRWfyFzWsbxp1ttqPPj/fmC1BLAwQUAAAACACdiHo5fiJ1
IHIAAACNAAAAQgAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvZmxvcmFl
eHByZXNzLXJ1LWV4cGVjdGVkLnR4dFVUCQADqXMtSTfsM0lVeAQA6APoA1WMMQ7CMBAEe79iSyhA
ChINPT/gAxf7iC07d5HPlvN83FLuaGY/bA2Eg2pLvheq4JP2ozD0i7VqZsFONfcDLVLDIJs7J9nQ
DWkTrTx7H6kaNwT284NaUrk79xavYaovjCRBh92Wx3PBxaL2ErDyH7+6H1BLAwQUAAAACACciHo5
wOA7xW8AAACHAAAASAAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvYmFu
ZGFpLWNvLWpwLXJlbGVhc2VzLWV4cGVjdGVkLnR4dFVUCQADp3MtSTfsM0lVeAQA6APoA0WMMRIC
IRAEc14xoSY+wNxA0zO39mDvoOBYalnqfL5khtPVPW/uBkIjteRHIQV/6WiFIRtWlcwVB2keDRbJ
cFKfO6e6Y3SkvYry7H0k7WwI7OcHWZJ6c+5RvYSp3rHEtNnn9Vxw6VFGCVj5D6/uB1BLAwQUAAAA
CACndoE51fE4Mg4BAAAbAwAAJAAVAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Jlc3VsdHMuaHRt
bFVUCQADSewzSUnsM0lVeAQA6APoA7VTTW/DIAy991eg3FMfdpsY1112mvoHHOyEqAlE4LTpv18S
mqnah1ZV2gEw8vOz/QzaSd+ZnXaMNB/SSsfmDS9hFHXgJOqd09hJ0pBdOw1XaBXoMh+DWWBJnR1H
VjGjFbWkfBDVo1ineBrYCtPmftYwLMmwWhklLhsZjcpFrl8K6L0AT/JEfIJlnY+HOPrja9dWkItb
k0KNaQZ6G6j1DXjsOQ1ouZTQcURveb+0V5j7cBrQzH3Sl2r+DC63/vYySWG228N0aGXELpNl+2Eq
aus6ZabVvCGCVXbIQ/gcozgU5ZBUEuIY1Sz1MMo/DQxdxL4MsSm5+XFS3wB3CXEbVeY+sgTZ/lUD
uD5pyH/iA1BLAQIXAwoAAAAAAKeFejkAAAAAAAAAAAAAAAAdAA0AAAAAAAAAEADtQQAAAAB0bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L1VUBQADCm8tSVV4AABQSwECFwMKAAAAAACmdoE5AAAA
AAAAAAAAAAAAJgANAAAAAAAAABAA7UFQAAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9l
bmNvZGluZy9VVAUAA0jsM0lVeAAAUEsBAhcDFAAAAAgAY357OWUXxm2UAAAApgAAAEoADQAAAAAA
AQAAAKSBqQAAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvdXJsLWhvc3Qt
bmFtZS1ub24tYXNjaWktZXhwZWN0ZWQudHh0VVQFAAPZsy5JVXgAAFBLAQIXAxQAAAAIAJ2IejnK
l/xFiAAAAKsAAAA/AA0AAAAAAAEAAACkgboBAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0
L2VuY29kaW5nL3BzZXVkby14bWwtNC1leHBlY3RlZC50eHRVVAUAA6pzLUlVeAAAUEsBAhcDCgAA
AAAApnaBOQAAAAAAAAAAAAAAACoADQAAAAAAAAAQAO1BtAIAAHRtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL1VUBQADSOwzSVV4AABQSwECFwMUAAAACACQdoE5h+j/bkMA
AABNAAAAPAANAAAAAAABAAAApIERAwAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNv
ZGluZy9HQksvY24tZ2ItZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmH
6P9uQwAAAE0AAABBAA0AAAAAAAEAAACkgcMDAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0
L2VuY29kaW5nL0dCSy9nYl8yMzEyLTgwLWV4cGVjdGVkLnR4dFVUBQADIOwzSVV4AABQSwECFwMU
AAAACACQdoE5h+j/bkMAAABNAAAAPQANAAAAAAABAAAApIF6BAAAdG1wL2xheW91dC10ZXN0LXJl
c3VsdHMvZmFzdC9lbmNvZGluZy9HQksvRVVDLUNOLWV4cGVjdGVkLnR4dFVUBQADIOwzSVV4AABQ
SwECFwMUAAAACACQdoE5h+j/bkMAAABNAAAAPwANAAAAAAABAAAApIEtBQAAdG1wL2xheW91dC10
ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9HQksveC1ldWMtY24tZXhwZWN0ZWQudHh0VVQFAAMg
7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmH6P9uQwAAAE0AAAA6AA0AAAAAAAEAAACkgeIFAAB0bXAv
bGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYmstZXhwZWN0ZWQudHh0VVQF
AAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmH6P9uQwAAAE0AAAA/AA0AAAAAAAEAAACkgZIGAAB0
bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL0dCSy9jc2diMjMxMi1leHBlY3Rl
ZC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOYfo/25DAAAATQAAAEAADQAAAAAAAQAA
AKSBRwcAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JLL2lzby1pci01
OC1leHBlY3RlZC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDFAAAAAgAkHaBOYfo/25DAAAATQAAAD4A
DQAAAAAAAQAAAKSB/QcAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvR0JL
L2NoaW5lc2UtZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQAAAAIAJB2gTmH6P9uQwAA
AE0AAABBAA0AAAAAAAEAAACkgbEIAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29k
aW5nL0dCSy9jc2diMjMxMjgwLWV4cGVjdGVkLnR4dFVUBQADIOwzSVV4AABQSwECFwMUAAAACACQ
doE5h+j/bkMAAABNAAAAPAANAAAAAAABAAAApIFoCQAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMv
ZmFzdC9lbmNvZGluZy9HQksveC1nYmstZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBLAQIXAxQA
AAAIAJB2gTmH6P9uQwAAAE0AAAA9AA0AAAAAAAEAAACkgRoKAAB0bXAvbGF5b3V0LXRlc3QtcmVz
dWx0cy9mYXN0L2VuY29kaW5nL0dCSy9nYjIzMTItZXhwZWN0ZWQudHh0VVQFAAMg7DNJVXgAAFBL
AQIXAxQAAAAIAJB2gTkT4p1NpQAAAOMAAABNAA0AAAAAAAEAAACkgc0KAAB0bXAvbGF5b3V0LXRl
c3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL3V0Zi0zMi1saXR0bGUtZW5kaWFuLW5vYm9tLWV4cGVj
dGVkLnR4dFVUBQADH+wzSVV4AABQSwECFwMUAAAACACkdoE5Z79uJy4AAAD4AAAAPQANAAAAAAAB
AAAApIHyCwAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9haHJhbS1vcmct
ZWctc3RkZXJyLnR4dFVUBQADROwzSVV4AABQSwECFwMKAAAAAACPdoE57nAgwgUAAAAFAAAARAAN
AAAAAAABAAAApIGQDAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9mcmFt
ZS1kZWZhdWx0LWVuYy1leHBlY3RlZC50eHRVVAUAAx3sM0lVeAAAUEsBAhcDCgAAAAAAqIV6OY35
TtI5AAAAOQAAAD8ADQAAAAAAAQAAAKSBDA0AAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3Qv
ZW5jb2RpbmcvbWV0YS1jaGFyc2V0LWV4cGVjdGVkLnR4dFVUBQADDG8tSVV4AABQSwECFwMKAAAA
AACndoE5AAAAAAAAAAAAAAAALQANAAAAAAAAABAA7UG3DQAAdG1wL2xheW91dC10ZXN0LXJlc3Vs
dHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvVVQFAANJ7DNJVXgAAFBLAQIXAwoAAAAAAJB2gTmUIU8M
FAAAABQAAABCAA0AAAAAAAEAAACkgRcOAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2Vu
Y29kaW5nL2hlYnJldy84ODU5LTgtaS1leHBlY3RlZC50eHRVVAUAAyDsM0lVeAAAUEsBAhcDCgAA
AAAAkHaBOa3tEhkUAAAAFAAAAEIADQAAAAAAAQAAAKSBoA4AAHRtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3Lzg4NTktOC1lLWV4cGVjdGVkLnR4dFVUBQADIOwzSVV4
AABQSwECFwMKAAAAAACRdoE5lCFPDBQAAAAUAAAAQQANAAAAAAABAAAApIEpDwAAdG1wL2xheW91
dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9oZWJyZXcvbG9naWNhbC1leHBlY3RlZC50eHRV
VAUAAyHsM0lVeAAAUEsBAhcDCgAAAAAAkHaBOZQhTwwUAAAAFAAAAEUADQAAAAAAAQAAAKSBsQ8A
AHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvaGVicmV3L2NzSVNPODg1OThJ
LWV4cGVjdGVkLnR4dFVUBQADIOwzSVV4AABQSwECFwMUAAAACACPdoE5QP5/vdIAAAAsAwAAPgAN
AAAAAAABAAAApIE9EAAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZmFzdC9lbmNvZGluZy9pbnZh
bGlkLXhtbC1leHBlY3RlZC50eHRVVAUAAx7sM0lVeAAAUEsBAhcDFAAAAAgAkHaBORnPA0emAAAA
4wAAAEoADQAAAAAAAQAAAKSBgBEAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2Rp
bmcvdXRmLTMyLWJpZy1lbmRpYW4tbm9ib20tZXhwZWN0ZWQudHh0VVQFAAMf7DNJVXgAAFBLAQIX
AxQAAAAIAKeFejl9cu/3cgAAAI0AAAA/AA0AAAAAAAEAAACkgaMSAAB0bXAvbGF5b3V0LXRlc3Qt
cmVzdWx0cy9mYXN0L2VuY29kaW5nL2FocmFtLW9yZy1lZy1leHBlY3RlZC50eHRVVAUAAwpvLUlV
eAAAUEsBAhcDFAAAAAgApnaBOd5eQNM0AQAA6gIAAEMADQAAAAAAAQAAAKSBhxMAAHRtcC9sYXlv
dXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvbmFtZXNwYWNlLXRvbGVyYW5jZS1kaWZmcy50
eHRVVAUAA0fsM0lVeAAAUEsBAhcDFAAAAAgApnaBOUGzWrfQAAAAPAEAAEQADQAAAAAAAQAAAKSB
MRUAAHRtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvbmFtZXNwYWNlLXRvbGVy
YW5jZS1hY3R1YWwudHh0VVQFAANH7DNJVXgAAFBLAQIXAxQAAAAIAKZ2gTl4pQWc0QAAAEABAABG
AA0AAAAAAAEAAACkgXgWAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2VuY29kaW5nL25h
bWVzcGFjZS10b2xlcmFuY2UtZXhwZWN0ZWQudHh0VVQFAANH7DNJVXgAAFBLAQIXAxQAAAAIAJ2I
ejl+InUgcgAAAI0AAABCAA0AAAAAAAEAAACkgcIXAAB0bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9m
YXN0L2VuY29kaW5nL2Zsb3JhZXhwcmVzcy1ydS1leHBlY3RlZC50eHRVVAUAA6lzLUlVeAAAUEsB
AhcDFAAAAAgAnIh6OcDgO8VvAAAAhwAAAEgADQAAAAAAAQAAAKSBqRgAAHRtcC9sYXlvdXQtdGVz
dC1yZXN1bHRzL2Zhc3QvZW5jb2RpbmcvYmFuZGFpLWNvLWpwLXJlbGVhc2VzLWV4cGVjdGVkLnR4
dFVUBQADp3MtSVV4AABQSwECFwMUAAAACACndoE51fE4Mg4BAAAbAwAAJAANAAAAAAABAAAApIGT
GQAAdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5odG1sVVQFAANJ7DNJVXgAAFBLBQYA
AAAAIgAiAPwPAAD4GgAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26711</attachid>
            <date>2009-01-14 08:51:34 -0800</date>
            <delta_ts>2009-01-16 07:46:07 -0800</delta_ts>
            <desc>1/4 - Moving WTF Unicode backend to GLib</desc>
            <filename>1_4_WTF_Unicode_GLib.diff</filename>
            <type>text/plain</type>
            <size>39592</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5ODg5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMDEt
MTQgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAg
IEluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoIGJ5IErDvHJnIEJpbGxldGVyLgorCisgICAg
ICAgIEFkZGluZyBvcHRpb25zIGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWljdXxnbGliCisg
ICAgICAgIGFuZCBjaGVja2luZyBmb3IgcGFuZ28gdmVyc2lvbiA+PSAxLjIxLjAgaWYgR0xpYiBi
YWNrZW5kCisgICAgICAgIGlzIHNlbGVjdGVkLiBUZW1wb3JhcmlseSwgdW50aWwgcmVtYWluaW5n
IHBhcnRzIG9mCisgICAgICAgIHRoaXMgcGF0Y2ggYXJlIGNvbW1pdHRlZCwgaW50cm9kdWNlIFdU
Rl9VU0VfR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQKKyAgICAgICAgbWFjcm8gdG8gYWxsb3cgZm9y
IGEgbWl4ZWQgY29tcGlsYXRpb24gd2l0aCBXVEYgVW5pY29kZQorICAgICAgICBiYWNrZW5kIGJh
c2VkIG9uIEdMaWIgd2hpbGUgdGV4dCBjb2RlY3MgYW5kIFRleHRCcmVha0l0ZXJhdG9yCisgICAg
ICAgIHJlbWFpbiBJQ1UgZGVwZW5kZW50LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDA5LTAxLTExICBYYW4gTG9wZXogIDx4YW5AZ25v
bWUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6IEdO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzOTg1
MykKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCwyMyBAQCBJ
RExfQklORElOR1MgOj0KICMgR2xvYmFsIGZsYWdzIHRvIENQUAogZ2xvYmFsX2NwcGZsYWdzIDo9
CiAKK2lmIFVTRV9JQ1VfVU5JQ09ERQogZ2xvYmFsX2NwcGZsYWdzICs9IFwKIAktRFdURl9VU0Vf
SUNVX1VOSUNPREU9MQorZW5kaWYKKworaWYgVVNFX0dMSUJfVU5JQ09ERQorIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyMgSW4gcGF0Y2ggMS80IHdlIGFy
ZSBjb21waWxpbmcgYSBoeWJyaWQgdmVyc2lvbiBvZiBHTGliIFdURiBVbmljb2RlCisjIGZ1bmN0
aW9uYWxpdHkgbWl4ZWQgd2l0aCBJQ1UtYmFzZWQgdGV4dCBjb2RlY3MgYW5kIFRleHRCcmVha0l0
ZXJhdG9yLgorIyBGb3IgdGhlIHRyYW5zaXRpb24sIGludHJvZHVjaW5nIGFuIGludGVyaW0gSFlC
UklEIG1hY3JvLgorIyBUaGlzIG1hY3JvIGlzIHJlcXVpcmVkIGZvciBjb21waWxpbmcgV1RGIHdp
dGggR0xpYiBVbmljb2RlIGJhY2tlbmQsCisjIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGtlZXBpbmcg
SUNVIGRlcGVuZGVuY3kgZm9yIGNvZGVjcyBhbmQgYnJlYWsgaXRlcmF0b3IuCisjIEl0IHdpbGwg
YmUgcmVtb3ZlZCB3aXRoIHBhdGNoIDMvNCBvZiB0aGUgYWJvdmUgYnVnLgorZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktRFdURl9VU0VfR0xJQl9VTklDT0RFPTEgXAorCS1EV1RGX1VTRV9HTElCX0lD
VV9VTklDT0RFX0hZQlJJRD0xCitlbmRpZgogCiAjIERlZmF1bHQgY29tcGlsZXIgZmxhZ3MKIGds
b2JhbF9jZmxhZ3MgOj0gXApJbmRleDogY29uZmlndXJlLmFjCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZp
Z3VyZS5hYwkocmV2aXNpb24gMzk4NTMpCisrKyBjb25maWd1cmUuYWMJKHdvcmtpbmcgY29weSkK
QEAgLTIyMiwxOCArMjIyLDIyIEBAIEFDX1NVQlNUKFtQTkdfTElCU10pCiAjIGRldGVybWluZSB0
aGUgVW5pY29kZSBiYWNrZW5kCiBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBVbmljb2RlIGJhY2tlbmQg
dG8gdXNlXSkKIEFDX0FSR19XSVRIKHVuaWNvZGVfYmFja2VuZCwKLSAgICAgICAgICAgIEFDX0hF
TFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3VAOj5AXSwKKyAgICAgICAg
ICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3UvZ2xpYkA6
PkBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBVbmljb2RlIGJhY2tlbmQg
W2RlZmF1bHQ9aWN1XV0pLAotICAgICAgICAgICAgW10sW3VuaWNvZGVfYmFja2VuZD0iaWN1Il0p
CisgICAgICAgICAgICBbXSxbd2l0aF91bmljb2RlX2JhY2tlbmQ9ImljdSJdKQogCi1jYXNlICIk
dW5pY29kZV9iYWNrZW5kIiBpbgotICAgICBpY3UpIDs7Ci0gICAgICopIEFDX01TR19FUlJPUihb
SW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1Ll0pIDs7CitjYXNlICIkd2l0aF91
bmljb2RlX2JhY2tlbmQiIGluCisgICAgIGljdXxnbGliKSA7OworICAgICAqKSBBQ19NU0dfRVJS
T1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdSBvciBnbGliLl0pIDs7CiBl
c2FjCiAKLUFDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tlbmRdKQorQUNfTVNHX1JFU1VMVChb
JHdpdGhfdW5pY29kZV9iYWNrZW5kXSkKIAotaWYgdGVzdCAiJHVuaWNvZGVfYmFja2VuZCIgPSAi
aWN1IjsgdGhlbgorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5
MTQKKyMgU3BsaXR0aW5nIElDVSByZW1vdmFsIHBhdGNoIGludG8gc21hbGxlciBwb3J0aW9ucy4g
V2UgY29tcGlsZSBhIGh5YnJpZCB2ZXJzaW9uCisjIHdpdGggdGhlIFdURiBVbmljb2RlIGJhY2tl
bmQgYmVpbmcgYmFzZWQgb24gR0xpYiB3aGlsZSB0ZXh0IGNvZGVjcyBhbmQgVGV4dEJyZWFrSXRl
cmF0b3IKKyMga2VlcCB0aGUgSUNVIGRlcGVuZGVuY3kuIFRoYXQncyB3aHkgd2UgdGVtcG9yYXJp
bHkgYWRkIGljdSBoZWFkZXJzIGFuZCBsaWJzIGZvciBnbGliIGNvbmZpZyBjYXNlIGFzIHdlbGwu
CitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSIgLW8gIiR3aXRoX3VuaWNv
ZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KIAlBQ19QQVRIX1BST0coaWN1X2NvbmZpZywgaWN1
LWNvbmZpZywgbm8pCiAJaWYgdGVzdCAiJGljdV9jb25maWciID0gIm5vIjsgdGhlbgogCQlpZiB0
ZXN0ICIkb3NfZGFyd2luIiA9ICJ5ZXMiOyB0aGVuCkBAIC0yNTQsNiArMjU4LDE3IEBAIGlmIHRl
c3QgIiR1bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4KIAlmaQogZmkKIAoraWYgdGVzdCAi
JHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIjsgdGhlbgorCSMgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisJIyBTcGxpdHRpbmcgSUNVIHJlbW92YWwg
cGF0Y2ggaW50byBzbWFsbGVyIHBvcnRpb25zLCB0aGF0J3Mgd2h5IHdlCisJIyB0ZW1wb3Jhcmls
eSByZXRyaWV2ZSBmbGFncyAmIGxpYnMgaW5mbyBmb3IgZ2xpYiBpbnRvIFVOSUNPREVHTElCCisJ
IyBpbnN0ZWFkIG9mIFVOSUNPREUgdmFyaWFibGUsIHRoZW4gY29uY2F0ZW5hdGUuCisJIyBQYXRj
aCAzLzQgb2YgdGhlIGFib3ZlIGlzc3VlIHdpbGwgcmVuYW1lIHRoZSB2YXJpYWJsZSBiYWNrIHRv
IFVOSUNPREUuCisJUEtHX0NIRUNLX01PRFVMRVMoW1VOSUNPREVHTElCXSwgW2dsaWItMi4wIHBh
bmdvID49IDEuMjEuMF0pCisJVU5JQ09ERV9DRkxBR1M9IiRVTklDT0RFX0NGTEFHUyAkVU5JQ09E
RUdMSUJfQ0ZMQUdTIgorCVVOSUNPREVfTElCUz0iJFVOSUNPREVfTElCUyAkVU5JQ09ERUdMSUJf
TElCUyIKK2ZpCisKIEFDX1NVQlNUKFtVTklDT0RFX0NGTEFHU10pCiBBQ19TVUJTVChbVU5JQ09E
RV9MSUJTXSkKIApAQCAtNzEyLDYgKzcyNywxMCBAQCBBTV9DT05ESVRJT05BTChbVEFSR0VUX1dJ
TjMyXSwgW3Rlc3QgIiR3CiBBTV9DT05ESVRJT05BTChbVEFSR0VUX1FVQVJUWl0sIFt0ZXN0ICIk
d2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9ESVJFQ1RG
Ql0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAKKyMgVW5pY29kZSBiYWNr
ZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9JQ1VfVU5JQ09ERV0sIFt0ZXN0
ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSJdKQorQU1fQ09ORElUSU9OQUwoW1VTRV9H
TElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIl0pCisK
ICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW1VTRV9DVVJMXSwg
W3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCJdKQogQU1fQ09ORElUSU9OQUwoW1VT
RV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAic291cCJdKQpAQCAtNzYxLDcg
Kzc4MCw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgRW5hYmxlIGRlYnVnZ2luZyAoc2xvdykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RlYnVnCiAgRW5hYmxl
IEdDQyBidWlsZCBvcHRpbWl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5h
YmxlX29wdGltaXphdGlvbnMKICBDb2RlIGNvdmVyYWdlIHN1cHBvcnQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY292ZXJhZ2UKLSBVbmljb2RlIGJhY2tlbmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR1bmljb2RlX2JhY2tl
bmQKKyBVbmljb2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICR3aXRoX3VuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFja2VuZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfaHR0cF9iYWNrZW5kCiAgRm9u
dCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAk
d2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDM5ODg5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMDktMDEtMTQgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRv
bWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0
aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IErDvHJnIEJp
bGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgSW1wbGVtZW50aW5nIFdURiBVbmljb2Rl
IGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gR0xpYi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29k
ZS9nbGliOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL0Nhc2Vmb2xkVGFibGVG
cm9tR0xpYi5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGli
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpVbmljb2RlOjopOgorICAgICAgICAoV1RGOjpVbmlj
b2RlOjpmb2xkQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvTG93ZXIpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjp0b1VwcGVyKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6dG9UaXRs
ZUNhc2UpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0FyYWJpY0NoYXIpOgorICAgICAgICAo
V1RGOjpVbmljb2RlOjppc0Zvcm1hdENoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc1Nl
cGFyYXRvclNwYWNlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNQcmludGFibGVDaGFyKToK
KyAgICAgICAgKFdURjo6VW5pY29kZTo6aXNEaWdpdCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6
OmlzUHVuY3QpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjptaXJyb3JlZENoYXIpOgorICAgICAg
ICAoV1RGOjpVbmljb2RlOjpjYXRlZ29yeSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpcmVj
dGlvbik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzTG93ZXIpOgorICAgICAgICAoV1RGOjpV
bmljb2RlOjpkaWdpdFZhbHVlKToKKyAgICAgICAgKFdURjo6VW5pY29kZTo6Y29tYmluaW5nQ2xh
c3MpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpkZWNvbXBvc2l0aW9uVHlwZSk6CisgICAgICAg
IChXVEY6OlVuaWNvZGU6OnVtZW1jYXNlY21wKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVHTGliVHlwZXMuaDogQWRkZWQuCisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9V
bmljb2RlTWFjcm9zRnJvbUlDVS5oOiBBZGRlZC4KKwogMjAwOS0wMS0xMyAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5k
IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM5ODUzKQor
KysgSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0OSw5
ICsyNDksMjcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUv
d3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvVVRGOC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VURjguaCBcCi0J
SmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93
dGYvdW5pY29kZS9Vbmljb2RlLmgKKworIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQKKyMg
LS0tLQoraWYgVVNFX0lDVV9VTklDT0RFCitqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwIFwKIAlKYXZhU2Ny
aXB0Q29yZS93dGYvdW5pY29kZS9pY3UvVW5pY29kZUljdS5oCitlbmRpZiAjIFVTRV9JQ1VfVU5J
Q09ERQorCisjIC0tLS0KKyMgZ2xpYiB1bmljb2RlIGJhY2tlbmQKKyMgLS0tLQoraWYgVVNFX0dM
SUJfVU5JQ09ERQoramF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCisJSmF2YVNjcmlwdENvcmUv
d3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliVHlwZXMuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9nbGliL0Nhc2Vmb2xkVGFibGVGcm9tR0xpYi5oCitlbmRpZgogCiAjIERlYnVnIGJ1aWxk
CiBpZiBFTkFCTEVfREVCVUcKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJ
KHJldmlzaW9uIDM5ODUzKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAicXQ0L1VuaWNvZGVR
dDQuaCIKICNlbGlmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3Uv
VW5pY29kZUljdS5oPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliLmg+CiAjZWxzZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUg
aW1wbGVtZW50YXRpb24iCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L2dsaWIvQ2FzZWZvbGRUYWJsZUZyb21HTGliLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL3VuaWNvZGUvZ2xpYi9DYXNlZm9sZFRhYmxlRnJvbUdMaWIuaAkocmV2aXNpb24gMCkK
KysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvQ2FzZWZvbGRUYWJsZUZyb21HTGli
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogIENvcHlyaWdodCAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+CisgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNz
LWNvbXBhbnkuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBDYXNlZm9sZFRhYmxlRnJvbUdM
aWJfaAorI2RlZmluZSBDYXNlZm9sZFRhYmxlRnJvbUdMaWJfaAorCisjaW5jbHVkZSA8Z2xpYi5o
PgorCisvLyBjb3BpZWQgZnJvbSBHTGliCisKKy8qIFRhYmxlIG9mIGNhc2Vmb2xkaW5nIGNhc2Vz
IHRoYXQgY2FuJ3QgYmUgZGVyaXZlZCBieSBsb3dlcmNhc2luZworICovCitzdGF0aWMgY29uc3Qg
c3RydWN0IHsKKyAgICBndWludDE2IGNoOworICAgIGdjaGFyIGRhdGFbN107Cit9IGNhc2Vmb2xk
X3RhYmxlW10gPSB7CisgICAgeyAweDAwYjUsICJceGNlXHhiYyIgfSwKKyAgICB7IDB4MDBkZiwg
Ilx4NzNceDczIiB9LAorICAgIHsgMHgwMTMwLCAiXHg2OVx4Y2NceDg3IiB9LAorICAgIHsgMHgw
MTQ5LCAiXHhjYVx4YmNceDZlIiB9LAorICAgIHsgMHgwMTdmLCAiXHg3MyIgfSwKKyAgICB7IDB4
MDFmMCwgIlx4NmFceGNjXHg4YyIgfSwKKyAgICB7IDB4MDM0NSwgIlx4Y2VceGI5IiB9LAorICAg
IHsgMHgwMzkwLCAiXHhjZVx4YjlceGNjXHg4OFx4Y2NceDgxIiB9LAorICAgIHsgMHgwM2IwLCAi
XHhjZlx4ODVceGNjXHg4OFx4Y2NceDgxIiB9LAorICAgIHsgMHgwM2MyLCAiXHhjZlx4ODMiIH0s
CisgICAgeyAweDAzZDAsICJceGNlXHhiMiIgfSwKKyAgICB7IDB4MDNkMSwgIlx4Y2VceGI4IiB9
LAorICAgIHsgMHgwM2Q1LCAiXHhjZlx4ODYiIH0sCisgICAgeyAweDAzZDYsICJceGNmXHg4MCIg
fSwKKyAgICB7IDB4MDNmMCwgIlx4Y2VceGJhIiB9LAorICAgIHsgMHgwM2YxLCAiXHhjZlx4ODEi
IH0sCisgICAgeyAweDAzZjUsICJceGNlXHhiNSIgfSwKKyAgICB7IDB4MDU4NywgIlx4ZDVceGE1
XHhkNlx4ODIiIH0sCisgICAgeyAweDFlOTYsICJceDY4XHhjY1x4YjEiIH0sCisgICAgeyAweDFl
OTcsICJceDc0XHhjY1x4ODgiIH0sCisgICAgeyAweDFlOTgsICJceDc3XHhjY1x4OGEiIH0sCisg
ICAgeyAweDFlOTksICJceDc5XHhjY1x4OGEiIH0sCisgICAgeyAweDFlOWEsICJceDYxXHhjYVx4
YmUiIH0sCisgICAgeyAweDFlOWIsICJceGUxXHhiOVx4YTEiIH0sCisgICAgeyAweDFmNTAsICJc
eGNmXHg4NVx4Y2NceDkzIiB9LAorICAgIHsgMHgxZjUyLCAiXHhjZlx4ODVceGNjXHg5M1x4Y2Nc
eDgwIiB9LAorICAgIHsgMHgxZjU0LCAiXHhjZlx4ODVceGNjXHg5M1x4Y2NceDgxIiB9LAorICAg
IHsgMHgxZjU2LCAiXHhjZlx4ODVceGNjXHg5M1x4Y2RceDgyIiB9LAorICAgIHsgMHgxZjgwLCAi
XHhlMVx4YmNceDgwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmODEsICJceGUxXHhiY1x4ODFceGNl
XHhiOSIgfSwKKyAgICB7IDB4MWY4MiwgIlx4ZTFceGJjXHg4Mlx4Y2VceGI5IiB9LAorICAgIHsg
MHgxZjgzLCAiXHhlMVx4YmNceDgzXHhjZVx4YjkiIH0sCisgICAgeyAweDFmODQsICJceGUxXHhi
Y1x4ODRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4NSwgIlx4ZTFceGJjXHg4NVx4Y2VceGI5IiB9
LAorICAgIHsgMHgxZjg2LCAiXHhlMVx4YmNceDg2XHhjZVx4YjkiIH0sCisgICAgeyAweDFmODcs
ICJceGUxXHhiY1x4ODdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4OCwgIlx4ZTFceGJjXHg4MFx4
Y2VceGI5IiB9LAorICAgIHsgMHgxZjg5LCAiXHhlMVx4YmNceDgxXHhjZVx4YjkiIH0sCisgICAg
eyAweDFmOGEsICJceGUxXHhiY1x4ODJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4YiwgIlx4ZTFc
eGJjXHg4M1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZjhjLCAiXHhlMVx4YmNceDg0XHhjZVx4Yjki
IH0sCisgICAgeyAweDFmOGQsICJceGUxXHhiY1x4ODVceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY4
ZSwgIlx4ZTFceGJjXHg4Nlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjhmLCAiXHhlMVx4YmNceDg3
XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTAsICJceGUxXHhiY1x4YTBceGNlXHhiOSIgfSwKKyAg
ICB7IDB4MWY5MSwgIlx4ZTFceGJjXHhhMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjkyLCAiXHhl
MVx4YmNceGEyXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTMsICJceGUxXHhiY1x4YTNceGNlXHhi
OSIgfSwKKyAgICB7IDB4MWY5NCwgIlx4ZTFceGJjXHhhNFx4Y2VceGI5IiB9LAorICAgIHsgMHgx
Zjk1LCAiXHhlMVx4YmNceGE1XHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTYsICJceGUxXHhiY1x4
YTZceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5NywgIlx4ZTFceGJjXHhhN1x4Y2VceGI5IiB9LAor
ICAgIHsgMHgxZjk4LCAiXHhlMVx4YmNceGEwXHhjZVx4YjkiIH0sCisgICAgeyAweDFmOTksICJc
eGUxXHhiY1x4YTFceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5YSwgIlx4ZTFceGJjXHhhMlx4Y2Vc
eGI5IiB9LAorICAgIHsgMHgxZjliLCAiXHhlMVx4YmNceGEzXHhjZVx4YjkiIH0sCisgICAgeyAw
eDFmOWMsICJceGUxXHhiY1x4YTRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWY5ZCwgIlx4ZTFceGJj
XHhhNVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZjllLCAiXHhlMVx4YmNceGE2XHhjZVx4YjkiIH0s
CisgICAgeyAweDFmOWYsICJceGUxXHhiY1x4YTdceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhMCwg
Ilx4ZTFceGJkXHhhMFx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmExLCAiXHhlMVx4YmRceGExXHhj
ZVx4YjkiIH0sCisgICAgeyAweDFmYTIsICJceGUxXHhiZFx4YTJceGNlXHhiOSIgfSwKKyAgICB7
IDB4MWZhMywgIlx4ZTFceGJkXHhhM1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmE0LCAiXHhlMVx4
YmRceGE0XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTUsICJceGUxXHhiZFx4YTVceGNlXHhiOSIg
fSwKKyAgICB7IDB4MWZhNiwgIlx4ZTFceGJkXHhhNlx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmE3
LCAiXHhlMVx4YmRceGE3XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYTgsICJceGUxXHhiZFx4YTBc
eGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhOSwgIlx4ZTFceGJkXHhhMVx4Y2VceGI5IiB9LAorICAg
IHsgMHgxZmFhLCAiXHhlMVx4YmRceGEyXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYWIsICJceGUx
XHhiZFx4YTNceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhYywgIlx4ZTFceGJkXHhhNFx4Y2VceGI5
IiB9LAorICAgIHsgMHgxZmFkLCAiXHhlMVx4YmRceGE1XHhjZVx4YjkiIH0sCisgICAgeyAweDFm
YWUsICJceGUxXHhiZFx4YTZceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZhZiwgIlx4ZTFceGJkXHhh
N1x4Y2VceGI5IiB9LAorICAgIHsgMHgxZmIyLCAiXHhlMVx4YmRceGIwXHhjZVx4YjkiIH0sCisg
ICAgeyAweDFmYjMsICJceGNlXHhiMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmI0LCAiXHhjZVx4
YWNceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZiNiwgIlx4Y2VceGIxXHhjZFx4ODIiIH0sCisgICAg
eyAweDFmYjcsICJceGNlXHhiMVx4Y2RceDgyXHhjZVx4YjkiIH0sCisgICAgeyAweDFmYmMsICJc
eGNlXHhiMVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmJlLCAiXHhjZVx4YjkiIH0sCisgICAgeyAw
eDFmYzIsICJceGUxXHhiZFx4YjRceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZjMywgIlx4Y2VceGI3
XHhjZVx4YjkiIH0sCisgICAgeyAweDFmYzQsICJceGNlXHhhZVx4Y2VceGI5IiB9LAorICAgIHsg
MHgxZmM2LCAiXHhjZVx4YjdceGNkXHg4MiIgfSwKKyAgICB7IDB4MWZjNywgIlx4Y2VceGI3XHhj
ZFx4ODJceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZjYywgIlx4Y2VceGI3XHhjZVx4YjkiIH0sCisg
ICAgeyAweDFmZDIsICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODAiIH0sCisgICAgeyAweDFmZDMs
ICJceGNlXHhiOVx4Y2NceDg4XHhjY1x4ODEiIH0sCisgICAgeyAweDFmZDYsICJceGNlXHhiOVx4
Y2RceDgyIiB9LAorICAgIHsgMHgxZmQ3LCAiXHhjZVx4YjlceGNjXHg4OFx4Y2RceDgyIiB9LAor
ICAgIHsgMHgxZmUyLCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgwIiB9LAorICAgIHsgMHgxZmUz
LCAiXHhjZlx4ODVceGNjXHg4OFx4Y2NceDgxIiB9LAorICAgIHsgMHgxZmU0LCAiXHhjZlx4ODFc
eGNjXHg5MyIgfSwKKyAgICB7IDB4MWZlNiwgIlx4Y2ZceDg1XHhjZFx4ODIiIH0sCisgICAgeyAw
eDFmZTcsICJceGNmXHg4NVx4Y2NceDg4XHhjZFx4ODIiIH0sCisgICAgeyAweDFmZjIsICJceGUx
XHhiZFx4YmNceGNlXHhiOSIgfSwKKyAgICB7IDB4MWZmMywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0s
CisgICAgeyAweDFmZjQsICJceGNmXHg4ZVx4Y2VceGI5IiB9LAorICAgIHsgMHgxZmY2LCAiXHhj
Zlx4ODlceGNkXHg4MiIgfSwKKyAgICB7IDB4MWZmNywgIlx4Y2ZceDg5XHhjZFx4ODJceGNlXHhi
OSIgfSwKKyAgICB7IDB4MWZmYywgIlx4Y2ZceDg5XHhjZVx4YjkiIH0sCisgICAgeyAweDIxNjAs
ICJceGUyXHg4NVx4YjAiIH0sCisgICAgeyAweDIxNjEsICJceGUyXHg4NVx4YjEiIH0sCisgICAg
eyAweDIxNjIsICJceGUyXHg4NVx4YjIiIH0sCisgICAgeyAweDIxNjMsICJceGUyXHg4NVx4YjMi
IH0sCisgICAgeyAweDIxNjQsICJceGUyXHg4NVx4YjQiIH0sCisgICAgeyAweDIxNjUsICJceGUy
XHg4NVx4YjUiIH0sCisgICAgeyAweDIxNjYsICJceGUyXHg4NVx4YjYiIH0sCisgICAgeyAweDIx
NjcsICJceGUyXHg4NVx4YjciIH0sCisgICAgeyAweDIxNjgsICJceGUyXHg4NVx4YjgiIH0sCisg
ICAgeyAweDIxNjksICJceGUyXHg4NVx4YjkiIH0sCisgICAgeyAweDIxNmEsICJceGUyXHg4NVx4
YmEiIH0sCisgICAgeyAweDIxNmIsICJceGUyXHg4NVx4YmIiIH0sCisgICAgeyAweDIxNmMsICJc
eGUyXHg4NVx4YmMiIH0sCisgICAgeyAweDIxNmQsICJceGUyXHg4NVx4YmQiIH0sCisgICAgeyAw
eDIxNmUsICJceGUyXHg4NVx4YmUiIH0sCisgICAgeyAweDIxNmYsICJceGUyXHg4NVx4YmYiIH0s
CisgICAgeyAweDI0YjYsICJceGUyXHg5M1x4OTAiIH0sCisgICAgeyAweDI0YjcsICJceGUyXHg5
M1x4OTEiIH0sCisgICAgeyAweDI0YjgsICJceGUyXHg5M1x4OTIiIH0sCisgICAgeyAweDI0Yjks
ICJceGUyXHg5M1x4OTMiIH0sCisgICAgeyAweDI0YmEsICJceGUyXHg5M1x4OTQiIH0sCisgICAg
eyAweDI0YmIsICJceGUyXHg5M1x4OTUiIH0sCisgICAgeyAweDI0YmMsICJceGUyXHg5M1x4OTYi
IH0sCisgICAgeyAweDI0YmQsICJceGUyXHg5M1x4OTciIH0sCisgICAgeyAweDI0YmUsICJceGUy
XHg5M1x4OTgiIH0sCisgICAgeyAweDI0YmYsICJceGUyXHg5M1x4OTkiIH0sCisgICAgeyAweDI0
YzAsICJceGUyXHg5M1x4OWEiIH0sCisgICAgeyAweDI0YzEsICJceGUyXHg5M1x4OWIiIH0sCisg
ICAgeyAweDI0YzIsICJceGUyXHg5M1x4OWMiIH0sCisgICAgeyAweDI0YzMsICJceGUyXHg5M1x4
OWQiIH0sCisgICAgeyAweDI0YzQsICJceGUyXHg5M1x4OWUiIH0sCisgICAgeyAweDI0YzUsICJc
eGUyXHg5M1x4OWYiIH0sCisgICAgeyAweDI0YzYsICJceGUyXHg5M1x4YTAiIH0sCisgICAgeyAw
eDI0YzcsICJceGUyXHg5M1x4YTEiIH0sCisgICAgeyAweDI0YzgsICJceGUyXHg5M1x4YTIiIH0s
CisgICAgeyAweDI0YzksICJceGUyXHg5M1x4YTMiIH0sCisgICAgeyAweDI0Y2EsICJceGUyXHg5
M1x4YTQiIH0sCisgICAgeyAweDI0Y2IsICJceGUyXHg5M1x4YTUiIH0sCisgICAgeyAweDI0Y2Ms
ICJceGUyXHg5M1x4YTYiIH0sCisgICAgeyAweDI0Y2QsICJceGUyXHg5M1x4YTciIH0sCisgICAg
eyAweDI0Y2UsICJceGUyXHg5M1x4YTgiIH0sCisgICAgeyAweDI0Y2YsICJceGUyXHg5M1x4YTki
IH0sCisgICAgeyAweGZiMDAsICJceDY2XHg2NiIgfSwKKyAgICB7IDB4ZmIwMSwgIlx4NjZceDY5
IiB9LAorICAgIHsgMHhmYjAyLCAiXHg2Nlx4NmMiIH0sCisgICAgeyAweGZiMDMsICJceDY2XHg2
Nlx4NjkiIH0sCisgICAgeyAweGZiMDQsICJceDY2XHg2Nlx4NmMiIH0sCisgICAgeyAweGZiMDUs
ICJceDczXHg3NCIgfSwKKyAgICB7IDB4ZmIwNiwgIlx4NzNceDc0IiB9LAorICAgIHsgMHhmYjEz
LCAiXHhkNVx4YjRceGQ1XHhiNiIgfSwKKyAgICB7IDB4ZmIxNCwgIlx4ZDVceGI0XHhkNVx4YTUi
IH0sCisgICAgeyAweGZiMTUsICJceGQ1XHhiNFx4ZDVceGFiIiB9LAorICAgIHsgMHhmYjE2LCAi
XHhkNVx4YmVceGQ1XHhiNiIgfSwKKyAgICB7IDB4ZmIxNywgIlx4ZDVceGI0XHhkNVx4YWQiIH0K
K307CisKKworI2VuZGlmCisKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIv
VW5pY29kZUdMaWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9n
bGliL1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5p
Y29kZS9nbGliL1VuaWNvZGVHTGliLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzk5IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3Jn
PgorICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5j
b20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJp
dHJvbi5jaD4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21p
bmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBVbmljb2RlR0xpYl9oCisjZGVmaW5lIFVuaWNvZGVHTGliX2gKKworI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVk
ZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+CisKKyNpbmNsdWRlIDx3dGYvR093
blB0ci5oPgorCisjaW5jbHVkZSAiQ2FzZWZvbGRUYWJsZUZyb21HTGliLmgiCisjaW5jbHVkZSAi
VW5pY29kZUdMaWJUeXBlcy5oIgorI2luY2x1ZGUgIlVuaWNvZGVNYWNyb3NGcm9tSUNVLmgiCisK
K25hbWVzcGFjZSBXVEYgeworICAgIG5hbWVzcGFjZSBVbmljb2RlIHsKKworICAgICAgICBlbnVt
IERpcmVjdGlvbiB7CisgICAgICAgICAgICBMZWZ0VG9SaWdodCwKKyAgICAgICAgICAgIFJpZ2h0
VG9MZWZ0LAorICAgICAgICAgICAgRXVyb3BlYW5OdW1iZXIsCisgICAgICAgICAgICBFdXJvcGVh
bk51bWJlclNlcGFyYXRvciwKKyAgICAgICAgICAgIEV1cm9wZWFuTnVtYmVyVGVybWluYXRvciwK
KyAgICAgICAgICAgIEFyYWJpY051bWJlciwKKyAgICAgICAgICAgIENvbW1vbk51bWJlclNlcGFy
YXRvciwKKyAgICAgICAgICAgIEJsb2NrU2VwYXJhdG9yLAorICAgICAgICAgICAgU2VnbWVudFNl
cGFyYXRvciwKKyAgICAgICAgICAgIFdoaXRlU3BhY2VOZXV0cmFsLAorICAgICAgICAgICAgT3Ro
ZXJOZXV0cmFsLAorICAgICAgICAgICAgTGVmdFRvUmlnaHRFbWJlZGRpbmcsCisgICAgICAgICAg
ICBMZWZ0VG9SaWdodE92ZXJyaWRlLAorICAgICAgICAgICAgUmlnaHRUb0xlZnRBcmFiaWMsCisg
ICAgICAgICAgICBSaWdodFRvTGVmdEVtYmVkZGluZywKKyAgICAgICAgICAgIFJpZ2h0VG9MZWZ0
T3ZlcnJpZGUsCisgICAgICAgICAgICBQb3BEaXJlY3Rpb25hbEZvcm1hdCwKKyAgICAgICAgICAg
IE5vblNwYWNpbmdNYXJrLAorICAgICAgICAgICAgQm91bmRhcnlOZXV0cmFsCisgICAgICAgIH07
CisKKyAgICAgICAgZW51bSBEZWNvbXBvc2l0aW9uVHlwZSB7CisgICAgICAgICAgICBEZWNvbXBv
c2l0aW9uTm9uZSwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25DYW5vbmljYWwsCisgICAgICAg
ICAgICBEZWNvbXBvc2l0aW9uQ29tcGF0LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkNpcmNs
ZSwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25GaW5hbCwKKyAgICAgICAgICAgIERlY29tcG9z
aXRpb25Gb250LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkZyYWN0aW9uLAorICAgICAgICAg
ICAgRGVjb21wb3NpdGlvbkluaXRpYWwsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uSXNvbGF0
ZWQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uTWVkaWFsLAorICAgICAgICAgICAgRGVjb21w
b3NpdGlvbk5hcnJvdywKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25Ob0JyZWFrLAorICAgICAg
ICAgICAgRGVjb21wb3NpdGlvblNtYWxsLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvblNxdWFy
ZSwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25TdWIsCisgICAgICAgICAgICBEZWNvbXBvc2l0
aW9uU3VwZXIsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uVmVydGljYWwsCisgICAgICAgICAg
ICBEZWNvbXBvc2l0aW9uV2lkZSwKKyAgICAgICAgfTsKKworICAgICAgICBlbnVtIENoYXJDYXRl
Z29yeSB7CisgICAgICAgICAgICBOb0NhdGVnb3J5ID0gIDAsCisgICAgICAgICAgICBPdGhlcl9O
b3RBc3NpZ25lZCA9IFVfTUFTSyhHX1VOSUNPREVfVU5BU1NJR05FRCksCisgICAgICAgICAgICBM
ZXR0ZXJfVXBwZXJjYXNlID0gVV9NQVNLKEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVSKSwKKyAg
ICAgICAgICAgIExldHRlcl9Mb3dlcmNhc2UgPSBVX01BU0soR19VTklDT0RFX0xPV0VSQ0FTRV9M
RVRURVIpLAorICAgICAgICAgICAgTGV0dGVyX1RpdGxlY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVf
VElUTEVDQVNFX0xFVFRFUiksCisgICAgICAgICAgICBMZXR0ZXJfTW9kaWZpZXIgPSBVX01BU0so
R19VTklDT0RFX01PRElGSUVSX0xFVFRFUiksCisgICAgICAgICAgICBMZXR0ZXJfT3RoZXIgPSBV
X01BU0soR19VTklDT0RFX09USEVSX0xFVFRFUiksCisKKyAgICAgICAgICAgIE1hcmtfTm9uU3Bh
Y2luZyA9IFVfTUFTSyhHX1VOSUNPREVfTk9OX1NQQUNJTkdfTUFSSyksCisgICAgICAgICAgICBN
YXJrX0VuY2xvc2luZyA9IFVfTUFTSyhHX1VOSUNPREVfRU5DTE9TSU5HX01BUkspLAorICAgICAg
ICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nID0gVV9NQVNLKEdfVU5JQ09ERV9DT01CSU5JTkdf
TUFSSyksCisKKyAgICAgICAgICAgIE51bWJlcl9EZWNpbWFsRGlnaXQgPSBVX01BU0soR19VTklD
T0RFX0RFQ0lNQUxfTlVNQkVSKSwKKyAgICAgICAgICAgIE51bWJlcl9MZXR0ZXIgPSBVX01BU0so
R19VTklDT0RFX0xFVFRFUl9OVU1CRVIpLAorICAgICAgICAgICAgTnVtYmVyX090aGVyID0gVV9N
QVNLKEdfVU5JQ09ERV9PVEhFUl9OVU1CRVIpLAorCisgICAgICAgICAgICBTZXBhcmF0b3JfU3Bh
Y2UgPSBVX01BU0soR19VTklDT0RFX1NQQUNFX1NFUEFSQVRPUiksCisgICAgICAgICAgICBTZXBh
cmF0b3JfTGluZSA9IFVfTUFTSyhHX1VOSUNPREVfTElORV9TRVBBUkFUT1IpLAorICAgICAgICAg
ICAgU2VwYXJhdG9yX1BhcmFncmFwaCA9IFVfTUFTSyhHX1VOSUNPREVfUEFSQUdSQVBIX1NFUEFS
QVRPUiksCisKKyAgICAgICAgICAgIE90aGVyX0NvbnRyb2wgPSBVX01BU0soR19VTklDT0RFX0NP
TlRST0wpLAorICAgICAgICAgICAgT3RoZXJfRm9ybWF0ID0gVV9NQVNLKEdfVU5JQ09ERV9GT1JN
QVQpLAorICAgICAgICAgICAgT3RoZXJfUHJpdmF0ZVVzZSA9IFVfTUFTSyhHX1VOSUNPREVfUFJJ
VkFURV9VU0UpLAorICAgICAgICAgICAgT3RoZXJfU3Vycm9nYXRlID0gVV9NQVNLKEdfVU5JQ09E
RV9TVVJST0dBVEUpLAorCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9EYXNoID0gVV9NQVNLKEdf
VU5JQ09ERV9EQVNIX1BVTkNUVUFUSU9OKSwKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX09wZW4g
PSBVX01BU0soR19VTklDT0RFX09QRU5fUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVuY3R1
YXRpb25fQ2xvc2UgPSBVX01BU0soR19VTklDT0RFX0NMT1NFX1BVTkNUVUFUSU9OKSwKKyAgICAg
ICAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3RvciA9IFVfTUFTSyhHX1VOSUNPREVfQ09OTkVDVF9Q
VU5DVFVBVElPTiksCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9PdGhlciA9IFVfTUFTSyhHX1VO
SUNPREVfT1RIRVJfUFVOQ1RVQVRJT04pLAorCisgICAgICAgICAgICBTeW1ib2xfTWF0aCA9IFVf
TUFTSyhHX1VOSUNPREVfTUFUSF9TWU1CT0wpLAorICAgICAgICAgICAgU3ltYm9sX0N1cnJlbmN5
ID0gVV9NQVNLKEdfVU5JQ09ERV9DVVJSRU5DWV9TWU1CT0wpLAorICAgICAgICAgICAgU3ltYm9s
X01vZGlmaWVyID0gVV9NQVNLKEdfVU5JQ09ERV9NT0RJRklFUl9TWU1CT0wpLAorICAgICAgICAg
ICAgU3ltYm9sX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9TWU1CT0wpLAorCisgICAg
ICAgICAgICBQdW5jdHVhdGlvbl9Jbml0aWFsUXVvdGUgPSBVX01BU0soR19VTklDT0RFX0lOSVRJ
QUxfUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVuY3R1YXRpb25fRmluYWxRdW90ZSA9IFVf
TUFTSyhHX1VOSUNPREVfRklOQUxfUFVOQ1RVQVRJT04pCisgICAgICAgIH07CisKKyAgICAgICAg
aW5saW5lIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjaCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gYWRkIGdfdW5pY2hhcl9jYXNlZm9sZCB0byBHTGliIHVwc3RyZWFtPworCisgICAgICAg
ICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICAgICAgaW50IGVuZCA9IEdfTl9FTEVNRU5UUyhj
YXNlZm9sZF90YWJsZSk7CisKKyAgICAgICAgICAgIGlmIChjaCA+PSBjYXNlZm9sZF90YWJsZVtz
dGFydF0uY2ggJiYKKyAgICAgICAgICAgICAgICBjaCA8PSBjYXNlZm9sZF90YWJsZVtlbmQgLSAx
XS5jaCkgeworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGludCBoYWxmID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaCA9PSBjYXNlZm9sZF90YWJsZVtoYWxmXS5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnX3V0ZjhfZ2V0X2NoYXIoY2FzZWZvbGRfdGFibGVbaGFsZl0uZGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYWxmID09IHN0YXJ0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID4gY2FzZWZvbGRfdGFi
bGVbaGFsZl0uY2gpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGhhbGY7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGhhbGY7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
Z191bmljaGFyX3RvbG93ZXIgKGNoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBpbnQg
Zm9sZENhc2UoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNy
YywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgICpl
cnJvciA9IGZhbHNlOworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGdlcnJvcjsKKworICAg
ICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4c3JjOworICAgICAgICAgICAgdXRmOHNyYy5zZXQo
Z191dGYxNl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7
CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEdPd25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjhyZXN1bHQuc2V0
KGdfdXRmOF9jYXNlZm9sZCh1dGY4c3JjLmdldCgpLCAtMSkpOworCisgICAgICAgICAgICBsb25n
IHV0ZjE2cmVzdWx0TGVuZ3RoID0gLTE7CisgICAgICAgICAgICBHT3duUHRyPFVDaGFyPiB1dGYx
NnJlc3VsdDsKKyAgICAgICAgICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9fdXRmMTYodXRm
OHJlc3VsdC5nZXQoKSwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvci5vdXRQdHIo
KSkpOworICAgICAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgICAgICplcnJvciA9
IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICAqZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3Vs
dExlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2
cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAg
ICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBp
bmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3Qg
VUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICplcnJvciA9IGZhbHNlOworICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGdlcnJv
cjsKKworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1dGY4c3JjOworICAgICAgICAgICAgdXRm
OHNyYy5zZXQoZ191dGYxNl90b191dGY4KHNyYywgc3JjTGVuZ3RoLCAwLCAwLCAmZ2Vycm9yLm91
dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAgKmVy
cm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKKyAgICAgICAgICAgIHV0Zjhy
ZXN1bHQuc2V0KGdfdXRmOF9zdHJkb3duKHV0ZjhzcmMuZ2V0KCksIC0xKSk7CisKKyAgICAgICAg
ICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICAgICAgICAgIEdPd25QdHI8VUNo
YXI+IHV0ZjE2cmVzdWx0OworICAgICAgICAgICAgdXRmMTZyZXN1bHQuc2V0KGdfdXRmOF90b191
dGYxNih1dGY4cmVzdWx0LmdldCgpLCAtMSwgMCwgJnV0ZjE2cmVzdWx0TGVuZ3RoLCAmZ2Vycm9y
Lm91dFB0cigpKSk7CisgICAgICAgICAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICAgICAgICAg
KmVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgewor
ICAgICAgICAgICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHV0
ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KHJlc3Vs
dCwgdXRmMTZyZXN1bHQuZ2V0KCksIHV0ZjE2cmVzdWx0TGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisKKyAgICAgICAgICAgIHJldHVybiB1dGYxNnJlc3VsdExlbmd0aDsKKyAgICAgICAgfQorCisg
ICAgICAgIGlubGluZSBVQ2hhcjMyIHRvTG93ZXIoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ191bmljaGFyX3RvbG93ZXIoYyk7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdfdW5pY2hhcl90b3VwcGVyKGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5s
aW5lIGludCB0b1VwcGVyKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVD
aGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQorICAgICAgICB7CisgICAgICAg
ICAgICAqZXJyb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIEdPd25QdHI8R0Vycm9yPiBnZXJyb3I7
CisKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXRmOHNyYzsKKyAgICAgICAgICAgIHV0Zjhz
cmMuc2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvci5vdXRQ
dHIoKSkpOworICAgICAgICAgICAgaWYgKGdlcnJvcikgeworICAgICAgICAgICAgICAgICplcnJv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhyZXN1bHQ7CisgICAgICAgICAgICB1dGY4cmVz
dWx0LnNldChnX3V0Zjhfc3RydXAodXRmOHNyYy5nZXQoKSwgLTEpKTsKKworICAgICAgICAgICAg
bG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAgICAgICAgICAgR093blB0cjxVQ2hhcj4g
dXRmMTZyZXN1bHQ7CisgICAgICAgICAgICB1dGYxNnJlc3VsdC5zZXQoZ191dGY4X3RvX3V0ZjE2
KHV0ZjhyZXN1bHQuZ2V0KCksIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3Iub3V0
UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAqZXJy
b3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHV0ZjE2cmVzdWx0TGVuZ3RoID4gcmVzdWx0TGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXRmMTZy
ZXN1bHRMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0LCB1
dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZyZXN1bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworICAgICAgICB9CisKKyAgICAg
ICAgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ191bmljaGFyX3RvdGl0bGUoYyk7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgYm9vbCBpc0FyYWJpY0NoYXIoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2RkY7CisgICAgICAgIH0KKworICAg
ICAgICBpbmxpbmUgYm9vbCBpc0Zvcm1hdENoYXIoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ191bmljaGFyX3R5cGUoYykgPT0gR19VTklDT0RFX0ZPUk1BVDsKKyAg
ICAgICAgfQorCisgICAgICAgIGlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIzMiBj
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ191bmljaGFyX3R5cGUoYykgPT0gR19V
TklDT0RFX1NQQUNFX1NFUEFSQVRPUjsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBib29s
IGlzUHJpbnRhYmxlQ2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnX3VuaWNoYXJfaXNwcmludChjKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpbmxpbmUg
Ym9vbCBpc0RpZ2l0KFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdf
dW5pY2hhcl9pc2RpZ2l0KGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgaXNQ
dW5jdChVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJf
aXNwdW5jdChjKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBVQ2hhcjMyIG1pcnJvcmVk
Q2hhcihVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGd1bmljaGFyIG1pcnJvciA9
IDA7CisgICAgICAgICAgICBnX3VuaWNoYXJfZ2V0X21pcnJvcl9jaGFyKGMsICZtaXJyb3IpOwor
ICAgICAgICAgICAgcmV0dXJuIG1pcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBD
aGFyQ2F0ZWdvcnkgY2F0ZWdvcnkoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoYyA+IDB4ZmZmZikKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9DYXRlZ29yeTsKKworICAg
ICAgICAgICAgcmV0dXJuIChDaGFyQ2F0ZWdvcnkpIFVfTUFTSyhnX3VuaWNoYXJfdHlwZShjKSk7
CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMy
IGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhbmdvQmlkaVR5cGUgdHlwZSA9IHBhbmdvX2Jp
ZGlfdHlwZV9mb3JfdW5pY2hhcihjKTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTDogCisgICAgICAgICAgICAgICAgcmV0dXJu
IExlZnRUb1JpZ2h0OworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUjogCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFJpZ2h0VG9MZWZ0OworICAgICAgICAgICAgY2FzZSBQQU5HT19C
SURJX1RZUEVfQUw6CisgICAgICAgICAgICAgICAgcmV0dXJuIFJpZ2h0VG9MZWZ0QXJhYmljOwor
ICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTFJFOgorICAgICAgICAgICAgICAgIHJl
dHVybiBMZWZ0VG9SaWdodEVtYmVkZGluZzsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9U
WVBFX1JMRToKKyAgICAgICAgICAgICAgICByZXR1cm4gUmlnaHRUb0xlZnRFbWJlZGRpbmc7Cisg
ICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MUk86CisgICAgICAgICAgICAgICAgcmV0
dXJuIExlZnRUb1JpZ2h0T3ZlcnJpZGU7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQ
RV9STE86CisgICAgICAgICAgICAgICAgcmV0dXJuIFJpZ2h0VG9MZWZ0T3ZlcnJpZGU7CisgICAg
ICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9QREY6CisgICAgICAgICAgICAgICAgcmV0dXJu
IFBvcERpcmVjdGlvbmFsRm9ybWF0OworICAgICAgICAgICAgY2FzZSBQQU5HT19CSURJX1RZUEVf
RU46CisgICAgICAgICAgICAgICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyOworICAgICAgICAgICAg
Y2FzZSBQQU5HT19CSURJX1RZUEVfQU46CisgICAgICAgICAgICAgICAgcmV0dXJuIEFyYWJpY051
bWJlcjsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0VTOgorICAgICAgICAgICAg
ICAgIHJldHVybiBFdXJvcGVhbk51bWJlclNlcGFyYXRvcjsKKyAgICAgICAgICAgIGNhc2UgUEFO
R09fQklESV9UWVBFX0VUOgorICAgICAgICAgICAgICAgIHJldHVybiBFdXJvcGVhbk51bWJlclRl
cm1pbmF0b3I7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9DUzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ29tbW9uTnVtYmVyU2VwYXJhdG9yOworICAgICAgICAgICAgY2FzZSBQ
QU5HT19CSURJX1RZUEVfTlNNOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25TcGFjaW5nTWFy
azsKKyAgICAgICAgICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0JOOgorICAgICAgICAgICAgICAg
IHJldHVybiBCb3VuZGFyeU5ldXRyYWw7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQ
RV9COgorICAgICAgICAgICAgICAgIHJldHVybiBCbG9ja1NlcGFyYXRvcjsKKyAgICAgICAgICAg
IGNhc2UgUEFOR09fQklESV9UWVBFX1M6CisgICAgICAgICAgICAgICAgcmV0dXJuIFNlZ21lbnRT
ZXBhcmF0b3I7CisgICAgICAgICAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9XUzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV2hpdGVTcGFjZU5ldXRyYWw7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBPdGhlck5ldXRyYWw7CisgICAgICAgICAgICB9IAorICAg
ICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgaXNMb3dlcihVQ2hhcjMyIGMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNsb3dlcihjKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlubGluZSBpbnQgZGlnaXRWYWx1ZShVQ2hhcjMyIGMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfZGlnaXRfdmFsdWUoYyk7CisgICAgICAgIH0KKwor
ICAgICAgICBpbmxpbmUgdWludDhfdCBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyIGMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHJldHVybiBnX3VuaWNoYXJfY29tYmluaW5nX2NsYXNzKGMpOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgRGVjb21w
b3NpdGlvblR5cGUgZGVjb21wb3NpdGlvblR5cGUoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBGSVhNRQorICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zaXRpb25Ob25lOwor
ICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGludCB1bWVtY2FzZWNtcChjb25zdCBVQ2hhciog
YSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIEdPd25Q
dHI8Y2hhcj4gdXRmOGE7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHV0ZjhiOworCisgICAg
ICAgICAgICB1dGY4YS5zZXQoZ191dGYxNl90b191dGY4KGEsIGxlbiwgMCwgMCwgMCkpOworICAg
ICAgICAgICAgdXRmOGIuc2V0KGdfdXRmMTZfdG9fdXRmOChiLCBsZW4sIDAsIDAsIDApKTsKKwor
ICAgICAgICAgICAgR093blB0cjxjaGFyPiBmb2xkZWRBOworICAgICAgICAgICAgR093blB0cjxj
aGFyPiBmb2xkZWRCOworCisgICAgICAgICAgICBmb2xkZWRBLnNldChnX3V0ZjhfY2FzZWZvbGQo
dXRmOGEuZ2V0KCksIC0xKSk7CisgICAgICAgICAgICBmb2xkZWRCLnNldChnX3V0ZjhfY2FzZWZv
bGQodXRmOGIuZ2V0KCksIC0xKSk7CisKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBnX3V0Zjhf
Y29sbGF0ZShmb2xkZWRBLmdldCgpLCBmb2xkZWRCLmdldCgpKTsKKworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgfQorfQorCisjZW5kaWYKKwpJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYlR5cGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYlR5cGVzLmgJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVH
TGliVHlwZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVz
QGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVW5pY29kZUdMaWJU
eXBlc19oCisjZGVmaW5lIFVuaWNvZGVHTGliVHlwZXNfaAorCit0eXBlZGVmIHVpbnQxNl90IFVD
aGFyOwordHlwZWRlZiBpbnQzMl90IFVDaGFyMzI7CisKKyNlbmRpZgpJbmRleDogSmF2YVNjcmlw
dENvcmUvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZU1hY3Jvc0Zyb21JQ1Uu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5pY29k
ZU1hY3Jvc0Zyb21JQ1UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICog
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0
dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVW5pY29k
ZU1hY3Jvc0Zyb21JQ1VfaAorI2RlZmluZSBVbmljb2RlTWFjcm9zRnJvbUlDVV9oCisKKy8vIHNv
bWUgZGVmaW5lcyBmcm9tIElDVQorCisjZGVmaW5lIFUxNl9JU19MRUFEKGMpICgoKGMpJjB4ZmZm
ZmZjMDApPT0weGQ4MDApCisjZGVmaW5lIFUxNl9JU19UUkFJTChjKSAoKChjKSYweGZmZmZmYzAw
KT09MHhkYzAwKQorI2RlZmluZSBVMTZfU1VSUk9HQVRFX09GRlNFVCAoKDB4ZDgwMDw8MTBVTCkr
MHhkYzAwLTB4MTAwMDApCisjZGVmaW5lIFUxNl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFp
bCkgXAorICAgICgoKFVDaGFyMzIpKGxlYWQpPDwxMFVMKSsoVUNoYXIzMikodHJhaWwpLVUxNl9T
VVJST0dBVEVfT0ZGU0VUKQorCisjZGVmaW5lIFUxNl9MRUFEKHN1cHBsZW1lbnRhcnkpIChVQ2hh
cikoKChzdXBwbGVtZW50YXJ5KT4+MTApKzB4ZDdjMCkKKyNkZWZpbmUgVTE2X1RSQUlMKHN1cHBs
ZW1lbnRhcnkpIChVQ2hhcikoKChzdXBwbGVtZW50YXJ5KSYweDNmZil8MHhkYzAwKQorCisjZGVm
aW5lIFVfSVNfU1VSUk9HQVRFKGMpICgoKGMpJjB4ZmZmZmY4MDApPT0weGQ4MDApCisjZGVmaW5l
IFUxNl9JU19TSU5HTEUoYykgIVVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5lIFUxNl9JU19TVVJS
T0dBVEUoYykgVV9JU19TVVJST0dBVEUoYykKKyNkZWZpbmUgVTE2X0lTX1NVUlJPR0FURV9MRUFE
KGMpICgoKGMpJjB4NDAwKT09MCkKKworI2RlZmluZSBVMTZfTkVYVChzLCBpLCBsZW5ndGgsIGMp
IHsgXAorICAgIChjKT0ocylbKGkpKytdOyBcCisgICAgaWYoVTE2X0lTX0xFQUQoYykpIHsgXAor
ICAgICAgICB1aW50MTZfdCBfX2MyOyBcCisgICAgICAgIGlmKChpKTwobGVuZ3RoKSAmJiBVMTZf
SVNfVFJBSUwoX19jMj0ocylbKGkpXSkpIHsgXAorICAgICAgICAgICAgKysoaSk7IFwKKyAgICAg
ICAgICAgIChjKT1VMTZfR0VUX1NVUFBMRU1FTlRBUlkoKGMpLCBfX2MyKTsgXAorICAgICAgICB9
IFwKKyAgICB9IFwKK30KKworI2RlZmluZSBVX01BU0soeCkgKCh1aW50MzJfdCkxPDwoeCkpCisK
KyNlbmRpZgorCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMzk4ODkpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDA5LTAxLTE0ICBEb21pbmlrIFLDtnR0c2NoZXMg
IDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTkxNAorICAgICAgICBbR1RLXSBJbXBsZW1lbnQgVW5pY29kZSBm
dW5jdGlvbmFsaXR5IHVzaW5nIEdMaWIKKworICAgICAgICBNaW5vciBjaGFuZ2VzIHRoYXQgYWxs
b3cgYnVpbGRpbmcgYSBoeWJyaWQgdmVyc2lvbiBvZiBXZWJLaXQKKyAgICAgICAgdGhhdCBoYXMg
V1RGIFVuaWNvZGUgYmFja2VuZCBiYXNlZCBvbiBHTGliIGZ1bmN0aW9ucyB3aGlsZQorICAgICAg
ICB0ZXh0IGNvZGVjcyBhbmQgVGV4dEJyZWFrSXRlcmF0b3IgcmVtYWluIGJhc2VkIG9uIElDVS4K
KworICAgICAgICBGaXhlZCBzb21lIGluY2x1ZGVzIHRoYXQgd2VyZSBhc3N1bWluZyBhIFdURiBJ
Q1UgYmFja2VuZCBhbmQKKyAgICAgICAgaW50cm9kdWNlZCB0ZW1wb3JhcnkgdXNhZ2Ugb2YgV1RG
X1VTRV9HTElCX0lDVV9VTklDT0RFX0hZQlJJRAorICAgICAgICBtYWNyby4KKworICAgICAgICAq
IHBsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
R2xvYmFsRGF0YTo6VGhyZWFkR2xvYmFsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRH
bG9iYWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFk
R2xvYmFsRGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmg6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEVu
Y29kaW5nOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVn
aXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRCYXNlVGV4dENvZGVjTWFwcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpleHRlbmRUZXh0Q29kZWNNYXBzKToKKwogMjAwOS0wMS0xNCAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVsZWFzZSBidWls
ZCBmaXguCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDM5ODUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKICNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0Uo
SUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICNpbmNsdWRlICJU
ZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgogCkBAIC03MCw3ICs3MCw3IEBAIFRocmVhZEdsb2JhbERh
dGE6OlRocmVhZEdsb2JhbERhdGEoKQogICAgIDogbV9lbXB0eVN0cmluZyhuZXcgU3RyaW5nSW1w
bCkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGUobmV3IEhhc2hTZXQ8U3RyaW5nSW1wbCo+KQog
ICAgICwgbV9ldmVudE5hbWVzKG5ldyBFdmVudE5hbWVzKQotI2lmIFVTRShJQ1VfVU5JQ09ERSkK
KyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICAg
ICAsIG1fY2FjaGVkQ29udmVydGVySUNVKG5ldyBJQ1VDb252ZXJ0ZXJXcmFwcGVyKQogI2VuZGlm
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODQsNyArODQsNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+
VGhyZWFkR2xvYmFsRGF0YSgpCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGRlbGV0ZSBtX2NhY2hl
ZENvbnZlcnRlclRFQzsKICNlbmRpZgotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNV
X1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICAgICBkZWxldGUgbV9j
YWNoZWRDb252ZXJ0ZXJJQ1U7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9i
YWxEYXRhLmgJKHJldmlzaW9uIDM5ODUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9i
YWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBTdHJpbmdJbXBsKiBlbXB0eVN0cmluZygpIHsgcmV0dXJuIG1fZW1wdHlT
dHJpbmc7IH0KICAgICAgICAgSGFzaFNldDxTdHJpbmdJbXBsKj4mIGF0b21pY1N0cmluZ1RhYmxl
KCkgeyByZXR1cm4gKm1fYXRvbWljU3RyaW5nVGFibGU7IH0KIAotI2lmIFVTRShJQ1VfVU5JQ09E
RSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkK
ICAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlciYgY2FjaGVkQ29udmVydGVySUNVKCkgeyByZXR1
cm4gKm1fY2FjaGVkQ29udmVydGVySUNVOyB9CiAjZW5kaWYKIApAQCAtNTksNyArNTksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+KiBtX2F0b21p
Y1N0cmluZ1RhYmxlOwogICAgICAgICBFdmVudE5hbWVzKiBtX2V2ZW50TmFtZXM7CiAKLSNpZiBV
U0UoSUNVX1VOSUNPREUpCisjaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5J
Q09ERV9IWUJSSUQpCiAgICAgICAgIElDVUNvbnZlcnRlcldyYXBwZXIqIG1fY2FjaGVkQ29udmVy
dGVySUNVOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRh
cmllc0lDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3Vu
ZGFyaWVzSUNVLmNwcAkocmV2aXNpb24gMzk4NTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEJvdW5kYXJpZXNJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAj
aW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKwogCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgog
I2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5oCShyZXZpc2lvbiAzOTg1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNJQ1UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUg
IlRleHRDb2RlYy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogCisjaW5jbHVkZSA8dW5p
Y29kZS91dHlwZXMuaD4KKwogdHlwZWRlZiBzdHJ1Y3QgVUNvbnZlcnRlciBVQ29udmVydGVyOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nLmNwcAkocmV2aXNpb24gMzk4NTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIlRl
eHRDb2RlYy5oIgogI2luY2x1ZGUgIlRleHREZWNvZGVyLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29k
aW5nUmVnaXN0cnkuaCIKLSNpZiBVU0UoSUNVX1VOSUNPREUpCisjaWYgVVNFKElDVV9VTklDT0RF
KSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCiAjaW5jbHVkZSA8dW5pY29kZS91bm9y
bS5oPgogI2VsaWYgVVNFKFFUNF9VTklDT0RFKQogI2luY2x1ZGUgPFFTdHJpbmc+CkBAIC04Miw3
ICs4Miw3IEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoY29uc3QgVUNoYXIKICAgICBp
ZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuICIiOwogCi0jaWYgVVNFKElDVV9VTklDT0RFKQor
I2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQogICAg
IC8vIEZJWE1FOiBXaGF0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIG5vcm1hbGl6YXRpb24/CiAg
ICAgLy8gSXQncyBhIGxpdHRsZSBzdHJhbmdlIHRvIGRvIGl0IGluc2lkZSB0aGUgZW5jb2RlIGZ1
bmN0aW9uLgogICAgIC8vIFBlcmhhcHMgbm9ybWFsaXphdGlvbiBzaG91bGQgYmUgYW4gZXhwbGlj
aXQgc3RlcCBkb25lIGJlZm9yZSBjYWxsaW5nIGVuY29kZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMzk4NTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBV
U0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICNpbmNsdWRl
ICJUZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTE4NSw3ICsx
ODUsNyBAQCBzdGF0aWMgdm9pZCBidWlsZEJhc2VUZXh0Q29kZWNNYXBzKCkKICAgICBUZXh0Q29k
ZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFt
ZU1hcCk7CiAgICAgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4
dENvZGVjTWFwKTsKIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUp
IHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lz
dGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0
Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYK
QEAgLTE5Myw3ICsxOTMsNyBAQCBzdGF0aWMgdm9pZCBidWlsZEJhc2VUZXh0Q29kZWNNYXBzKCkK
IAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiB7Ci0jaWYgVVNFKElDVV9VTklD
T0RFKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklE
KQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9U
ZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlmCg==
</data>
<flag name="review"
          id="12726"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26712</attachid>
            <date>2009-01-14 08:52:19 -0800</date>
            <delta_ts>2009-05-22 10:27:30 -0700</delta_ts>
            <desc>2/4 - Moving Text Codecs to GLib</desc>
            <filename>2_4_TextCodecs_GLib.diff</filename>
            <type>text/plain</type>
            <size>37609</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5ODg5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMDEt
MTQgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAg
IEluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoIGJ5IErDvHJnIEJpbGxldGVyLgorCisgICAg
ICAgIEFkZGluZyBvcHRpb25zIGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWljdXxnbGliCisg
ICAgICAgIGFuZCBjaGVja2luZyBmb3IgcGFuZ28gdmVyc2lvbiA+PSAxLjIxLjAgaWYgR0xpYiBi
YWNrZW5kCisgICAgICAgIGlzIHNlbGVjdGVkLiBUZW1wb3JhcmlseSwgdW50aWwgcmVtYWluaW5n
IHBhcnRzIG9mCisgICAgICAgIHRoaXMgcGF0Y2ggYXJlIGNvbW1pdHRlZCwgaW50cm9kdWNlIFdU
Rl9VU0VfR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQKKyAgICAgICAgbWFjcm8gdG8gYWxsb3cgZm9y
IGEgbWl4ZWQgY29tcGlsYXRpb24sIGhlcmUgd2l0aCBXVEYgVW5pY29kZQorICAgICAgICBhbmQg
VGV4dEJyZWFrSXRlcmF0b3Igc3RpbGwgYmVpbmcgYmFzZWQgb24gSUNVLCB3aGlsZSBUZXh0IENv
ZGVjcworICAgICAgICBhcmUgbm93IGJhc2VkIG9uIEdMaWIuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMDktMDEtMTEgIFhhbiBMb3Bl
eiAgPHhhbkBnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVy
LgpJbmRleDogR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDM5ODUzKQorKysgR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDgg
KzUwLDIxIEBAIElETF9CSU5ESU5HUyA6PQogIyBHbG9iYWwgZmxhZ3MgdG8gQ1BQCiBnbG9iYWxf
Y3BwZmxhZ3MgOj0KIAoraWYgVVNFX0lDVV9VTklDT0RFCiBnbG9iYWxfY3BwZmxhZ3MgKz0gXAog
CS1EV1RGX1VTRV9JQ1VfVU5JQ09ERT0xCitlbmRpZgorCitpZiBVU0VfR0xJQl9VTklDT0RFCisj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkxNAorIyBJbiBwYXRj
aCAyLzQgd2UgYXJlIGNvbXBpbGluZyBhIGh5YnJpZCB2ZXJzaW9uIG9mIElDVSBXVEYgVW5pY29k
ZQorIyBhbmQgVGV4dEJyZWFrSXRlcmF0b3IgZnVuY3Rpb25hbGl0eSBtaXhlZCB3aXRoIEdMaWIt
YmFzZWQgdGV4dCBjb2RlY3MuCisjIEZvciB0aGUgdHJhbnNpdGlvbiwgaW50cm9kdWNpbmcgYW4g
aW50ZXJpbSBIWUJSSUQgbWFjcm8uCisjIFRoaXMgbWFjcm8gd2lsbCBiZSByZW1vdmVkIHdpdGgg
cGF0Y2ggMy80IG9mIHRoZSBhYm92ZSBidWcuCitnbG9iYWxfY3BwZmxhZ3MgKz0gXAorCS1EV1RG
X1VTRV9HTElCX1VOSUNPREU9MSBcCisJLURXVEZfVVNFX0dMSUJfSUNVX1VOSUNPREVfSFlCUklE
PTEKK2VuZGlmCiAKICMgRGVmYXVsdCBjb21waWxlciBmbGFncwogZ2xvYmFsX2NmbGFncyA6PSBc
CkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZmlndXJlLmFjCShyZXZpc2lv
biAzOTg1MykKKysrIGNvbmZpZ3VyZS5hYwkod29ya2luZyBjb3B5KQpAQCAtMjIyLDE4ICsyMjIs
MjMgQEAgQUNfU1VCU1QoW1BOR19MSUJTXSkKICMgZGV0ZXJtaW5lIHRoZSBVbmljb2RlIGJhY2tl
bmQKIEFDX01TR19DSEVDS0lORyhbdGhlIFVuaWNvZGUgYmFja2VuZCB0byB1c2VdKQogQUNfQVJH
X1dJVEgodW5pY29kZV9iYWNrZW5kLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0
aC11bmljb2RlLWJhY2tlbmQ9QDw6QGljdUA6PkBdLAorICAgICAgICAgICAgQUNfSEVMUF9TVFJJ
TkcoWy0td2l0aC11bmljb2RlLWJhY2tlbmQ9QDw6QGljdS9nbGliQDo+QF0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbU2VsZWN0IFVuaWNvZGUgYmFja2VuZCBbZGVmYXVsdD1pY3VdXSks
Ci0gICAgICAgICAgICBbXSxbdW5pY29kZV9iYWNrZW5kPSJpY3UiXSkKKyAgICAgICAgICAgIFtd
LFt3aXRoX3VuaWNvZGVfYmFja2VuZD0iaWN1Il0pCiAKLWNhc2UgIiR1bmljb2RlX2JhY2tlbmQi
IGluCi0gICAgIGljdSkgOzsKLSAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIFVuaWNvZGUg
YmFja2VuZDogbXVzdCBiZSBpY3UuXSkgOzsKK2Nhc2UgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIg
aW4KKyAgICAgaWN1fGdsaWIpIDs7CisgICAgICopIEFDX01TR19FUlJPUihbSW52YWxpZCBVbmlj
b2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1IG9yIGdsaWIuXSkgOzsKIGVzYWMKIAotQUNfTVNHX1JF
U1VMVChbJHVuaWNvZGVfYmFja2VuZF0pCitBQ19NU0dfUkVTVUxUKFskd2l0aF91bmljb2RlX2Jh
Y2tlbmRdKQogCi1pZiB0ZXN0ICIkdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCisjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTkxNAorIyBTcGxpdHRpbmcg
SUNVIHJlbW92YWwgcGF0Y2ggaW50byBzbWFsbGVyIHBvcnRpb25zLiBXZSBjb21waWxlIGEgaHli
cmlkIHZlcnNpb24sIGhlcmUKKyMgd2l0aCB0aGUgV1RGIFVuaWNvZGUgYmFja2VuZCBiZWluZyBi
YXNlZCBvbiBJQ1Ugd2hpbGUgdGV4dCBjb2RlYyBpcyBiYXNlZCBvbiBHTGliLgorIyBUZXh0QnJl
YWtJdGVyYXRvciBrZWVwcyBpdHMgSUNVIGRlcGVuZGVuY3kgYXMgd2VsbCwgdGhpcyB3aWxsIGJl
IHJlbW92ZWQgaW4gcGF0Y2ggMy80LgorIyBTbywgdGhhdCdzIHdoeSB3ZSB0ZW1wb3JhcmlseSBh
ZGQgaWN1IGhlYWRlcnMgYW5kIGxpYnMgZm9yIGdsaWIgY29uZmlnIGNhc2UgYXMgd2VsbC4KK2lm
IHRlc3QgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiaWN1IiAtbyAiJHdpdGhfdW5pY29kZV9i
YWNrZW5kIiA9ICJnbGliIjsgdGhlbgogCUFDX1BBVEhfUFJPRyhpY3VfY29uZmlnLCBpY3UtY29u
ZmlnLCBubykKIAlpZiB0ZXN0ICIkaWN1X2NvbmZpZyIgPSAibm8iOyB0aGVuCiAJCWlmIHRlc3Qg
IiRvc19kYXJ3aW4iID0gInllcyI7IHRoZW4KQEAgLTI1NCw2ICsyNTksMTcgQEAgaWYgdGVzdCAi
JHVuaWNvZGVfYmFja2VuZCIgPSAiaWN1IjsgdGhlbgogCWZpCiBmaQogCitpZiB0ZXN0ICIkd2l0
aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiOyB0aGVuCisJIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKwkjIFNwbGl0dGluZyBJQ1UgcmVtb3ZhbCBwYXRj
aCBpbnRvIHNtYWxsZXIgcG9ydGlvbnMsIHRoYXQncyB3aHkgd2UKKwkjIHRlbXBvcmFyaWx5IHJl
dHJpZXZlIGZsYWdzICYgbGlicyBpbmZvIGZvciBnbGliIGludG8gVU5JQ09ERUdMSUIKKwkjIGlu
c3RlYWQgb2YgVU5JQ09ERSB2YXJpYWJsZSwgdGhlbiBjb25jYXRlbmF0ZS4KKwkjIFBhdGNoIDMv
NCBvZiB0aGUgYWJvdmUgaXNzdWUgd2lsbCByZW5hbWUgdGhlIHZhcmlhYmxlIGJhY2sgdG8gVU5J
Q09ERS4KKwlQS0dfQ0hFQ0tfTU9EVUxFUyhbVU5JQ09ERUdMSUJdLCBbZ2xpYi0yLjAgcGFuZ28g
Pj0gMS4yMS4wXSkKKwlVTklDT0RFX0NGTEFHUz0iJFVOSUNPREVfQ0ZMQUdTICRVTklDT0RFR0xJ
Ql9DRkxBR1MiCisJVU5JQ09ERV9MSUJTPSIkVU5JQ09ERV9MSUJTICRVTklDT0RFR0xJQl9MSUJT
IgorZmkKKwogQUNfU1VCU1QoW1VOSUNPREVfQ0ZMQUdTXSkKIEFDX1NVQlNUKFtVTklDT0RFX0xJ
QlNdKQogCkBAIC03MTIsNiArNzI4LDEwIEBAIEFNX0NPTkRJVElPTkFMKFtUQVJHRVRfV0lOMzJd
LCBbdGVzdCAiJHcKIEFNX0NPTkRJVElPTkFMKFtUQVJHRVRfUVVBUlRaXSwgW3Rlc3QgIiR3aXRo
X3RhcmdldCIgPSAicXVhcnR6Il0pCiBBTV9DT05ESVRJT05BTChbVEFSR0VUX0RJUkVDVEZCXSwg
W3Rlc3QgIiR3aXRoX3RhcmdldCIgPSAiZGlyZWN0ZmIiXSkKIAorIyBVbmljb2RlIGJhY2tlbmQg
Y29uZGl0aW9uYWxzCitBTV9DT05ESVRJT05BTChbVVNFX0lDVV9VTklDT0RFXSwgW3Rlc3QgIiR3
aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiaWN1Il0pCitBTV9DT05ESVRJT05BTChbVVNFX0dMSUJf
VU5JQ09ERV0sIFt0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImdsaWIiXSkKKwogIyBI
VFRQIGJhY2tlbmQgY29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbVVNFX0NVUkxdLCBbdGVz
dCAiJHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJjdXJsIl0pCiBBTV9DT05ESVRJT05BTChbVVNFX1NP
VVBdLCBbdGVzdCAiJHdpdGhfaHR0cF9iYWNrZW5kIiA9ICJzb3VwIl0pCkBAIC03NjEsNyArNzgx
LDcgQEAgQnVpbGQgY29uZmlndXJhdGlvbjoKICBFbmFibGUgZGVidWdnaW5nIChzbG93KSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZGVidWcKICBFbmFibGUgR0ND
IGJ1aWxkIG9wdGltaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVf
b3B0aW1pemF0aW9ucwogIENvZGUgY292ZXJhZ2Ugc3VwcG9ydCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogJGVuYWJsZV9jb3ZlcmFnZQotIFVuaWNvZGUgYmFja2VuZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHVuaWNvZGVfYmFja2VuZAor
IFVuaWNvZGUgYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogJHdpdGhfdW5pY29kZV9iYWNrZW5kCiAgSFRUUCBiYWNrZW5kICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF9odHRwX2JhY2tlbmQKICBGb250IGJh
Y2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR3aXRo
X2ZvbnRfYmFja2VuZAogIE9wdGltaXplZCBtZW1vcnkgYWxsb2NhdG9yICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogJGVuYWJsZV9mYXN0X21hbGxvYwpJbmRleDogSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMzk4ODkpCisrKyBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNiBAQAorMjAwOS0wMS0xNCAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5p
ay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVuaWNvZGUgZnVuY3Rpb25h
bGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgTWlub3IgY29tcGlsZSBzd2l0Y2ggY2hhbmdlIGlu
IG9yZGVyIHRvIGFsbG93IGh5YnJpZCBjb21waWxhdGlvbiB3aGVyZQorICAgICAgICBXVEYgVW5p
Y29kZSBiYWNrZW5kIGlzIHN0aWxsIElDVSBiYXNlZCwgYnV0IFRleHQgQ29kZWNzCisgICAgICAg
IGFyZSBub3cgYmFzZWQgb24gR0xpYi4KKworICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUu
aDoKKwogMjAwOS0wMS0xMyAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIgYW5kIE9saXZlciBIdW50LgpJbmRleDogSmF2YVNj
cmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAkocmV2aXNpb24gMzk4NTMpCisrKyBKYXZhU2NyaXB0
Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKIAogI2lmIFVTRShRVDRfVU5JQ09ERSkKICNpbmNsdWRlICJxdDQvVW5pY29kZVF0NC5oIgot
I2VsaWYgVVNFKElDVV9VTklDT0RFKQorI2VsaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJ
Ql9JQ1VfVU5JQ09ERV9IWUJSSUQpCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJ
Y3UuaD4KICNlbHNlCiAjZXJyb3IgIlVua25vd24gVW5pY29kZSBpbXBsZW1lbnRhdGlvbiIKSW5k
ZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAzOTg4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNDUgQEAKKzIwMDktMDEtMTQgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9l
dHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkg
dXNpbmcgR0xpYgorCisgICAgICAgIEluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoIGJ5IErD
vHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKworICAgICAgICBBZGRlZCBwcm9iaW5nIGZv
ciBhIGhhcmQtY29kZWQgbGlzdHMgb2YgdGV4dCBlbmNvZGluZ3MuCisgICAgICAgIFRoZSBiYXNp
cyBvZiB0aGlzIGxpc3QgaXMgdGFrZW4gZnJvbSB0aGUgZW5jb2RpbmdzIHN1cHBvcnRlZCBieSBp
Y29udiwKKyAgICAgICAgdGhlbiBleHRlbmRlZCBieSBlLmcuIHRpcy02MjAsIHdpbmRvd3MtMTI1
MSwgZXVjLWtyLCB3aW5kb3dzLTEyNTMgYW5kCisgICAgICAgIGEgbnVtYmVyIG9mIENoaW5lc2Ug
b25lcy4KKworICAgICAgICBQcm9iaW5nIGlzIG5lY2Vzc2FyeSB3aXRoIHRoZSBjdXJyZW50IGRl
c2lnbiBvZiB0ZXh0IGNvZGVjcworICAgICAgICBhcyBpY29udi5oIGRvZXMgbm90IHN1cHBvcnQg
ZW51bWVyYXRpbmcgYXZhaWxhYmxlIGVuY29kaW5ncy4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRFbmNvZGluZzo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRl
eHRDb2RlY01hcHMpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6bmV3VGV4dENvZGVjR3RrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6aXNFbmNvZGluZ0F2YWlsYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENvZGVjR3RrOjpyZWxlYXNlSUNvbnYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVj
R3RrOjpjcmVhdGVJQ29udkRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3Rr
OjpjcmVhdGVJQ29udkVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjplbmNvZGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oOiBBZGRlZC4KKwogMjAwOS0wMS0x
NCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVsZWFz
ZSBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM5ODUzKQorKysgV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQxNCw4ICsxNDE0LDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJbnRl
cm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjSUNVLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5o
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNwcCBcCiAJV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjVVRGMTYuY3BwIFwKQEAgLTE3NTYsNiArMTc1NCwyNCBAQCB3ZWJjb3JlZ3Rr
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRlcmF0
b3JJbnRlcm5hbElDVUd0ay5jcHAKIAogIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQKKyMg
LS0tLQoraWYgVVNFX0lDVV9VTklDT0RFCit3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAorCVdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dENvZGVjSUNVLmgKK2VuZGlmICMgVVNFX0lDVV9VTklDT0RFCisKKyMgLS0tLQorIyBn
bGliIHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfR0xJQl9VTklDT0RFCit3ZWJjb3Jl
Z3RrX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3Rr
LmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAorZW5kaWYK
KworIyAtLS0tCiAjIGN1cmwgaHR0cCBiYWNrZW5kCiAjIC0tLS0KIGlmIFVTRV9DVVJMCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAkocmV2aXNpb24gMzk4NTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNlbGlmIFVTRShR
VDRfVU5JQ09ERSkKICNpbmNsdWRlIDxRU3RyaW5nPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkK
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KICNlbmRpZgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtMTEyLDYg
KzExNSwyMCBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyCiAgICAg
UVN0cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBs
ZW5ndGgpOwogICAgIHN0ciA9IHN0ci5ub3JtYWxpemVkKFFTdHJpbmc6Ok5vcm1hbGl6YXRpb25G
b3JtX0MpOwogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgoKSwgaGFuZGxp
bmcpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBHT3duUHRyPGNoYXI+IHV0Zjhzb3Vy
Y2U7CisgICAgdXRmOHNvdXJjZS5zZXQoZ191dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0
aCwgMCwgMCwgMCkpOworCisgICAgR093blB0cjxjaGFyPiB1dGY4bm9ybWFsaXplZDsKKyAgICB1
dGY4bm9ybWFsaXplZC5zZXQoZ191dGY4X25vcm1hbGl6ZSh1dGY4c291cmNlLmdldCgpLCAtMSwg
R19OT1JNQUxJWkVfTkZDKSk7CisKKyAgICBsb25nIHV0ZjE2bGVuZ3RoOworICAgIEdPd25QdHI8
VUNoYXI+IHV0ZjE2bm9ybWFsaXplZDsKKyAgICB1dGYxNm5vcm1hbGl6ZWQuc2V0KGdfdXRmOF90
b191dGYxNih1dGY4bm9ybWFsaXplZC5nZXQoKSwgLTEsIDAsICZ1dGYxNmxlbmd0aCwgMCkpOwor
CisgICAgQ1N0cmluZyByZXN1bHQgPSBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUodXRmMTZu
b3JtYWxpemVkLmdldCgpLCB1dGYxNmxlbmd0aCwgaGFuZGxpbmcpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDM5ODUzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsOSBAQAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0LmgiCiAj
ZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiZ3RrL1RleHRDb2RlY0d0ay5oIgor
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTE4OSw2ICsxOTIsMTEgQEAgc3Rh
dGljIHZvaWQgYnVpbGRCYXNlVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjSUNVOjpyZWdp
c3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4
dENvZGVjSUNVOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2VuZGlm
CisKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNl
RW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY0d0
azo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBz
dGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKQEAgLTIwNyw2ICsyMTUsMTEgQEAgc3Rh
dGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3Rl
ckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNN
YWM6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgorCisjaWYgVVNF
KEdMSUJfVU5JQ09ERSkKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGlu
Z05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdp
c3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgogfQogCiBzdGQ6
OmF1dG9fcHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjKGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0Bh
Y2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXh0Q29kZWNHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKwordXNpbmcgc3RkOjphdXRvX3B0cjsKK3VzaW5nIHN0ZDo6bWluOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKworCisvLyBhcHBlbmRPbWl0dGluZ0JPTSBpcyBnb25lIChodHRwOi8vdHJh
Yy53ZWJraXQub3JnL2NoYW5nZXNldC8zMzM4MCksIHNvIHdlIG5lZWQgdG8gYXZvaWQgZ2VuZXJh
dGluZyBleHRyYSBCT00ncworLy8gaGVyZS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgc3BlY2lm
eWluZyB0aGUgVVRGLTE2IGNvZGVjcycgZW5kaWFubmVzcyBleHBsaWNpdGx5IHdoZW4gaW5pdGlh
bGl6aW5nIGljb252CisKKyNpZiAoR19CWVRFX09SREVSID09IEdfQklHX0VORElBTikKKyAgICBj
b25zdCBnY2hhciogV2ViQ29yZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdOYW1l
ID0gIlVURi0xNkJFIjsKKyNlbHNlIAorICAgIGNvbnN0IGdjaGFyKiBXZWJDb3JlOjpUZXh0Q29k
ZWNHdGs6Om1faW50ZXJuYWxFbmNvZGluZ05hbWUgPSAiVVRGLTE2TEUiOworI2VuZGlmCisKKwor
Ly8gbGlzdCBvZiB0ZXh0IGVuY29kaW5ncyBhbmQgdGhlaXIgYWxpYXNlcworLy8gdGhlIGZpcnN0
IGVudHJ5LyJhbGlhcyIgaXMgdGhlIGNhbm9uaWNhbCBuYW1lLCBlYWNoIGFsaWFzIGxpc3QgbXVz
dCBiZSB0ZXJtaW5hdGVkIGJ5IGEgMAorCisvLyBVbmljb2RlCitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfVVRGXzggICAgICAgICAgICA9
IHsgIlVURi04IiwgMH07IAorCisvLyBXZXN0ZXJuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMSAgICAgICA9IHsgIklT
Ty04ODU5LTEiLCAiQ1A4MTkiLCAiSUJNODE5IiwgIklTTy1JUi0xMDAiLCAiSVNPODg1OS0xIiwg
IklTT184ODU5LTEiLCAiSVNPXzg4NTktMToxOTg3IiwgICJMMSIsICJMQVRJTjEiLCAiQ1NJU09M
QVRJTjEiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjpt
X2NvZGVjQWxpYXNlc19NQUNST01BTiAgICAgICAgID0geyAiTUFDUk9NQU4iLCAiTUFDIiwgIk1B
Q0lOVE9TSCIsICJDU01BQ0lOVE9TSCIsIDB9OworCisvLyBKYXBhbmVzZQorVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1NISUZUX0pJUyAg
ICAgICAgPSB7ICJTaGlmdF9KSVMiLCAiTVNfS0FOSkkiLCAiU0hJRlQtSklTIiwgIlNKSVMiLCAi
Q1NTSElGVEpJUyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0VVQ19KUCAgICAgICAgICAgPSB7ICJFVUNfSlAiLCAiRVVDLUpQ
IiwgIkVVQ0pQIiwgIkVYVEVOREVEX1VOSVhfQ09ERV9QQUNLRURfRk9STUFUX0ZPUl9KQVBBTkVT
RSIsICJDU0VVQ1BLREZNVEpBUEFORVNFIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlAgICAgICA9IHsgIklT
Ty0yMDIyLUpQIiwgMH07CisKKy8vIFRyYWRpdGlvbmFsIENoaW5lc2UKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19CSUc1ICAgICAgICAg
ICAgID0geyAiQklHNSIsICJCSUctNSIsICJCSUctRklWRSIsICJCSUc1IiwgIkJJR0ZJVkUiLCAi
Q04tQklHNSIsICJDU0JJRzUiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19CSUc1X0hLU0NTICAgICAgID0geyAiQklHNS1IS1ND
UyIsICJCSUc1LUhLU0NTOjIwMDQiLCAiQklHNUhLU0NTIiwgMH07CitUZXh0Q29kZWNHdGs6OmNv
ZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A5NTAgICAgICAgICAg
ICA9IHsgIkNQOTUwIiwgMH07CisKKy8vIEtvcmVhbgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSICAgICAgPSB7ICJJ
U08tMjAyMi1LUiIsICJDU0lTTzIwMjJLUiIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTQ5ICAgICAgICAgICAgPSB7ICJD
UDk0OSIsICJVSEMiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19FVUNfS1IgICAgICAgICAgID0geyAiRVVDLUtSIiwgIkNTRVVD
S1IiLCAwIH07CisKKy8vIEFyYWJpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0
Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzYgICAgICAgPSB7ICJJU08tODg1OS02
IiwgIkFSQUJJQyIsICJBU01PLTcwOCIsICJFQ01BLTExNCIsICJJU08tSVItMTI3IiwgIklTTzg4
NTktNiIsICJJU09fODg1OS02IiwgIklTT184ODU5LTY6MTk4NyIsICJDU0lTT0xBVElOQVJBQklD
IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfQ1AxMjU2ICAgICAgICAgICA9IHsgIndpbmRvd3MtMTI1NiIsICJDUDEyNTYiLCAi
TVMtQVJBQiIsIDB9OyAvLyByZWFycmFuZ2VkLCB3aW5kb3dzLTEyNTYgbm93IGRlY2xhcmVkIHRo
ZSBjYW5vbmljYWwgbmFtZSBhbmQgcHV0IHRvIGxvd2VyY2FzZSB0byBmaXggL2Zhc3QvZW5jb2Rp
bmcvYWhyYW0tb3JnLWVnLmh0bWwgdGVzdCBjYXNlCisKKy8vIEhlYnJldworVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5Xzgg
ICAgICAgPSB7ICJJU08tODg1OS04IiwgIkhFQlJFVyIsICJJU08tODg1OS04IiwgIklTTy1JUi0x
MzgiLCAiSVNPODg1OS04IiwgIklTT184ODU5LTgiLCAiSVNPXzg4NTktODoxOTg4IiwgIkNTSVNP
TEFUSU5IRUJSRVciLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTUgICAgICAgICAgID0geyAid2luZG93cy0xMjU1Iiwg
IkNQMTI1NSIsICJNUy1IRUJSIiwgMH07IC8vIHJlYXJyYW5nZWQsIG1vdmVkIHdpbmRvd3MtMTI1
NSBhcyBjYW5vbmljYWwgYW5kIGxvd2VyY2FzZWQsIGZpeGluZyAvZmFzdC9lbmNvZGluZy9tZXRh
LWNoYXJzZXQuaHRtbAorCisvLyBHcmVlaworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBU
ZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzcgICAgICAgPSB7ICJJU08tODg1
OS03IiwgIkVDTUEtMTE4IiwgIkVMT1RfOTI4IiwgIkdSRUVLIiwgIkdSRUVLOCIsICJJU08tSVIt
MTI2IiwgIklTTzg4NTktNyIsICJJU09fODg1OS03IiwgIklTT184ODU5LTc6MTk4NyIsICJJU09f
ODg1OS03OjIwMDMiLCAiQ1NJIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1A4NjkgICAgICAgICAgICA9IHsgIkNQODY5Iiwg
Ijg2OSIsICJDUC1HUiIsICJJQk04NjkiLCAiQ1NJQk04NjkiLCAwfTsKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMg
ICAgID0geyAiV0lORE9XUy0xMjUzIiwgMCB9OworCisvLyBDeXJpbGxpYworVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUg
ICAgICAgPSB7ICJJU08tODg1OS01IiwgIkNZUklMTElDIiwgIklTTy1JUi0xNDQiLCAiSVNPODg1
OS01IiwgIklTT184ODU5LTUiLCAiSVNPXzg4NTktNToxOTg4IiwgIkNTSVNPTEFUSU5DWVJJTExJ
QyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0tPSThfUiAgICAgICAgICAgPSB7ICJLT0k4LVIiLCAiQ1NLT0k4UiIsIDB9Owor
VGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2Vz
X0NQODY2ICAgICAgICAgICAgPSB7ICJDUDg2NiIsICI4NjYiLCAiSUJNODY2IiwgIkNTSUJNODY2
IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfS09JOF9VICAgICAgICAgICA9IHsgIktPSTgtVSIsIDB9OworVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1
MSAgICAgPSB7ICJ3aW5kb3dzLTEyNTEiLCAiQ1AxMjUxIiwgMH07IC8vIENQMTI1MSBhZGRlZCB0
byBwYXNzIC9mYXN0L2VuY29kaW5nL2NoYXJzZXQtY3AxMjUxLmh0bWwKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQyAg
ICAgID0geyAibWFjLWN5cmlsbGljIiwgIk1BQ0NZUklMTElDIiwgIngtbWFjLWN5cmlsbGljIiwg
MH07IAorCisvLyBUaGFpCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfQ1A4NzQgICAgICAgICAgICA9IHsgIkNQODc0IiwgIldJTkRPV1Mt
ODc0IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfVElTXzYyMCAgICAgICAgICA9IHsgIlRJUy02MjAiLCAwfTsKKworLy8gU2lt
cGxpZmllZCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfR0JLICAgICAgICAgICAgICA9IHsgIkdCSyIsIDB9OworVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0haICAg
ICAgICAgICAgICAgPSB7ICJIWiIsICJIWi1HQi0yMzEyIiwgMH07CitUZXh0Q29kZWNHdGs6OmNv
ZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfR0IxODAzMCAgICAgICAg
ICA9IHsgIkdCMTgwMzAiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19FVUNfQ04gICAgICAgICAgID0geyAiRVVDX0NOIiwgIkVV
Q0NOIiwgIkdCMjMxMiIsICJDTi1HQiIsICJDU0dCMjMxMiIsICJFVUNfQ04iLCAwfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc18yMzEy
XzgwICAgICAgICAgID0geyAiR0JfMjMxMi04MCIsICJDSElORVNFIiwgImNzSVNPNThHQjIzMTI4
MCIsICJHQjIzMTIuMTk4MC0wIiwgIklTTy1JUi01OCIgfTsKKworLy8gQ2VudHJhbCBFdXJvcGVh
bgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlh
c2VzX0lTT184ODU5XzIgICAgICAgPSB7ICJJU08tODg1OS0yIiwgIklTTy1JUi0xMDEiLCAiSVNP
ODg1OS0yIiwgIklTT184ODU5LTIiLCAiSVNPXzg4NTktMjoxOTg3IiwgIkwyIiwgIkxBVElOMiIs
ICJDU0lTT0xBVElOMiIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1MCAgICAgICAgICAgPSB7ICJDUDEyNTAiLCAiTVMt
RUUiLCAiV0lORE9XUy0xMjUwIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSA9IHsgIk1BQ0NFTlRS
QUxFVVJPUEUiLCAwfTsKKworLy8gVmlldG5hbWVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1OCAgICAgICAgICAgPSB7ICJD
UDEyNTgiLCAiV0lORE9XUy0xMjU4IiwgMH07CisKKy8vIFR1cmtpc2gKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTQgICAgICAg
ICAgID0geyAiQ1AxMjU0IiwgIk1TLVRVUksiLCAiV0lORE9XUy0xMjU0IiwgMH07CitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4
NTlfOSAgICAgICA9IHsgIklTTy04ODU5LTkiLCAiSVNPLUlSLTE0OCIsICJJU084ODU5LTkiLCAi
SVNPXzg4NTktOSIsICJJU09fODg1OS05OjE5ODkiLCAiTDUiLCAiTEFUSU41IiwgIkNTSVNPTEFU
SU41IiwgMH07CisKKy8vIEJhbHRpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0
Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NyAgICAgICAgICAgPSB7ICJDUDEyNTciLCAi
V0lOQkFMVFJJTSIsICJXSU5ET1dTLTEyNTciLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlh
c0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV80ICAgICAgID0geyAi
SVNPLTg4NTktNCIsICJJU08tSVItMTEwIiwgIklTTzg4NTktNCIsICJJU09fODg1OS00IiwgIklT
T184ODU5LTQ6MTk4OCIsICJMNCIsICJMQVRJTjQiLCAiQ1NJU09MQVRJTjQiLCAwfTsKKworZ2Nv
bnN0cG9pbnRlciBjb25zdCBUZXh0Q29kZWNHdGs6Om1faWNvbnZCYXNlQ29kZWNMaXN0W10gPSB7
IAorICAgIC8vIFVuaWNvZGUKKyAgICAmbV9jb2RlY0FsaWFzZXNfVVRGXzgsCisKKyAgICAvLyBX
ZXN0ZXJuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzEKK307CisKK2djb25zdHBvaW50
ZXIgY29uc3QgVGV4dENvZGVjR3RrOjptX2ljb252RXh0ZW5kZWRDb2RlY0xpc3RbXSA9IAorewor
ICAgIC8vIFdlc3Rlcm4KKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4sCisKKyAgICAvLyBK
YXBhbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19TSElGVF9KSVMsCisgICAgJm1fY29kZWNBbGlh
c2VzX0VVQ19KUCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlAsCisKKyAgICAvLyBT
aW1wbGlmaWVkIENoaW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfQklHNSwKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfQklHNV9IS1NDUywKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A5NTAsCisKKyAgICAv
LyBLb3JlYW4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1IsCisgICAgJm1fY29kZWNB
bGlhc2VzX0NQOTQ5LAorICAgICZtX2NvZGVjQWxpYXNlc19FVUNfS1IsCisKKyAgICAvLyBBcmFi
aWMKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNiwKKyAgICAmbV9jb2RlY0FsaWFzZXNf
Q1AxMjU2LAorICAgIAorICAgIC8vIEhlYnJldworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1
OV84LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTUsCisgICAgCisgICAgLy8gR3JlZWsKKyAg
ICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNywKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4Njks
CisgICAgJm1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MywKKyAgICAKKyAgICAvLyBDeXJpbGxp
YworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV81LAorICAgICZtX2NvZGVjQWxpYXNlc19L
T0k4X1IsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQODY2LAorICAgICZtX2NvZGVjQWxpYXNlc19L
T0k4X1UsCisgICAgJm1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MSwKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfTUFDQ1lSSUxMSUMsCisgICAgCisgICAgLy8gVGhhaQorICAgICZtX2NvZGVjQWxpYXNl
c19DUDg3NCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfVElTXzYyMCwKKyAgICAKKyAgICAvLyBUcmFk
aXRpb25hbCBDaGluZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0dCSywKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfSFosCisgICAgJm1fY29kZWNBbGlhc2VzX0dCMTgwMzAsCisgICAgJm1fY29kZWNBbGlh
c2VzX0VVQ19DTiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfMjMxMl84MCwKKyAgICAKKyAgICAvLyBD
ZW50cmFsIEV1cm9wZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzIsCisgICAgJm1f
Y29kZWNBbGlhc2VzX0NQMTI1MCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9Q
RSwKKyAgICAKKyAgICAvLyBWaWV0bmFtZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1OCwK
KyAgICAKKyAgICAvLyBUdXJraXNoCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NCwKKyAgICAm
bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOSwKKyAgICAKKyAgICAvLyBCYWx0aWMKKyAgICAmbV9j
b2RlY0FsaWFzZXNfQ1AxMjU3LAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV80Cit9Owor
CisKK2NvbnN0IHNpemVfdCBDb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDE2Mzg0OworICAgIAorCitz
dGF0aWMgYXV0b19wdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8vIHRv
byBub2lzeSBpZiBlYWNoIFVURi04IGNvZGVjIGNyZWF0aW9uIGlzIGxvZ2dlZAorICAgIC8vIGlm
IChzdHJjbXAoZW5jb2RpbmcubmFtZSgpLCAiVVRGLTgiKSkKKyAgICAvLyAgICAgTE9HKFRleHRD
b252ZXJzaW9uLCAiY3JlYXRpbmcgbmV3IHRleHQgY29kZWMgZm9yIGVuY29kaW5nIG5hbWUgJXMi
LCBlbmNvZGluZy5uYW1lKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gYXV0b19wdHI8VGV4dENv
ZGVjPihuZXcgVGV4dENvZGVjR3RrKGVuY29kaW5nKSk7Cit9CisKK2dib29sZWFuIFRleHRDb2Rl
Y0d0azo6aXNFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciogZW5jTmFtZSkKK3sKKyAgICBH
SUNvbnYgdGVzdGVyOworICAgIC8vIHRlc3QgZGVjb2RpbmcKKyAgICB0ZXN0ZXIgPSBnX2ljb252
X29wZW4obV9pbnRlcm5hbEVuY29kaW5nTmFtZSwgZW5jTmFtZSk7CisgICAgaWYgKHRlc3RlciA9
PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIExPR19FUlJPUigiJXMg
bm90IGRlY29kYWJsZSA9PiBub3QgYXZhaWxhYmxlISIsIGVuY05hbWUpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOwor
ICAgICAgICAvLyB0ZXN0IGVuY29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3Blbihl
bmNOYW1lLCBtX2ludGVybmFsRW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSBy
ZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIiVz
IG5vdCBlbmNvZGFibGUgPT4gbm90IGF2YWlsYWJsZSEiLCBlbmNOYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdfaWNvbnZfY2xv
c2UodGVzdGVyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFt
ZVJlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCog
Y29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlzdExlbmd0aCA9IDA7Cisg
ICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRl
ZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRD
b2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2Rp
bmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXpl
b2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
Y29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0
Kj4oZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAgICAgaW50IGNvZGVjQ291bnQgPSAtMTsKKyAgICAg
ICAgY29uc3QgZ2NoYXIgKmNhbm9uaWNhbE5hbWUsICpjdXJyZW50QWxpYXM7CisgICAgICAgIGJv
b2wgY2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIGZvciBl
YWNoIG9mIHRoZSBhbGlhcyBsaXN0czoKKyAgICAgICAgLy8gYmFpbCBvdXQgaWYgY2Fub25pY2Fs
IGlzIG5vdCBhdmFpbGFibGUsCisgICAgICAgIC8vIHRoZW4gY29udGludWUgdGVzdGluZyBlYWNo
IGFsaWFzLCAKKyAgICAgICAgLy8gaWYgYXZhaWxhYmxlLCBhZGQgaXQgdG8gdGhlIGxpc3QsIG1h
cHBpbmcgaXQgdG8gaXRzIGNhbm9uaWNhbCBuYW1lCisKKyAgICAgICAgd2hpbGUgKChjdXJyZW50
QWxpYXMgPSAoKmNvZGVjQWxpYXNlcylbKytjb2RlY0NvdW50XSkgJiYgY2Fub25pY2FsQXZhaWxh
YmxlKSB7CisgICAgICAgICAgICBib29sIGN1cnJlbnRBdmFpbGFibGUgPSBpc0VuY29kaW5nQXZh
aWxhYmxlKGN1cnJlbnRBbGlhcyk7CisKKyAgICAgICAgICAgIGlmIChjb2RlY0NvdW50ID09IDAg
JiYgY3VycmVudEF2YWlsYWJsZSkgeworICAgICAgICAgICAgICAgIGNhbm9uaWNhbE5hbWUgPSBj
dXJyZW50QWxpYXM7CisgICAgICAgICAgICAgICAgY2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBMT0dfVkVSQk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5n
IGVuY29kaW5nIGNhbm9uaWNhbCAlcyIsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAg
IHJlZ2lzdHJhcihjYW5vbmljYWxOYW1lLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY29kZWNDb3VudCA9PSAwICYmICFjdXJyZW50QXZhaWxhYmxlKQorICAgICAgICAg
ICAgICAgIGNhbm9uaWNhbEF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAo
Y29kZWNDb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJs
ZShjdXJyZW50QWxpYXMpKSB7CisgICAgICAgICAgICAgICAgICAgIExPR19WRVJCT1NFKFRleHRD
b252ZXJzaW9uLCAicmVnaXN0ZXJpbmcgZW5jb2RpbmcgbmFtZSBhbGlhcyAlcyB0byBjYW5vbmlj
YWwgJXMiLCBjdXJyZW50QWxpYXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgICAg
ICByZWdpc3RyYXIoY3VycmVudEFsaWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KK30KKwordm9pZCBUZXh0Q29k
ZWNHdGs6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wg
ZXh0ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1
bnNpZ25lZCBpbnQgbGlzdExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAg
IGVuY29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExl
bmd0aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xp
c3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3Np
emVvZihncG9pbnRlcik7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBsaXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNl
cyA9IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAg
ICAgLy8gYnkgY29udmVudGlvbiwgdGhlIGZpcnN0ICJhbGlhcyIgc2hvdWxkIGJlIHRoZSBjYW5v
bmljYWwgbmFtZSwgc2VlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcyBsaXN0cyAKKyAgICAg
ICAgY29uc3QgZ2NoYXIgKmNvZGVjTmFtZSA9ICgqY29kZWNBbGlhc2VzKVswXTsKKyAgICAgICAg
aWYgKGlzRW5jb2RpbmdBdmFpbGFibGUoY29kZWNOYW1lKSkKKyAgICAgICAgICAgIHJlZ2lzdHJh
cihjb2RlY05hbWUsIG5ld1RleHRDb2RlY0d0aywgMCk7CisgICAgfQorfQorCit2b2lkIFRleHRD
b2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIg
cmVnaXN0cmFyKQoreworICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhyZWdpc3RyYXIsIGZhbHNl
KTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAgIHJlZ2lzdGVyQ29kZWNzKHJlZ2lzdHJhciwgZmFs
c2UpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFt
ZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29k
aW5nTmFtZXMocmVnaXN0cmFyLCB0cnVlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lz
dGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICBy
ZWdpc3RlckNvZGVjcyhyZWdpc3RyYXIsIHRydWUpOworfQorCitUZXh0Q29kZWNHdGs6OlRleHRD
b2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhl
bmNvZGluZykKKyAgICAsIG1fbnVtQnVmZmVyZWRCeXRlcygwKQorICAgICwgbV9pY29udkRlY29k
ZXIocmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCit7Cit9CisKK1RleHRDb2RlY0d0azo6flRleHRD
b2RlY0d0aygpCit7CisgICAgcmVsZWFzZUlDb252KCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3Rr
OjpyZWxlYXNlSUNvbnYoKSBjb25zdAoreworICAgIGlmIChtX2ljb252RGVjb2RlciAhPSByZWlu
dGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29u
dkRlY29kZXIpOworICAgICAgICBtX2ljb252RGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lD
b252PigtMSk7CisgICAgfQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSByZWludGVycHJldF9j
YXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVuY29kZXIp
OworICAgICAgICBtX2ljb252RW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSk7
CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNv
bnY+KC0xKSk7CisKKyAgICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2ludGVybmFs
RW5jb2RpbmdOYW1lLCBtX2VuY29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3Rr
OjpjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2Rl
ciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKworICAgIG1faWNvbnZFbmNvZGVy
ID0gZ19pY29udl9vcGVuKG1fZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2RpbmdOYW1l
KTsKK30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJv
cikKK3sKKyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2Rpbmcu
CisgICAgaWYgKG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkp
IHsKKyAgICAgICAgY3JlYXRlSUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2ljb252
RGVjb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKyAgICAgICAgaWYgKG1f
aWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiZXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBl
bmNvZGluZyB3YXMgaW4gdGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHNpemVfdCBjb3VudFdyaXR0ZW4sIGNvdW50UmVhZCwgY29u
dmVyc2lvbkxlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBjb252ZXJzaW9uQnl0ZXM7CisgICAgY2hh
ciogcHJlZml4ZWRCeXRlcyA9IDA7CisKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzKSB7Cisg
ICAgICAgIGNvbnZlcnNpb25MZW5ndGggPSBsZW5ndGggKyBtX251bUJ1ZmZlcmVkQnl0ZXM7Cisg
ICAgICAgIHByZWZpeGVkQnl0ZXMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjb252
ZXJzaW9uTGVuZ3RoKSk7CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzLCBtX2J1ZmZlcmVk
Qnl0ZXMsIG1fbnVtQnVmZmVyZWRCeXRlcyk7CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVz
ICsgbV9udW1CdWZmZXJlZEJ5dGVzLCBieXRlcywgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAg
IGNvbnZlcnNpb25CeXRlcyA9IHByZWZpeGVkQnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBh
bGwgYnVmZmVyZWQgYnl0ZXMgYXJlIGNvbnN1bWVkIG5vdworICAgICAgICBtX251bUJ1ZmZlcmVk
Qnl0ZXMgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIG5vIHByZXZpb3VzbHkgYnVmZmVy
ZWQgcGFydGlhbCBkYXRhLCAKKyAgICAgICAgLy8ganVzdCBjb252ZXJ0IHRoZSBkYXRhIHRoYXQg
d2FzIHBhc3NlZCBpbgorICAgICAgICBjb252ZXJzaW9uQnl0ZXMgPSBieXRlczsKKyAgICAgICAg
Y29udmVyc2lvbkxlbmd0aCA9IGxlbmd0aDsKKyAgICB9CisKKyAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyOworICAgIEdPd25QdHI8VUNoYXI+IGJ1ZmZlcjsKKworICAgIGJ1ZmZlci5vdXRQdHIoKSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihnX2NvbnZlcnRfd2l0aF9pY29udihjb252ZXJzaW9u
Qnl0ZXMsIGNvbnZlcnNpb25MZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAmY291bnRSZWFkLCAmY291
bnRXcml0dGVuLCAmZXJyLm91dFB0cigpKSk7IAorCisKKyAgICBpZiAoZXJyKSB7CisgICAgICAg
IExPR19FUlJPUigiR0lDb252IGNvbnZlcnNpb24gZXJyb3IiKTsKKyAgICAgICAgbV9udW1CdWZm
ZXJlZEJ5dGVzID0gMDsgLy8gcmVzZXQgc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVj
b2RlCisgICAgICAgIGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICBzYXdFcnJvciA9
IHRydWU7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLy8gUGFy
dGlhbCBpbnB1dCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgbWF5IG5vdCByZXN1bHQgaW4gYW4g
ZXJyb3IgYmVpbmcgcmFpc2VkLiAKKyAgICAvLyBGcm9tIHRoZSBnbm9tZSBsaWJyYXJ5IGRvY3Vt
ZW50YXRpb24gb24gZ19jb252ZXJ0X3dpdGhfaWNvbnY6CisgICAgLy8gIkV2ZW4gaWYgdGhlIGNv
bnZlcnNpb24gd2FzIHN1Y2Nlc3NmdWwsIHRoaXMgbWF5IGJlIGxlc3MgdGhhbiBsZW4gaWYgdGhl
cmUgd2VyZSBwYXJ0aWFsIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIgorICAg
IC8vIFRoYXQncyB3aHkgd2UgbmVlZCB0byBjb21wYXJlIGNvbnZlcnNpb25MZW5ndGggYWdhaW5z
dCBjb3VudFJlYWQgCisKKyAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSBjb252ZXJzaW9uTGVuZ3Ro
IC0gY291bnRSZWFkOworICAgIGlmIChtX251bUJ1ZmZlcmVkQnl0ZXMgPiAwKSB7CisgICAgICAg
IGlmIChmbHVzaCkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJQYXJ0aWFsIGJ5dGVzIGF0IGVu
ZCBvZiBpbnB1dCB3aGlsZSBmbHVzaCByZXF1ZXN0ZWQuIik7CisgICAgICAgICAgICBtX251bUJ1
ZmZlcmVkQnl0ZXMgPSAwOyAvLyByZXNldCBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBk
ZWNvZGUKKyAgICAgICAgICAgIGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICAgICAg
c2F3RXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9
CisgICAgICAgIG1lbWNweShtX2J1ZmZlcmVkQnl0ZXMsIGNvbnZlcnNpb25CeXRlcyArIGNvdW50
UmVhZCwgbV9udW1CdWZmZXJlZEJ5dGVzKTsKKyAgICB9CisKKyAgICBmYXN0RnJlZShwcmVmaXhl
ZEJ5dGVzKTsKKyAgICAKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKworICAgIHJlc3VsdC5h
cHBlbmQoYnVmZmVyLmdldCgpLCBjb3VudFdyaXR0ZW4gLyBzaXplb2YoVUNoYXIpKTsKKworICAg
IHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7Cit9CisKK0NTdHJpbmcgVGV4dENvZGVjR3Rr
OjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2Rh
YmxlSGFuZGxpbmcgaGFuZGxpbmcpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVy
biAiIjsKKworICAgIGlmIChtX2ljb252RW5jb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29u
dj4oLTEpKQorICAgICAgICBjcmVhdGVJQ29udkVuY29kZXIoKTsKKyAgICBpZiAobV9pY29udkVu
Y29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAgICAgICAgcmV0dXJuIENT
dHJpbmcoKTsKKworICAgIHNpemVfdCBjb3VudDsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnI7
CisgICAgR093blB0cjxjaGFyPiBidWZmZXI7CisKKyAgICBidWZmZXIub3V0UHRyKCkgPSBnX2Nv
bnZlcnRfd2l0aF9pY29udihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJz
KSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSwgbV9pY29udkVuY29kZXIsIDAsICZjb3VudCwgJmVy
ci5vdXRQdHIoKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBj
b252ZXJzaW9uIGVycm9yIik7CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgfQorCisg
ICAgQ1N0cmluZyByZXN1bHQgPSBDU3RyaW5nKGJ1ZmZlci5nZXQoKSwgY291bnQpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJp
bGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0
c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgVGV4dENvZGVjR1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2luY2x1ZGUg
PGdsaWIuaD4KKworI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBUZXh0Q29kZWNHdGsgOiBw
dWJsaWMgVGV4dENvZGVjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1l
UmVnaXN0cmFyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhU
ZXh0Q29kZWNSZWdpc3RyYXIpOworCisgICAgICAgIFRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5j
b2RpbmcmKTsKKyAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjR3RrKCk7CisKKyAgICAgICAgdmly
dHVhbCBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNo
LCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgICAgIHZpcnR1YWwgQ1N0
cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZEZWNvZGVyKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgcmVsZWFzZUlDb252KCkgY29uc3Q7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0
ZW5kZWQpOyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRD
b2RlY1JlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpOworICAgICAgICBzdGF0aWMg
Z2Jvb2xlYW4gaXNFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciopOworCisgICAgICAgIFRl
eHRFbmNvZGluZyBtX2VuY29kaW5nOworICAgICAgICBzaXplX3QgbV9udW1CdWZmZXJlZEJ5dGVz
OworICAgICAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlc1sxNl07IC8vIGJpZ2dlciB0
aGFuIGFueSBzaW5nbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgICAgICAgIAorICAgICAgICBtdXRh
YmxlIEdJQ29udiBtX2ljb252RGVjb2RlcjsKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29u
dkVuY29kZXI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGdjaGFyKiBtX2ludGVybmFsRW5jb2Rp
bmdOYW1lOworCisgICAgICAgIHR5cGVkZWYgY29uc3QgZ2NoYXIqIGNvbnN0IGNvZGVjQWxpYXNM
aXN0W107CisKKyAgICAgICAgLy8gVW5pY29kZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfVVRGXzg7CisKKyAgICAgICAgLy8gV2VzdGVybgorICAgICAgICBz
dGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMTsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ1JPTUFOOworCisgICAgICAg
IC8vIEphcGFuZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNl
c19TSElGVF9KSVM7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNl
c19FVUNfSlA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19J
U09fMjAyMl9KUDsKKworICAgICAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNlCisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19CSUc1OworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQklHNV9IS1NDUzsKKyAgICAgICAgc3RhdGlj
IGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQOTUwOworCisgICAgICAgIC8vIEtvcmVh
bgorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJf
S1I7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDk0OTsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19LUjsKKwor
ICAgICAgICAvLyBBcmFiaWMKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNB
bGlhc2VzX0lTT184ODU5XzY7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19DUDEyNTY7CisKKyAgICAgICAgLy8gSGVicmV3CisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV84OworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU1OworCisgICAgICAgIC8vIEdyZWVrCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV83Owor
ICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4Njk7CisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTM7CisK
KyAgICAgICAgLy8gQ3lyaWxsaWMKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0lTT184ODU5XzU7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2Nv
ZGVjQWxpYXNlc19LT0k4X1I7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19DUDg2NjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX0tPSThfVTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2Vz
X1dJTkRPV1NfMTI1MTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX01BQ0NZUklMTElDOworCisgICAgICAgIC8vIFRoYWkKKyAgICAgICAgc3RhdGljIGNvZGVj
QWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQODc0OworICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfVElTXzYyMDsKKworICAgICAgICAvLyBTaW1wbGlmaWVkIENo
aW5lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0dCSzsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0haOworICAgICAg
ICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfR0IxODAzMDsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19DTjsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzXzIzMTJfODA7IAorCisgICAgICAgIC8v
IENlbnRyYWwgRXVyb3BlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNB
bGlhc2VzX0lTT184ODU5XzI7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19DUDEyNTA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19NQUNDRU5UUkFMRVVST1BFOworCisgICAgICAgIC8vIFZpZXRuYW1lc2UKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1ODsKKworICAgICAgICAv
LyBUdXJraXNoCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDEyNTQ7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09f
ODg1OV85OworCisgICAgICAgIC8vIEJhbHRpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU3OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNDsKKworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRl
ciBjb25zdCBtX2ljb252QmFzZUNvZGVjTGlzdFtdOworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9p
bnRlciBjb25zdCBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3RbXTsKKworICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRDb2RlY0dUS19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26793</attachid>
            <date>2009-01-16 07:46:07 -0800</date>
            <delta_ts>2009-05-22 11:08:58 -0700</delta_ts>
            <desc>1/4 - Moving WTF Unicode backend to GLib (v2)</desc>
            <filename>1_4_WTF_Unicode_GLib_v2.diff</filename>
            <type>text/plain</type>
            <size>31292</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5OTY3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMDEt
MTYgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFu
eS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtH
VEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAg
IEluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoIGJ5IErDvHJnIEJpbGxldGVyLgorCisgICAg
ICAgIEFkZGluZyBvcHRpb25zIGZvciAtLXdpdGgtdW5pY29kZS1iYWNrZW5kPWljdXxnbGliCisg
ICAgICAgIGFuZCBjaGVja2luZyBmb3IgcGFuZ28gdmVyc2lvbiA+PSAxLjIxLjAgaWYgR0xpYiBi
YWNrZW5kCisgICAgICAgIGlzIHNlbGVjdGVkLiBUZW1wb3JhcmlseSwgdW50aWwgcmVtYWluaW5n
IHBhcnRzIG9mCisgICAgICAgIHRoaXMgcGF0Y2ggYXJlIGNvbW1pdHRlZCwgaW50cm9kdWNlIFdU
Rl9VU0VfR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQKKyAgICAgICAgbWFjcm8gdG8gYWxsb3cgZm9y
IGEgbWl4ZWQgY29tcGlsYXRpb24gd2l0aCBXVEYgVW5pY29kZQorICAgICAgICBiYWNrZW5kIGJh
c2VkIG9uIEdMaWIgd2hpbGUgdGV4dCBjb2RlY3MgYW5kIFRleHRCcmVha0l0ZXJhdG9yCisgICAg
ICAgIHJlbWFpbiBJQ1UgZGVwZW5kZW50LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDA5LTAxLTExICBYYW4gTG9wZXogIDx4YW5AZ25v
bWUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KSW5kZXg6IEdO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEdOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAzOTk2
NykKKysrIEdOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCwyMyBAQCBJ
RExfQklORElOR1MgOj0KICMgR2xvYmFsIGZsYWdzIHRvIENQUAogZ2xvYmFsX2NwcGZsYWdzIDo9
CiAKK2lmIFVTRV9JQ1VfVU5JQ09ERQogZ2xvYmFsX2NwcGZsYWdzICs9IFwKIAktRFdURl9VU0Vf
SUNVX1VOSUNPREU9MQorZW5kaWYKKworaWYgVVNFX0dMSUJfVU5JQ09ERQorIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MTQKKyMgSW4gcGF0Y2ggMS80IHdlIGFy
ZSBjb21waWxpbmcgYSBoeWJyaWQgdmVyc2lvbiBvZiBHTGliIFdURiBVbmljb2RlCisjIGZ1bmN0
aW9uYWxpdHkgbWl4ZWQgd2l0aCBJQ1UtYmFzZWQgdGV4dCBjb2RlY3MgYW5kIFRleHRCcmVha0l0
ZXJhdG9yLgorIyBGb3IgdGhlIHRyYW5zaXRpb24sIGludHJvZHVjaW5nIGFuIGludGVyaW0gSFlC
UklEIG1hY3JvLgorIyBUaGlzIG1hY3JvIGlzIHJlcXVpcmVkIGZvciBjb21waWxpbmcgV1RGIHdp
dGggR0xpYiBVbmljb2RlIGJhY2tlbmQsCisjIGJ1dCBhdCB0aGUgc2FtZSB0aW1lIGtlZXBpbmcg
SUNVIGRlcGVuZGVuY3kgZm9yIGNvZGVjcyBhbmQgYnJlYWsgaXRlcmF0b3IuCisjIEl0IHdpbGwg
YmUgcmVtb3ZlZCB3aXRoIHBhdGNoIDMvNCBvZiB0aGUgYWJvdmUgYnVnLgorZ2xvYmFsX2NwcGZs
YWdzICs9IFwKKwktRFdURl9VU0VfR0xJQl9VTklDT0RFPTEgXAorCS1EV1RGX1VTRV9HTElCX0lD
VV9VTklDT0RFX0hZQlJJRD0xCitlbmRpZgogCiAjIERlZmF1bHQgY29tcGlsZXIgZmxhZ3MKIGds
b2JhbF9jZmxhZ3MgOj0gXApJbmRleDogY29uZmlndXJlLmFjCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZp
Z3VyZS5hYwkocmV2aXNpb24gMzk5NjcpCisrKyBjb25maWd1cmUuYWMJKHdvcmtpbmcgY29weSkK
QEAgLTIyMiwxOCArMjIyLDIyIEBAIEFDX1NVQlNUKFtQTkdfTElCU10pCiAjIGRldGVybWluZSB0
aGUgVW5pY29kZSBiYWNrZW5kCiBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBVbmljb2RlIGJhY2tlbmQg
dG8gdXNlXSkKIEFDX0FSR19XSVRIKHVuaWNvZGVfYmFja2VuZCwKLSAgICAgICAgICAgIEFDX0hF
TFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3VAOj5AXSwKKyAgICAgICAg
ICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtdW5pY29kZS1iYWNrZW5kPUA8OkBpY3UvZ2xpYkA6
PkBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlbGVjdCBVbmljb2RlIGJhY2tlbmQg
W2RlZmF1bHQ9aWN1XV0pLAotICAgICAgICAgICAgW10sW3VuaWNvZGVfYmFja2VuZD0iaWN1Il0p
CisgICAgICAgICAgICBbXSxbd2l0aF91bmljb2RlX2JhY2tlbmQ9ImljdSJdKQogCi1jYXNlICIk
dW5pY29kZV9iYWNrZW5kIiBpbgotICAgICBpY3UpIDs7Ci0gICAgICopIEFDX01TR19FUlJPUihb
SW52YWxpZCBVbmljb2RlIGJhY2tlbmQ6IG11c3QgYmUgaWN1Ll0pIDs7CitjYXNlICIkd2l0aF91
bmljb2RlX2JhY2tlbmQiIGluCisgICAgIGljdXxnbGliKSA7OworICAgICAqKSBBQ19NU0dfRVJS
T1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdSBvciBnbGliLl0pIDs7CiBl
c2FjCiAKLUFDX01TR19SRVNVTFQoWyR1bmljb2RlX2JhY2tlbmRdKQorQUNfTVNHX1JFU1VMVChb
JHdpdGhfdW5pY29kZV9iYWNrZW5kXSkKIAotaWYgdGVzdCAiJHVuaWNvZGVfYmFja2VuZCIgPSAi
aWN1IjsgdGhlbgorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5
MTQKKyMgU3BsaXR0aW5nIElDVSByZW1vdmFsIHBhdGNoIGludG8gc21hbGxlciBwb3J0aW9ucy4g
V2UgY29tcGlsZSBhIGh5YnJpZCB2ZXJzaW9uCisjIHdpdGggdGhlIFdURiBVbmljb2RlIGJhY2tl
bmQgYmVpbmcgYmFzZWQgb24gR0xpYiB3aGlsZSB0ZXh0IGNvZGVjcyBhbmQgVGV4dEJyZWFrSXRl
cmF0b3IKKyMga2VlcCB0aGUgSUNVIGRlcGVuZGVuY3kuIFRoYXQncyB3aHkgd2UgdGVtcG9yYXJp
bHkgYWRkIGljdSBoZWFkZXJzIGFuZCBsaWJzIGZvciBnbGliIGNvbmZpZyBjYXNlIGFzIHdlbGwu
CitpZiB0ZXN0ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSIgLW8gIiR3aXRoX3VuaWNv
ZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KIAlBQ19QQVRIX1BST0coaWN1X2NvbmZpZywgaWN1
LWNvbmZpZywgbm8pCiAJaWYgdGVzdCAiJGljdV9jb25maWciID0gIm5vIjsgdGhlbgogCQlpZiB0
ZXN0ICIkb3NfZGFyd2luIiA9ICJ5ZXMiOyB0aGVuCkBAIC0yNTQsNiArMjU4LDE3IEBAIGlmIHRl
c3QgIiR1bmljb2RlX2JhY2tlbmQiID0gImljdSI7IHRoZW4KIAlmaQogZmkKIAoraWYgdGVzdCAi
JHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIjsgdGhlbgorCSMgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTE0CisJIyBTcGxpdHRpbmcgSUNVIHJlbW92YWwg
cGF0Y2ggaW50byBzbWFsbGVyIHBvcnRpb25zLCB0aGF0J3Mgd2h5IHdlCisJIyB0ZW1wb3Jhcmls
eSByZXRyaWV2ZSBmbGFncyAmIGxpYnMgaW5mbyBmb3IgZ2xpYiBpbnRvIFVOSUNPREVHTElCCisJ
IyBpbnN0ZWFkIG9mIFVOSUNPREUgdmFyaWFibGUsIHRoZW4gY29uY2F0ZW5hdGUuCisJIyBQYXRj
aCAzLzQgb2YgdGhlIGFib3ZlIGlzc3VlIHdpbGwgcmVuYW1lIHRoZSB2YXJpYWJsZSBiYWNrIHRv
IFVOSUNPREUuCisJUEtHX0NIRUNLX01PRFVMRVMoW1VOSUNPREVHTElCXSwgW2dsaWItMi4wIHBh
bmdvID49IDEuMjEuMF0pCisJVU5JQ09ERV9DRkxBR1M9IiRVTklDT0RFX0NGTEFHUyAkVU5JQ09E
RUdMSUJfQ0ZMQUdTIgorCVVOSUNPREVfTElCUz0iJFVOSUNPREVfTElCUyAkVU5JQ09ERUdMSUJf
TElCUyIKK2ZpCisKIEFDX1NVQlNUKFtVTklDT0RFX0NGTEFHU10pCiBBQ19TVUJTVChbVU5JQ09E
RV9MSUJTXSkKIApAQCAtNzEyLDYgKzcyNywxMCBAQCBBTV9DT05ESVRJT05BTChbVEFSR0VUX1dJ
TjMyXSwgW3Rlc3QgIiR3CiBBTV9DT05ESVRJT05BTChbVEFSR0VUX1FVQVJUWl0sIFt0ZXN0ICIk
d2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9ESVJFQ1RG
Ql0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAKKyMgVW5pY29kZSBiYWNr
ZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9JQ1VfVU5JQ09ERV0sIFt0ZXN0
ICIkd2l0aF91bmljb2RlX2JhY2tlbmQiID0gImljdSJdKQorQU1fQ09ORElUSU9OQUwoW1VTRV9H
TElCX1VOSUNPREVdLCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJnbGliIl0pCisK
ICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW1VTRV9DVVJMXSwg
W3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAiY3VybCJdKQogQU1fQ09ORElUSU9OQUwoW1VT
RV9TT1VQXSwgW3Rlc3QgIiR3aXRoX2h0dHBfYmFja2VuZCIgPSAic291cCJdKQpAQCAtNzYxLDcg
Kzc4MCw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRpb246CiAgRW5hYmxlIGRlYnVnZ2luZyAoc2xvdykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RlYnVnCiAgRW5hYmxl
IEdDQyBidWlsZCBvcHRpbWl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5h
YmxlX29wdGltaXphdGlvbnMKICBDb2RlIGNvdmVyYWdlIHN1cHBvcnQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY292ZXJhZ2UKLSBVbmljb2RlIGJhY2tlbmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICR1bmljb2RlX2JhY2tl
bmQKKyBVbmljb2RlIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6ICR3aXRoX3VuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFja2VuZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfaHR0cF9iYWNrZW5kCiAgRm9u
dCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAk
d2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZmFzdF9tYWxsb2MKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDM5OTY3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMDEtMTYgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRv
bWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0
aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIE9yaWdpbmFsIHBhdGNoIGJ5IErDvHJnIEJp
bGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgSW1wbGVtZW50aW5nIFdURiBVbmljb2Rl
IGZ1bmN0aW9uYWxpdHkgYmFzZWQgb24gR0xpYi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIHd0Zi91bmljb2RlL1VuaWNvZGUuaDoKKyAgICAgICAgKiB3dGYvdW5pY29k
ZS9nbGliOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvdW5pY29kZS9nbGliL1VuaWNvZGVHTGliLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OlVuaWNvZGU6OmZvbGRDYXNlKToKKyAgICAgICAgKFdU
Rjo6VW5pY29kZTo6dG9Mb3dlcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvVXBwZXIpOgor
ICAgICAgICAoV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24pOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojp1bWVtY2FzZWNtcCk6CisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6VW5pY29kZTo6KToKKyAgICAgICAgKFdURjo6VW5pY29k
ZTo6dG9Mb3dlcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OnRvVXBwZXIpOgorICAgICAgICAo
V1RGOjpVbmljb2RlOjp0b1RpdGxlQ2FzZSk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzQXJh
YmljQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmlzRm9ybWF0Q2hhcik6CisgICAgICAg
IChXVEY6OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UpOgorICAgICAgICAoV1RGOjpVbmljb2Rl
Ojppc1ByaW50YWJsZUNoYXIpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjppc0RpZ2l0KToKKyAg
ICAgICAgKFdURjo6VW5pY29kZTo6aXNQdW5jdCk6CisgICAgICAgIChXVEY6OlVuaWNvZGU6Om1p
cnJvcmVkQ2hhcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmNhdGVnb3J5KToKKyAgICAgICAg
KFdURjo6VW5pY29kZTo6aXNMb3dlcik6CisgICAgICAgIChXVEY6OlVuaWNvZGU6OmRpZ2l0VmFs
dWUpOgorICAgICAgICAoV1RGOjpVbmljb2RlOjpjb21iaW5pbmdDbGFzcyk6CisgICAgICAgIChX
VEY6OlVuaWNvZGU6OmRlY29tcG9zaXRpb25UeXBlKToKKyAgICAgICAgKiB3dGYvdW5pY29kZS9n
bGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmg6IEFkZGVkLgorCiAyMDA5LTAxLTE1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJv
biBad2FyaWNoLgpJbmRleDogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDM5OTY3KQorKysg
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTI0OSw5ICsy
NDksMjYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvVVRGOC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VURjguaCBcCi0JSmF2
YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYv
dW5pY29kZS9Vbmljb2RlLmgKKworIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQKKyMgLS0t
LQoraWYgVVNFX0lDVV9VTklDT0RFCitqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwIFwKIAlKYXZhU2NyaXB0
Q29yZS93dGYvdW5pY29kZS9pY3UvVW5pY29kZUljdS5oCitlbmRpZiAjIFVTRV9JQ1VfVU5JQ09E
RQorCisjIC0tLS0KKyMgZ2xpYiB1bmljb2RlIGJhY2tlbmQKKyMgLS0tLQoraWYgVVNFX0dMSUJf
VU5JQ09ERQoramF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCisJSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29k
ZS9nbGliL1VuaWNvZGVHTGliLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvZ2xp
Yi9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oCitlbmRpZgogCiAjIERlYnVnIGJ1aWxkCiBpZiBFTkFC
TEVfREVCVUcKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgJKHJldmlzaW9u
IDM5OTY3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAicXQ0L1VuaWNvZGVRdDQuaCIKICNl
bGlmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9pY3UvVW5pY29kZUlj
dS5oPgorI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVHTGliLmg+CiAjZWxzZQogI2Vycm9yICJVbmtub3duIFVuaWNvZGUgaW1wbGVtZW50
YXRpb24iCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2dsaWIvVW5p
Y29kZUdMaWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ds
aWIvVW5pY29kZUdMaWIuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE0IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0
dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJVbmlj
b2RlR0xpYi5oIgorCituYW1lc3BhY2UgV1RGIHsKK25hbWVzcGFjZSBVbmljb2RlIHsKKworVUNo
YXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGNoKQoreworICAgIEdPd25QdHI8R0Vycm9yPiBnZXJyb3I7
CisKKyAgICBHT3duUHRyPGNoYXI+IHV0ZjhjaGFyOworICAgIHV0ZjhjaGFyLnNldChnX3VjczRf
dG9fdXRmOChyZWludGVycHJldF9jYXN0PGd1bmljaGFyKj4oJmNoKSwgMSwgMCwgMCwgJmdlcnJv
ci5vdXRQdHIoKSkpOworICAgIGlmIChnZXJyb3IpCisgICAgICAgIHJldHVybiBjaDsKKworICAg
IEdPd25QdHI8Y2hhcj4gdXRmOGNhc2VGb2xkZWQ7CisgICAgdXRmOGNhc2VGb2xkZWQuc2V0KGdf
dXRmOF9jYXNlZm9sZCh1dGY4Y2hhci5nZXQoKSwgLTEpKTsKKworICAgIEdPd25QdHI8Z3VuaWNo
YXI+IHVjczRSZXN1bHQ7CisgICAgdWNzNFJlc3VsdC5zZXQoZ191dGY4X3RvX3VjczRfZmFzdCh1
dGY4Y2FzZUZvbGRlZC5nZXQoKSwgLTEsIDApKTsKKworICAgIHJldHVybiAqdWNzNFJlc3VsdDsK
K30KKworaW50IGZvbGRDYXNlKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0
IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQoreworICAgICplcnJvciA9
IGZhbHNlOworICAgIEdPd25QdHI8R0Vycm9yPiBnZXJyb3I7CisKKyAgICBHT3duUHRyPGNoYXI+
IHV0ZjhzcmM7CisgICAgdXRmOHNyYy5zZXQoZ191dGYxNl90b191dGY4KHNyYywgc3JjTGVuZ3Ro
LCAwLCAwLCAmZ2Vycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGdlcnJvcikgeworICAgICAgICAq
ZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgR093blB0cjxj
aGFyPiB1dGY4cmVzdWx0OworICAgIHV0ZjhyZXN1bHQuc2V0KGdfdXRmOF9jYXNlZm9sZCh1dGY4
c3JjLmdldCgpLCAtMSkpOworCisgICAgbG9uZyB1dGYxNnJlc3VsdExlbmd0aCA9IC0xOworICAg
IEdPd25QdHI8VUNoYXI+IHV0ZjE2cmVzdWx0OworICAgIHV0ZjE2cmVzdWx0LnNldChnX3V0Zjhf
dG9fdXRmMTYodXRmOHJlc3VsdC5nZXQoKSwgLTEsIDAsICZ1dGYxNnJlc3VsdExlbmd0aCwgJmdl
cnJvci5vdXRQdHIoKSkpOworICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgKmVycm9yID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICh1dGYxNnJlc3VsdExlbmd0
aCA+IHJlc3VsdExlbmd0aCkgeworICAgICAgICAqZXJyb3IgPSB0cnVlOworICAgICAgICByZXR1
cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorICAgIG1lbWNweShyZXN1bHQsIHV0ZjE2cmVz
dWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVvZihVQ2hhcikpOworCisgICAgcmV0
dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworfQorCitpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBp
bnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBl
cnJvcikKK3sKKyAgICAqZXJyb3IgPSBmYWxzZTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZ2Vycm9y
OworCisgICAgR093blB0cjxjaGFyPiB1dGY4c3JjOworICAgIHV0ZjhzcmMuc2V0KGdfdXRmMTZf
dG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJvci5vdXRQdHIoKSkpOworICAgIGlm
IChnZXJyb3IpIHsKKyAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0KKworICAgIEdPd25QdHI8Y2hhcj4gdXRmOHJlc3VsdDsKKyAgICB1dGY4cmVzdWx0LnNl
dChnX3V0Zjhfc3RyZG93bih1dGY4c3JjLmdldCgpLCAtMSkpOworCisgICAgbG9uZyB1dGYxNnJl
c3VsdExlbmd0aCA9IC0xOworICAgIEdPd25QdHI8VUNoYXI+IHV0ZjE2cmVzdWx0OworICAgIHV0
ZjE2cmVzdWx0LnNldChnX3V0ZjhfdG9fdXRmMTYodXRmOHJlc3VsdC5nZXQoKSwgLTEsIDAsICZ1
dGYxNnJlc3VsdExlbmd0aCwgJmdlcnJvci5vdXRQdHIoKSkpOworICAgIGlmIChnZXJyb3IpIHsK
KyAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg
IGlmICh1dGYxNnJlc3VsdExlbmd0aCA+IHJlc3VsdExlbmd0aCkgeworICAgICAgICAqZXJyb3Ig
PSB0cnVlOworICAgICAgICByZXR1cm4gdXRmMTZyZXN1bHRMZW5ndGg7CisgICAgfQorICAgIG1l
bWNweShyZXN1bHQsIHV0ZjE2cmVzdWx0LmdldCgpLCB1dGYxNnJlc3VsdExlbmd0aCAqIHNpemVv
ZihVQ2hhcikpOworCisgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVuZ3RoOworfQorCitpbnQgdG9V
cHBlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBp
bnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikKK3sKKyAgICAqZXJyb3IgPSBmYWxzZTsKKyAgICBH
T3duUHRyPEdFcnJvcj4gZ2Vycm9yOworCisgICAgR093blB0cjxjaGFyPiB1dGY4c3JjOworICAg
IHV0ZjhzcmMuc2V0KGdfdXRmMTZfdG9fdXRmOChzcmMsIHNyY0xlbmd0aCwgMCwgMCwgJmdlcnJv
ci5vdXRQdHIoKSkpOworICAgIGlmIChnZXJyb3IpIHsKKyAgICAgICAgKmVycm9yID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIEdPd25QdHI8Y2hhcj4gdXRmOHJlc3Vs
dDsKKyAgICB1dGY4cmVzdWx0LnNldChnX3V0Zjhfc3RydXAodXRmOHNyYy5nZXQoKSwgLTEpKTsK
KworICAgIGxvbmcgdXRmMTZyZXN1bHRMZW5ndGggPSAtMTsKKyAgICBHT3duUHRyPFVDaGFyPiB1
dGYxNnJlc3VsdDsKKyAgICB1dGYxNnJlc3VsdC5zZXQoZ191dGY4X3RvX3V0ZjE2KHV0ZjhyZXN1
bHQuZ2V0KCksIC0xLCAwLCAmdXRmMTZyZXN1bHRMZW5ndGgsICZnZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICBpZiAoZ2Vycm9yKSB7CisgICAgICAgICplcnJvciA9IHRydWU7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisKKyAgICBpZiAodXRmMTZyZXN1bHRMZW5ndGggPiByZXN1bHRMZW5ndGgp
IHsKKyAgICAgICAgKmVycm9yID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHV0ZjE2cmVzdWx0TGVu
Z3RoOworICAgIH0KKyAgICBtZW1jcHkocmVzdWx0LCB1dGYxNnJlc3VsdC5nZXQoKSwgdXRmMTZy
ZXN1bHRMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKworICAgIHJldHVybiB1dGYxNnJlc3VsdExl
bmd0aDsKK30KKworRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCit7CisgICAgUGFuZ29C
aWRpVHlwZSB0eXBlID0gcGFuZ29fYmlkaV90eXBlX2Zvcl91bmljaGFyKGMpOworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0w6IAorICAgICAgICByZXR1cm4g
TGVmdFRvUmlnaHQ7CisgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUjogCisgICAgICAgIHJldHVy
biBSaWdodFRvTGVmdDsKKyAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTDoKKyAgICAgICAgcmV0
dXJuIFJpZ2h0VG9MZWZ0QXJhYmljOworICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0xSRToKKyAg
ICAgICAgcmV0dXJuIExlZnRUb1JpZ2h0RW1iZWRkaW5nOworICAgIGNhc2UgUEFOR09fQklESV9U
WVBFX1JMRToKKyAgICAgICAgcmV0dXJuIFJpZ2h0VG9MZWZ0RW1iZWRkaW5nOworICAgIGNhc2Ug
UEFOR09fQklESV9UWVBFX0xSTzoKKyAgICAgICAgcmV0dXJuIExlZnRUb1JpZ2h0T3ZlcnJpZGU7
CisgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUkxPOgorICAgICAgICByZXR1cm4gUmlnaHRUb0xl
ZnRPdmVycmlkZTsKKyAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9QREY6CisgICAgICAgIHJldHVy
biBQb3BEaXJlY3Rpb25hbEZvcm1hdDsKKyAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FTjoKKyAg
ICAgICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyOworICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0FO
OgorICAgICAgICByZXR1cm4gQXJhYmljTnVtYmVyOworICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X0VTOgorICAgICAgICByZXR1cm4gRXVyb3BlYW5OdW1iZXJTZXBhcmF0b3I7CisgICAgY2FzZSBQ
QU5HT19CSURJX1RZUEVfRVQ6CisgICAgICAgIHJldHVybiBFdXJvcGVhbk51bWJlclRlcm1pbmF0
b3I7CisgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQ1M6CisgICAgICAgIHJldHVybiBDb21tb25O
dW1iZXJTZXBhcmF0b3I7CisgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfTlNNOgorICAgICAgICBy
ZXR1cm4gTm9uU3BhY2luZ01hcms7CisgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQk46CisgICAg
ICAgIHJldHVybiBCb3VuZGFyeU5ldXRyYWw7CisgICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQjoK
KyAgICAgICAgcmV0dXJuIEJsb2NrU2VwYXJhdG9yOworICAgIGNhc2UgUEFOR09fQklESV9UWVBF
X1M6CisgICAgICAgIHJldHVybiBTZWdtZW50U2VwYXJhdG9yOworICAgIGNhc2UgUEFOR09fQklE
SV9UWVBFX1dTOgorICAgICAgICByZXR1cm4gV2hpdGVTcGFjZU5ldXRyYWw7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIE90aGVyTmV1dHJhbDsKKyAgICB9IAorfQorCitpbnQgdW1lbWNh
c2VjbXAoY29uc3QgVUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCBpbnQgbGVuKQoreworICAgIEdP
d25QdHI8Y2hhcj4gdXRmOGE7CisgICAgR093blB0cjxjaGFyPiB1dGY4YjsKKworICAgIHV0Zjhh
LnNldChnX3V0ZjE2X3RvX3V0ZjgoYSwgbGVuLCAwLCAwLCAwKSk7CisgICAgdXRmOGIuc2V0KGdf
dXRmMTZfdG9fdXRmOChiLCBsZW4sIDAsIDAsIDApKTsKKworICAgIEdPd25QdHI8Y2hhcj4gZm9s
ZGVkQTsKKyAgICBHT3duUHRyPGNoYXI+IGZvbGRlZEI7CisKKyAgICBmb2xkZWRBLnNldChnX3V0
ZjhfY2FzZWZvbGQodXRmOGEuZ2V0KCksIC0xKSk7CisgICAgZm9sZGVkQi5zZXQoZ191dGY4X2Nh
c2Vmb2xkKHV0ZjhiLmdldCgpLCAtMSkpOworCisgICAgLy8gRklYTUU6IHVtZW1jYXNlY21wIG5l
ZWRzIHRvIG1pbWljIHVfbWVtY2FzZWNtcCBvZiBpY3UKKyAgICAvLyBmcm9tIHRoZSBJQ1UgZG9j
czoKKyAgICAvLyAiQ29tcGFyZSB0d28gc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkgdXNpbmcg
ZnVsbCBjYXNlIGZvbGRpbmcuCisgICAgLy8gaGlzIGlzIGVxdWl2YWxlbnQgdG8gdV9zdHJjbXAo
dV9zdHJGb2xkQ2FzZShzMSwgbiwgb3B0aW9ucyksIHVfc3RyRm9sZENhc2UoczIsIG4sIG9wdGlv
bnMpKS4iCisgICAgLy8gICAgCisgICAgLy8gU28gaXQgbG9va3MgbGlrZSB3ZSBkb24ndCBuZWVk
IHRoZSBmdWxsIGdfdXRmOF9jb2xsYXRlIGhlcmUsIAorICAgIC8vIGJ1dCByZWFsbHkgYSBiaXR3
aXNlIGNvbXBhcmlzb24gb2YgY2FzZWZvbGRlZCB1bmljb2RlIGNoYXJzIChub3QgdXRmLTggYnl0
ZXMpLgorICAgIC8vIEFzIHRoZXJlIGlzIG5vIGRpcmVjdCBlcXVpdmFsZW50IHRvIHRoaXMgaWN1
IGZ1bmN0aW9uIGluIEdMaWIsIGZvciBub3cgCisgICAgLy8gd2UnbGwgdXNlIGdfdXRmOF9jb2xs
YXRlKCk6CisKKyAgICByZXR1cm4gZ191dGY4X2NvbGxhdGUoZm9sZGVkQS5nZXQoKSwgZm9sZGVk
Qi5nZXQoKSk7Cit9CisKKworfSB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9n
bGliL1VuaWNvZGVHTGliLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNv
ZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyOCBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2Rl
Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlw
b3AuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8
akBiaXRyb24uY2g+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IERvbWluaWsgUsO2dHRzY2hlcyA8
ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgVW5pY29kZUdMaWJfaAorI2RlZmluZSBVbmljb2RlR0xpYl9oCisKKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorCisjaW5jbHVkZSA8d3Rm
L0dPd25QdHIuaD4KKworI2luY2x1ZGUgIlVuaWNvZGVNYWNyb3NGcm9tSUNVLmgiCisKK3R5cGVk
ZWYgdWludDE2X3QgVUNoYXI7Cit0eXBlZGVmIGludDMyX3QgVUNoYXIzMjsKKworbmFtZXNwYWNl
IFdURiB7CisgICAgbmFtZXNwYWNlIFVuaWNvZGUgeworCisgICAgICAgIGVudW0gRGlyZWN0aW9u
IHsKKyAgICAgICAgICAgIExlZnRUb1JpZ2h0LAorICAgICAgICAgICAgUmlnaHRUb0xlZnQsCisg
ICAgICAgICAgICBFdXJvcGVhbk51bWJlciwKKyAgICAgICAgICAgIEV1cm9wZWFuTnVtYmVyU2Vw
YXJhdG9yLAorICAgICAgICAgICAgRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yLAorICAgICAgICAg
ICAgQXJhYmljTnVtYmVyLAorICAgICAgICAgICAgQ29tbW9uTnVtYmVyU2VwYXJhdG9yLAorICAg
ICAgICAgICAgQmxvY2tTZXBhcmF0b3IsCisgICAgICAgICAgICBTZWdtZW50U2VwYXJhdG9yLAor
ICAgICAgICAgICAgV2hpdGVTcGFjZU5ldXRyYWwsCisgICAgICAgICAgICBPdGhlck5ldXRyYWws
CisgICAgICAgICAgICBMZWZ0VG9SaWdodEVtYmVkZGluZywKKyAgICAgICAgICAgIExlZnRUb1Jp
Z2h0T3ZlcnJpZGUsCisgICAgICAgICAgICBSaWdodFRvTGVmdEFyYWJpYywKKyAgICAgICAgICAg
IFJpZ2h0VG9MZWZ0RW1iZWRkaW5nLAorICAgICAgICAgICAgUmlnaHRUb0xlZnRPdmVycmlkZSwK
KyAgICAgICAgICAgIFBvcERpcmVjdGlvbmFsRm9ybWF0LAorICAgICAgICAgICAgTm9uU3BhY2lu
Z01hcmssCisgICAgICAgICAgICBCb3VuZGFyeU5ldXRyYWwKKyAgICAgICAgfTsKKworICAgICAg
ICBlbnVtIERlY29tcG9zaXRpb25UeXBlIHsKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25Ob25l
LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkNhbm9uaWNhbCwKKyAgICAgICAgICAgIERlY29t
cG9zaXRpb25Db21wYXQsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uQ2lyY2xlLAorICAgICAg
ICAgICAgRGVjb21wb3NpdGlvbkZpbmFsLAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbkZvbnQs
CisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uRnJhY3Rpb24sCisgICAgICAgICAgICBEZWNvbXBv
c2l0aW9uSW5pdGlhbCwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25Jc29sYXRlZCwKKyAgICAg
ICAgICAgIERlY29tcG9zaXRpb25NZWRpYWwsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uTmFy
cm93LAorICAgICAgICAgICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCisgICAgICAgICAgICBEZWNv
bXBvc2l0aW9uU21hbGwsCisgICAgICAgICAgICBEZWNvbXBvc2l0aW9uU3F1YXJlLAorICAgICAg
ICAgICAgRGVjb21wb3NpdGlvblN1YiwKKyAgICAgICAgICAgIERlY29tcG9zaXRpb25TdXBlciwK
KyAgICAgICAgICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCwKKyAgICAgICAgICAgIERlY29tcG9z
aXRpb25XaWRlLAorICAgICAgICB9OworCisgICAgICAgIGVudW0gQ2hhckNhdGVnb3J5IHsKKyAg
ICAgICAgICAgIE5vQ2F0ZWdvcnkgPSAgMCwKKyAgICAgICAgICAgIE90aGVyX05vdEFzc2lnbmVk
ID0gVV9NQVNLKEdfVU5JQ09ERV9VTkFTU0lHTkVEKSwKKyAgICAgICAgICAgIExldHRlcl9VcHBl
cmNhc2UgPSBVX01BU0soR19VTklDT0RFX1VQUEVSQ0FTRV9MRVRURVIpLAorICAgICAgICAgICAg
TGV0dGVyX0xvd2VyY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVfTE9XRVJDQVNFX0xFVFRFUiksCisg
ICAgICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlID0gVV9NQVNLKEdfVU5JQ09ERV9USVRMRUNBU0Vf
TEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9Nb2RpZmllciA9IFVfTUFTSyhHX1VOSUNPREVf
TU9ESUZJRVJfTEVUVEVSKSwKKyAgICAgICAgICAgIExldHRlcl9PdGhlciA9IFVfTUFTSyhHX1VO
SUNPREVfT1RIRVJfTEVUVEVSKSwKKworICAgICAgICAgICAgTWFya19Ob25TcGFjaW5nID0gVV9N
QVNLKEdfVU5JQ09ERV9OT05fU1BBQ0lOR19NQVJLKSwKKyAgICAgICAgICAgIE1hcmtfRW5jbG9z
aW5nID0gVV9NQVNLKEdfVU5JQ09ERV9FTkNMT1NJTkdfTUFSSyksCisgICAgICAgICAgICBNYXJr
X1NwYWNpbmdDb21iaW5pbmcgPSBVX01BU0soR19VTklDT0RFX0NPTUJJTklOR19NQVJLKSwKKwor
ICAgICAgICAgICAgTnVtYmVyX0RlY2ltYWxEaWdpdCA9IFVfTUFTSyhHX1VOSUNPREVfREVDSU1B
TF9OVU1CRVIpLAorICAgICAgICAgICAgTnVtYmVyX0xldHRlciA9IFVfTUFTSyhHX1VOSUNPREVf
TEVUVEVSX05VTUJFUiksCisgICAgICAgICAgICBOdW1iZXJfT3RoZXIgPSBVX01BU0soR19VTklD
T0RFX09USEVSX05VTUJFUiksCisKKyAgICAgICAgICAgIFNlcGFyYXRvcl9TcGFjZSA9IFVfTUFT
SyhHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SKSwKKyAgICAgICAgICAgIFNlcGFyYXRvcl9MaW5l
ID0gVV9NQVNLKEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRPUiksCisgICAgICAgICAgICBTZXBhcmF0
b3JfUGFyYWdyYXBoID0gVV9NQVNLKEdfVU5JQ09ERV9QQVJBR1JBUEhfU0VQQVJBVE9SKSwKKwor
ICAgICAgICAgICAgT3RoZXJfQ29udHJvbCA9IFVfTUFTSyhHX1VOSUNPREVfQ09OVFJPTCksCisg
ICAgICAgICAgICBPdGhlcl9Gb3JtYXQgPSBVX01BU0soR19VTklDT0RFX0ZPUk1BVCksCisgICAg
ICAgICAgICBPdGhlcl9Qcml2YXRlVXNlID0gVV9NQVNLKEdfVU5JQ09ERV9QUklWQVRFX1VTRSks
CisgICAgICAgICAgICBPdGhlcl9TdXJyb2dhdGUgPSBVX01BU0soR19VTklDT0RFX1NVUlJPR0FU
RSksCisKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX0Rhc2ggPSBVX01BU0soR19VTklDT0RFX0RB
U0hfUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVuY3R1YXRpb25fT3BlbiA9IFVfTUFTSyhH
X1VOSUNPREVfT1BFTl9QVU5DVFVBVElPTiksCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9DbG9z
ZSA9IFVfTUFTSyhHX1VOSUNPREVfQ0xPU0VfUFVOQ1RVQVRJT04pLAorICAgICAgICAgICAgUHVu
Y3R1YXRpb25fQ29ubmVjdG9yID0gVV9NQVNLKEdfVU5JQ09ERV9DT05ORUNUX1BVTkNUVUFUSU9O
KSwKKyAgICAgICAgICAgIFB1bmN0dWF0aW9uX090aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhF
Ul9QVU5DVFVBVElPTiksCisKKyAgICAgICAgICAgIFN5bWJvbF9NYXRoID0gVV9NQVNLKEdfVU5J
Q09ERV9NQVRIX1NZTUJPTCksCisgICAgICAgICAgICBTeW1ib2xfQ3VycmVuY3kgPSBVX01BU0so
R19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCksCisgICAgICAgICAgICBTeW1ib2xfTW9kaWZpZXIg
PSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX1NZTUJPTCksCisgICAgICAgICAgICBTeW1ib2xf
T3RoZXIgPSBVX01BU0soR19VTklDT0RFX09USEVSX1NZTUJPTCksCisKKyAgICAgICAgICAgIFB1
bmN0dWF0aW9uX0luaXRpYWxRdW90ZSA9IFVfTUFTSyhHX1VOSUNPREVfSU5JVElBTF9QVU5DVFVB
VElPTiksCisgICAgICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlID0gVV9NQVNLKEdfVU5J
Q09ERV9GSU5BTF9QVU5DVFVBVElPTikKKyAgICAgICAgfTsKKworICAgICAgICBVQ2hhcjMyIGZv
bGRDYXNlKFVDaGFyMzIpOworCisgICAgICAgIGludCBmb2xkQ2FzZShVQ2hhciogcmVzdWx0LCBp
bnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBl
cnJvcik7CisKKyAgICAgICAgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExl
bmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpOworCisg
ICAgICAgIGlubGluZSBVQ2hhcjMyIHRvTG93ZXIoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ191bmljaGFyX3RvbG93ZXIoYyk7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdfdW5pY2hhcl90b3VwcGVyKGMpOworICAgICAgICB9CisKKyAgICAgICAgaW50
IHRvVXBwZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNy
YywgaW50IHNyY0xlbmd0aCwgYm9vbCogZXJyb3IpOworCisgICAgICAgIGlubGluZSBVQ2hhcjMy
IHRvVGl0bGVDYXNlKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdf
dW5pY2hhcl90b3RpdGxlKGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wgaXNB
cmFiaWNDaGFyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGMgPj0g
MHgwNjAwICYmIGMgPD0gMHgwNkZGOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGJvb2wg
aXNGb3JtYXRDaGFyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdf
dW5pY2hhcl90eXBlKGMpID09IEdfVU5JQ09ERV9GT1JNQVQ7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgYm9vbCBpc1NlcGFyYXRvclNwYWNlKFVDaGFyMzIgYykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl90eXBlKGMpID09IEdfVU5JQ09ERV9TUEFDRV9TRVBB
UkFUT1I7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgYm9vbCBpc1ByaW50YWJsZUNoYXIo
VUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ191bmljaGFyX2lzcHJp
bnQoYyk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaW5saW5lIGJvb2wgaXNEaWdpdChVQ2hh
cjMyIGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnX3VuaWNoYXJfaXNkaWdpdChj
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBib29sIGlzUHVuY3QoVUNoYXIzMiBjKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ191bmljaGFyX2lzcHVuY3QoYyk7CisgICAg
ICAgIH0KKworICAgICAgICBpbmxpbmUgVUNoYXIzMiBtaXJyb3JlZENoYXIoVUNoYXIzMiBjKQor
ICAgICAgICB7CisgICAgICAgICAgICBndW5pY2hhciBtaXJyb3IgPSAwOworICAgICAgICAgICAg
Z191bmljaGFyX2dldF9taXJyb3JfY2hhcihjLCAmbWlycm9yKTsKKyAgICAgICAgICAgIHJldHVy
biBtaXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgQ2hhckNhdGVnb3J5IGNhdGVn
b3J5KFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGMgPiAweGZmZmYpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vQ2F0ZWdvcnk7CisKKyAgICAgICAgICAgIHJldHVybiAo
Q2hhckNhdGVnb3J5KSBVX01BU0soZ191bmljaGFyX3R5cGUoYykpOworICAgICAgICB9CisKKyAg
ICAgICAgRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyKTsKKworICAgICAgICBpbmxpbmUgYm9v
bCBpc0xvd2VyKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5p
Y2hhcl9pc2xvd2VyKGMpOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGludCBkaWdpdFZh
bHVlKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdfdW5pY2hhcl9k
aWdpdF92YWx1ZShjKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSB1aW50OF90IGNvbWJp
bmluZ0NsYXNzKFVDaGFyMzIgYykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUUKKyAg
ICAgICAgICAgIC8vIHJldHVybiBnX3VuaWNoYXJfY29tYmluaW5nX2NsYXNzKGMpOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgRGVjb21wb3NpdGlv
blR5cGUgZGVjb21wb3NpdGlvblR5cGUoVUNoYXIzMiBjKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBGSVhNRQorICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zaXRpb25Ob25lOworICAgICAg
ICB9CisKKyAgICAgICAgaW50IHVtZW1jYXNlY21wKGNvbnN0IFVDaGFyKiwgY29uc3QgVUNoYXIq
LCBpbnQgbGVuKTsKKworICAgIH0KK30KKworI2VuZGlmCisKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmgJKHJl
dmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9nbGliL1VuaWNvZGVNYWNy
b3NGcm9tSUNVLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiAgQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgorICog
IENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hl
c0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFVuaWNvZGVNYWNy
b3NGcm9tSUNVX2gKKyNkZWZpbmUgVW5pY29kZU1hY3Jvc0Zyb21JQ1VfaAorCisvLyBzb21lIGRl
ZmluZXMgZnJvbSBJQ1UKKworI2RlZmluZSBVMTZfSVNfTEVBRChjKSAoKChjKSYweGZmZmZmYzAw
KT09MHhkODAwKQorI2RlZmluZSBVMTZfSVNfVFJBSUwoYykgKCgoYykmMHhmZmZmZmMwMCk9PTB4
ZGMwMCkKKyNkZWZpbmUgVTE2X1NVUlJPR0FURV9PRkZTRVQgKCgweGQ4MDA8PDEwVUwpKzB4ZGMw
MC0weDEwMDAwKQorI2RlZmluZSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpIFwK
KyAgICAoKChVQ2hhcjMyKShsZWFkKTw8MTBVTCkrKFVDaGFyMzIpKHRyYWlsKS1VMTZfU1VSUk9H
QVRFX09GRlNFVCkKKworI2RlZmluZSBVMTZfTEVBRChzdXBwbGVtZW50YXJ5KSAoVUNoYXIpKCgo
c3VwcGxlbWVudGFyeSk+PjEwKSsweGQ3YzApCisjZGVmaW5lIFUxNl9UUkFJTChzdXBwbGVtZW50
YXJ5KSAoVUNoYXIpKCgoc3VwcGxlbWVudGFyeSkmMHgzZmYpfDB4ZGMwMCkKKworI2RlZmluZSBV
X0lTX1NVUlJPR0FURShjKSAoKChjKSYweGZmZmZmODAwKT09MHhkODAwKQorI2RlZmluZSBVMTZf
SVNfU0lOR0xFKGMpICFVX0lTX1NVUlJPR0FURShjKQorI2RlZmluZSBVMTZfSVNfU1VSUk9HQVRF
KGMpIFVfSVNfU1VSUk9HQVRFKGMpCisjZGVmaW5lIFUxNl9JU19TVVJST0dBVEVfTEVBRChjKSAo
KChjKSYweDQwMCk9PTApCisKKyNkZWZpbmUgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKSB7IFwK
KyAgICAoYyk9KHMpWyhpKSsrXTsgXAorICAgIGlmKFUxNl9JU19MRUFEKGMpKSB7IFwKKyAgICAg
ICAgdWludDE2X3QgX19jMjsgXAorICAgICAgICBpZigoaSk8KGxlbmd0aCkgJiYgVTE2X0lTX1RS
QUlMKF9fYzI9KHMpWyhpKV0pKSB7IFwKKyAgICAgICAgICAgICsrKGkpOyBcCisgICAgICAgICAg
ICAoYyk9VTE2X0dFVF9TVVBQTEVNRU5UQVJZKChjKSwgX19jMik7IFwKKyAgICAgICAgfSBcCisg
ICAgfSBcCit9CisKKyNkZWZpbmUgVV9NQVNLKHgpICgodWludDMyX3QpMTw8KHgpKQorCisjZW5k
aWYKKwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDM5OTY3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzMCBAQAorMjAwOS0wMS0xNiAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9t
aW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU5MTQKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IFVuaWNvZGUgZnVuY3Rp
b25hbGl0eSB1c2luZyBHTGliCisKKyAgICAgICAgTWlub3IgY2hhbmdlcyB0aGF0IGFsbG93IGJ1
aWxkaW5nIGEgaHlicmlkIHZlcnNpb24gb2YgV2ViS2l0CisgICAgICAgIHRoYXQgaGFzIFdURiBV
bmljb2RlIGJhY2tlbmQgYmFzZWQgb24gR0xpYiBmdW5jdGlvbnMgd2hpbGUKKyAgICAgICAgdGV4
dCBjb2RlY3MgYW5kIFRleHRCcmVha0l0ZXJhdG9yIHJlbWFpbiBiYXNlZCBvbiBJQ1UuCisKKyAg
ICAgICAgRml4ZWQgc29tZSBpbmNsdWRlcyB0aGF0IHdlcmUgYXNzdW1pbmcgYSBXVEYgSUNVIGJh
Y2tlbmQgYW5kCisgICAgICAgIGludHJvZHVjZWQgdGVtcG9yYXJ5IHVzYWdlIG9mIFdURl9VU0Vf
R0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQKKyAgICAgICAgbWFjcm8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2Jh
bERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFs
RGF0YTo6flRocmVhZEdsb2JhbERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL1RocmVhZEdsb2Jh
bERhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFbmNvZGlu
Zzo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRleHRDb2RlY01hcHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6CisKIDIwMDktMDEtMTYgIEFyaXlhIEhp
ZGF5YXQgIDxhcml5YS5oaWRheWF0QHRyb2xsdGVjaC5jb20+CiAKICAgICAgICAgQW5vdGhlciBh
dHRlbXB0IGF0IGZpeGluZyB0aGUgUXQgYnVpbGQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Ro
cmVhZEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFk
R2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDM5OTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UaHJl
YWRHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIlN0cmluZ0ltcGwuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAotI2lmIFVT
RShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklD
T0RFX0hZQlJJRCkKICNpbmNsdWRlICJUZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgogCkBAIC03MCw3
ICs3MCw3IEBAIFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQogICAgIDogbV9l
bXB0eVN0cmluZyhuZXcgU3RyaW5nSW1wbCkKICAgICAsIG1fYXRvbWljU3RyaW5nVGFibGUobmV3
IEhhc2hTZXQ8U3RyaW5nSW1wbCo+KQogICAgICwgbV9ldmVudE5hbWVzKG5ldyBFdmVudE5hbWVz
KQotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElC
X0lDVV9VTklDT0RFX0hZQlJJRCkKICAgICAsIG1fY2FjaGVkQ29udmVydGVySUNVKG5ldyBJQ1VD
b252ZXJ0ZXJXcmFwcGVyKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODQsNyArODQs
NyBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSgpCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIGRlbGV0ZSBtX2NhY2hlZENvbnZlcnRlclRFQzsKICNlbmRpZgotI2lmIFVTRShJ
Q1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RF
X0hZQlJJRCkKICAgICBkZWxldGUgbV9jYWNoZWRDb252ZXJ0ZXJJQ1U7CiAjZW5kaWYKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDM5OTY3KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmdJbXBsKiBlbXB0eVN0
cmluZygpIHsgcmV0dXJuIG1fZW1wdHlTdHJpbmc7IH0KICAgICAgICAgSGFzaFNldDxTdHJpbmdJ
bXBsKj4mIGF0b21pY1N0cmluZ1RhYmxlKCkgeyByZXR1cm4gKm1fYXRvbWljU3RyaW5nVGFibGU7
IH0KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShH
TElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICAgICAgICAgSUNVQ29udmVydGVyV3JhcHBlciYgY2Fj
aGVkQ29udmVydGVySUNVKCkgeyByZXR1cm4gKm1fY2FjaGVkQ29udmVydGVySUNVOyB9CiAjZW5k
aWYKIApAQCAtNTksNyArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hT
ZXQ8U3RyaW5nSW1wbCo+KiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgICAgICBFdmVudE5hbWVz
KiBtX2V2ZW50TmFtZXM7CiAKLSNpZiBVU0UoSUNVX1VOSUNPREUpCisjaWYgVVNFKElDVV9VTklD
T0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCiAgICAgICAgIElDVUNvbnZlcnRl
cldyYXBwZXIqIG1fY2FjaGVkQ29udmVydGVySUNVOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzSUNVLmNwcAkocmV2aXNpb24gMzk5NjcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJpZXNJQ1UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKIAogI2lu
Y2x1ZGUgPHVuaWNvZGUvdWJyay5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KIAogI2lu
Y2x1ZGUgIlN0cmluZ0ltcGwuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAkocmV2aXNpb24gMzk5NjcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDggQEAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKIAorI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CisKIHR5cGVkZWYgc3RydWN0IFVD
b252ZXJ0ZXIgVUNvbnZlcnRlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHJldmlzaW9uIDM5OTY3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlICJUZXh0RGVjb2Rlci5o
IgogI2luY2x1ZGUgIlRleHRFbmNvZGluZ1JlZ2lzdHJ5LmgiCi0jaWYgVVNFKElDVV9VTklDT0RF
KQorI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQog
I2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KICNlbGlmIFVTRShRVDRfVU5JQ09ERSkKICNpbmNs
dWRlIDxRU3RyaW5nPgpAQCAtODIsNyArODIsNyBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5j
b2RlKGNvbnN0IFVDaGFyCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiAiIjsKIAot
I2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lD
VV9VTklDT0RFX0hZQlJJRCkKICAgICAvLyBGSVhNRTogV2hhdCdzIHRoZSByaWdodCBwbGFjZSB0
byBkbyBub3JtYWxpemF0aW9uPwogICAgIC8vIEl0J3MgYSBsaXR0bGUgc3RyYW5nZSB0byBkbyBp
dCBpbnNpZGUgdGhlIGVuY29kZSBmdW5jdGlvbi4KICAgICAvLyBQZXJoYXBzIG5vcm1hbGl6YXRp
b24gc2hvdWxkIGJlIGFuIGV4cGxpY2l0IHN0ZXAgZG9uZSBiZWZvcmUgY2FsbGluZyBlbmNvZGUu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5j
cHAJKHJldmlzaW9uIDM5OTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Z1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUg
PHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKLSNpZiBV
U0UoSUNVX1VOSUNPREUpCisjaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5J
Q09ERV9IWUJSSUQpCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAjZW5kaWYKICNpZiBQTEFU
Rk9STShNQUMpCkBAIC0xODUsNyArMTg1LDcgQEAgc3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENv
ZGVjTWFwcygpCiAgICAgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVyRW5jb2RpbmdOYW1l
cyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpy
ZWdpc3RlckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAKLSNpZiBVU0UoSUNVX1VOSUNPREUp
CisjaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCiAg
ICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29k
aW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9U
ZXh0Q29kZWNNYXApOwogI2VuZGlmCkBAIC0xOTMsNyArMTkzLDcgQEAgc3RhdGljIHZvaWQgYnVp
bGRCYXNlVGV4dENvZGVjTWFwcygpCiAKIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMo
KQogewotI2lmIFVTRShJQ1VfVU5JQ09ERSkKKyNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShH
TElCX0lDVV9VTklDT0RFX0hZQlJJRCkKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5k
ZWRFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVj
SUNVOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>26794</attachid>
            <date>2009-01-16 07:49:42 -0800</date>
            <delta_ts>2009-01-16 07:49:42 -0800</delta_ts>
            <desc>Sunspider Results Comparing icu against GLib Unicode Backend</desc>
            <filename>sunspider_icu_vs_glib.txt</filename>
            <type>text/plain</type>
            <size>3458</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">RlJPTSA9IElDVQpUTyAgID0gR0xpYgoKVEVTVCAgICAgICAgICAgICAgICAgICBDT01QQVJJU09O
ICAgICAgICAgICAgRlJPTSAgICAgICAgICAgICAgICAgVE8gICAgICAgICAgICAgREVUQUlMUwoK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KCioqIFRPVEFMICoqOiAgICAgICAgICAgLSAgICAgICAgICAg
ICAgICAgMTEyMy40bXMgKy8tIDAuNSUgICAxMTE4LjZtcyArLy0gMC4zJSAKCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CgogIDNkOiAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAyMTgu
NG1zICsvLSAwLjYlICAgIDIxOC4wbXMgKy8tIDAuNCUgCiAgICBjdWJlOiAgICAgICAgICAgICAg
Pz8gICAgICAgICAgICAgICAgICA3Ni4ybXMgKy8tIDAuNyUgICAgIDc2LjZtcyArLy0gMS41JSAg
ICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAxeCBhcyBzbG93KgogICAgbW9ycGg6ICAg
ICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgODEuMm1zICsvLSAxLjclICAgICA4MC4wbXMg
Ky8tIDEuMSUgCiAgICByYXl0cmFjZTogICAgICAgICAgKjEuMDF4IGFzIHNsb3cqICAgICA2MS4w
bXMgKy8tIDAuMCUgICAgIDYxLjRtcyArLy0gMS4xJSAgICAgc2lnbmlmaWNhbnQKCiAgYWNjZXNz
OiAgICAgICAgICAgICAgMS4wMXggYXMgZmFzdCAgICAgIDEyNy44bXMgKy8tIDAuNCUgICAgMTI3
LjBtcyArLy0gMC43JSAgICAgc2lnbmlmaWNhbnQKICAgIGJpbmFyeS10cmVlczogICAgICAxLjA4
eCBhcyBmYXN0ICAgICAgIDExLjJtcyArLy0gNS4wJSAgICAgMTAuNG1zICsvLSA2LjUlICAgICBz
aWduaWZpY2FudAogICAgZmFubmt1Y2g6ICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgMTYu
Mm1zICsvLSAzLjQlICAgICAxNS44bXMgKy8tIDMuNSUgCiAgICBuYm9keTogICAgICAgICAgICAg
Pz8gICAgICAgICAgICAgICAgICA5Mi4ybXMgKy8tIDEuOCUgICAgIDkyLjZtcyArLy0gMS4yJSAg
ICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAweCBhcyBzbG93KgogICAgbnNpZXZlOiAg
ICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgIDguMm1zICsvLSA2LjglICAgICAgOC4ybXMg
Ky8tIDYuOCUgCgogIGJpdG9wczogICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgNDMu
Nm1zICsvLSAyLjYlICAgICA0Mi44bXMgKy8tIDEuMyUgCiAgICAzYml0LWJpdHMtaW4tYnl0ZTog
LSAgICAgICAgICAgICAgICAgICAgNC4wbXMgKy8tIDAuMCUgICAgICA0LjBtcyArLy0gMC4wJSAK
ICAgIGJpdHMtaW4tYnl0ZTogICAgICAtICAgICAgICAgICAgICAgICAgICA4LjBtcyArLy0gMC4w
JSAgICAgIDguMG1zICsvLSAwLjAlIAogICAgYml0d2lzZS1hbmQ6ICAgICAgIC0gICAgICAgICAg
ICAgICAgICAgIDkuMG1zICsvLSAwLjAlICAgICAgOS4wbXMgKy8tIDAuMCUgCiAgICBuc2lldmUt
Yml0czogICAgICAgLSAgICAgICAgICAgICAgICAgICAyMi42bXMgKy8tIDQuOSUgICAgIDIxLjht
cyArLy0gMi42JSAKCiAgY29udHJvbGZsb3c6ICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAg
NS4wbXMgKy8tIDAuMCUgICAgICA1LjBtcyArLy0gMC4wJSAKICAgIHJlY3Vyc2l2ZTogICAgICAg
ICAtICAgICAgICAgICAgICAgICAgICA1LjBtcyArLy0gMC4wJSAgICAgIDUuMG1zICsvLSAwLjAl
IAoKICBjcnlwdG86ICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIDYyLjhtcyArLy0g
MS43JSAgICAgNjIuMG1zICsvLSAxLjQlIAogICAgYWVzOiAgICAgICAgICAgICAgIC0gICAgICAg
ICAgICAgICAgICAgMTcuMm1zICsvLSAzLjIlICAgICAxNy4wbXMgKy8tIDAuMCUgCiAgICBtZDU6
ICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAyMy4ybXMgKy8tIDIuNCUgICAgIDIy
LjhtcyArLy0gMi40JSAKICAgIHNoYTE6ICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAg
IDIyLjRtcyArLy0gMy4wJSAgICAgMjIuMm1zICsvLSAyLjUlIAoKICBkYXRlOiAgICAgICAgICAg
ICAgICAxLjAxeCBhcyBmYXN0ICAgICAgMTEzLjRtcyArLy0gMS4zJSAgICAxMTEuOG1zICsvLSAw
LjUlICAgICBzaWduaWZpY2FudAogICAgZm9ybWF0LXRvZnRlOiAgICAgIC0gICAgICAgICAgICAg
ICAgICAgNDEuMG1zICsvLSAwLjAlICAgICA0MS4wbXMgKy8tIDAuMCUgCiAgICBmb3JtYXQteHBh
cmI6ICAgICAgMS4wMnggYXMgZmFzdCAgICAgICA3Mi40bXMgKy8tIDIuMCUgICAgIDcwLjhtcyAr
Ly0gMC44JSAgICAgc2lnbmlmaWNhbnQKCiAgbWF0aDogICAgICAgICAgICAgICAgMS4wMnggYXMg
ZmFzdCAgICAgIDE4NC42bXMgKy8tIDAuOSUgICAgMTgxLjRtcyArLy0gMS4xJSAgICAgc2lnbmlm
aWNhbnQKICAgIGNvcmRpYzogICAgICAgICAgICAxLjAzeCBhcyBmYXN0ICAgICAgIDU1LjhtcyAr
Ly0gMS4wJSAgICAgNTQuMm1zICsvLSAxLjAlICAgICBzaWduaWZpY2FudAogICAgcGFydGlhbC1z
dW1zOiAgICAgIDEuMDJ4IGFzIGZhc3QgICAgICAxMDAuNm1zICsvLSAxLjElICAgICA5OS4wbXMg
Ky8tIDEuNSUgICAgIHNpZ25pZmljYW50CiAgICBzcGVjdHJhbC1ub3JtOiAgICAgLSAgICAgICAg
ICAgICAgICAgICAyOC4ybXMgKy8tIDIuMCUgICAgIDI4LjJtcyArLy0gMi4wJSAKCiAgcmVnZXhw
OiAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICAzMi40bXMgKy8tIDQuNCUgICAgIDMy
LjBtcyArLy0gNC44JSAKICAgIGRuYTogICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAg
IDMyLjRtcyArLy0gNC40JSAgICAgMzIuMG1zICsvLSA0LjglIAoKICBzdHJpbmc6ICAgICAgICAg
ICAgICAqMS4wMXggYXMgc2xvdyogICAgMzM1LjRtcyArLy0gMC43JSAgICAzMzguNm1zICsvLSAw
LjMlICAgICBzaWduaWZpY2FudAogICAgYmFzZTY0OiAgICAgICAgICAgIC0gICAgICAgICAgICAg
ICAgICAgMzEuOG1zICsvLSAxLjclICAgICAzMS44bXMgKy8tIDEuNyUgCiAgICBmYXN0YTogICAg
ICAgICAgICAgKjEuMDF4IGFzIHNsb3cqICAgICA0Ny40bXMgKy8tIDEuNCUgICAgIDQ4LjBtcyAr
Ly0gMC4wJSAgICAgc2lnbmlmaWNhbnQKICAgIHRhZ2Nsb3VkOiAgICAgICAgICAqMS4wM3ggYXMg
c2xvdyogICAgMTE1LjZtcyArLy0gMC42JSAgICAxMTkuMG1zICsvLSAwLjclICAgICBzaWduaWZp
Y2FudAogICAgdW5wYWNrLWNvZGU6ICAgICAgIC0gICAgICAgICAgICAgICAgICAgODEuOG1zICsv
LSAxLjclICAgICA4MC42bXMgKy8tIDAuOCUgCiAgICB2YWxpZGF0ZS1pbnB1dDogICAgPz8gICAg
ICAgICAgICAgICAgICA1OC44bXMgKy8tIDEuOCUgICAgIDU5LjJtcyArLy0gMC45JSAgICAgbm90
IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAxeCBhcyBzbG93Kgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41434</attachid>
            <date>2009-10-19 11:24:06 -0700</date>
            <delta_ts>2009-10-26 07:39:01 -0700</delta_ts>
            <desc>2/4 - Moving Text Codecs to GLib (v2)</desc>
            <filename>wk_2_4_TextCodecsGlib.patch</filename>
            <type>text/plain</type>
            <size>34408</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ5
NzkwKQorKysgd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMDktMTAtMTkgIERvbWluaWsgUsO2dHRzY2hlcyAg
PGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1
bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIEluaXRpYWwgdmVyc2lvbiBvZiB0aGlz
IHBhdGNoIGJ5IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgUGF0Y2gg
Mi80IC0gTW92aW5nIFRleHRDb2RlY3MgdG8gR0xpYgorICAgICAgICAKKyAgICAgICAgQWRkZWQg
cHJvYmluZyBmb3IgYSBoYXJkLWNvZGVkIGxpc3RzIG9mIHRleHQgZW5jb2RpbmdzLgorICAgICAg
ICBUaGUgYmFzaXMgb2YgdGhpcyBsaXN0IGlzIHRha2VuIGZyb20gdGhlIGVuY29kaW5ncyBzdXBw
b3J0ZWQgYnkgaWNvbnYsCisgICAgICAgIHRoZW4gZXh0ZW5kZWQgYnkgZS5nLiB0aXMtNjIwLCB3
aW5kb3dzLTEyNTEsIGV1Yy1rciwgd2luZG93cy0xMjUzIGFuZAorICAgICAgICBhIG51bWJlciBv
ZiBDaGluZXNlIG9uZXMuCisKKyAgICAgICAgUHJvYmluZyBpcyBuZWNlc3Nhcnkgd2l0aCB0aGUg
Y3VycmVudCBkZXNpZ24gb2YgdGV4dCBjb2RlY3MKKyAgICAgICAgYXMgaWNvbnYuaCBkb2VzIG5v
dCBzdXBwb3J0IGVudW1lcmF0aW5nIGF2YWlsYWJsZSBlbmNvZGluZ3MuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YTo6flRocmVhZEdsb2JhbERhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRFbmNvZGluZzo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRleHRDb2Rl
Y01hcHMpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kVGV4dENvZGVjTWFwcyk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6bmV3VGV4dENvZGVjR3RrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY0d0azo6aXNFbmNvZGluZ0F2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjR3RrOjpyZWxlYXNlSUNvbnYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpj
cmVhdGVJQ29udkRlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpjcmVh
dGVJQ29udkVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjplbmNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oOiBBZGRlZC4KKwogMjAwOS0xMC0xOSAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDk3NjkpCisrKyB3a1RydW5rR2xpYl8yXzRfQ29kZWMv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTYzOCw4ICsxNjM4LDYg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3JJbnRlcm5hbElDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVj
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5oIFwKLQlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRDb2RlY0lDVS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5oIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjVVRGMTYuY3BwIFwKQEAgLTIwMTAsNiArMjAwOCwyNiBA
QCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVzcG9uc2UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcAogCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFj
a2VuZAorIyAtLS0tCitpZiBVU0VfSUNVX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBc
CisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAorCitlbmRpZgorCisjIC0tLS0KKyMgZ2xpYiB1bmlj
b2RlIGJhY2tlbmQKKyMgLS0tLQoraWYgVVNFX0dMSUJfVU5JQ09ERQord2ViY29yZWd0a19zb3Vy
Y2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAgXAor
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgKK2VuZGlmCisKKwogIyAt
LS0KICMgQ2hhbm5lbCBtZXNhZ2luZyBzdXBwb3J0CiAjIC0tLQpJbmRleDogd2tUcnVua0dsaWJf
Ml80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFs
RGF0YS5jcHAJKHJldmlzaW9uIDQ5NzY5KQorKysgd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNv
cmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJUaHJlYWRUaW1lcnMuaCIKICNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVf
SFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlICJUZXh0Q29kZWNJQ1UuaCIK
ICNlbmRpZgogCkBAIC03NSw3ICs3NSw3IEBAIFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2Jh
bERhdGEoKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1faXNNYWluVGhyZWFkKGlzTWFpblRocmVh
ZCgpKQogI2VuZGlmCi0jaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09E
RV9IWUJSSUQpCisjaWYgVVNFKElDVV9VTklDT0RFKQogICAgICwgbV9jYWNoZWRDb252ZXJ0ZXJJ
Q1UobmV3IElDVUNvbnZlcnRlcldyYXBwZXIpCiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCkBA
IC04OSw3ICs4OSw3IEBAIFRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKCkKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgZGVsZXRlIG1fY2FjaGVkQ29udmVydGVyVEVDOwogI2VuZGlm
Ci0jaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCisj
aWYgVVNFKElDVV9VTklDT0RFKQogICAgIGRlbGV0ZSBtX2NhY2hlZENvbnZlcnRlcklDVTsKICNl
bmRpZgogCkluZGV4OiB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd2tUcnVua0dsaWJfMl80X0NvZGVjL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiA0OTc2OSkKKysr
IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEzIEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmdSZWdpc3RyeS5oIgotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNP
REVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx1bmljb2RlL3Vub3Jt
Lmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5jbHVkZSA8UVN0cmluZz4KKyNlbGlmIFVT
RShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9HT3duUHRy
Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KQEAgLTg0LDcgKzg3LDcgQEAgQ1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShjb25z
dCBVQ2hhcgogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gIiI7CiAKLSNpZiBVU0Uo
SUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKKyNpZiBVU0UoSUNV
X1VOSUNPREUpCiAgICAgLy8gRklYTUU6IFdoYXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gbm9y
bWFsaXphdGlvbj8KICAgICAvLyBJdCdzIGEgbGl0dGxlIHN0cmFuZ2UgdG8gZG8gaXQgaW5zaWRl
IHRoZSBlbmNvZGUgZnVuY3Rpb24uCiAgICAgLy8gUGVyaGFwcyBub3JtYWxpemF0aW9uIHNob3Vs
ZCBiZSBhbiBleHBsaWNpdCBzdGVwIGRvbmUgYmVmb3JlIGNhbGxpbmcgZW5jb2RlLgpAQCAtMTE0
LDYgKzExNywyMCBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyCiAg
ICAgUVN0cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMp
LCBsZW5ndGgpOwogICAgIHN0ciA9IHN0ci5ub3JtYWxpemVkKFFTdHJpbmc6Ok5vcm1hbGl6YXRp
b25Gb3JtX0MpOwogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgoKSwgaGFu
ZGxpbmcpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBHT3duUHRyPGNoYXI+IHV0Zjhz
b3VyY2U7CisgICAgdXRmOHNvdXJjZS5zZXQoZ191dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxl
bmd0aCwgMCwgMCwgMCkpOworCisgICAgR093blB0cjxjaGFyPiB1dGY4bm9ybWFsaXplZDsKKyAg
ICB1dGY4bm9ybWFsaXplZC5zZXQoZ191dGY4X25vcm1hbGl6ZSh1dGY4c291cmNlLmdldCgpLCAt
MSwgR19OT1JNQUxJWkVfTkZDKSk7CisKKyAgICBsb25nIHV0ZjE2bGVuZ3RoOworICAgIEdPd25Q
dHI8VUNoYXI+IHV0ZjE2bm9ybWFsaXplZDsKKyAgICB1dGYxNm5vcm1hbGl6ZWQuc2V0KGdfdXRm
OF90b191dGYxNih1dGY4bm9ybWFsaXplZC5nZXQoKSwgLTEsIDAsICZ1dGYxNmxlbmd0aCwgMCkp
OworCisgICAgQ1N0cmluZyByZXN1bHQgPSBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUodXRm
MTZub3JtYWxpemVkLmdldCgpLCB1dGYxNmxlbmd0aCwgaGFuZGxpbmcpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKICNlbGlmIFBMQVRGT1JNKFdJTkNFKQogICAgIC8vIG5vcm1hbGl6YXRpb24gd2ls
bCBiZSBkb25lIGJ5IFdpbmRvd3MgQ0UgQVBJCiAgICAgT3duUHRyPFRleHRDb2RlYz4gdGV4dENv
ZGVjID0gbmV3VGV4dENvZGVjKCp0aGlzKTsKSW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwCShyZXZpc2lvbiA0OTc2OSkKKysrIHdrVHJ1bmtHbGliXzJfNF9Db2Rl
Yy9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0cnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNF
KEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRl
ICJUZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTQ4LDEwICs0
OCwxNCBAQAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgInF0L1RleHRDb2RlY1F0LmgiCiAj
ZW5kaWYKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUgImd0ay9UZXh0Q29kZWNHdGsu
aCIKKyNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpCiAjaW5jbHVk
ZSAiVGV4dENvZGVjV2luY2UuaCIKICNlbmRpZgogCisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIxNywxMSArMjIxLDE2IEBAIHN0YXRpYyB2b2lkIGJ1
aWxkQmFzZVRleHRDb2RlY01hcHMoKQogICAgIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3Rl
ckVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNV
c2VyRGVmaW5lZDo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogCi0jaWYgVVNF
KElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCisjaWYgVVNFKElD
VV9VTklDT0RFKQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhh
ZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJCYXNl
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCisjaWYgVVNFKEdMSUJfVU5JQ09E
RSkKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0
RW5jb2RpbmdOYW1lTWFwKTsKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhh
ZGRUb1RleHRDb2RlY01hcCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiAhUExB
VEZPUk0oUVQpCiAgICAgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMo
YWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJC
YXNlQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKQEAgLTIzMCw3ICsyMzksNyBAQCBzdGF0aWMg
dm9pZCBidWlsZEJhc2VUZXh0Q29kZWNNYXBzKCkKIAogc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENv
ZGVjTWFwcygpCiB7Ci0jaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09E
RV9IWUJSSUQpCisjaWYgVVNFKElDVV9VTklDT0RFKQogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0
ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBU
ZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwog
I2VuZGlmCkBAIC0yNDUsNiArMjU0LDExIEBAIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01h
cHMoKQogICAgIFRleHRDb2RlY01hYzo6cmVnaXN0ZXJDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXAp
OwogI2VuZGlmCiAKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVn
aXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKKyAg
ICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXAp
OworI2VuZGlmCisKICNpZiBQTEFURk9STShXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQogICAgIFRl
eHRDb2RlY1dpbmNlOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNv
ZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY1dpbmNlOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNz
KGFkZFRvVGV4dENvZGVjTWFwKTsKSW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd2tUcnVu
a0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNw
cAkocmV2aXNpb24gMCkKKysrIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEBueXBvcC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0
ZXIgPGpAYml0cm9uLmNoPgorICogQ29weXJpZ2h0IChDKSAyMDA5IERvbWluaWsgUsO2dHRzY2hl
cyA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDb2RlY0d0ay5oIgorCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9HT3duUHRy
Lmg+CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCit1c2luZyBzdGQ6Om1pbjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisKKworLy8gYXBwZW5kT21pdHRpbmdCT00gaXMgZ29uZSAoaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzMzODApLCBzbyB3ZSBuZWVkIHRvIGF2b2lkIGdlbmVy
YXRpbmcgZXh0cmEgQk9NJ3MKKy8vIGhlcmUuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHNwZWNp
ZnlpbmcgdGhlIFVURi0xNiBjb2RlY3MnIGVuZGlhbm5lc3MgZXhwbGljaXRseSB3aGVuIGluaXRp
YWxpemluZyBpY29udgorCisjaWYgKEdfQllURV9PUkRFUiA9PSBHX0JJR19FTkRJQU4pCisgICAg
Y29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRlcm5hbEVuY29kaW5nTmFt
ZSA9ICJVVEYtMTZCRSI7CisjZWxzZSAKKyAgICBjb25zdCBnY2hhciogV2ViQ29yZTo6VGV4dENv
ZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdOYW1lID0gIlVURi0xNkxFIjsKKyNlbmRpZgorCisK
Ky8vIGxpc3Qgb2YgdGV4dCBlbmNvZGluZ3MgYW5kIHRoZWlyIGFsaWFzZXMKKy8vIHRoZSBmaXJz
dCBlbnRyeS8iYWxpYXMiIGlzIHRoZSBjYW5vbmljYWwgbmFtZSwgZWFjaCBhbGlhcyBsaXN0IG11
c3QgYmUgdGVybWluYXRlZCBieSBhIDAKKworLy8gVW5pY29kZQorVGV4dENvZGVjR3RrOjpjb2Rl
Y0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1VURl84ICAgICAgICAgICAg
PSB7ICJVVEYtOCIsIDB9OyAKKworLy8gV2VzdGVybgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzEgICAgICAgPSB7ICJJ
U08tODg1OS0xIiwgIkNQODE5IiwgIklCTTgxOSIsICJJU08tSVItMTAwIiwgIklTTzg4NTktMSIs
ICJJU09fODg1OS0xIiwgIklTT184ODU5LTE6MTk4NyIsICAiTDEiLCAiTEFUSU4xIiwgIkNTSVNP
TEFUSU4xIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4gICAgICAgICA9IHsgIk1BQ1JPTUFOIiwgIk1BQyIsICJN
QUNJTlRPU0giLCAiQ1NNQUNJTlRPU0giLCAwfTsKKworLy8gSmFwYW5lc2UKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19TSElGVF9KSVMg
ICAgICAgID0geyAiU2hpZnRfSklTIiwgIk1TX0tBTkpJIiwgIlNISUZULUpJUyIsICJTSklTIiwg
IkNTU0hJRlRKSVMiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVj
R3RrOjptX2NvZGVjQWxpYXNlc19FVUNfSlAgICAgICAgICAgID0geyAiRVVDX0pQIiwgIkVVQy1K
UCIsICJFVUNKUCIsICJFWFRFTkRFRF9VTklYX0NPREVfUEFDS0VEX0ZPUk1BVF9GT1JfSkFQQU5F
U0UiLCAiQ1NFVUNQS0RGTVRKQVBBTkVTRSIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQICAgICAgPSB7ICJJ
U08tMjAyMi1KUCIsIDB9OworCisvLyBUcmFkaXRpb25hbCBDaGluZXNlCitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQklHNSAgICAgICAg
ICAgICA9IHsgIkJJRzUiLCAiQklHLTUiLCAiQklHLUZJVkUiLCAiQklHNSIsICJCSUdGSVZFIiwg
IkNOLUJJRzUiLCAiQ1NCSUc1IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQklHNV9IS1NDUyAgICAgICA9IHsgIkJJRzUtSEtT
Q1MiLCAiQklHNS1IS1NDUzoyMDA0IiwgIkJJRzVIS1NDUyIsIDB9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTUwICAgICAgICAg
ICAgPSB7ICJDUDk1MCIsIDB9OworCisvLyBLb3JlYW4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlh
c0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiAgICAgID0geyAi
SVNPLTIwMjItS1IiLCAiQ1NJU08yMDIyS1IiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlh
c0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDk0OSAgICAgICAgICAgID0geyAi
Q1A5NDkiLCAiVUhDIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2Rl
Y0d0azo6bV9jb2RlY0FsaWFzZXNfRVVDX0tSICAgICAgICAgICA9IHsgIkVVQy1LUiIsICJDU0VV
Q0tSIiwgMCB9OworCisvLyBBcmFiaWMKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV82ICAgICAgID0geyAiSVNPLTg4NTkt
NiIsICJBUkFCSUMiLCAiQVNNTy03MDgiLCAiRUNNQS0xMTQiLCAiSVNPLUlSLTEyNyIsICJJU084
ODU5LTYiLCAiSVNPXzg4NTktNiIsICJJU09fODg1OS02OjE5ODciLCAiQ1NJU09MQVRJTkFSQUJJ
QyIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0NQMTI1NiAgICAgICAgICAgPSB7ICJ3aW5kb3dzLTEyNTYiLCAiQ1AxMjU2Iiwg
Ik1TLUFSQUIiLCAwfTsgLy8gcmVhcnJhbmdlZCwgd2luZG93cy0xMjU2IG5vdyBkZWNsYXJlZCB0
aGUgY2Fub25pY2FsIG5hbWUgYW5kIHB1dCB0byBsb3dlcmNhc2UgdG8gZml4IC9mYXN0L2VuY29k
aW5nL2FocmFtLW9yZy1lZy5odG1sIHRlc3QgY2FzZQorCisvLyBIZWJyZXcKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV84
ICAgICAgID0geyAiSVNPLTg4NTktOCIsICJIRUJSRVciLCAiSVNPLTg4NTktOCIsICJJU08tSVIt
MTM4IiwgIklTTzg4NTktOCIsICJJU09fODg1OS04IiwgIklTT184ODU5LTg6MTk4OCIsICJDU0lT
T0xBVElOSEVCUkVXIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2Rl
Y0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU1ICAgICAgICAgICA9IHsgIndpbmRvd3MtMTI1NSIs
ICJDUDEyNTUiLCAiTVMtSEVCUiIsIDB9OyAvLyByZWFycmFuZ2VkLCBtb3ZlZCB3aW5kb3dzLTEy
NTUgYXMgY2Fub25pY2FsIGFuZCBsb3dlcmNhc2VkLCBmaXhpbmcgL2Zhc3QvZW5jb2RpbmcvbWV0
YS1jaGFyc2V0Lmh0bWwKKworLy8gR3JlZWsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3Qg
VGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV83ICAgICAgID0geyAiSVNPLTg4
NTktNyIsICJFQ01BLTExOCIsICJFTE9UXzkyOCIsICJHUkVFSyIsICJHUkVFSzgiLCAiSVNPLUlS
LTEyNiIsICJJU084ODU5LTciLCAiSVNPXzg4NTktNyIsICJJU09fODg1OS03OjE5ODciLCAiSVNP
Xzg4NTktNzoyMDAzIiwgIkNTSSIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBU
ZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQODY5ICAgICAgICAgICAgPSB7ICJDUDg2OSIs
ICI4NjkiLCAiQ1AtR1IiLCAiSUJNODY5IiwgIkNTSUJNODY5IiwgMH07CitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUz
ICAgICA9IHsgIldJTkRPV1MtMTI1MyIsIDAgfTsKKworLy8gQ3lyaWxsaWMKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV81
ICAgICAgID0geyAiSVNPLTg4NTktNSIsICJDWVJJTExJQyIsICJJU08tSVItMTQ0IiwgIklTTzg4
NTktNSIsICJJU09fODg1OS01IiwgIklTT184ODU5LTU6MTk4OCIsICJDU0lTT0xBVElOQ1lSSUxM
SUMiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19LT0k4X1IgICAgICAgICAgID0geyAiS09JOC1SIiwgIkNTS09JOFIiLCAwfTsK
K1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19DUDg2NiAgICAgICAgICAgID0geyAiQ1A4NjYiLCAiODY2IiwgIklCTTg2NiIsICJDU0lCTTg2
NiIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0tPSThfVSAgICAgICAgICAgPSB7ICJLT0k4LVUiLCAwfTsKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEy
NTEgICAgID0geyAid2luZG93cy0xMjUxIiwgIkNQMTI1MSIsIDB9OyAvLyBDUDEyNTEgYWRkZWQg
dG8gcGFzcyAvZmFzdC9lbmNvZGluZy9jaGFyc2V0LWNwMTI1MS5odG1sCitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUMg
ICAgICA9IHsgIm1hYy1jeXJpbGxpYyIsICJNQUNDWVJJTExJQyIsICJ4LW1hYy1jeXJpbGxpYyIs
IDB9OyAKKworLy8gVGhhaQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0NQODc0ICAgICAgICAgICAgPSB7ICJDUDg3NCIsICJXSU5ET1dT
LTg3NCIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX1RJU182MjAgICAgICAgICAgPSB7ICJUSVMtNjIwIiwgMH07CisKKy8vIFNp
bXBsaWZpZWQgQ2hpbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0dCSyAgICAgICAgICAgICAgPSB7ICJHQksiLCAwfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19IWiAg
ICAgICAgICAgICAgID0geyAiSFoiLCAiSFotR0ItMjMxMiIsIDB9OworVGV4dENvZGVjR3RrOjpj
b2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0dCMTgwMzAgICAgICAg
ICAgPSB7ICJHQjE4MDMwIiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfRVVDX0NOICAgICAgICAgICA9IHsgIkVVQ19DTiIsICJF
VUNDTiIsICJHQjIzMTIiLCAiQ04tR0IiLCAiQ1NHQjIzMTIiLCAiRVVDX0NOIiwgMH07CitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfMjMx
Ml84MCAgICAgICAgICA9IHsgIkdCXzIzMTItODAiLCAiQ0hJTkVTRSIsICJjc0lTTzU4R0IyMzEy
ODAiLCAiR0IyMzEyLjE5ODAtMCIsICJJU08tSVItNTgiIH07CisKKy8vIENlbnRyYWwgRXVyb3Bl
YW4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19JU09fODg1OV8yICAgICAgID0geyAiSVNPLTg4NTktMiIsICJJU08tSVItMTAxIiwgIklT
Tzg4NTktMiIsICJJU09fODg1OS0yIiwgIklTT184ODU5LTI6MTk4NyIsICJMMiIsICJMQVRJTjIi
LCAiQ1NJU09MQVRJTjIiLCAwfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTAgICAgICAgICAgID0geyAiQ1AxMjUwIiwgIk1T
LUVFIiwgIldJTkRPV1MtMTI1MCIsIDB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBU
ZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01BQ0NFTlRSQUxFVVJPUEUgPSB7ICJNQUNDRU5U
UkFMRVVST1BFIiwgMH07CisKKy8vIFZpZXRuYW1lc2UKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlh
c0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTggICAgICAgICAgID0geyAi
Q1AxMjU4IiwgIldJTkRPV1MtMTI1OCIsIDB9OworCisvLyBUdXJraXNoCitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU0ICAgICAg
ICAgICA9IHsgIkNQMTI1NCIsICJNUy1UVVJLIiwgIldJTkRPV1MtMTI1NCIsIDB9OworVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184
ODU5XzkgICAgICAgPSB7ICJJU08tODg1OS05IiwgIklTTy1JUi0xNDgiLCAiSVNPODg1OS05Iiwg
IklTT184ODU5LTkiLCAiSVNPXzg4NTktOToxOTg5IiwgIkw1IiwgIkxBVElONSIsICJDU0lTT0xB
VElONSIsIDB9OworCisvLyBCYWx0aWMKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTcgICAgICAgICAgID0geyAiQ1AxMjU3Iiwg
IldJTkJBTFRSSU0iLCAiV0lORE9XUy0xMjU3IiwgMH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNCAgICAgICA9IHsg
IklTTy04ODU5LTQiLCAiSVNPLUlSLTExMCIsICJJU084ODU5LTQiLCAiSVNPXzg4NTktNCIsICJJ
U09fODg1OS00OjE5ODgiLCAiTDQiLCAiTEFUSU40IiwgIkNTSVNPTEFUSU40IiwgMH07CisKK2dj
b25zdHBvaW50ZXIgY29uc3QgVGV4dENvZGVjR3RrOjptX2ljb252QmFzZUNvZGVjTGlzdFtdID0g
eyAKKyAgICAvLyBVbmljb2RlCisgICAgJm1fY29kZWNBbGlhc2VzX1VURl84LAorCisgICAgLy8g
V2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV8xCit9OworCitnY29uc3Rwb2lu
dGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkV4dGVuZGVkQ29kZWNMaXN0W10gPSAKK3sK
KyAgICAvLyBXZXN0ZXJuCisgICAgJm1fY29kZWNBbGlhc2VzX01BQ1JPTUFOLAorCisgICAgLy8g
SmFwYW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTLAorICAgICZtX2NvZGVjQWxp
YXNlc19FVUNfSlAsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQLAorCisgICAgLy8g
U2ltcGxpZmllZCBDaGluZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0JJRzUsCisgICAgJm1fY29k
ZWNBbGlhc2VzX0JJRzVfSEtTQ1MsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQOTUwLAorCisgICAg
Ly8gS29yZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSLAorICAgICZtX2NvZGVj
QWxpYXNlc19DUDk0OSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfRVVDX0tSLAorCisgICAgLy8gQXJh
YmljCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzYsCisgICAgJm1fY29kZWNBbGlhc2Vz
X0NQMTI1NiwKKyAgICAKKyAgICAvLyBIZWJyZXcKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4
NTlfOCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU1LAorICAgIAorICAgIC8vIEdyZWVrCisg
ICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzcsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQODY5
LAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMsCisgICAgCisgICAgLy8gQ3lyaWxs
aWMKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSwKKyAgICAmbV9jb2RlY0FsaWFzZXNf
S09JOF9SLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2NiwKKyAgICAmbV9jb2RlY0FsaWFzZXNf
S09JOF9VLAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTEsCisgICAgJm1fY29kZWNB
bGlhc2VzX01BQ0NZUklMTElDLAorICAgIAorICAgIC8vIFRoYWkKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfQ1A4NzQsCisgICAgJm1fY29kZWNBbGlhc2VzX1RJU182MjAsCisgICAgCisgICAgLy8gVHJh
ZGl0aW9uYWwgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19HQkssCisgICAgJm1fY29kZWNB
bGlhc2VzX0haLAorICAgICZtX2NvZGVjQWxpYXNlc19HQjE4MDMwLAorICAgICZtX2NvZGVjQWxp
YXNlc19FVUNfQ04sCisgICAgJm1fY29kZWNBbGlhc2VzXzIzMTJfODAsCisgICAgCisgICAgLy8g
Q2VudHJhbCBFdXJvcGVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV8yLAorICAgICZt
X2NvZGVjQWxpYXNlc19DUDEyNTAsCisgICAgJm1fY29kZWNBbGlhc2VzX01BQ0NFTlRSQUxFVVJP
UEUsCisgICAgCisgICAgLy8gVmlldG5hbWVzZQorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTgs
CisgICAgCisgICAgLy8gVHVya2lzaAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTQsCisgICAg
Jm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzksCisgICAgCisgICAgLy8gQmFsdGljCisgICAgJm1f
Y29kZWNBbGlhc2VzX0NQMTI1NywKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNAorfTsK
KworCitjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsKKyAgICAKKwor
c3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8v
IHRvbyBub2lzeSBpZiBlYWNoIFVURi04IGNvZGVjIGNyZWF0aW9uIGlzIGxvZ2dlZAorICAgIC8v
IGlmIChzdHJjbXAoZW5jb2RpbmcubmFtZSgpLCAiVVRGLTgiKSkKKyAgICAvLyAgICAgTE9HKFRl
eHRDb252ZXJzaW9uLCAiY3JlYXRpbmcgbmV3IHRleHQgY29kZWMgZm9yIGVuY29kaW5nIG5hbWUg
JXMiLCBlbmNvZGluZy5uYW1lKCkpOworI2VuZGlmCisKKyAgICByZXR1cm4gbmV3IFRleHRDb2Rl
Y0d0ayhlbmNvZGluZyk7Cit9CisKK2dib29sZWFuIFRleHRDb2RlY0d0azo6aXNFbmNvZGluZ0F2
YWlsYWJsZShjb25zdCBnY2hhciogZW5jTmFtZSkKK3sKKyAgICBHSUNvbnYgdGVzdGVyOworICAg
IC8vIHRlc3QgZGVjb2RpbmcKKyAgICB0ZXN0ZXIgPSBnX2ljb252X29wZW4obV9pbnRlcm5hbEVu
Y29kaW5nTmFtZSwgZW5jTmFtZSk7CisgICAgaWYgKHRlc3RlciA9PSByZWludGVycHJldF9jYXN0
PEdJQ29udj4oLTEpKSB7CisgICAgICAgIExPR19FUlJPUigiJXMgbm90IGRlY29kYWJsZSA9PiBu
b3QgYXZhaWxhYmxlISIsIGVuY05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAvLyB0ZXN0IGVu
Y29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNOYW1lLCBtX2ludGVybmFs
RW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSByZWludGVycHJldF9jYXN0PEdJ
Q29udj4oLTEpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIiVzIG5vdCBlbmNvZGFibGUgPT4g
bm90IGF2YWlsYWJsZSEiLCBlbmNOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdfaWNvbnZfY2xvc2UodGVzdGVyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3Ry
YXIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAgY29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlz
dDsKKyAgICB1bnNpZ25lZCBpbnQgbGlzdExlbmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7
CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAg
ICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihn
cG9pbnRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJh
c2VDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2Rl
Y0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNv
ZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0PGNvZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0W2ld
KTsKKyAgICAgICAgaW50IGNvZGVjQ291bnQgPSAtMTsKKyAgICAgICAgY29uc3QgZ2NoYXIgKmNh
bm9uaWNhbE5hbWUsICpjdXJyZW50QWxpYXM7CisgICAgICAgIGJvb2wgY2Fub25pY2FsQXZhaWxh
YmxlID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIGZvciBlYWNoIG9mIHRoZSBhbGlhcyBs
aXN0czoKKyAgICAgICAgLy8gYmFpbCBvdXQgaWYgY2Fub25pY2FsIGlzIG5vdCBhdmFpbGFibGUs
CisgICAgICAgIC8vIHRoZW4gY29udGludWUgdGVzdGluZyBlYWNoIGFsaWFzLCAKKyAgICAgICAg
Ly8gaWYgYXZhaWxhYmxlLCBhZGQgaXQgdG8gdGhlIGxpc3QsIG1hcHBpbmcgaXQgdG8gaXRzIGNh
bm9uaWNhbCBuYW1lCisKKyAgICAgICAgd2hpbGUgKChjdXJyZW50QWxpYXMgPSAoKmNvZGVjQWxp
YXNlcylbKytjb2RlY0NvdW50XSkgJiYgY2Fub25pY2FsQXZhaWxhYmxlKSB7CisgICAgICAgICAg
ICBib29sIGN1cnJlbnRBdmFpbGFibGUgPSBpc0VuY29kaW5nQXZhaWxhYmxlKGN1cnJlbnRBbGlh
cyk7CisKKyAgICAgICAgICAgIGlmIChjb2RlY0NvdW50ID09IDAgJiYgY3VycmVudEF2YWlsYWJs
ZSkgeworICAgICAgICAgICAgICAgIGNhbm9uaWNhbE5hbWUgPSBjdXJyZW50QWxpYXM7CisgICAg
ICAgICAgICAgICAgY2Fub25pY2FsQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBM
T0dfVkVSQk9TRShUZXh0Q29udmVyc2lvbiwgInJlZ2lzdGVyaW5nIGVuY29kaW5nIGNhbm9uaWNh
bCAlcyIsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihjYW5vbmlj
YWxOYW1lLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZWNDb3Vu
dCA9PSAwICYmICFjdXJyZW50QXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIGNhbm9uaWNhbEF2
YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAoY29kZWNDb3VudCA+IDApIHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShjdXJyZW50QWxpYXMpKSB7
CisgICAgICAgICAgICAgICAgICAgIExPR19WRVJCT1NFKFRleHRDb252ZXJzaW9uLCAicmVnaXN0
ZXJpbmcgZW5jb2RpbmcgbmFtZSBhbGlhcyAlcyB0byBjYW5vbmljYWwgJXMiLCBjdXJyZW50QWxp
YXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXIoY3VycmVu
dEFsaWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQ29k
ZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpCit7CisgICAg
Y29uc3Qgdm9pZCogY29uc3QqIGVuY29kaW5nTGlzdDsKKyAgICB1bnNpZ25lZCBpbnQgbGlzdExl
bmd0aCA9IDA7CisgICAgaWYgKGV4dGVuZGVkKSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1f
aWNvbnZFeHRlbmRlZENvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2lj
b252RXh0ZW5kZWRDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkJhc2VDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RM
ZW5ndGggPSBzaXplb2YobV9pY29udkJhc2VDb2RlY0xpc3QpL3NpemVvZihncG9pbnRlcik7Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgY29kZWNBbGlhc0xpc3QgKmNvZGVjQWxpYXNlcyA9IHN0YXRpY19jYXN0PGNv
ZGVjQWxpYXNMaXN0Kj4oZW5jb2RpbmdMaXN0W2ldKTsKKyAgICAgICAgLy8gYnkgY29udmVudGlv
biwgdGhlIGZpcnN0ICJhbGlhcyIgc2hvdWxkIGJlIHRoZSBjYW5vbmljYWwgbmFtZSwgc2VlIHRo
ZSBkZWZpbml0aW9uIG9mIHRoZSBhbGlhcyBsaXN0cyAKKyAgICAgICAgY29uc3QgZ2NoYXIgKmNv
ZGVjTmFtZSA9ICgqY29kZWNBbGlhc2VzKVswXTsKKyAgICAgICAgaWYgKGlzRW5jb2RpbmdBdmFp
bGFibGUoY29kZWNOYW1lKSkKKyAgICAgICAgICAgIHJlZ2lzdHJhcihjb2RlY05hbWUsIG5ld1Rl
eHRDb2RlY0d0aywgMCk7CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJC
YXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAg
IHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBUZXh0
Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFy
KQoreworICAgIHJlZ2lzdGVyQ29kZWNzKHJlZ2lzdHJhciwgZmFsc2UpOworfQorCit2b2lkIFRl
eHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29kaW5nTmFtZXMocmVnaXN0cmFy
LCB0cnVlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3Mo
VGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckNvZGVjcyhyZWdp
c3RyYXIsIHRydWUpOworfQorCitUZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayhjb25zdCBUZXh0
RW5jb2RpbmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKKyAgICAsIG1f
bnVtQnVmZmVyZWRCeXRlcygwKQorICAgICwgbV9pY29udkRlY29kZXIocmVpbnRlcnByZXRfY2Fz
dDxHSUNvbnY+KC0xKSkKKyAgICAsIG1faWNvbnZFbmNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8R0lD
b252PigtMSkpCit7Cit9CisKK1RleHRDb2RlY0d0azo6flRleHRDb2RlY0d0aygpCit7CisgICAg
cmVsZWFzZUlDb252KCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWxlYXNlSUNvbnYoKSBj
b25zdAoreworICAgIGlmIChtX2ljb252RGVjb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29u
dj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkRlY29kZXIpOworICAgICAg
ICBtX2ljb252RGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSk7CisgICAgfQor
ICAgIGlmIChtX2ljb252RW5jb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7
CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVuY29kZXIpOworICAgICAgICBtX2ljb252
RW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSk7CisgICAgfQorfQorCit2b2lk
IFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSk7CisKKyAgICBt
X2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2ludGVybmFsRW5jb2RpbmdOYW1lLCBtX2Vu
Y29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpjcmVhdGVJQ29udkVuY29k
ZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVjb2RlciA9PSByZWludGVycHJldF9j
YXN0PEdJQ29udj4oLTEpKTsKKworICAgIG1faWNvbnZFbmNvZGVyID0gZ19pY29udl9vcGVuKG1f
ZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2RpbmdOYW1lKTsKK30KKworU3RyaW5nIFRl
eHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoLCBib29s
IGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikKK3sKKyAgICAvLyBHZXQg
YSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2RpbmcuCisgICAgaWYgKG1faWNvbnZE
ZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAgY3JlYXRl
SUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2ljb252RGVjb2RlciAhPSByZWludGVy
cHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKyAgICAgICAgaWYgKG1faWNvbnZEZWNvZGVyID09IHJl
aW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiZXJy
b3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBlbmNvZGluZyB3YXMgaW4gdGFi
bGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHNpemVfdCBjb3VudFdyaXR0ZW4sIGNvdW50UmVhZCwgY29udmVyc2lvbkxlbmd0aDsKKyAg
ICBjb25zdCBjaGFyKiBjb252ZXJzaW9uQnl0ZXM7CisgICAgY2hhciogcHJlZml4ZWRCeXRlcyA9
IDA7CisKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzKSB7CisgICAgICAgIGNvbnZlcnNpb25M
ZW5ndGggPSBsZW5ndGggKyBtX251bUJ1ZmZlcmVkQnl0ZXM7CisgICAgICAgIHByZWZpeGVkQnl0
ZXMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhjb252ZXJzaW9uTGVuZ3RoKSk7Cisg
ICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzLCBtX2J1ZmZlcmVkQnl0ZXMsIG1fbnVtQnVmZmVy
ZWRCeXRlcyk7CisgICAgICAgIG1lbWNweShwcmVmaXhlZEJ5dGVzICsgbV9udW1CdWZmZXJlZEJ5
dGVzLCBieXRlcywgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGNvbnZlcnNpb25CeXRlcyA9
IHByZWZpeGVkQnl0ZXM7CisgICAgICAgIAorICAgICAgICAvLyBhbGwgYnVmZmVyZWQgYnl0ZXMg
YXJlIGNvbnN1bWVkIG5vdworICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSAwOworICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIG5vIHByZXZpb3VzbHkgYnVmZmVyZWQgcGFydGlhbCBkYXRhLCAK
KyAgICAgICAgLy8ganVzdCBjb252ZXJ0IHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCBpbgorICAg
ICAgICBjb252ZXJzaW9uQnl0ZXMgPSBieXRlczsKKyAgICAgICAgY29udmVyc2lvbkxlbmd0aCA9
IGxlbmd0aDsKKyAgICB9CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyOworICAgIEdPd25QdHI8
VUNoYXI+IGJ1ZmZlcjsKKworICAgIGJ1ZmZlci5vdXRQdHIoKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VUNoYXIqPihnX2NvbnZlcnRfd2l0aF9pY29udihjb252ZXJzaW9uQnl0ZXMsIGNvbnZlcnNpb25M
ZW5ndGgsIG1faWNvbnZEZWNvZGVyLCAmY291bnRSZWFkLCAmY291bnRXcml0dGVuLCAmZXJyLm91
dFB0cigpKSk7IAorCisKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lDb252
IGNvbnZlcnNpb24gZXJyb3IiKTsKKyAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gMDsgLy8g
cmVzZXQgc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVjb2RlCisgICAgICAgIGZhc3RG
cmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICBzYXdFcnJvciA9IHRydWU7CisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgLy8gUGFydGlhbCBpbnB1dCBhdCB0aGUg
ZW5kIG9mIHRoZSBzdHJpbmcgbWF5IG5vdCByZXN1bHQgaW4gYW4gZXJyb3IgYmVpbmcgcmFpc2Vk
LiAKKyAgICAvLyBGcm9tIHRoZSBnbm9tZSBsaWJyYXJ5IGRvY3VtZW50YXRpb24gb24gZ19jb252
ZXJ0X3dpdGhfaWNvbnY6CisgICAgLy8gIkV2ZW4gaWYgdGhlIGNvbnZlcnNpb24gd2FzIHN1Y2Nl
c3NmdWwsIHRoaXMgbWF5IGJlIGxlc3MgdGhhbiBsZW4gaWYgdGhlcmUgd2VyZSBwYXJ0aWFsIGNo
YXJhY3RlcnMgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuIgorICAgIC8vIFRoYXQncyB3aHkgd2Ug
bmVlZCB0byBjb21wYXJlIGNvbnZlcnNpb25MZW5ndGggYWdhaW5zdCBjb3VudFJlYWQgCisKKyAg
ICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSBjb252ZXJzaW9uTGVuZ3RoIC0gY291bnRSZWFkOworICAg
IGlmIChtX251bUJ1ZmZlcmVkQnl0ZXMgPiAwKSB7CisgICAgICAgIGlmIChmbHVzaCkgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJQYXJ0aWFsIGJ5dGVzIGF0IGVuZCBvZiBpbnB1dCB3aGlsZSBm
bHVzaCByZXF1ZXN0ZWQuIik7CisgICAgICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSAwOyAv
LyByZXNldCBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBkZWNvZGUKKyAgICAgICAgICAg
IGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOworICAgICAgICAgICAgc2F3RXJyb3IgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICB9CisgICAgICAgIG1lbWNweSht
X2J1ZmZlcmVkQnl0ZXMsIGNvbnZlcnNpb25CeXRlcyArIGNvdW50UmVhZCwgbV9udW1CdWZmZXJl
ZEJ5dGVzKTsKKyAgICB9CisKKyAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAgICAKKyAg
ICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKworICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyLmdldCgp
LCBjb3VudFdyaXR0ZW4gLyBzaXplb2YoVUNoYXIpKTsKKworICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KHJlc3VsdCk7Cit9CisKK0NTdHJpbmcgVGV4dENvZGVjR3RrOjplbmNvZGUoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcgaGFuZGxp
bmcpCit7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlmICht
X2ljb252RW5jb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQorICAgICAgICBj
cmVhdGVJQ29udkVuY29kZXIoKTsKKyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIHNp
emVfdCBjb3VudDsKKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnI7CisgICAgR093blB0cjxjaGFy
PiBidWZmZXI7CisKKyAgICBidWZmZXIub3V0UHRyKCkgPSBnX2NvbnZlcnRfd2l0aF9pY29udihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKSwgbGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSwgbV9pY29udkVuY29kZXIsIDAsICZjb3VudCwgJmVyci5vdXRQdHIoKSk7CisgICAg
aWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yIik7
CisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgfQorCisgICAgQ1N0cmluZyByZXN1bHQg
PSBDU3RyaW5nKGJ1ZmZlci5nZXQoKSwgY291bnQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiB3a1RydW5rR2xpYl8yXzRfQ29kZWMv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3
a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNH
dGsuaAkocmV2aXNpb24gMCkKKysrIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxq
QGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEb21pbmlrIFLDtnR0c2NoZXMgPGRv
bWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGV4
dENvZGVjR1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2luY2x1ZGUgPGdsaWIuaD4K
KworI2luY2x1ZGUgIlRleHRDb2RlYy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBUZXh0Q29kZWNHdGsgOiBwdWJsaWMgVGV4
dENvZGVjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUVu
Y29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyKTsKKyAgICAgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJCYXNlQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFy
KTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNS
ZWdpc3RyYXIpOworCisgICAgICAgIFRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmKTsK
KyAgICAgICAgdmlydHVhbCB+VGV4dENvZGVjR3RrKCk7CisKKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0
b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcik7CisgICAgICAgIHZpcnR1YWwgQ1N0cmluZyBlbmNv
ZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgY3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3Q7CisgICAgICAgIHZvaWQgcmVs
ZWFzZUlDb252KCkgY29uc3Q7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGlu
Z05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpOyAg
ICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lz
dHJhciByZWdpc3RyYXIsIGJvb2wgZXh0ZW5kZWQpOworICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4g
aXNFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciopOworCisgICAgICAgIFRleHRFbmNvZGlu
ZyBtX2VuY29kaW5nOworICAgICAgICBzaXplX3QgbV9udW1CdWZmZXJlZEJ5dGVzOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlc1sxNl07IC8vIGJpZ2dlciB0aGFuIGFueSBz
aW5nbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgICAgICAgIAorICAgICAgICBtdXRhYmxlIEdJQ29u
diBtX2ljb252RGVjb2RlcjsKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29udkVuY29kZXI7
CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGdjaGFyKiBtX2ludGVybmFsRW5jb2RpbmdOYW1lOwor
CisgICAgICAgIHR5cGVkZWYgY29uc3QgZ2NoYXIqIGNvbnN0IGNvZGVjQWxpYXNMaXN0W107CisK
KyAgICAgICAgLy8gVW5pY29kZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2Rl
Y0FsaWFzZXNfVVRGXzg7CisKKyAgICAgICAgLy8gV2VzdGVybgorICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMTsKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ1JPTUFOOworCisgICAgICAgIC8vIEphcGFu
ZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19TSElGVF9K
SVM7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19FVUNfSlA7
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9K
UDsKKworICAgICAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNlCisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19CSUc1OworICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfQklHNV9IS1NDUzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQOTUwOworCisgICAgICAgIC8vIEtvcmVhbgorICAgICAg
ICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1I7CisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDk0OTsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19LUjsKKworICAgICAgICAv
LyBBcmFiaWMKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lT
T184ODU5XzY7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDEyNTY7CisKKyAgICAgICAgLy8gSGVicmV3CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlz
dCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV84OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU1OworCisgICAgICAgIC8vIEdyZWVrCisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV83OworICAgICAgICBz
dGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4Njk7CisgICAgICAgIHN0YXRp
YyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTM7CisKKyAgICAgICAg
Ly8gQ3lyaWxsaWMKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2Vz
X0lTT184ODU5XzU7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNl
c19LT0k4X1I7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDg2NjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0tPSThf
VTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1dJTkRPV1Nf
MTI1MTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ0NZ
UklMTElDOworCisgICAgICAgIC8vIFRoYWkKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0
IG1fY29kZWNBbGlhc2VzX0NQODc0OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfVElTXzYyMDsKKworICAgICAgICAvLyBTaW1wbGlmaWVkIENoaW5lc2UKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0dCSzsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0haOworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfR0IxODAzMDsKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19DTjsKKyAgICAgICAgc3RhdGljIGNvZGVj
QWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzXzIzMTJfODA7IAorCisgICAgICAgIC8vIENlbnRyYWwg
RXVyb3BlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lT
T184ODU5XzI7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDEyNTA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUND
RU5UUkFMRVVST1BFOworCisgICAgICAgIC8vIFZpZXRuYW1lc2UKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1ODsKKworICAgICAgICAvLyBUdXJraXNo
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTQ7Cisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV85Owor
CisgICAgICAgIC8vIEJhbHRpYworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2Rl
Y0FsaWFzZXNfQ1AxMjU3OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfSVNPXzg4NTlfNDsKKworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRlciBjb25zdCBt
X2ljb252QmFzZUNvZGVjTGlzdFtdOworICAgICAgICBzdGF0aWMgZ2NvbnN0cG9pbnRlciBjb25z
dCBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3RbXTsKKworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRDb2RlY0dUS19oCg==
</data>
<flag name="review"
          id="22827"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41866</attachid>
            <date>2009-10-26 07:39:01 -0700</date>
            <delta_ts>2009-10-30 06:35:18 -0700</delta_ts>
            <desc>2/4 - Moving Text Codecs to GLib (v3)</desc>
            <filename>2_4_TextCodecs_GLib_v3.diff</filename>
            <type>text/plain</type>
            <size>33759</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUw
MDUxKQorKysgd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMDktMTAtMjYgIERvbWluaWsgUsO2dHRzY2hlcyAg
PGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1
bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIEluaXRpYWwgdmVyc2lvbiBvZiB0aGlz
IHBhdGNoIGJ5IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgUGF0Y2gg
Mi80IC0gTW92aW5nIFRleHRDb2RlY3MgdG8gR0xpYgorICAgICAgICAKKyAgICAgICAgQWRkZWQg
cHJvYmluZyBmb3IgYSBoYXJkLWNvZGVkIGxpc3RzIG9mIHRleHQgZW5jb2RpbmdzLgorICAgICAg
ICBUaGUgYmFzaXMgb2YgdGhpcyBsaXN0IGlzIHRha2VuIGZyb20gdGhlIGVuY29kaW5ncyBzdXBw
b3J0ZWQgYnkgaWNvbnYsCisgICAgICAgIHRoZW4gZXh0ZW5kZWQgYnkgZS5nLiB0aXMtNjIwLCB3
aW5kb3dzLTEyNTEsIGV1Yy1rciwgd2luZG93cy0xMjUzIGFuZAorICAgICAgICBhIG51bWJlciBv
ZiBDaGluZXNlIG9uZXMuCisKKyAgICAgICAgUHJvYmluZyBpcyBuZWNlc3Nhcnkgd2l0aCB0aGUg
Y3VycmVudCBkZXNpZ24gb2YgdGV4dCBjb2RlY3MKKyAgICAgICAgYXMgaWNvbnYvR0xpYiBkbyBu
b3Qgc3VwcG9ydCBlbnVtZXJhdGluZyBhdmFpbGFibGUgZW5jb2RpbmdzLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEJhc2VUZXh0Q29k
ZWNNYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlY0d0ayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmlzRW5jb2RpbmdBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckVuY29kaW5nTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjp+VGV4dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY0d0azo6cmVsZWFzZUlDb252KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6
Y3JlYXRlSUNvbnZEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6Y3Jl
YXRlSUNvbnZFbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZW5jb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaDogQWRkZWQuCisKIDIwMDktMTAtMjYgIEtp
bnVrbyBZYXN1ZGEgIDxraW51a29AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
YW4gQWxvbnpvLgpJbmRleDogd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uIDUwMDUxKQorKysgd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MzksOCArMTYzOSw2IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlYy5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuaCBcCi0JV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWNJQ1UuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0xhdGluMS5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjE2LmNwcCBcCkBAIC0yMDExLDYgKzIwMDksMjYgQEAgd2Vi
Y29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlc3BvbnNlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKIAorIyAtLS0tCisjIGljdSB1bmljb2RlIGJhY2tlbmQK
KyMgLS0tLQoraWYgVVNFX0lDVV9VTklDT0RFCit3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAorCVdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjSUNVLmgKKworZW5kaWYKKworIyAtLS0tCisjIGdsaWIgdW5pY29kZSBi
YWNrZW5kCisjIC0tLS0KK2lmIFVTRV9HTElCX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyAr
PSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCitlbmRpZgorCisKICMgLS0tCiAj
IENoYW5uZWwgbWVzYWdpbmcgc3VwcG9ydAogIyAtLS0KSW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9D
b2RlYy9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEu
Y3BwCShyZXZpc2lvbiA1MDA1MSkKKysrIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3Bs
YXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBACiAjaW5jbHVkZSAiVGhyZWFkVGltZXJzLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CiAKLSNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJ
RCkKKyNpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAjZW5k
aWYKIApAQCAtNzUsNyArNzUsNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRh
KCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2lzTWFpblRocmVhZChpc01haW5UaHJlYWQoKSkK
ICNlbmRpZgotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlC
UklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICAgICAsIG1fY2FjaGVkQ29udmVydGVySUNVKG5l
dyBJQ1VDb252ZXJ0ZXJXcmFwcGVyKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtODks
NyArODksNyBAQCBUaHJlYWRHbG9iYWxEYXRhOjp+VGhyZWFkR2xvYmFsRGF0YSgpCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIGRlbGV0ZSBtX2NhY2hlZENvbnZlcnRlclRFQzsKICNlbmRpZgotI2lm
IFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVT
RShJQ1VfVU5JQ09ERSkKICAgICBkZWxldGUgbV9jYWNoZWRDb252ZXJ0ZXJJQ1U7CiAjZW5kaWYK
IApJbmRleDogd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAkocmV2aXNpb24gNTAwNTEpCisrKyB3a1Ry
dW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiwxMyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVjLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVn
aXN0cnkuaCIKLSNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZ
QlJJRCkKKyNpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgog
I2VsaWYgVVNFKFFUNF9VTklDT0RFKQogI2luY2x1ZGUgPFFTdHJpbmc+CisjZWxpZiBVU0UoR0xJ
Ql9VTklDT0RFKQorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgog
I2VuZGlmCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CkBAIC04NCw3ICs4Nyw3IEBAIENTdHJpbmcgVGV4dEVuY29kaW5nOjplbmNvZGUoY29uc3QgVUNo
YXIKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuICIiOwogCi0jaWYgVVNFKElDVV9V
TklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCisjaWYgVVNFKElDVV9VTklD
T0RFKQogICAgIC8vIEZJWE1FOiBXaGF0J3MgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIG5vcm1hbGl6
YXRpb24/CiAgICAgLy8gSXQncyBhIGxpdHRsZSBzdHJhbmdlIHRvIGRvIGl0IGluc2lkZSB0aGUg
ZW5jb2RlIGZ1bmN0aW9uLgogICAgIC8vIFBlcmhhcHMgbm9ybWFsaXphdGlvbiBzaG91bGQgYmUg
YW4gZXhwbGljaXQgc3RlcCBkb25lIGJlZm9yZSBjYWxsaW5nIGVuY29kZS4KQEAgLTExNCw2ICsx
MTcsMTggQEAgQ1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShjb25zdCBVQ2hhcgogICAgIFFT
dHJpbmcgc3RyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihjaGFyYWN0ZXJzKSwgbGVu
Z3RoKTsKICAgICBzdHIgPSBzdHIubm9ybWFsaXplZChRU3RyaW5nOjpOb3JtYWxpemF0aW9uRm9y
bV9DKTsKICAgICByZXR1cm4gbmV3VGV4dENvZGVjKCp0aGlzKS0+ZW5jb2RlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oc3RyLnV0ZjE2KCkpLCBzdHIubGVuZ3RoKCksIGhhbmRsaW5n
KTsKKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisgICAgR093blB0cjxjaGFyPiB1dGY4U291cmNl
OworICAgIHV0ZjhTb3VyY2Uuc2V0KGdfdXRmMTZfdG9fdXRmOChjaGFyYWN0ZXJzLCBsZW5ndGgs
IDAsIDAsIDApKTsKKworICAgIEdPd25QdHI8Y2hhcj4gdXRmOE5vcm1hbGl6ZWQ7CisgICAgdXRm
OE5vcm1hbGl6ZWQuc2V0KGdfdXRmOF9ub3JtYWxpemUodXRmOFNvdXJjZS5nZXQoKSwgLTEsIEdf
Tk9STUFMSVpFX05GQykpOworCisgICAgbG9uZyB1dGYxNkxlbmd0aDsKKyAgICBHT3duUHRyPFVD
aGFyPiB1dGYxNk5vcm1hbGl6ZWQ7CisgICAgdXRmMTZOb3JtYWxpemVkLnNldChnX3V0ZjhfdG9f
dXRmMTYodXRmOE5vcm1hbGl6ZWQuZ2V0KCksIC0xLCAwLCAmdXRmMTZMZW5ndGgsIDApKTsKKwor
ICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUodXRmMTZOb3JtYWxpemVkLmdl
dCgpLCB1dGYxNkxlbmd0aCwgaGFuZGxpbmcpOwogI2VsaWYgUExBVEZPUk0oV0lOQ0UpCiAgICAg
Ly8gbm9ybWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgYnkgV2luZG93cyBDRSBBUEkKICAgICBPd25Q
dHI8VGV4dENvZGVjPiB0ZXh0Q29kZWMgPSBuZXdUZXh0Q29kZWMoKnRoaXMpOwpJbmRleDogd2tU
cnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdp
c3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDUwMDUxKQorKysg
d2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCi0jaWYgVVNF
KElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCisjaWYgVVNFKElD
VV9VTklDT0RFKQogI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5oIgogI2VuZGlmCiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtNDgsNiArNDgsOSBAQAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgInF0
L1RleHRDb2RlY1F0LmgiCiAjZW5kaWYKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorI2luY2x1ZGUg
Imd0ay9UZXh0Q29kZWNHdGsuaCIKKyNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTkNFKSAmJiAhUExB
VEZPUk0oUVQpCiAjaW5jbHVkZSAiVGV4dENvZGVjV2luY2UuaCIKICNlbmRpZgpAQCAtMjE3LDEx
ICsyMjAsMTYgQEAgc3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENvZGVjTWFwcygpCiAgICAgVGV4
dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGlu
Z05hbWVNYXApOwogICAgIFRleHRDb2RlY1VzZXJEZWZpbmVkOjpyZWdpc3RlckNvZGVjcyhhZGRU
b1RleHRDb2RlY01hcCk7CiAKLSNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9V
TklDT0RFX0hZQlJJRCkKKyNpZiBVU0UoSUNVX1VOSUNPREUpCiAgICAgVGV4dENvZGVjSUNVOjpy
ZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAg
VGV4dENvZGVjSUNVOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwogI2Vu
ZGlmCiAKKyNpZiBVU0UoR0xJQl9VTklDT0RFKQorICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJC
YXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2Rl
Y0d0azo6cmVnaXN0ZXJCYXNlQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgorCiAj
aWYgUExBVEZPUk0oV0lOQ0UpICYmICFQTEFURk9STShRVCkKICAgICBUZXh0Q29kZWNXaW5jZTo6
cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXApOwogICAg
IFRleHRDb2RlY1dpbmNlOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwpA
QCAtMjMwLDcgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkQmFzZVRleHRDb2RlY01hcHMoKQog
CiBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKIHsKLSNpZiBVU0UoSUNVX1VOSUNP
REUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKKyNpZiBVU0UoSUNVX1VOSUNPREUp
CiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1Rl
eHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY0lDVTo6cmVnaXN0ZXJFeHRlbmRlZENv
ZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKQEAgLTI0NSw2ICsyNTMsMTEgQEAgc3Rh
dGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFwcygpCiAgICAgVGV4dENvZGVjTWFjOjpyZWdpc3Rl
ckNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5kaWYKIAorI2lmIFVTRShHTElCX1VOSUNP
REUpCisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRU
b1RleHRFbmNvZGluZ05hbWVNYXApOworICAgIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRl
ZENvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTkNF
KSAmJiAhUExBVEZPUk0oUVQpCiAgICAgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyRXh0ZW5kZWRF
bmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjV2lu
Y2U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwpJbmRleDogd2tU
cnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgd2tUcnVua0dsaWJf
Ml80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBKw7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNv
bXBhbnkuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dENv
ZGVjR3RrLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL0dPd25QdHIuaD4KKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK3Vz
aW5nIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRleHRDb2RlYydzIGFw
cGVuZE9taXR0aW5nQk9NKCkgaXMgZ29uZSAoaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMzMzODApLiAKKy8vIFRoYXQncyB3aHkgd2UgbmVlZCB0byBhdm9pZCBnZW5lcmF0aW5nIGV4
dHJhIEJPTSdzIGZvciB0aGUgY29udmVyc2lvbiByZXN1bHQuCisvLyBUaGlzIGNhbiBiZSBhY2hp
ZXZlZCBieSBzcGVjaWZ5aW5nIHRoZSBVVEYtMTYgY29kZWNzJyBlbmRpYW5uZXNzIGV4cGxpY2l0
bHkgd2hlbiBpbml0aWFsaXppbmcgR0xpYi4KKworI2lmIChHX0JZVEVfT1JERVIgPT0gR19CSUdf
RU5ESUFOKQorICAgIGNvbnN0IGdjaGFyKiBXZWJDb3JlOjpUZXh0Q29kZWNHdGs6Om1faW50ZXJu
YWxFbmNvZGluZ05hbWUgPSAiVVRGLTE2QkUiOworI2Vsc2UgCisgICAgY29uc3QgZ2NoYXIqIFdl
YkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZMRSI7
CisjZW5kaWYKKworCisvLyBXZSdyZSBzcGVjaWZ5aW5nIHRoZSBsaXN0IG9mIHRleHQgY29kZWNz
IGFuZCB0aGVpciBhbGlhc2VzIGhlcmUuIAorLy8gRm9yIGVhY2ggY29kZWMgdGhlIGZpcnN0IGVu
dHJ5IGlzIHRoZSBjYW5vbmljYWwgbmFtZSwgcmVtYWluaW5nIG9uZXMgYXJlIHVzZWQgYXMgYWxp
YXNlcy4KKy8vIEVhY2ggYWxpYXMgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYSAwLgorCisv
LyBVbmljb2RlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9j
b2RlY0FsaWFzZXNfVVRGXzggICAgICAgICAgICA9IHsgIlVURi04IiwgMCB9OyAKKworLy8gV2Vz
dGVybgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNB
bGlhc2VzX0lTT184ODU5XzEgICAgICAgPSB7ICJJU08tODg1OS0xIiwgIkNQODE5IiwgIklCTTgx
OSIsICJJU08tSVItMTAwIiwgIklTTzg4NTktMSIsICJJU09fODg1OS0xIiwgIklTT184ODU5LTE6
MTk4NyIsICAiTDEiLCAiTEFUSU4xIiwgIkNTSVNPTEFUSU4xIiwgMCB9OworVGV4dENvZGVjR3Rr
Ojpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01BQ1JPTUFOICAg
ICAgICAgPSB7ICJNQUNST01BTiIsICJNQUMiLCAiTUFDSU5UT1NIIiwgIkNTTUFDSU5UT1NIIiwg
MCB9OworCisvLyBKYXBhbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX1NISUZUX0pJUyAgICAgICAgPSB7ICJTaGlmdF9KSVMiLCAi
TVNfS0FOSkkiLCAiU0hJRlQtSklTIiwgIlNKSVMiLCAiQ1NTSElGVEpJUyIsIDAgfTsKKyAgICBU
ZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNf
RVVDX0pQICAgICAgID0geyAiRVVDLUpQIiwgIkVVQ19KUCIsICJFVUNKUCIsICJFWFRFTkRFRF9V
TklYX0NPREVfUEFDS0VEX0ZPUk1BVF9GT1JfSkFQQU5FU0UiLCAiQ1NFVUNQS0RGTVRKQVBBTkVT
RSIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19JU09fMjAyMl9KUCAgICAgID0geyAiSVNPLTIwMjItSlAiLCAwIH07CisKKy8v
IFRyYWRpdGlvbmFsIENoaW5lc2UKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19CSUc1ICAgICAgICAgICAgID0geyAiQklHNSIsICJCSUct
NSIsICJCSUctRklWRSIsICJCSUc1IiwgIkJJR0ZJVkUiLCAiQ04tQklHNSIsICJDU0JJRzUiLCAw
IH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfQklHNV9IS1NDUyAgICAgICA9IHsgIkJJRzUtSEtTQ1MiLCAiQklHNS1IS1NDUzoyMDA0
IiwgIkJJRzVIS1NDUyIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDk1MCAgICAgICAgICAgID0geyAiQ1A5NTAiLCAwIH07
CisKKy8vIEtvcmVhbgorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSICAgICAgPSB7ICJJU08tMjAyMi1LUiIsICJDU0lT
TzIwMjJLUiIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3Rr
OjptX2NvZGVjQWxpYXNlc19DUDk0OSAgICAgICAgICAgID0geyAiQ1A5NDkiLCAiVUhDIiwgMCB9
OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlh
c2VzX0VVQ19LUiAgICAgICAgICAgPSB7ICJFVUMtS1IiLCAiQ1NFVUNLUiIsIDAgfTsKKworLy8g
QXJhYmljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfSVNPXzg4NTlfNiAgICAgICA9IHsgIklTTy04ODU5LTYiLCAiQVJBQklDIiwgIkFT
TU8tNzA4IiwgIkVDTUEtMTE0IiwgIklTTy1JUi0xMjciLCAiSVNPODg1OS02IiwgIklTT184ODU5
LTYiLCAiSVNPXzg4NTktNjoxOTg3IiwgIkNTSVNPTEFUSU5BUkFCSUMiLCAwIH07CitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU2
ICAgICAgICAgICA9IHsgIndpbmRvd3MtMTI1NiIsICJDUDEyNTYiLCAiTVMtQVJBQiIsIDAgfTsg
Ly8gcmVhcnJhbmdlZCwgd2luZG93cy0xMjU2IG5vdyBkZWNsYXJlZCB0aGUgY2Fub25pY2FsIG5h
bWUgYW5kIHB1dCB0byBsb3dlcmNhc2UgdG8gZml4IC9mYXN0L2VuY29kaW5nL2FocmFtLW9yZy1l
Zy5odG1sIHRlc3QgY2FzZQorCisvLyBIZWJyZXcKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xp
c3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV84ICAgICAgID0geyAiSVNP
LTg4NTktOCIsICJIRUJSRVciLCAiSVNPLTg4NTktOCIsICJJU08tSVItMTM4IiwgIklTTzg4NTkt
OCIsICJJU09fODg1OS04IiwgIklTT184ODU5LTg6MTk4OCIsICJDU0lTT0xBVElOSEVCUkVXIiwg
MCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNB
bGlhc2VzX0NQMTI1NSAgICAgICAgICAgPSB7ICJ3aW5kb3dzLTEyNTUiLCAiQ1AxMjU1IiwgIk1T
LUhFQlIiLCAwIH07IC8vIHJlYXJyYW5nZWQsIG1vdmVkIHdpbmRvd3MtMTI1NSBhcyBjYW5vbmlj
YWwgYW5kIGxvd2VyY2FzZWQsIGZpeGluZyAvZmFzdC9lbmNvZGluZy9tZXRhLWNoYXJzZXQuaHRt
bAorCisvLyBHcmVlaworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzcgICAgICAgPSB7ICJJU08tODg1OS03IiwgIkVDTUEt
MTE4IiwgIkVMT1RfOTI4IiwgIkdSRUVLIiwgIkdSRUVLOCIsICJJU08tSVItMTI2IiwgIklTTzg4
NTktNyIsICJJU09fODg1OS03IiwgIklTT184ODU5LTc6MTk4NyIsICJJU09fODg1OS03OjIwMDMi
LCAiQ1NJIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0NQODY5ICAgICAgICAgICAgPSB7ICJDUDg2OSIsICI4NjkiLCAiQ1At
R1IiLCAiSUJNODY5IiwgIkNTSUJNODY5IiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MyAgICAgPSB7ICJX
SU5ET1dTLTEyNTMiLCAwIH07CisKKy8vIEN5cmlsbGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSAgICAgICA9IHsg
IklTTy04ODU5LTUiLCAiQ1lSSUxMSUMiLCAiSVNPLUlSLTE0NCIsICJJU084ODU5LTUiLCAiSVNP
Xzg4NTktNSIsICJJU09fODg1OS01OjE5ODgiLCAiQ1NJU09MQVRJTkNZUklMTElDIiwgMCB9Owor
VGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2Vz
X0tPSThfUiAgICAgICAgICAgPSB7ICJLT0k4LVIiLCAiQ1NLT0k4UiIsIDAgfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDg2NiAg
ICAgICAgICAgID0geyAiQ1A4NjYiLCAiODY2IiwgIklCTTg2NiIsICJDU0lCTTg2NiIsIDAgfTsK
K1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19LT0k4X1UgICAgICAgICAgID0geyAiS09JOC1VIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2Rl
Y0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX1dJTkRPV1NfMTI1MSAgICAg
PSB7ICJ3aW5kb3dzLTEyNTEiLCAiQ1AxMjUxIiwgMCB9OyAvLyBDUDEyNTEgYWRkZWQgdG8gcGFz
cyAvZmFzdC9lbmNvZGluZy9jaGFyc2V0LWNwMTI1MS5odG1sCitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUMgICAgICA9
IHsgIm1hYy1jeXJpbGxpYyIsICJNQUNDWVJJTExJQyIsICJ4LW1hYy1jeXJpbGxpYyIsIDAgfTsg
CisKKy8vIFRoYWkKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjpt
X2NvZGVjQWxpYXNlc19DUDg3NCAgICAgICAgICAgID0geyAiQ1A4NzQiLCAiV0lORE9XUy04NzQi
LCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfVElTXzYyMCAgICAgICAgICA9IHsgIlRJUy02MjAiLCAwIH07CisKKy8vIFNpbXBs
aWZpZWQgQ2hpbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0dCSyAgICAgICAgICAgICAgPSB7ICJHQksiLCAwIH07CitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSFogICAg
ICAgICAgICAgICA9IHsgIkhaIiwgIkhaLUdCLTIzMTIiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNv
ZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfR0IxODAzMCAgICAgICAg
ICA9IHsgIkdCMTgwMzAiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfRVVDX0NOICAgICAgICAgICA9IHsgIkVVQy1DTiIsICJF
VUNDTiIsICJHQjIzMTIiLCAiQ04tR0IiLCAiQ1NHQjIzMTIiLCAiRVVDX0NOIiwgMCB9OworVGV4
dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzXzIz
MTJfODAgICAgICAgICAgPSB7ICJHQl8yMzEyLTgwIiwgIkNISU5FU0UiLCAiY3NJU081OEdCMjMx
MjgwIiwgIkdCMjMxMi4xOTgwLTAiLCAiSVNPLUlSLTU4IiB9OworCisvLyBDZW50cmFsIEV1cm9w
ZWFuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfSVNPXzg4NTlfMiAgICAgICA9IHsgIklTTy04ODU5LTIiLCAiSVNPLUlSLTEwMSIsICJJ
U084ODU5LTIiLCAiSVNPXzg4NTktMiIsICJJU09fODg1OS0yOjE5ODciLCAiTDIiLCAiTEFUSU4y
IiwgIkNTSVNPTEFUSU4yIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0
Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1MCAgICAgICAgICAgPSB7ICJDUDEyNTAiLCAi
TVMtRUUiLCAiV0lORE9XUy0xMjUwIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX01BQ0NFTlRSQUxFVVJPUEUgPSB7ICJNQUMt
Q0VOVFJBTEVVUk9QRSIsIDAgfTsKKworLy8gVmlldG5hbWVzZQorVGV4dENvZGVjR3RrOjpjb2Rl
Y0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1OCAgICAgICAgICAg
PSB7ICJDUDEyNTgiLCAiV0lORE9XUy0xMjU4IiwgMCB9OworCisvLyBUdXJraXNoCitUZXh0Q29k
ZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU0
ICAgICAgICAgICA9IHsgIkNQMTI1NCIsICJNUy1UVVJLIiwgIldJTkRPV1MtMTI1NCIsIDAgfTsK
K1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19JU09fODg1OV85ICAgICAgID0geyAiSVNPLTg4NTktOSIsICJJU08tSVItMTQ4IiwgIklTTzg4
NTktOSIsICJJU09fODg1OS05IiwgIklTT184ODU5LTk6MTk4OSIsICJMNSIsICJMQVRJTjUiLCAi
Q1NJU09MQVRJTjUiLCAwIH07CisKKy8vIEJhbHRpYworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQMTI1NyAgICAgICAgICAgPSB7ICJD
UDEyNTciLCAiV0lOQkFMVFJJTSIsICJXSU5ET1dTLTEyNTciLCAwIH07CitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNCAg
ICAgICA9IHsgIklTTy04ODU5LTQiLCAiSVNPLUlSLTExMCIsICJJU084ODU5LTQiLCAiSVNPXzg4
NTktNCIsICJJU09fODg1OS00OjE5ODgiLCAiTDQiLCAiTEFUSU40IiwgIkNTSVNPTEFUSU40Iiwg
MCB9OworCitnY29uc3Rwb2ludGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkJhc2VDb2Rl
Y0xpc3RbXSA9IHsgCisgICAgLy8gVW5pY29kZQorICAgICZtX2NvZGVjQWxpYXNlc19VVEZfOCwK
KworICAgIC8vIFdlc3Rlcm4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMQorfTsKKwor
Z2NvbnN0cG9pbnRlciBjb25zdCBUZXh0Q29kZWNHdGs6Om1faWNvbnZFeHRlbmRlZENvZGVjTGlz
dFtdID0gCit7CisgICAgLy8gV2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19NQUNST01BTiwK
KworICAgIC8vIEphcGFuZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX1NISUZUX0pJUywKKyAgICAm
bV9jb2RlY0FsaWFzZXNfRVVDX0pQLAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9KUCwK
KworICAgIC8vIFNpbXBsaWZpZWQgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19CSUc1LAor
ICAgICZtX2NvZGVjQWxpYXNlc19CSUc1X0hLU0NTLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDk1
MCwKKworICAgIC8vIEtvcmVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUiwKKyAg
ICAmbV9jb2RlY0FsaWFzZXNfQ1A5NDksCisgICAgJm1fY29kZWNBbGlhc2VzX0VVQ19LUiwKKwor
ICAgIC8vIEFyYWJpYworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV82LAorICAgICZtX2Nv
ZGVjQWxpYXNlc19DUDEyNTYsCisgICAgCisgICAgLy8gSGVicmV3CisgICAgJm1fY29kZWNBbGlh
c2VzX0lTT184ODU5XzgsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NSwKKyAgICAKKyAgICAv
LyBHcmVlaworICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV83LAorICAgICZtX2NvZGVjQWxp
YXNlc19DUDg2OSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzLAorICAgIAorICAg
IC8vIEN5cmlsbGljCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzUsCisgICAgJm1fY29k
ZWNBbGlhc2VzX0tPSThfUiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1A4NjYsCisgICAgJm1fY29k
ZWNBbGlhc2VzX0tPSThfVSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxLAorICAg
ICZtX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQywKKyAgICAKKyAgICAvLyBUaGFpCisgICAgJm1f
Y29kZWNBbGlhc2VzX0NQODc0LAorICAgICZtX2NvZGVjQWxpYXNlc19USVNfNjIwLAorICAgIAor
ICAgIC8vIFRyYWRpdGlvbmFsIENoaW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0JLLAorICAg
ICZtX2NvZGVjQWxpYXNlc19IWiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfR0IxODAzMCwKKyAgICAm
bV9jb2RlY0FsaWFzZXNfRVVDX0NOLAorICAgICZtX2NvZGVjQWxpYXNlc18yMzEyXzgwLAorICAg
IAorICAgIC8vIENlbnRyYWwgRXVyb3BlYW4KKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlf
MiwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjUwLAorICAgICZtX2NvZGVjQWxpYXNlc19NQUND
RU5UUkFMRVVST1BFLAorICAgIAorICAgIC8vIFZpZXRuYW1lc2UKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfQ1AxMjU4LAorICAgIAorICAgIC8vIFR1cmtpc2gKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1Ax
MjU0LAorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV85LAorICAgIAorICAgIC8vIEJhbHRp
YworICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTcsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184
ODU5XzQKK307CisKKworY29uc3Qgc2l6ZV90IENvbnZlcnNpb25CdWZmZXJTaXplID0gMTYzODQ7
CisgICAgCisKK3N0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjR3RrKGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBu
ZXcgVGV4dENvZGVjR3RrKGVuY29kaW5nKTsKK30KKworZ2Jvb2xlYW4gVGV4dENvZGVjR3RrOjpp
c0VuY29kaW5nQXZhaWxhYmxlKGNvbnN0IGdjaGFyKiBlbmNOYW1lKQoreworICAgIEdJQ29udiB0
ZXN0ZXI7CisgICAgLy8gdGVzdCBkZWNvZGluZworICAgIHRlc3RlciA9IGdfaWNvbnZfb3Blbiht
X2ludGVybmFsRW5jb2RpbmdOYW1lLCBlbmNOYW1lKTsKKyAgICBpZiAodGVzdGVyID09IHJlaW50
ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UodGVzdGVyKTsKKyAgICAgICAgLy8gdGVzdCBl
bmNvZGluZworICAgICAgICB0ZXN0ZXIgPSBnX2ljb252X29wZW4oZW5jTmFtZSwgbV9pbnRlcm5h
bEVuY29kaW5nTmFtZSk7CisgICAgICAgIGlmICh0ZXN0ZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxH
SUNvbnY+KC0xKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3Rl
ckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBleHRl
bmRlZCkKK3sKKyAgICBjb25zdCB2b2lkKiBjb25zdCogZW5jb2RpbmdMaXN0OworICAgIHVuc2ln
bmVkIGludCBsaXN0TGVuZ3RoID0gMDsKKyAgICBpZiAoZXh0ZW5kZWQpIHsKKyAgICAgICAgZW5j
b2RpbmdMaXN0ID0gbV9pY29udkV4dGVuZGVkQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3Ro
ID0gc2l6ZW9mKG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdCkvc2l6ZW9mKGdwb2ludGVyKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252QmFzZUNvZGVjTGlzdDsK
KyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252QmFzZUNvZGVjTGlzdCkvc2l6ZW9m
KGdwb2ludGVyKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxp
c3RMZW5ndGg7ICsraSkgeworICAgICAgICBjb2RlY0FsaWFzTGlzdCAqY29kZWNBbGlhc2VzID0g
c3RhdGljX2Nhc3Q8Y29kZWNBbGlhc0xpc3QqPihlbmNvZGluZ0xpc3RbaV0pOworICAgICAgICAK
KyAgICAgICAgLy8gT3VyIGNvbnZlbnRpb24gaXMsIHRoZSBmaXJzdCBlbnRyeSBpbiBjb2RlY0Fs
aWFzZXMgaXMgdGhlIGNhbm9uaWNhbCBuYW1lLCAKKyAgICAgICAgLy8gc2VlIGFib3ZlIGluIHRo
ZSBsaXN0IG9mIGRlY2xhcmF0aW9ucy4gCisgICAgICAgIC8vIFByb2JlIEdMaWIgZm9yIHRoaXMg
b25lIGZpcnN0LiBJZiBpdCdzIG5vdCBhdmFpbGFibGUsIHdlIHNraXAgdGhlIHdob2xlIGdyb3Vw
IG9mIGFsaWFzZXMuCisKKyAgICAgICAgaW50IGNvZGVjQ291bnQgPSAwOworICAgICAgICBjb25z
dCBjaGFyICpjYW5vbmljYWxOYW1lOworICAgICAgICBjYW5vbmljYWxOYW1lID0gKCpjb2RlY0Fs
aWFzZXMpW2NvZGVjQ291bnRdOworCisgICAgICAgIGlmKCFpc0VuY29kaW5nQXZhaWxhYmxlKGNh
bm9uaWNhbE5hbWUpKSB7CisgICAgICAgICAgICBMT0coVGV4dENvbnZlcnNpb24sICJDYW5vbmlj
YWwgZW5jb2RpbmcgJXMgbm90IGF2YWlsYWJsZSwgc2tpcHBpbmcuIiwgY2Fub25pY2FsTmFtZSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZWdpc3RyYXIoY2Fu
b25pY2FsTmFtZSwgY2Fub25pY2FsTmFtZSk7CisKKyAgICAgICAgY29uc3QgY2hhciAqY3VycmVu
dEFsaWFzOworICAgICAgICB3aGlsZSAoKGN1cnJlbnRBbGlhcyA9ICgqY29kZWNBbGlhc2VzKVsr
K2NvZGVjQ291bnRdKSkgeworICAgICAgICAgICAgaWYgKGlzRW5jb2RpbmdBdmFpbGFibGUoY3Vy
cmVudEFsaWFzKSkgeworICAgICAgICAgICAgICAgIExPRyhUZXh0Q29udmVyc2lvbiwgIlJlZ2lz
dGVyaW5nIGVuY29kaW5nIG5hbWUgYWxpYXMgJXMgdG8gY2Fub25pY2FsICVzIiwgY3VycmVudEFs
aWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgICAgICByZWdpc3RyYXIoY3VycmVudEFs
aWFzLCBjYW5vbmljYWxOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQor
fQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFy
IHJlZ2lzdHJhciwgYm9vbCBleHRlbmRlZCkKK3sKKyAgICBjb25zdCB2b2lkKiBjb25zdCogZW5j
b2RpbmdMaXN0OworICAgIHVuc2lnbmVkIGludCBsaXN0TGVuZ3RoID0gMDsKKyAgICBpZiAoZXh0
ZW5kZWQpIHsKKyAgICAgICAgZW5jb2RpbmdMaXN0ID0gbV9pY29udkV4dGVuZGVkQ29kZWNMaXN0
OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZFeHRlbmRlZENvZGVjTGlzdCkv
c2l6ZW9mKGdwb2ludGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbmNvZGluZ0xpc3QgPSBt
X2ljb252QmFzZUNvZGVjTGlzdDsKKyAgICAgICAgbGlzdExlbmd0aCA9IHNpemVvZihtX2ljb252
QmFzZUNvZGVjTGlzdCkvc2l6ZW9mKGdwb2ludGVyKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGxpc3RMZW5ndGg7ICsraSkgeworICAgICAgICBjb2RlY0FsaWFz
TGlzdCAqY29kZWNBbGlhc2VzID0gc3RhdGljX2Nhc3Q8Y29kZWNBbGlhc0xpc3QqPihlbmNvZGlu
Z0xpc3RbaV0pOworICAgICAgICAvLyBieSBjb252ZW50aW9uLCB0aGUgZmlyc3QgImFsaWFzIiBz
aG91bGQgYmUgdGhlIGNhbm9uaWNhbCBuYW1lLCBzZWUgdGhlIGRlZmluaXRpb24gb2YgdGhlIGFs
aWFzIGxpc3RzIAorICAgICAgICBjb25zdCBnY2hhciAqY29kZWNOYW1lID0gKCpjb2RlY0FsaWFz
ZXMpWzBdOworICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShjb2RlY05hbWUpKQorICAg
ICAgICAgICAgcmVnaXN0cmFyKGNvZGVjTmFtZSwgbmV3VGV4dENvZGVjR3RrLCAwKTsKKyAgICB9
Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29k
aW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVz
KHJlZ2lzdHJhciwgZmFsc2UpOworfQorCit2b2lkIFRleHRDb2RlY0d0azo6cmVnaXN0ZXJCYXNl
Q29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0ZXJDb2Rl
Y3MocmVnaXN0cmFyLCBmYWxzZSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4
dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQorewor
ICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhyZWdpc3RyYXIsIHRydWUpOworfQorCit2b2lkIFRl
eHRDb2RlY0d0azo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVn
aXN0cmFyKQoreworICAgIHJlZ2lzdGVyQ29kZWNzKHJlZ2lzdHJhciwgdHJ1ZSk7Cit9CisKK1Rl
eHRDb2RlY0d0azo6VGV4dENvZGVjR3RrKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCisg
ICAgOiBtX2VuY29kaW5nKGVuY29kaW5nKQorICAgICwgbV9udW1CdWZmZXJlZEJ5dGVzKDApCisg
ICAgLCBtX2ljb252RGVjb2RlcihyZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQorICAgICwg
bV9pY29udkVuY29kZXIocmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKK3sKK30KKworVGV4
dENvZGVjR3RrOjp+VGV4dENvZGVjR3RrKCkKK3sKKyAgICBpZiAobV9pY29udkRlY29kZXIgIT0g
cmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICBnX2ljb252X2Nsb3NlKG1f
aWNvbnZEZWNvZGVyKTsKKyAgICAgICAgbV9pY29udkRlY29kZXIgPSByZWludGVycHJldF9jYXN0
PEdJQ29udj4oLTEpOworICAgIH0KKyAgICBpZiAobV9pY29udkVuY29kZXIgIT0gcmVpbnRlcnBy
ZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICBnX2ljb252X2Nsb3NlKG1faWNvbnZFbmNv
ZGVyKTsKKyAgICAgICAgbV9pY29udkVuY29kZXIgPSByZWludGVycHJldF9jYXN0PEdJQ29udj4o
LTEpOworICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OmNyZWF0ZUlDb252RGVjb2Rlcigp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8
R0lDb252PigtMSkpOworCisgICAgbV9pY29udkRlY29kZXIgPSBnX2ljb252X29wZW4obV9pbnRl
cm5hbEVuY29kaW5nTmFtZSwgbV9lbmNvZGluZy5uYW1lKCkpOworfQorCit2b2lkIFRleHRDb2Rl
Y0d0azo6Y3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pY29udkRl
Y29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSk7CisKKyAgICBtX2ljb252RW5j
b2RlciA9IGdfaWNvbnZfb3BlbihtX2VuY29kaW5nLm5hbWUoKSwgbV9pbnRlcm5hbEVuY29kaW5n
TmFtZSk7Cit9CisKK1N0cmluZyBUZXh0Q29kZWNHdGs6OmRlY29kZShjb25zdCBjaGFyKiBieXRl
cywgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3
RXJyb3IpCit7CisgICAgLy8gR2V0IGEgY29udmVydGVyIGZvciB0aGUgcGFzc2VkLWluIGVuY29k
aW5nLgorICAgIGlmIChtX2ljb252RGVjb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4o
LTEpKSB7CisgICAgICAgIGNyZWF0ZUlDb252RGVjb2RlcigpOworICAgICAgICBBU1NFUlQobV9p
Y29udkRlY29kZXIgIT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSk7CisgICAgICAgIGlm
IChtX2ljb252RGVjb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIElDb252IGVuY29kZXIgZXZlbiB0aG91
Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IGNvdW50V3JpdHRlbiwgY291bnRSZWFk
LCBjb252ZXJzaW9uTGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIGNvbnZlcnNpb25CeXRlczsKKyAg
ICBjaGFyKiBwcmVmaXhlZEJ5dGVzID0gMDsKKworICAgIGlmIChtX251bUJ1ZmZlcmVkQnl0ZXMp
IHsKKyAgICAgICAgY29udmVyc2lvbkxlbmd0aCA9IGxlbmd0aCArIG1fbnVtQnVmZmVyZWRCeXRl
czsKKyAgICAgICAgcHJlZml4ZWRCeXRlcyA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9j
KGNvbnZlcnNpb25MZW5ndGgpKTsKKyAgICAgICAgbWVtY3B5KHByZWZpeGVkQnl0ZXMsIG1fYnVm
ZmVyZWRCeXRlcywgbV9udW1CdWZmZXJlZEJ5dGVzKTsKKyAgICAgICAgbWVtY3B5KHByZWZpeGVk
Qnl0ZXMgKyBtX251bUJ1ZmZlcmVkQnl0ZXMsIGJ5dGVzLCBsZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgY29udmVyc2lvbkJ5dGVzID0gcHJlZml4ZWRCeXRlczsKKyAgICAgICAgCisgICAgICAg
IC8vIGFsbCBidWZmZXJlZCBieXRlcyBhcmUgY29uc3VtZWQgbm93CisgICAgICAgIG1fbnVtQnVm
ZmVyZWRCeXRlcyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gbm8gcHJldmlvdXNseSBi
dWZmZXJlZCBwYXJ0aWFsIGRhdGEsIAorICAgICAgICAvLyBqdXN0IGNvbnZlcnQgdGhlIGRhdGEg
dGhhdCB3YXMgcGFzc2VkIGluCisgICAgICAgIGNvbnZlcnNpb25CeXRlcyA9IGJ5dGVzOworICAg
ICAgICBjb252ZXJzaW9uTGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKworICAgIEdPd25QdHI8R0Vy
cm9yPiBlcnI7CisgICAgR093blB0cjxVQ2hhcj4gYnVmZmVyOworCisgICAgYnVmZmVyLm91dFB0
cigpID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGdfY29udmVydF93aXRoX2ljb252KGNvbnZl
cnNpb25CeXRlcywgY29udmVyc2lvbkxlbmd0aCwgbV9pY29udkRlY29kZXIsICZjb3VudFJlYWQs
ICZjb3VudFdyaXR0ZW4sICZlcnIub3V0UHRyKCkpKTsgCisKKworICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJHSUNvbnYgY29udmVyc2lvbiBlcnJvciwgQ29kZSAlZDogXCIlc1wi
IiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UpOworICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMg
PSAwOyAvLyByZXNldCBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxscyB0byBkZWNvZGUKKyAgICAg
ICAgZmFzdEZyZWUocHJlZml4ZWRCeXRlcyk7CisgICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICAKKyAgICAvLyBQYXJ0aWFsIGlucHV0
IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBtYXkgbm90IHJlc3VsdCBpbiBhbiBlcnJvciBiZWlu
ZyByYWlzZWQuIAorICAgIC8vIEZyb20gdGhlIGdub21lIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiBv
biBnX2NvbnZlcnRfd2l0aF9pY29udjoKKyAgICAvLyAiRXZlbiBpZiB0aGUgY29udmVyc2lvbiB3
YXMgc3VjY2Vzc2Z1bCwgdGhpcyBtYXkgYmUgbGVzcyB0aGFuIGxlbiBpZiB0aGVyZSB3ZXJlIHBh
cnRpYWwgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4iCisgICAgLy8gVGhhdCdz
IHdoeSB3ZSBuZWVkIHRvIGNvbXBhcmUgY29udmVyc2lvbkxlbmd0aCBhZ2FpbnN0IGNvdW50UmVh
ZCAKKworICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IGNvbnZlcnNpb25MZW5ndGggLSBjb3VudFJl
YWQ7CisgICAgaWYgKG1fbnVtQnVmZmVyZWRCeXRlcyA+IDApIHsKKyAgICAgICAgaWYgKGZsdXNo
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlBhcnRpYWwgYnl0ZXMgYXQgZW5kIG9mIGlucHV0
IHdoaWxlIGZsdXNoIHJlcXVlc3RlZC4iKTsKKyAgICAgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRl
cyA9IDA7IC8vIHJlc2V0IHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIGRlY29kZQorICAg
ICAgICAgICAgZmFzdEZyZWUocHJlZml4ZWRCeXRlcyk7CisgICAgICAgICAgICBzYXdFcnJvciA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAg
bWVtY3B5KG1fYnVmZmVyZWRCeXRlcywgY29udmVyc2lvbkJ5dGVzICsgY291bnRSZWFkLCBtX251
bUJ1ZmZlcmVkQnl0ZXMpOworICAgIH0KKworICAgIGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOwor
ICAgIAorICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworCisgICAgcmVzdWx0LmFwcGVuZChidWZm
ZXIuZ2V0KCksIGNvdW50V3JpdHRlbiAvIHNpemVvZihVQ2hhcikpOworCisgICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQocmVzdWx0KTsKK30KKworQ1N0cmluZyBUZXh0Q29kZWNHdGs6OmVuY29kZShj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGlu
ZyBoYW5kbGluZykKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuICIiOworCisg
ICAgaWYgKG1faWNvbnZFbmNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisg
ICAgICAgIGNyZWF0ZUlDb252RW5jb2RlcigpOworICAgIGlmIChtX2ljb252RW5jb2RlciA9PSBy
ZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOwor
CisgICAgc2l6ZV90IGNvdW50OworCisgICAgR093blB0cjxHRXJyb3I+IGVycjsKKyAgICBHT3du
UHRyPGNoYXI+IGJ1ZmZlcjsKKworICAgIGJ1ZmZlci5vdXRQdHIoKSA9IGdfY29udmVydF93aXRo
X2ljb252KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNoYXJhY3RlcnMpLCBsZW5ndGgg
KiBzaXplb2YoVUNoYXIpLCBtX2ljb252RW5jb2RlciwgMCwgJmNvdW50LCAmZXJyLm91dFB0cigp
KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19FUlJPUigiR0lDb252IGNvbnZlcnNpb24g
ZXJyb3IsIENvZGUgJWQ6IFwiJXNcIiIsIGVyci0+Y29kZSwgZXJyLT5tZXNzYWdlKTsKKyAgICAg
ICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gQ1N0cmluZyhidWZmZXIu
Z2V0KCksIGNvdW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogd2tUcnVu
a0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9ndGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9uIDApCisrKyB3a1RydW5rR2xpYl8yXzRfQ29k
ZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBK
w7xyZyBCaWxsZXRlciA8akBiaXRyb24uY2g+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRG9taW5p
ayBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnkuY29tPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFRleHRDb2RlY0dUS19oCisjZGVmaW5lIFRleHRDb2RlY0dUS19oCisKKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFRleHRDb2RlY0d0
ayA6IHB1YmxpYyBUZXh0Q29kZWMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIHZvaWQg
cmVnaXN0ZXJCYXNlRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgICAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKwor
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGlu
Z05hbWVSZWdpc3RyYXIpOworICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkQ29k
ZWNzKFRleHRDb2RlY1JlZ2lzdHJhcik7CisKKyAgICAgICAgVGV4dENvZGVjR3RrKGNvbnN0IFRl
eHRFbmNvZGluZyYpOworICAgICAgICB2aXJ0dWFsIH5UZXh0Q29kZWNHdGsoKTsKKworICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wg
Zmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKKyAgICAgICAgdmlydHVh
bCBDU3RyaW5nIGVuY29kZShjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxl
SGFuZGxpbmcpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkRlY29k
ZXIoKSBjb25zdDsKKyAgICAgICAgdm9pZCBjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdDsKKwor
ICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2RpbmdOYW1lUmVn
aXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBleHRlbmRlZCk7ICAgICAgICAKKyAgICAgICAgc3RhdGlj
IHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhciwgYm9vbCBl
eHRlbmRlZCk7CisgICAgICAgIHN0YXRpYyBnYm9vbGVhbiBpc0VuY29kaW5nQXZhaWxhYmxlKGNv
bnN0IGdjaGFyKik7CisKKyAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgICAg
IHNpemVfdCBtX251bUJ1ZmZlcmVkQnl0ZXM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9idWZm
ZXJlZEJ5dGVzWzE2XTsgLy8gYmlnZ2VyIHRoYW4gYW55IHNpbmdsZSBtdWx0aS1ieXRlIGNoYXJh
Y3RlciAgICAgICAgCisgICAgICAgIG11dGFibGUgR0lDb252IG1faWNvbnZEZWNvZGVyOworICAg
ICAgICBtdXRhYmxlIEdJQ29udiBtX2ljb252RW5jb2RlcjsKKworICAgICAgICBzdGF0aWMgY29u
c3QgZ2NoYXIqIG1faW50ZXJuYWxFbmNvZGluZ05hbWU7CisKKyAgICAgICAgdHlwZWRlZiBjb25z
dCBnY2hhciogY29uc3QgY29kZWNBbGlhc0xpc3RbXTsKKworICAgICAgICAvLyBVbmljb2RlCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19VVEZfODsKKworICAg
ICAgICAvLyBXZXN0ZXJuCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19JU09fODg1OV8xOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfTUFDUk9NQU47CisKKyAgICAgICAgLy8gSmFwYW5lc2UKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1NISUZUX0pJUzsKKyAgICAgICAgc3RhdGljIGNv
ZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0VVQ19KUDsKKyAgICAgICAgc3RhdGljIGNvZGVj
QWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQOworCisgICAgICAgIC8vIFRyYWRp
dGlvbmFsIENoaW5lc2UKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX0JJRzU7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19C
SUc1X0hLU0NTOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNf
Q1A5NTA7CisKKyAgICAgICAgLy8gS29yZWFuCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlz
dCBtX2NvZGVjQWxpYXNlc19JU09fMjAyMl9LUjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNM
aXN0IG1fY29kZWNBbGlhc2VzX0NQOTQ5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfRVVDX0tSOworCisgICAgICAgIC8vIEFyYWJpYworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNjsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NjsKKworICAgICAgICAvLyBI
ZWJyZXcKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184
ODU5Xzg7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEy
NTU7CisKKyAgICAgICAgLy8gR3JlZWsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1f
Y29kZWNBbGlhc2VzX0lTT184ODU5Xzc7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19DUDg2OTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX1dJTkRPV1NfMTI1MzsKKworICAgICAgICAvLyBDeXJpbGxpYworICAgICAgICBz
dGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNTsKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0tPSThfUjsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQODY2OworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfS09JOF9VOworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxOworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfTUFDQ1lSSUxMSUM7CisKKyAgICAgICAgLy8g
VGhhaQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NzQ7
CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19USVNfNjIwOwor
CisgICAgICAgIC8vIFNpbXBsaWZpZWQgQ2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfR0JLOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfSFo7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19HQjE4MDMwOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfRVVDX0NOOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfMjMxMl84MDsgCisKKyAgICAgICAgLy8gQ2VudHJhbCBFdXJvcGVhbgorICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfMjsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1MDsKKyAgICAgICAgc3RhdGlj
IGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX01BQ0NFTlRSQUxFVVJPUEU7CisKKyAgICAg
ICAgLy8gVmlldG5hbWVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfQ1AxMjU4OworCisgICAgICAgIC8vIFR1cmtpc2gKKyAgICAgICAgc3RhdGljIGNvZGVj
QWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NDsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxp
YXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5Xzk7CisKKyAgICAgICAgLy8gQmFsdGljCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDEyNTc7CisgICAg
ICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV80OworCisg
ICAgICAgIHN0YXRpYyBnY29uc3Rwb2ludGVyIGNvbnN0IG1faWNvbnZCYXNlQ29kZWNMaXN0W107
CisgICAgICAgIHN0YXRpYyBnY29uc3Rwb2ludGVyIGNvbnN0IG1faWNvbnZFeHRlbmRlZENvZGVj
TGlzdFtdOworCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VGV4dENvZGVjR1RLX2gK
</data>
<flag name="review"
          id="23322"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42210</attachid>
            <date>2009-10-30 06:35:18 -0700</date>
            <delta_ts>2009-11-06 11:30:45 -0800</delta_ts>
            <desc>2/4 - Moving Text Codecs to GLib (v4)</desc>
            <filename>2_4_TextCodecs_GLib_v4.diff</filename>
            <type>text/plain</type>
            <size>33758</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUw
MzI3KQorKysgd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMDktMTAtMzAgIERvbWluaWsgUsO2dHRzY2hlcyAg
PGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1
bmN0aW9uYWxpdHkgdXNpbmcgR0xpYgorCisgICAgICAgIEluaXRpYWwgdmVyc2lvbiBvZiB0aGlz
IHBhdGNoIGJ5IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgUGF0Y2gg
Mi80IC0gTW92aW5nIFRleHRDb2RlY3MgdG8gR0xpYgorICAgICAgICAKKyAgICAgICAgQWRkZWQg
cHJvYmluZyBmb3IgYSBoYXJkLWNvZGVkIGxpc3RzIG9mIHRleHQgZW5jb2RpbmdzLgorICAgICAg
ICBUaGUgYmFzaXMgb2YgdGhpcyBsaXN0IGlzIHRha2VuIGZyb20gdGhlIGVuY29kaW5ncyBzdXBw
b3J0ZWQgYnkgaWNvbnYsCisgICAgICAgIHRoZW4gZXh0ZW5kZWQgYnkgZS5nLiB0aXMtNjIwLCB3
aW5kb3dzLTEyNTEsIGV1Yy1rciwgd2luZG93cy0xMjUzIGFuZAorICAgICAgICBhIG51bWJlciBv
ZiBDaGluZXNlIG9uZXMuCisKKyAgICAgICAgUHJvYmluZyBpcyBuZWNlc3Nhcnkgd2l0aCB0aGUg
Y3VycmVudCBkZXNpZ24gb2YgdGV4dCBjb2RlY3MKKyAgICAgICAgYXMgaWNvbnYvR0xpYiBkbyBu
b3Qgc3VwcG9ydCBlbnVtZXJhdGluZyBhdmFpbGFibGUgZW5jb2RpbmdzLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0RW5jb2Rpbmc6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmdSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEJhc2VUZXh0Q29k
ZWNNYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlY0d0ayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OmlzRW5jb2RpbmdBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckVuY29kaW5nTmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjp+VGV4dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRD
b2RlY0d0azo6cmVsZWFzZUlDb252KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6
Y3JlYXRlSUNvbnZEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6Y3Jl
YXRlSUNvbnZFbmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZW5jb2RlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaDogQWRkZWQuCisKIDIwMDktMTAtMzAgIFl1
cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1MDMyNykKKysrIHdrVHJ1bmtHbGliXzJfNF9Db2Rl
Yy9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQwLDggKzE2NDAs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJl
YWtJdGVyYXRvckludGVybmFsSUNVLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29k
ZWMuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmggXAotCVdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dENvZGVjSUNVLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEu
Y3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5jcHAgXApAQCAtMjAxMyw2ICsyMDExLDI2
IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9U
ZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJV2ViQ29yZS93b3JrZXJzL1No
YXJlZFdvcmtlclJlcG9zaXRvcnkuaAogCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAor
IyAtLS0tCitpZiBVU0VfSUNVX1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0Q29kZWNJQ1UuaAorCitlbmRpZgorCisjIC0tLS0KKyMgZ2xpYiB1bmljb2RlIGJh
Y2tlbmQKKyMgLS0tLQoraWYgVVNFX0dMSUJfVU5JQ09ERQord2ViY29yZWd0a19zb3VyY2VzICs9
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAgXAorCVdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgKK2VuZGlmCisKKwogIyAtLS0KICMg
Q2hhbm5lbCBtZXNhZ2luZyBzdXBwb3J0CiAjIC0tLQpJbmRleDogd2tUcnVua0dsaWJfMl80X0Nv
ZGVjL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
d2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5j
cHAJKHJldmlzaW9uIDUwMzI3KQorKysgd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUvcGxh
dGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAKICNpbmNsdWRlICJUaHJlYWRUaW1lcnMuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklE
KQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlICJUZXh0Q29kZWNJQ1UuaCIKICNlbmRp
ZgogCkBAIC03NSw3ICs3NSw3IEBAIFRocmVhZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEo
KQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1faXNNYWluVGhyZWFkKGlzTWFpblRocmVhZCgpKQog
I2VuZGlmCi0jaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJS
SUQpCisjaWYgVVNFKElDVV9VTklDT0RFKQogICAgICwgbV9jYWNoZWRDb252ZXJ0ZXJJQ1UobmV3
IElDVUNvbnZlcnRlcldyYXBwZXIpCiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCkBAIC04OSw3
ICs4OSw3IEBAIFRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKCkKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgZGVsZXRlIG1fY2FjaGVkQ29udmVydGVyVEVDOwogI2VuZGlmCi0jaWYg
VVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCisjaWYgVVNF
KElDVV9VTklDT0RFKQogICAgIGRlbGV0ZSBtX2NhY2hlZENvbnZlcnRlcklDVTsKICNlbmRpZgog
CkluZGV4OiB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gd2tUcnVua0dsaWJfMl80X0NvZGVjL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwCShyZXZpc2lvbiA1MDMyNykKKysrIHdrVHJ1
bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEzIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmdSZWdp
c3RyeS5oIgotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlC
UklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CiAj
ZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5jbHVkZSA8UVN0cmluZz4KKyNlbGlmIFVTRShHTElC
X1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9HT3duUHRyLmg+CiAj
ZW5kaWYKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
QEAgLTg0LDcgKzg3LDcgQEAgQ1N0cmluZyBUZXh0RW5jb2Rpbmc6OmVuY29kZShjb25zdCBVQ2hh
cgogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gIiI7CiAKLSNpZiBVU0UoSUNVX1VO
SUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKKyNpZiBVU0UoSUNVX1VOSUNP
REUpCiAgICAgLy8gRklYTUU6IFdoYXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gbm9ybWFsaXph
dGlvbj8KICAgICAvLyBJdCdzIGEgbGl0dGxlIHN0cmFuZ2UgdG8gZG8gaXQgaW5zaWRlIHRoZSBl
bmNvZGUgZnVuY3Rpb24uCiAgICAgLy8gUGVyaGFwcyBub3JtYWxpemF0aW9uIHNob3VsZCBiZSBh
biBleHBsaWNpdCBzdGVwIGRvbmUgYmVmb3JlIGNhbGxpbmcgZW5jb2RlLgpAQCAtMTE0LDYgKzEx
NywxOCBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2RlKGNvbnN0IFVDaGFyCiAgICAgUVN0
cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KGNoYXJhY3RlcnMpLCBsZW5n
dGgpOwogICAgIHN0ciA9IHN0ci5ub3JtYWxpemVkKFFTdHJpbmc6Ok5vcm1hbGl6YXRpb25Gb3Jt
X0MpOwogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMpLT5lbmNvZGUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0ci5sZW5ndGgoKSwgaGFuZGxpbmcp
OworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBHT3duUHRyPGNoYXI+IFVURjhTb3VyY2U7
CisgICAgVVRGOFNvdXJjZS5zZXQoZ191dGYxNl90b191dGY4KGNoYXJhY3RlcnMsIGxlbmd0aCwg
MCwgMCwgMCkpOworCisgICAgR093blB0cjxjaGFyPiBVVEY4Tm9ybWFsaXplZDsKKyAgICBVVEY4
Tm9ybWFsaXplZC5zZXQoZ191dGY4X25vcm1hbGl6ZShVVEY4U291cmNlLmdldCgpLCAtMSwgR19O
T1JNQUxJWkVfTkZDKSk7CisKKyAgICBsb25nIFVURjE2TGVuZ3RoOworICAgIEdPd25QdHI8VUNo
YXI+IFVURjE2Tm9ybWFsaXplZDsKKyAgICBVVEYxNk5vcm1hbGl6ZWQuc2V0KGdfdXRmOF90b191
dGYxNihVVEY4Tm9ybWFsaXplZC5nZXQoKSwgLTEsIDAsICZVVEYxNkxlbmd0aCwgMCkpOworCisg
ICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29kZShVVEYxNk5vcm1hbGl6ZWQuZ2V0
KCksIFVURjE2TGVuZ3RoLCBoYW5kbGluZyk7CiAjZWxpZiBQTEFURk9STShXSU5DRSkKICAgICAv
LyBub3JtYWxpemF0aW9uIHdpbGwgYmUgZG9uZSBieSBXaW5kb3dzIENFIEFQSQogICAgIE93blB0
cjxUZXh0Q29kZWM+IHRleHRDb2RlYyA9IG5ld1RleHRDb2RlYygqdGhpcyk7CkluZGV4OiB3a1Ry
dW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNTAzMjcpCisrKyB3
a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1Jl
Z2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPHd0
Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKLSNpZiBVU0Uo
SUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkKKyNpZiBVU0UoSUNV
X1VOSUNPREUpCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAjZW5kaWYKICNpZiBQTEFURk9S
TShNQUMpCkBAIC00OCw2ICs0OCw5IEBACiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAicXQv
VGV4dENvZGVjUXQuaCIKICNlbmRpZgorI2lmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSAi
Z3RrL1RleHRDb2RlY0d0ay5oIgorI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOQ0UpICYmICFQTEFU
Rk9STShRVCkKICNpbmNsdWRlICJUZXh0Q29kZWNXaW5jZS5oIgogI2VuZGlmCkBAIC0yMTcsMTEg
KzIyMCwxNiBAQCBzdGF0aWMgdm9pZCBidWlsZEJhc2VUZXh0Q29kZWNNYXBzKCkKICAgICBUZXh0
Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5n
TmFtZU1hcCk7CiAgICAgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVyQ29kZWNzKGFkZFRv
VGV4dENvZGVjTWFwKTsKIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VO
SUNPREVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICAgICBUZXh0Q29kZWNJQ1U6OnJl
Z2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBU
ZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CiAjZW5k
aWYKIAorI2lmIFVTRShHTElCX1VOSUNPREUpCisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJh
c2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVj
R3RrOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOworI2VuZGlmCisKICNp
ZiBQTEFURk9STShXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQogICAgIFRleHRDb2RlY1dpbmNlOjpy
ZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAg
VGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CkBA
IC0yMzAsNyArMjM4LDcgQEAgc3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENvZGVjTWFwcygpCiAK
IHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMoKQogewotI2lmIFVTRShJQ1VfVU5JQ09E
RSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkK
ICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKGFkZFRvVGV4
dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3RlckV4dGVuZGVkQ29k
ZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgpAQCAtMjQ1LDYgKzI1MywxMSBAQCBzdGF0
aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKICAgICBUZXh0Q29kZWNNYWM6OnJlZ2lzdGVy
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCisjaWYgVVNFKEdMSUJfVU5JQ09E
RSkKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKGFkZFRv
VGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVk
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOQ0Up
ICYmICFQTEFURk9STShRVCkKICAgICBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJFeHRlbmRlZEVu
Y29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNXaW5j
ZTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CkluZGV4OiB3a1Ry
dW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHdrVHJ1bmtHbGliXzJfNF9Db2RlYy9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAJKHJldmlzaW9uIDApCisrKyB3a1RydW5rR2xpYl8y
XzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29t
cGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0Q29k
ZWNHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwordXNp
bmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGV4dENvZGVjJ3MgYXBw
ZW5kT21pdHRpbmdCT00oKSBpcyBnb25lIChodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8zMzM4MCkuIAorLy8gVGhhdCdzIHdoeSB3ZSBuZWVkIHRvIGF2b2lkIGdlbmVyYXRpbmcgZXh0
cmEgQk9NJ3MgZm9yIHRoZSBjb252ZXJzaW9uIHJlc3VsdC4KKy8vIFRoaXMgY2FuIGJlIGFjaGll
dmVkIGJ5IHNwZWNpZnlpbmcgdGhlIFVURi0xNiBjb2RlY3MnIGVuZGlhbm5lc3MgZXhwbGljaXRs
eSB3aGVuIGluaXRpYWxpemluZyBHTGliLgorCisjaWYgKEdfQllURV9PUkRFUiA9PSBHX0JJR19F
TkRJQU4pCisgICAgY29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRlcm5h
bEVuY29kaW5nTmFtZSA9ICJVVEYtMTZCRSI7CisjZWxzZSAKKyAgICBjb25zdCBnY2hhciogV2Vi
Q29yZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdOYW1lID0gIlVURi0xNkxFIjsK
KyNlbmRpZgorCisKKy8vIFdlJ3JlIHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgdGV4dCBjb2RlY3Mg
YW5kIHRoZWlyIGFsaWFzZXMgaGVyZS4gCisvLyBGb3IgZWFjaCBjb2RlYyB0aGUgZmlyc3QgZW50
cnkgaXMgdGhlIGNhbm9uaWNhbCBuYW1lLCByZW1haW5pbmcgb25lcyBhcmUgdXNlZCBhcyBhbGlh
c2VzLgorLy8gRWFjaCBhbGlhcyBsaXN0IG11c3QgYmUgdGVybWluYXRlZCBieSBhIDAuCisKKy8v
IFVuaWNvZGUKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19VVEZfOCAgICAgICAgICAgID0geyAiVVRGLTgiLCAwIH07IAorCisvLyBXZXN0
ZXJuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfSVNPXzg4NTlfMSAgICAgICA9IHsgIklTTy04ODU5LTEiLCAiQ1A4MTkiLCAiSUJNODE5
IiwgIklTTy1JUi0xMDAiLCAiSVNPODg1OS0xIiwgIklTT184ODU5LTEiLCAiSVNPXzg4NTktMTox
OTg3IiwgICJMMSIsICJMQVRJTjEiLCAiQ1NJU09MQVRJTjEiLCAwIH07CitUZXh0Q29kZWNHdGs6
OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4gICAg
ICAgICA9IHsgIk1BQ1JPTUFOIiwgIk1BQyIsICJNQUNJTlRPU0giLCAiQ1NNQUNJTlRPU0giLCAw
IH07CisKKy8vIEphcGFuZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2Rl
Y0d0azo6bV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTICAgICAgICA9IHsgIlNoaWZ0X0pJUyIsICJN
U19LQU5KSSIsICJTSElGVC1KSVMiLCAiU0pJUyIsICJDU1NISUZUSklTIiwgMCB9OworICAgIFRl
eHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19F
VUNfSlAgICAgICAgPSB7ICJFVUMtSlAiLCAiRVVDX0pQIiwgIkVVQ0pQIiwgIkVYVEVOREVEX1VO
SVhfQ09ERV9QQUNLRURfRk9STUFUX0ZPUl9KQVBBTkVTRSIsICJDU0VVQ1BLREZNVEpBUEFORVNF
IiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29k
ZWNBbGlhc2VzX0lTT18yMDIyX0pQICAgICAgPSB7ICJJU08tMjAyMi1KUCIsIDAgfTsKKworLy8g
VHJhZGl0aW9uYWwgQ2hpbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0JJRzUgICAgICAgICAgICAgPSB7ICJCSUc1IiwgIkJJRy01
IiwgIkJJRy1GSVZFIiwgIkJJRzUiLCAiQklHRklWRSIsICJDTi1CSUc1IiwgIkNTQklHNSIsIDAg
fTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19CSUc1X0hLU0NTICAgICAgID0geyAiQklHNS1IS1NDUyIsICJCSUc1LUhLU0NTOjIwMDQi
LCAiQklHNUhLU0NTIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29k
ZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTUwICAgICAgICAgICAgPSB7ICJDUDk1MCIsIDAgfTsK
KworLy8gS29yZWFuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1IgICAgICA9IHsgIklTTy0yMDIyLUtSIiwgIkNTSVNP
MjAyMktSIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0NQOTQ5ICAgICAgICAgICAgPSB7ICJDUDk0OSIsICJVSEMiLCAwIH07
CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFz
ZXNfRVVDX0tSICAgICAgICAgICA9IHsgIkVVQy1LUiIsICJDU0VVQ0tSIiwgMCB9OworCisvLyBB
cmFiaWMKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19JU09fODg1OV82ICAgICAgID0geyAiSVNPLTg4NTktNiIsICJBUkFCSUMiLCAiQVNN
Ty03MDgiLCAiRUNNQS0xMTQiLCAiSVNPLUlSLTEyNyIsICJJU084ODU5LTYiLCAiSVNPXzg4NTkt
NiIsICJJU09fODg1OS02OjE5ODciLCAiQ1NJU09MQVRJTkFSQUJJQyIsIDAgfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTYg
ICAgICAgICAgID0geyAid2luZG93cy0xMjU2IiwgIkNQMTI1NiIsICJNUy1BUkFCIiwgMCB9OyAv
LyByZWFycmFuZ2VkLCB3aW5kb3dzLTEyNTYgbm93IGRlY2xhcmVkIHRoZSBjYW5vbmljYWwgbmFt
ZSBhbmQgcHV0IHRvIGxvd2VyY2FzZSB0byBmaXggL2Zhc3QvZW5jb2RpbmcvYWhyYW0tb3JnLWVn
Lmh0bWwgdGVzdCBjYXNlCisKKy8vIEhlYnJldworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlz
dCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzggICAgICAgPSB7ICJJU08t
ODg1OS04IiwgIkhFQlJFVyIsICJJU08tODg1OS04IiwgIklTTy1JUi0xMzgiLCAiSVNPODg1OS04
IiwgIklTT184ODU5LTgiLCAiSVNPXzg4NTktODoxOTg4IiwgIkNTSVNPTEFUSU5IRUJSRVciLCAw
IH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfQ1AxMjU1ICAgICAgICAgICA9IHsgIndpbmRvd3MtMTI1NSIsICJDUDEyNTUiLCAiTVMt
SEVCUiIsIDAgfTsgLy8gcmVhcnJhbmdlZCwgbW92ZWQgd2luZG93cy0xMjU1IGFzIGNhbm9uaWNh
bCBhbmQgbG93ZXJjYXNlZCwgZml4aW5nIC9mYXN0L2VuY29kaW5nL21ldGEtY2hhcnNldC5odG1s
CisKKy8vIEdyZWVrCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNyAgICAgICA9IHsgIklTTy04ODU5LTciLCAiRUNNQS0x
MTgiLCAiRUxPVF85MjgiLCAiR1JFRUsiLCAiR1JFRUs4IiwgIklTTy1JUi0xMjYiLCAiSVNPODg1
OS03IiwgIklTT184ODU5LTciLCAiSVNPXzg4NTktNzoxOTg3IiwgIklTT184ODU5LTc6MjAwMyIs
ICJDU0kiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfQ1A4NjkgICAgICAgICAgICA9IHsgIkNQODY5IiwgIjg2OSIsICJDUC1H
UiIsICJJQk04NjkiLCAiQ1NJQk04NjkiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzICAgICA9IHsgIldJ
TkRPV1MtMTI1MyIsIDAgfTsKKworLy8gQ3lyaWxsaWMKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlh
c0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV81ICAgICAgID0geyAi
SVNPLTg4NTktNSIsICJDWVJJTExJQyIsICJJU08tSVItMTQ0IiwgIklTTzg4NTktNSIsICJJU09f
ODg1OS01IiwgIklTT184ODU5LTU6MTk4OCIsICJDU0lTT0xBVElOQ1lSSUxMSUMiLCAwIH07CitU
ZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNf
S09JOF9SICAgICAgICAgICA9IHsgIktPSTgtUiIsICJDU0tPSThSIiwgMCB9OworVGV4dENvZGVj
R3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQODY2ICAg
ICAgICAgICAgPSB7ICJDUDg2NiIsICI4NjYiLCAiSUJNODY2IiwgIkNTSUJNODY2IiwgMCB9Owor
VGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2Vz
X0tPSThfVSAgICAgICAgICAgPSB7ICJLT0k4LVUiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxICAgICA9
IHsgIndpbmRvd3MtMTI1MSIsICJDUDEyNTEiLCAwIH07IC8vIENQMTI1MSBhZGRlZCB0byBwYXNz
IC9mYXN0L2VuY29kaW5nL2NoYXJzZXQtY3AxMjUxLmh0bWwKK1RleHRDb2RlY0d0azo6Y29kZWNB
bGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQyAgICAgID0g
eyAibWFjLWN5cmlsbGljIiwgIk1BQ0NZUklMTElDIiwgIngtbWFjLWN5cmlsbGljIiwgMCB9OyAK
KworLy8gVGhhaQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0NQODc0ICAgICAgICAgICAgPSB7ICJDUDg3NCIsICJXSU5ET1dTLTg3NCIs
IDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19USVNfNjIwICAgICAgICAgID0geyAiVElTLTYyMCIsIDAgfTsKKworLy8gU2ltcGxp
ZmllZCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6
bV9jb2RlY0FsaWFzZXNfR0JLICAgICAgICAgICAgICA9IHsgIkdCSyIsIDAgfTsKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19IWiAgICAg
ICAgICAgICAgID0geyAiSFoiLCAiSFotR0ItMjMxMiIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29k
ZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19HQjE4MDMwICAgICAgICAg
ID0geyAiR0IxODAzMCIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENv
ZGVjR3RrOjptX2NvZGVjQWxpYXNlc19FVUNfQ04gICAgICAgICAgID0geyAiRVVDLUNOIiwgIkVV
Q0NOIiwgIkdCMjMxMiIsICJDTi1HQiIsICJDU0dCMjMxMiIsICJFVUNfQ04iLCAwIH07CitUZXh0
Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfMjMx
Ml84MCAgICAgICAgICA9IHsgIkdCXzIzMTItODAiLCAiQ0hJTkVTRSIsICJjc0lTTzU4R0IyMzEy
ODAiLCAiR0IyMzEyLjE5ODAtMCIsICJJU08tSVItNTgiIH07CisKKy8vIENlbnRyYWwgRXVyb3Bl
YW4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxp
YXNlc19JU09fODg1OV8yICAgICAgID0geyAiSVNPLTg4NTktMiIsICJJU08tSVItMTAxIiwgIklT
Tzg4NTktMiIsICJJU09fODg1OS0yIiwgIklTT184ODU5LTI6MTk4NyIsICJMMiIsICJMQVRJTjIi
LCAiQ1NJU09MQVRJTjIiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjUwICAgICAgICAgICA9IHsgIkNQMTI1MCIsICJN
Uy1FRSIsICJXSU5ET1dTLTEyNTAiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0
IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSA9IHsgIk1BQy1D
RU5UUkFMRVVST1BFIiwgMCB9OworCisvLyBWaWV0bmFtZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVj
QWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU4ICAgICAgICAgICA9
IHsgIkNQMTI1OCIsICJXSU5ET1dTLTEyNTgiLCAwIH07CisKKy8vIFR1cmtpc2gKK1RleHRDb2Rl
Y0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEyNTQg
ICAgICAgICAgID0geyAiQ1AxMjU0IiwgIk1TLVRVUksiLCAiV0lORE9XUy0xMjU0IiwgMCB9Owor
VGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2Vz
X0lTT184ODU5XzkgICAgICAgPSB7ICJJU08tODg1OS05IiwgIklTTy1JUi0xNDgiLCAiSVNPODg1
OS05IiwgIklTT184ODU5LTkiLCAiSVNPXzg4NTktOToxOTg5IiwgIkw1IiwgIkxBVElONSIsICJD
U0lTT0xBVElONSIsIDAgfTsKKworLy8gQmFsdGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU3ICAgICAgICAgICA9IHsgIkNQ
MTI1NyIsICJXSU5CQUxUUklNIiwgIldJTkRPV1MtMTI1NyIsIDAgfTsKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV80ICAg
ICAgID0geyAiSVNPLTg4NTktNCIsICJJU08tSVItMTEwIiwgIklTTzg4NTktNCIsICJJU09fODg1
OS00IiwgIklTT184ODU5LTQ6MTk4OCIsICJMNCIsICJMQVRJTjQiLCAiQ1NJU09MQVRJTjQiLCAw
IH07CisKK2djb25zdHBvaW50ZXIgY29uc3QgVGV4dENvZGVjR3RrOjptX2ljb252QmFzZUNvZGVj
TGlzdFtdID0geyAKKyAgICAvLyBVbmljb2RlCisgICAgJm1fY29kZWNBbGlhc2VzX1VURl84LAor
CisgICAgLy8gV2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV8xCit9OworCitn
Y29uc3Rwb2ludGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkV4dGVuZGVkQ29kZWNMaXN0
W10gPSAKK3sKKyAgICAvLyBXZXN0ZXJuCisgICAgJm1fY29kZWNBbGlhc2VzX01BQ1JPTUFOLAor
CisgICAgLy8gSmFwYW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTLAorICAgICZt
X2NvZGVjQWxpYXNlc19FVUNfSlAsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQLAor
CisgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0JJRzUsCisg
ICAgJm1fY29kZWNBbGlhc2VzX0JJRzVfSEtTQ1MsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQOTUw
LAorCisgICAgLy8gS29yZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSLAorICAg
ICZtX2NvZGVjQWxpYXNlc19DUDk0OSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfRVVDX0tSLAorCisg
ICAgLy8gQXJhYmljCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzYsCisgICAgJm1fY29k
ZWNBbGlhc2VzX0NQMTI1NiwKKyAgICAKKyAgICAvLyBIZWJyZXcKKyAgICAmbV9jb2RlY0FsaWFz
ZXNfSVNPXzg4NTlfOCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU1LAorICAgIAorICAgIC8v
IEdyZWVrCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzcsCisgICAgJm1fY29kZWNBbGlh
c2VzX0NQODY5LAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMsCisgICAgCisgICAg
Ly8gQ3lyaWxsaWMKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSwKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfS09JOF9SLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2NiwKKyAgICAmbV9jb2Rl
Y0FsaWFzZXNfS09JOF9VLAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTEsCisgICAg
Jm1fY29kZWNBbGlhc2VzX01BQ0NZUklMTElDLAorICAgIAorICAgIC8vIFRoYWkKKyAgICAmbV9j
b2RlY0FsaWFzZXNfQ1A4NzQsCisgICAgJm1fY29kZWNBbGlhc2VzX1RJU182MjAsCisgICAgCisg
ICAgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19HQkssCisgICAg
Jm1fY29kZWNBbGlhc2VzX0haLAorICAgICZtX2NvZGVjQWxpYXNlc19HQjE4MDMwLAorICAgICZt
X2NvZGVjQWxpYXNlc19FVUNfQ04sCisgICAgJm1fY29kZWNBbGlhc2VzXzIzMTJfODAsCisgICAg
CisgICAgLy8gQ2VudHJhbCBFdXJvcGVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV8y
LAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTAsCisgICAgJm1fY29kZWNBbGlhc2VzX01BQ0NF
TlRSQUxFVVJPUEUsCisgICAgCisgICAgLy8gVmlldG5hbWVzZQorICAgICZtX2NvZGVjQWxpYXNl
c19DUDEyNTgsCisgICAgCisgICAgLy8gVHVya2lzaAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEy
NTQsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzksCisgICAgCisgICAgLy8gQmFsdGlj
CisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NywKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4
NTlfNAorfTsKKworCitjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4NDsK
KyAgICAKKworc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGsoY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIG5l
dyBUZXh0Q29kZWNHdGsoZW5jb2RpbmcpOworfQorCitnYm9vbGVhbiBUZXh0Q29kZWNHdGs6Omlz
RW5jb2RpbmdBdmFpbGFibGUoY29uc3QgZ2NoYXIqIGVuY05hbWUpCit7CisgICAgR0lDb252IHRl
c3RlcjsKKyAgICAvLyB0ZXN0IGRlY29kaW5nCisgICAgdGVzdGVyID0gZ19pY29udl9vcGVuKG1f
aW50ZXJuYWxFbmNvZGluZ05hbWUsIGVuY05hbWUpOworICAgIGlmICh0ZXN0ZXIgPT0gcmVpbnRl
cnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAvLyB0ZXN0IGVu
Y29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNOYW1lLCBtX2ludGVybmFs
RW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSByZWludGVycHJldF9jYXN0PEdJ
Q29udj4oLTEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBnX2ljb252X2Nsb3NlKHRlc3Rlcik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVu
ZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBlbmNvZGluZ0xpc3Q7CisgICAgdW5zaWdu
ZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAgIGlmIChleHRlbmRlZCkgeworICAgICAgICBlbmNv
ZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5ndGgg
PSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZCYXNlQ29kZWNMaXN0Owor
ICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZCYXNlQ29kZWNMaXN0KS9zaXplb2Yo
Z3BvaW50ZXIpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGlz
dExlbmd0aDsgKytpKSB7CisgICAgICAgIGNvZGVjQWxpYXNMaXN0ICpjb2RlY0FsaWFzZXMgPSBz
dGF0aWNfY2FzdDxjb2RlY0FsaWFzTGlzdCo+KGVuY29kaW5nTGlzdFtpXSk7CisgICAgICAgIAor
ICAgICAgICAvLyBPdXIgY29udmVudGlvbiBpcywgdGhlIGZpcnN0IGVudHJ5IGluIGNvZGVjQWxp
YXNlcyBpcyB0aGUgY2Fub25pY2FsIG5hbWUsIAorICAgICAgICAvLyBzZWUgYWJvdmUgaW4gdGhl
IGxpc3Qgb2YgZGVjbGFyYXRpb25zLiAKKyAgICAgICAgLy8gUHJvYmUgR0xpYiBmb3IgdGhpcyBv
bmUgZmlyc3QuIElmIGl0J3Mgbm90IGF2YWlsYWJsZSwgd2Ugc2tpcCB0aGUgd2hvbGUgZ3JvdXAg
b2YgYWxpYXNlcy4KKworICAgICAgICBpbnQgY29kZWNDb3VudCA9IDA7CisgICAgICAgIGNvbnN0
IGNoYXIgKmNhbm9uaWNhbE5hbWU7CisgICAgICAgIGNhbm9uaWNhbE5hbWUgPSAoKmNvZGVjQWxp
YXNlcylbY29kZWNDb3VudF07CisKKyAgICAgICAgaWYoIWlzRW5jb2RpbmdBdmFpbGFibGUoY2Fu
b25pY2FsTmFtZSkpIHsKKyAgICAgICAgICAgIExPRyhUZXh0Q29udmVyc2lvbiwgIkNhbm9uaWNh
bCBlbmNvZGluZyAlcyBub3QgYXZhaWxhYmxlLCBza2lwcGluZy4iLCBjYW5vbmljYWxOYW1lKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlZ2lzdHJhcihjYW5v
bmljYWxOYW1lLCBjYW5vbmljYWxOYW1lKTsKKworICAgICAgICBjb25zdCBjaGFyICpjdXJyZW50
QWxpYXM7CisgICAgICAgIHdoaWxlICgoY3VycmVudEFsaWFzID0gKCpjb2RlY0FsaWFzZXMpWysr
Y29kZWNDb3VudF0pKSB7CisgICAgICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShjdXJy
ZW50QWxpYXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKFRleHRDb252ZXJzaW9uLCAiUmVnaXN0
ZXJpbmcgZW5jb2RpbmcgbmFtZSBhbGlhcyAlcyB0byBjYW5vbmljYWwgJXMiLCBjdXJyZW50QWxp
YXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihjdXJyZW50QWxp
YXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9Cit9
CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIg
cmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBlbmNv
ZGluZ0xpc3Q7CisgICAgdW5zaWduZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAgIGlmIChleHRl
bmRlZCkgeworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3Q7
CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29kZWNMaXN0KS9z
aXplb2YoZ3BvaW50ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1f
aWNvbnZCYXNlQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZC
YXNlQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIGNvZGVjQWxpYXNM
aXN0ICpjb2RlY0FsaWFzZXMgPSBzdGF0aWNfY2FzdDxjb2RlY0FsaWFzTGlzdCo+KGVuY29kaW5n
TGlzdFtpXSk7CisgICAgICAgIC8vIGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCAiYWxpYXMiIHNo
b3VsZCBiZSB0aGUgY2Fub25pY2FsIG5hbWUsIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYWxp
YXMgbGlzdHMgCisgICAgICAgIGNvbnN0IGdjaGFyICpjb2RlY05hbWUgPSAoKmNvZGVjQWxpYXNl
cylbMF07CisgICAgICAgIGlmIChpc0VuY29kaW5nQXZhaWxhYmxlKGNvZGVjTmFtZSkpCisgICAg
ICAgICAgICByZWdpc3RyYXIoY29kZWNOYW1lLCBuZXdUZXh0Q29kZWNHdGssIDApOworICAgIH0K
K30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoRW5jb2Rp
bmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29kaW5nTmFtZXMo
cmVnaXN0cmFyLCBmYWxzZSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VD
b2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckNvZGVj
cyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0
ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7Cisg
ICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKHJlZ2lzdHJhciwgdHJ1ZSk7Cit9CisKK3ZvaWQgVGV4
dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdp
c3RyYXIpCit7CisgICAgcmVnaXN0ZXJDb2RlY3MocmVnaXN0cmFyLCB0cnVlKTsKK30KKworVGV4
dENvZGVjR3RrOjpUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKKyAg
ICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCisgICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkKKyAg
ICAsIG1faWNvbnZEZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisgICAgLCBt
X2ljb252RW5jb2RlcihyZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQoreworfQorCitUZXh0
Q29kZWNHdGs6On5UZXh0Q29kZWNHdGsoKQoreworICAgIGlmIChtX2ljb252RGVjb2RlciAhPSBy
ZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9p
Y29udkRlY29kZXIpOworICAgICAgICBtX2ljb252RGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R0lDb252PigtMSk7CisgICAgfQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSByZWludGVycHJl
dF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVuY29k
ZXIpOworICAgICAgICBtX2ljb252RW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252Pigt
MSk7CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxH
SUNvbnY+KC0xKSk7CisKKyAgICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2ludGVy
bmFsRW5jb2RpbmdOYW1lLCBtX2VuY29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENvZGVj
R3RrOjpjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252RGVj
b2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKworICAgIG1faWNvbnZFbmNv
ZGVyID0gZ19pY29udl9vcGVuKG1fZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2RpbmdO
YW1lKTsKK30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdF
cnJvcikKK3sKKyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5jb2Rp
bmcuCisgICAgaWYgKG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252Pigt
MSkpIHsKKyAgICAgICAgY3JlYXRlSUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVChtX2lj
b252RGVjb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKyAgICAgICAgaWYg
KG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3Vn
aCBlbmNvZGluZyB3YXMgaW4gdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX3QgY291bnRXcml0dGVuLCBjb3VudFJlYWQs
IGNvbnZlcnNpb25MZW5ndGg7CisgICAgY29uc3QgY2hhciogY29udmVyc2lvbkJ5dGVzOworICAg
IGNoYXIqIHByZWZpeGVkQnl0ZXMgPSAwOworCisgICAgaWYgKG1fbnVtQnVmZmVyZWRCeXRlcykg
eworICAgICAgICBjb252ZXJzaW9uTGVuZ3RoID0gbGVuZ3RoICsgbV9udW1CdWZmZXJlZEJ5dGVz
OworICAgICAgICBwcmVmaXhlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2Mo
Y29udmVyc2lvbkxlbmd0aCkpOworICAgICAgICBtZW1jcHkocHJlZml4ZWRCeXRlcywgbV9idWZm
ZXJlZEJ5dGVzLCBtX251bUJ1ZmZlcmVkQnl0ZXMpOworICAgICAgICBtZW1jcHkocHJlZml4ZWRC
eXRlcyArIG1fbnVtQnVmZmVyZWRCeXRlcywgYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIAorICAg
ICAgICBjb252ZXJzaW9uQnl0ZXMgPSBwcmVmaXhlZEJ5dGVzOworICAgICAgICAKKyAgICAgICAg
Ly8gYWxsIGJ1ZmZlcmVkIGJ5dGVzIGFyZSBjb25zdW1lZCBub3cKKyAgICAgICAgbV9udW1CdWZm
ZXJlZEJ5dGVzID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBubyBwcmV2aW91c2x5IGJ1
ZmZlcmVkIHBhcnRpYWwgZGF0YSwgCisgICAgICAgIC8vIGp1c3QgY29udmVydCB0aGUgZGF0YSB0
aGF0IHdhcyBwYXNzZWQgaW4KKyAgICAgICAgY29udmVyc2lvbkJ5dGVzID0gYnl0ZXM7CisgICAg
ICAgIGNvbnZlcnNpb25MZW5ndGggPSBsZW5ndGg7CisgICAgfQorCisgICAgR093blB0cjxHRXJy
b3I+IGVycjsKKyAgICBHT3duUHRyPFVDaGFyPiBidWZmZXI7CisKKyAgICBidWZmZXIub3V0UHRy
KCkgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4oZ19jb252ZXJ0X3dpdGhfaWNvbnYoY29udmVy
c2lvbkJ5dGVzLCBjb252ZXJzaW9uTGVuZ3RoLCBtX2ljb252RGVjb2RlciwgJmNvdW50UmVhZCwg
JmNvdW50V3JpdHRlbiwgJmVyci5vdXRQdHIoKSkpOyAKKworCisgICAgaWYgKGVycikgeworICAg
ICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yLCBDb2RlICVkOiBcIiVzXCIi
LCBlcnItPmNvZGUsIGVyci0+bWVzc2FnZSk7CisgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9
IDA7IC8vIHJlc2V0IHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIGRlY29kZQorICAgICAg
ICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAgICAgICAgc2F3RXJyb3IgPSB0cnVlOworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIC8vIFBhcnRpYWwgaW5wdXQg
YXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG1heSBub3QgcmVzdWx0IGluIGFuIGVycm9yIGJlaW5n
IHJhaXNlZC4gCisgICAgLy8gRnJvbSB0aGUgZ25vbWUgbGlicmFyeSBkb2N1bWVudGF0aW9uIG9u
IGdfY29udmVydF93aXRoX2ljb252OgorICAgIC8vICJFdmVuIGlmIHRoZSBjb252ZXJzaW9uIHdh
cyBzdWNjZXNzZnVsLCB0aGlzIG1heSBiZSBsZXNzIHRoYW4gbGVuIGlmIHRoZXJlIHdlcmUgcGFy
dGlhbCBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LiIKKyAgICAvLyBUaGF0J3Mg
d2h5IHdlIG5lZWQgdG8gY29tcGFyZSBjb252ZXJzaW9uTGVuZ3RoIGFnYWluc3QgY291bnRSZWFk
IAorCisgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gY29udmVyc2lvbkxlbmd0aCAtIGNvdW50UmVh
ZDsKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzID4gMCkgeworICAgICAgICBpZiAoZmx1c2gp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiUGFydGlhbCBieXRlcyBhdCBlbmQgb2YgaW5wdXQg
d2hpbGUgZmx1c2ggcmVxdWVzdGVkLiIpOworICAgICAgICAgICAgbV9udW1CdWZmZXJlZEJ5dGVz
ID0gMDsgLy8gcmVzZXQgc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVjb2RlCisgICAg
ICAgICAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAgICAgICAgICAgIHNhd0Vycm9yID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBt
ZW1jcHkobV9idWZmZXJlZEJ5dGVzLCBjb252ZXJzaW9uQnl0ZXMgKyBjb3VudFJlYWQsIG1fbnVt
QnVmZmVyZWRCeXRlcyk7CisgICAgfQorCisgICAgZmFzdEZyZWUocHJlZml4ZWRCeXRlcyk7Cisg
ICAgCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisKKyAgICByZXN1bHQuYXBwZW5kKGJ1ZmZl
ci5nZXQoKSwgY291bnRXcml0dGVuIC8gc2l6ZW9mKFVDaGFyKSk7CisKKyAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChyZXN1bHQpOworfQorCitDU3RyaW5nIFRleHRDb2RlY0d0azo6ZW5jb2RlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5n
IGhhbmRsaW5nKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gIiI7CisKKyAg
ICBpZiAobV9pY29udkVuY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkKKyAg
ICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7CisgICAgaWYgKG1faWNvbnZFbmNvZGVyID09IHJl
aW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisK
KyAgICBzaXplX3QgY291bnQ7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyOworICAgIEdPd25Q
dHI8Y2hhcj4gYnVmZmVyOworCisgICAgYnVmZmVyLm91dFB0cigpID0gZ19jb252ZXJ0X3dpdGhf
aWNvbnYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0aCAq
IHNpemVvZihVQ2hhciksIG1faWNvbnZFbmNvZGVyLCAwLCAmY291bnQsICZlcnIub3V0UHRyKCkp
OworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHSUNvbnYgY29udmVyc2lvbiBl
cnJvciwgQ29kZSAlZDogXCIlc1wiIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UpOworICAgICAg
ICByZXR1cm4gQ1N0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlci5n
ZXQoKSwgY291bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiB3a1RydW5r
R2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSB3a1RydW5rR2xpYl8yXzRfQ29kZWMvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2d0ay9UZXh0Q29kZWNHdGsuaAkocmV2aXNpb24gMCkKKysrIHdrVHJ1bmtHbGliXzJfNF9Db2Rl
Yy9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IErD
vHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEb21pbmlr
IFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgVGV4dENvZGVjR1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNpbmNsdWRlICJUZXh0RW5j
b2RpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgVGV4dENvZGVjR3Rr
IDogcHVibGljIFRleHRDb2RlYyB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworCisg
ICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5n
TmFtZVJlZ2lzdHJhcik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2Rl
Y3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBUZXh0Q29kZWNHdGsoY29uc3QgVGV4
dEVuY29kaW5nJik7CisgICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0d0aygpOworCisgICAgICAg
IHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAgICAgICB2aXJ0dWFs
IENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVI
YW5kbGluZyk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNyZWF0ZUlDb252RGVjb2Rl
cigpIGNvbnN0OworICAgICAgICB2b2lkIGNyZWF0ZUlDb252RW5jb2RlcigpIGNvbnN0OworCisg
ICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdp
c3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKTsgICAgICAgIAorICAgICAgICBzdGF0aWMg
dm9pZCByZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4
dGVuZGVkKTsKKyAgICAgICAgc3RhdGljIGdib29sZWFuIGlzRW5jb2RpbmdBdmFpbGFibGUoY29u
c3QgZ2NoYXIqKTsKKworICAgICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKKyAgICAgICAg
c2l6ZV90IG1fbnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtX2J1ZmZl
cmVkQnl0ZXNbMTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xlIG11bHRpLWJ5dGUgY2hhcmFj
dGVyICAgICAgICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29udkRlY29kZXI7CisgICAg
ICAgIG11dGFibGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworCisgICAgICAgIHN0YXRpYyBjb25z
dCBnY2hhciogbV9pbnRlcm5hbEVuY29kaW5nTmFtZTsKKworICAgICAgICB0eXBlZGVmIGNvbnN0
IGdjaGFyKiBjb25zdCBjb2RlY0FsaWFzTGlzdFtdOworCisgICAgICAgIC8vIFVuaWNvZGUKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1VURl84OworCisgICAg
ICAgIC8vIFdlc3Rlcm4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlh
c2VzX0lTT184ODU5XzE7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19NQUNST01BTjsKKworICAgICAgICAvLyBKYXBhbmVzZQorICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTOworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfRVVDX0pQOworICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlA7CisKKyAgICAgICAgLy8gVHJhZGl0
aW9uYWwgQ2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfQklHNTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0JJ
RzVfSEtTQ1M7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDk1MDsKKworICAgICAgICAvLyBLb3JlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0
IG1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfQ1A5NDk7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19FVUNfS1I7CisKKyAgICAgICAgLy8gQXJhYmljCisgICAgICAgIHN0YXRp
YyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV82OworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU2OworCisgICAgICAgIC8vIEhl
YnJldworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4
NTlfODsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1
NTsKKworICAgICAgICAvLyBHcmVlaworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfSVNPXzg4NTlfNzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1f
Y29kZWNBbGlhc2VzX0NQODY5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2Rl
Y0FsaWFzZXNfV0lORE9XU18xMjUzOworCisgICAgICAgIC8vIEN5cmlsbGljCisgICAgICAgIHN0
YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV81OworICAgICAgICBz
dGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfS09JOF9SOworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NjY7CisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19LT0k4X1U7CisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTE7CisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQzsKKworICAgICAgICAvLyBU
aGFpCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDg3NDsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1RJU182MjA7CisK
KyAgICAgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19HQks7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19IWjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNB
bGlhc2VzX0dCMTgwMzA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19FVUNfQ047CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNl
c18yMzEyXzgwOyAKKworICAgICAgICAvLyBDZW50cmFsIEV1cm9wZWFuCisgICAgICAgIHN0YXRp
YyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV8yOworICAgICAgICBzdGF0
aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjUwOworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRTsKKworICAgICAg
ICAvLyBWaWV0bmFtZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxp
YXNlc19DUDEyNTg7CisKKyAgICAgICAgLy8gVHVya2lzaAorICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU0OworICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOTsKKworICAgICAgICAvLyBCYWx0aWMKKyAg
ICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NzsKKyAgICAg
ICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5XzQ7CisKKyAg
ICAgICAgc3RhdGljIGdjb25zdHBvaW50ZXIgY29uc3QgbV9pY29udkJhc2VDb2RlY0xpc3RbXTsK
KyAgICAgICAgc3RhdGljIGdjb25zdHBvaW50ZXIgY29uc3QgbV9pY29udkV4dGVuZGVkQ29kZWNM
aXN0W107CisKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBU
ZXh0Q29kZWNHVEtfaAo=
</data>
<flag name="commit-queue"
          id="23946"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42465</attachid>
            <date>2009-11-04 01:33:25 -0800</date>
            <delta_ts>2009-11-04 02:28:10 -0800</delta_ts>
            <desc>2/4 - Moving Text Codecs to GLib (v5)</desc>
            <filename>2_4_TextCodecs_GLib_v5.diff</filename>
            <type>text/plain</type>
            <size>33296</size>
            <attacher name="Dominik Röttsches (drott)">d-r</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDMyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDktMTAtMzAgIERvbWluaWsgUsO2dHRzY2hlcyAgPGRvbWluaWsu
cm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTE0CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBVbmljb2RlIGZ1bmN0aW9uYWxp
dHkgdXNpbmcgR0xpYgorCisgICAgICAgIEluaXRpYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoIGJ5
IErDvHJnIEJpbGxldGVyIGFuZCBOYWllbSBTaGFpay4KKyAgICAgICAgUGF0Y2ggMi80IC0gTW92
aW5nIFRleHRDb2RlY3MgdG8gR0xpYgorICAgICAgICAKKyAgICAgICAgQWRkZWQgcHJvYmluZyBm
b3IgYSBoYXJkLWNvZGVkIGxpc3RzIG9mIHRleHQgZW5jb2RpbmdzLgorICAgICAgICBUaGUgYmFz
aXMgb2YgdGhpcyBsaXN0IGlzIHRha2VuIGZyb20gdGhlIGVuY29kaW5ncyBzdXBwb3J0ZWQgYnkg
aWNvbnYsCisgICAgICAgIHRoZW4gZXh0ZW5kZWQgYnkgZS5nLiB0aXMtNjIwLCB3aW5kb3dzLTEy
NTEsIGV1Yy1rciwgd2luZG93cy0xMjUzIGFuZAorICAgICAgICBhIG51bWJlciBvZiBDaGluZXNl
IG9uZXMuCisKKyAgICAgICAgUHJvYmluZyBpcyBuZWNlc3Nhcnkgd2l0aCB0aGUgY3VycmVudCBk
ZXNpZ24gb2YgdGV4dCBjb2RlY3MKKyAgICAgICAgYXMgaWNvbnYvR0xpYiBkbyBub3Qgc3VwcG9y
dCBlbnVtZXJhdGluZyBhdmFpbGFibGUgZW5jb2RpbmdzLgorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhOjpUaHJlYWRHbG9iYWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlRocmVhZEdsb2JhbERhdGE6On5UaHJlYWRHbG9iYWxEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
RW5jb2Rpbmc6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEJhc2VUZXh0Q29kZWNNYXBzKToK
KyAgICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6Om5ld1RleHRDb2RlY0d0ayk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OmlzRW5jb2RpbmdBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENvZGVjR3RrOjpyZWdpc3RlckVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29k
ZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGspOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENv
ZGVjR3RrOjp+VGV4dENvZGVjR3RrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6
cmVsZWFzZUlDb252KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6Y3JlYXRlSUNv
bnZEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZF
bmNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY0d0azo6ZW5jb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0Q29kZWNHdGsuaDogQWRkZWQuCisKIDIwMDktMTAtMzAgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwg
RmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNTAzMjcpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQwLDggKzE2NDAsNiBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWMuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENvZGVjLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNJQ1UuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNMYXRpbjEuY3BwIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dENvZGVjTGF0aW4xLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q29kZWNVVEYxNi5jcHAgXApAQCAtMjAxMyw2ICsyMDExLDI2IEBAIHdlYmNvcmVndGtfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvcklu
dGVybmFsSUNVR3RrLmNwcCBcCiAJV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRv
cnkuaAogCisjIC0tLS0KKyMgaWN1IHVuaWNvZGUgYmFja2VuZAorIyAtLS0tCitpZiBVU0VfSUNV
X1VOSUNPREUKK3dlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRDb2RlY0lDVS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1Uu
aAorCitlbmRpZgorCisjIC0tLS0KKyMgZ2xpYiB1bmljb2RlIGJhY2tlbmQKKyMgLS0tLQoraWYg
VVNFX0dMSUJfVU5JQ09ERQord2ViY29yZWd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRm
b3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENvZGVjR3RrLmgKK2VuZGlmCisKKwogIyAtLS0KICMgQ2hhbm5lbCBtZXNhZ2luZyBz
dXBwb3J0CiAjIC0tLQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9UaHJlYWRHbG9iYWxEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1RocmVhZEdsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiA1MDMyNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJUaHJlYWRUaW1lcnMu
aCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkg
fHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNp
bmNsdWRlICJUZXh0Q29kZWNJQ1UuaCIKICNlbmRpZgogCkBAIC03NSw3ICs3NSw3IEBAIFRocmVh
ZEdsb2JhbERhdGE6OlRocmVhZEdsb2JhbERhdGEoKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1f
aXNNYWluVGhyZWFkKGlzTWFpblRocmVhZCgpKQogI2VuZGlmCi0jaWYgVVNFKElDVV9VTklDT0RF
KSB8fCBVU0UoR0xJQl9JQ1VfVU5JQ09ERV9IWUJSSUQpCisjaWYgVVNFKElDVV9VTklDT0RFKQog
ICAgICwgbV9jYWNoZWRDb252ZXJ0ZXJJQ1UobmV3IElDVUNvbnZlcnRlcldyYXBwZXIpCiAjZW5k
aWYKICNpZiBQTEFURk9STShNQUMpCkBAIC04OSw3ICs4OSw3IEBAIFRocmVhZEdsb2JhbERhdGE6
On5UaHJlYWRHbG9iYWxEYXRhKCkKICNpZiBQTEFURk9STShNQUMpCiAgICAgZGVsZXRlIG1fY2Fj
aGVkQ29udmVydGVyVEVDOwogI2VuZGlmCi0jaWYgVVNFKElDVV9VTklDT0RFKSB8fCBVU0UoR0xJ
Ql9JQ1VfVU5JQ09ERV9IWUJSSUQpCisjaWYgVVNFKElDVV9VTklDT0RFKQogICAgIGRlbGV0ZSBt
X2NhY2hlZENvbnZlcnRlcklDVTsKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQv
VGV4dEVuY29kaW5nLmNwcAkocmV2aXNpb24gNTAzMjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEzIEBACiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKICNpbmNs
dWRlICJUZXh0RW5jb2RpbmdSZWdpc3RyeS5oIgotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNF
KEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRl
IDx1bmljb2RlL3Vub3JtLmg+CiAjZWxpZiBVU0UoUVQ0X1VOSUNPREUpCiAjaW5jbHVkZSA8UVN0
cmluZz4KKyNlbGlmIFVTRShHTElCX1VOSUNPREUpCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPHd0Zi9HT3duUHRyLmg+CiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KQEAgLTg0LDcgKzg3LDcgQEAgQ1N0cmluZyBUZXh0RW5jb2Rp
bmc6OmVuY29kZShjb25zdCBVQ2hhcgogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4g
IiI7CiAKLSNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJ
RCkKKyNpZiBVU0UoSUNVX1VOSUNPREUpCiAgICAgLy8gRklYTUU6IFdoYXQncyB0aGUgcmlnaHQg
cGxhY2UgdG8gZG8gbm9ybWFsaXphdGlvbj8KICAgICAvLyBJdCdzIGEgbGl0dGxlIHN0cmFuZ2Ug
dG8gZG8gaXQgaW5zaWRlIHRoZSBlbmNvZGUgZnVuY3Rpb24uCiAgICAgLy8gUGVyaGFwcyBub3Jt
YWxpemF0aW9uIHNob3VsZCBiZSBhbiBleHBsaWNpdCBzdGVwIGRvbmUgYmVmb3JlIGNhbGxpbmcg
ZW5jb2RlLgpAQCAtMTE0LDYgKzExNywxOCBAQCBDU3RyaW5nIFRleHRFbmNvZGluZzo6ZW5jb2Rl
KGNvbnN0IFVDaGFyCiAgICAgUVN0cmluZyBzdHIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hh
cio+KGNoYXJhY3RlcnMpLCBsZW5ndGgpOwogICAgIHN0ciA9IHN0ci5ub3JtYWxpemVkKFFTdHJp
bmc6Ok5vcm1hbGl6YXRpb25Gb3JtX0MpOwogICAgIHJldHVybiBuZXdUZXh0Q29kZWMoKnRoaXMp
LT5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhciAqPihzdHIudXRmMTYoKSksIHN0
ci5sZW5ndGgoKSwgaGFuZGxpbmcpOworI2VsaWYgVVNFKEdMSUJfVU5JQ09ERSkKKyAgICBHT3du
UHRyPGNoYXI+IFVURjhTb3VyY2U7CisgICAgVVRGOFNvdXJjZS5zZXQoZ191dGYxNl90b191dGY4
KGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgMCwgMCkpOworCisgICAgR093blB0cjxjaGFyPiBVVEY4
Tm9ybWFsaXplZDsKKyAgICBVVEY4Tm9ybWFsaXplZC5zZXQoZ191dGY4X25vcm1hbGl6ZShVVEY4
U291cmNlLmdldCgpLCAtMSwgR19OT1JNQUxJWkVfTkZDKSk7CisKKyAgICBsb25nIFVURjE2TGVu
Z3RoOworICAgIEdPd25QdHI8VUNoYXI+IFVURjE2Tm9ybWFsaXplZDsKKyAgICBVVEYxNk5vcm1h
bGl6ZWQuc2V0KGdfdXRmOF90b191dGYxNihVVEY4Tm9ybWFsaXplZC5nZXQoKSwgLTEsIDAsICZV
VEYxNkxlbmd0aCwgMCkpOworCisgICAgcmV0dXJuIG5ld1RleHRDb2RlYygqdGhpcyktPmVuY29k
ZShVVEYxNk5vcm1hbGl6ZWQuZ2V0KCksIFVURjE2TGVuZ3RoLCBoYW5kbGluZyk7CiAjZWxpZiBQ
TEFURk9STShXSU5DRSkKICAgICAvLyBub3JtYWxpemF0aW9uIHdpbGwgYmUgZG9uZSBieSBXaW5k
b3dzIENFIEFQSQogICAgIE93blB0cjxUZXh0Q29kZWM+IHRleHRDb2RlYyA9IG5ld1RleHRDb2Rl
YygqdGhpcyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nUmVnaXN0
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdS
ZWdpc3RyeS5jcHAJKHJldmlzaW9uIDUwMzI3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Rl
eHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAog
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKLSNpZiBVU0UoSUNVX1VOSUNPREUpIHx8IFVTRShHTElCX0lDVV9VTklDT0RFX0hZQlJJRCkK
KyNpZiBVU0UoSUNVX1VOSUNPREUpCiAjaW5jbHVkZSAiVGV4dENvZGVjSUNVLmgiCiAjZW5kaWYK
ICNpZiBQTEFURk9STShNQUMpCkBAIC00OCw2ICs0OCw5IEBACiAjaWYgUExBVEZPUk0oUVQpCiAj
aW5jbHVkZSAicXQvVGV4dENvZGVjUXQuaCIKICNlbmRpZgorI2lmIFVTRShHTElCX1VOSUNPREUp
CisjaW5jbHVkZSAiZ3RrL1RleHRDb2RlY0d0ay5oIgorI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lO
Q0UpICYmICFQTEFURk9STShRVCkKICNpbmNsdWRlICJUZXh0Q29kZWNXaW5jZS5oIgogI2VuZGlm
CkBAIC0yMTcsMTEgKzIyMCwxNiBAQCBzdGF0aWMgdm9pZCBidWlsZEJhc2VUZXh0Q29kZWNNYXBz
KCkKICAgICBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJFbmNvZGluZ05hbWVzKGFkZFRv
VGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lzdGVy
Q29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKIAotI2lmIFVTRShJQ1VfVU5JQ09ERSkgfHwgVVNF
KEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVTRShJQ1VfVU5JQ09ERSkKICAgICBUZXh0
Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1l
TWFwKTsKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRDb2Rl
Y01hcCk7CiAjZW5kaWYKIAorI2lmIFVTRShHTElCX1VOSUNPREUpCisgICAgVGV4dENvZGVjR3Rr
OjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7Cisg
ICAgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MoYWRkVG9UZXh0Q29kZWNNYXApOwor
I2VuZGlmCisKICNpZiBQTEFURk9STShXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKQogICAgIFRleHRD
b2RlY1dpbmNlOjpyZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFt
ZU1hcCk7CiAgICAgVGV4dENvZGVjV2luY2U6OnJlZ2lzdGVyQmFzZUNvZGVjcyhhZGRUb1RleHRD
b2RlY01hcCk7CkBAIC0yMzAsNyArMjM4LDcgQEAgc3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENv
ZGVjTWFwcygpCiAKIHN0YXRpYyB2b2lkIGV4dGVuZFRleHRDb2RlY01hcHMoKQogewotI2lmIFVT
RShJQ1VfVU5JQ09ERSkgfHwgVVNFKEdMSUJfSUNVX1VOSUNPREVfSFlCUklEKQorI2lmIFVTRShJ
Q1VfVU5JQ09ERSkKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05h
bWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CiAgICAgVGV4dENvZGVjSUNVOjpyZWdpc3Rl
ckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgpAQCAtMjQ1LDYgKzI1
MywxMSBAQCBzdGF0aWMgdm9pZCBleHRlbmRUZXh0Q29kZWNNYXBzKCkKICAgICBUZXh0Q29kZWNN
YWM6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCisjaWYgVVNF
KEdMSUJfVU5JQ09ERSkKKyAgICBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGlu
Z05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjR3RrOjpyZWdp
c3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oV0lOQ0UpICYmICFQTEFURk9STShRVCkKICAgICBUZXh0Q29kZWNXaW5jZTo6cmVnaXN0
ZXJFeHRlbmRlZEVuY29kaW5nTmFtZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBU
ZXh0Q29kZWNXaW5jZTo6cmVnaXN0ZXJFeHRlbmRlZENvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3Mt
Y29tcGFueS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0
Q29kZWNHdGsuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvR093blB0ci5oPgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwor
dXNpbmcgc3RkOjptaW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGV4dENvZGVjJ3Mg
YXBwZW5kT21pdHRpbmdCT00oKSBpcyBnb25lIChodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8zMzM4MCkuIAorLy8gVGhhdCdzIHdoeSB3ZSBuZWVkIHRvIGF2b2lkIGdlbmVyYXRpbmcg
ZXh0cmEgQk9NJ3MgZm9yIHRoZSBjb252ZXJzaW9uIHJlc3VsdC4KKy8vIFRoaXMgY2FuIGJlIGFj
aGlldmVkIGJ5IHNwZWNpZnlpbmcgdGhlIFVURi0xNiBjb2RlY3MnIGVuZGlhbm5lc3MgZXhwbGlj
aXRseSB3aGVuIGluaXRpYWxpemluZyBHTGliLgorCisjaWYgKEdfQllURV9PUkRFUiA9PSBHX0JJ
R19FTkRJQU4pCisgICAgY29uc3QgZ2NoYXIqIFdlYkNvcmU6OlRleHRDb2RlY0d0azo6bV9pbnRl
cm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZCRSI7CisjZWxzZSAKKyAgICBjb25zdCBnY2hhciog
V2ViQ29yZTo6VGV4dENvZGVjR3RrOjptX2ludGVybmFsRW5jb2RpbmdOYW1lID0gIlVURi0xNkxF
IjsKKyNlbmRpZgorCisKKy8vIFdlJ3JlIHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgdGV4dCBjb2Rl
Y3MgYW5kIHRoZWlyIGFsaWFzZXMgaGVyZS4gCisvLyBGb3IgZWFjaCBjb2RlYyB0aGUgZmlyc3Qg
ZW50cnkgaXMgdGhlIGNhbm9uaWNhbCBuYW1lLCByZW1haW5pbmcgb25lcyBhcmUgdXNlZCBhcyBh
bGlhc2VzLgorLy8gRWFjaCBhbGlhcyBsaXN0IG11c3QgYmUgdGVybWluYXRlZCBieSBhIDAuCisK
Ky8vIFVuaWNvZGUKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjpt
X2NvZGVjQWxpYXNlc19VVEZfOCAgICAgICAgICAgID0geyAiVVRGLTgiLCAwIH07IAorCisvLyBX
ZXN0ZXJuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfSVNPXzg4NTlfMSAgICAgICA9IHsgIklTTy04ODU5LTEiLCAiQ1A4MTkiLCAiSUJN
ODE5IiwgIklTTy1JUi0xMDAiLCAiSVNPODg1OS0xIiwgIklTT184ODU5LTEiLCAiSVNPXzg4NTkt
MToxOTg3IiwgICJMMSIsICJMQVRJTjEiLCAiQ1NJU09MQVRJTjEiLCAwIH07CitUZXh0Q29kZWNH
dGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDUk9NQU4g
ICAgICAgICA9IHsgIk1BQ1JPTUFOIiwgIk1BQyIsICJNQUNJTlRPU0giLCAiQ1NNQUNJTlRPU0gi
LCAwIH07CisKKy8vIEphcGFuZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRD
b2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTICAgICAgICA9IHsgIlNoaWZ0X0pJUyIs
ICJNU19LQU5KSSIsICJTSElGVC1KSVMiLCAiU0pJUyIsICJDU1NISUZUSklTIiwgMCB9OworICAg
IFRleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNl
c19FVUNfSlAgICAgICAgPSB7ICJFVUMtSlAiLCAiRVVDX0pQIiwgIkVVQ0pQIiwgIkVYVEVOREVE
X1VOSVhfQ09ERV9QQUNLRURfRk9STUFUX0ZPUl9KQVBBTkVTRSIsICJDU0VVQ1BLREZNVEpBUEFO
RVNFIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1f
Y29kZWNBbGlhc2VzX0lTT18yMDIyX0pQICAgICAgPSB7ICJJU08tMjAyMi1KUCIsIDAgfTsKKwor
Ly8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0
Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0JJRzUgICAgICAgICAgICAgPSB7ICJCSUc1IiwgIkJJ
Ry01IiwgIkJJRy1GSVZFIiwgIkJJRzUiLCAiQklHRklWRSIsICJDTi1CSUc1IiwgIkNTQklHNSIs
IDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19CSUc1X0hLU0NTICAgICAgID0geyAiQklHNS1IS1NDUyIsICJCSUc1LUhLU0NTOjIw
MDQiLCAiQklHNUhLU0NTIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0
Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQOTUwICAgICAgICAgICAgPSB7ICJDUDk1MCIsIDAg
fTsKKworLy8gS29yZWFuCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfS1IgICAgICA9IHsgIklTTy0yMDIyLUtSIiwgIkNT
SVNPMjAyMktSIiwgMCB9OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNH
dGs6Om1fY29kZWNBbGlhc2VzX0NQOTQ5ICAgICAgICAgICAgPSB7ICJDUDk0OSIsICJVSEMiLCAw
IH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0Fs
aWFzZXNfRVVDX0tSICAgICAgICAgICA9IHsgIkVVQy1LUiIsICJDU0VVQ0tSIiwgMCB9OworCisv
LyBBcmFiaWMKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19JU09fODg1OV82ICAgICAgID0geyAiSVNPLTg4NTktNiIsICJBUkFCSUMiLCAi
QVNNTy03MDgiLCAiRUNNQS0xMTQiLCAiSVNPLUlSLTEyNyIsICJJU084ODU5LTYiLCAiSVNPXzg4
NTktNiIsICJJU09fODg1OS02OjE5ODciLCAiQ1NJU09MQVRJTkFSQUJJQyIsIDAgfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEy
NTYgICAgICAgICAgID0geyAid2luZG93cy0xMjU2IiwgIkNQMTI1NiIsICJNUy1BUkFCIiwgMCB9
OyAvLyByZWFycmFuZ2VkLCB3aW5kb3dzLTEyNTYgbm93IGRlY2xhcmVkIHRoZSBjYW5vbmljYWwg
bmFtZSBhbmQgcHV0IHRvIGxvd2VyY2FzZSB0byBmaXggL2Zhc3QvZW5jb2RpbmcvYWhyYW0tb3Jn
LWVnLmh0bWwgdGVzdCBjYXNlCisKKy8vIEhlYnJldworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFz
TGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0lTT184ODU5XzggICAgICAgPSB7ICJJ
U08tODg1OS04IiwgIkhFQlJFVyIsICJJU08tODg1OS04IiwgIklTTy1JUi0xMzgiLCAiSVNPODg1
OS04IiwgIklTT184ODU5LTgiLCAiSVNPXzg4NTktODoxOTg4IiwgIkNTSVNPTEFUSU5IRUJSRVci
LCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2Rl
Y0FsaWFzZXNfQ1AxMjU1ICAgICAgICAgICA9IHsgIndpbmRvd3MtMTI1NSIsICJDUDEyNTUiLCAi
TVMtSEVCUiIsIDAgfTsgLy8gcmVhcnJhbmdlZCwgbW92ZWQgd2luZG93cy0xMjU1IGFzIGNhbm9u
aWNhbCBhbmQgbG93ZXJjYXNlZCwgZml4aW5nIC9mYXN0L2VuY29kaW5nL21ldGEtY2hhcnNldC5o
dG1sCisKKy8vIEdyZWVrCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNyAgICAgICA9IHsgIklTTy04ODU5LTciLCAiRUNN
QS0xMTgiLCAiRUxPVF85MjgiLCAiR1JFRUsiLCAiR1JFRUs4IiwgIklTTy1JUi0xMjYiLCAiSVNP
ODg1OS03IiwgIklTT184ODU5LTciLCAiSVNPXzg4NTktNzoxOTg3IiwgIklTT184ODU5LTc6MjAw
MyIsICJDU0kiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfQ1A4NjkgICAgICAgICAgICA9IHsgIkNQODY5IiwgIjg2OSIsICJD
UC1HUiIsICJJQk04NjkiLCAiQ1NJQk04NjkiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUzICAgICA9IHsg
IldJTkRPV1MtMTI1MyIsIDAgfTsKKworLy8gQ3lyaWxsaWMKK1RleHRDb2RlY0d0azo6Y29kZWNB
bGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV81ICAgICAgID0g
eyAiSVNPLTg4NTktNSIsICJDWVJJTExJQyIsICJJU08tSVItMTQ0IiwgIklTTzg4NTktNSIsICJJ
U09fODg1OS01IiwgIklTT184ODU5LTU6MTk4OCIsICJDU0lTT0xBVElOQ1lSSUxMSUMiLCAwIH07
CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFz
ZXNfS09JOF9SICAgICAgICAgICA9IHsgIktPSTgtUiIsICJDU0tPSThSIiwgMCB9OworVGV4dENv
ZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlhc2VzX0NQODY2
ICAgICAgICAgICAgPSB7ICJDUDg2NiIsICI4NjYiLCAiSUJNODY2IiwgIkNTSUJNODY2IiwgMCB9
OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlh
c2VzX0tPSThfVSAgICAgICAgICAgPSB7ICJLT0k4LVUiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNv
ZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfV0lORE9XU18xMjUxICAg
ICA9IHsgIndpbmRvd3MtMTI1MSIsICJDUDEyNTEiLCAwIH07IC8vIENQMTI1MSBhZGRlZCB0byBw
YXNzIC9mYXN0L2VuY29kaW5nL2NoYXJzZXQtY3AxMjUxLmh0bWwKK1RleHRDb2RlY0d0azo6Y29k
ZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQyAgICAg
ID0geyAibWFjLWN5cmlsbGljIiwgIk1BQ0NZUklMTElDIiwgIngtbWFjLWN5cmlsbGljIiwgMCB9
OyAKKworLy8gVGhhaQorVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6
Om1fY29kZWNBbGlhc2VzX0NQODc0ICAgICAgICAgICAgPSB7ICJDUDg3NCIsICJXSU5ET1dTLTg3
NCIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2Nv
ZGVjQWxpYXNlc19USVNfNjIwICAgICAgICAgID0geyAiVElTLTYyMCIsIDAgfTsKKworLy8gU2lt
cGxpZmllZCBDaGluZXNlCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0
azo6bV9jb2RlY0FsaWFzZXNfR0JLICAgICAgICAgICAgICA9IHsgIkdCSyIsIDAgfTsKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19IWiAg
ICAgICAgICAgICAgID0geyAiSFoiLCAiSFotR0ItMjMxMiIsIDAgfTsKK1RleHRDb2RlY0d0azo6
Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19HQjE4MDMwICAgICAg
ICAgID0geyAiR0IxODAzMCIsIDAgfTsKK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4
dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19FVUNfQ04gICAgICAgICAgID0geyAiRVVDLUNOIiwg
IkVVQ0NOIiwgIkdCMjMxMiIsICJDTi1HQiIsICJDU0dCMjMxMiIsICJFVUNfQ04iLCAwIH07CitU
ZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNf
MjMxMl84MCAgICAgICAgICA9IHsgIkdCXzIzMTItODAiLCAiQ0hJTkVTRSIsICJjc0lTTzU4R0Iy
MzEyODAiLCAiR0IyMzEyLjE5ODAtMCIsICJJU08tSVItNTgiIH07CisKKy8vIENlbnRyYWwgRXVy
b3BlYW4KK1RleHRDb2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVj
QWxpYXNlc19JU09fODg1OV8yICAgICAgID0geyAiSVNPLTg4NTktMiIsICJJU08tSVItMTAxIiwg
IklTTzg4NTktMiIsICJJU09fODg1OS0yIiwgIklTT184ODU5LTI6MTk4NyIsICJMMiIsICJMQVRJ
TjIiLCAiQ1NJU09MQVRJTjIiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNMaXN0IFRl
eHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjUwICAgICAgICAgICA9IHsgIkNQMTI1MCIs
ICJNUy1FRSIsICJXSU5ET1dTLTEyNTAiLCAwIH07CitUZXh0Q29kZWNHdGs6OmNvZGVjQWxpYXNM
aXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRSA9IHsgIk1B
Qy1DRU5UUkFMRVVST1BFIiwgMCB9OworCisvLyBWaWV0bmFtZXNlCitUZXh0Q29kZWNHdGs6OmNv
ZGVjQWxpYXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU4ICAgICAgICAg
ICA9IHsgIkNQMTI1OCIsICJXSU5ET1dTLTEyNTgiLCAwIH07CisKKy8vIFR1cmtpc2gKK1RleHRD
b2RlY0d0azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19DUDEy
NTQgICAgICAgICAgID0geyAiQ1AxMjU0IiwgIk1TLVRVUksiLCAiV0lORE9XUy0xMjU0IiwgMCB9
OworVGV4dENvZGVjR3RrOjpjb2RlY0FsaWFzTGlzdCBUZXh0Q29kZWNHdGs6Om1fY29kZWNBbGlh
c2VzX0lTT184ODU5XzkgICAgICAgPSB7ICJJU08tODg1OS05IiwgIklTTy1JUi0xNDgiLCAiSVNP
ODg1OS05IiwgIklTT184ODU5LTkiLCAiSVNPXzg4NTktOToxOTg5IiwgIkw1IiwgIkxBVElONSIs
ICJDU0lTT0xBVElONSIsIDAgfTsKKworLy8gQmFsdGljCitUZXh0Q29kZWNHdGs6OmNvZGVjQWxp
YXNMaXN0IFRleHRDb2RlY0d0azo6bV9jb2RlY0FsaWFzZXNfQ1AxMjU3ICAgICAgICAgICA9IHsg
IkNQMTI1NyIsICJXSU5CQUxUUklNIiwgIldJTkRPV1MtMTI1NyIsIDAgfTsKK1RleHRDb2RlY0d0
azo6Y29kZWNBbGlhc0xpc3QgVGV4dENvZGVjR3RrOjptX2NvZGVjQWxpYXNlc19JU09fODg1OV80
ICAgICAgID0geyAiSVNPLTg4NTktNCIsICJJU08tSVItMTEwIiwgIklTTzg4NTktNCIsICJJU09f
ODg1OS00IiwgIklTT184ODU5LTQ6MTk4OCIsICJMNCIsICJMQVRJTjQiLCAiQ1NJU09MQVRJTjQi
LCAwIH07CisKK2djb25zdHBvaW50ZXIgY29uc3QgVGV4dENvZGVjR3RrOjptX2ljb252QmFzZUNv
ZGVjTGlzdFtdID0geyAKKyAgICAvLyBVbmljb2RlCisgICAgJm1fY29kZWNBbGlhc2VzX1VURl84
LAorCisgICAgLy8gV2VzdGVybgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1OV8xCit9Owor
CitnY29uc3Rwb2ludGVyIGNvbnN0IFRleHRDb2RlY0d0azo6bV9pY29udkV4dGVuZGVkQ29kZWNM
aXN0W10gPSAKK3sKKyAgICAvLyBXZXN0ZXJuCisgICAgJm1fY29kZWNBbGlhc2VzX01BQ1JPTUFO
LAorCisgICAgLy8gSmFwYW5lc2UKKyAgICAmbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTLAorICAg
ICZtX2NvZGVjQWxpYXNlc19FVUNfSlAsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0pQ
LAorCisgICAgLy8gU2ltcGxpZmllZCBDaGluZXNlCisgICAgJm1fY29kZWNBbGlhc2VzX0JJRzUs
CisgICAgJm1fY29kZWNBbGlhc2VzX0JJRzVfSEtTQ1MsCisgICAgJm1fY29kZWNBbGlhc2VzX0NQ
OTUwLAorCisgICAgLy8gS29yZWFuCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT18yMDIyX0tSLAor
ICAgICZtX2NvZGVjQWxpYXNlc19DUDk0OSwKKyAgICAmbV9jb2RlY0FsaWFzZXNfRVVDX0tSLAor
CisgICAgLy8gQXJhYmljCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzYsCisgICAgJm1f
Y29kZWNBbGlhc2VzX0NQMTI1NiwKKyAgICAKKyAgICAvLyBIZWJyZXcKKyAgICAmbV9jb2RlY0Fs
aWFzZXNfSVNPXzg4NTlfOCwKKyAgICAmbV9jb2RlY0FsaWFzZXNfQ1AxMjU1LAorICAgIAorICAg
IC8vIEdyZWVrCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzcsCisgICAgJm1fY29kZWNB
bGlhc2VzX0NQODY5LAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTMsCisgICAgCisg
ICAgLy8gQ3lyaWxsaWMKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfNSwKKyAgICAmbV9j
b2RlY0FsaWFzZXNfS09JOF9SLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDg2NiwKKyAgICAmbV9j
b2RlY0FsaWFzZXNfS09JOF9VLAorICAgICZtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTEsCisg
ICAgJm1fY29kZWNBbGlhc2VzX01BQ0NZUklMTElDLAorICAgIAorICAgIC8vIFRoYWkKKyAgICAm
bV9jb2RlY0FsaWFzZXNfQ1A4NzQsCisgICAgJm1fY29kZWNBbGlhc2VzX1RJU182MjAsCisgICAg
CisgICAgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQorICAgICZtX2NvZGVjQWxpYXNlc19HQkssCisg
ICAgJm1fY29kZWNBbGlhc2VzX0haLAorICAgICZtX2NvZGVjQWxpYXNlc19HQjE4MDMwLAorICAg
ICZtX2NvZGVjQWxpYXNlc19FVUNfQ04sCisgICAgJm1fY29kZWNBbGlhc2VzXzIzMTJfODAsCisg
ICAgCisgICAgLy8gQ2VudHJhbCBFdXJvcGVhbgorICAgICZtX2NvZGVjQWxpYXNlc19JU09fODg1
OV8yLAorICAgICZtX2NvZGVjQWxpYXNlc19DUDEyNTAsCisgICAgJm1fY29kZWNBbGlhc2VzX01B
Q0NFTlRSQUxFVVJPUEUsCisgICAgCisgICAgLy8gVmlldG5hbWVzZQorICAgICZtX2NvZGVjQWxp
YXNlc19DUDEyNTgsCisgICAgCisgICAgLy8gVHVya2lzaAorICAgICZtX2NvZGVjQWxpYXNlc19D
UDEyNTQsCisgICAgJm1fY29kZWNBbGlhc2VzX0lTT184ODU5XzksCisgICAgCisgICAgLy8gQmFs
dGljCisgICAgJm1fY29kZWNBbGlhc2VzX0NQMTI1NywKKyAgICAmbV9jb2RlY0FsaWFzZXNfSVNP
Xzg4NTlfNAorfTsKKworCitjb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4
NDsKKyAgICAKKworc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGso
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJu
IG5ldyBUZXh0Q29kZWNHdGsoZW5jb2RpbmcpOworfQorCitnYm9vbGVhbiBUZXh0Q29kZWNHdGs6
OmlzRW5jb2RpbmdBdmFpbGFibGUoY29uc3QgZ2NoYXIqIGVuY05hbWUpCit7CisgICAgR0lDb252
IHRlc3RlcjsKKyAgICAvLyB0ZXN0IGRlY29kaW5nCisgICAgdGVzdGVyID0gZ19pY29udl9vcGVu
KG1faW50ZXJuYWxFbmNvZGluZ05hbWUsIGVuY05hbWUpOworICAgIGlmICh0ZXN0ZXIgPT0gcmVp
bnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOworICAgICAgICAvLyB0ZXN0
IGVuY29kaW5nCisgICAgICAgIHRlc3RlciA9IGdfaWNvbnZfb3BlbihlbmNOYW1lLCBtX2ludGVy
bmFsRW5jb2RpbmdOYW1lKTsKKyAgICAgICAgaWYgKHRlc3RlciA9PSByZWludGVycHJldF9jYXN0
PEdJQ29udj4oLTEpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBnX2ljb252X2Nsb3NlKHRlc3Rlcik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lz
dGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4
dGVuZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBlbmNvZGluZ0xpc3Q7CisgICAgdW5z
aWduZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAgIGlmIChleHRlbmRlZCkgeworICAgICAgICBl
bmNvZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRDb2RlY0xpc3Q7CisgICAgICAgIGxpc3RMZW5n
dGggPSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9IG1faWNvbnZCYXNlQ29kZWNMaXN0
OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNvbnZCYXNlQ29kZWNMaXN0KS9zaXpl
b2YoZ3BvaW50ZXIpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIGNvZGVjQWxpYXNMaXN0ICpjb2RlY0FsaWFzZXMg
PSBzdGF0aWNfY2FzdDxjb2RlY0FsaWFzTGlzdCo+KGVuY29kaW5nTGlzdFtpXSk7CisgICAgICAg
IAorICAgICAgICAvLyBPdXIgY29udmVudGlvbiBpcywgdGhlIGZpcnN0IGVudHJ5IGluIGNvZGVj
QWxpYXNlcyBpcyB0aGUgY2Fub25pY2FsIG5hbWUsIAorICAgICAgICAvLyBzZWUgYWJvdmUgaW4g
dGhlIGxpc3Qgb2YgZGVjbGFyYXRpb25zLiAKKyAgICAgICAgLy8gUHJvYmUgR0xpYiBmb3IgdGhp
cyBvbmUgZmlyc3QuIElmIGl0J3Mgbm90IGF2YWlsYWJsZSwgd2Ugc2tpcCB0aGUgd2hvbGUgZ3Jv
dXAgb2YgYWxpYXNlcy4KKworICAgICAgICBpbnQgY29kZWNDb3VudCA9IDA7CisgICAgICAgIGNv
bnN0IGNoYXIgKmNhbm9uaWNhbE5hbWU7CisgICAgICAgIGNhbm9uaWNhbE5hbWUgPSAoKmNvZGVj
QWxpYXNlcylbY29kZWNDb3VudF07CisKKyAgICAgICAgaWYoIWlzRW5jb2RpbmdBdmFpbGFibGUo
Y2Fub25pY2FsTmFtZSkpIHsKKyAgICAgICAgICAgIExPRyhUZXh0Q29udmVyc2lvbiwgIkNhbm9u
aWNhbCBlbmNvZGluZyAlcyBub3QgYXZhaWxhYmxlLCBza2lwcGluZy4iLCBjYW5vbmljYWxOYW1l
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlZ2lzdHJhcihj
YW5vbmljYWxOYW1lLCBjYW5vbmljYWxOYW1lKTsKKworICAgICAgICBjb25zdCBjaGFyICpjdXJy
ZW50QWxpYXM7CisgICAgICAgIHdoaWxlICgoY3VycmVudEFsaWFzID0gKCpjb2RlY0FsaWFzZXMp
WysrY29kZWNDb3VudF0pKSB7CisgICAgICAgICAgICBpZiAoaXNFbmNvZGluZ0F2YWlsYWJsZShj
dXJyZW50QWxpYXMpKSB7CisgICAgICAgICAgICAgICAgTE9HKFRleHRDb252ZXJzaW9uLCAiUmVn
aXN0ZXJpbmcgZW5jb2RpbmcgbmFtZSBhbGlhcyAlcyB0byBjYW5vbmljYWwgJXMiLCBjdXJyZW50
QWxpYXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihjdXJyZW50
QWxpYXMsIGNhbm9uaWNhbE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9
Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3Ry
YXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKQoreworICAgIGNvbnN0IHZvaWQqIGNvbnN0KiBl
bmNvZGluZ0xpc3Q7CisgICAgdW5zaWduZWQgaW50IGxpc3RMZW5ndGggPSAwOworICAgIGlmIChl
eHRlbmRlZCkgeworICAgICAgICBlbmNvZGluZ0xpc3QgPSBtX2ljb252RXh0ZW5kZWRDb2RlY0xp
c3Q7CisgICAgICAgIGxpc3RMZW5ndGggPSBzaXplb2YobV9pY29udkV4dGVuZGVkQ29kZWNMaXN0
KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5nTGlzdCA9
IG1faWNvbnZCYXNlQ29kZWNMaXN0OworICAgICAgICBsaXN0TGVuZ3RoID0gc2l6ZW9mKG1faWNv
bnZCYXNlQ29kZWNMaXN0KS9zaXplb2YoZ3BvaW50ZXIpOworICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbGlzdExlbmd0aDsgKytpKSB7CisgICAgICAgIGNvZGVjQWxp
YXNMaXN0ICpjb2RlY0FsaWFzZXMgPSBzdGF0aWNfY2FzdDxjb2RlY0FsaWFzTGlzdCo+KGVuY29k
aW5nTGlzdFtpXSk7CisgICAgICAgIC8vIGJ5IGNvbnZlbnRpb24sIHRoZSBmaXJzdCAiYWxpYXMi
IHNob3VsZCBiZSB0aGUgY2Fub25pY2FsIG5hbWUsIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUg
YWxpYXMgbGlzdHMgCisgICAgICAgIGNvbnN0IGdjaGFyICpjb2RlY05hbWUgPSAoKmNvZGVjQWxp
YXNlcylbMF07CisgICAgICAgIGlmIChpc0VuY29kaW5nQXZhaWxhYmxlKGNvZGVjTmFtZSkpCisg
ICAgICAgICAgICByZWdpc3RyYXIoY29kZWNOYW1lLCBuZXdUZXh0Q29kZWNHdGssIDApOworICAg
IH0KK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFtZXMoRW5j
b2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckVuY29kaW5nTmFt
ZXMocmVnaXN0cmFyLCBmYWxzZSk7Cit9CisKK3ZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3RlckJh
c2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAgICByZWdpc3RlckNv
ZGVjcyhyZWdpc3RyYXIsIGZhbHNlKTsKK30KKwordm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVy
RXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7
CisgICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVzKHJlZ2lzdHJhciwgdHJ1ZSk7Cit9CisKK3ZvaWQg
VGV4dENvZGVjR3RrOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciBy
ZWdpc3RyYXIpCit7CisgICAgcmVnaXN0ZXJDb2RlY3MocmVnaXN0cmFyLCB0cnVlKTsKK30KKwor
VGV4dENvZGVjR3RrOjpUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
KyAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCisgICAgLCBtX251bUJ1ZmZlcmVkQnl0ZXMoMCkK
KyAgICAsIG1faWNvbnZEZWNvZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisgICAg
LCBtX2ljb252RW5jb2RlcihyZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKQoreworfQorCitU
ZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGsoKQoreworICAgIGlmIChtX2ljb252RGVjb2RlciAh
PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2Uo
bV9pY29udkRlY29kZXIpOworICAgICAgICBtX2ljb252RGVjb2RlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R0lDb252PigtMSk7CisgICAgfQorICAgIGlmIChtX2ljb252RW5jb2RlciAhPSByZWludGVy
cHJldF9jYXN0PEdJQ29udj4oLTEpKSB7CisgICAgICAgIGdfaWNvbnZfY2xvc2UobV9pY29udkVu
Y29kZXIpOworICAgICAgICBtX2ljb252RW5jb2RlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252
PigtMSk7CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVy
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pY29udkRlY29kZXIgPT0gcmVpbnRlcnByZXRfY2Fz
dDxHSUNvbnY+KC0xKSk7CisKKyAgICBtX2ljb252RGVjb2RlciA9IGdfaWNvbnZfb3BlbihtX2lu
dGVybmFsRW5jb2RpbmdOYW1lLCBtX2VuY29kaW5nLm5hbWUoKSk7Cit9CisKK3ZvaWQgVGV4dENv
ZGVjR3RrOjpjcmVhdGVJQ29udkVuY29kZXIoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ljb252
RGVjb2RlciA9PSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKworICAgIG1faWNvbnZF
bmNvZGVyID0gZ19pY29udl9vcGVuKG1fZW5jb2RpbmcubmFtZSgpLCBtX2ludGVybmFsRW5jb2Rp
bmdOYW1lKTsKK30KKworU3RyaW5nIFRleHRDb2RlY0d0azo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5
dGVzLCBzaXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBz
YXdFcnJvcikKK3sKKyAgICAvLyBHZXQgYSBjb252ZXJ0ZXIgZm9yIHRoZSBwYXNzZWQtaW4gZW5j
b2RpbmcuCisgICAgaWYgKG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252
PigtMSkpIHsKKyAgICAgICAgY3JlYXRlSUNvbnZEZWNvZGVyKCk7CisgICAgICAgIEFTU0VSVCht
X2ljb252RGVjb2RlciAhPSByZWludGVycHJldF9jYXN0PEdJQ29udj4oLTEpKTsKKyAgICAgICAg
aWYgKG1faWNvbnZEZWNvZGVyID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRo
b3VnaCBlbmNvZGluZyB3YXMgaW4gdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaXplX3QgY291bnRXcml0dGVuLCBjb3VudFJl
YWQsIGNvbnZlcnNpb25MZW5ndGg7CisgICAgY29uc3QgY2hhciogY29udmVyc2lvbkJ5dGVzOwor
ICAgIGNoYXIqIHByZWZpeGVkQnl0ZXMgPSAwOworCisgICAgaWYgKG1fbnVtQnVmZmVyZWRCeXRl
cykgeworICAgICAgICBjb252ZXJzaW9uTGVuZ3RoID0gbGVuZ3RoICsgbV9udW1CdWZmZXJlZEJ5
dGVzOworICAgICAgICBwcmVmaXhlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxs
b2MoY29udmVyc2lvbkxlbmd0aCkpOworICAgICAgICBtZW1jcHkocHJlZml4ZWRCeXRlcywgbV9i
dWZmZXJlZEJ5dGVzLCBtX251bUJ1ZmZlcmVkQnl0ZXMpOworICAgICAgICBtZW1jcHkocHJlZml4
ZWRCeXRlcyArIG1fbnVtQnVmZmVyZWRCeXRlcywgYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIAor
ICAgICAgICBjb252ZXJzaW9uQnl0ZXMgPSBwcmVmaXhlZEJ5dGVzOworICAgICAgICAKKyAgICAg
ICAgLy8gYWxsIGJ1ZmZlcmVkIGJ5dGVzIGFyZSBjb25zdW1lZCBub3cKKyAgICAgICAgbV9udW1C
dWZmZXJlZEJ5dGVzID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBubyBwcmV2aW91c2x5
IGJ1ZmZlcmVkIHBhcnRpYWwgZGF0YSwgCisgICAgICAgIC8vIGp1c3QgY29udmVydCB0aGUgZGF0
YSB0aGF0IHdhcyBwYXNzZWQgaW4KKyAgICAgICAgY29udmVyc2lvbkJ5dGVzID0gYnl0ZXM7Cisg
ICAgICAgIGNvbnZlcnNpb25MZW5ndGggPSBsZW5ndGg7CisgICAgfQorCisgICAgR093blB0cjxH
RXJyb3I+IGVycjsKKyAgICBHT3duUHRyPFVDaGFyPiBidWZmZXI7CisKKyAgICBidWZmZXIub3V0
UHRyKCkgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4oZ19jb252ZXJ0X3dpdGhfaWNvbnYoY29u
dmVyc2lvbkJ5dGVzLCBjb252ZXJzaW9uTGVuZ3RoLCBtX2ljb252RGVjb2RlciwgJmNvdW50UmVh
ZCwgJmNvdW50V3JpdHRlbiwgJmVyci5vdXRQdHIoKSkpOyAKKworCisgICAgaWYgKGVycikgewor
ICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJzaW9uIGVycm9yLCBDb2RlICVkOiBcIiVz
XCIiLCBlcnItPmNvZGUsIGVyci0+bWVzc2FnZSk7CisgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRl
cyA9IDA7IC8vIHJlc2V0IHN0YXRlIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIGRlY29kZQorICAg
ICAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAgICAgICAgc2F3RXJyb3IgPSB0cnVlOwor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIC8vIFBhcnRpYWwgaW5w
dXQgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIG1heSBub3QgcmVzdWx0IGluIGFuIGVycm9yIGJl
aW5nIHJhaXNlZC4gCisgICAgLy8gRnJvbSB0aGUgZ25vbWUgbGlicmFyeSBkb2N1bWVudGF0aW9u
IG9uIGdfY29udmVydF93aXRoX2ljb252OgorICAgIC8vICJFdmVuIGlmIHRoZSBjb252ZXJzaW9u
IHdhcyBzdWNjZXNzZnVsLCB0aGlzIG1heSBiZSBsZXNzIHRoYW4gbGVuIGlmIHRoZXJlIHdlcmUg
cGFydGlhbCBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LiIKKyAgICAvLyBUaGF0
J3Mgd2h5IHdlIG5lZWQgdG8gY29tcGFyZSBjb252ZXJzaW9uTGVuZ3RoIGFnYWluc3QgY291bnRS
ZWFkIAorCisgICAgbV9udW1CdWZmZXJlZEJ5dGVzID0gY29udmVyc2lvbkxlbmd0aCAtIGNvdW50
UmVhZDsKKyAgICBpZiAobV9udW1CdWZmZXJlZEJ5dGVzID4gMCkgeworICAgICAgICBpZiAoZmx1
c2gpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiUGFydGlhbCBieXRlcyBhdCBlbmQgb2YgaW5w
dXQgd2hpbGUgZmx1c2ggcmVxdWVzdGVkLiIpOworICAgICAgICAgICAgbV9udW1CdWZmZXJlZEJ5
dGVzID0gMDsgLy8gcmVzZXQgc3RhdGUgZm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gZGVjb2RlCisg
ICAgICAgICAgICBmYXN0RnJlZShwcmVmaXhlZEJ5dGVzKTsKKyAgICAgICAgICAgIHNhd0Vycm9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAg
ICBtZW1jcHkobV9idWZmZXJlZEJ5dGVzLCBjb252ZXJzaW9uQnl0ZXMgKyBjb3VudFJlYWQsIG1f
bnVtQnVmZmVyZWRCeXRlcyk7CisgICAgfQorCisgICAgZmFzdEZyZWUocHJlZml4ZWRCeXRlcyk7
CisgICAgCisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisKKyAgICByZXN1bHQuYXBwZW5kKGJ1
ZmZlci5nZXQoKSwgY291bnRXcml0dGVuIC8gc2l6ZW9mKFVDaGFyKSk7CisKKyAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChyZXN1bHQpOworfQorCitDU3RyaW5nIFRleHRDb2RlY0d0azo6ZW5jb2Rl
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nIGhhbmRsaW5nKQoreworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gIiI7CisK
KyAgICBpZiAobV9pY29udkVuY29kZXIgPT0gcmVpbnRlcnByZXRfY2FzdDxHSUNvbnY+KC0xKSkK
KyAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7CisgICAgaWYgKG1faWNvbnZFbmNvZGVyID09
IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7
CisKKyAgICBzaXplX3QgY291bnQ7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyOworICAgIEdP
d25QdHI8Y2hhcj4gYnVmZmVyOworCisgICAgYnVmZmVyLm91dFB0cigpID0gZ19jb252ZXJ0X3dp
dGhfaWNvbnYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY2hhcmFjdGVycyksIGxlbmd0
aCAqIHNpemVvZihVQ2hhciksIG1faWNvbnZFbmNvZGVyLCAwLCAmY291bnQsICZlcnIub3V0UHRy
KCkpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJHSUNvbnYgY29udmVyc2lv
biBlcnJvciwgQ29kZSAlZDogXCIlc1wiIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UpOworICAg
ICAgICByZXR1cm4gQ1N0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZl
ci5nZXQoKSwgY291bnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENvZGVjR3RrLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJp
bGxldGVyIDxqQGJpdHJvbi5jaD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBEb21pbmlrIFLDtnR0
c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgVGV4dENvZGVjR1RLX2gKKyNkZWZpbmUgVGV4dENvZGVjR1RLX2gKKworI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlICJUZXh0Q29kZWMuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rpbmcu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgVGV4dENvZGVjR3RrIDogcHVi
bGljIFRleHRDb2RlYyB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3Rl
ckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7CisgICAgICAgIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOworCisgICAgICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJl
Z2lzdHJhcik7CisgICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICBUZXh0Q29kZWNHdGsoY29uc3QgVGV4dEVuY29k
aW5nJik7CisgICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0d0aygpOworCisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBmbHVzaCwg
Ym9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAgICAgICB2aXJ0dWFsIENTdHJp
bmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGlu
Zyk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNyZWF0ZUlDb252RGVjb2RlcigpIGNv
bnN0OworICAgICAgICB2b2lkIGNyZWF0ZUlDb252RW5jb2RlcigpIGNvbnN0OworCisgICAgICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIg
cmVnaXN0cmFyLCBib29sIGV4dGVuZGVkKTsgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlckNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyLCBib29sIGV4dGVuZGVk
KTsKKyAgICAgICAgc3RhdGljIGdib29sZWFuIGlzRW5jb2RpbmdBdmFpbGFibGUoY29uc3QgZ2No
YXIqKTsKKworICAgICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKKyAgICAgICAgc2l6ZV90
IG1fbnVtQnVmZmVyZWRCeXRlczsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtX2J1ZmZlcmVkQnl0
ZXNbMTZdOyAvLyBiaWdnZXIgdGhhbiBhbnkgc2luZ2xlIG11bHRpLWJ5dGUgY2hhcmFjdGVyICAg
ICAgICAKKyAgICAgICAgbXV0YWJsZSBHSUNvbnYgbV9pY29udkRlY29kZXI7CisgICAgICAgIG11
dGFibGUgR0lDb252IG1faWNvbnZFbmNvZGVyOworCisgICAgICAgIHN0YXRpYyBjb25zdCBnY2hh
ciogbV9pbnRlcm5hbEVuY29kaW5nTmFtZTsKKworICAgICAgICB0eXBlZGVmIGNvbnN0IGdjaGFy
KiBjb25zdCBjb2RlY0FsaWFzTGlzdFtdOworCisgICAgICAgIC8vIFVuaWNvZGUKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1VURl84OworCisgICAgICAgIC8v
IFdlc3Rlcm4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lT
T184ODU5XzE7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19N
QUNST01BTjsKKworICAgICAgICAvLyBKYXBhbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfU0hJRlRfSklTOworICAgICAgICBzdGF0aWMgY29kZWNBbGlh
c0xpc3QgbV9jb2RlY0FsaWFzZXNfRVVDX0pQOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfSVNPXzIwMjJfSlA7CisKKyAgICAgICAgLy8gVHJhZGl0aW9uYWwg
Q2hpbmVzZQorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQklH
NTsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0JJRzVfSEtT
Q1M7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDk1MDsK
KworICAgICAgICAvLyBLb3JlYW4KKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29k
ZWNBbGlhc2VzX0lTT18yMDIyX0tSOworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9j
b2RlY0FsaWFzZXNfQ1A5NDk7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19FVUNfS1I7CisKKyAgICAgICAgLy8gQXJhYmljCisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV82OworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU2OworCisgICAgICAgIC8vIEhlYnJldwor
ICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfODsK
KyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NTsKKwor
ICAgICAgICAvLyBHcmVlaworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0Fs
aWFzZXNfSVNPXzg4NTlfNzsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNB
bGlhc2VzX0NQODY5OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFz
ZXNfV0lORE9XU18xMjUzOworCisgICAgICAgIC8vIEN5cmlsbGljCisgICAgICAgIHN0YXRpYyBj
b2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV81OworICAgICAgICBzdGF0aWMg
Y29kZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfS09JOF9SOworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1A4NjY7CisgICAgICAgIHN0YXRpYyBjb2RlY0Fs
aWFzTGlzdCBtX2NvZGVjQWxpYXNlc19LT0k4X1U7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFz
TGlzdCBtX2NvZGVjQWxpYXNlc19XSU5ET1dTXzEyNTE7CisgICAgICAgIHN0YXRpYyBjb2RlY0Fs
aWFzTGlzdCBtX2NvZGVjQWxpYXNlc19NQUNDWVJJTExJQzsKKworICAgICAgICAvLyBUaGFpCisg
ICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19DUDg3NDsKKyAgICAg
ICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX1RJU182MjA7CisKKyAgICAg
ICAgLy8gU2ltcGxpZmllZCBDaGluZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBt
X2NvZGVjQWxpYXNlc19HQks7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVj
QWxpYXNlc19IWjsKKyAgICAgICAgc3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2Vz
X0dCMTgwMzA7CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19F
VUNfQ047CisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc18yMzEy
XzgwOyAKKworICAgICAgICAvLyBDZW50cmFsIEV1cm9wZWFuCisgICAgICAgIHN0YXRpYyBjb2Rl
Y0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19JU09fODg1OV8yOworICAgICAgICBzdGF0aWMgY29k
ZWNBbGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjUwOworICAgICAgICBzdGF0aWMgY29kZWNB
bGlhc0xpc3QgbV9jb2RlY0FsaWFzZXNfTUFDQ0VOVFJBTEVVUk9QRTsKKworICAgICAgICAvLyBW
aWV0bmFtZXNlCisgICAgICAgIHN0YXRpYyBjb2RlY0FsaWFzTGlzdCBtX2NvZGVjQWxpYXNlc19D
UDEyNTg7CisKKyAgICAgICAgLy8gVHVya2lzaAorICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xp
c3QgbV9jb2RlY0FsaWFzZXNfQ1AxMjU0OworICAgICAgICBzdGF0aWMgY29kZWNBbGlhc0xpc3Qg
bV9jb2RlY0FsaWFzZXNfSVNPXzg4NTlfOTsKKworICAgICAgICAvLyBCYWx0aWMKKyAgICAgICAg
c3RhdGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0NQMTI1NzsKKyAgICAgICAgc3Rh
dGljIGNvZGVjQWxpYXNMaXN0IG1fY29kZWNBbGlhc2VzX0lTT184ODU5XzQ7CisKKyAgICAgICAg
c3RhdGljIGdjb25zdHBvaW50ZXIgY29uc3QgbV9pY29udkJhc2VDb2RlY0xpc3RbXTsKKyAgICAg
ICAgc3RhdGljIGdjb25zdHBvaW50ZXIgY29uc3QgbV9pY29udkV4dGVuZGVkQ29kZWNMaXN0W107
CisKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0Q29k
ZWNHVEtfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>