<?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>25709</bug_id>
          
          <creation_ts>2009-05-11 17:25:48 -0700</creation_ts>
          <short_desc>Skia changes to image decoders should be merged into the cross-platform ones</short_desc>
          <delta_ts>2009-08-14 08:53:27 -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>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>bfulgham</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>manyoso</cc>
    
    <cc>vestbo</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>120748</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-11 17:25:48 -0700</bug_when>
    <thetext>For expediency, the Chromium checkins included WebCore/platform/image-decoders/skia, which forked all the existing files in image-decoders/.  The Skia versions and the existing Cairo versions should be harmonized and merged into one.  As a side benefit, this will give Cairo working BMP/ICO/XBM decoders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120751</commentid>
    <comment_count>1</comment_count>
      <attachid>30210</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-11 17:39:54 -0700</bug_when>
    <thetext>Created attachment 30210
Part one - v1

This does lots of easy changes to get the two sets of files much closer together, mostly style fixes to the older Cairo code:
* Proper #include guard names
* Namespace names on the closing brackets
* Indent namespace contents in header files
* Class open brackets on same line
* Correct initializer list indenting
* NULL -&gt; 0

Also a few other changes for better consistency:
* m_size -&gt; size(), which is what the Skia code uses, and is slightly safer in the case of subclasses
* Add/move a couple trivial lines

After this patch, most diffs between the two code should be actual functional differences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121432</commentid>
    <comment_count>2</comment_count>
      <attachid>30210</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-14 21:52:10 -0700</bug_when>
    <thetext>Comment on attachment 30210
Part one - v1

Yay!

This patch is pretty big, making it difficult to review.

For example, all the places where you&apos;re only re-indenting code (like ImageDecoder.h) would be easier to review in a smaller patch...

Why is it OK to remove:
#if PLATFORM(CAIRO) || PLATFORM(QT) || PLATFORM(WX)
from BMPImageDecoder?  Is that file not included in the Windows build?  For a while WinCG and WinCairo were sharing a solution file...

WK Style:
 185         decode(GIFFullQuery, index+1); // Decode this frame.
would say index + 1 I think.

 407         unsigned data_size = num * sizeof(unsigned);
dataSize


What&apos;s the ADDRESS_TAG_BIT stuff you&apos;re removing?  You don&apos;t mention it in the ChangeLog...

I assume x is never used in this loop:
          for (unsigned i = 0; i &lt; info-&gt;output_width; ++i) {
 483         for (unsigned x = 0; x &lt; info-&gt;output_width; ++x) {

Style:
4 void PNGImageDecoder::decodingFailed() {
 225     m_failed = true;
 226 }

What&apos;s the skia/BMPImageDecoder.h change?  Line endings?
skia/BMPImageReader.h ?

Why is this OK?
 bool JPEGImageDecoder::isSizeAvailable()
421421         decode(true);
422422     }
423423 
424      return !m_failed &amp;&amp; ImageDecoder::isSizeAvailable();
 424     return ImageDecoder::isSizeAvailable();
425425 }

This really mostly need more documentation in the ChangeLog.  And I&apos;d prefer to land this in smaller pieces.

Otherwise, this looks fine.  I assume you ran the WebKit Windows (Apple&apos;s port) still built fine after this?

r-, mostly due to lack of explanation in the ChangeLog and the above nits.  Again, I&apos;d rather land this in smaller pieces, but I&apos;ll happily review whatever you post next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121836</commentid>
    <comment_count>3</comment_count>
      <attachid>30455</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-18 17:03:21 -0700</bug_when>
    <thetext>Created attachment 30455
Part one - v2

This is nearly identical to the first patch, except for fixing &quot;index+1&quot; into &quot;index + 1&quot;, and adding much more commentary to the ChangeLog, hopefully answering the questions from the first review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121979</commentid>
    <comment_count>4</comment_count>
      <attachid>30455</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-19 15:04:18 -0700</bug_when>
    <thetext>Comment on attachment 30455
Part one - v2

I honestly can&apos;t review this.  It&apos;s too big for my little brain.  I&apos;d consider giving you a rubber-stamp and just trusting, but I can&apos;t actually review this whole change.  If you break it into smaller pieces (litterally just slicing the diff on file boundaries) I think you&apos;d have little trouble finding many people willing to review this (including me).  It looks like a great bunch of cleanup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122647</commentid>
    <comment_count>5</comment_count>
      <attachid>30455</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 06:53:49 -0700</bug_when>
    <thetext>Comment on attachment 30455
Part one - v2

r-&apos;d based on my above &quot;too big to review&quot; comments.  Thanks again for the patch and nicely updated ChangeLog.  I think just a little slicing and dicing will make all the difference (or if we had a better review tool...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122707</commentid>
    <comment_count>6</comment_count>
      <attachid>30584</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-22 11:29:46 -0700</bug_when>
    <thetext>Created attachment 30584
part one, simplified (Landed r44051)

OK, splitting the original patch into pieces.  Here&apos;s the first and largest piece.  The only thing this does is indent the namespace contents in the header files, to comply with the style guide.  There is no code change, this should be rubber-stampable.

I&apos;m also going to ditch the DOS line endings stuff in the original patch since I think something is screwy with my client and that&apos;s actually not desirable.  So after this goes in, the remainder of the original patch may be small enough to be reviewable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122713</commentid>
    <comment_count>7</comment_count>
      <attachid>30587</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-22 11:55:07 -0700</bug_when>
    <thetext>Created attachment 30587
part two (Landed r44167)

Here&apos;s the remaining bits from the original &quot;part one&quot; patch, hopefully now small enough to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122763</commentid>
    <comment_count>8</comment_count>
      <attachid>30587</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 19:31:21 -0700</bug_when>
    <thetext>Comment on attachment 30587
part two (Landed r44167)

style:
 407         unsigned data_size = num * sizeof(unsigned);
Maybe that&apos;s matching the style of the file?
style:
void PNGImageDecoder::decodingFailed() {
 225     m_failed = true;

Looks fantastic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122782</commentid>
    <comment_count>9</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-22 20:57:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 30587 [review])
&gt; style:
&gt; void PNGImageDecoder::decodingFailed() {
&gt;  225     m_failed = true;

Not sure what style nit is being reported here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122784</commentid>
    <comment_count>10</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-05-22 21:28:36 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 30587 [review] [review])
&gt; &gt; style:
&gt; &gt; void PNGImageDecoder::decodingFailed() {
&gt; &gt;  225     m_failed = true;
&gt; 
&gt; Not sure what style nit is being reported here?

I think the bracket should be in a separate line.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122799</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 22:25:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (From update of attachment 30587 [review] [review] [review])
&gt; &gt; &gt; style:
&gt; &gt; &gt; void PNGImageDecoder::decodingFailed() {
&gt; &gt; &gt;  225     m_failed = true;
&gt; &gt; 
&gt; &gt; Not sure what style nit is being reported here?
&gt; 
&gt; I think the bracket should be in a separate line.
&gt; 

Exactly:
http://webkit.org/coding/coding-style.html
Braces
Function definitions: place each brace on its own line.

We really need a WebKit linter. :(
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123213</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-05-26 17:21:49 -0700</bug_when>
    <thetext>Landed in @r44167.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123226</commentid>
    <comment_count>13</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-26 21:04:14 -0700</bug_when>
    <thetext>Not fixed yet, these patches are just the start :).

Did you correct both nits in comment 8?  If not I will address them in the next patch here.  Thanks for landing for me, I was out sick today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123227</commentid>
    <comment_count>14</comment_count>
      <attachid>30587</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-05-26 21:04:58 -0700</bug_when>
    <thetext>Comment on attachment 30587
part two (Landed r44167)

Obsoleting this now-landed patch so it doesn&apos;t show up in the landing queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124834</commentid>
    <comment_count>15</comment_count>
      <attachid>31069</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-08 16:17:56 -0700</bug_when>
    <thetext>Created attachment 31069
Misc. work, not ready for review

This is for bfulgham to test the Cairo build.  Patch should be applied from inside WebCore/platform/image-decoders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124844</commentid>
    <comment_count>16</comment_count>
      <attachid>31071</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-08 16:56:45 -0700</bug_when>
    <thetext>Created attachment 31071
Misc. work, not ready for review, v2

Fixed a few compile errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124845</commentid>
    <comment_count>17</comment_count>
      <attachid>31072</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-08 17:06:51 -0700</bug_when>
    <thetext>Created attachment 31072
Misc. work, not ready for review, v3

Sigh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124847</commentid>
    <comment_count>18</comment_count>
      <attachid>31073</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-08 17:20:09 -0700</bug_when>
    <thetext>Created attachment 31073
part three (Landed r44545)

This is the Skia portion of the &quot;misc. work&quot; patch above, broken out separately for ease of review, with a commented ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124850</commentid>
    <comment_count>19</comment_count>
      <attachid>31073</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-08 17:40:21 -0700</bug_when>
    <thetext>Comment on attachment 31073
part three (Landed r44545)

+          http://code.google.com/p/chromium/issues/detail?id=3643.

Can we just add the test as part of this change?  (I don&apos;t need to see the test, but you could land it with this.)

Would be nice to eventually add a setColor function which took an IntPoint and a Color instead of:
+            m_frameBufferCache.first().setRGBA(m_coord.x(), m_coord.y(), red, green, blue, alpha);

obviously not for this patch. :)

It&apos;s not clear to me from the ChangeLog why the removal of these lines:
-            buffer-&gt;setStatus(RGBA32Buffer::FrameComplete);

is correct.  But I trust you.

Very sad that setSize() doesn&apos;t take an IntSize :)

I&apos;m assuming this:
-                      buffer-&gt;setRGBA(bitmap.getAddr32(x, y), 0, 0, 0, 0);
is not needed because x/y are already 32-bit checked or some such?  Unclear why the change.

I am not the right person to review this technically.  But I don&apos;t think that person exists in the set of webkit reviewers.  I trust here that you&apos;ve checked any needed parts with people who do have Skia knowledge.

You have my rubber stamp.

Thank you for making this so small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124866</commentid>
    <comment_count>20</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-08 18:12:50 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 31073 [review])
&gt; +          http://code.google.com/p/chromium/issues/detail?id=3643.
&gt; 
&gt; Can we just add the test as part of this change?  (I don&apos;t need to see the
&gt; test, but you could land it with this.)

I&apos;ve... um... never written a LayoutTest.  I could go find out how...

&gt; Would be nice to eventually add a setColor function which took an IntPoint and
&gt; a Color instead of:
&gt; +            m_frameBufferCache.first().setRGBA(m_coord.x(), m_coord.y(), red,
&gt; green, blue, alpha);
&gt; 
&gt; obviously not for this patch. :)

This could probably be changed eventually, in a pass to &quot;clean up ImageDecoder APIs to use higher-level WK types as much as possible&quot;.

&gt; It&apos;s not clear to me from the ChangeLog why the removal of these lines:
&gt; -            buffer-&gt;setStatus(RGBA32Buffer::FrameComplete);
&gt; 
&gt; is correct.  But I trust you.

Because that setStatus() call has now moved into the RGBA32Buffer::setSize() implementation that all these places were calling.

&gt; Very sad that setSize() doesn&apos;t take an IntSize :)

See above comment re: color.

&gt; I&apos;m assuming this:
&gt; -                      buffer-&gt;setRGBA(bitmap.getAddr32(x, y), 0, 0, 0, 0);
&gt; is not needed because x/y are already 32-bit checked or some such?  Unclear why
&gt; the change.

The version that takes an (x, y) coordinate pair instead of a pointer is just safer and easier to read, that&apos;s all.

&gt; I am not the right person to review this technically.  But I don&apos;t think that
&gt; person exists in the set of webkit reviewers.  I trust here that you&apos;ve checked
&gt; any needed parts with people who do have Skia knowledge.

I&apos;ve asked Brett Wilson to look the patch over.  I&apos;ll avoid committing until he OKs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125010</commentid>
    <comment_count>21</comment_count>
      <attachid>31073</attachid>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-06-09 14:38:03 -0700</bug_when>
    <thetext>Comment on attachment 31073
part three (Landed r44545)

I have almost no chance to find subtle issues in a patch like this, but I don&apos;t see any problems.

&gt; +            return total_size &gt; ((256 * 256 * 256 * 32) - 1);

I&apos;m not clear why you did the computation this way since I can&apos;t tell what it means. How about (1 &lt;&lt; 28) - 1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125012</commentid>
    <comment_count>22</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-09 14:41:40 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; +            return total_size &gt; ((256 * 256 * 256 * 32) - 1);
&gt; 
&gt; I&apos;m not clear why you did the computation this way since I can&apos;t tell what it
&gt; means. How about (1 &lt;&lt; 28) - 1?

I was just trying to break things into countable chunks (256 = 2^8, 32 = 2^5).  Your idea is better, I didn&apos;t think of it.  But I think you mean 1 &lt;&lt; 29.

Will commit and then post some more stuff for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125022</commentid>
    <comment_count>23</comment_count>
      <attachid>31073</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-09 15:01:43 -0700</bug_when>
    <thetext>Comment on attachment 31073
part three (Landed r44545)

Landed part three, clearing its flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125037</commentid>
    <comment_count>24</comment_count>
      <attachid>31112</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-09 16:49:25 -0700</bug_when>
    <thetext>Created attachment 31112
part four (Landed r44553)

This is much of the remaining work on the Cairo side.  bfulgham already built and ran with this patch locally yesterday and verified that things still work as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125044</commentid>
    <comment_count>25</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-09 17:24:58 -0700</bug_when>
    <thetext>This patch looks good to me.  It applies cleanly and works properly under the Windows (Cairo) build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125066</commentid>
    <comment_count>26</comment_count>
      <attachid>31112</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-09 18:13:24 -0700</bug_when>
    <thetext>Comment on attachment 31112
part four (Landed r44553)

Looks sane enough to me.

Nits:
indent:
       if (clientptr) {
 521         if (!clientptr-&gt;sizeNowAvailable(screen_width, screen_height))
 522           return false;
 523       }

buffer.setRect(IntRect(0, 0, size().width(), size().height()));
setRect(IntRect(IntPoint(), size())) would be more concise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125079</commentid>
    <comment_count>27</comment_count>
      <attachid>31112</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-09 19:23:48 -0700</bug_when>
    <thetext>Comment on attachment 31112
part four (Landed r44553)

Landed, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125081</commentid>
    <comment_count>28</comment_count>
      <attachid>31123</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-09 21:01:14 -0700</bug_when>
    <thetext>Created attachment 31123
part five (Landed r44573)

The main thing in this patch is a rewrite of Skia&apos;s GIFImageDecoder::haveDecodedRow() to not use raw pointers to the data inside the framebuffer, and instead do everything through coordinates.  This makes the code a lot more readable too (IMO).

After this patch, none of the Skia image decoders has anything Skia-specific or unimplementable by Cairo inside it.  I&apos;ll then need to write a similar patch for the Cairo side adding the Cairo versions of the new ImageDecoder.h functions, and then we can start actually merging the files together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125101</commentid>
    <comment_count>29</comment_count>
      <attachid>31123</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-10 00:34:48 -0700</bug_when>
    <thetext>Comment on attachment 31123
part five (Landed r44573)

Shouldn&apos;t we add some ASSERTS?
128         // NOTE: This function does not sanity-check its arguments!  Callers
 129         // MUST not pass invalid values or this will corrupt memory.
 130         void copyRowNTimes(int startX, int endX, int startY, int endY)
 131         {
 132           const int rowBytes = (endX - startX) * sizeof uint32_t;
 133           const uint32_t* const startAddr = m_bitmap.getAddr32(startX, startY);
 134           for (int destY = startY + 1; destY &lt; endY; ++destY)
 135               memcpy(m_bitmap.getAddr32(startX, destY), startAddr, rowBytes);
 136         }

also, the indent is off.

Looks sane to me.  r=me with more ASSERTs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125145</commentid>
    <comment_count>30</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-10 09:59:19 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 31123 [review])
&gt; Shouldn&apos;t we add some ASSERTS?

I can ASSERT in the Skia code, but I&apos;m not sure I&apos;ll be able to in the Cairo code, because unlike Skia Cairo doesn&apos;t know dimensions of its own bitmap.  I&apos;ll have to add a width to make these APIs work but I wasn&apos;t necessarily going to add a height...

In any case, I can make a best-effort attempt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125169</commentid>
    <comment_count>31</comment_count>
      <attachid>31123</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-10 10:47:39 -0700</bug_when>
    <thetext>Comment on attachment 31123
part five (Landed r44573)

Landed, clearing flags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125239</commentid>
    <comment_count>32</comment_count>
      <attachid>31146</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-10 17:10:16 -0700</bug_when>
    <thetext>Created attachment 31146
part six (Landed r44597)

I need to land this for the skia/ImageDecoder.h non-MSVC compile fix; the rest of the changes are less-important stuff that&apos;s just sitting in my tree at the moment and so is kind of tagging along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125245</commentid>
    <comment_count>33</comment_count>
      <attachid>31146</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-10 17:18:59 -0700</bug_when>
    <thetext>Comment on attachment 31146
part six (Landed r44597)

looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125254</commentid>
    <comment_count>34</comment_count>
      <attachid>31146</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-10 17:31:55 -0700</bug_when>
    <thetext>Comment on attachment 31146
part six (Landed r44597)

Landed, clearing flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125415</commentid>
    <comment_count>35</comment_count>
      <attachid>31183</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-11 17:38:44 -0700</bug_when>
    <thetext>Created attachment 31183
part seven

This patch makes the Cairo and Skia ImageDecoder.h implement the same public APIs, so the decoders can be the same files.

The _will_ break Qt/GTK+/anybody else who is pulling in ImageDecoder.h and isn&apos;t Cairo.  I will abstract the Cairo- (and Skia-) specific bits back out in the next patch or two, although these ports might still need architectural changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125419</commentid>
    <comment_count>36</comment_count>
      <attachid>31185</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-11 17:59:17 -0700</bug_when>
    <thetext>Created attachment 31185
part seven, v2

Try to fix Cairo build error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125422</commentid>
    <comment_count>37</comment_count>
      <attachid>31186</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-11 18:04:52 -0700</bug_when>
    <thetext>Created attachment 31186
part seven, v3 (Landed r44631)

Sigh</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125433</commentid>
    <comment_count>38</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-11 20:58:15 -0700</bug_when>
    <thetext>I&apos;ve applied and confirmed that the &quot;part seven, v3&quot; patch builds and works perfectly on Windows Cairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125534</commentid>
    <comment_count>39</comment_count>
      <attachid>31186</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-12 14:37:09 -0700</bug_when>
    <thetext>Comment on attachment 31186
part seven, v3 (Landed r44631)

LGTM.  Thanks again for taking this on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125559</commentid>
    <comment_count>40</comment_count>
      <attachid>31217</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-12 15:44:04 -0700</bug_when>
    <thetext>Created attachment 31217
part eight

This looks huge but it&apos;s almost all just deleting the now-unnecessary copies of the image decoders in skia/ or moving the non-boilerplate ones from in there to replace the boilerplate ones in bmp/, ico/, and xbm/.  So it should basically be a rubber-stamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125565</commentid>
    <comment_count>41</comment_count>
      <attachid>31217</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-12 15:52:00 -0700</bug_when>
    <thetext>Comment on attachment 31217
part eight

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125593</commentid>
    <comment_count>42</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-12 21:19:35 -0700</bug_when>
    <thetext>I&apos;m so not impressed by these changes. The amount of fall outs so far has been so big, I don&apos;t want to continue wasting my time dealing with these fallouts. I don&apos;t see the reason the Skia decoders were landed in the first place and I don&apos;t like the idea of putting cairo stuff into ImageDecoder.h at all. Could we please just revert all of these changes?

Could you please explain me why ImageDecoder now needs to depend on a specific graphics library? this was not the case before and things worked just fine, why does this need to be changed? Why can&apos;t skia just work like cairo?

Before merging any more of this stuff, could we please take the step back and see where we are heading to?

I&apos;m also specially frustrated to see changes in the code as this makes any attempt to remerge code with mozilla more difficult...

*currently dealing with fallouts*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125596</commentid>
    <comment_count>43</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-12 21:45:26 -0700</bug_when>
    <thetext>The Cairo build of Windows WebKit works properly, and correctly displays BMP, ICO, and XBM now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125602</commentid>
    <comment_count>44</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-12 23:21:19 -0700</bug_when>
    <thetext>Just for the record, I would oppose backing these updates out.  This is a nice improvement for the Cairo-based ports of WebKit.  I think that a small change, such as making the cairo-specific calls in ImageDecoder.h generic signatures (similar to GraphicsContext, and pushing the specific implementation details into specialized sub-files (just as is done with the various platform files now) would be a more desirable approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125611</commentid>
    <comment_count>45</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 06:22:57 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Just for the record, I would oppose backing these updates out.  This is a nice
&gt; improvement for the Cairo-based ports of WebKit.  I think that a small change,
&gt; such as making the cairo-specific calls in ImageDecoder.h generic signatures
&gt; (similar to GraphicsContext, and pushing the specific implementation details
&gt; into specialized sub-files (just as is done with the various platform files
&gt; now) would be a more desirable approach.

To get the record straight. In WebCore/platform/image-decoders is nothing that is specific to any graphics library. So calling it &quot;cairo decoders&quot; is misleading. dhyatt confirmed on irc that the decoders should simply operate on buffers. I strongly oppose making decoders cairo/skia depended. In fact the decoders are used by the WinCE port of torchmobile (IIRC), likely to be used by WX, there is experimental support for QtWebKit to use the decoders again.

On top of that ImageDecoder.h is an interface used by the Qt port to implement image decoding using Qt routines, so any change to that file requires adjustment to Qt (2nd part of the misconception to call that cairo related).

It is really not friendly to force so much breakage on others for three new decoders...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125612</commentid>
    <comment_count>46</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 06:26:24 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Created an attachment (id=31183) [review]
&gt; part seven
&gt; 
&gt; This patch makes the Cairo and Skia ImageDecoder.h implement the same public
&gt; APIs, so the decoders can be the same files.
&gt; 
&gt; The _will_ break Qt/GTK+/anybody else who is pulling in ImageDecoder.h and
&gt; isn&apos;t Cairo.  I will abstract the Cairo- (and Skia-) specific bits back out in
&gt; the next patch or two, although these ports might still need architectural
&gt; changes.

nice attitude, I&apos;m totally disappointed by this. :(

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125615</commentid>
    <comment_count>47</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-13 06:51:32 -0700</bug_when>
    <thetext>I don&apos;t know why people started calling the cross-platform image decoders &quot;the Cairo ones&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125616</commentid>
    <comment_count>48</comment_count>
      <attachid>31234</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 06:54:17 -0700</bug_when>
    <thetext>Created attachment 31234
Free ImageDecoder.h from any knowledge about graphics libraries

Remove cairo dependency from ImageDecoder.h. The great thing about the image-decoders is that they work on buffers (not by accident) and this way any graphics library can adopt the RGBA8888 surface making them generally usable... there should not be any knowledge about graphics libraries in this code...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125617</commentid>
    <comment_count>49</comment_count>
      <attachid>31234</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-13 07:16:25 -0700</bug_when>
    <thetext>Comment on attachment 31234
Free ImageDecoder.h from any knowledge about graphics libraries

&gt; +    return cairo_image_surface_create_for_data((unsigned char*)buffer-&gt;bytes().data(),
&gt; +                                               CAIRO_FORMAT_ARGB32,
&gt; +                                               size().width(),
&gt; +                                               size().height(),
&gt; +                                               size().width()*4);

Any reason to use a C-style cast here instead of the C++-style casts in the old code? Also, why the hardcoded &quot;4&quot; instead of sizeof(PixelData)?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125623</commentid>
    <comment_count>50</comment_count>
      <attachid>31237</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 08:05:18 -0700</bug_when>
    <thetext>Created attachment 31237
Free ImageDecoder.h from any knowledge about graphics libraries (2nd attempt)

Sorry darin to have wasted your time. This patch adds the sizeof(PixelData) instead of the magic number, changes the c cast to c++ reinterpret_cast and adds one of the two bytes() symbols back to ImageDecoder.h. This should fix the hidden Wx build bustage as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125624</commentid>
    <comment_count>51</comment_count>
      <attachid>31237</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-13 08:07:00 -0700</bug_when>
    <thetext>Comment on attachment 31237
Free ImageDecoder.h from any knowledge about graphics libraries (2nd attempt)

The original patch had a const_cast as well as the reinterpret_cast. Will this compile without the const_cast?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125625</commentid>
    <comment_count>52</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 08:12:52 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 31237 [review])
&gt; The original patch had a const_cast as well as the reinterpret_cast. Will this
&gt; compile without the const_cast?

it did here (gcc4.4). Originally ImageDecoder.h had

const Vector&amp; bytes() const { return m_bytes }
Vector &amp;bytes() { return m_bytes; }

which might explain the const cast. I have only added back the non-const symbol as it felt strange to use a const version and then cast it away. What do you think?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125631</commentid>
    <comment_count>53</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 09:22:05 -0700</bug_when>
    <thetext>Non-Cairo folks:

I&apos;m well aware that other ports besides Cairo use ImageDecoder.h.  I don&apos;t intend to have it mandatorily depend on Cairo, Skia, or anything else; the current state is a brief interim step before I pull all the Cairo bits back out.  Please, don&apos;t land the &quot;Free ImageDecoder.h from knowledge about graphics libraries&quot; patch; I intend to free that header from this knowledge in a much cleaner way than reverting the patch.  My plan was to land that change Monday.  If you need, I can come in to work and get it written up today.

Also, I didn&apos;t just cavalierly break the other ports; I discussed plans with people on IRC and got OKs to go the route I&apos;m going, so this isn&apos;t happening in a vacuum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125633</commentid>
    <comment_count>54</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 09:34:14 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Non-Cairo folks:
&gt; 
&gt; I&apos;m well aware that other ports besides Cairo use ImageDecoder.h.  I don&apos;t
&gt; intend to have it mandatorily depend on Cairo, Skia, or anything else; the
&gt; current state is a brief interim step before I pull all the Cairo bits back
&gt; out.  Please, don&apos;t land the &quot;Free ImageDecoder.h from knowledge about graphics
&gt; libraries&quot; patch; I intend to free that header from this knowledge in a much
&gt; cleaner way than reverting the patch.  My plan was to land that change Monday. 
&gt; If you need, I can come in to work and get it written up today.

You really can&apos;t break things on Friday and wait until Monday to fix it, specially with contributors not on a pay roll. Why did you hardcode cairo knowledge in the first place, how did this make anything better? You willingly broke WX and Qt with that and this is what honestly annoys me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125634</commentid>
    <comment_count>55</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 09:42:32 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; You really can&apos;t break things on Friday and wait until Monday to fix it,
&gt; specially with contributors not on a pay roll. Why did you hardcode cairo
&gt; knowledge in the first place, how did this make anything better? You willingly
&gt; broke WX and Qt with that and this is what honestly annoys me.

First let me outline where things are going so I have context to answer:

* Pull all implementation code that isn&apos;t cross-platform out of ImageDecoder.h into ImageDecoder.cpp
* Create cairo/ subdirectory and move Cairo version of ImageDecoder.cpp there; fix Cairo build to include this file
* Create Skia version of ImageDecoder.cpp in skia/ and remove the ImageDecoder.h there

At this point ImageDecoder.h is a completely cross-platform header with no knowledge of graphics libraries.  In addition, it has no knowledge of precisely how a particular backend implements the backing store inside RGBA32Buffer, so ports can use a direct pixel store or some other store managed by their graphics library (Skia already does this and after talking with Brent I think Cairo will move this direction).  Plus it&apos;s more readable.

The first patch to be landed will do the first two steps above and hopefully make ImageDecoderQt.h compile as-is.  The next patch will do the third item and only be noticed by the Skia folks.  I can come in right now and right the first patch so it will unbreak you.  Sorry for the trouble.

Now, as to answering your question:  Cairo knowledge was coded into ImageDecoder.h for two reasons:
* So I could get to a point where Skia and Cairo were both building using an ImageDecoder.h with the same interface, to ensure the interface contained everything necessary before pulling the actual implementation out of it
* So the two different ImageDecoder.hs would be as close as possible for easier diffing

In other words, this was to make my life easier, not because it&apos;s the only way things had to happen.  The reason I did that was because I asked on IRC if it was OK to break Qt while I did that and got an OK; I normally wouldn&apos;t commit changes that knowingly break other ports but I was very worried about goofing up the contents of the ImageDecoder headers since they had been tricky to diff against each other.

Again, I&apos;m sorry you feel frustrated and that I&apos;m not paying attention.  I will do what I can to fix things immediately.  If you have review powers it should be pretty easy for me to get you a patch you can r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125635</commentid>
    <comment_count>56</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 09:54:01 -0700</bug_when>
    <thetext>It is night where I am and I&apos;m quite tired but as of now I don&apos;t think it is the right thing to do, specially as we have been there with the Qt port and opted for other things.

You silently turn the ImageDecoder.h into a ImageSource. The question is if that is the way to go or not. So after you are done, where do you think is the border between ImageSource and ImageDecoder?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125641</commentid>
    <comment_count>57</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 10:47:35 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; You silently turn the ImageDecoder.h into a ImageSource. The question is if
&gt; that is the way to go or not. So after you are done, where do you think is the
&gt; border between ImageSource and ImageDecoder?

To sum up: some discussion happened on IRC.  At the moment I&apos;m not changing anything about ImageDecoder&apos;s API.  After stuff is unforked it probably makes sense to look closely at the general interplay between the various image classes to see if several ports&apos; implementations should merge together, if some of these classes should be killed, etc.  At the moment I&apos;m going to go ahead and get things unforked first, that seems like a necessary prerequisite to figuring out the best cross-platform design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125653</commentid>
    <comment_count>58</comment_count>
      <attachid>31241</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 11:22:48 -0700</bug_when>
    <thetext>Created attachment 31241
part nine (Landed r44652)

This removes Cairo-specific implementation from ImageDecoder.h.  This header should again be safe to include by any port.

Nest step will be to merge the Skia ImageDecoder.h into this file, which should barely change anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125654</commentid>
    <comment_count>59</comment_count>
      <attachid>31241</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-13 11:29:15 -0700</bug_when>
    <thetext>Comment on attachment 31241
part nine (Landed r44652)

Looks sane to me.  Peter promised me this would not start any flame wars or break any builds.  He also said zecke seemed to give the go-ahead over irc (I was not there).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125663</commentid>
    <comment_count>60</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 13:34:01 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; I don&apos;t know why people started calling the cross-platform image decoders &quot;the
&gt; Cairo ones&quot;.

Because at this point they are, for all practical purposes.  Safari and Chromium/Mac use CG, Chromium/Win and Linux use the Skia decoders, QT uses its own decoders, GTK and Cairo/Win use the &quot;cross-platform&quot; decoders, and Wx doesn&apos;t build (and hasn&apos;t in a long time).

So no one except Cairo was actually using the various gif/, jpeg/, etc. decoders.  Now Cairo and, after part eight landed, Skia, are both using them, and in the future perhaps Qt will too (my aim is to make that easier rather than harder).  Supposedly there are experimental patches lying around (somewhere) to accomplish this last bit.

Qt currently _does_ use ImageDecoder.h, but they&apos;re not really using the cross-platform decoders, just one of the headers; I&apos;m not completely sure what ImageDecoder.h is really used for since some of it is stubbed out and much of the rest isn&apos;t called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125689</commentid>
    <comment_count>61</comment_count>
      <attachid>31245</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 16:06:19 -0700</bug_when>
    <thetext>Created attachment 31245
part ten (Landed r44661)

Here is the last part on this bug.  There is more work that can probably be done on these files (cleaning up interfaces to use more WebKit types, determining whether all platforms using these decoders can now use a shared ImageSource, etc.) but this will finish the &quot;unforking&quot; portion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125697</commentid>
    <comment_count>62</comment_count>
      <attachid>31245</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-13 16:51:44 -0700</bug_when>
    <thetext>Comment on attachment 31245
part ten (Landed r44661)

Looks good.  So many minus lines!

It&apos;s hard to see how RGBA32Buffer is different from ImageBuffer after all these changes?  I&apos;m starting to wonder what the design goal of RGBA32Buffer is?

Style:
 64 bool RGBA32Buffer::setSize(int new_width, int new_height)

Style:
 97 void RGBA32Buffer::setStatus(FrameStatus s)

s should really be an english word, like &quot;status&quot;

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125703</commentid>
    <comment_count>63</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 18:09:14 -0700</bug_when>
    <thetext>Fixed style nits and committed in r44661.

I don&apos;t know whether perhaps ImageBuffer and RGBA32Buffer could merge into one object.  I feel like now that things are unforked it&apos;s finally possible to consider broader architectural questions like &quot;how should image decoding actually work&quot;.  I have filed bug 26379 for that; interested parties that aren&apos;t already CCed there can feel free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125704</commentid>
    <comment_count>64</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 18:29:12 -0700</bug_when>
    <thetext>What to think about now:
     - When RGBA32Buffer is more than a buffer we should rename it
     - Where is the the conceptual difference between RGBA32Buffer and ImageBuffer?
     - All WX, Cairo, Skia ImageSource*.cpp can be deleted now
     - Why should a class called RGBA32Buffer know how to create a native image? Seems to be broken.
     - There are still #ifdef&apos;s left in ImageDecoder.h. There were not there before, all image-decoders where true cross-platform, I want than back.

Comments on the process:
     - I agreed on irc to continue as we are in between. But honestly do we want to continue with breaking existing concepts/implementations and get not well thought out things just to merge Skia/Chromium and maybe one day get back to a proper design?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125706</commentid>
    <comment_count>65</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 18:57:24 -0700</bug_when>
    <thetext>getAddr will not return anything for other ports (if called) and will silently fail which is bad...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125707</commentid>
    <comment_count>66</comment_count>
      <attachid>31247</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-13 18:59:42 -0700</bug_when>
    <thetext>Created attachment 31247
Do not silently cause crashes...

Not the final solution but go from something that silently will fail to an assert and a default return...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125710</commentid>
    <comment_count>67</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 19:19:49 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; Created an attachment (id=31247) [review]
&gt; Do not silently cause crashes...

Does this cause any crashes?  I didn&apos;t think Qt used this function or any of the functions that call this.

FWIW, this change is fine with me.  But I would sincerely like to know if it actually makes a difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125711</commentid>
    <comment_count>68</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 19:20:36 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt;      - When RGBA32Buffer is more than a buffer we should rename it

Right now I don&apos;t think it is more than a buffer, or at least the interface to a buffer.  (But I think we should rename it FrameBuffer anyway, as that would be clearer.)

&gt;      - Where is the the conceptual difference between RGBA32Buffer and
&gt; ImageBuffer?

This is one of the questions posed on bug 26379.  Patches to modify how things should work welcome there.  I don&apos;t understand ImageBuffer as well as I understand RGBA32Buffer so I don&apos;t think I have a good answer for you right now.  Perhaps there is none and they should be merged.

&gt;      - All WX, Cairo, Skia ImageSource*.cpp can be deleted now

Again, the merging of ImageSources is mentioned as a possibility on bug 26379.  I am not sure it&apos;s a slam dunk but probably we could go a long ways pretty easily.  It would definitely be nice to eliminate more code.

&gt;      - Why should a class called RGBA32Buffer know how to create a native
&gt; image? Seems to be broken.

Platforms need a way of getting at the platform-specific storage inside the buffer.  Because of the way that the entire image decoding/caching framework is written, platforms generally need to take ownership of some kind of pointer to the data the point where they read it out.  For efficiency, it is best to avoid copying during this process if possible (which is why both CG and Skia use refcounting objects for this).  Taken together, these constraints mean it&apos;s convenient and sensible to say that RGBA32Buffer, which may contain platform-specific storage, can return that storage as a NativeImagePtr, a type that platforms understand.  This doesn&apos;t bring knowledge of the specific storage types or copying mechanisms into the header.

If I understand your underlying concerns right, you&apos;d prefer that _all_ ports using this header store their data as a Vector&lt;unsigned&gt;.  But that imposes dramatic, and completely unnecessary, memory and speed costs on ports without gaining anything in return.  The implementation in the Cairo port that currently does this is, I think, inefficient compared to using a Cairo surface directly, and I&apos;ve discussed this briefly with Brent; this bug has made solving that inefficiency dramatically simpler as it modifies the ImageDecoders to be careful about how they ask that the data be stored and copied.

If I am missing a benefit here, I&apos;d like to know.  Even code readability does not seem hindered by this change -- I think anyone can agree that the current, shorter, more commented header, with functionality broken into small blocks that share cross-platform implementations where possible, is more readable than the original code, especially when the logic in the image decoders themselves is taken into account (compare the inner loop of the GIF decoder before and after this set of changes).

&gt;      - There are still #ifdef&apos;s left in ImageDecoder.h. There were not there
&gt; before, all image-decoders where true cross-platform, I want than back.

True, but I don&apos;t see why this is inherently problematic.  There are platform-specific #ifdefs all over the entire WebKit source tree in &quot;cross platform&quot; code where specific platforms have slightly different needs.  In this case the ifdefs could be reduced if we&apos;re willing to take an efficiency hit or are not trying to hoist more logic to ImageDecoder.h _to make life easier on implementers_.  However, generally WebKit frowns on things like virtual functions and inheritance, especially in speed-critical code, which this most certainly is.  I don&apos;t see good alternatives, but if you have some I&apos;m certainly happy to consider them.  This certainly seems better (to me) than simply dropping the parallel implementations of RGBA32Buffer and the image decoders into one source file and #ifdefing the entire thing, or having completely separate files that were nearly entirely copies of each other.

Honestly, I am a bit confused what your goal with this complaint is.  AFIAK the Qt port doesn&apos;t use the cross-platform decoders (yet) and also doesn&apos;t use most of ImageDecoder.h.  How is this design hurting Qt?  And if it is hurting something, can you propose a superior alternative, that doesn&apos;t sacrifice efficiency, readability, or compatibility with both Cairo and Skia?  Constructive criticism is useful, but without more details this complaint does not seem constructive.  And if the problem is not Qt but some sort of general principle, then perhaps the maintainers of the GTK, Cairo/Win, and Skia backends can have some input into that principle as well?

&gt; Comments on the process:
&gt;      - I agreed on irc to continue as we are in between. But honestly do we
&gt; want to continue with breaking existing concepts/implementations and get not
&gt; well thought out things just to merge Skia/Chromium and maybe one day get back
&gt; to a proper design?

I think this is begging the question.

Asserting that this is &quot;not well thought out&quot; and &quot;not a proper design&quot; ignores the fact that I spent quite a bit of my time discussing and designing things with various people before and during the progress on this bug.  From the beginning my motivations were to help, not hurt, other ports and to be a good WebKit citizen -- certainly there was no immediate, direct benefit to the Skia backend in this unforking.  Along the way I watched trees, checked in bustage fixes, and helped out when things went wrong.  The patches to fix Qt were extremely small (and even smaller in some cases after I consulted with people on IRC about the right ways to do them) and while I&apos;m certainly not perfect and did not always get things fixed instantly, until this morning no one had expressed any complaints about process.  Before you expressed your frustrations here you had not emailed me or contacted me on IRC expressing any of these concerns privately so I could help with them.  Nor did you contact my reviewer, or the Cairo port maintainer I was apparently working with.  I can understand that it&apos;s very frustrating when someone else breaks you, especially when you have limited time to work on WebKit -- look in my own early commit history for the number of times I tried to fix other peoples&apos; port bustage.  But please give me some credit in that I have tried to do my best at all times.  Certainly I was not aware that having things broken last night/this morning would significantly hinder anyone else&apos;s contributions, or I absolutely would not have landed things the way I did -- but I did make a good-faith effort to check on this before I landed it.

In summary, I am very receptive to concrete designs that take into account different platforms&apos; needs.  And I am downright eager to help the Qt port use the cross-platform decoders if you wish; I think the changes made in this bug make that significantly more feasible.  I think the most positive thing at this point would be for you to post patches on bug 26379 that move the design the direction you want to go, so the rest of the affected parties here can have precisely the sort of well-thought-out discussion process you want.  I hope that helps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125714</commentid>
    <comment_count>69</comment_count>
      <attachid>31250</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 20:14:31 -0700</bug_when>
    <thetext>Created attachment 31250
part eleven

Try to get wx working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125743</commentid>
    <comment_count>70</comment_count>
      <attachid>31252</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 23:21:44 -0700</bug_when>
    <thetext>Created attachment 31252
part eleven v2

Fixes some problems with the wx blind fix based on actual testing on wx.  Also fixes a silly Cairo build bustage introduced in part ten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125744</commentid>
    <comment_count>71</comment_count>
      <attachid>31253</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 23:30:23 -0700</bug_when>
    <thetext>Created attachment 31253
part eleven v3 (Landed r44669)

I neglected to update webcore-wx.bkl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125745</commentid>
    <comment_count>72</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-13 23:46:10 -0700</bug_when>
    <thetext>As far as I know everyone builds now, the wx and Cairo ports both have the option of moving to a more efficient storage mechanism, and everything is unforked.  And I included the patch to ASSERT if you run getAddr() on an unsupported platform.  So I think this can stay closed this time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126178</commentid>
    <comment_count>73</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-06-16 02:52:54 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; I&apos;ve applied and confirmed that the &quot;part seven, v3&quot; patch builds and works
&gt; perfectly on Windows Cairo.

Animated gif support is broken due this patch (according to git bisect and my manual testing). The problem seems to be at the end of one animation cycle, showing an empty (sometimes black) image...


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126212</commentid>
    <comment_count>74</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-16 09:42:14 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; Animated gif support is broken due this patch (according to git bisect and my
&gt; manual testing). The problem seems to be at the end of one animation cycle,
&gt; showing an empty (sometimes black) image...

Can you go ahead and file a new regression bug against me on this?  I will investigate today.

If you can provide the specific revision (from your git bisect testing) and tell me which platform(s) you know are affected, and provide the test image that fails, that&apos;ll help a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126224</commentid>
    <comment_count>75</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-06-16 10:33:54 -0700</bug_when>
    <thetext>I filed bug 26447 for comment 73.  More details there would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140240</commentid>
    <comment_count>76</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 08:52:48 -0700</bug_when>
    <thetext>&gt;RGBA32Buffer::m_height and all associated functions have
&gt;been removed (set but never used) and some places now rely on superclass
&gt;implementations.

RGBA32Buffer::m_height is very useful for JPEG images. When image decoding isn&apos;t finished, browser can display the partial image without showing black.

You probably do have this problem because ImageSource::frameHasAlphaAtIndex() is hacked and lies.

But RGBA32Buffer::m_height is a better solution, which tells how many scanlines are available, and this is used in our WINCE port. If hacking hasAlpha() is a must, it should be done in particular decoders, rather than in ImageSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140241</commentid>
    <comment_count>77</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-14 08:53:27 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; &gt;RGBA32Buffer::m_height and all associated functions have
&gt; &gt;been removed (set but never used) and some places now rely on superclass
&gt; &gt;implementations.
&gt; 
&gt; RGBA32Buffer::m_height is very useful for JPEG images. When image decoding
&gt; isn&apos;t finished, browser can display the partial image without showing black.
&gt; 
&gt; You probably do have this problem because ImageSource::frameHasAlphaAtIndex()
&gt; is hacked and lies.

oops, should &quot;do NOT have this problem&quot;, here

&gt; 
&gt; But RGBA32Buffer::m_height is a better solution, which tells how many scanlines
&gt; are available, and this is used in our WINCE port. If hacking hasAlpha() is a
&gt; must, it should be done in particular decoders, rather than in ImageSource.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30210</attachid>
            <date>2009-05-11 17:39:54 -0700</date>
            <delta_ts>2009-05-18 17:03:21 -0700</delta_ts>
            <desc>Part one - v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>110831</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MzUyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA5LTA1LTExICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU3MDkgcGFydCBvbmUK
KyAgICAgICAgTW9zdGx5IGNvc21ldGljIGNoYW5nZXMgdG8gZ2V0IGltYWdlIGRlY29kZXJzIGZv
ciBDYWlybyBidWlsZCB0bworICAgICAgICBjb21wbHkgd2l0aCBXZWJLaXQgc3R5bGUgZ3VpZGVs
aW5lcy4gIEEgZmV3IHNpbXBsZSBjaGFuZ2VzIChlLmcuCisgICAgICAgIG1fc2l6ZSAtPiBzaXpl
KCkpIHRvIG1hdGNoIFNraWEgY29kZSBiZXR0ZXIsIGZvciBlYXNpZXIgZGlmZmluZy4KKyAgICAg
ICAgU29tZSBmaXhlcyB0byBTa2lhIHN0eWxlIGFuZCByZW1vdmluZyB1bm5lY2Vzc2FyeSB2YXJp
YWJsZSBjaGVja3MuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpieXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVm
ZmVyOjpzdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpkdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmRpc3Bvc2FsTWV0aG9kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
UkdCQTMyQnVmZmVyOjpzZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
ZW5zdXJlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0RHVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXREaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6Oklt
YWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6On5JbWFnZURlY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpyZXBl
dGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c0Fs
cGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZmFpbGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpCTVBJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2RlclByaXZhdGU6OkdJRkltYWdlRGVjb2RlclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZTo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlclByaXZhdGU6OmdldENvbG9yTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OnByZXBFbXB0eUZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZpbGVu
YW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVE
dXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjopOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6
CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
SUNPSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzdXBwb3J0c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OkpQRUdJbWFnZURlY29kZXI6OnJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQ
TkdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJN
UEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJN
UEltYWdlUmVhZGVyOjopOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnJlYWRV
aW50MTYpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnJlYWRVaW50MzIpOgor
ICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmlzV2luZG93c1Y0UGx1cyk6CisgICAg
ICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cGFzdEVuZE9mSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnJlYWRDdXJyZW50UGl4ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmdldENvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZVJlYWRlcjo6Z2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFk
ZXI6OnNldEkpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnNldFJHQkEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmZpbGxSR0JBKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSUNPSW1hZ2VEZWNvZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OklDT0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
OjpJbWFnZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
SlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6
OkpQRUdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
UE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQ
TkdJbWFnZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OlBOR0lt
YWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpYQk1JbWFnZURlY29kZXI6On5YQk1JbWFnZURlY29kZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6WEJNSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpYQk1JbWFnZURlY29kZXI6Oik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6WEJNSW1hZ2VE
ZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisKIDIwMDktMDUtMTEgIERhdmlkIEtpbHplciAg
PGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWcgMjUwODc6IFRlc3QgZm9yIEVOQUJM
RV9GT08gbWFjcm9zIGNvbnNpc3RlbnRseSBpbiBJREwgZmlsZXMKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM1MDcp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIElNQUdFX0RFQ09ERVJfSF8KLSNkZWZpbmUgSU1BR0VfREVDT0RFUl9IXworI2lmbmRlZiBJ
bWFnZURlY29kZXJfaAorI2RlZmluZSBJbWFnZURlY29kZXJfaAogCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCkBAIC0zNCwxMzYgKzM0LDE0NSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkPiBSR0JBMzJBcnJh
eTsKKyAgICB0eXBlZGVmIFZlY3Rvcjx1bnNpZ25lZD4gUkdCQTMyQXJyYXk7CiAKLS8vIFRoZSBS
R0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBS
R0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwKLS8vIGRlY29kZXJzIHdyaXRl
IGEgc2luZ2xlIGZyYW1lIGludG8uICBGcmFtZXMgYXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBk
cmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlzIGJ1ZmZlci4KLWNsYXNzIFJHQkEzMkJ1ZmZlcgot
ewotcHVibGljOgotICAgIGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFtZVBhcnRp
YWwsIEZyYW1lQ29tcGxldGUgfTsKLSAgICBlbnVtIEZyYW1lRGlzcG9zYWxNZXRob2QgewotICAg
ICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFrZSBz
dXJlIHlvdSBhdWRpdCBhbGwKLSAgICAgICAgLy8gdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5IGNh
c3QgcmF3IHZhbHVlcyB0by9mcm9tIHRoZXNlIGNvbnN0YW50cy4KLSAgICAgICAgRGlzcG9zZU5v
dFNwZWNpZmllZCA9IDAsICAgICAgIC8vIExlYXZlIGZyYW1lIGluIGZyYW1lYnVmZmVyCi0gICAg
ICAgIERpc3Bvc2VLZWVwID0gMSwgICAgICAgICAgICAgICAvLyBMZWF2ZSBmcmFtZSBpbiBmcmFt
ZWJ1ZmZlcgotICAgICAgICBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciA9IDIsICAgLy8gQ2xlYXIg
ZnJhbWUgdG8gdHJhbnNwYXJlbnQKLSAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzID0g
MywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCi0gICAg
fTsKKyAgICAvLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVk
IGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCisg
ICAgLy8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBhcmUgdGhl
biBpbnN0YW50aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgor
ICAgIGNsYXNzIFJHQkEzMkJ1ZmZlciB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIEZyYW1l
U3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07CisKKyAg
ICAgICAgZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKKyAgICAgICAgICAgIC8vIElmIHlvdSBj
aGFuZ2UgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1cmUgeW91IGF1ZGl0IGFs
bAorICAgICAgICAgICAgLy8gdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5IGNhc3QgcmF3IHZhbHVl
cyB0by9mcm9tIHRoZXNlIGNvbnN0YW50cy4KKyAgICAgICAgICAgIERpc3Bvc2VOb3RTcGVjaWZp
ZWQsICAgICAgIC8vIExlYXZlIGZyYW1lIGluIGZyYW1lYnVmZmVyCisgICAgICAgICAgICBEaXNw
b3NlS2VlcCwgICAgICAgICAgICAgICAvLyBMZWF2ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAg
ICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJh
bnNwYXJlbnQKKyAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cywgIC8vIENsZWFy
IGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCisgICAgICAgIH07CisKKyAg
ICAgICAgUkdCQTMyQnVmZmVyKCkKKyAgICAgICAgICAgIDogbV9oZWlnaHQoMCkKKyAgICAgICAg
ICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkKKyAgICAgICAgICAgICwgbV9kdXJhdGlvbigwKQor
ICAgICAgICAgICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCisgICAg
ICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfSAKKworICAg
ICAgICB2b2lkIGNsZWFyKCkgeworICAgICAgICAgIG1fYnl0ZXMuY2xlYXIoKTsKKyAgICAgICAg
ICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CisgICAgICAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0
IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMKKyAgICAg
ICAgICAvLyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25z
IGxpa2UKKyAgICAgICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKSBhbmQgZnJhbWVDb21wbGV0ZSgp
IG1heSBzdGlsbCBuZWVkIHRvIHJlYWQgb3RoZXIKKyAgICAgICAgICAvLyBtZXRhZGF0YSBvdXQg
b2YgdGhpcyBmcmFtZSBsYXRlci4KKyAgICAgICAgfQogCi0gICAgUkdCQTMyQnVmZmVyKCkgOiBt
X2hlaWdodCgwKSwgbV9zdGF0dXMoRnJhbWVFbXB0eSksIG1fZHVyYXRpb24oMCksCi0gICAgICAg
ICAgICAgICAgICAgICBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpLCBtX2hh
c0FscGhhKGZhbHNlKQotICAgIHt9IAotCi0gICAgdm9pZCBjbGVhcigpIHsKLSAgICAgIG1fYnl0
ZXMuY2xlYXIoKTsKLSAgICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAgIC8vIE5PVEU6
IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgp
IGNhbGxzCi0gICAgICAvLyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIg
ZnVuY3Rpb25zIGxpa2UKLSAgICAgIC8vIGluaXRGcmFtZUJ1ZmZlcigpIGFuZCBmcmFtZUNvbXBs
ZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZCBvdGhlcgotICAgICAgLy8gbWV0YWRhdGEgb3V0
IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCi0gICAgfQotCi0gICAgY29uc3QgUkdCQTMyQXJyYXkmIGJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlczsgfQotICAgIFJHQkEzMkFycmF5JiBieXRlcygp
IHsgcmV0dXJuIG1fYnl0ZXM7IH0KLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9Ci0gICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9o
ZWlnaHQ7IH0KLSAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1
czsgfQotICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsg
fQotICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVy
biBtX2Rpc3Bvc2FsTWV0aG9kOyB9Ci0gICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQWxwaGE7IH0KLQotICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1f
cmVjdCA9IHI7IH0KLSAgICB2b2lkIGVuc3VyZUhlaWdodCh1bnNpZ25lZCByb3dJbmRleCkgeyBp
ZiAocm93SW5kZXggPiBtX2hlaWdodCkgbV9oZWlnaHQgPSByb3dJbmRleDsgfQotICAgIHZvaWQg
c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHMpIHsgbV9zdGF0dXMgPSBzOyB9Ci0gICAgdm9pZCBzZXRE
dXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KLSAg
ICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1f
ZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KLSAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxw
aGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRSR0JBKHVu
c2lnbmVkJiBwb3MsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCi0gICAgewotICAgICAgICAvLyBXZSBzdG9yZSB0aGlzIGRhdGEgcHJlLW11bHRpcGxpZWQu
Ci0gICAgICAgIGlmIChhID09IDApCi0gICAgICAgICAgICBwb3MgPSAwOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYWxw
aGFQZXJjZW50ID0gYSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICByID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHIgKiBhbHBoYVBlcmNlbnQpOwotICAgICAgICAgICAgICAgIGcgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZyAqIGFscGhhUGVyY2VudCk7Ci0gICAgICAgICAgICAgICAgYiA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihiICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgY29uc3QgUkdC
QTMyQXJyYXkmIGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlczsgfQorICAgICAgICBSR0JB
MzJBcnJheSYgYnl0ZXMoKSB7IHJldHVybiBtX2J5dGVzOyB9CisgICAgICAgIGNvbnN0IEludFJl
Y3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAgICAgdW5zaWduZWQgaGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICAgICAgRnJhbWVTdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICAgICAgdW5zaWduZWQgZHVyYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgICAgIEZyYW1lRGlzcG9zYWxN
ZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9
CisgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CisK
KyAgICAgICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZWN0ID0gcjsgfQor
ICAgICAgICB2b2lkIGVuc3VyZUhlaWdodCh1bnNpZ25lZCByb3dJbmRleCkgeyBpZiAocm93SW5k
ZXggPiBtX2hlaWdodCkgbV9oZWlnaHQgPSByb3dJbmRleDsgfQorICAgICAgICB2b2lkIHNldFN0
YXR1cyhGcmFtZVN0YXR1cyBzKSB7IG1fc3RhdHVzID0gczsgfQorICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAg
ICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7
IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KKyAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShi
b29sIGFscGhhKSB7IG1faGFzQWxwaGEgPSBhbHBoYTsgfQorCisgICAgICAgIHN0YXRpYyB2b2lk
IHNldFJHQkEodW5zaWduZWQmIHBvcywgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQg
YiwgdW5zaWduZWQgYSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2Ugc3RvcmUgdGhpcyBk
YXRhIHByZS1tdWx0aXBsaWVkLgorICAgICAgICAgICAgaWYgKGEgPT0gMCkKKyAgICAgICAgICAg
ICAgICBwb3MgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGEg
PCAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGFQZXJjZW50ID0gYSAvIDI1
NS4wZjsKKyAgICAgICAgICAgICAgICAgICAgciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyICog
YWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZyA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihnICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYiA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihiICogYWxwaGFQZXJjZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcG9zID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBwb3MgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDgg
fCBiKTsKICAgICAgICAgfQotICAgIH0KIAotcHJpdmF0ZToKLSAgICBSR0JBMzJBcnJheSBtX2J5
dGVzOwotICAgIEludFJlY3QgbV9yZWN0OyAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwg
c3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUgb3ZlcmFsbCBidWZmZXIuCi0gICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBl
eGNlcHQgZm9yIEdJRiBmcmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3Jp
Z2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCi0gICAg
dW5zaWduZWQgbV9oZWlnaHQ7IC8vIFRoZSBoZWlnaHQgKHRoZSBudW1iZXIgb2Ygcm93cyB3ZSd2
ZSBmdWxseSBkZWNvZGVkKS4KLSAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBv
ciBub3QgdGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5IGZpbmlzaGVkIGRlY29kaW5nLgotICAgIHVu
c2lnbmVkIG1fZHVyYXRpb247IC8vIFRoZSBhbmltYXRpb24gZGVsYXkuCi0gICAgRnJhbWVEaXNw
b3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFt
ZSdzIGRhdGEgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCi0gICAgYm9vbCBtX2hh
c0FscGhhOyAvLyBXaGV0aGVyIG9yIG5vdCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVy
IGhhdmUgdHJhbnNwYXJlbmN5LgotfTsKLQotLy8gVGhlIEltYWdlRGVjb2RlciBjbGFzcyByZXBy
ZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0IGRlY29kZXJzCi0v
LyAoZS5nLiwgR0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVy
cyBkZWNvZGUgaW50byBSR0JBMzIgZm9ybWF0Ci0vLyBhbmQgdGhlIGJhc2UgY2xhc3MgbWFuYWdl
cyB0aGUgUkdCQTMyIGZyYW1lIGNhY2hlLgotY2xhc3MgSW1hZ2VEZWNvZGVyCi17Ci1wdWJsaWM6
Ci0gICAgSW1hZ2VEZWNvZGVyKCkgOm1fc2l6ZUF2YWlsYWJsZShmYWxzZSksIG1fZmFpbGVkKGZh
bHNlKSB7fQotICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlcigpIHt9Ci0KLSAgICAvLyBUaGUgdGhl
IGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRlY29kZWQg
aW1hZ2Ugb2YgdGhpcyB0eXBlLgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3QgPSAwOwotCi0gICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIgcGx1Z2lucyBtdXN0
IGRvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgotICAgIHZpcnR1YWwg
dm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsg
bV9kYXRhID0gZGF0YTsgfQotCi0gICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3Jt
YXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCi0gICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIGNvbnN0ID0gMDsKLQotICAgIC8vIFJlcXVlc3RzIHRoZSBzaXplLgotICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICAvLyBUaGUg
dG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgQ2xhc3NlcyB0aGF0IHN1cHBv
cnQgbXVsdGlwbGUgZnJhbWVzCi0gICAgLy8gd2lsbCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZvciB0
aGUgYW5zd2VyIGlmIHRoZXkgbmVlZCB0byAod2l0aG91dCBuZWNlc3NhcmlseQotICAgIC8vIGRl
Y29kaW5nIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgotICAgIHZpcnR1YWwgaW50IGZy
YW1lQ291bnQoKSB7IHJldHVybiAxOyB9Ci0KLSAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRp
b25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgotICAgIHZpcnR1YWwgaW50IHJl
cGV0aXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGNBbmltYXRpb25Ob25lOyB9Ci0KLSAgICAv
LyBDYWxsZWQgdG8gb2J0YWluIHRoZSBSR0JBMzJCdWZmZXIgZnVsbCBvZiBkZWNvZGVkIGRhdGEg
Zm9yIHJlbmRlcmluZy4gIFRoZQotICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFz
IG11Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZwotICAgIC8vIGJhY2sg
dGhlIGJ1ZmZlci4KLSAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCkgPSAwOwotCi0gICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVuZGVybHlp
bmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
Ym9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQotICAgIHZvaWQgc2V0RmFp
bGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7IH0KLQotICAgIC8vIFdpcGUgb3V0IGZyYW1lcyBpbiB0
aGUgZnJhbWUgYnVmZmVyIGNhY2hlIGJlZm9yZSB8Y2xlYXJCZWZvcmVGcmFtZXwsCi0gICAgLy8g
YXNzdW1pbmcgdGhpcyBjYW4gYmUgZG9uZSB3aXRob3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlm
ZmVyZW50IGRlY29kZXJzCi0gICAgLy8gcGxhY2UgZGlmZmVyZW50IHJlc3RyaWN0aW9ucyBvbiB3
aGF0IGZyYW1lcyBhcmUgc2FmZSB0byBkZXN0cm95LCBzbyB0aGlzCi0gICAgLy8gaXMgbGVmdCB0
byB0aGVtIHRvIGltcGxlbWVudC4KLSAgICAvLyBGb3IgY29udmVuaWVuY2UncyBzYWtlLCB3ZSBw
cm92aWRlIGEgZGVmYXVsdCAoZW1wdHkpIGltcGxlbWVudGF0aW9uLAotICAgIC8vIHNpbmNlIGlu
IHByYWN0aWNlIG9ubHkgR0lGcyB3aWxsIGV2ZXIgdXNlIHRoaXMuCi0gICAgdmlydHVhbCB2b2lk
IGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkgeyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVk
IGRhdGEuCi0gICAgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZlckNhY2hlOwotICAg
IGJvb2wgbV9zaXplQXZhaWxhYmxlOwotICAgIG11dGFibGUgYm9vbCBtX2ZhaWxlZDsKLSAgICBJ
bnRTaXplIG1fc2l6ZTsKLX07CisgICAgcHJpdmF0ZToKKyAgICAgICAgUkdCQTMyQXJyYXkgbV9i
eXRlczsKKyAgICAgICAgSW50UmVjdCBtX3JlY3Q7ICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmln
aW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluIHRoZSBvdmVyYWxsIGJ1ZmZlci4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJl
IGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFn
ZSBzaXplLgorICAgICAgICB1bnNpZ25lZCBtX2hlaWdodDsgLy8gVGhlIGhlaWdodCAodGhlIG51
bWJlciBvZiByb3dzIHdlJ3ZlIGZ1bGx5IGRlY29kZWQpLgorICAgICAgICBGcmFtZVN0YXR1cyBt
X3N0YXR1czsgLy8gV2hldGhlciBvciBub3QgdGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5IGZpbmlz
aGVkIGRlY29kaW5nLgorICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAvLyBUaGUgYW5pbWF0
aW9uIGRlbGF5LgorICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7
IC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0
aGUgbmV4dCBmcmFtZS4KKyAgICAgICAgYm9vbCBtX2hhc0FscGhhOyAvLyBXaGV0aGVyIG9yIG5v
dCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVyIGhhdmUgdHJhbnNwYXJlbmN5LgorICAg
IH07CisKKyAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNlIGNs
YXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKKyAgICAvLyAoZS5nLiwgR0lG
LCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNvZGUgaW50
byBSR0JBMzIgZm9ybWF0CisgICAgLy8gYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhlIFJH
QkEzMiBmcmFtZSBjYWNoZS4KKyAgICBjbGFzcyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgICAgIDogbV9zaXplQXZhaWxhYmxlKGZh
bHNlKQorICAgICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQorCisgICAgICAg
IC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFu
IHVuZGVjb2RlZCBpbWFnZSBvZiB0aGlzIHR5cGUuCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgPSAwOworCisgICAgICAgIC8vIEFsbCBzcGVjaWZpYyBk
ZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YSB0aGV5IGFyZSBn
aXZlbi4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkgeyBtX2RhdGEgPSBkYXRhOyB9CisKKyAgICAgICAgLy8gV2hl
dGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdCA9IDA7CisKKyAgICAg
ICAgLy8gUmVxdWVzdHMgdGhlIHNpemUuCisgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICAgICAgLy8gVGhlIHRvdGFsIG51bWJlciBv
ZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGZy
YW1lcworICAgICAgICAvLyB3aWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIg
aWYgdGhleSBuZWVkIHRvICh3aXRob3V0IG5lY2Vzc2FyaWx5CisgICAgICAgIC8vIGRlY29kaW5n
IGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgorICAgICAgICB2aXJ0dWFsIGludCBmcmFt
ZUNvdW50KCkgeyByZXR1cm4gMTsgfQorCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRp
dGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCisgICAgICAgIHZpcnR1YWwg
aW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGNBbmltYXRpb25Ob25lOyB9CisK
KyAgICAgICAgLy8gQ2FsbGVkIHRvIG9idGFpbiB0aGUgUkdCQTMyQnVmZmVyIGZ1bGwgb2YgZGVj
b2RlZCBkYXRhIGZvciByZW5kZXJpbmcuICBUaGUKKyAgICAgICAgLy8gZGVjb2RlciBwbHVnaW4g
d2lsbCBkZWNvZGUgYXMgbXVjaCBvZiB0aGUgZnJhbWUgYXMgaXQgY2FuIGJlZm9yZSBoYW5kaW5n
CisgICAgICAgIC8vIGJhY2sgdGhlIGJ1ZmZlci4KKyAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZm
ZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpID0gMDsKKworICAgICAgICAvLyBX
aGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBzdXBwb3J0cyBh
bHBoYSB0cmFuc3BhcmVuY3kuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9mYWlsZWQ7IH0KKyAgICAgICAgdm9pZCBzZXRGYWlsZWQoKSB7IG1fZmFpbGVkID0g
dHJ1ZTsgfQorCisgICAgICAgIC8vIFdpcGUgb3V0IGZyYW1lcyBpbiB0aGUgZnJhbWUgYnVmZmVy
IGNhY2hlIGJlZm9yZSB8Y2xlYXJCZWZvcmVGcmFtZXwsCisgICAgICAgIC8vIGFzc3VtaW5nIHRo
aXMgY2FuIGJlIGRvbmUgd2l0aG91dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZlcmVudCBkZWNv
ZGVycworICAgICAgICAvLyBwbGFjZSBkaWZmZXJlbnQgcmVzdHJpY3Rpb25zIG9uIHdoYXQgZnJh
bWVzIGFyZSBzYWZlIHRvIGRlc3Ryb3ksIHNvIHRoaXMKKyAgICAgICAgLy8gaXMgbGVmdCB0byB0
aGVtIHRvIGltcGxlbWVudC4KKyAgICAgICAgLy8gRm9yIGNvbnZlbmllbmNlJ3Mgc2FrZSwgd2Ug
cHJvdmlkZSBhIGRlZmF1bHQgKGVtcHR5KSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgLy8gc2lu
Y2UgaW4gcHJhY3RpY2Ugb25seSBHSUZzIHdpbGwgZXZlciB1c2UgdGhpcy4KKyAgICAgICAgdmly
dHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkg
eyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0
YTsgLy8gVGhlIGVuY29kZWQgZGF0YS4KKyAgICAgICAgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4gbV9m
cmFtZUJ1ZmZlckNhY2hlOworICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZTsKKyAgICAgICAg
bXV0YWJsZSBib29sIG1fZmFpbGVkOworICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB9Owog
Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA0MzUwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKIAotI2lmIFBM
QVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlCiB7CiAKQEAgLTQxLDYgKzM5LDQgQEAgUkdCQTMyQnVmZmVyKiBCTVBJbWFnZURl
Y29kZXI6OmZyYW1lQnVmZgogICAgIHJldHVybiAwOwogfQogCi19Ci0KLSNlbmRpZiAvLyBQTEFU
Rk9STShDQUlSTykKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiA0MzUwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNyArMjMsMjYgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgQk1QX0RFQ09ERVJfSF8KLSNkZWZpbmUgQk1QX0RFQ09E
RVJfSF8KKyNpZm5kZWYgQk1QSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgQk1QSW1hZ2VEZWNvZGVy
X2gKIAogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIEJNUEltYWdlUmVhZGVyOworICAgIGNsYXNzIEJNUEltYWdlUmVhZGVyOwogCi0vLyBU
aGlzIGNsYXNzIGRlY29kZXMgdGhlIEJNUCBpbWFnZSBmb3JtYXQuCi1jbGFzcyBCTVBJbWFnZURl
Y29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiYm1wIjsgfQorICAgIC8vIFRo
aXMgY2xhc3MgZGVjb2RlcyB0aGUgQk1QIGltYWdlIGZvcm1hdC4KKyAgICBjbGFzcyBCTVBJbWFn
ZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImJtcCI7IH0K
IAotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRl
Y29kZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAg
ICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVj
b2RlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KTsKLX07CisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KTsKKyAgICB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0MzUwNykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDE3ICsyNywxNCBAQAogI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIkdJRkltYWdlUmVhZGVyLmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEdJRkltYWdlRGVjb2RlclByaXZhdGUKLXsKK2NsYXNzIEdJRkltYWdlRGVjb2RlclByaXZhdGUg
ewogcHVibGljOgogICAgIEdJRkltYWdlRGVjb2RlclByaXZhdGUoR0lGSW1hZ2VEZWNvZGVyKiBk
ZWNvZGVyID0gMCkKICAgICAgICAgOiBtX3JlYWRlcihkZWNvZGVyKQorICAgICAgICAsIG1fcmVh
ZE9mZnNldCgwKQogICAgIHsKLSAgICAgICAgbV9yZWFkT2Zmc2V0ID0gMDsKICAgICB9CiAKICAg
ICB+R0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSgpCkBAIC00NSwxMSArNDIsMTEgQEAgcHVibGljOgog
ICAgICAgICBtX3JlYWRlci5jbG9zZSgpOwogICAgIH0KIAotICAgIGJvb2wgZGVjb2RlKGNvbnN0
IFZlY3RvcjxjaGFyPiYgZGF0YSwgCisgICAgYm9vbCBkZWNvZGUoU2hhcmVkQnVmZmVyKiBkYXRh
LCAKICAgICAgICAgICAgICAgICBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0gR0lG
SW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGhhbHRGcmFtZSA9IC0xKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVhZGVyLnJlYWQoKGNv
bnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBkYXRhLnNpemUo
KSAtIG1fcmVhZE9mZnNldCwgCisgICAgICAgIHJldHVybiBtX3JlYWRlci5yZWFkKChjb25zdCB1
bnNpZ25lZCBjaGFyKilkYXRhLT5kYXRhKCkgKyBtX3JlYWRPZmZzZXQsIGRhdGEtPnNpemUoKSAt
IG1fcmVhZE9mZnNldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoYWx0RnJhbWUpOwogICAgIH0KQEAgLTYxLDcgKzU4
LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4g
bV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudDsgfQogCi0gICAgdm9pZCBnZXRD
b2xvck1hcCh1bnNpZ25lZCBjaGFyKiYgbWFwLCB1bnNpZ25lZCYgc2l6ZSkgY29uc3QgeworICAg
IHZvaWQgZ2V0Q29sb3JNYXAodW5zaWduZWQgY2hhciomIG1hcCwgdW5zaWduZWQmIHNpemUpIGNv
bnN0CisgICAgewogICAgICAgICBpZiAobV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9j
b2xvcm1hcF9kZWZpbmVkKSB7CiAgICAgICAgICAgICBtYXAgPSBtX3JlYWRlci5mcmFtZV9yZWFk
ZXItPmxvY2FsX2NvbG9ybWFwOwogICAgICAgICAgICAgc2l6ZSA9ICh1bnNpZ25lZCltX3JlYWRl
ci5mcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwX3NpemU7CkBAIC04Niw4ICs4NCwxMSBAQCBw
cml2YXRlOgogfTsKIAogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoKQotOiBtX2Zy
YW1lQ291bnRWYWxpZCh0cnVlKSwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbkxvb3BPbmNl
KSwgbV9yZWFkZXIoMCkKLXt9CisgICAgOiBtX2ZyYW1lQ291bnRWYWxpZCh0cnVlKQorICAgICwg
bV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbkxvb3BPbmNlKQorICAgICwgbV9yZWFkZXIoMCkK
K3sKK30KIAogR0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVyKCkKIHsKQEAgLTEzOSw3
ICsxNDAsMTAgQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgICAgIC8v
IHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGNyYXdsIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhh
dCB0aGlzIGlzIG5vIHdvcnNlIHRoYW4gd2hhdAogICAgICAgICAvLyBJbWFnZUlPIGRvZXMgb24g
TWFjIHJpZ2h0IG5vdyAoaXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KICAgICAg
ICAgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSByZWFkZXI7Ci0gICAgICAgIHJlYWRlci5kZWNvZGUo
bV9kYXRhLT5idWZmZXIoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5KTsKKyAgICAgICAgLy8gVGhpcyBm
dW5jdGlvbiBtYXkgZmFpbCwgYnV0IHdlIHdhbnQgdG8ga2VlcCBhbnkgcGFydGlhbCBkYXRhIGl0
IG1heQorICAgICAgICAvLyBoYXZlIGRlY29kZWQsIHNvIGRvbid0IG1hcmsgaXQgaXMgaW52YWxp
ZC4gSWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3cKKyAgICAgICAgLy8gb3Igc29tZSBzZXJpb3VzIGVy
cm9yLCBtX2ZhaWxlZCB3aWxsIGhhdmUgZ290dGVuIHNldCBmb3IgdXMuCisgICAgICAgIHJlYWRl
ci5kZWNvZGUobV9kYXRhLmdldCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwogICAgICAgICBtX2Zy
YW1lQ291bnRWYWxpZCA9IHRydWU7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUo
cmVhZGVyLmZyYW1lQ291bnQoKSk7CiAgICAgfQpAQCAtMTczLDEzICsxNzcsMTIgQEAgaW50IEdJ
RkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgYwogCiBSR0JBMzJCdWZmZXIqIEdJRklt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAo
aW5kZXggPj0gZnJhbWVDb3VudCgpKQorICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGZyYW1lQ291bnQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUkdCQTMyQnVmZmVy
JiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKGZyYW1lLnN0YXR1
cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAgICAg
Ly8gRGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgICAgIGRlY29kZShHSUZGdWxsUXVlcnksIGluZGV4
KzEpOworICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCsxKTsgLy8gRGVjb2RlIHRo
aXMgZnJhbWUuCiAgICAgcmV0dXJuICZmcmFtZTsKIH0KIApAQCAtMjM5LDcgKzI0Miw3IEBAIHZv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVlcnkgcXUKICAgICBpZiAobV9mYWlsZWQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9k
YXRhLT5idWZmZXIoKSwgcXVlcnksIGhhbHRBdEZyYW1lKTsKKyAgICBtX2ZhaWxlZCA9ICFtX3Jl
YWRlci0+ZGVjb2RlKG1fZGF0YS5nZXQoKSwgcXVlcnksIGhhbHRBdEZyYW1lKTsKICAgICAKICAg
ICBpZiAobV9mYWlsZWQpIHsKICAgICAgICAgZGVsZXRlIG1fcmVhZGVyOwpAQCAtMjY2LDEwICsy
NjksMTAgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAg
ICAgICAgICAgICAgICAgIG1fcmVhZGVyLT5mcmFtZVdpZHRoKCksIG1fcmVhZGVyLT5mcmFtZUhl
aWdodCgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5k
IHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgYnVmZmVyLgotICAgIGlmIChmcmFtZVJlY3Qu
cmlnaHQoKSA+IG1fc2l6ZS53aWR0aCgpKQotICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgobV9z
aXplLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCkpOwotICAgIGlmIChmcmFtZVJl
Y3QuYm90dG9tKCkgPiBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWln
aHQobV9zaXplLmhlaWdodCgpIC0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpKTsKKyAgICBpZiAo
ZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNl
dFdpZHRoKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKKyAgICBp
ZiAoZnJhbWVSZWN0LmJvdHRvbSgpID4gc2l6ZSgpLmhlaWdodCgpKQorICAgICAgICBmcmFtZVJl
Y3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSk7
CiAKICAgICBSR0JBMzJCdWZmZXIqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVb
ZnJhbWVJbmRleF07CiAgICAgYnVmZmVyLT5zZXRSZWN0KGZyYW1lUmVjdCk7CkBAIC0yODcsMTQg
KzI5MCwxNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAg
ICAgIC8vIGZpcnN0IGZyYW1lIHNwZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJl
YXRlZCBsaWtlCiAgICAgICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCBy
ZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuKQogICAgICAgICBjb25zdCBSR0JBMzJC
dWZmZXIqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0g
ICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGUpOwogICAgICAgICBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgcHJl
dk1ldGhvZCA9CiAgICAgICAgICAgICBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwotICAg
ICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKSAmJgotICAgICAgICAgICAgICAgIChwcmV2TWV0
aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkgeworICAgICAg
ICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQorICAgICAgICAgICAgICAgJiYgKHByZXZNZXRob2Qg
PT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7CiAgICAgICAgICAg
ICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAg
ICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVDb21wbGV0ZSk7CiAKICAgICAgICAgaWYgKChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZl
cjo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwKICAgICAgICAgICAgICAgICAocHJldk1ldGhvZCA9
PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSkgewpAQCAtMzA1LDggKzMwOCw4IEBAIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgICAgIC8vIFdlIHdh
bnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAg
ICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRo
ZSBmcmFtZS4KICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZl
ci0+cmVjdCgpOwotICAgICAgICAgICAgaWYgKChmcmFtZUluZGV4ID09IDApIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1f
c2l6ZSkpKSB7CisgICAgICAgICAgICBpZiAoKGZyYW1lSW5kZXggPT0gMCkKKyAgICAgICAgICAg
ICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkp
KSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBm
cmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVz
dWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCiAgICAgICAgICAgICAgICAgcHJlcEVt
cHR5RnJhbWVCdWZmZXIoYnVmZmVyKTsKQEAgLTMyMSw3ICszMjQsNyBAQCB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
LT5zZXRSR0JBKCooY3VycmVudFJvdyArIHgpLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAwKSAmJiAocHJldlJlY3Qu
aGVpZ2h0KCkgPiAwKSkKLSAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUp
OworICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzNSw3ICszMzgsNyBAQCB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpwcmVw
RW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZmZXIqIGJ1ZmZlcikgY29uc3QKIHsKLSAgICBidWZm
ZXItPmJ5dGVzKCkucmVzaXplKG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpKTsKKyAg
ICBidWZmZXItPmJ5dGVzKCkucmVzaXplKHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgp
KTsKICAgICBidWZmZXItPmJ5dGVzKCkuZmlsbCgwKTsKICAgICBidWZmZXItPnNldEhhc0FscGhh
KHRydWUpOwogfQpAQCAtMzUzLDggKzM1Niw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZl
RGVjb2RlZFJvdyh1bnMKICAgICAgICAgaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpOwogCiAg
ICAgLy8gRG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KLSAgICBpZiAocm93QnVmZmVyID09IDAg
fHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIp
ID49IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgIHJldHVybjsKKyAgICBpZiAocm93QnVmZmVyID09
IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1i
ZXIpID49IHNpemUoKS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQg
Y29sb3JNYXBTaXplOwogICAgIHVuc2lnbmVkIGNoYXIqIGNvbG9yTWFwOwpAQCAtMzY5LDEyICsz
NzIsMTIgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVucwogICAgIC8v
IHdpdGhpbiB0aGUgb3ZlcmFsbCBpbWFnZS4gIFRoZSByb3dzIHdlIGFyZSBkZWNvZGluZyBhcmUg
d2l0aGluIHRoaXMKICAgICAvLyBzdWItcmVjdGFuZ2xlLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRo
ZSBHSUYgZnJhbWUncyBzdWItcmVjdGFuZ2xlIGlzICh4LHksdyxoKSB0aGVuIHJvdyAwIGlzIHJl
YWxseSByb3cKICAgICAvLyB5LCBhbmQgZWFjaCByb3cgZ29lcyBmcm9tIHggdG8geCt3LgotICAg
IHVuc2lnbmVkIGRzdFBvcyA9IChtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIp
ICogbV9zaXplLndpZHRoKCkgKyBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7CisgICAgdW5zaWdu
ZWQgZHN0UG9zID0gKG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSArIHJvd051bWJlcikgKiBzaXpl
KCkud2lkdGgoKSArIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKICAgICB1bnNpZ25lZCogZHN0
ID0gYnVmZmVyLmJ5dGVzKCkuZGF0YSgpICsgZHN0UG9zOwotICAgIHVuc2lnbmVkKiBkc3RFbmQg
PSBkc3QgKyBtX3NpemUud2lkdGgoKSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKKyAgICB1
bnNpZ25lZCogZHN0RW5kID0gZHN0ICsgc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVY
T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQqIGN1cnJEc3QgPSBkc3Q7CiAgICAgdW5zaWduZWQgY2hh
ciogY3VycmVudFJvd0J5dGUgPSByb3dCdWZmZXI7Ci0gICAgCisKICAgICB3aGlsZSAoY3VycmVu
dFJvd0J5dGUgIT0gcm93RW5kICYmIGN1cnJEc3QgPCBkc3RFbmQpIHsKICAgICAgICAgaWYgKCgh
bV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAqY3VycmVudFJvd0J5dGUgIT0gbV9yZWFkZXIt
PnRyYW5zcGFyZW50UGl4ZWwoKSkgJiYgKmN1cnJlbnRSb3dCeXRlIDwgY29sb3JNYXBTaXplKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckluZGV4ID0gKmN1cnJlbnRSb3dCeXRlICogMzsK
QEAgLTQwMSwxNCArNDA0LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJv
dyh1bnMKICAgICBpZiAocmVwZWF0Q291bnQgPiAxKSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJv
dyB8cmVwZWF0Q291bnR8LTEgdGltZXMuCiAgICAgICAgIHVuc2lnbmVkIG51bSA9IGN1cnJEc3Qg
LSBkc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOwot
ICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB1bnNpZ25l
ZCogZW5kID0gYnVmZmVyLmJ5dGVzKCkuZGF0YSgpICsgd2lkdGggKiBtX3NpemUuaGVpZ2h0KCk7
CisgICAgICAgIHVuc2lnbmVkIGRhdGFfc2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7Cisg
ICAgICAgIHVuc2lnbmVkIHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7CisgICAgICAgIHVuc2lnbmVk
KiBlbmQgPSBidWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyB3aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsK
ICAgICAgICAgY3VyckRzdCA9IGRzdCArIHdpZHRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykgewogICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBu
dW0gPiBlbmQpIC8vIFByb3RlY3QgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1
cyByZXBlYXRDb3VudC4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1lbWNw
eShjdXJyRHN0LCBkc3QsIHNpemUpOworICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwg
ZGF0YV9zaXplKTsKICAgICAgICAgICAgIGN1cnJEc3QgKz0gd2lkdGg7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00MzQsOSArNDM3LDkgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUodW5zaQogICAgIGlmICghbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEpIHsKICAgICAgICAgLy8g
VGhlIHdob2xlIGZyYW1lIHdhcyBub24tdHJhbnNwYXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhh
dCB0aGUgZW50aXJlCiAgICAgICAgIC8vIHJlc3VsdGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3Bh
cmVudCwgYW5kIHdlIGNhbiBzZXRIYXNBbHBoYShmYWxzZSkuCi0gICAgICAgIGlmIChidWZmZXIu
cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSkpKSB7CisgICAg
ICAgIGlmIChidWZmZXIucmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNp
emUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKLSAgICAgICAg
fSBlbHNlIGlmIChmcmFtZUluZGV4ID4gMCkgeworICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4
ID4gMCkgewogICAgICAgICAgICAgLy8gVHJpY2t5IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90
IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJlCiAgICAgICAgICAgICAvLyBvdXRzaWRlIGl0
cyByZWN0IGRvZXNuJ3QgaGF2ZSBhbHBoYS4gIFRvIGtub3cgd2hldGhlciB0aGlzIGlzCiAgICAg
ICAgICAgICAvLyB0cnVlLCB3ZSBjaGVjayB0aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0t
IGlmIGl0IGRvZXNuJ3QgaGF2ZQpAQCAtNDQ2LDkgKzQ0OSw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAgICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUg
c3RhcnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkgdGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAg
ICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKS4KICAgICAgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZl
ciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAg
ICAgICAgIHdoaWxlICgoZnJhbWVJbmRleCA+IDApICYmCi0gICAgICAgICAgICAgICAgICAgIChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
R0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpCisgICAgICAgICAgICB3aGls
ZSAoKGZyYW1lSW5kZXggPiAwKQorICAgICAgICAgICAgICAgICAgICYmIChwcmV2QnVmZmVyLT5k
aXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3Vz
KSkKICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZy
YW1lSW5kZXhdOwogCiAgICAgICAgICAgICAvLyBOb3csIGlmIHdlJ3JlIGF0IGEgRGlzcG9zZU5v
dFNwZWNpZmllZCBvciBEaXNwb3NlS2VlcCBmcmFtZSwgdGhlbgpAQCAtNDU5LDEwICs0NjEsOCBA
QCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAv
LyBUaGUgb25seSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZy
YW1lLiAgSWYKICAgICAgICAgICAgIC8vIGl0IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0IGlz
IGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBmcmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0LCB3
ZSBrbm93IHRoZSBjdXJyZW50IGZyYW1lIGhhcyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlmICgo
cHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PQotICAgICAgICAgICAgICAgICAgICBSR0JB
MzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJgotICAgICAgICAgICAgICAgICAg
ICAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJgotICAgICAgICAgICAgICAgICAgICBidWZmZXIu
cmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3QoKSkpCisgICAgICAgICAgICBpZiAoKHBy
ZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3Zlcndy
aXRlQmdjb2xvcikKKyAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAm
JiBidWZmZXIucmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3QoKSkpCiAgICAgICAgICAg
ICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3
Niw2ICs0NzYsNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQogICAgIG1f
cmVhZGVyID0gMDsKIH0KIAotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNzAgKzIzLDY5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIEdJRl9ERUNPREVSX0hfCi0jZGVmaW5lIEdJRl9ERUNPREVSX0hfCisjaWZuZGVmIEdJRklt
YWdlRGVjb2Rlcl9oCisjZGVmaW5lIEdJRkltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFn
ZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHSUZJbWFnZURlY29k
ZXJQcml2YXRlOworICAgIGNsYXNzIEdJRkltYWdlRGVjb2RlclByaXZhdGU7CiAKLS8vIFRoaXMg
Y2xhc3MgZGVjb2RlcyB0aGUgR0lGIGltYWdlIGZvcm1hdC4KLWNsYXNzIEdJRkltYWdlRGVjb2Rl
ciA6IHB1YmxpYyBJbWFnZURlY29kZXIKLXsKLXB1YmxpYzoKLSAgICBHSUZJbWFnZURlY29kZXIo
KTsKLSAgICB+R0lGSW1hZ2VEZWNvZGVyKCk7CisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRo
ZSBHSUYgaW1hZ2UgZm9ybWF0LgorICAgIGNsYXNzIEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJ
bWFnZURlY29kZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgR0lGSW1hZ2VEZWNvZGVyKCk7Cisg
ICAgICAgIH5HSUZJbWFnZURlY29kZXIoKTsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1l
RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImdpZiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiZ2lmIjsgfQogCi0gICAgLy8g
VGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIC8vIFRha2Ug
dGhlIGRhdGEgYW5kIHN0b3JlIGl0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAotICAgIC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgIHZp
cnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAgICAgLy8gV2hldGhlciBv
ciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKIAotICAgIC8vIFRoZSB0b3Rh
bCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBXaWxsIHNjYW4gdGhlIGltYWdlIGRh
dGEgZm9yIHRoZSBhbnN3ZXIKLSAgICAvLyAod2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBh
bGwgb2YgdGhlIGluZGl2aWR1YWwgZnJhbWVzKS4KLSAgICB2aXJ0dWFsIGludCBmcmFtZUNvdW50
KCk7CisgICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2Uu
ICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIKKyAgICAgICAgLy8gKHdp
dGhvdXQgbmVjZXNzYXJpbHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcyku
CisgICAgICAgIHZpcnR1YWwgaW50IGZyYW1lQ291bnQoKTsKIAotICAgIC8vIFRoZSBudW1iZXIg
b2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCi0gICAgdmly
dHVhbCBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CisgICAgICAgIC8vIFRoZSBudW1iZXIg
b2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCisgICAgICAg
IHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSR0JB
MzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0
dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZy
YW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3Qg
Y2xlYXJCZWZvcmVGcmFtZSk7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gMDsgfQorICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gMDsgfQogCi0g
ICAgZW51bSBHSUZRdWVyeSB7IEdJRkZ1bGxRdWVyeSwgR0lGU2l6ZVF1ZXJ5LCBHSUZGcmFtZUNv
dW50UXVlcnkgfTsKKyAgICAgICAgZW51bSBHSUZRdWVyeSB7IEdJRkZ1bGxRdWVyeSwgR0lGU2l6
ZVF1ZXJ5LCBHSUZGcmFtZUNvdW50UXVlcnkgfTsKIAotICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5
IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkgY29uc3Q7CisgICAgICAgIHZvaWQgZGVjb2Rl
KEdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkgY29uc3Q7CiAKLSAgICAvLyBDYWxsYmFj
a3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLSAgICB2b2lkIHNpemVOb3dBdmFpbGFibGUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0gICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNp
Z25lZCBieXRlc0xlZnQpOwotICAgIHZvaWQgaGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVu
c2lnbmVkIHJvd051bWJlciwgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXBl
YXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsKLSAgICB2b2lkIGZyYW1lQ29t
cGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMy
QnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKLSAgICB2b2lkIGdp
ZkNvbXBsZXRlKCk7CisgICAgICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgor
ICAgICAgICB2b2lkIHNpemVOb3dBdmFpbGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCk7CisgICAgICAgIHZvaWQgZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsK
KyAgICAgICAgdm9pZCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25l
ZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVt
YmVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwg
Ym9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsKKyAgICAgICAgdm9pZCBmcmFtZUNvbXBsZXRl
KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZl
cjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CisgICAgICAgIHZvaWQgZ2lm
Q29tcGxldGUoKTsKIAotcHJpdmF0ZToKLSAgICAvLyBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUg
ZnJhbWUgYnVmZmVyIHdpdGggdGhlIGdpdmVuIGluZGV4LCBiYXNlZCBvbiB0aGUKLSAgICAvLyBw
cmV2aW91cyBmcmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4KLSAgICB2b2lkIGluaXRGcmFtZUJ1ZmZl
cih1bnNpZ25lZCBmcmFtZUluZGV4KTsKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBDYWxsZWQg
dG8gaW5pdGlhbGl6ZSB0aGUgZnJhbWUgYnVmZmVyIHdpdGggdGhlIGdpdmVuIGluZGV4LCBiYXNl
ZCBvbiB0aGUKKyAgICAgICAgLy8gcHJldmlvdXMgZnJhbWUncyBkaXNwb3NhbCBtZXRob2QuCisg
ICAgICAgIHZvaWQgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpOwogCi0gICAg
Ly8gQSBoZWxwZXIgZm9yIGluaXRGcmFtZUJ1ZmZlcigpLCB0aGlzIHNldHMgdGhlIHNpemUgb2Yg
dGhlIGJ1ZmZlciwgYW5kCi0gICAgLy8gZmlsbHMgaXQgd2l0aCB0cmFuc3BhcmVudCBwaXhlbHMu
Ci0gICAgdm9pZCBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZmZXIqIGJ1ZmZlcikgY29u
c3Q7CisgICAgICAgIC8vIEEgaGVscGVyIGZvciBpbml0RnJhbWVCdWZmZXIoKSwgdGhpcyBzZXRz
IHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGFuZAorICAgICAgICAvLyBmaWxscyBpdCB3aXRoIHRy
YW5zcGFyZW50IHBpeGVscy4KKyAgICAgICAgdm9pZCBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JB
MzJCdWZmZXIqKSBjb25zdDsKIAotICAgIGJvb2wgbV9mcmFtZUNvdW50VmFsaWQ7Ci0gICAgYm9v
bCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKLSAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25D
b3VudDsKLSAgICBtdXRhYmxlIEdJRkltYWdlRGVjb2RlclByaXZhdGUqIG1fcmVhZGVyOwotfTsK
KyAgICAgICAgYm9vbCBtX2ZyYW1lQ291bnRWYWxpZDsKKyAgICAgICAgYm9vbCBtX2N1cnJlbnRC
dWZmZXJTYXdBbHBoYTsKKyAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7Cisg
ICAgICAgIG11dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9yZWFkZXI7CisgICAgfTsK
IAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJ
KHJldmlzaW9uIDQzNTA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw2IEBAIG1haWxp
bmcgYWRkcmVzcy4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICJHSUZJbWFnZURlY29k
ZXIuaCIKIAotI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
V1gpCi0KIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKIAogLy8gRGVmaW5lIHRoZSBN
b3ppbGxhIG1hY3JvIHNldHVwIHNvIHRoYXQgd2UgY2FuIGxlYXZlIHRoZSBtYWNyb3MgYWxvbmUu
CkBAIC05MzksNSArOTM3LDMgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNp
Z25lZAogICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7CiAgIHJldHVybiB0cnVlOwog
fQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDQz
NTA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogICoKICAqICoqKioqIEVORCBM
SUNFTlNFIEJMT0NLICoqKioqICovCiAKLSNpZm5kZWYgX0dJRl9IXwotI2RlZmluZSBfR0lGX0hf
CisjaWZuZGVmIEdJRkltYWdlUmVhZGVyX2gKKyNkZWZpbmUgR0lGSW1hZ2VSZWFkZXJfaAogCiAv
LyBEZWZpbmUgb3Vyc2VsdmVzIGFzIHRoZSBjbGllbnRQdHIuICBNb3ppbGxhIGp1c3QgaGFja2Vk
IHRoZWlyIEMrKyBjYWxsYmFjayBjbGFzcyBpbnRvIHRoaXMgb2xkIEMgZGVjb2RlciwKIC8vIHNv
IHdlIHdpbGwgdG9vLgpAQCAtMTY4LDcgKzE2OCw3IEBAIHN0cnVjdCBHSUZJbWFnZVJlYWRlciB7
CiAgICAgdW5zaWduZWQgc2NyZWVuX3dpZHRoOyAgICAgICAvKiBMb2dpY2FsIHNjcmVlbiB3aWR0
aCAmIGhlaWdodCAqLwogICAgIHVuc2lnbmVkIHNjcmVlbl9oZWlnaHQ7CiAgICAgaW50IGdsb2Jh
bF9jb2xvcm1hcF9zaXplOyAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LiAqLwot
ICAgIGludCBpbWFnZXNfZGVjb2RlZDsgICAgICAgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1l
cyBmb3IgYW5pbWF0ZWQgR0lGcyAqLworICAgIHVuc2lnbmVkIGltYWdlc19kZWNvZGVkOyAgICAv
KiBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcyAqLwogICAgIGludCBp
bWFnZXNfY291bnQ7ICAgICAgICAgICAvKiBDb3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIg
KGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykgKi8KICAgICBpbnQgbG9vcF9jb3VudDsgICAg
ICAgICAgICAgLyogTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRp
b24gbG9vcHMgYSBHSUYgcmVuZGVycy4gKi8KQEAgLTIxMyw0ICsyMTMsMyBAQCBwcml2YXRlOgog
fTsKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNv
L0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDM1MDcpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotCiBuYW1lc3BhY2UgV2ViQ29yZQogewogCkBAIC00MSw2
ICszOSw0IEBAIFJHQkEzMkJ1ZmZlciogSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICBy
ZXR1cm4gMDsKIH0KIAotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMjcgKzIzLDI2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IElDT19ERUNPREVSX0hfCi0jZGVmaW5lIElDT19ERUNPREVSX0hfCisjaWZuZGVmIElDT0ltYWdl
RGVjb2Rlcl9oCisjZGVmaW5lIElDT0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJQ09JbWFnZVJlYWRlcjsK
KyAgICBjbGFzcyBJQ09JbWFnZVJlYWRlcjsKIAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBJ
Q08gYW5kIENVUiBpbWFnZSBmb3JtYXRzLgotY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGlj
IEltYWdlRGVjb2RlcgotewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImljbyI7IH0KKyAgICAvLyBUaGlzIGNsYXNzIGRlY29k
ZXMgdGhlIElDTyBhbmQgQ1VSIGltYWdlIGZvcm1hdHMuCisgICAgY2xhc3MgSUNPSW1hZ2VEZWNv
ZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJpY28iOyB9CiAKLSAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVk
IHlldC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgICAg
IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQg
eWV0LgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7
Ci19OworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7CisgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQzNTA3KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCwzNCArMzgsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKUEVHSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3Rk
aW8uaD4KLQotI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
V1gpCi0KLSNpZiBDT01QSUxFUihNU1ZDKQotLy8gUmVtb3ZlIHdhcm5pbmdzIGZyb20gd2Fybmlu
ZyBsZXZlbCA0LgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0NjExKSAvLyB3YXJuaW5nIEM0
NjExOiBpbnRlcmFjdGlvbiBiZXR3ZWVuICdfc2V0am1wJyBhbmQgQysrIG9iamVjdCBkZXN0cnVj
dGlvbiBpcyBub24tcG9ydGFibGUKLQotLy8gaWYgQUREUkVTU19UQUdfQklUIGlzIGRmaW5lZCwg
SU5UMzIgaGFzIGJlZW4gZGVjbGFyZWQgYXMgYSB0eXBlZGVmIGluIHRoZSBQbGF0Zm9ybVNESyAo
QmFzZVRzZC5oKSwKLS8vIHNvIHdlIG5lZWQgdG8gc3RvcCBqcGVnbGliLmggZnJvbSB0cnlpbmcg
dG8gI2RlZmluZSBpdCAKLS8vIHNlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHA6Ly93d3cuY3ln
d2luLmNvbS9tbC9jeWd3aW4vMjAwNC0wNy9tc2cwMTA1MS5odG1sCi0jIGlmIGRlZmluZWQoQURE
UkVTU19UQUdfQklUKSAmJiAhZGVmaW5lZChYTURfSCkKLSMgIGRlZmluZSBYTURfSAotIyAgZGVm
aW5lIFZUS19KUEVHX1hNRF9ICi0jIGVuZGlmCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKIAog
ZXh0ZXJuICJDIiB7CiAjaW5jbHVkZSAianBlZ2xpYi5oIgogfQogCi0jaWYgQ09NUElMRVIoTVNW
QykKLSMgaWYgZGVmaW5lZChWVEtfSlBFR19YTURfSCkKLSMgIHVuZGVmIFZUS19KUEVHX1hNRF9I
Ci0jICB1bmRlZiBYTURfSAotIyBlbmRpZgotI2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpCi0KICNp
bmNsdWRlIDxzZXRqbXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgyLDcgKzQ1OSw3
IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICBpZiAoYnVm
ZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewogICAgICAgICAvLyBM
ZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNvcnJlY3Qgd2lkdGgvaGVpZ2h0Lgog
ICAgICAgICBSR0JBMzJBcnJheSYgYnl0ZXMgPSBidWZmZXIuYnl0ZXMoKTsKLSAgICAgICAgYnl0
ZXMucmVzaXplKG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgYnl0
ZXMucmVzaXplKHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKIAogICAgICAgICAv
LyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1
ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwpAQCAtNTAzLDcgKzQ4
MCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAg
aWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5mbywgc2FtcGxlcywgMSkgIT0gMSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSlNBTVBMRSAqajEgPSBzYW1wbGVzWzBdOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5mby0+b3V0cHV0X3dpZHRoOyArK2kpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGluZm8tPm91dHB1dF93aWR0aDsgKyt4
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCByID0gKmoxKys7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBnID0gKmoxKys7CiAgICAgICAgICAgICB1bnNpZ25lZCBiID0gKmoxKys7CkBAIC01MjcsNSAr
NTA0LDMgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUoKQogfQogCiB9Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShDQUlSTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24g
NDM1MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw1MiArMjMsNTEgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgSlBFR19ERUNPREVSX0hfCi0jZGVmaW5lIEpQRUdfREVDT0RF
Ul9IXworI2lmbmRlZiBKUEVHSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgSlBFR0ltYWdlRGVjb2Rl
cl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBKUEVHSW1hZ2VSZWFkZXI7CisgICAgY2xhc3MgSlBFR0ltYWdlUmVhZGVyOwogCi0v
LyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEpQRUcgaW1hZ2UgZm9ybWF0LgotY2xhc3MgSlBFR0lt
YWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIKLXsKLXB1YmxpYzoKLSAgICBKUEVHSW1h
Z2VEZWNvZGVyKCk7Ci0gICAgfkpQRUdJbWFnZURlY29kZXIoKTsKKyAgICAvLyBUaGlzIGNsYXNz
IGRlY29kZXMgdGhlIEpQRUcgaW1hZ2UgZm9ybWF0LgorICAgIGNsYXNzIEpQRUdJbWFnZURlY29k
ZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpQRUdJbWFn
ZURlY29kZXIoKTsKKyAgICAgICAgfkpQRUdJbWFnZURlY29kZXIoKTsKIAotICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImpwZyI7IH0KKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAianBn
IjsgfQogCi0gICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCi0gICAgdmlydHVhbCB2
b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Cisg
ICAgICAgIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgorICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAot
ICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29k
ZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAg
ICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2Rl
ZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgZGVjb2RlKGJvb2wg
c2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7CisgICAgICAgIHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9u
bHkgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICBKUEVHSW1hZ2VSZWFkZXIqIHJlYWRlcigpIHsgcmV0
dXJuIG1fcmVhZGVyOyB9CisgICAgICAgIEpQRUdJbWFnZVJlYWRlciogcmVhZGVyKCkgeyByZXR1
cm4gbV9yZWFkZXI7IH0KIAotICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
IHsKLSAgICAgICAgaWYgKCFtX3NpemVBdmFpbGFibGUpIHsKLSAgICAgICAgICAgIG1fc2l6ZUF2
YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWln
aHQpOworICAgICAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAg
ICAgICAgICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSkgeworICAgICAgICAgICAgICAgIG1fc2l6ZUF2
YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGJvb2wgb3V0
cHV0U2NhbmxpbmVzKCk7Ci0gICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKKyAgICAgICAgYm9vbCBv
dXRwdXRTY2FubGluZXMoKTsKKyAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAotcHJpdmF0
ZToKLSAgICBtdXRhYmxlIEpQRUdJbWFnZVJlYWRlciogbV9yZWFkZXI7Ci19OworICAgIHByaXZh
dGU6CisgICAgICAgIG11dGFibGUgSlBFR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsKKyAgICB9Owog
Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA0MzUwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEzICs0MCw2IEBACiAj
aW5jbHVkZSAicG5nLmgiCiAjaW5jbHVkZSAiYXNzZXJ0LmgiCiAKLSNpZiBQTEFURk9STShDQUlS
TykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotCi0jaWYgQ09NUElMRVIoTVNWQykK
LS8vIFJlbW92ZSB3YXJuaW5ncyBmcm9tIHdhcm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlIDogNDYxMSkgLy8gd2FybmluZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAn
X3NldGptcCcgYW5kIEMrKyBvYmplY3QgZGVzdHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0jZW5k
aWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHYW1tYSBjb25zdGFudHMuCkBAIC01NSw3
ICs0OCw3IEBAIGNvbnN0IGRvdWJsZSBjRGVmYXVsdEdhbW1hID0gMi4yOwogY29uc3QgZG91Ymxl
IGNJbnZlcnNlR2FtbWEgPSAwLjQ1NDU1OwogCiAvLyBQcm90ZWN0IGFnYWluc3QgbGFyZ2UgUE5H
cy4gU2VlIE1vemlsbGEncyBidWcgIzI1MTM4MSBmb3IgbW9yZSBpbmZvLgotY29uc3QgbG9uZyBj
TWF4UE5HU2l6ZSA9IDEwMDAwMDBMOworY29uc3QgdW5zaWduZWQgbG9uZyBjTWF4UE5HU2l6ZSA9
IDEwMDAwMDBVTDsKIAogLy8gQ2FsbGVkIGlmIHRoZSBkZWNvZGluZyBvZiB0aGUgaW1hZ2UgZmFp
bHMuCiBzdGF0aWMgdm9pZCBQTkdBUEkgZGVjb2RpbmdGYWlsZWQocG5nX3N0cnVjdHAgcG5nX3B0
ciwgcG5nX2NvbnN0X2NoYXJwIGVycm9yX21zZyk7CkBAIC03OCw5ICs3MSwxMiBAQCBjbGFzcyBQ
TkdJbWFnZVJlYWRlcgogewogcHVibGljOgogICAgIFBOR0ltYWdlUmVhZGVyKFBOR0ltYWdlRGVj
b2RlciogZGVjb2RlcikKLSAgICA6IG1fcmVhZE9mZnNldCgwKSwgbV9kZWNvZGluZ1NpemVPbmx5
KGZhbHNlKSwgbV9pbnRlcmxhY2VCdWZmZXIoMCksIG1faGFzQWxwaGEoMCkKKyAgICAgICAgOiBt
X3JlYWRPZmZzZXQoMCkKKyAgICAgICAgLCBtX2RlY29kaW5nU2l6ZU9ubHkoZmFsc2UpCisgICAg
ICAgICwgbV9pbnRlcmxhY2VCdWZmZXIoMCkKKyAgICAgICAgLCBtX2hhc0FscGhhKDApCiAgICAg
ewotICAgICAgICBtX3BuZyA9IHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJf
U1RSSU5HLCBOVUxMLCBkZWNvZGluZ0ZhaWxlZCwgZGVjb2RpbmdXYXJuaW5nKTsKKyAgICAgICAg
bV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwg
ZGVjb2RpbmdGYWlsZWQsIGRlY29kaW5nV2FybmluZyk7CiAgICAgICAgIG1faW5mbyA9IHBuZ19j
cmVhdGVfaW5mb19zdHJ1Y3QobV9wbmcpOwogICAgICAgICBwbmdfc2V0X3Byb2dyZXNzaXZlX3Jl
YWRfZm4obV9wbmcsIGRlY29kZXIsIGhlYWRlckF2YWlsYWJsZSwgcm93QXZhaWxhYmxlLCBwbmdD
b21wbGV0ZSk7CiAgICAgfQpAQCAtOTIsOCArODgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNs
b3NlKCkgewogICAgICAgICBpZiAobV9wbmcgJiYgbV9pbmZvKQotICAgICAgICAgICAgcG5nX2Rl
c3Ryb3lfcmVhZF9zdHJ1Y3QoJm1fcG5nLCAmbV9pbmZvLCAwKTsKKyAgICAgICAgICAgIHBuZ19k
ZXN0cm95X3JlYWRfc3RydWN0KCZtX3BuZywgJm1faW5mbywgMCk7ICAvLyBXaWxsIHplcm8gdGhl
IHBvaW50ZXJzLgogICAgICAgICBkZWxldGUgW11tX2ludGVybGFjZUJ1ZmZlcjsKKyAgICAgICAg
bV9pbnRlcmxhY2VCdWZmZXIgPSAwOwogICAgICAgICBtX3JlYWRPZmZzZXQgPSAwOwogICAgIH0K
IApAQCAtMTM5LDcgKzEzNiw3IEBAIHByaXZhdGU6CiB9OwogCiBQTkdJbWFnZURlY29kZXI6OlBO
R0ltYWdlRGVjb2RlcigpCi06IG1fcmVhZGVyKDApCisgICAgOiBtX3JlYWRlcigwKQogewogICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CiB9CkBAIC0yMjQsNiArMjIxLDEwIEBAIHZv
aWQgaGVhZGVyQXZhaWxhYmxlKHBuZ19zdHJ1Y3RwIHBuZywgcG4KICAgICBzdGF0aWNfY2FzdDxQ
TkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZh
aWxhYmxlKCk7CiB9CiAKK3ZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpIHsK
KyAgICBtX2ZhaWxlZCA9IHRydWU7Cit9CisKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUoKQogewogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsK
QEAgLTMxMiwxNiArMzEzLDE2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkgewogICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNvcnJl
Y3Qgd2lkdGgvaGVpZ2h0LgogICAgICAgICBSR0JBMzJBcnJheSYgYnl0ZXMgPSBidWZmZXIuYnl0
ZXMoKTsKLSAgICAgICAgYnl0ZXMucmVzaXplKG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgYnl0ZXMucmVzaXplKHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdo
dCgpKTsKIAogICAgICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29t
cGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRp
YWwpOwogCiAgICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBl
bnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRS
ZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICBp
ZiAocmVhZGVyKCktPnBuZ1B0cigpLT5pbnRlcmxhY2VkKQotICAgICAgICAgICAgcmVhZGVyKCkt
PmNyZWF0ZUludGVybGFjZUJ1ZmZlcigocmVhZGVyKCktPmhhc0FscGhhKCkgPyA0IDogMykgKiBt
X3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICByZWFkZXIoKS0+
Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKChyZWFkZXIoKS0+aGFzQWxwaGEoKSA/IDQgOiAzKSAqIHNp
emUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKICAgICB9CiAKICAgICBpZiAocm93QnVm
ZmVyID09IDApCkBAIC0zNjEsMTcgKzM2MiwxNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKHVuc2lnCiAgICAgcG5nX2J5dGVwIHJvdzsKICAgICBwbmdfYnl0ZXAgaW50ZXJs
YWNlQnVmZmVyID0gcmVhZGVyKCktPmludGVybGFjZUJ1ZmZlcigpOwogICAgIGlmIChpbnRlcmxh
Y2VCdWZmZXIpIHsKLSAgICAgICAgcm93ID0gaW50ZXJsYWNlQnVmZmVyICsgKHJvd0luZGV4ICog
Y29sb3JDaGFubmVscyAqIG1fc2l6ZS53aWR0aCgpKTsKKyAgICAgICAgcm93ID0gaW50ZXJsYWNl
QnVmZmVyICsgKHJvd0luZGV4ICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKTsKICAg
ICAgICAgcG5nX3Byb2dyZXNzaXZlX2NvbWJpbmVfcm93KHBuZywgcm93LCByb3dCdWZmZXIpOwog
ICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJvdyA9IHJvd0J1ZmZlcjsKIAogICAgIC8vIENvcHkg
dGhlIGRhdGEgaW50byBvdXIgYnVmZmVyLgotICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgp
OworICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwogICAgIHVuc2lnbmVkKiBkc3QgPSBi
dWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyByb3dJbmRleCAqIHdpZHRoOwogICAgIGJvb2wgc2F3QWxw
aGEgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKICAgICAgICAgdW5zaWduZWQgcmVkID0g
KnJvdysrOwogICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICpyb3crKzsKICAgICAgICAgdW5zaWdu
ZWQgYmx1ZSA9ICpyb3crKzsKQEAgLTM5OCw2ICszOTksNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6cG5nQ29tcGxldGUoKQogICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKTsKIH0KIAotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsNDYgKzIzLDQ1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIFBOR19ERUNPREVSX0hfCi0jZGVmaW5lIFBOR19ERUNPREVSX0hfCisjaWZuZGVmIFBOR0lt
YWdlRGVjb2Rlcl9oCisjZGVmaW5lIFBOR0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFn
ZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQTkdJbWFnZVJlYWRl
cjsKKyAgICBjbGFzcyBQTkdJbWFnZVJlYWRlcjsKIAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRo
ZSBQTkcgaW1hZ2UgZm9ybWF0LgotY2xhc3MgUE5HSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdl
RGVjb2RlcgotewotcHVibGljOgotICAgIFBOR0ltYWdlRGVjb2RlcigpOwotICAgIH5QTkdJbWFn
ZURlY29kZXIoKTsKKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIFBORyBpbWFnZSBmb3Jt
YXQuCisgICAgY2xhc3MgUE5HSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7Cisg
ICAgcHVibGljOgorICAgICAgICBQTkdJbWFnZURlY29kZXIoKTsKKyAgICAgICAgflBOR0ltYWdl
RGVjb2RlcigpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiAicG5nIjsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IHsgcmV0dXJuICJwbmciOyB9CiAKLSAgICAvLyBUYWtlIHRoZSBkYXRhIGFu
ZCBzdG9yZSBpdC4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3Rv
cmUgaXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUg
aW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCi0gICAgdmlydHVhbCBib29sIGlzU2l6
ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBp
bmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KKyAgICAgICAgdmlydHVhbCBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZl
ciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAKLSAgICB2b2lkIGRlY29kZShi
b29sIHNpemVPbmx5ID0gZmFsc2UpIGNvbnN0OworICAgICAgICB2b2lkIGRlY29kZShib29sIHNp
emVPbmx5ID0gZmFsc2UpIGNvbnN0OwogCi0gICAgUE5HSW1hZ2VSZWFkZXIqIHJlYWRlcigpIHsg
cmV0dXJuIG1fcmVhZGVyOyB9CisgICAgICAgIFBOR0ltYWdlUmVhZGVyKiByZWFkZXIoKSB7IHJl
dHVybiBtX3JlYWRlcjsgfQogCi0gICAgLy8gQ2FsbGJhY2tzIGZyb20gbGlicG5nCi0gICAgdm9p
ZCBkZWNvZGluZ0ZhaWxlZCgpIHsgbV9mYWlsZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBoZWFkZXJB
dmFpbGFibGUoKTsKLSAgICB2b2lkIHJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZm
ZXIsIHVuc2lnbmVkIHJvd0luZGV4LCBpbnQgaW50ZXJsYWNlUGFzcyk7Ci0gICAgdm9pZCBwbmdD
b21wbGV0ZSgpOworICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSBsaWJwbmcKKyAgICAgICAgdm9p
ZCBkZWNvZGluZ0ZhaWxlZCgpOworICAgICAgICB2b2lkIGhlYWRlckF2YWlsYWJsZSgpOworICAg
ICAgICB2b2lkIHJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVk
IHJvd0luZGV4LCBpbnQgaW50ZXJsYWNlUGFzcyk7CisgICAgICAgIHZvaWQgcG5nQ29tcGxldGUo
KTsKIAotcHJpdmF0ZToKLSAgICBtdXRhYmxlIFBOR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsKLX07
CisgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBQTkdJbWFnZVJlYWRlciogbV9yZWFkZXI7
CisgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VE
ZWNvZGVyLmgJKHJldmlzaW9uIDQzNTA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0JNUEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICsxLDU0
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQk1QSW1hZ2VEZWNvZGVyX2gKLSNkZWZpbmUgQk1QSW1hZ2VE
ZWNvZGVyX2gKLQotI2luY2x1ZGUgIkJNUEltYWdlUmVhZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgQk1QIGltYWdlIGZvcm1hdC4K
LSAgICBjbGFzcyBCTVBJbWFnZURlY29kZXIgOiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiAiYm1wIjsgfQotCi0gICAgICAgIC8vIEJNUEltYWdlUmVhZGVyCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIC8vIFByb2Nlc3NlcyB0aGUgZmlsZSBoZWFkZXIgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgZGF0YS4gIFJldHVybnMgdHJ1ZSBpZgotICAgICAgICAvLyB0aGUgZmlsZSBoZWFkZXIg
Y291bGQgYmUgZGVjb2RlZC4KLSAgICAgICAgYm9vbCBwcm9jZXNzRmlsZUhlYWRlcihTaGFyZWRC
dWZmZXIqKTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgorLyoN
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuDQorICogDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoN
CisgKiANCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
DQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4NCisgKiANCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIEJNUEltYWdlRGVjb2Rl
cl9oDQorI2RlZmluZSBCTVBJbWFnZURlY29kZXJfaA0KKw0KKyNpbmNsdWRlICJCTVBJbWFnZVJl
YWRlci5oIg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgLy8gVGhpcyBjbGFzcyBk
ZWNvZGVzIHRoZSBCTVAgaW1hZ2UgZm9ybWF0Lg0KKyAgICBjbGFzcyBCTVBJbWFnZURlY29kZXIg
OiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIgew0KKyAgICBwdWJsaWM6DQorICAgICAgICB2aXJ0dWFs
IFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJibXAiOyB9DQorDQor
ICAgICAgICAvLyBCTVBJbWFnZVJlYWRlcg0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY29kZUlt
YWdlKFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAgICBwcml2YXRlOg0KKyAgICAgICAgLy8gUHJvY2Vz
c2VzIHRoZSBmaWxlIGhlYWRlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAgUmV0dXJu
cyB0cnVlIGlmDQorICAgICAgICAvLyB0aGUgZmlsZSBoZWFkZXIgY291bGQgYmUgZGVjb2RlZC4N
CisgICAgICAgIGJvb2wgcHJvY2Vzc0ZpbGVIZWFkZXIoU2hhcmVkQnVmZmVyKik7DQorICAgIH07
DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KKw0KKyNlbmRpZg0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5o
CShyZXZpc2lvbiA0MzUwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMyNyArMSwzMjcgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICog
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBCTVBJbWFnZVJlYWRlcl9oCi0jZGVmaW5lIEJNUEltYWdlUmVhZGVyX2gK
LQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgYSBCTVAgaW1hZ2Uu
ICBJdCBpcyB1c2VkIGFzIGEgYmFzZSBmb3IgdGhlIEJNUCBhbmQgSUNPCi0gICAgLy8gZGVjb2Rl
cnMsIHdoaWNoIHdyYXAgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIGNvZGUgdG8gcmVhZCBmaWxlIGhl
YWRlcnMsIGV0Yy4KLSAgICBjbGFzcyBCTVBJbWFnZVJlYWRlciA6IHB1YmxpYyBJbWFnZURlY29k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgQk1QSW1hZ2VSZWFkZXIoKTsKLQotICAgICAgICAv
LyBEb2VzIHRoZSBhY3R1YWwgZGVjb2RpbmcuICB8ZGF0YXwgc3RhcnRzIGF0IHRoZSBiZWdpbm5p
bmcgb2YgdGhlIGZpbGUsCi0gICAgICAgIC8vIGJ1dCBtYXkgYmUgaW5jb21wbGV0ZS4KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRlY29kZUltYWdlKFNoYXJlZEJ1ZmZlciogZGF0YSkgPSAwOwotCi0g
ICAgICAgIC8vIEltYWdlRGVjb2RlcgotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLSAgICAgICAgdmlydHVhbCBS
R0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwotCi0gICAgcHJv
dGVjdGVkOgotICAgICAgICBlbnVtIEFuZE1hc2tTdGF0ZSB7Ci0gICAgICAgICAgICBOb25lLAot
ICAgICAgICAgICAgTm90WWV0RGVjb2RlZCwKLSAgICAgICAgICAgIERlY29kaW5nLAotICAgICAg
ICB9OwotCi0gICAgICAgIC8vIERlY29kZXMgYSBzaW5nbGUgQk1QLCBzdGFydGluZyB3aXRoIGFu
IGluZm8gaGVhZGVyLgotICAgICAgICB2b2lkIGRlY29kZUJNUChTaGFyZWRCdWZmZXIqIGRhdGEp
OwotCi0gICAgICAgIC8vIFJlYWQgYSB2YWx1ZSBmcm9tIHxkYXRhW21fZGVjb2RlZE9mZnNldCAr
IGFkZGl0aW9uYWxPZmZzZXRdfCwgY29udmVydGluZwotICAgICAgICAvLyBmcm9tIGxpdHRsZSB0
byBuYXRpdmUgZW5kaWFubmVzcy4KLSAgICAgICAgaW5saW5lIHVpbnQxNl90IHJlYWRVaW50MTYo
U2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgdWludDE2X3QgcmVzdWx0OwotICAgICAgICAgICAgbWVtY3B5KCZyZXN1
bHQsICZkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgYWRkaXRpb25hbE9mZnNldF0sIDIp
OwotICAgICAgICAjaWYgUExBVEZPUk0oQklHX0VORElBTikKLSAgICAgICAgICAgIHJlc3VsdCA9
ICgocmVzdWx0ICYgMHhmZikgPDwgOCkgfCAoKHJlc3VsdCAmIDB4ZmYwMCkgPj4gOCk7Ci0gICAg
ICAgICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlubGluZSB1aW50MzJfdCByZWFkVWludDMyKFNoYXJlZEJ1ZmZlciogZGF0YSwgaW50IGFk
ZGl0aW9uYWxPZmZzZXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHJl
c3VsdDsKLSAgICAgICAgICAgIG1lbWNweSgmcmVzdWx0LCAmZGF0YS0+ZGF0YSgpW21fZGVjb2Rl
ZE9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXRdLCA0KTsKLSAgICAgICAgI2lmIFBMQVRGT1JNKEJJ
R19FTkRJQU4pCi0gICAgICAgICAgICByZXN1bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDI0KSB8
ICgocmVzdWx0ICYgMHhmZjAwKSA8PCA4KSB8Ci0gICAgICAgICAgICAgICAgKChyZXN1bHQgJiAw
eGZmMDAwMCkgPj4gOCkgfCAoKHJlc3VsdCAmIDB4ZmYwMDAwMDApID4+IDI0KTsKLSAgICAgICAg
I2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQW4gaW5kZXggaW50byB8bV9kYXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxy
ZWFkeSBkZWNvZGVkLgotICAgICAgICBzaXplX3QgbV9kZWNvZGVkT2Zmc2V0OwotCi0gICAgICAg
IC8vIFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0aGUgQk1QIGluZm8gaGVhZGVyIHN0YXJ0cy4K
LSAgICAgICAgc2l6ZV90IG1faGVhZGVyT2Zmc2V0OwotCi0gICAgICAgIC8vIFRoZSBmaWxlIG9m
ZnNldCBhdCB3aGljaCB0aGUgYWN0dWFsIGltYWdlIGJpdHMgc3RhcnQuICBXaGVuIGRlY29kaW5n
IElDTwotICAgICAgICAvLyBmaWxlcywgdGhpcyBpcyBzZXQgdG8gMCwgc2luY2UgaXQncyBub3Qg
c3RvcmVkIGFueXdoZXJlIGluIGEgaGVhZGVyOyB0aGUKLSAgICAgICAgLy8gcmVhZGVyIGZ1bmN0
aW9ucyBleHBlY3QgdGhlIGltYWdlIGRhdGEgdG8gc3RhcnQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhl
Ci0gICAgICAgIC8vIGhlYWRlciBhbmQgKGlmIG5lY2Vzc2FyeSkgY29sb3IgdGFibGUuCi0gICAg
ICAgIHNpemVfdCBtX2ltZ0RhdGFPZmZzZXQ7Ci0KLSAgICAgICAgLy8gSUNPcyBzdG9yZSBhIDFi
cHAgIm1hc2siIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWluIGJpdG1hcCBpbWFnZSBkYXRhCi0g
ICAgICAgIC8vIChhbmQsIGNvbmZ1c2luZ2x5LCBhZGQgaXRzIGhlaWdodCB0byB0aGUgYmlIZWln
aHQgdmFsdWUgaW4gdGhlIGluZm8KLSAgICAgICAgLy8gaGVhZGVyLCB0aHVzIGRvdWJsaW5nIGl0
KS4gIFRoaXMgdmFyaWFibGUgdHJhY2tzIHdoZXRoZXIgd2UgaGF2ZSBzdWNoIGEKLSAgICAgICAg
Ly8gbWFzayBhbmQgaWYgd2UndmUgc3RhcnRlZCBkZWNvZGluZyBpdCB5ZXQuCi0gICAgICAgIEFu
ZE1hc2tTdGF0ZSBtX2FuZE1hc2tTdGF0ZTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFRo
ZSB2YXJpb3VzIEJNUCBjb21wcmVzc2lvbiB0eXBlcy4gIFdlIGRvbid0IGN1cnJlbnRseSBkZWNv
ZGUgYWxsIHRoZXNlLgotICAgICAgICBlbnVtIENvbXByZXNzaW9uVHlwZSB7Ci0gICAgICAgICAg
ICAvLyBVbml2ZXJzYWwgdHlwZXMKLSAgICAgICAgICAgIFJHQiA9IDAsCi0gICAgICAgICAgICBS
TEU4ID0gMSwKLSAgICAgICAgICAgIFJMRTQgPSAyLAotICAgICAgICAgICAgLy8gV2luZG93cyBW
Mysgb25seQotICAgICAgICAgICAgQklURklFTERTID0gMywKLSAgICAgICAgICAgIEpQRUcgPSA0
LAotICAgICAgICAgICAgUE5HID0gNSwKLSAgICAgICAgICAgIC8vIE9TLzIgMi54LW9ubHkKLSAg
ICAgICAgICAgIEhVRkZNQU4xRCwgIC8vIFN0b3JlZCBpbiBmaWxlIGFzIDMKLSAgICAgICAgICAg
IFJMRTI0LCAgICAgIC8vIFN0b3JlZCBpbiBmaWxlIGFzIDQKLSAgICAgICAgfTsKLQotICAgICAg
ICAvLyBUaGVzZSBhcmUgYmFzZWQgb24gdGhlIFdpbmRvd3MgQklUTUFQSU5GT0hFQURFUiBhbmQg
UkdCVFJJUExFIHN0cnVjdHMsCi0gICAgICAgIC8vIGJ1dCB3aXRoIHVubmVjZXNzYXJ5IGVudHJp
ZXMgcmVtb3ZlZC4KLSAgICAgICAgc3RydWN0IEJpdG1hcEluZm9IZWFkZXIgewotICAgICAgICAg
ICAgdWludDMyX3QgYmlTaXplOwotICAgICAgICAgICAgaW50MzJfdCBiaVdpZHRoOwotICAgICAg
ICAgICAgaW50MzJfdCBiaUhlaWdodDsKLSAgICAgICAgICAgIHVpbnQxNl90IGJpQml0Q291bnQ7
Ci0gICAgICAgICAgICBDb21wcmVzc2lvblR5cGUgYmlDb21wcmVzc2lvbjsKLSAgICAgICAgICAg
IHVpbnQzMl90IGJpQ2xyVXNlZDsKLSAgICAgICAgfTsKLSAgICAgICAgc3RydWN0IFJHQlRyaXBs
ZSB7Ci0gICAgICAgICAgICB1aW50OF90IHJnYkJsdWU7Ci0gICAgICAgICAgICB1aW50OF90IHJn
YkdyZWVuOwotICAgICAgICAgICAgdWludDhfdCByZ2JSZWQ7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgLy8gRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgQk1QIGluZm8gaGVhZGVyLiAgUmV0dXJu
cyB0cnVlIGlmIHRoZSBzaXplIGlzCi0gICAgICAgIC8vIHZhbGlkLgotICAgICAgICBib29sIGdl
dEluZm9IZWFkZXJTaXplKFNoYXJlZEJ1ZmZlciogZGF0YSk7Ci0KLSAgICAgICAgLy8gUHJvY2Vz
c2VzIHRoZSBCTVAgaW5mbyBoZWFkZXIuICBSZXR1cm5zIHRydWUgaWYgdGhlIGluZm8gaGVhZGVy
IGNvdWxkIGJlCi0gICAgICAgIC8vIGRlY29kZWQuCi0gICAgICAgIGJvb2wgcHJvY2Vzc0luZm9I
ZWFkZXIoU2hhcmVkQnVmZmVyKiBkYXRhKTsKLQotICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIHByb2Nlc3NJbmZvSGVhZGVyKCkgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIHJlYWRpbmcgb2YK
LSAgICAgICAgLy8gaGVhZGVyIHZhbHVlcyBmcm9tIHRoZSBieXRlIHN0cmVhbS4gIFJldHVybnMg
ZmFsc2Ugb24gZXJyb3IuCi0gICAgICAgIGJvb2wgcmVhZEluZm9IZWFkZXIoU2hhcmVkQnVmZmVy
KiBkYXRhKTsKLQotICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIFdpbmRvd3Mg
VjQrIEJNUC4KLSAgICAgICAgaW5saW5lIGJvb2wgaXNXaW5kb3dzVjRQbHVzKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gV2luZG93cyBWNCBpbmZvIGhlYWRlciBpcyAxMDggYnl0
ZXMuICBWNSBpcyAxMjQgYnl0ZXMuCi0gICAgICAgICAgICByZXR1cm4gKG1faW5mb0hlYWRlci5i
aVNpemUgPT0gMTA4KSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSAxMjQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb25zaXN0ZW5jeSBlcnJvcnMgYXJlIGZv
dW5kIGluIHRoZSBpbmZvIGhlYWRlci4KLSAgICAgICAgYm9vbCBpc0luZm9IZWFkZXJWYWxpZCgp
IGNvbnN0OwotCi0gICAgICAgIC8vIEZvciBCSV9CSVRGSUVMRFMgaW1hZ2VzLCBpbml0aWFsaXpl
cyB0aGUgbV9iaXRNYXNrc1tdIGFuZCBtX2JpdE9mZnNldHNbXQotICAgICAgICAvLyBhcnJheXMu
ICBwcm9jZXNzSW5mb0hlYWRlcigpIHdpbGwgaW5pdGlhbGl6ZSB0aGVzZSBmb3Igb3RoZXIgY29t
cHJlc3Npb24KLSAgICAgICAgLy8gdHlwZXMgd2hlcmUgbmVlZGVkLgotICAgICAgICBib29sIHBy
b2Nlc3NCaXRtYXNrcyhTaGFyZWRCdWZmZXIqIGRhdGEpOwotCi0gICAgICAgIC8vIEZvciBwYWxl
dHRlZCBpbWFnZXMsIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIG1fY29sb3JUYWJsZVtd
IGFycmF5LgotICAgICAgICBib29sIHByb2Nlc3NDb2xvclRhYmxlKFNoYXJlZEJ1ZmZlciogZGF0
YSk7Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2VzIGFuIFJMRS1lbmNvZGVkIGltYWdlLiAgUmV0dXJu
cyB0cnVlIGlmIHRoZSBlbnRpcmUgaW1hZ2Ugd2FzCi0gICAgICAgIC8vIGRlY29kZWQuCi0gICAg
ICAgIGJvb2wgcHJvY2Vzc1JMRURhdGEoU2hhcmVkQnVmZmVyKiBkYXRhKTsKLQotICAgICAgICAv
LyBQcm9jZXNzZXMgYSBzZXQgb2Ygbm9uLVJMRS1jb21wcmVzc2VkIHBpeGVscy4gIFR3byBjYXNl
czoKLSAgICAgICAgLy8gICAqIGluUkxFID0gdHJ1ZTogdGhlIGRhdGEgaXMgaW5zaWRlIGFuIFJM
RS1lbmNvZGVkIGJpdG1hcC4gIFRyaWVzIHRvCi0gICAgICAgIC8vICAgICBwcm9jZXNzIHxudW1Q
aXhlbHN8IHBpeGVscyBvbiB0aGUgY3VycmVudCByb3c7IHJldHVybnMgdHJ1ZSBvbgotICAgICAg
ICAvLyAgICAgc3VjY2Vzcy4KLSAgICAgICAgLy8gICAqIGluUkxFID0gZmFsc2U6IHRoZSBkYXRh
IGlzIGluc2lkZSBhIG5vbi1STEUtZW5jb2RlZCBiaXRtYXAuCi0gICAgICAgIC8vICAgICB8bnVt
UGl4ZWxzfCBpcyBpZ25vcmVkLiAgRXhwZWN0cyB8bV9jb29yZHwgdG8gcG9pbnQgYXQgdGhlIGJl
Z2lubmluZwotICAgICAgICAvLyAgICAgb2YgdGhlIG5leHQgcm93IHRvIGJlIGRlY29kZWQuICBU
cmllcyB0byBwcm9jZXNzIGFzIG1hbnkgY29tcGxldGUKLSAgICAgICAgLy8gICAgIHJvd3MgYXMg
cG9zc2libGUuICBSZXR1cm5zIHRydWUgaWYgdGhlIHdob2xlIGltYWdlIHdhcyBkZWNvZGVkLgot
ICAgICAgICBib29sIHByb2Nlc3NOb25STEVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBp
blJMRSwgaW50IG51bVBpeGVscyk7Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
dXJyZW50IHktY29vcmRpbmF0ZSBwbHVzIHxudW1Sb3dzfCB3b3VsZCBiZSBwYXN0Ci0gICAgICAg
IC8vIHRoZSBlbmQgb2YgdGhlIGltYWdlLiAgSGVyZSAicGx1cyIgbWVhbnMgInRvd2FyZCB0aGUg
ZW5kIG9mIHRoZSBpbWFnZSIsCi0gICAgICAgIC8vIHNvIGRvd253YXJkcyBmb3IgbV9pc1RvcERv
d24gaW1hZ2VzIGFuZCB1cHdhcmRzIG90aGVyd2lzZS4KLSAgICAgICAgaW5saW5lIGJvb2wgcGFz
dEVuZE9mSW1hZ2UoaW50IG51bVJvd3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2lzVG9wRG93bgotICAgICAgICAgICAgICAgID8gKChtX2Nvb3JkLnkoKSArIG51bVJvd3MpID49
IHNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICA6ICgobV9jb29yZC55KCkgLSBudW1S
b3dzKSA8IDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgcGl4ZWwgZGF0
YSBmb3IgdGhlIGN1cnJlbnQgWCBjb29yZGluYXRlIGluIGEgdWludDMyX3QuCi0gICAgICAgIC8v
IEFzc3VtZXMgbV9kZWNvZGVkT2Zmc2V0IGhhcyBiZWVuIHNldCB0byB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBjdXJyZW50Ci0gICAgICAgIC8vIHJvdy4KLSAgICAgICAgLy8gTk9URTogT25seSBhcyBt
YW55IGJ5dGVzIG9mIHRoZSByZXR1cm4gdmFsdWUgYXMgYXJlIG5lZWRlZCB0byBob2xkIHRoZQot
ICAgICAgICAvLyBwaXhlbCBkYXRhIHdpbGwgYWN0dWFsbHkgYmUgc2V0LgotICAgICAgICBpbmxp
bmUgdWludDMyX3QgcmVhZEN1cnJlbnRQaXhlbChTaGFyZWRCdWZmZXIqIGRhdGEsIGludCBieXRl
c1BlclBpeGVsKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgYWRkaXRp
b25hbE9mZnNldCA9IG1fY29vcmQueCgpICogYnl0ZXNQZXJQaXhlbDsKLSAgICAgICAgICAgIHN3
aXRjaCAoYnl0ZXNQZXJQaXhlbCkgewotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAg
ICAgIHJldHVybiByZWFkVWludDE2KGRhdGEsIGFkZGl0aW9uYWxPZmZzZXQpOwotCi0gICAgICAg
ICAgICBjYXNlIDM6IHsKLSAgICAgICAgICAgICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciB0aGF0
IHdlIG5ldmVyIHNldCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIG9mCi0gICAgICAgICAgICAg
ICAgLy8gdGhlIHJldHVybiB2YWx1ZSBoZXJlIGluIGxpdHRsZS1lbmRpYW4gbW9kZSwgdGhlIGNh
bGxlciB3b24ndAotICAgICAgICAgICAgICAgIC8vIHJlYWQgaXQuCi0gICAgICAgICAgICAgICAg
dWludDMyX3QgcGl4ZWw7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZwaXhlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgJmRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyBhZGRpdGlvbmFs
T2Zmc2V0XSwgMyk7Ci0gICAgICAgICNpZiBQTEFURk9STShCSUdfRU5ESUFOKQotICAgICAgICAg
ICAgICAgIHBpeGVsID0gKChwaXhlbCAmIDB4ZmYwMCkgPDwgOCkgfCAoKHBpeGVsICYgMHhmZjAw
MDApID4+IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgKChwaXhlbCAmIDB4ZmYwMDAwMDApID4+
IDI0KTsKLSAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBpeGVsOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlYWRVaW50MzIoZGF0YSwgYWRkaXRpb25hbE9mZnNldCk7Ci0KLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1
cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJlZCBjb21wb25lbnQgKDAsIDEsIDIsIDMgPT0gUiwg
RywgQiwgQSkgaW4KLSAgICAgICAgLy8gdGhlIGdpdmVuIHBpeGVsIGRhdGEuCi0gICAgICAgIGlu
bGluZSB1bnNpZ25lZCBnZXRDb21wb25lbnQodWludDMyX3QgcGl4ZWwsIGludCBjb21wb25lbnQp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoKHBpeGVsICYgbV9iaXRNYXNr
c1tjb21wb25lbnRdKSA+PiBtX2JpdFNoaWZ0c1JpZ2h0W2NvbXBvbmVudF0pCi0gICAgICAgICAg
ICAgICAgPDwgbV9iaXRTaGlmdHNMZWZ0W2NvbXBvbmVudF07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpbmxpbmUgdW5zaWduZWQgZ2V0QWxwaGEodWludDMyX3QgcGl4ZWwpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEZvciBpbWFnZXMgd2l0aG91dCBhbHBoYSwgcmV0dXJuIGFscGhh
IG9mIDB4ZmYuCi0gICAgICAgICAgICBpZiAobV9iaXRNYXNrc1szXSA9PSAwKQotICAgICAgICAg
ICAgICAgIHJldHVybiAweGZmOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50KHBp
eGVsLCAzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgcGl4ZWwg
dG8gdGhlIGNvbG9yIGdpdmVuIGJ5IHxjb2xvckluZGV4fC4gIFRoaXMgYWxzbwotICAgICAgICAv
LyBpbmNyZW1lbnRzIHRoZSByZWxldmFudCBsb2NhbCB2YXJpYWJsZXMgdG8gbW92ZSB0aGUgY3Vy
cmVudCBwaXhlbCByaWdodAotICAgICAgICAvLyBieSBvbmUuCi0gICAgICAgIGlubGluZSB2b2lk
IHNldEkoc2l6ZV90IGNvbG9ySW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEo
bV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYlJlZCwgbV9jb2xvclRhYmxlW2NvbG9ySW5kZXhd
LnJnYkdyZWVuLAotICAgICAgICAgICAgICAgICAgICBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0u
cmdiQmx1ZSwgMHhmZik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBMaWtlIHNldEkoKSwgYnV0
IHdpdGggdGhlIGluZGl2aWR1YWwgY29tcG9uZW50IHZhbHVlcyBzcGVjaWZpZWQuCi0gICAgICAg
IGlubGluZSB2b2lkIHNldFJHQkEodW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWdu
ZWQgYmx1ZSwgdW5zaWduZWQgYWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJHQkEzMkJ1
ZmZlcjo6c2V0UkdCQSgKLSAgICAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3Qo
KS5iaXRtYXAoKS5nZXRBZGRyMzIobV9jb29yZC54KCksIG1fY29vcmQueSgpKSwKLSAgICAgICAg
ICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgICAgICBtX2Nvb3JkLm1v
dmUoMSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGaWxscyBwaXhlbHMgZnJvbSB0aGUg
Y3VycmVudCBYLWNvb3JkaW5hdGUgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLAotICAgICAgICAv
LyB8ZW5kQ29vcmR8IHdpdGggdGhlIGNvbG9yIGdpdmVuIGJ5IHRoZSBpbmRpdmlkdWFsIGNvbXBv
bmVudHMuICBUaGlzIGFsc28KLSAgICAgICAgLy8gaW5jcmVtZW50cyB0aGUgcmVsZXZhbnQgbG9j
YWwgdmFyaWFibGVzIHRvIG1vdmUgdGhlIGN1cnJlbnQgcGl4ZWwgcmlnaHQKLSAgICAgICAgLy8g
dG8gfGVuZENvb3JkfC4KLSAgICAgICAgaW5saW5lIHZvaWQgZmlsbFJHQkEoaW50IGVuZENvb3Jk
LCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLCB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCBh
bHBoYSkKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKG1fY29vcmQueCgpIDwgZW5kQ29v
cmQpCi0gICAgICAgICAgICAgICAgc2V0UkdCQShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBSZXNldHMgdGhlIHJlbGV2YW50IGxvY2FsIHZhcmlhYmxl
cyB0byBzdGFydCBkcmF3aW5nIGF0IHRoZSBsZWZ0IGVkZ2Ugb2YKLSAgICAgICAgLy8gdGhlICJu
ZXh0IiByb3csIHdoZXJlICJuZXh0IiBpcyBhYm92ZSBvciBiZWxvdyB0aGUgY3VycmVudCByb3cg
ZGVwZW5kaW5nCi0gICAgICAgIC8vIG9uIHRoZSB2YWx1ZSBvZiB8bV9pc1RvcERvd258LgotICAg
ICAgICB2b2lkIG1vdmVCdWZmZXJUb05leHRSb3coKTsKLQotICAgICAgICAvLyBUaGUgQk1QIGlu
Zm8gaGVhZGVyLgotICAgICAgICBCaXRtYXBJbmZvSGVhZGVyIG1faW5mb0hlYWRlcjsKLQotICAg
ICAgICAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gT1MvMiAxLnggKGFrYSBXaW5kb3dzIDIueCkgQk1Q
LiAgVGhlIHN0cnVjdCBsYXlvdXRzCi0gICAgICAgIC8vIGZvciB0aGlzIHR5cGUgb2YgQk1QIGFy
ZSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgbGF0ZXIsIG1vcmUgY29tbW9uCi0gICAgICAg
IC8vIGZvcm1hdHMuCi0gICAgICAgIGJvb2wgbV9pc09TMjF4OwotCi0gICAgICAgIC8vIFRydWUg
aWYgdGhpcyBpcyBhbiBPUy8yIDIueCBCTVAuICBUaGUgbWVhbmluZ3Mgb2YgY29tcHJlc3Npb24g
dHlwZXMgMwotICAgICAgICAvLyBhbmQgNCBmb3IgdGhpcyB0eXBlIG9mIEJNUCBkaWZmZXIgZnJv
bSBXaW5kb3dzIFYzKyBCTVBzLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIHdpbGwgYmUg
ZmFsc2VseSBuZWdhdGl2ZSBpbiBzb21lIGNhc2VzLCBidXQgb25seSBvbmVzIHdoZXJlIHRoZSB3
YXkKLSAgICAgICAgLy8gd2UgbWlzaW50ZXJwcmV0IHRoZSBkYXRhIGlzIGlycmVsZXZhbnQuCi0g
ICAgICAgIGJvb2wgbV9pc09TMjJ4OwotCi0gICAgICAgIC8vIFRydWUgaWYgdGhlIEJNUCBpcyBu
b3QgdmVydGljYWxseSBmbGlwcGVkLCB0aGF0IGlzLCB0aGUgZmlyc3QgbGluZSBvZgotICAgICAg
ICAvLyByYXN0ZXIgZGF0YSBpbiB0aGUgZmlsZSBpcyB0aGUgdG9wIGxpbmUgb2YgdGhlIGltYWdl
LgotICAgICAgICBib29sIG1faXNUb3BEb3duOwotCi0gICAgICAgIC8vIFRoZXNlIGZsYWdzIGdl
dCBzZXQgdG8gZmFsc2UgYXMgd2UgZmluaXNoIGVhY2ggcHJvY2Vzc2luZyBzdGFnZS4KLSAgICAg
ICAgYm9vbCBtX25lZWRUb1Byb2Nlc3NCaXRtYXNrczsKLSAgICAgICAgYm9vbCBtX25lZWRUb1By
b2Nlc3NDb2xvclRhYmxlOwotCi0gICAgICAgIC8vIE1hc2tzL29mZnNldHMgZm9yIHRoZSBjb2xv
ciB2YWx1ZXMgZm9yIG5vbi1wYWxldHRlIGZvcm1hdHMuICBUaGVzZSBhcmUKLSAgICAgICAgLy8g
Yml0d2lzZSwgd2l0aCBhcnJheSBlbnRyaWVzIDAsIDEsIDIsIDMgY29ycmVzcG9uZGluZyB0byBS
LCBHLCBCLCBBLgotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgcmlnaHQvbGVmdCBzaGlmdCB2
YWx1ZXMgYXJlIG1lYW50IHRvIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIG1hc2tzLgotICAgICAgICAv
LyBXZSBuZWVkIHRvIHJpZ2h0IHNoaWZ0IHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBiaXRmaWVsZHMn
IG9mZnNldHMgaW50byB0aGUKLSAgICAgICAgLy8gMzIgYml0cyBvZiBwaXhlbCBkYXRhLCBhbmQg
bGVmdCBzaGlmdCB0byBzY2FsZSB0aGUgY29sb3IgdmFsdWVzIHVwIGZvcgotICAgICAgICAvLyBm
aWVsZHMgd2l0aCBsZXNzIHRoYW4gOCBiaXRzIG9mIHByZWNpc2lvbi4gIFNhZGx5LCB3ZSBjYW4n
dCBqdXN0IGNvbWJpbmUKLSAgICAgICAgLy8gdGhlc2UgaW50byBvbmUgc2hpZnQgdmFsdWUgYmVj
YXVzZSB0aGUgbmV0IHNoaWZ0IGFtb3VudCBjb3VsZCBnbyBlaXRoZXIKLSAgICAgICAgLy8gZGly
ZWN0aW9uLiAgKElmIG9ubHkgIjw8IC14IiB3ZXJlIGVxdWl2YWxlbnQgdG8gIj4+IHgiLi4uKQot
ICAgICAgICB1aW50MzJfdCBtX2JpdE1hc2tzWzRdOwotICAgICAgICBpbnQgbV9iaXRTaGlmdHNS
aWdodFs0XTsKLSAgICAgICAgaW50IG1fYml0U2hpZnRzTGVmdFs0XTsKLQotICAgICAgICAvLyBU
aGUgY29sb3IgcGFsZXR0ZSwgZm9yIHBhbGV0dGVkIGZvcm1hdHMuCi0gICAgICAgIHNpemVfdCBt
X3RhYmxlU2l6ZUluQnl0ZXM7Ci0gICAgICAgIFZlY3RvcjxSR0JUcmlwbGU+IG1fY29sb3JUYWJs
ZTsKLQotICAgICAgICAvLyBUaGUgY29vcmRpbmF0ZSB0byB3aGljaCB3ZSd2ZSBkZWNvZGVkIHRo
ZSBpbWFnZS4KLSAgICAgICAgSW50UG9pbnQgbV9jb29yZDsKLQotICAgICAgICAvLyBWYXJpYWJs
ZXMgdGhhdCB0cmFjayB3aGV0aGVyIHdlJ3ZlIHNlZW4gcGl4ZWxzIHdpdGggYWxwaGEgdmFsdWVz
ICE9IDAKLSAgICAgICAgLy8gYW5kID09IDAsIHJlc3BlY3RpdmVseS4gIFNlZSBjb21tZW50cyBp
biBwcm9jZXNzTm9uUkxFRGF0YSgpIG9uIGhvdwotICAgICAgICAvLyB0aGVzZSBhcmUgdXNlZC4K
LSAgICAgICAgYm9vbCBtX3NlZW5Ob25aZXJvQWxwaGFQaXhlbDsKLSAgICAgICAgYm9vbCBtX3Nl
ZW5aZXJvQWxwaGFQaXhlbDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZgorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0K
KyAqIG1ldDoNCisgKiANCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4NCisgKiANCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIEJNUElt
YWdlUmVhZGVyX2gNCisjZGVmaW5lIEJNUEltYWdlUmVhZGVyX2gNCisNCisjaW5jbHVkZSA8c3Rk
aW50Lmg+DQorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIg0KKw0KK25hbWVzcGFjZSBXZWJDb3Jl
IHsNCisNCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIGEgQk1QIGltYWdlLiAgSXQgaXMgdXNl
ZCBhcyBhIGJhc2UgZm9yIHRoZSBCTVAgYW5kIElDTw0KKyAgICAvLyBkZWNvZGVycywgd2hpY2gg
d3JhcCBpdCBpbiB0aGUgYXBwcm9wcmlhdGUgY29kZSB0byByZWFkIGZpbGUgaGVhZGVycywgZXRj
Lg0KKyAgICBjbGFzcyBCTVBJbWFnZVJlYWRlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgew0KKyAg
ICBwdWJsaWM6DQorICAgICAgICBCTVBJbWFnZVJlYWRlcigpOw0KKw0KKyAgICAgICAgLy8gRG9l
cyB0aGUgYWN0dWFsIGRlY29kaW5nLiAgfGRhdGF8IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBmaWxlLA0KKyAgICAgICAgLy8gYnV0IG1heSBiZSBpbmNvbXBsZXRlLg0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGRlY29kZUltYWdlKFNoYXJlZEJ1ZmZlciogZGF0YSkgPSAwOw0KKw0KKyAg
ICAgICAgLy8gSW1hZ2VEZWNvZGVyDQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsNCisgICAgICAgIHZpcnR1YWwg
UkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsNCisNCisgICAg
cHJvdGVjdGVkOg0KKyAgICAgICAgZW51bSBBbmRNYXNrU3RhdGUgew0KKyAgICAgICAgICAgIE5v
bmUsDQorICAgICAgICAgICAgTm90WWV0RGVjb2RlZCwNCisgICAgICAgICAgICBEZWNvZGluZywN
CisgICAgICAgIH07DQorDQorICAgICAgICAvLyBEZWNvZGVzIGEgc2luZ2xlIEJNUCwgc3RhcnRp
bmcgd2l0aCBhbiBpbmZvIGhlYWRlci4NCisgICAgICAgIHZvaWQgZGVjb2RlQk1QKFNoYXJlZEJ1
ZmZlciogZGF0YSk7DQorDQorICAgICAgICAvLyBSZWFkIGEgdmFsdWUgZnJvbSB8ZGF0YVttX2Rl
Y29kZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0XXwsIGNvbnZlcnRpbmcNCisgICAgICAgIC8v
IGZyb20gbGl0dGxlIHRvIG5hdGl2ZSBlbmRpYW5uZXNzLg0KKyAgICAgICAgaW5saW5lIHVpbnQx
Nl90IHJlYWRVaW50MTYoU2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQgYWRkaXRpb25hbE9mZnNldCkg
Y29uc3QNCisgICAgICAgIHsNCisgICAgICAgICAgICB1aW50MTZfdCByZXN1bHQ7DQorICAgICAg
ICAgICAgbWVtY3B5KCZyZXN1bHQsICZkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgYWRk
aXRpb25hbE9mZnNldF0sIDIpOw0KKyAgICAgICAgI2lmIFBMQVRGT1JNKEJJR19FTkRJQU4pDQor
ICAgICAgICAgICAgcmVzdWx0ID0gKChyZXN1bHQgJiAweGZmKSA8PCA4KSB8ICgocmVzdWx0ICYg
MHhmZjAwKSA+PiA4KTsNCisgICAgICAgICNlbmRpZg0KKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7DQorICAgICAgICB9DQorDQorICAgICAgICBpbmxpbmUgdWludDMyX3QgcmVhZFVpbnQzMihT
aGFyZWRCdWZmZXIqIGRhdGEsIGludCBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdA0KKyAgICAgICAg
ew0KKyAgICAgICAgICAgIHVpbnQzMl90IHJlc3VsdDsNCisgICAgICAgICAgICBtZW1jcHkoJnJl
c3VsdCwgJmRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0XSwg
NCk7DQorICAgICAgICAjaWYgUExBVEZPUk0oQklHX0VORElBTikNCisgICAgICAgICAgICByZXN1
bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDI0KSB8ICgocmVzdWx0ICYgMHhmZjAwKSA8PCA4KSB8
DQorICAgICAgICAgICAgICAgICgocmVzdWx0ICYgMHhmZjAwMDApID4+IDgpIHwgKChyZXN1bHQg
JiAweGZmMDAwMDAwKSA+PiAyNCk7DQorICAgICAgICAjZW5kaWYNCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0Ow0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gQW4gaW5kZXggaW50byB8bV9k
YXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxyZWFkeSBkZWNvZGVkLg0KKyAgICAg
ICAgc2l6ZV90IG1fZGVjb2RlZE9mZnNldDsNCisNCisgICAgICAgIC8vIFRoZSBmaWxlIG9mZnNl
dCBhdCB3aGljaCB0aGUgQk1QIGluZm8gaGVhZGVyIHN0YXJ0cy4NCisgICAgICAgIHNpemVfdCBt
X2hlYWRlck9mZnNldDsNCisNCisgICAgICAgIC8vIFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0
aGUgYWN0dWFsIGltYWdlIGJpdHMgc3RhcnQuICBXaGVuIGRlY29kaW5nIElDTw0KKyAgICAgICAg
Ly8gZmlsZXMsIHRoaXMgaXMgc2V0IHRvIDAsIHNpbmNlIGl0J3Mgbm90IHN0b3JlZCBhbnl3aGVy
ZSBpbiBhIGhlYWRlcjsgdGhlDQorICAgICAgICAvLyByZWFkZXIgZnVuY3Rpb25zIGV4cGVjdCB0
aGUgaW1hZ2UgZGF0YSB0byBzdGFydCBpbW1lZGlhdGVseSBhZnRlciB0aGUNCisgICAgICAgIC8v
IGhlYWRlciBhbmQgKGlmIG5lY2Vzc2FyeSkgY29sb3IgdGFibGUuDQorICAgICAgICBzaXplX3Qg
bV9pbWdEYXRhT2Zmc2V0Ow0KKw0KKyAgICAgICAgLy8gSUNPcyBzdG9yZSBhIDFicHAgIm1hc2si
IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWluIGJpdG1hcCBpbWFnZSBkYXRhDQorICAgICAgICAv
LyAoYW5kLCBjb25mdXNpbmdseSwgYWRkIGl0cyBoZWlnaHQgdG8gdGhlIGJpSGVpZ2h0IHZhbHVl
IGluIHRoZSBpbmZvDQorICAgICAgICAvLyBoZWFkZXIsIHRodXMgZG91YmxpbmcgaXQpLiAgVGhp
cyB2YXJpYWJsZSB0cmFja3Mgd2hldGhlciB3ZSBoYXZlIHN1Y2ggYQ0KKyAgICAgICAgLy8gbWFz
ayBhbmQgaWYgd2UndmUgc3RhcnRlZCBkZWNvZGluZyBpdCB5ZXQuDQorICAgICAgICBBbmRNYXNr
U3RhdGUgbV9hbmRNYXNrU3RhdGU7DQorDQorICAgIHByaXZhdGU6DQorICAgICAgICAvLyBUaGUg
dmFyaW91cyBCTVAgY29tcHJlc3Npb24gdHlwZXMuICBXZSBkb24ndCBjdXJyZW50bHkgZGVjb2Rl
IGFsbCB0aGVzZS4NCisgICAgICAgIGVudW0gQ29tcHJlc3Npb25UeXBlIHsNCisgICAgICAgICAg
ICAvLyBVbml2ZXJzYWwgdHlwZXMNCisgICAgICAgICAgICBSR0IgPSAwLA0KKyAgICAgICAgICAg
IFJMRTggPSAxLA0KKyAgICAgICAgICAgIFJMRTQgPSAyLA0KKyAgICAgICAgICAgIC8vIFdpbmRv
d3MgVjMrIG9ubHkNCisgICAgICAgICAgICBCSVRGSUVMRFMgPSAzLA0KKyAgICAgICAgICAgIEpQ
RUcgPSA0LA0KKyAgICAgICAgICAgIFBORyA9IDUsDQorICAgICAgICAgICAgLy8gT1MvMiAyLngt
b25seQ0KKyAgICAgICAgICAgIEhVRkZNQU4xRCwgIC8vIFN0b3JlZCBpbiBmaWxlIGFzIDMNCisg
ICAgICAgICAgICBSTEUyNCwgICAgICAvLyBTdG9yZWQgaW4gZmlsZSBhcyA0DQorICAgICAgICB9
Ow0KKw0KKyAgICAgICAgLy8gVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBXaW5kb3dzIEJJVE1BUElO
Rk9IRUFERVIgYW5kIFJHQlRSSVBMRSBzdHJ1Y3RzLA0KKyAgICAgICAgLy8gYnV0IHdpdGggdW5u
ZWNlc3NhcnkgZW50cmllcyByZW1vdmVkLg0KKyAgICAgICAgc3RydWN0IEJpdG1hcEluZm9IZWFk
ZXIgew0KKyAgICAgICAgICAgIHVpbnQzMl90IGJpU2l6ZTsNCisgICAgICAgICAgICBpbnQzMl90
IGJpV2lkdGg7DQorICAgICAgICAgICAgaW50MzJfdCBiaUhlaWdodDsNCisgICAgICAgICAgICB1
aW50MTZfdCBiaUJpdENvdW50Ow0KKyAgICAgICAgICAgIENvbXByZXNzaW9uVHlwZSBiaUNvbXBy
ZXNzaW9uOw0KKyAgICAgICAgICAgIHVpbnQzMl90IGJpQ2xyVXNlZDsNCisgICAgICAgIH07DQor
ICAgICAgICBzdHJ1Y3QgUkdCVHJpcGxlIHsNCisgICAgICAgICAgICB1aW50OF90IHJnYkJsdWU7
DQorICAgICAgICAgICAgdWludDhfdCByZ2JHcmVlbjsNCisgICAgICAgICAgICB1aW50OF90IHJn
YlJlZDsNCisgICAgICAgIH07DQorDQorICAgICAgICAvLyBEZXRlcm1pbmVzIHRoZSBzaXplIG9m
IHRoZSBCTVAgaW5mbyBoZWFkZXIuICBSZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgaXMNCisgICAg
ICAgIC8vIHZhbGlkLg0KKyAgICAgICAgYm9vbCBnZXRJbmZvSGVhZGVyU2l6ZShTaGFyZWRCdWZm
ZXIqIGRhdGEpOw0KKw0KKyAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBCTVAgaW5mbyBoZWFkZXIu
ICBSZXR1cm5zIHRydWUgaWYgdGhlIGluZm8gaGVhZGVyIGNvdWxkIGJlDQorICAgICAgICAvLyBk
ZWNvZGVkLg0KKyAgICAgICAgYm9vbCBwcm9jZXNzSW5mb0hlYWRlcihTaGFyZWRCdWZmZXIqIGRh
dGEpOw0KKw0KKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBwcm9jZXNzSW5mb0hlYWRl
cigpIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCByZWFkaW5nIG9mDQorICAgICAgICAvLyBoZWFkZXIg
dmFsdWVzIGZyb20gdGhlIGJ5dGUgc3RyZWFtLiAgUmV0dXJucyBmYWxzZSBvbiBlcnJvci4NCisg
ICAgICAgIGJvb2wgcmVhZEluZm9IZWFkZXIoU2hhcmVkQnVmZmVyKiBkYXRhKTsNCisNCisgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlzIGEgV2luZG93cyBWNCsgQk1QLg0KKyAgICAg
ICAgaW5saW5lIGJvb2wgaXNXaW5kb3dzVjRQbHVzKCkgY29uc3QNCisgICAgICAgIHsNCisgICAg
ICAgICAgICAvLyBXaW5kb3dzIFY0IGluZm8gaGVhZGVyIGlzIDEwOCBieXRlcy4gIFY1IGlzIDEy
NCBieXRlcy4NCisgICAgICAgICAgICByZXR1cm4gKG1faW5mb0hlYWRlci5iaVNpemUgPT0gMTA4
KSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSAxMjQpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb25zaXN0ZW5jeSBlcnJvcnMgYXJlIGZvdW5kIGluIHRo
ZSBpbmZvIGhlYWRlci4NCisgICAgICAgIGJvb2wgaXNJbmZvSGVhZGVyVmFsaWQoKSBjb25zdDsN
CisNCisgICAgICAgIC8vIEZvciBCSV9CSVRGSUVMRFMgaW1hZ2VzLCBpbml0aWFsaXplcyB0aGUg
bV9iaXRNYXNrc1tdIGFuZCBtX2JpdE9mZnNldHNbXQ0KKyAgICAgICAgLy8gYXJyYXlzLiAgcHJv
Y2Vzc0luZm9IZWFkZXIoKSB3aWxsIGluaXRpYWxpemUgdGhlc2UgZm9yIG90aGVyIGNvbXByZXNz
aW9uDQorICAgICAgICAvLyB0eXBlcyB3aGVyZSBuZWVkZWQuDQorICAgICAgICBib29sIHByb2Nl
c3NCaXRtYXNrcyhTaGFyZWRCdWZmZXIqIGRhdGEpOw0KKw0KKyAgICAgICAgLy8gRm9yIHBhbGV0
dGVkIGltYWdlcywgYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgbV9jb2xvclRhYmxlW10g
YXJyYXkuDQorICAgICAgICBib29sIHByb2Nlc3NDb2xvclRhYmxlKFNoYXJlZEJ1ZmZlciogZGF0
YSk7DQorDQorICAgICAgICAvLyBQcm9jZXNzZXMgYW4gUkxFLWVuY29kZWQgaW1hZ2UuICBSZXR1
cm5zIHRydWUgaWYgdGhlIGVudGlyZSBpbWFnZSB3YXMNCisgICAgICAgIC8vIGRlY29kZWQuDQor
ICAgICAgICBib29sIHByb2Nlc3NSTEVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSk7DQorDQorICAg
ICAgICAvLyBQcm9jZXNzZXMgYSBzZXQgb2Ygbm9uLVJMRS1jb21wcmVzc2VkIHBpeGVscy4gIFR3
byBjYXNlczoNCisgICAgICAgIC8vICAgKiBpblJMRSA9IHRydWU6IHRoZSBkYXRhIGlzIGluc2lk
ZSBhbiBSTEUtZW5jb2RlZCBiaXRtYXAuICBUcmllcyB0bw0KKyAgICAgICAgLy8gICAgIHByb2Nl
c3MgfG51bVBpeGVsc3wgcGl4ZWxzIG9uIHRoZSBjdXJyZW50IHJvdzsgcmV0dXJucyB0cnVlIG9u
DQorICAgICAgICAvLyAgICAgc3VjY2Vzcy4NCisgICAgICAgIC8vICAgKiBpblJMRSA9IGZhbHNl
OiB0aGUgZGF0YSBpcyBpbnNpZGUgYSBub24tUkxFLWVuY29kZWQgYml0bWFwLg0KKyAgICAgICAg
Ly8gICAgIHxudW1QaXhlbHN8IGlzIGlnbm9yZWQuICBFeHBlY3RzIHxtX2Nvb3JkfCB0byBwb2lu
dCBhdCB0aGUgYmVnaW5uaW5nDQorICAgICAgICAvLyAgICAgb2YgdGhlIG5leHQgcm93IHRvIGJl
IGRlY29kZWQuICBUcmllcyB0byBwcm9jZXNzIGFzIG1hbnkgY29tcGxldGUNCisgICAgICAgIC8v
ICAgICByb3dzIGFzIHBvc3NpYmxlLiAgUmV0dXJucyB0cnVlIGlmIHRoZSB3aG9sZSBpbWFnZSB3
YXMgZGVjb2RlZC4NCisgICAgICAgIGJvb2wgcHJvY2Vzc05vblJMRURhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGluUkxFLCBpbnQgbnVtUGl4ZWxzKTsNCisNCisgICAgICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgY3VycmVudCB5LWNvb3JkaW5hdGUgcGx1cyB8bnVtUm93c3wgd291bGQg
YmUgcGFzdA0KKyAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgaW1hZ2UuICBIZXJlICJwbHVzIiBt
ZWFucyAidG93YXJkIHRoZSBlbmQgb2YgdGhlIGltYWdlIiwNCisgICAgICAgIC8vIHNvIGRvd253
YXJkcyBmb3IgbV9pc1RvcERvd24gaW1hZ2VzIGFuZCB1cHdhcmRzIG90aGVyd2lzZS4NCisgICAg
ICAgIGlubGluZSBib29sIHBhc3RFbmRPZkltYWdlKGludCBudW1Sb3dzKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICAgIHJldHVybiBtX2lzVG9wRG93bg0KKyAgICAgICAgICAgICAgICA/ICgobV9j
b29yZC55KCkgKyBudW1Sb3dzKSA+PSBzaXplKCkuaGVpZ2h0KCkpDQorICAgICAgICAgICAgICAg
IDogKChtX2Nvb3JkLnkoKSAtIG51bVJvd3MpIDwgMCk7DQorICAgICAgICB9DQorDQorICAgICAg
ICAvLyBSZXR1cm5zIHRoZSBwaXhlbCBkYXRhIGZvciB0aGUgY3VycmVudCBYIGNvb3JkaW5hdGUg
aW4gYSB1aW50MzJfdC4NCisgICAgICAgIC8vIEFzc3VtZXMgbV9kZWNvZGVkT2Zmc2V0IGhhcyBi
ZWVuIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50DQorICAgICAgICAvLyByb3cu
DQorICAgICAgICAvLyBOT1RFOiBPbmx5IGFzIG1hbnkgYnl0ZXMgb2YgdGhlIHJldHVybiB2YWx1
ZSBhcyBhcmUgbmVlZGVkIHRvIGhvbGQgdGhlDQorICAgICAgICAvLyBwaXhlbCBkYXRhIHdpbGwg
YWN0dWFsbHkgYmUgc2V0Lg0KKyAgICAgICAgaW5saW5lIHVpbnQzMl90IHJlYWRDdXJyZW50UGl4
ZWwoU2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQgYnl0ZXNQZXJQaXhlbCkgY29uc3QNCisgICAgICAg
IHsNCisgICAgICAgICAgICBjb25zdCBpbnQgYWRkaXRpb25hbE9mZnNldCA9IG1fY29vcmQueCgp
ICogYnl0ZXNQZXJQaXhlbDsNCisgICAgICAgICAgICBzd2l0Y2ggKGJ5dGVzUGVyUGl4ZWwpIHsN
CisgICAgICAgICAgICBjYXNlIDI6DQorICAgICAgICAgICAgICAgIHJldHVybiByZWFkVWludDE2
KGRhdGEsIGFkZGl0aW9uYWxPZmZzZXQpOw0KKw0KKyAgICAgICAgICAgIGNhc2UgMzogew0KKyAg
ICAgICAgICAgICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHdlIG5ldmVyIHNldCB0aGUg
bW9zdCBzaWduaWZpY2FudCBieXRlIG9mDQorICAgICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4g
dmFsdWUgaGVyZSBpbiBsaXR0bGUtZW5kaWFuIG1vZGUsIHRoZSBjYWxsZXIgd29uJ3QNCisgICAg
ICAgICAgICAgICAgLy8gcmVhZCBpdC4NCisgICAgICAgICAgICAgICAgdWludDMyX3QgcGl4ZWw7
DQorICAgICAgICAgICAgICAgIG1lbWNweSgmcGl4ZWwsDQorICAgICAgICAgICAgICAgICAgICAg
ICAmZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXRdLCAzKTsN
CisgICAgICAgICNpZiBQTEFURk9STShCSUdfRU5ESUFOKQ0KKyAgICAgICAgICAgICAgICBwaXhl
bCA9ICgocGl4ZWwgJiAweGZmMDApIDw8IDgpIHwgKChwaXhlbCAmIDB4ZmYwMDAwKSA+PiA4KSB8
DQorICAgICAgICAgICAgICAgICAgICAoKHBpeGVsICYgMHhmZjAwMDAwMCkgPj4gMjQpOw0KKyAg
ICAgICAgI2VuZGlmDQorICAgICAgICAgICAgICAgIHJldHVybiBwaXhlbDsNCisgICAgICAgICAg
ICB9DQorDQorICAgICAgICAgICAgY2FzZSA0Og0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVh
ZFVpbnQzMihkYXRhLCBhZGRpdGlvbmFsT2Zmc2V0KTsNCisNCisgICAgICAgICAgICBkZWZhdWx0
Og0KKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsNCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8g
UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRlc2lyZWQgY29tcG9uZW50ICgwLCAxLCAyLCAzID09
IFIsIEcsIEIsIEEpIGluDQorICAgICAgICAvLyB0aGUgZ2l2ZW4gcGl4ZWwgZGF0YS4NCisgICAg
ICAgIGlubGluZSB1bnNpZ25lZCBnZXRDb21wb25lbnQodWludDMyX3QgcGl4ZWwsIGludCBjb21w
b25lbnQpIGNvbnN0DQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuICgocGl4ZWwgJiBt
X2JpdE1hc2tzW2NvbXBvbmVudF0pID4+IG1fYml0U2hpZnRzUmlnaHRbY29tcG9uZW50XSkNCisg
ICAgICAgICAgICAgICAgPDwgbV9iaXRTaGlmdHNMZWZ0W2NvbXBvbmVudF07DQorICAgICAgICB9
DQorDQorICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0QWxwaGEodWludDMyX3QgcGl4ZWwpIGNv
bnN0DQorICAgICAgICB7DQorICAgICAgICAgICAgLy8gRm9yIGltYWdlcyB3aXRob3V0IGFscGhh
LCByZXR1cm4gYWxwaGEgb2YgMHhmZi4NCisgICAgICAgICAgICBpZiAobV9iaXRNYXNrc1szXSA9
PSAwKQ0KKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZjsNCisNCisgICAgICAgICAgICByZXR1
cm4gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIFNl
dHMgdGhlIGN1cnJlbnQgcGl4ZWwgdG8gdGhlIGNvbG9yIGdpdmVuIGJ5IHxjb2xvckluZGV4fC4g
IFRoaXMgYWxzbw0KKyAgICAgICAgLy8gaW5jcmVtZW50cyB0aGUgcmVsZXZhbnQgbG9jYWwgdmFy
aWFibGVzIHRvIG1vdmUgdGhlIGN1cnJlbnQgcGl4ZWwgcmlnaHQNCisgICAgICAgIC8vIGJ5IG9u
ZS4NCisgICAgICAgIGlubGluZSB2b2lkIHNldEkoc2l6ZV90IGNvbG9ySW5kZXgpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgc2V0UkdCQShtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiUmVk
LCBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiR3JlZW4sDQorICAgICAgICAgICAgICAgICAg
ICBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiQmx1ZSwgMHhmZik7DQorICAgICAgICB9DQor
DQorICAgICAgICAvLyBMaWtlIHNldEkoKSwgYnV0IHdpdGggdGhlIGluZGl2aWR1YWwgY29tcG9u
ZW50IHZhbHVlcyBzcGVjaWZpZWQuDQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKHVuc2ln
bmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIGFscGhhKQ0K
KyAgICAgICAgew0KKyAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgNCisgICAgICAg
ICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuYml0bWFwKCkuZ2V0QWRkcjMyKG1f
Y29vcmQueCgpLCBtX2Nvb3JkLnkoKSksDQorICAgICAgICAgICAgICAgIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsNCisgICAgICAgICAgICBtX2Nvb3JkLm1vdmUoMSwgMCk7DQorICAgICAgICB9
DQorDQorICAgICAgICAvLyBGaWxscyBwaXhlbHMgZnJvbSB0aGUgY3VycmVudCBYLWNvb3JkaW5h
dGUgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLA0KKyAgICAgICAgLy8gfGVuZENvb3JkfCB3aXRo
IHRoZSBjb2xvciBnaXZlbiBieSB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzLiAgVGhpcyBhbHNv
DQorICAgICAgICAvLyBpbmNyZW1lbnRzIHRoZSByZWxldmFudCBsb2NhbCB2YXJpYWJsZXMgdG8g
bW92ZSB0aGUgY3VycmVudCBwaXhlbCByaWdodA0KKyAgICAgICAgLy8gdG8gfGVuZENvb3JkfC4N
CisgICAgICAgIGlubGluZSB2b2lkIGZpbGxSR0JBKGludCBlbmRDb29yZCwgdW5zaWduZWQgcmVk
LCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgYWxwaGEpDQorICAgICAg
ICB7DQorICAgICAgICAgICAgd2hpbGUgKG1fY29vcmQueCgpIDwgZW5kQ29vcmQpDQorICAgICAg
ICAgICAgICAgIHNldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOw0KKyAgICAgICAgfQ0K
Kw0KKyAgICAgICAgLy8gUmVzZXRzIHRoZSByZWxldmFudCBsb2NhbCB2YXJpYWJsZXMgdG8gc3Rh
cnQgZHJhd2luZyBhdCB0aGUgbGVmdCBlZGdlIG9mDQorICAgICAgICAvLyB0aGUgIm5leHQiIHJv
dywgd2hlcmUgIm5leHQiIGlzIGFib3ZlIG9yIGJlbG93IHRoZSBjdXJyZW50IHJvdyBkZXBlbmRp
bmcNCisgICAgICAgIC8vIG9uIHRoZSB2YWx1ZSBvZiB8bV9pc1RvcERvd258Lg0KKyAgICAgICAg
dm9pZCBtb3ZlQnVmZmVyVG9OZXh0Um93KCk7DQorDQorICAgICAgICAvLyBUaGUgQk1QIGluZm8g
aGVhZGVyLg0KKyAgICAgICAgQml0bWFwSW5mb0hlYWRlciBtX2luZm9IZWFkZXI7DQorDQorICAg
ICAgICAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gT1MvMiAxLnggKGFrYSBXaW5kb3dzIDIueCkgQk1Q
LiAgVGhlIHN0cnVjdCBsYXlvdXRzDQorICAgICAgICAvLyBmb3IgdGhpcyB0eXBlIG9mIEJNUCBh
cmUgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIGxhdGVyLCBtb3JlIGNvbW1vbg0KKyAgICAg
ICAgLy8gZm9ybWF0cy4NCisgICAgICAgIGJvb2wgbV9pc09TMjF4Ow0KKw0KKyAgICAgICAgLy8g
VHJ1ZSBpZiB0aGlzIGlzIGFuIE9TLzIgMi54IEJNUC4gIFRoZSBtZWFuaW5ncyBvZiBjb21wcmVz
c2lvbiB0eXBlcyAzDQorICAgICAgICAvLyBhbmQgNCBmb3IgdGhpcyB0eXBlIG9mIEJNUCBkaWZm
ZXIgZnJvbSBXaW5kb3dzIFYzKyBCTVBzLg0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIFRoaXMg
d2lsbCBiZSBmYWxzZWx5IG5lZ2F0aXZlIGluIHNvbWUgY2FzZXMsIGJ1dCBvbmx5IG9uZXMgd2hl
cmUgdGhlIHdheQ0KKyAgICAgICAgLy8gd2UgbWlzaW50ZXJwcmV0IHRoZSBkYXRhIGlzIGlycmVs
ZXZhbnQuDQorICAgICAgICBib29sIG1faXNPUzIyeDsNCisNCisgICAgICAgIC8vIFRydWUgaWYg
dGhlIEJNUCBpcyBub3QgdmVydGljYWxseSBmbGlwcGVkLCB0aGF0IGlzLCB0aGUgZmlyc3QgbGlu
ZSBvZg0KKyAgICAgICAgLy8gcmFzdGVyIGRhdGEgaW4gdGhlIGZpbGUgaXMgdGhlIHRvcCBsaW5l
IG9mIHRoZSBpbWFnZS4NCisgICAgICAgIGJvb2wgbV9pc1RvcERvd247DQorDQorICAgICAgICAv
LyBUaGVzZSBmbGFncyBnZXQgc2V0IHRvIGZhbHNlIGFzIHdlIGZpbmlzaCBlYWNoIHByb2Nlc3Np
bmcgc3RhZ2UuDQorICAgICAgICBib29sIG1fbmVlZFRvUHJvY2Vzc0JpdG1hc2tzOw0KKyAgICAg
ICAgYm9vbCBtX25lZWRUb1Byb2Nlc3NDb2xvclRhYmxlOw0KKw0KKyAgICAgICAgLy8gTWFza3Mv
b2Zmc2V0cyBmb3IgdGhlIGNvbG9yIHZhbHVlcyBmb3Igbm9uLXBhbGV0dGUgZm9ybWF0cy4gIFRo
ZXNlIGFyZQ0KKyAgICAgICAgLy8gYml0d2lzZSwgd2l0aCBhcnJheSBlbnRyaWVzIDAsIDEsIDIs
IDMgY29ycmVzcG9uZGluZyB0byBSLCBHLCBCLCBBLg0KKyAgICAgICAgLy8NCisgICAgICAgIC8v
IFRoZSByaWdodC9sZWZ0IHNoaWZ0IHZhbHVlcyBhcmUgbWVhbnQgdG8gYmUgYXBwbGllZCBhZnRl
ciB0aGUgbWFza3MuDQorICAgICAgICAvLyBXZSBuZWVkIHRvIHJpZ2h0IHNoaWZ0IHRvIGNvbXBl
bnNhdGUgZm9yIHRoZSBiaXRmaWVsZHMnIG9mZnNldHMgaW50byB0aGUNCisgICAgICAgIC8vIDMy
IGJpdHMgb2YgcGl4ZWwgZGF0YSwgYW5kIGxlZnQgc2hpZnQgdG8gc2NhbGUgdGhlIGNvbG9yIHZh
bHVlcyB1cCBmb3INCisgICAgICAgIC8vIGZpZWxkcyB3aXRoIGxlc3MgdGhhbiA4IGJpdHMgb2Yg
cHJlY2lzaW9uLiAgU2FkbHksIHdlIGNhbid0IGp1c3QgY29tYmluZQ0KKyAgICAgICAgLy8gdGhl
c2UgaW50byBvbmUgc2hpZnQgdmFsdWUgYmVjYXVzZSB0aGUgbmV0IHNoaWZ0IGFtb3VudCBjb3Vs
ZCBnbyBlaXRoZXINCisgICAgICAgIC8vIGRpcmVjdGlvbi4gIChJZiBvbmx5ICI8PCAteCIgd2Vy
ZSBlcXVpdmFsZW50IHRvICI+PiB4Ii4uLikNCisgICAgICAgIHVpbnQzMl90IG1fYml0TWFza3Nb
NF07DQorICAgICAgICBpbnQgbV9iaXRTaGlmdHNSaWdodFs0XTsNCisgICAgICAgIGludCBtX2Jp
dFNoaWZ0c0xlZnRbNF07DQorDQorICAgICAgICAvLyBUaGUgY29sb3IgcGFsZXR0ZSwgZm9yIHBh
bGV0dGVkIGZvcm1hdHMuDQorICAgICAgICBzaXplX3QgbV90YWJsZVNpemVJbkJ5dGVzOw0KKyAg
ICAgICAgVmVjdG9yPFJHQlRyaXBsZT4gbV9jb2xvclRhYmxlOw0KKw0KKyAgICAgICAgLy8gVGhl
IGNvb3JkaW5hdGUgdG8gd2hpY2ggd2UndmUgZGVjb2RlZCB0aGUgaW1hZ2UuDQorICAgICAgICBJ
bnRQb2ludCBtX2Nvb3JkOw0KKw0KKyAgICAgICAgLy8gVmFyaWFibGVzIHRoYXQgdHJhY2sgd2hl
dGhlciB3ZSd2ZSBzZWVuIHBpeGVscyB3aXRoIGFscGhhIHZhbHVlcyAhPSAwDQorICAgICAgICAv
LyBhbmQgPT0gMCwgcmVzcGVjdGl2ZWx5LiAgU2VlIGNvbW1lbnRzIGluIHByb2Nlc3NOb25STEVE
YXRhKCkgb24gaG93DQorICAgICAgICAvLyB0aGVzZSBhcmUgdXNlZC4NCisgICAgICAgIGJvb2wg
bV9zZWVuTm9uWmVyb0FscGhhUGl4ZWw7DQorICAgICAgICBib29sIG1fc2Vlblplcm9BbHBoYVBp
eGVsOw0KKyAgICB9Ow0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYNCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
R0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDcgKzEyNiw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KSAKICAgICAgICAgZGVjb2RlKEdJRlNpemVRdWVyeSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJu
ICFtX2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVy
biBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiAvLyBUaGUgdG90YWwgbnVt
YmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgV2lsbCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZv
ciB0aGUgYW5zd2VyCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
R0lGSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvR0lGSW1hZ2VSZWFkZXIuaAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VSZWFkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY3LDExICsxNjcsMTEgQEAgc3RydWN0IEdJRkltYWdlUmVhZGVyIHsKICAgICBp
bnQgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogRWl0aGVyIDg5IGZvciBHSUY4OSBvciA4NyBm
b3IgR0lGODcgKi8KICAgICB1bnNpZ25lZCBzY3JlZW5fd2lkdGg7ICAgICAgIC8qIExvZ2ljYWwg
c2NyZWVuIHdpZHRoICYgaGVpZ2h0ICovCiAgICAgdW5zaWduZWQgc2NyZWVuX2hlaWdodDsKLSAg
ICBpbnQgZ2xvYmFsX2NvbG9ybWFwX3NpemU7ICAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFw
IGFycmF5LiAqLwotICAgIHVuc2lnbmVkIGludCBpbWFnZXNfZGVjb2RlZDsgLyogQ291bnRzIGNv
bXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMgKi8KLSAgICBpbnQgaW1hZ2VzX2NvdW50
OyAgICAgICAgICAgIC8qIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5n
IGluY29tcGxldGUgZnJhbWVzKSAqLwotICAgIGludCBsb29wX2NvdW50OyAgICAgICAgICAgICAg
LyogTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3Bz
IGEgR0lGIHJlbmRlcnMuICovCisgICAgaW50IGdsb2JhbF9jb2xvcm1hcF9zaXplOyAgIC8qIFNp
emUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LiAqLworICAgIHVuc2lnbmVkIGltYWdlc19kZWNv
ZGVkOyAgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcyAqLwor
ICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAgICAgICAvKiBDb3VudGVkIGFsbCBmcmFtZXMgc2Vl
biBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykgKi8KKyAgICBpbnQgbG9vcF9j
b3VudDsgICAgICAgICAgICAgLyogTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRv
IGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBv
ZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4gKi8KICAgICAKICAgICAvLyBOb3QgcmVh
bGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQgdG8gbG9jYXRlIGhlcmUuCiAgICAgaW50IGNvdW50
OyAgICAgICAgICAgICAgICAgIC8qIFJlbWFpbmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jayAqLwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0lDT0ltYWdlRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9J
Q09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3NraWEvSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTE4ICsxLDExOCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElDT0ltYWdlRGVjb2Rlcl9oCi0jZGVmaW5l
IElDT0ltYWdlRGVjb2Rlcl9oCi0KLSNpbmNsdWRlICJCTVBJbWFnZVJlYWRlci5oIgotI2luY2x1
ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBU
aGlzIGNsYXNzIGRlY29kZXMgdGhlIElDTyBhbmQgQ1VSIGltYWdlIGZvcm1hdHMuCi0gICAgY2xh
c3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEJNUEltYWdlUmVhZGVyIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIC8vIFNlZSBjb21tZW50cyBvbiB8bV9wcmVmZXJyZWRJY29uU2l6ZXwgYmVsb3cu
Ci0gICAgICAgIElDT0ltYWdlRGVjb2Rlcihjb25zdCBJbnRTaXplJiBwcmVmZXJyZWRJY29uU2l6
ZSkKLSAgICAgICAgICAgIDogbV9wcmVmZXJyZWRJY29uU2l6ZShwcmVmZXJyZWRJY29uU2l6ZSkK
LSAgICAgICAgICAgICwgbV9pbWFnZVR5cGUoVW5rbm93bikKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9hbmRNYXNrU3RhdGUgPSBOb3RZZXREZWNvZGVkOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiaWNvIjsg
fQotCi0gICAgICAgIC8vIEJNUEltYWdlUmVhZGVyCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNv
ZGVJbWFnZShTaGFyZWRCdWZmZXIqIGRhdGEpOwotICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZl
ciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0KLSAgICAgICAgLy8gSW1hZ2VE
ZWNvZGVyCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGVudW0gSW1hZ2VUeXBlIHsKLSAgICAgICAgICAgIFVua25vd24sCi0gICAgICAgICAgICBC
TVAsCi0gICAgICAgICAgICBQTkcsCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gVGhlc2UgYXJl
IGJhc2VkIG9uIHRoZSBXaW5kb3dzIElDT05ESVIgYW5kIElDT05ESVJFTlRSWSBzdHJ1Y3RzLCBi
dXQKLSAgICAgICAgLy8gd2l0aCB1bm5lY2Vzc2FyeSBlbnRyaWVzIHJlbW92ZWQuCi0gICAgICAg
IHN0cnVjdCBJY29uRGlyZWN0b3J5IHsKLSAgICAgICAgICAgIHVpbnQxNl90IGlkQ291bnQ7Ci0g
ICAgICAgIH07Ci0gICAgICAgIHN0cnVjdCBJY29uRGlyZWN0b3J5RW50cnkgewotICAgICAgICAg
ICAgdWludDE2X3QgYldpZHRoOyAgIC8vIDE2IGJpdHMgc28gd2UgY2FuIHJlcHJlc2VudCAyNTYg
YXMgMjU2LCBub3QgMAotICAgICAgICAgICAgdWludDE2X3QgYkhlaWdodDsgIC8vICIKLSAgICAg
ICAgICAgIHVpbnQxNl90IHdCaXRDb3VudDsKLSAgICAgICAgICAgIHVpbnQzMl90IGR3SW1hZ2VP
ZmZzZXQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBJQ09ORElSIGF0
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEuICBSZXR1cm5zIHRydWUgaWYgdGhlCi0gICAgICAg
IC8vIGRpcmVjdG9yeSBjb3VsZCBiZSBkZWNvZGVkLgotICAgICAgICBib29sIHByb2Nlc3NEaXJl
Y3RvcnkoU2hhcmVkQnVmZmVyKik7Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBJQ09ORElS
RU5UUlkgcmVjb3JkcyBhZnRlciB0aGUgZGlyZWN0b3J5LiAgS2VlcHMgdGhlCi0gICAgICAgIC8v
ICJiZXN0IiBlbnRyeSBhcyB0aGUgb25lIHdlJ2xsIGRlY29kZS4gIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZW50cmllcyBjb3VsZAotICAgICAgICAvLyBiZSBkZWNvZGVkLgotICAgICAgICBib29sIHBy
b2Nlc3NEaXJlY3RvcnlFbnRyaWVzKFNoYXJlZEJ1ZmZlciopOwotCi0gICAgICAgIC8vIFJlYWRz
IGFuZCByZXR1cm5zIGEgZGlyZWN0b3J5IGVudHJ5IGZyb20gdGhlIGN1cnJlbnQgb2Zmc2V0IGlu
dG8gfGRhdGF8LgotICAgICAgICBJY29uRGlyZWN0b3J5RW50cnkgcmVhZERpcmVjdG9yeUVudHJ5
KFNoYXJlZEJ1ZmZlciopOwotCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB8ZW50cnl8IGlz
IGEgcHJlZmVyYWJsZSBpY29uIGVudHJ5IHRvIG1fZGlyRW50cnkuCi0gICAgICAgIC8vIExhcmdl
ciBzaXplcywgb3IgZ3JlYXRlciBiaXRkZXB0aHMgYXQgdGhlIHNhbWUgc2l6ZSwgYXJlIHByZWZl
cmFibGUuCi0gICAgICAgIGJvb2wgaXNCZXR0ZXJFbnRyeShjb25zdCBJY29uRGlyZWN0b3J5RW50
cnkmKSBjb25zdDsKLQotICAgICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgdG8gYmUgZGVj
b2RlZCBpcyBhIFBORyByYXRoZXIgdGhhbiBhIEJNUC4KLSAgICAgICAgLy8gSW5zdGFudGlhdGVz
IGEgUE5HSW1hZ2VEZWNvZGVyLCBkZWNvZGVzIHRoZSBpbWFnZSwgYW5kIGNvcGllcyB0aGUKLSAg
ICAgICAgLy8gcmVzdWx0cyBsb2NhbGx5LgotICAgICAgICB2b2lkIGRlY29kZVBORyhTaGFyZWRC
dWZmZXIqKTsKLQotICAgICAgICAvLyBUaGUgZW50cnkgc2l6ZSB3ZSBzaG91bGQgcHJlZmVyLiAg
SWYgdGhpcyBpcyBlbXB0eSwgd2UgY2hvb3NlIHRoZQotICAgICAgICAvLyBsYXJnZXN0IGF2YWls
YWJsZSBzaXplLiAgSWYgbm8gZW50cmllcyBvZiB0aGUgZGVzaXJlZCBzaXplIGFyZQotICAgICAg
ICAvLyBhdmFpbGFibGUsIHdlIHBpY2sgdGhlIG5leHQgbGFyZ2VyIHNpemUuCi0gICAgICAgIElu
dFNpemUgbV9wcmVmZXJyZWRJY29uU2l6ZTsKLQotICAgICAgICAvLyBUaGUgaGVhZGVycyBmb3Ig
dGhlIElDTy4KLSAgICAgICAgSWNvbkRpcmVjdG9yeSBtX2RpcmVjdG9yeTsKLSAgICAgICAgSWNv
bkRpcmVjdG9yeUVudHJ5IG1fZGlyRW50cnk7Ci0KLSAgICAgICAgLy8gVGhlIFBORyBkZWNvZGVy
LCBpZiB3ZSBuZWVkIHRvIHVzZSBvbmUuCi0gICAgICAgIFBOR0ltYWdlRGVjb2RlciBtX3BuZ0Rl
Y29kZXI7Ci0KLSAgICAgICAgLy8gV2hhdCBraW5kIG9mIGltYWdlIGRhdGEgaXMgc3RvcmVkIGF0
IHRoZSBlbnRyeSB3ZSdyZSBkZWNvZGluZy4KLSAgICAgICAgSW1hZ2VUeXBlIG1faW1hZ2VUeXBl
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCisvKg0KKyAqIENv
cHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N
CisgKiANCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqIA0K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0K
KyAqIA0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UN
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpZm5kZWYgSUNPSW1hZ2VEZWNvZGVyX2gNCisj
ZGVmaW5lIElDT0ltYWdlRGVjb2Rlcl9oDQorDQorI2luY2x1ZGUgIkJNUEltYWdlUmVhZGVyLmgi
DQorI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsN
CisNCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBJQ08gYW5kIENVUiBpbWFnZSBmb3Jt
YXRzLg0KKyAgICBjbGFzcyBJQ09JbWFnZURlY29kZXIgOiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIg
ew0KKyAgICBwdWJsaWM6DQorICAgICAgICAvLyBTZWUgY29tbWVudHMgb24gfG1fcHJlZmVycmVk
SWNvblNpemV8IGJlbG93Lg0KKyAgICAgICAgSUNPSW1hZ2VEZWNvZGVyKGNvbnN0IEludFNpemUm
IHByZWZlcnJlZEljb25TaXplKQ0KKyAgICAgICAgICAgIDogbV9wcmVmZXJyZWRJY29uU2l6ZShw
cmVmZXJyZWRJY29uU2l6ZSkNCisgICAgICAgICAgICAsIG1faW1hZ2VUeXBlKFVua25vd24pDQor
ICAgICAgICB7DQorICAgICAgICAgICAgbV9hbmRNYXNrU3RhdGUgPSBOb3RZZXREZWNvZGVkOw0K
KyAgICAgICAgfQ0KKw0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdCB7IHJldHVybiAiaWNvIjsgfQ0KKw0KKyAgICAgICAgLy8gQk1QSW1hZ2VSZWFkZXIN
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqIGRhdGEpOw0K
KyAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpOw0KKw0KKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyDQorICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7DQorICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0Ow0KKw0KKyAgICBwcml2YXRlOg0KKyAgICAgICAgZW51bSBJbWFnZVR5cGUgew0K
KyAgICAgICAgICAgIFVua25vd24sDQorICAgICAgICAgICAgQk1QLA0KKyAgICAgICAgICAgIFBO
RywNCisgICAgICAgIH07DQorDQorICAgICAgICAvLyBUaGVzZSBhcmUgYmFzZWQgb24gdGhlIFdp
bmRvd3MgSUNPTkRJUiBhbmQgSUNPTkRJUkVOVFJZIHN0cnVjdHMsIGJ1dA0KKyAgICAgICAgLy8g
d2l0aCB1bm5lY2Vzc2FyeSBlbnRyaWVzIHJlbW92ZWQuDQorICAgICAgICBzdHJ1Y3QgSWNvbkRp
cmVjdG9yeSB7DQorICAgICAgICAgICAgdWludDE2X3QgaWRDb3VudDsNCisgICAgICAgIH07DQor
ICAgICAgICBzdHJ1Y3QgSWNvbkRpcmVjdG9yeUVudHJ5IHsNCisgICAgICAgICAgICB1aW50MTZf
dCBiV2lkdGg7ICAgLy8gMTYgYml0cyBzbyB3ZSBjYW4gcmVwcmVzZW50IDI1NiBhcyAyNTYsIG5v
dCAwDQorICAgICAgICAgICAgdWludDE2X3QgYkhlaWdodDsgIC8vICINCisgICAgICAgICAgICB1
aW50MTZfdCB3Qml0Q291bnQ7DQorICAgICAgICAgICAgdWludDMyX3QgZHdJbWFnZU9mZnNldDsN
CisgICAgICAgIH07DQorDQorICAgICAgICAvLyBQcm9jZXNzZXMgdGhlIElDT05ESVIgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgZGF0YS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUNCisgICAgICAgIC8v
IGRpcmVjdG9yeSBjb3VsZCBiZSBkZWNvZGVkLg0KKyAgICAgICAgYm9vbCBwcm9jZXNzRGlyZWN0
b3J5KFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBJQ09ORElS
RU5UUlkgcmVjb3JkcyBhZnRlciB0aGUgZGlyZWN0b3J5LiAgS2VlcHMgdGhlDQorICAgICAgICAv
LyAiYmVzdCIgZW50cnkgYXMgdGhlIG9uZSB3ZSdsbCBkZWNvZGUuICBSZXR1cm5zIHRydWUgaWYg
dGhlIGVudHJpZXMgY291bGQNCisgICAgICAgIC8vIGJlIGRlY29kZWQuDQorICAgICAgICBib29s
IHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAgICAgICAgLy8g
UmVhZHMgYW5kIHJldHVybnMgYSBkaXJlY3RvcnkgZW50cnkgZnJvbSB0aGUgY3VycmVudCBvZmZz
ZXQgaW50byB8ZGF0YXwuDQorICAgICAgICBJY29uRGlyZWN0b3J5RW50cnkgcmVhZERpcmVjdG9y
eUVudHJ5KFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHxl
bnRyeXwgaXMgYSBwcmVmZXJhYmxlIGljb24gZW50cnkgdG8gbV9kaXJFbnRyeS4NCisgICAgICAg
IC8vIExhcmdlciBzaXplcywgb3IgZ3JlYXRlciBiaXRkZXB0aHMgYXQgdGhlIHNhbWUgc2l6ZSwg
YXJlIHByZWZlcmFibGUuDQorICAgICAgICBib29sIGlzQmV0dGVyRW50cnkoY29uc3QgSWNvbkRp
cmVjdG9yeUVudHJ5JikgY29uc3Q7DQorDQorICAgICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgaW1h
Z2UgdG8gYmUgZGVjb2RlZCBpcyBhIFBORyByYXRoZXIgdGhhbiBhIEJNUC4NCisgICAgICAgIC8v
IEluc3RhbnRpYXRlcyBhIFBOR0ltYWdlRGVjb2RlciwgZGVjb2RlcyB0aGUgaW1hZ2UsIGFuZCBj
b3BpZXMgdGhlDQorICAgICAgICAvLyByZXN1bHRzIGxvY2FsbHkuDQorICAgICAgICB2b2lkIGRl
Y29kZVBORyhTaGFyZWRCdWZmZXIqKTsNCisNCisgICAgICAgIC8vIFRoZSBlbnRyeSBzaXplIHdl
IHNob3VsZCBwcmVmZXIuICBJZiB0aGlzIGlzIGVtcHR5LCB3ZSBjaG9vc2UgdGhlDQorICAgICAg
ICAvLyBsYXJnZXN0IGF2YWlsYWJsZSBzaXplLiAgSWYgbm8gZW50cmllcyBvZiB0aGUgZGVzaXJl
ZCBzaXplIGFyZQ0KKyAgICAgICAgLy8gYXZhaWxhYmxlLCB3ZSBwaWNrIHRoZSBuZXh0IGxhcmdl
ciBzaXplLg0KKyAgICAgICAgSW50U2l6ZSBtX3ByZWZlcnJlZEljb25TaXplOw0KKw0KKyAgICAg
ICAgLy8gVGhlIGhlYWRlcnMgZm9yIHRoZSBJQ08uDQorICAgICAgICBJY29uRGlyZWN0b3J5IG1f
ZGlyZWN0b3J5Ow0KKyAgICAgICAgSWNvbkRpcmVjdG9yeUVudHJ5IG1fZGlyRW50cnk7DQorDQor
ICAgICAgICAvLyBUaGUgUE5HIGRlY29kZXIsIGlmIHdlIG5lZWQgdG8gdXNlIG9uZS4NCisgICAg
ICAgIFBOR0ltYWdlRGVjb2RlciBtX3BuZ0RlY29kZXI7DQorDQorICAgICAgICAvLyBXaGF0IGtp
bmQgb2YgaW1hZ2UgZGF0YSBpcyBzdG9yZWQgYXQgdGhlIGVudHJ5IHdlJ3JlIGRlY29kaW5nLg0K
KyAgICAgICAgSW1hZ2VUeXBlIG1faW1hZ2VUeXBlOw0KKyAgICB9Ow0KKw0KK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUNCisNCisjZW5kaWYNCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0MzUwNykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAt
NDIsOSArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAvLyBUaGUgUkdCQTMy
QnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMy
IGZvcm1hdC4KLSAgICAvLyBUaGlzIGJ1ZmZlciBpcyB3aGF0IGFsbCBkZWNvZGVycyB3cml0ZSBh
IHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFyZSB0aGVuCi0gICAgLy8gaW5zdGFudGlhdGVk
IGZvciBkcmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlzIGJ1ZmZlci4KKyAgICAvLyBUaGUgUkdC
QTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdC
QTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCisgICAgLy8gZGVjb2RlcnMgd3Jp
dGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBhcmUgdGhlbiBpbnN0YW50aWF0ZWQgZm9y
IGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgogICAgIGNsYXNzIFJHQkEzMkJ1
ZmZlciB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIEZyYW1lU3RhdHVzIHsgRnJhbWVFbXB0
eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07CkBAIC0xOTYsNyArMTkzLDEyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBhbmQgdGhlIGJhc2UgY2xhc3MgbWFuYWdlcyB0aGUg
UkdCQTMyIGZyYW1lIGNhY2hlLgogICAgIGNsYXNzIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGlj
OgotICAgICAgICBJbWFnZURlY29kZXIoKSA6IG1fZmFpbGVkKGZhbHNlKSwgbV9zaXplQXZhaWxh
YmxlKGZhbHNlKSAge30KKyAgICAgICAgSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgICAgIDogbV9m
YWlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkge30KIAog
ICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQg
d2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBlLgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVy
LmNwcAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3NraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcg
QEAgcHVibGljOgogICAgICAgICAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBKUEVHIGRlY29t
cHJlc3Npb24gb2JqZWN0ICovCiAgICAgICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJm1faW5m
byk7CiAgIAotICAgICAgICBkZWNvZGVyX3NvdXJjZV9tZ3IqIHNyYyA9IE5VTEw7CisgICAgICAg
IGRlY29kZXJfc291cmNlX21nciogc3JjID0gMDsKICAgICAgICAgaWYgKCFtX2luZm8uc3JjKSB7
CiAgICAgICAgICAgICBzcmMgPSAoZGVjb2Rlcl9zb3VyY2VfbWdyKilmYXN0Q2FsbG9jKHNpemVv
ZihkZWNvZGVyX3NvdXJjZV9tZ3IpLCAxKTsKICAgICAgICAgICAgIGlmICghc3JjKSB7CkBAIC00
MjEsNyArNDIxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQog
ICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiBSR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURlY29kZXI6
OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
UE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsMTIgQEAgY2xh
c3MgUE5HSW1hZ2VSZWFkZXIKIHsKIHB1YmxpYzoKICAgICBQTkdJbWFnZVJlYWRlcihQTkdJbWFn
ZURlY29kZXIqIGRlY29kZXIpCi0gICAgOiBtX3JlYWRPZmZzZXQoMCksIG1fZGVjb2RpbmdTaXpl
T25seShmYWxzZSksIG1faW50ZXJsYWNlQnVmZmVyKDApLCBtX2hhc0FscGhhKDApCisgICAgICAg
IDogbV9yZWFkT2Zmc2V0KDApCisgICAgICAgICwgbV9kZWNvZGluZ1NpemVPbmx5KGZhbHNlKQor
ICAgICAgICAsIG1faW50ZXJsYWNlQnVmZmVyKDApCisgICAgICAgICwgbV9oYXNBbHBoYSgwKQog
ICAgIHsKLSAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdf
VkVSX1NUUklORywgTlVMTCwgZGVjb2RpbmdGYWlsZWQsIGRlY29kaW5nV2FybmluZyk7CisgICAg
ICAgIG1fcG5nID0gcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJTkcs
IDAsIGRlY29kaW5nRmFpbGVkLCBkZWNvZGluZ1dhcm5pbmcpOwogICAgICAgICBtX2luZm8gPSBw
bmdfY3JlYXRlX2luZm9fc3RydWN0KG1fcG5nKTsKICAgICAgICAgcG5nX3NldF9wcm9ncmVzc2l2
ZV9yZWFkX2ZuKG1fcG5nLCBkZWNvZGVyLCBoZWFkZXJBdmFpbGFibGUsIHJvd0F2YWlsYWJsZSwg
cG5nQ29tcGxldGUpOwogICAgIH0KQEAgLTEzNCw4ICsxMzcsOSBAQCBwcml2YXRlOgogfTsKIAog
UE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoKQotOiBtX3JlYWRlcigwKQote30KKyAg
ICA6IG1fcmVhZGVyKDApCit7Cit9CiAKIFBOR0ltYWdlRGVjb2Rlcjo6flBOR0ltYWdlRGVjb2Rl
cigpCiB7CkBAIC0xNjksNyArMTczLDcgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSgpIAogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuICFt
X2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiBJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiBSR0JBMzJCdWZmZXIqIFBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKQEAgLTMwNSw4ICsz
MDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKIHZvaWQgcm93
QXZhaWxhYmxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVwIHJvd0J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgIHBuZ191aW50XzMyIHJvd0luZGV4LCBpbnQgaW50ZXJsYWNlUGFzcykKIHsKLSAg
ICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihw
bmcpKS0+cm93QXZhaWxhYmxlKAotICAgICAgICByb3dCdWZmZXIsIHJvd0luZGV4LCBpbnRlcmxh
Y2VQYXNzKTsKKyAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dy
ZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKHJvd0J1ZmZlciwgcm93SW5kZXgsIGludGVy
bGFjZVBhc3MpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2ln
bmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsIGludCBpbnRlcmxhY2VQYXNz
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1hCTUltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9YQk1JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM1MDcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsODIgKzEsODEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBYQk1JbWFnZURlY29kZXJfaAotI2RlZmlu
ZSBYQk1JbWFnZURlY29kZXJfaAotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8c3Ry
aW5nPgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIFhCTSBpbWFnZSBmb3JtYXQuCi0gICAgY2xh
c3MgWEJNSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7Ci0gICAgcHVibGljOgot
ICAgICAgICBYQk1JbWFnZURlY29kZXIoKTsKLSAgICAgICAgdmlydHVhbCB+WEJNSW1hZ2VEZWNv
ZGVyKCkge30KLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0IHsgcmV0dXJuICJ4Ym0iOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hh
cmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgICAgIC8vIFdoZXRo
ZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1
YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIC8vIFJlc3RyaWN0cyBpbWFnZSBzaXplIHRvIHNvbWV0aGluZyAi
cmVhc29uYWJsZSIuCi0gICAgICAgIC8vIFRoaXMgcHJvdGVjdHMgYWdhaW5zIHJpZGljdWxvdXNs
eSBsYXJnZSBYQk1zIGFuZCBwcmV2ZW50cyBiYWQgdGhpbmdzCi0gICAgICAgIC8vIGxpa2Ugb3Zl
cmZsb3cgb2YgbV9iaXRzRGVjb2RlZC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhEaW1l
bnNpb24gPSA2NTUzNTsKLQotICAgICAgICAvLyBJbiBYMTAsIGFuIGFycmF5IG9mIHR5cGUgInNo
b3J0IiBpcyB1c2VkIHRvIGRlY2xhcmUgdGhlIGltYWdlIGJpdHMsCi0gICAgICAgIC8vIGJ1dCBp
biBYMTEsIHRoZSB0eXBlIGlzICJjaGFyIi4KLSAgICAgICAgZW51bSBEYXRhVHlwZSB7Ci0gICAg
ICAgICAgICBVbmtub3duLAotICAgICAgICAgICAgWDEwLAotICAgICAgICAgICAgWDExLAotICAg
ICAgICB9OwotCi0gICAgICAgIGJvb2wgZGVjb2RlSGVhZGVyKCk7Ci0gICAgICAgIGJvb2wgZGVj
b2RlRGF0dW0odWludDE2X3QqIHJlc3VsdCk7Ci0gICAgICAgIGJvb2wgZGVjb2RlRGF0YSgpOwot
ICAgICAgICB2b2lkIGRlY29kZVhCTShib29sIHNpemVPbmx5KTsKLQotICAgICAgICBzdGQ6OnN0
cmluZyBtX3hibVN0cmluZzsgIC8vIE51bGwtdGVybWluYXRlZCBjb3B5IG9mIHRoZSBYQk0gZGF0
YS4KLSAgICAgICAgc2l6ZV90IG1fZGVjb2RlT2Zmc2V0OyAgICAvLyBUaGUgY3VycmVudCBvZmZz
ZXQgaW4gbV94Ym1TdHJpbmcgZm9yIGRlY29kaW5nLgotICAgICAgICBib29sIG1fYWxsRGF0YVJl
Y2VpdmVkOwotICAgICAgICBib29sIG1fZGVjb2RlZEhlYWRlcjsKLSAgICAgICAgZW51bSBEYXRh
VHlwZSBtX2RhdGFUeXBlOwotICAgICAgICBpbnQgbV9iaXRzRGVjb2RlZDsKLSAgICB9OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKiANCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBk
aXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKiANCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0K
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4NCisgKi8NCisNCisjaWZuZGVmIFhCTUltYWdlRGVjb2Rlcl9oDQorI2RlZmluZSBYQk1JbWFn
ZURlY29kZXJfaA0KKw0KKyNpbmNsdWRlIDxzdHJpbmc+DQorI2luY2x1ZGUgIkltYWdlRGVjb2Rl
ci5oIg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgLy8gVGhpcyBjbGFzcyBkZWNv
ZGVzIHRoZSBYQk0gaW1hZ2UgZm9ybWF0Lg0KKyAgICBjbGFzcyBYQk1JbWFnZURlY29kZXIgOiBw
dWJsaWMgSW1hZ2VEZWNvZGVyIHsNCisgICAgcHVibGljOg0KKyAgICAgICAgWEJNSW1hZ2VEZWNv
ZGVyKCk7DQorICAgICAgICB2aXJ0dWFsIH5YQk1JbWFnZURlY29kZXIoKSB7fQ0KKw0KKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAieGJt
IjsgfQ0KKw0KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCk7DQorICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUg
c2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4NCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsNCisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVm
ZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsNCisNCisgICAgcHJpdmF0ZToN
CisgICAgICAgIC8vIFJlc3RyaWN0cyBpbWFnZSBzaXplIHRvIHNvbWV0aGluZyAicmVhc29uYWJs
ZSIuDQorICAgICAgICAvLyBUaGlzIHByb3RlY3RzIGFnYWlucyByaWRpY3Vsb3VzbHkgbGFyZ2Ug
WEJNcyBhbmQgcHJldmVudHMgYmFkIHRoaW5ncw0KKyAgICAgICAgLy8gbGlrZSBvdmVyZmxvdyBv
ZiBtX2JpdHNEZWNvZGVkLg0KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhEaW1lbnNpb24g
PSA2NTUzNTsNCisNCisgICAgICAgIC8vIEluIFgxMCwgYW4gYXJyYXkgb2YgdHlwZSAic2hvcnQi
IGlzIHVzZWQgdG8gZGVjbGFyZSB0aGUgaW1hZ2UgYml0cywNCisgICAgICAgIC8vIGJ1dCBpbiBY
MTEsIHRoZSB0eXBlIGlzICJjaGFyIi4NCisgICAgICAgIGVudW0gRGF0YVR5cGUgew0KKyAgICAg
ICAgICAgIFVua25vd24sDQorICAgICAgICAgICAgWDEwLA0KKyAgICAgICAgICAgIFgxMSwNCisg
ICAgICAgIH07DQorDQorICAgICAgICBib29sIGRlY29kZUhlYWRlcigpOw0KKyAgICAgICAgYm9v
bCBkZWNvZGVEYXR1bSh1aW50MTZfdCogcmVzdWx0KTsNCisgICAgICAgIGJvb2wgZGVjb2RlRGF0
YSgpOw0KKyAgICAgICAgdm9pZCBkZWNvZGVYQk0oYm9vbCBzaXplT25seSk7DQorDQorICAgICAg
ICBzdGQ6OnN0cmluZyBtX3hibVN0cmluZzsgIC8vIE51bGwtdGVybWluYXRlZCBjb3B5IG9mIHRo
ZSBYQk0gZGF0YS4NCisgICAgICAgIHNpemVfdCBtX2RlY29kZU9mZnNldDsgICAgLy8gVGhlIGN1
cnJlbnQgb2Zmc2V0IGluIG1feGJtU3RyaW5nIGZvciBkZWNvZGluZy4NCisgICAgICAgIGJvb2wg
bV9hbGxEYXRhUmVjZWl2ZWQ7DQorICAgICAgICBib29sIG1fZGVjb2RlZEhlYWRlcjsNCisgICAg
ICAgIGVudW0gRGF0YVR5cGUgbV9kYXRhVHlwZTsNCisgICAgICAgIGludCBtX2JpdHNEZWNvZGVk
Ow0KKyAgICB9Ow0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYNCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUlt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQzNTA3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rl
ci5oIgogIAotI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
V1gpCi0KIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAKQEAgLTQxLDYgKzM5LDQgQEAgUkdCQTMyQnVm
ZmVyKiBYQk1JbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAgIHJldHVybiAwOwogfQogCi19Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShDQUlSTykKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA0MzUwNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNyArMjMs
MjYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgWEJNX0RFQ09ERVJfSF8KLSNk
ZWZpbmUgWEJNX0RFQ09ERVJfSF8KKyNpZm5kZWYgWEJNSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUg
WEJNSW1hZ2VEZWNvZGVyX2gKIAogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFhCTUltYWdlUmVhZGVyOworICAgIGNsYXNzIFhCTUltYWdl
UmVhZGVyOwogCi0vLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIFhCTSBpbWFnZSBmb3JtYXQuCi1j
bGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyCi17Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAieGJt
IjsgfQorICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgWEJNIGltYWdlIGZvcm1hdC4KKyAg
ICBjbGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyBy
ZXR1cm4gInhibSI7IH0KIAotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0
aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFi
bGUoKSBjb25zdDsKKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRp
b24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFp
bGFibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KTsKLX07CisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICB9OwogCi19Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="15193"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30455</attachid>
            <date>2009-05-18 17:03:21 -0700</date>
            <delta_ts>2009-05-22 11:29:46 -0700</delta_ts>
            <desc>Part one - v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>114503</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Mzg0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUwIEBACisyMDA5LTA1LTE4ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU3MDkgcGFydCBvbmUK
KyAgICAgICAgTW9zdGx5IGNvc21ldGljIGNoYW5nZXMsIG1haW5seSB0byBnZXQgaW1hZ2UgZGVj
b2RlcnMgZm9yIENhaXJvIGJ1aWxkIHRvCisgICAgICAgIGNvbXBseSB3aXRoIFdlYktpdCBzdHls
ZSBndWlkZWxpbmVzOgorICAgICAgICAqIEZpeCBpbmRlbnRpbmcgaW4gbmFtZXNwYWNlcyBpbiBo
ZWFkZXIgZmlsZXMKKyAgICAgICAgKiBGaXggaGVhZGVyIGd1YXJkIG5hbWVzCisgICAgICAgICog
Rml4IGluaXRpYWxpemVyIGxpc3Qgd3JhcHBpbmcKKyAgICAgICAgKiBGaXggY2xhc3MvZnVuY3Rp
b24gInsiIHdyYXBwaW5nCisgICAgICAgICogRml4IHdyYXBwaW5nIG9mIGxvbmcgYm9vbGVhbiBl
eHByZXNzaW9ucworICAgICAgICAqIEZpeCB3aGl0ZXNwYWNlIGFyb3VuZCBvcGVyYXRvcnMKKyAg
ICAgICAgKiBFbGltaW5hdGUgd2hpdGVzcGFjZSBvbiBvdGhlcndpc2UtYmxhbmsgbGluZXMKKyAg
ICAgICAgKiBObyB7fSBvbiBzaW5nbGUtbGluZSBjb25kaXRpb25hbCBhcm1zCisgICAgICAgICog
VXNlIDAgaW5zdGVhZCBvZiBOVUxMCisgICAgICAgICogRG9uJ3QgI2luY2x1ZGUgImNvbmZpZy5o
IiBpbiBoZWFkZXJzCisgICAgICAgICogVXNlIERPUyBsaW5lLWVuZGluZ3MuCisgICAgICAgIAor
ICAgICAgICBBbHNvIGEgZmV3IG5vbi1jb3NtZXRpYyBjaGFuZ2VzOgorICAgICAgICAqIFJlbW92
ZSB1bm5lZWRlZCAjaWZkZWYgcHJvdGVjdGluZyB0aGUgY29udGVudHMgb2YgdGhlc2UgZmlsZXMu
ICBUaGUKKyAgICAgICAgICBwbGF0Zm9ybXMgbGlzdGVkIGRvbid0IG1hdGNoIHdobyB1c2VzIHRo
ZXNlIGZpbGVzIGFueW1vcmUgKGV2ZW4KKyAgICAgICAgICB3aXRob3V0IGNvbnNpZGVyaW5nIFNr
aWEpLCBhbmQgcGxhdGZvcm1zIHdoaWNoIGRvbid0IHVzZSB0aGVtIGF0IGFsbAorICAgICAgICAg
IChsaWtlIENHKSBhcmVuJ3QgaGFybWVkIGJ5IHRoZSBmaWxlcywgc2luY2UgdGhleSBkb24ndCBo
YXZlCisgICAgICAgICAgZXF1aXZhbGVudGx5LW5hbWVkIGNsYXNzZXMuICBJdCdzIHNpbXBsZXIg
dG8ganVzdCBkaXRjaCB0aGVzZS4KKyAgICAgICAgKiBDb252ZXJ0IGEgdXNlIG9mIFZlY3Rvcjw+
JiBpbnRvIFNoYXJlZEJ1ZmZlciosIHNpbmNlIHRoYXQncyBob3cgdGhlCisgICAgICAgICAgZGF0
YSBpcyByZWFsbHkgc3RvcmVkIGFueXdheS4KKyAgICAgICAgKiBVc2Ugc2l6ZSgpIGluc3RlYWQg
b2YgbV9zaXplLCBmb3IgY29uc2lzdGVuY3kgd2l0aCBTa2lhIGNvZGUsIGFuZAorICAgICAgICAg
IGZ1dHVyZS1wcm9vZmluZyAoaWYgYSBwYXJ0aWN1bGFyIGRlY29kZXIgd2FudHMgdG8gc3BlY2lh
bGl6ZSB0aGlzKS4KKyAgICAgICAgKiBNb3ZlIGFuIEFTU0VSVCB0aGF0IHdhcyBzbGlnaHRseSBt
b3JlIGFnZ3Jlc3NpdmUgdGhhbiBuZWNlc3NhcnkuCisgICAgICAgICogQ2hhbmdlIHZhcmlhYmxl
IG5hbWVzL3R5cGVzIGZvciBjbGFyaXR5L2FjY3VyYWN5IGFuZCB0byBtYXRjaCBTa2lhLgorICAg
ICAgICAqIFJlbW92ZSB1bm5lY2Vzc2FyeSBtYWNybyBtYWdpYyB0byB3b3JrIGFyb3VuZCBhIHBy
b2JsZW0gd2hpY2ggbm8KKyAgICAgICAgICBsb25nZXIgZXhpc3RzIGluIHRoZSB0aGlyZC1wYXJ0
eSBKUEVHIGhlYWRlcnMuCisgICAgICAgICogU3RvcCBzaWxlbmNpbmcgYSBwb3J0YWJpbGl0eSB3
YXJuaW5nIGFib3V0IHNldGptcCAodGhlIHZjcHJvai92c3Byb3BzCisgICAgICAgICAgYXJlIHRo
ZSByaWdodCBwbGFjZSBmb3IgdGhpcykKKyAgICAgICAgKiBJbiBTa2lhIGNvZGUsIGRvbid0IGV4
cGxpY2l0bHkgY2hlY2sgfG1fZmFpbGVkfCBiZWZvcmUgY2FsbGluZworICAgICAgICAgIGlzU2l6
ZUF2YWlsYWJsZSgpLCB3aGljaCBpdHNlbGYgY2hlY2tzIHxtX2ZhaWxlZHwuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDogRml4IGluZGVudGluZywg
aGVhZGVyIGd1YXJkcywgInsiIHdyYXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVm
ZmVyOjopOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIpOiBG
aXggaW5pdGlhbGl6ZXIgbGlzdCB3cmFwcGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1
ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpieXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpz
dGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpkdXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmRpc3Bvc2FsTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpzZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6ZW5zdXJl
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0RHVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpzZXREaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1
ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVj
b2Rlcik6IEZpeCBpbml0aWFsaXplciBsaXN0IHdyYXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6c3VwcG9ydHNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURl
Y29kZXI6OmZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldEZhaWxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rl
ci5jcHA6IFJlbW92ZSB1bm5lZWRlZCAjaWZkZWYuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOiBGaXggaW5kZW50aW5nLCBoZWFkZXIgZ3Vh
cmRzLCAieyIgd3JhcHBpbmcuCisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29kZXI6OmZp
bGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcDogUmVtb3ZlIHVubmVlZGVkICNpZmRlZiwgZml4ICJ7IiB3cmFw
cGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlclByaXZhdGU6OkdJRkltYWdl
RGVjb2RlclByaXZhdGUpOiBVc2UgYW4gaW5pdGlhbGl6ZXIgaW5zdGVhZCBvZiBhIGJsb2NrLWxl
dmVsIHN0YXRlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlclByaXZhdGU6
OmRlY29kZSk6IEV4cGVjdCBhIFNoYXJlZEJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2RlclByaXZhdGU6OmdldENvbG9yTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKTogRml4IGluaXRpYWxpemVyIGxpc3Qgd3JhcHBp
bmcuCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOiBBZGQg
Y29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJB
dEluZGV4KTogRXhwbGljaXRseSBjYXN0LCBmaXggd2hpdGVzcGFjZSBhcm91bmQgb3BlcmF0b3Jz
LgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOiBQYXNzIGEgU2hh
cmVkQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIpOiBVc2Ugc2l6ZSgpIGluc3RlYWQgb2YgbV9zaXplLCBtb3ZlIEFTU0VSVCwgZml4IGJv
b2xlYW4gd3JhcHBpbmcsIGZpeCBpbmRlbnRpbmcuCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OnByZXBFbXB0eUZyYW1lQnVmZmVyKTogVXNlIHNpemUoKSBpbnN0ZWFkIG9mIG1f
c2l6ZS4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cp
OiBVc2Ugc2l6ZSgpIGluc3RlYWQgb2YgbV9zaXplLCBlbGltaW5hdGUgdW5uZWVkZWQgd2hpdGVz
cGFjZSwgY2hhbmdlIHZhcmlhYmxlIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXI6OmZyYW1lQ29tcGxldGUpOiBVc2Ugc2l6ZSgpIGluc3RlYWQgb2YgbV9zaXplLCBubyB7
fSBvbiBzaW5nbGUtbGluZSBjb25kaXRpb25hbCBhcm1zLCBmaXggYm9vbGVhbiB3cmFwcGluZy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6
IEZpeCBpbmRlbnRpbmcsIGhlYWRlciBndWFyZHMsICJ7IiB3cmFwcGluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6Oik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDogUmVtb3ZlIHVubmVlZGVkICNpZmRlZi4KKyAg
ICAgICAgKEdJRkltYWdlUmVhZGVyOjpyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDogRml4IGhlYWRlciBndWFyZHMsIGNoYW5nZSB2
YXJpYWJsZSB0eXBlLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuY3BwOiBSZW1vdmUgdW5uZWVkZWQgI2lmZGVmLgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDogRml4IGluZGVudGluZywg
aGVhZGVyIGd1YXJkcywgInsiIHdyYXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VE
ZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogUmVtb3ZlIHVubmVlZGVkICNpZmRlZiwg
bWFjcm8gbWFnaWMsIHNpbGVuY2luZyBvZiB3YXJuaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlBF
R0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKTogVXNlIHNpemUoKSBpbnN0ZWFkIG9mIG1f
c2l6ZSwgY2hhbmdlIHZhcmlhYmxlIG5hbWUuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6IEZpeCBpbmRlbnRpbmcsIGhlYWRlciBndWFy
ZHMsICJ7IiB3cmFwcGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZp
bGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnN1
cHBvcnRzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6cmVhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOiBSZW1v
dmUgdW5uZWVkZWQgI2lmZGVmLCBzaWxlbmNpbmcgb2Ygd2FybmluZywgY2hhbmdlIHZhcmlhYmxl
IHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6UE5HSW1hZ2VSZWFkZXIp
OiBGaXggaW5pdGlhbGl6ZXIgbGlzdCB3cmFwcGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0lt
YWdlUmVhZGVyOjpjbG9zZSk6IEFkZCBjb21tZW50LCB6ZXJvIGFub3RoZXIgbWVtYmVyIGZvciBj
b25zaXN0ZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VE
ZWNvZGVyKTogRml4IGluZGVudGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rl
cjo6ZGVjb2RpbmdGYWlsZWQpOiBEZWZpbmUgaW4gLmNwcCwgbm90IC5oLgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDogRml4IGluZGVudGluZywgaGVh
ZGVyIGd1YXJkcywgInsiIHdyYXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNv
ZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29k
ZXI6OnJlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJ
bWFnZURlY29kZXIuaDogVXNlIERPUyBsaW5lIGVuZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVyLmg6IFVzZSBET1MgbGluZSBlbmRpbmdz
LgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpCTVBJbWFnZVJlYWRlcjo6cmVhZFVpbnQxNik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFn
ZVJlYWRlcjo6cmVhZFVpbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6
aXNXaW5kb3dzVjRQbHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwYXN0
RW5kT2ZJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cmVhZEN1cnJl
bnRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6Z2V0Q29tcG9uZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpnZXRBbHBoYSk6CisgICAgICAg
IChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6c2V0SSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZVJlYWRlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6
ZmlsbFJHQkEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aXNTaXpl
QXZhaWxhYmxlKTogRG9uJ3QgY2hlY2sgbV9mYWlsZWQgdW5uZWNlc3NhcmlseS4KKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KTogRml4IHdoaXRl
c3BhY2UgYXJvdW5kIG9wZXJhdG9ycy4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL0dJRkltYWdlUmVhZGVyLmg6ICJ1bnNpZ25lZCIgaXMgc3VmZmljaWVudCB0byBjb252
ZXkgInVuc2lnbmVkIGludCIuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9JQ09JbWFnZURlY29kZXIuaDogVXNlIERPUyBsaW5lIGVuZGluZ3MuCisgICAgICAgIChXZWJD
b3JlOjpJQ09JbWFnZURlY29kZXI6OklDT0ltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJQ09JbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklDT0ltYWdlRGVjb2Rlcjo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0ltYWdlRGVjb2Rlci5oOiBSZW1vdmUgdW5uZWNlc3NhcnkgI2luY2x1ZGVzLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOiBGaXggaW5pdGlhbGl6ZXIg
bGlzdCB3cmFwcGluZy4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQ
RUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpK
UEVHSW1hZ2VSZWFkZXIpOiBVc2UgMCBpbnN0ZWFkIG9mIE5VTEwuCisgICAgICAgIChXZWJDb3Jl
OjpKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOiBEb24ndCBjaGVjayBtX2ZhaWxl
ZCB1bm5lY2Vzc2FyaWx5LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
UE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlUmVhZGVyOjpQ
TkdJbWFnZVJlYWRlcik6IEZpeCBpbml0aWFsaXplciBsaXN0IHdyYXBwaW5nLgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIpOiBGaXggaW5kZW50aW5n
LgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOiBE
b24ndCBjaGVjayBtX2ZhaWxlZCB1bm5lY2Vzc2FyaWx5LgorICAgICAgICAoV2ViQ29yZTo6cm93
QXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1hCTUlt
YWdlRGVjb2Rlci5oOiBEb24ndCAjaW5jbHVkZSBjb25maWcuaCwgdXNlIERPUyBsaW5lIGVuZGlu
Z3MuCisgICAgICAgIChXZWJDb3JlOjpYQk1JbWFnZURlY29kZXI6On5YQk1JbWFnZURlY29kZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WEJNSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpYQk1JbWFnZURlY29kZXI6Oik6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHA6IFJlbW92ZSB1bm5lZWRl
ZCAjaWZkZWYuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdl
RGVjb2Rlci5oOiBGaXggaW5kZW50aW5nLCBoZWFkZXIgZ3VhcmRzLCAieyIgd3JhcHBpbmcuCisg
ICAgICAgIChXZWJDb3JlOjpYQk1JbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKwog
MjAwOS0wNS0xOCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0
aGUgYnVpbGQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgJKHJldmlzaW9uIDQzODMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJTUFHRV9ERUNPREVSX0hfCi0jZGVmaW5l
IElNQUdFX0RFQ09ERVJfSF8KKyNpZm5kZWYgSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgSW1hZ2VE
ZWNvZGVyX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5o
IgpAQCAtMzQsMTM2ICszNCwxNDUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVm
IFZlY3Rvcjx1bnNpZ25lZD4gUkdCQTMyQXJyYXk7CisgICAgdHlwZWRlZiBWZWN0b3I8dW5zaWdu
ZWQ+IFJHQkEzMkFycmF5OwogCi0vLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRz
IHRoZSBkZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlz
IHdoYXQgYWxsCi0vLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVz
IGFyZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBi
dWZmZXIuCi1jbGFzcyBSR0JBMzJCdWZmZXIKLXsKLXB1YmxpYzoKLSAgICBlbnVtIEZyYW1lU3Rh
dHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07Ci0gICAgZW51
bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKLSAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVt
ZXJpYyB2YWx1ZXMgb2YgdGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQgYWxsCi0gICAgICAgIC8v
IHVzZXJzLCBhcyBzb21lIHVzZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBj
b25zdGFudHMuCi0gICAgICAgIERpc3Bvc2VOb3RTcGVjaWZpZWQgPSAwLCAgICAgICAvLyBMZWF2
ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgotICAgICAgICBEaXNwb3NlS2VlcCA9IDEsICAgICAgICAg
ICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgRGlzcG9zZU92ZXJ3
cml0ZUJnY29sb3IgPSAyLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50Ci0gICAgICAg
IERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyA9IDMsICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91
cyBmcmFtZWJ1ZmZlciBjb250ZW50cwotICAgIH07CisgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBv
YmplY3QgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMiBmb3JtYXQu
ICBUaGlzIGJ1ZmZlciBpcyB3aGF0IGFsbAorICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xl
IGZyYW1lIGludG8uICBGcmFtZXMgYXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5
IGJlaW5nIGhhbmRlZCB0aGlzIGJ1ZmZlci4KKyAgICBjbGFzcyBSR0JBMzJCdWZmZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgZW51bSBGcmFtZVN0YXR1cyB7IEZyYW1lRW1wdHksIEZyYW1lUGFy
dGlhbCwgRnJhbWVDb21wbGV0ZSB9OworCisgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhv
ZCB7CisgICAgICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0
aGVzZSwgbWFrZSBzdXJlIHlvdSBhdWRpdCBhbGwKKyAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBz
b21lIHVzZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCisg
ICAgICAgICAgICBEaXNwb3NlTm90U3BlY2lmaWVkLCAgICAgICAvLyBMZWF2ZSBmcmFtZSBpbiBm
cmFtZWJ1ZmZlcgorICAgICAgICAgICAgRGlzcG9zZUtlZXAsICAgICAgICAgICAgICAgLy8gTGVh
dmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKKyAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVCZ2Nv
bG9yLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50CisgICAgICAgICAgICBEaXNwb3Nl
T3ZlcndyaXRlUHJldmlvdXMsICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1ZmZl
ciBjb250ZW50cworICAgICAgICB9OworCisgICAgICAgIFJHQkEzMkJ1ZmZlcigpCisgICAgICAg
ICAgICA6IG1faGVpZ2h0KDApCisgICAgICAgICAgICAsIG1fc3RhdHVzKEZyYW1lRW1wdHkpCisg
ICAgICAgICAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAgICAgICAgICwgbV9kaXNwb3NhbE1ldGhv
ZChEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQor
ICAgICAgICB7CisgICAgICAgIH0gCisKKyAgICAgICAgdm9pZCBjbGVhcigpIHsKKyAgICAgICAg
ICBtX2J5dGVzLmNsZWFyKCk7CisgICAgICAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OworICAg
ICAgICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJh
bWVCdWZmZXJDYWNoZSgpIGNhbGxzCisgICAgICAgICAgLy8gdGhpcyB0byBmcmVlIHRoZSBiaXRt
YXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCisgICAgICAgICAgLy8gaW5pdEZyYW1l
QnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkIG90aGVy
CisgICAgICAgICAgLy8gbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCisgICAgICAg
IH0KIAotICAgIFJHQkEzMkJ1ZmZlcigpIDogbV9oZWlnaHQoMCksIG1fc3RhdHVzKEZyYW1lRW1w
dHkpLCBtX2R1cmF0aW9uKDApLAotICAgICAgICAgICAgICAgICAgICAgbV9kaXNwb3NhbE1ldGhv
ZChEaXNwb3NlTm90U3BlY2lmaWVkKSwgbV9oYXNBbHBoYShmYWxzZSkKLSAgICB7fSAKLQotICAg
IHZvaWQgY2xlYXIoKSB7Ci0gICAgICBtX2J5dGVzLmNsZWFyKCk7Ci0gICAgICBtX3N0YXR1cyA9
IEZyYW1lRW1wdHk7Ci0gICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBo
ZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscwotICAgICAgLy8gdGhpcyB0byBmcmVl
IHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCi0gICAgICAvLyBpbml0
RnJhbWVCdWZmZXIoKSBhbmQgZnJhbWVDb21wbGV0ZSgpIG1heSBzdGlsbCBuZWVkIHRvIHJlYWQg
b3RoZXIKLSAgICAgIC8vIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgotICAgIH0K
LQotICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7
IH0KLSAgICBSR0JBMzJBcnJheSYgYnl0ZXMoKSB7IHJldHVybiBtX2J5dGVzOyB9Ci0gICAgY29u
c3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIHVuc2lnbmVk
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0gICAgRnJhbWVTdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KLSAgICB1bnNpZ25lZCBkdXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRp
c3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQotICAgIGJv
b2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9Ci0KLSAgICB2b2lkIHNl
dFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3JlY3QgPSByOyB9Ci0gICAgdm9pZCBlbnN1cmVI
ZWlnaHQodW5zaWduZWQgcm93SW5kZXgpIHsgaWYgKHJvd0luZGV4ID4gbV9oZWlnaHQpIG1faGVp
Z2h0ID0gcm93SW5kZXg7IH0KLSAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzKSB7IG1f
c3RhdHVzID0gczsgfQotICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsg
bV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9Ci0gICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChGcmFt
ZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9Ci0g
ICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1faGFzQWxwaGEgPSBhbHBoYTsgfQot
Ci0gICAgc3RhdGljIHZvaWQgc2V0UkdCQSh1bnNpZ25lZCYgcG9zLCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgIHsKLSAgICAgICAgLy8gV2Ugc3Rv
cmUgdGhpcyBkYXRhIHByZS1tdWx0aXBsaWVkLgotICAgICAgICBpZiAoYSA9PSAwKQotICAgICAg
ICAgICAgcG9zID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYSA8IDI1NSkg
ewotICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7Ci0gICAg
ICAgICAgICAgICAgciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsK
LSAgICAgICAgICAgICAgICBnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGcgKiBhbHBoYVBlcmNl
bnQpOwotICAgICAgICAgICAgICAgIGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhh
UGVyY2VudCk7CisgICAgICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXM7IH0KKyAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzKCkgeyByZXR1cm4gbV9i
eXRlczsgfQorICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0
OyB9CisgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVz
OyB9CisgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlv
bjsgfQorICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQorICAgICAgICBib29sIGhhc0FscGhhKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQorCisgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJ
bnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBlbnN1cmVIZWlnaHQodW5z
aWduZWQgcm93SW5kZXgpIHsgaWYgKHJvd0luZGV4ID4gbV9oZWlnaHQpIG1faGVpZ2h0ID0gcm93
SW5kZXg7IH0KKyAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgcykgeyBtX3N0YXR1
cyA9IHM7IH0KKyAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBt
X2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChG
cmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9
CisgICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkgeyBtX2hhc0FscGhhID0gYWxw
aGE7IH0KKworICAgICAgICBzdGF0aWMgdm9pZCBzZXRSR0JBKHVuc2lnbmVkJiBwb3MsIHVuc2ln
bmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMgZGF0YSBwcmUtbXVsdGlwbGllZC4KKyAgICAgICAg
ICAgIGlmIChhID09IDApCisgICAgICAgICAgICAgICAgcG9zID0gMDsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7CisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgICAgIHIg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ociAqIGFscGhhUGVyY2VudCk7CisgICAgICAgICAgICAg
ICAgICAgIGcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZyAqIGFscGhhUGVyY2VudCk7CisgICAg
ICAgICAgICAgICAgICAgIGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhhUGVyY2Vu
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBvcyA9IChhIDw8IDI0IHwg
ciA8PCAxNiB8IGcgPDwgOCB8IGIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zID0g
KGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CiAgICAgICAgIH0KLSAgICB9CiAKLXBy
aXZhdGU6Ci0gICAgUkdCQTMyQXJyYXkgbV9ieXRlczsKLSAgICBJbnRSZWN0IG1fcmVjdDsgICAg
Ly8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4gdGhlIG92
ZXJhbGwgYnVmZmVyLgotICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlz
IGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0
aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgotICAgIHVuc2lnbmVkIG1faGVpZ2h0OyAvLyBUaGUgaGVp
Z2h0ICh0aGUgbnVtYmVyIG9mIHJvd3Mgd2UndmUgZnVsbHkgZGVjb2RlZCkuCi0gICAgRnJhbWVT
dGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgaXMgY29tcGxldGVs
eSBmaW5pc2hlZCBkZWNvZGluZy4KLSAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAvLyBUaGUgYW5p
bWF0aW9uIGRlbGF5LgotICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsg
Ly8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRo
ZSBuZXh0IGZyYW1lLgotICAgIGJvb2wgbV9oYXNBbHBoYTsgLy8gV2hldGhlciBvciBub3QgYW55
IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlciBoYXZlIHRyYW5zcGFyZW5jeS4KLX07Ci0KLS8v
IFRoZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNp
ZmljIGltYWdlIGZvcm1hdCBkZWNvZGVycwotLy8gKGUuZy4sIEdJRiwgSlBHLCBQTkcsIElDTykg
dG8gZGVyaXZlIGZyb20uICBBbGwgZGVjb2RlcnMgZGVjb2RlIGludG8gUkdCQTMyIGZvcm1hdAot
Ly8gYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhlIFJHQkEzMiBmcmFtZSBjYWNoZS4KLWNs
YXNzIEltYWdlRGVjb2RlcgotewotcHVibGljOgotICAgIEltYWdlRGVjb2RlcigpIDptX3NpemVB
dmFpbGFibGUoZmFsc2UpLCBtX2ZhaWxlZChmYWxzZSkge30KLSAgICB2aXJ0dWFsIH5JbWFnZURl
Y29kZXIoKSB7fQotCi0gICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdXN1YWxseSBh
c3NvY2lhdGVkIHdpdGggYW4gdW5kZWNvZGVkIGltYWdlIG9mIHRoaXMgdHlwZS4KLSAgICB2aXJ0
dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKLQotICAgIC8vIEFsbCBz
cGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YSB0
aGV5IGFyZSBnaXZlbi4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IG1fZGF0YSA9IGRhdGE7IH0KLQotICAgIC8vIFdo
ZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0Lgot
ICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBS
ZXF1ZXN0cyB0aGUgc2l6ZS4KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotCi0gICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRo
ZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGZyYW1lcwotICAgIC8vIHdp
bGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlciBpZiB0aGV5IG5lZWQgdG8gKHdp
dGhvdXQgbmVjZXNzYXJpbHkKLSAgICAvLyBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2aWR1YWwg
ZnJhbWVzKS4KLSAgICB2aXJ0dWFsIGludCBmcmFtZUNvdW50KCkgeyByZXR1cm4gMTsgfQotCi0g
ICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmltYXRp
b24gbG9vcC4KLSAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVy
biBjQW5pbWF0aW9uTm9uZTsgfQotCi0gICAgLy8gQ2FsbGVkIHRvIG9idGFpbiB0aGUgUkdCQTMy
QnVmZmVyIGZ1bGwgb2YgZGVjb2RlZCBkYXRhIGZvciByZW5kZXJpbmcuICBUaGUKLSAgICAvLyBk
ZWNvZGVyIHBsdWdpbiB3aWxsIGRlY29kZSBhcyBtdWNoIG9mIHRoZSBmcmFtZSBhcyBpdCBjYW4g
YmVmb3JlIGhhbmRpbmcKLSAgICAvLyBiYWNrIHRoZSBidWZmZXIuCi0gICAgdmlydHVhbCBSR0JB
MzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpID0gMDsKLQotICAgIC8v
IFdoZXRoZXIgb3Igbm90IHRoZSB1bmRlcmx5aW5nIGltYWdlIGZvcm1hdCBldmVuIHN1cHBvcnRz
IGFscGhhIHRyYW5zcGFyZW5jeS4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4g
bV9mYWlsZWQ7IH0KLSAgICB2b2lkIHNldEZhaWxlZCgpIHsgbV9mYWlsZWQgPSB0cnVlOyB9Ci0K
LSAgICAvLyBXaXBlIG91dCBmcmFtZXMgaW4gdGhlIGZyYW1lIGJ1ZmZlciBjYWNoZSBiZWZvcmUg
fGNsZWFyQmVmb3JlRnJhbWV8LAotICAgIC8vIGFzc3VtaW5nIHRoaXMgY2FuIGJlIGRvbmUgd2l0
aG91dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZlcmVudCBkZWNvZGVycwotICAgIC8vIHBsYWNl
IGRpZmZlcmVudCByZXN0cmljdGlvbnMgb24gd2hhdCBmcmFtZXMgYXJlIHNhZmUgdG8gZGVzdHJv
eSwgc28gdGhpcwotICAgIC8vIGlzIGxlZnQgdG8gdGhlbSB0byBpbXBsZW1lbnQuCi0gICAgLy8g
Rm9yIGNvbnZlbmllbmNlJ3Mgc2FrZSwgd2UgcHJvdmlkZSBhIGRlZmF1bHQgKGVtcHR5KSBpbXBs
ZW1lbnRhdGlvbiwKLSAgICAvLyBzaW5jZSBpbiBwcmFjdGljZSBvbmx5IEdJRnMgd2lsbCBldmVy
IHVzZSB0aGlzLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90
IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCBkYXRhLgotICAgIFZlY3RvcjxSR0JBMzJCdWZm
ZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAgICBib29sIG1fc2l6ZUF2YWlsYWJsZTsKLSAgICBt
dXRhYmxlIGJvb2wgbV9mYWlsZWQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OworICAgIHByaXZh
dGU6CisgICAgICAgIFJHQkEzMkFycmF5IG1fYnl0ZXM7CisgICAgICAgIEludFJlY3QgbV9yZWN0
OyAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0
aGUgb3ZlcmFsbCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVz
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBvcmlnaW5hbCByZWN0IHdhcyBz
bWFsbGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgdW5zaWduZWQgbV9o
ZWlnaHQ7IC8vIFRoZSBoZWlnaHQgKHRoZSBudW1iZXIgb2Ygcm93cyB3ZSd2ZSBmdWxseSBkZWNv
ZGVkKS4KKyAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRo
aXMgZnJhbWUgaXMgY29tcGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4KKyAgICAgICAgdW5zaWdu
ZWQgbV9kdXJhdGlvbjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KKyAgICAgICAgRnJhbWVEaXNw
b3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFt
ZSdzIGRhdGEgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCisgICAgICAgIGJvb2wg
bV9oYXNBbHBoYTsgLy8gV2hldGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1
ZmZlciBoYXZlIHRyYW5zcGFyZW5jeS4KKyAgICB9OworCisgICAgLy8gVGhlIEltYWdlRGVjb2Rl
ciBjbGFzcyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0
IGRlY29kZXJzCisgICAgLy8gKGUuZy4sIEdJRiwgSlBHLCBQTkcsIElDTykgdG8gZGVyaXZlIGZy
b20uICBBbGwgZGVjb2RlcnMgZGVjb2RlIGludG8gUkdCQTMyIGZvcm1hdAorICAgIC8vIGFuZCB0
aGUgYmFzZSBjbGFzcyBtYW5hZ2VzIHRoZSBSR0JBMzIgZnJhbWUgY2FjaGUuCisgICAgY2xhc3Mg
SW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEltYWdlRGVjb2RlcigpCisgICAg
ICAgICAgICA6IG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9mYWlsZWQo
ZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB+
SW1hZ2VEZWNvZGVyKCkge30KKworICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lv
biB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBl
LgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsK
KworICAgICAgICAvLyBBbGwgc3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29tZXRo
aW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2ZW4uCisgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsgbV9kYXRh
ID0gZGF0YTsgfQorCisgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0
aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZh
aWxhYmxlKCkgY29uc3QgPSAwOworCisgICAgICAgIC8vIFJlcXVlc3RzIHRoZSBzaXplLgorICAg
ICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisg
ICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBDbGFz
c2VzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBmcmFtZXMKKyAgICAgICAgLy8gd2lsbCBzY2FuIHRo
ZSBpbWFnZSBkYXRhIGZvciB0aGUgYW5zd2VyIGlmIHRoZXkgbmVlZCB0byAod2l0aG91dCBuZWNl
c3NhcmlseQorICAgICAgICAvLyBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZnJhbWVz
KS4KKyAgICAgICAgdmlydHVhbCBpbnQgZnJhbWVDb3VudCgpIHsgcmV0dXJuIDE7IH0KKworICAg
ICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1h
dGlvbiBsb29wLgorICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7
IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQorCisgICAgICAgIC8vIENhbGxlZCB0byBvYnRhaW4g
dGhlIFJHQkEzMkJ1ZmZlciBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVuZGVyaW5nLiAgVGhl
CisgICAgICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFzIG11Y2ggb2YgdGhlIGZy
YW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZworICAgICAgICAvLyBiYWNrIHRoZSBidWZmZXIu
CisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KSA9IDA7CisKKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVuZGVybHlpbmcg
aW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEgdHJhbnNwYXJlbmN5LgorICAgICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAg
ICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CisgICAgICAgIHZv
aWQgc2V0RmFpbGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7IH0KKworICAgICAgICAvLyBXaXBlIG91
dCBmcmFtZXMgaW4gdGhlIGZyYW1lIGJ1ZmZlciBjYWNoZSBiZWZvcmUgfGNsZWFyQmVmb3JlRnJh
bWV8LAorICAgICAgICAvLyBhc3N1bWluZyB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgYnJlYWtp
bmcgZGVjb2RpbmcuICBEaWZmZXJlbnQgZGVjb2RlcnMKKyAgICAgICAgLy8gcGxhY2UgZGlmZmVy
ZW50IHJlc3RyaWN0aW9ucyBvbiB3aGF0IGZyYW1lcyBhcmUgc2FmZSB0byBkZXN0cm95LCBzbyB0
aGlzCisgICAgICAgIC8vIGlzIGxlZnQgdG8gdGhlbSB0byBpbXBsZW1lbnQuCisgICAgICAgIC8v
IEZvciBjb252ZW5pZW5jZSdzIHNha2UsIHdlIHByb3ZpZGUgYSBkZWZhdWx0IChlbXB0eSkgaW1w
bGVtZW50YXRpb24sCisgICAgICAgIC8vIHNpbmNlIGluIHByYWN0aWNlIG9ubHkgR0lGcyB3aWxs
IGV2ZXIgdXNlIHRoaXMuCisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2Fj
aGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCisgICAg
ICAgIFZlY3RvcjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgYm9v
bCBtX3NpemVBdmFpbGFibGU7CisgICAgICAgIG11dGFibGUgYm9vbCBtX2ZhaWxlZDsKKyAgICAg
ICAgSW50U2l6ZSBtX3NpemU7CisgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Qk1QSW1hZ2VEZWNvZGVyLmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQp
IHx8IFBMQVRGT1JNKFdYKQotCiBuYW1lc3BhY2UgV2ViQ29yZQogewogCkBAIC00MSw2ICszOSw0
IEBAIFJHQkEzMkJ1ZmZlciogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICByZXR1cm4g
MDsKIH0KIAotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMjcgKzIzLDI2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEJNUF9E
RUNPREVSX0hfCi0jZGVmaW5lIEJNUF9ERUNPREVSX0hfCisjaWZuZGVmIEJNUEltYWdlRGVjb2Rl
cl9oCisjZGVmaW5lIEJNUEltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCTVBJbWFnZVJlYWRlcjsKKyAgICBj
bGFzcyBCTVBJbWFnZVJlYWRlcjsKIAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBCTVAgaW1h
Z2UgZm9ybWF0LgotY2xhc3MgQk1QSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2Rlcgot
ewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gImJtcCI7IH0KKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEJNUCBpbWFn
ZSBmb3JtYXQuCisgICAgY2xhc3MgQk1QSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2Rl
ciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuICJibXAiOyB9CiAKLSAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUg
c2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KLSAgICB2aXJ0dWFsIGJvb2wg
aXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBz
aXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgorICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciog
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci19OworICAgICAgICB2aXJ0dWFsIFJH
QkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAgfTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTQgQEAKICNp
bmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgog
Ci0jaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHSUZJbWFnZURlY29kZXJQcml2YXRlCi17Citj
bGFzcyBHSUZJbWFnZURlY29kZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBHSUZJbWFnZURlY29k
ZXJQcml2YXRlKEdJRkltYWdlRGVjb2RlciogZGVjb2RlciA9IDApCiAgICAgICAgIDogbV9yZWFk
ZXIoZGVjb2RlcikKKyAgICAgICAgLCBtX3JlYWRPZmZzZXQoMCkKICAgICB7Ci0gICAgICAgIG1f
cmVhZE9mZnNldCA9IDA7CiAgICAgfQogCiAgICAgfkdJRkltYWdlRGVjb2RlclByaXZhdGUoKQpA
QCAtNDUsMTEgKzQyLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWFkZXIuY2xvc2UoKTsKICAg
ICB9CiAKLSAgICBib29sIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIAorICAgIGJv
b2wgZGVjb2RlKFNoYXJlZEJ1ZmZlciogZGF0YSwgCiAgICAgICAgICAgICAgICAgR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSA9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LAog
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBoYWx0RnJhbWUgPSAtMSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3JlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEo
KSArIG1fcmVhZE9mZnNldCwgZGF0YS5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIAorICAgICAgICBy
ZXR1cm4gbV9yZWFkZXIucmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopZGF0YS0+ZGF0YSgpICsg
bV9yZWFkT2Zmc2V0LCBkYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFs
dEZyYW1lKTsKICAgICB9CkBAIC02MSw3ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNU
cmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmZyYW1lX3JlYWRlci0+aXNfdHJh
bnNwYXJlbnQ7IH0KIAotICAgIHZvaWQgZ2V0Q29sb3JNYXAodW5zaWduZWQgY2hhciomIG1hcCwg
dW5zaWduZWQmIHNpemUpIGNvbnN0IHsKKyAgICB2b2lkIGdldENvbG9yTWFwKHVuc2lnbmVkIGNo
YXIqJiBtYXAsIHVuc2lnbmVkJiBzaXplKSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKG1fcmVh
ZGVyLmZyYW1lX3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgewogICAgICAgICAg
ICAgbWFwID0gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKICAgICAgICAg
ICAgIHNpemUgPSAodW5zaWduZWQpbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1h
cF9zaXplOwpAQCAtODYsOCArODQsMTEgQEAgcHJpdmF0ZToKIH07CiAKIEdJRkltYWdlRGVjb2Rl
cjo6R0lGSW1hZ2VEZWNvZGVyKCkKLTogbV9mcmFtZUNvdW50VmFsaWQodHJ1ZSksIG1fcmVwZXRp
dGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSksIG1fcmVhZGVyKDApCi17fQorICAgIDogbV9m
cmFtZUNvdW50VmFsaWQodHJ1ZSkKKyAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25M
b29wT25jZSkKKyAgICAsIG1fcmVhZGVyKDApCit7Cit9CiAKIEdJRkltYWdlRGVjb2Rlcjo6fkdJ
RkltYWdlRGVjb2RlcigpCiB7CkBAIC0xMzksNyArMTQwLDEwIEBAIGludCBHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ291bnQoKQogICAgICAgICAvLyBzdGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBj
cmF3bCBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQK
ICAgICAgICAgLy8gSW1hZ2VJTyBkb2VzIG9uIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xz
IGFsbCB0aGUgZGF0YSBhZ2FpbikuCiAgICAgICAgIEdJRkltYWdlRGVjb2RlclByaXZhdGUgcmVh
ZGVyOwotICAgICAgICByZWFkZXIuZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIEdJRkZyYW1lQ291
bnRRdWVyeSk7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGZhaWwsIGJ1dCB3ZSB3YW50
IHRvIGtlZXAgYW55IHBhcnRpYWwgZGF0YSBpdCBtYXkKKyAgICAgICAgLy8gaGF2ZSBkZWNvZGVk
LCBzbyBkb24ndCBtYXJrIGl0IGlzIGludmFsaWQuIElmIHRoZXJlIGlzIGFuIG92ZXJmbG93Cisg
ICAgICAgIC8vIG9yIHNvbWUgc2VyaW91cyBlcnJvciwgbV9mYWlsZWQgd2lsbCBoYXZlIGdvdHRl
biBzZXQgZm9yIHVzLgorICAgICAgICByZWFkZXIuZGVjb2RlKG1fZGF0YS5nZXQoKSwgR0lGRnJh
bWVDb3VudFF1ZXJ5KTsKICAgICAgICAgbV9mcmFtZUNvdW50VmFsaWQgPSB0cnVlOwogICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5mcmFtZUNvdW50KCkpOwogICAgIH0K
QEAgLTE3MywxMyArMTc3LDEyIEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3Vu
dCgpIGMKIAogUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKKyAgICBp
ZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUNvdW50KCkpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
aW5kZXhdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUgJiYgbV9yZWFkZXIpCi0gICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1lLgotICAgICAg
ICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCsxKTsKKyAgICAgICAgZGVjb2RlKEdJRkZ1bGxR
dWVyeSwgaW5kZXggKyAxKTsgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCiAgICAgcmV0dXJuICZmcmFt
ZTsKIH0KIApAQCAtMjM5LDcgKzI0Miw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
R0lGUXVlcnkgcXUKICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgcXVlcnksIGhhbHRB
dEZyYW1lKTsKKyAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS5nZXQoKSwg
cXVlcnksIGhhbHRBdEZyYW1lKTsKICAgICAKICAgICBpZiAobV9mYWlsZWQpIHsKICAgICAgICAg
ZGVsZXRlIG1fcmVhZGVyOwpAQCAtMjY2LDEwICsyNjksMTAgQEAgdm9pZCBHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAgICAgICAgIG1fcmVhZGVyLT5m
cmFtZVdpZHRoKCksIG1fcmVhZGVyLT5mcmFtZUhlaWdodCgpKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0
aGUgYnVmZmVyLgotICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IG1fc2l6ZS53aWR0aCgpKQot
ICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgobV9zaXplLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJh
bWVYT2Zmc2V0KCkpOwotICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkgPiBtX3NpemUuaGVpZ2h0
KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpIC0gbV9yZWFk
ZXItPmZyYW1lWU9mZnNldCgpKTsKKyAgICBpZiAoZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCku
d2lkdGgoKSkKKyAgICAgICAgZnJhbWVSZWN0LnNldFdpZHRoKHNpemUoKS53aWR0aCgpIC0gbV9y
ZWFkZXItPmZyYW1lWE9mZnNldCgpKTsKKyAgICBpZiAoZnJhbWVSZWN0LmJvdHRvbSgpID4gc2l6
ZSgpLmhlaWdodCgpKQorICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQo
KSAtIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSk7CiAKICAgICBSR0JBMzJCdWZmZXIqIGNvbnN0
IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgYnVmZmVyLT5z
ZXRSZWN0KGZyYW1lUmVjdCk7CkBAIC0yODcsMTQgKzI5MCwxNCBAQCB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIC8vIGZpcnN0IGZyYW1lIHNwZWNpZmll
cyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCiAgICAgICAgIC8vIERpc3Bv
c2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkg
aW1hZ2UuKQogICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIqIHByZXZCdWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwogICAgICAgICBSR0JBMzJC
dWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9CiAgICAgICAgICAgICBwcmV2
QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwotICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAw
KSAmJgotICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzKSkgeworICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQor
ICAgICAgICAgICAgICAgJiYgKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3Zl
cndyaXRlUHJldmlvdXMpKSB7CiAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZm
ZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHByZXZCdWZm
ZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICAgICAg
aWYgKChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwK
ICAgICAgICAgICAgICAgICAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVw
KSkgewpAQCAtMzA1LDggKzMwOCw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIodW4KICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZy
YW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4
ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+cmVjdCgpOwotICAgICAgICAgICAgaWYg
KChmcmFtZUluZGV4ID09IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgIHByZXZSZWN0LmNvbnRh
aW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSkpKSB7CisgICAgICAgICAgICBpZiAo
KGZyYW1lSW5kZXggPT0gMCkKKyAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENs
ZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUK
ICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkg
aW1hZ2UuCiAgICAgICAgICAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVmZmVyKTsKQEAg
LTMyMSw3ICszMjQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
CiAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKCooY3VycmVudFJvdyArIHgp
LCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoKHByZXZS
ZWN0LndpZHRoKCkgPiAwKSAmJiAocHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKLSAgICAgICAgICAg
ICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAgICAgICAgYnVmZmVy
LT5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTMzNSw3ICszMzgsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZm
ZXIqIGJ1ZmZlcikgY29uc3QKIHsKLSAgICBidWZmZXItPmJ5dGVzKCkucmVzaXplKG1fc2l6ZS53
aWR0aCgpICogbV9zaXplLmhlaWdodCgpKTsKKyAgICBidWZmZXItPmJ5dGVzKCkucmVzaXplKHNp
emUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKICAgICBidWZmZXItPmJ5dGVzKCkuZmls
bCgwKTsKICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwogfQpAQCAtMzUzLDggKzM1Niw4
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICAgICAgaW5p
dEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpOwogCiAgICAgLy8gRG8gbm90aGluZyBmb3IgYm9ndXMg
ZGF0YS4KLSAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRl
ci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAg
IHJldHVybjsKKyAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3Jl
YWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IHNpemUoKS5oZWlnaHQoKSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwogICAgIHVuc2lnbmVk
IGNoYXIqIGNvbG9yTWFwOwpAQCAtMzY5LDEyICszNzIsMTIgQEAgdm9pZCBHSUZJbWFnZURlY29k
ZXI6OmhhdmVEZWNvZGVkUm93KHVucwogICAgIC8vIHdpdGhpbiB0aGUgb3ZlcmFsbCBpbWFnZS4g
IFRoZSByb3dzIHdlIGFyZSBkZWNvZGluZyBhcmUgd2l0aGluIHRoaXMKICAgICAvLyBzdWItcmVj
dGFuZ2xlLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBHSUYgZnJhbWUncyBzdWItcmVjdGFuZ2xl
IGlzICh4LHksdyxoKSB0aGVuIHJvdyAwIGlzIHJlYWxseSByb3cKICAgICAvLyB5LCBhbmQgZWFj
aCByb3cgZ29lcyBmcm9tIHggdG8geCt3LgotICAgIHVuc2lnbmVkIGRzdFBvcyA9IChtX3JlYWRl
ci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpICogbV9zaXplLndpZHRoKCkgKyBtX3JlYWRl
ci0+ZnJhbWVYT2Zmc2V0KCk7CisgICAgdW5zaWduZWQgZHN0UG9zID0gKG1fcmVhZGVyLT5mcmFt
ZVlPZmZzZXQoKSArIHJvd051bWJlcikgKiBzaXplKCkud2lkdGgoKSArIG1fcmVhZGVyLT5mcmFt
ZVhPZmZzZXQoKTsKICAgICB1bnNpZ25lZCogZHN0ID0gYnVmZmVyLmJ5dGVzKCkuZGF0YSgpICsg
ZHN0UG9zOwotICAgIHVuc2lnbmVkKiBkc3RFbmQgPSBkc3QgKyBtX3NpemUud2lkdGgoKSAtIG1f
cmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCogZHN0RW5kID0gZHN0ICsgc2l6
ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7CiAgICAgdW5zaWduZWQqIGN1
cnJEc3QgPSBkc3Q7CiAgICAgdW5zaWduZWQgY2hhciogY3VycmVudFJvd0J5dGUgPSByb3dCdWZm
ZXI7Ci0gICAgCisKICAgICB3aGlsZSAoY3VycmVudFJvd0J5dGUgIT0gcm93RW5kICYmIGN1cnJE
c3QgPCBkc3RFbmQpIHsKICAgICAgICAgaWYgKCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8
fCAqY3VycmVudFJvd0J5dGUgIT0gbV9yZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkgJiYgKmN1
cnJlbnRSb3dCeXRlIDwgY29sb3JNYXBTaXplKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2xv
ckluZGV4ID0gKmN1cnJlbnRSb3dCeXRlICogMzsKQEAgLTQwMSwxNCArNDA0LDE0IEBAIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICBpZiAocmVwZWF0Q291bnQg
PiAxKSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJvdyB8cmVwZWF0Q291bnR8LTEgdGltZXMuCiAg
ICAgICAgIHVuc2lnbmVkIG51bSA9IGN1cnJEc3QgLSBkc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHNp
emUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOwotICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IG1f
c2l6ZS53aWR0aCgpOwotICAgICAgICB1bnNpZ25lZCogZW5kID0gYnVmZmVyLmJ5dGVzKCkuZGF0
YSgpICsgd2lkdGggKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgIHVuc2lnbmVkIGRhdGFfc2l6
ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHVuc2lnbmVkIHdpZHRoID0gc2l6
ZSgpLndpZHRoKCk7CisgICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYnl0ZXMoKS5kYXRh
KCkgKyB3aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgY3VyckRzdCA9IGRzdCArIHdp
ZHRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykg
ewogICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQpIC8vIFByb3RlY3QgYWdhaW5z
dCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRDb3VudC4KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIHNpemUpOworICAg
ICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgZGF0YV9zaXplKTsKICAgICAgICAgICAgIGN1
cnJEc3QgKz0gd2lkdGg7CiAgICAgICAgIH0KICAgICB9CkBAIC00MzQsOSArNDM3LDkgQEAgdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgIGlmICghbV9jdXJyZW50
QnVmZmVyU2F3QWxwaGEpIHsKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1lIHdhcyBub24tdHJh
bnNwYXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAgICAgICAgIC8vIHJl
c3VsdGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNhbiBzZXRIYXNBbHBo
YShmYWxzZSkuCi0gICAgICAgIGlmIChidWZmZXIucmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50
UG9pbnQoMCwgMCksIG1fc2l6ZSkpKSB7CisgICAgICAgIGlmIChidWZmZXIucmVjdCgpLmNvbnRh
aW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVy
LnNldEhhc0FscGhhKGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChmcmFtZUluZGV4ID4gMCkg
eworICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4ID4gMCkgewogICAgICAgICAgICAgLy8gVHJp
Y2t5IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdo
ZXJlCiAgICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2ZSBhbHBoYS4g
IFRvIGtub3cgd2hldGhlciB0aGlzIGlzCiAgICAgICAgICAgICAvLyB0cnVlLCB3ZSBjaGVjayB0
aGUgc3RhcnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRvZXNuJ3QgaGF2ZQpAQCAtNDQ2
LDkgKzQ0OSw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAg
ICAgICAgICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkg
dGhlIHNhbWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKS4K
ICAgICAgICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVm
ZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgIHdoaWxlICgoZnJhbWVJbmRleCA+
IDApICYmCi0gICAgICAgICAgICAgICAgICAgIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgp
ID09Ci0gICAgICAgICAgICAgICAgICAgICAgICBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3Jp
dGVQcmV2aW91cykpCisgICAgICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQorICAgICAg
ICAgICAgICAgICAgICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1
ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICBwcmV2QnVm
ZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogCiAgICAgICAgICAgICAv
LyBOb3csIGlmIHdlJ3JlIGF0IGEgRGlzcG9zZU5vdFNwZWNpZmllZCBvciBEaXNwb3NlS2VlcCBm
cmFtZSwgdGhlbgpAQCAtNDU5LDEwICs0NjEsOCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgY2FzZSBp
cyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAgSWYKICAgICAgICAgICAgIC8vIGl0
IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0IGlzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBm
cmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0LCB3ZSBrbm93IHRoZSBjdXJyZW50IGZyYW1lIGhh
cyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KSA9PQotICAgICAgICAgICAgICAgICAgICBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVC
Z2NvbG9yKSAmJgotICAgICAgICAgICAgICAgICAgICAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAm
JgotICAgICAgICAgICAgICAgICAgICBidWZmZXIucmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXIt
PnJlY3QoKSkpCisgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkg
PT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikKKyAgICAgICAgICAgICAg
ICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucmVjdCgpLmNvbnRhaW5zKHBy
ZXZCdWZmZXItPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZh
bHNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3Niw2ICs0NzYsNCBAQCB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6Z2lmQ29tcGxldGUoKQogICAgIG1fcmVhZGVyID0gMDsKIH0KIAotfQotCi0jZW5k
aWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNzAgKzIzLDY5IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEdJRl9ERUNPREVSX0hfCi0jZGVmaW5l
IEdJRl9ERUNPREVSX0hfCisjaWZuZGVmIEdJRkltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIEdJRklt
YWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBHSUZJbWFnZURlY29kZXJQcml2YXRlOworICAgIGNsYXNzIEdJRklt
YWdlRGVjb2RlclByaXZhdGU7CiAKLS8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgR0lGIGltYWdl
IGZvcm1hdC4KLWNsYXNzIEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIKLXsK
LXB1YmxpYzoKLSAgICBHSUZJbWFnZURlY29kZXIoKTsKLSAgICB+R0lGSW1hZ2VEZWNvZGVyKCk7
CisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBHSUYgaW1hZ2UgZm9ybWF0LgorICAgIGNs
YXNzIEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgR0lGSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIH5HSUZJbWFnZURlY29kZXIoKTsK
IAotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4g
ImdpZiI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiAiZ2lmIjsgfQogCi0gICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQu
Ci0gICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7CisgICAgICAgIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgorICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKTsKIAotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9u
IGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUo
KSBjb25zdDsKKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24g
aGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFi
bGUoKSBjb25zdDsKIAotICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUg
aW1hZ2UuICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIKLSAgICAvLyAo
d2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZnJhbWVz
KS4KLSAgICB2aXJ0dWFsIGludCBmcmFtZUNvdW50KCk7CisgICAgICAgIC8vIFRoZSB0b3RhbCBu
dW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEg
Zm9yIHRoZSBhbnN3ZXIKKyAgICAgICAgLy8gKHdpdGhvdXQgbmVjZXNzYXJpbHkgZGVjb2Rpbmcg
YWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCisgICAgICAgIHZpcnR1YWwgaW50IGZyYW1l
Q291bnQoKTsKIAotICAgIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBm
b3IgYW4gYW5pbWF0aW9uIGxvb3AuCi0gICAgdmlydHVhbCBpbnQgcmVwZXRpdGlvbkNvdW50KCkg
Y29uc3Q7CisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBm
b3IgYW4gYW5pbWF0aW9uIGxvb3AuCisgICAgICAgIHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3Vu
dCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1
ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAKLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1
cm4gMDsgfQorICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkgeyByZXR1cm4gMDsgfQogCi0gICAgZW51bSBHSUZRdWVyeSB7IEdJRkZ1bGxR
dWVyeSwgR0lGU2l6ZVF1ZXJ5LCBHSUZGcmFtZUNvdW50UXVlcnkgfTsKKyAgICAgICAgZW51bSBH
SUZRdWVyeSB7IEdJRkZ1bGxRdWVyeSwgR0lGU2l6ZVF1ZXJ5LCBHSUZGcmFtZUNvdW50UXVlcnkg
fTsKIAotICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFt
ZSkgY29uc3Q7CisgICAgICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRG
cmFtZSkgY29uc3Q7CiAKLSAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLSAg
ICB2b2lkIHNpemVOb3dBdmFpbGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7
Ci0gICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpOwotICAgIHZvaWQg
aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVm
ZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVkIHJvd051bWJlciwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFy
ZW50UGl4ZWxzKTsKLSAgICB2b2lkIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwg
dW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9k
IGRpc3Bvc2FsTWV0aG9kKTsKLSAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CisgICAgICAgIC8vIENh
bGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgorICAgICAgICB2b2lkIHNpemVOb3dBdmFpbGFi
bGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgICAgIHZvaWQgZGVjb2Rp
bmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsKKyAgICAgICAgdm9pZCBoYXZlRGVjb2RlZFJv
dyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVk
IGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxz
KTsKKyAgICAgICAgdm9pZCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2ln
bmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbE1ldGhvZCk7CisgICAgICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsKIAotcHJpdmF0ZToKLSAg
ICAvLyBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZnJhbWUgYnVmZmVyIHdpdGggdGhlIGdpdmVu
IGluZGV4LCBiYXNlZCBvbiB0aGUKLSAgICAvLyBwcmV2aW91cyBmcmFtZSdzIGRpc3Bvc2FsIG1l
dGhvZC4KLSAgICB2b2lkIGluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KTsKKyAg
ICBwcml2YXRlOgorICAgICAgICAvLyBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZnJhbWUgYnVm
ZmVyIHdpdGggdGhlIGdpdmVuIGluZGV4LCBiYXNlZCBvbiB0aGUKKyAgICAgICAgLy8gcHJldmlv
dXMgZnJhbWUncyBkaXNwb3NhbCBtZXRob2QuCisgICAgICAgIHZvaWQgaW5pdEZyYW1lQnVmZmVy
KHVuc2lnbmVkIGZyYW1lSW5kZXgpOwogCi0gICAgLy8gQSBoZWxwZXIgZm9yIGluaXRGcmFtZUJ1
ZmZlcigpLCB0aGlzIHNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYW5kCi0gICAgLy8gZmls
bHMgaXQgd2l0aCB0cmFuc3BhcmVudCBwaXhlbHMuCi0gICAgdm9pZCBwcmVwRW1wdHlGcmFtZUJ1
ZmZlcihSR0JBMzJCdWZmZXIqIGJ1ZmZlcikgY29uc3Q7CisgICAgICAgIC8vIEEgaGVscGVyIGZv
ciBpbml0RnJhbWVCdWZmZXIoKSwgdGhpcyBzZXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGFu
ZAorICAgICAgICAvLyBmaWxscyBpdCB3aXRoIHRyYW5zcGFyZW50IHBpeGVscy4KKyAgICAgICAg
dm9pZCBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZmZXIqKSBjb25zdDsKIAotICAgIGJv
b2wgbV9mcmFtZUNvdW50VmFsaWQ7Ci0gICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsK
LSAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKLSAgICBtdXRhYmxlIEdJRkltYWdl
RGVjb2RlclByaXZhdGUqIG1fcmVhZGVyOwotfTsKKyAgICAgICAgYm9vbCBtX2ZyYW1lQ291bnRW
YWxpZDsKKyAgICAgICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKKyAgICAgICAgbXV0
YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CisgICAgICAgIG11dGFibGUgR0lGSW1hZ2VEZWNv
ZGVyUHJpdmF0ZSogbV9yZWFkZXI7CisgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDQzODMyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw4ICs3OCw2IEBAIG1haWxpbmcgYWRkcmVzcy4KICNpbmNsdWRlIDxzdHJp
bmcuaD4KICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKIAotI2lmIFBMQVRGT1JNKENBSVJP
KSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpCi0KIHVzaW5nIFdlYkNvcmU6OkdJRklt
YWdlRGVjb2RlcjsKIAogLy8gRGVmaW5lIHRoZSBNb3ppbGxhIG1hY3JvIHNldHVwIHNvIHRoYXQg
d2UgY2FuIGxlYXZlIHRoZSBtYWNyb3MgYWxvbmUuCkBAIC05MzksNSArOTM3LDMgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgIGNsaWVudHB0ci0+ZGVjb2Rp
bmdIYWx0ZWQoMCk7CiAgIHJldHVybiB0cnVlOwogfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJ
Uk8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDQzODMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OCArMzUsOCBAQAogICoKICAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCiAKLSNp
Zm5kZWYgX0dJRl9IXwotI2RlZmluZSBfR0lGX0hfCisjaWZuZGVmIEdJRkltYWdlUmVhZGVyX2gK
KyNkZWZpbmUgR0lGSW1hZ2VSZWFkZXJfaAogCiAvLyBEZWZpbmUgb3Vyc2VsdmVzIGFzIHRoZSBj
bGllbnRQdHIuICBNb3ppbGxhIGp1c3QgaGFja2VkIHRoZWlyIEMrKyBjYWxsYmFjayBjbGFzcyBp
bnRvIHRoaXMgb2xkIEMgZGVjb2RlciwKIC8vIHNvIHdlIHdpbGwgdG9vLgpAQCAtMTY4LDcgKzE2
OCw3IEBAIHN0cnVjdCBHSUZJbWFnZVJlYWRlciB7CiAgICAgdW5zaWduZWQgc2NyZWVuX3dpZHRo
OyAgICAgICAvKiBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhlaWdodCAqLwogICAgIHVuc2lnbmVk
IHNjcmVlbl9oZWlnaHQ7CiAgICAgaW50IGdsb2JhbF9jb2xvcm1hcF9zaXplOyAgIC8qIFNpemUg
b2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LiAqLwotICAgIGludCBpbWFnZXNfZGVjb2RlZDsgICAg
ICAgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcyAqLworICAg
IHVuc2lnbmVkIGltYWdlc19kZWNvZGVkOyAgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBm
b3IgYW5pbWF0ZWQgR0lGcyAqLwogICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAgICAgICAvKiBD
b3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1l
cykgKi8KICAgICBpbnQgbG9vcF9jb3VudDsgICAgICAgICAgICAgLyogTmV0c2NhcGUgc3BlY2lm
aWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4gKi8K
QEAgLTIxMyw0ICsyMTMsMyBAQCBwcml2YXRlOgogfTsKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmNwcAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCiAK
LSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotCiBu
YW1lc3BhY2UgV2ViQ29yZQogewogCkBAIC00MSw2ICszOSw0IEBAIFJHQkEzMkJ1ZmZlciogSUNP
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICByZXR1cm4gMDsKIH0KIAotfQotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
aAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2lj
by9JQ09JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjcgKzIzLDI2IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIElDT19ERUNPREVSX0hfCi0jZGVmaW5lIElD
T19ERUNPREVSX0hfCisjaWZuZGVmIElDT0ltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIElDT0ltYWdl
RGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJQ09JbWFnZVJlYWRlcjsKKyAgICBjbGFzcyBJQ09JbWFnZVJlYWRlcjsK
IAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBJQ08gYW5kIENVUiBpbWFnZSBmb3JtYXRzLgot
Y2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlcgotewotcHVibGljOgot
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImlj
byI7IH0KKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIElDTyBhbmQgQ1VSIGltYWdlIGZv
cm1hdHMuCisgICAgY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuICJpY28iOyB9CiAKLSAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6
ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXpl
IGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgorICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci19OworICAgICAgICB2aXJ0dWFsIFJHQkEz
MkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAgfTsKIAotfQor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJ
KHJldmlzaW9uIDQzODMyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwzNCArMzgsMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCiAjaW5j
bHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmIFBMQVRGT1JNKENBSVJP
KSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpCi0KLSNpZiBDT01QSUxFUihNU1ZDKQot
Ly8gUmVtb3ZlIHdhcm5pbmdzIGZyb20gd2FybmluZyBsZXZlbCA0LgotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGUgOiA0NjExKSAvLyB3YXJuaW5nIEM0NjExOiBpbnRlcmFjdGlvbiBiZXR3ZWVuICdf
c2V0am1wJyBhbmQgQysrIG9iamVjdCBkZXN0cnVjdGlvbiBpcyBub24tcG9ydGFibGUKLQotLy8g
aWYgQUREUkVTU19UQUdfQklUIGlzIGRmaW5lZCwgSU5UMzIgaGFzIGJlZW4gZGVjbGFyZWQgYXMg
YSB0eXBlZGVmIGluIHRoZSBQbGF0Zm9ybVNESyAoQmFzZVRzZC5oKSwKLS8vIHNvIHdlIG5lZWQg
dG8gc3RvcCBqcGVnbGliLmggZnJvbSB0cnlpbmcgdG8gI2RlZmluZSBpdCAKLS8vIHNlZSBoZXJl
IGZvciBtb3JlIGluZm86IGh0dHA6Ly93d3cuY3lnd2luLmNvbS9tbC9jeWd3aW4vMjAwNC0wNy9t
c2cwMTA1MS5odG1sCi0jIGlmIGRlZmluZWQoQUREUkVTU19UQUdfQklUKSAmJiAhZGVmaW5lZChY
TURfSCkKLSMgIGRlZmluZSBYTURfSAotIyAgZGVmaW5lIFZUS19KUEVHX1hNRF9ICi0jIGVuZGlm
Ci0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKIAogZXh0ZXJuICJDIiB7CiAjaW5jbHVkZSAianBl
Z2xpYi5oIgogfQogCi0jaWYgQ09NUElMRVIoTVNWQykKLSMgaWYgZGVmaW5lZChWVEtfSlBFR19Y
TURfSCkKLSMgIHVuZGVmIFZUS19KUEVHX1hNRF9ICi0jICB1bmRlZiBYTURfSAotIyBlbmRpZgot
I2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpCi0KICNpbmNsdWRlIDxzZXRqbXAuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDgyLDcgKzQ1OSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
b3V0cHV0U2NhbmxpbmVzKCkKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZl
cjo6RnJhbWVFbXB0eSkgewogICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cg
dG8gdGhlIGNvcnJlY3Qgd2lkdGgvaGVpZ2h0LgogICAgICAgICBSR0JBMzJBcnJheSYgYnl0ZXMg
PSBidWZmZXIuYnl0ZXMoKTsKLSAgICAgICAgYnl0ZXMucmVzaXplKG1fc2l6ZS53aWR0aCgpICog
bV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgYnl0ZXMucmVzaXplKHNpemUoKS53aWR0aCgpICog
c2l6ZSgpLmhlaWdodCgpKTsKIAogICAgICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBw
YXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVy
OjpGcmFtZVBhcnRpYWwpOwpAQCAtNTAzLDcgKzQ4MCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rl
cjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgaWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5m
bywgc2FtcGxlcywgMSkgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
SlNBTVBMRSAqajEgPSBzYW1wbGVzWzBdOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5mby0+b3V0cHV0X3dpZHRoOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0g
MDsgeCA8IGluZm8tPm91dHB1dF93aWR0aDsgKyt4KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBy
ID0gKmoxKys7CiAgICAgICAgICAgICB1bnNpZ25lZCBnID0gKmoxKys7CiAgICAgICAgICAgICB1
bnNpZ25lZCBiID0gKmoxKys7CkBAIC01MjcsNSArNTA0LDMgQEAgdm9pZCBKUEVHSW1hZ2VEZWNv
ZGVyOjpqcGVnQ29tcGxldGUoKQogfQogCiB9Ci0KLSNlbmRpZiAvLyBQTEFURk9STShDQUlSTykK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw1MiArMjMsNTEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSlBFR19E
RUNPREVSX0hfCi0jZGVmaW5lIEpQRUdfREVDT0RFUl9IXworI2lmbmRlZiBKUEVHSW1hZ2VEZWNv
ZGVyX2gKKyNkZWZpbmUgSlBFR0ltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBKUEVHSW1hZ2VSZWFkZXI7Cisg
ICAgY2xhc3MgSlBFR0ltYWdlUmVhZGVyOwogCi0vLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEpQ
RUcgaW1hZ2UgZm9ybWF0LgotY2xhc3MgSlBFR0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURl
Y29kZXIKLXsKLXB1YmxpYzoKLSAgICBKUEVHSW1hZ2VEZWNvZGVyKCk7Ci0gICAgfkpQRUdJbWFn
ZURlY29kZXIoKTsKKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEpQRUcgaW1hZ2UgZm9y
bWF0LgorICAgIGNsYXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEpQRUdJbWFnZURlY29kZXIoKTsKKyAgICAgICAgfkpQRUdJ
bWFnZURlY29kZXIoKTsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QgeyByZXR1cm4gImpwZyI7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVF
eHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAianBnIjsgfQogCi0gICAgLy8gVGFrZSB0aGUgZGF0
YSBhbmQgc3RvcmUgaXQuCi0gICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIC8vIFRha2UgdGhlIGRhdGEgYW5k
IHN0b3JlIGl0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBz
aXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBp
c1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNp
emUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwg
UkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICAgICAg
CisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotICAgIHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICBK
UEVHSW1hZ2VSZWFkZXIqIHJlYWRlcigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9CisgICAgICAgIEpQ
RUdJbWFnZVJlYWRlciogcmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KIAotICAgIHZvaWQg
c2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgaWYgKCFtX3NpemVBdmFp
bGFibGUpIHsKLSAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAg
ICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICB2b2lkIHNldFNpemUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgICAgICBpZiAoIW1fc2l6ZUF2YWlsYWJs
ZSkgeworICAgICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgIH0KIAotICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7Ci0gICAgdm9pZCBq
cGVnQ29tcGxldGUoKTsKKyAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoKTsKKyAgICAgICAg
dm9pZCBqcGVnQ29tcGxldGUoKTsKIAotcHJpdmF0ZToKLSAgICBtdXRhYmxlIEpQRUdJbWFnZVJl
YWRlciogbV9yZWFkZXI7Ci19OworICAgIHByaXZhdGU6CisgICAgICAgIG11dGFibGUgSlBFR0lt
YWdlUmVhZGVyKiBtX3JlYWRlcjsKKyAgICB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0MzgzMikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEzICs0MCw2IEBACiAjaW5jbHVkZSAicG5nLmgiCiAjaW5jbHVkZSAi
YXNzZXJ0LmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKFdYKQotCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJlbW92ZSB3YXJuaW5ncyBmcm9tIHdh
cm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDYxMSkgLy8gd2Fybmlu
ZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGptcCcgYW5kIEMrKyBvYmplY3QgZGVz
dHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBHYW1tYSBjb25zdGFudHMuCkBAIC01NSw3ICs0OCw3IEBAIGNvbnN0IGRvdWJsZSBjRGVm
YXVsdEdhbW1hID0gMi4yOwogY29uc3QgZG91YmxlIGNJbnZlcnNlR2FtbWEgPSAwLjQ1NDU1Owog
CiAvLyBQcm90ZWN0IGFnYWluc3QgbGFyZ2UgUE5Hcy4gU2VlIE1vemlsbGEncyBidWcgIzI1MTM4
MSBmb3IgbW9yZSBpbmZvLgotY29uc3QgbG9uZyBjTWF4UE5HU2l6ZSA9IDEwMDAwMDBMOworY29u
c3QgdW5zaWduZWQgbG9uZyBjTWF4UE5HU2l6ZSA9IDEwMDAwMDBVTDsKIAogLy8gQ2FsbGVkIGlm
IHRoZSBkZWNvZGluZyBvZiB0aGUgaW1hZ2UgZmFpbHMuCiBzdGF0aWMgdm9pZCBQTkdBUEkgZGVj
b2RpbmdGYWlsZWQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2NvbnN0X2NoYXJwIGVycm9yX21z
Zyk7CkBAIC03OCw5ICs3MSwxMiBAQCBjbGFzcyBQTkdJbWFnZVJlYWRlcgogewogcHVibGljOgog
ICAgIFBOR0ltYWdlUmVhZGVyKFBOR0ltYWdlRGVjb2RlciogZGVjb2RlcikKLSAgICA6IG1fcmVh
ZE9mZnNldCgwKSwgbV9kZWNvZGluZ1NpemVPbmx5KGZhbHNlKSwgbV9pbnRlcmxhY2VCdWZmZXIo
MCksIG1faGFzQWxwaGEoMCkKKyAgICAgICAgOiBtX3JlYWRPZmZzZXQoMCkKKyAgICAgICAgLCBt
X2RlY29kaW5nU2l6ZU9ubHkoZmFsc2UpCisgICAgICAgICwgbV9pbnRlcmxhY2VCdWZmZXIoMCkK
KyAgICAgICAgLCBtX2hhc0FscGhhKDApCiAgICAgewotICAgICAgICBtX3BuZyA9IHBuZ19jcmVh
dGVfcmVhZF9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBOVUxMLCBkZWNvZGluZ0ZhaWxl
ZCwgZGVjb2RpbmdXYXJuaW5nKTsKKyAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3Ry
dWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgMCwgZGVjb2RpbmdGYWlsZWQsIGRlY29kaW5nV2Fy
bmluZyk7CiAgICAgICAgIG1faW5mbyA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QobV9wbmcpOwog
ICAgICAgICBwbmdfc2V0X3Byb2dyZXNzaXZlX3JlYWRfZm4obV9wbmcsIGRlY29kZXIsIGhlYWRl
ckF2YWlsYWJsZSwgcm93QXZhaWxhYmxlLCBwbmdDb21wbGV0ZSk7CiAgICAgfQpAQCAtOTIsOCAr
ODgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsb3NlKCkgewogICAgICAgICBpZiAobV9wbmcg
JiYgbV9pbmZvKQotICAgICAgICAgICAgcG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3QoJm1fcG5nLCAm
bV9pbmZvLCAwKTsKKyAgICAgICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZtX3BuZywg
Jm1faW5mbywgMCk7ICAvLyBXaWxsIHplcm8gdGhlIHBvaW50ZXJzLgogICAgICAgICBkZWxldGUg
W11tX2ludGVybGFjZUJ1ZmZlcjsKKyAgICAgICAgbV9pbnRlcmxhY2VCdWZmZXIgPSAwOwogICAg
ICAgICBtX3JlYWRPZmZzZXQgPSAwOwogICAgIH0KIApAQCAtMTM5LDcgKzEzNiw3IEBAIHByaXZh
dGU6CiB9OwogCiBQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2RlcigpCi06IG1fcmVhZGVy
KDApCisgICAgOiBtX3JlYWRlcigwKQogewogICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUo
MSk7CiB9CkBAIC0yMjQsNiArMjIxLDEwIEBAIHZvaWQgaGVhZGVyQXZhaWxhYmxlKHBuZ19zdHJ1
Y3RwIHBuZywgcG4KICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3By
b2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxlKCk7CiB9CiAKK3ZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpIHsKKyAgICBtX2ZhaWxlZCA9IHRydWU7Cit9CisK
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19zdHJ1
Y3RwIHBuZyA9IHJlYWRlcigpLT5wbmdQdHIoKTsKQEAgLTMxMiwxNiArMzEzLDE2IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBpZiAoYnVmZmVyLnN0YXR1
cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewogICAgICAgICAvLyBMZXQncyByZXNp
emUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNvcnJlY3Qgd2lkdGgvaGVpZ2h0LgogICAgICAgICBS
R0JBMzJBcnJheSYgYnl0ZXMgPSBidWZmZXIuYnl0ZXMoKTsKLSAgICAgICAgYnl0ZXMucmVzaXpl
KG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgYnl0ZXMucmVzaXpl
KHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKIAogICAgICAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwogCiAgICAgICAgIC8vIEZvciBQTkdz
LCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZl
ci5zZXRSZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkp
OworICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpKTsKIAogICAgICAgICBpZiAocmVhZGVyKCktPnBuZ1B0cigpLT5pbnRl
cmxhY2VkKQotICAgICAgICAgICAgcmVhZGVyKCktPmNyZWF0ZUludGVybGFjZUJ1ZmZlcigocmVh
ZGVyKCktPmhhc0FscGhhKCkgPyA0IDogMykgKiBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgICAgICByZWFkZXIoKS0+Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKChyZWFk
ZXIoKS0+aGFzQWxwaGEoKSA/IDQgOiAzKSAqIHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdo
dCgpKTsKICAgICB9CiAKICAgICBpZiAocm93QnVmZmVyID09IDApCkBAIC0zNjEsMTcgKzM2Miwx
NyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgcG5nX2J5
dGVwIHJvdzsKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gcmVhZGVyKCktPmludGVy
bGFjZUJ1ZmZlcigpOwogICAgIGlmIChpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgcm93ID0g
aW50ZXJsYWNlQnVmZmVyICsgKHJvd0luZGV4ICogY29sb3JDaGFubmVscyAqIG1fc2l6ZS53aWR0
aCgpKTsKKyAgICAgICAgcm93ID0gaW50ZXJsYWNlQnVmZmVyICsgKHJvd0luZGV4ICogY29sb3JD
aGFubmVscyAqIHNpemUoKS53aWR0aCgpKTsKICAgICAgICAgcG5nX3Byb2dyZXNzaXZlX2NvbWJp
bmVfcm93KHBuZywgcm93LCByb3dCdWZmZXIpOwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHJv
dyA9IHJvd0J1ZmZlcjsKIAogICAgIC8vIENvcHkgdGhlIGRhdGEgaW50byBvdXIgYnVmZmVyLgot
ICAgIGludCB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOworICAgIGludCB3aWR0aCA9IHNpemUoKS53
aWR0aCgpOwogICAgIHVuc2lnbmVkKiBkc3QgPSBidWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyByb3dJ
bmRleCAqIHdpZHRoOwogICAgIGJvb2wgc2F3QWxwaGEgPSBmYWxzZTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHdpZHRoOyBpKyspIHsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspIHsKICAgICAgICAgdW5zaWduZWQgcmVkID0gKnJvdysrOwogICAgICAgICB1bnNpZ25lZCBn
cmVlbiA9ICpyb3crKzsKICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICpyb3crKzsKQEAgLTM5OCw2
ICszOTksNCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKIH0KIAotfQotCi0jZW5k
aWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNDYgKzIzLDQ1IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFBOR19ERUNPREVSX0hfCi0jZGVmaW5l
IFBOR19ERUNPREVSX0hfCisjaWZuZGVmIFBOR0ltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIFBOR0lt
YWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBQTkdJbWFnZVJlYWRlcjsKKyAgICBjbGFzcyBQTkdJbWFnZVJlYWRl
cjsKIAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBQTkcgaW1hZ2UgZm9ybWF0LgotY2xhc3Mg
UE5HSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlcgotewotcHVibGljOgotICAgIFBO
R0ltYWdlRGVjb2RlcigpOwotICAgIH5QTkdJbWFnZURlY29kZXIoKTsKKyAgICAvLyBUaGlzIGNs
YXNzIGRlY29kZXMgdGhlIFBORyBpbWFnZSBmb3JtYXQuCisgICAgY2xhc3MgUE5HSW1hZ2VEZWNv
ZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CisgICAgcHVibGljOgorICAgICAgICBQTkdJbWFn
ZURlY29kZXIoKTsKKyAgICAgICAgflBOR0ltYWdlRGVjb2RlcigpOwogCi0gICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAicG5nIjsgfQorICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJwbmci
OyB9CiAKLSAgICAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKyAg
ICAgICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0g
ICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2Rl
ZCB5ZXQuCi0gICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgICAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVk
IHlldC4KKyAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
OworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCk7CiAKLSAgICB2b2lkIGRlY29kZShib29sIHNpemVPbmx5ID0gZmFsc2UpIGNvbnN0
OworICAgICAgICB2b2lkIGRlY29kZShib29sIHNpemVPbmx5ID0gZmFsc2UpIGNvbnN0OwogCi0g
ICAgUE5HSW1hZ2VSZWFkZXIqIHJlYWRlcigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9CisgICAgICAg
IFBOR0ltYWdlUmVhZGVyKiByZWFkZXIoKSB7IHJldHVybiBtX3JlYWRlcjsgfQogCi0gICAgLy8g
Q2FsbGJhY2tzIGZyb20gbGlicG5nCi0gICAgdm9pZCBkZWNvZGluZ0ZhaWxlZCgpIHsgbV9mYWls
ZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBoZWFkZXJBdmFpbGFibGUoKTsKLSAgICB2b2lkIHJvd0F2
YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LCBpbnQg
aW50ZXJsYWNlUGFzcyk7Ci0gICAgdm9pZCBwbmdDb21wbGV0ZSgpOworICAgICAgICAvLyBDYWxs
YmFja3MgZnJvbSBsaWJwbmcKKyAgICAgICAgdm9pZCBkZWNvZGluZ0ZhaWxlZCgpOworICAgICAg
ICB2b2lkIGhlYWRlckF2YWlsYWJsZSgpOworICAgICAgICB2b2lkIHJvd0F2YWlsYWJsZSh1bnNp
Z25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LCBpbnQgaW50ZXJsYWNlUGFz
cyk7CisgICAgICAgIHZvaWQgcG5nQ29tcGxldGUoKTsKIAotcHJpdmF0ZToKLSAgICBtdXRhYmxl
IFBOR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsKLX07CisgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0
YWJsZSBQTkdJbWFnZVJlYWRlciogbV9yZWFkZXI7CisgICAgfTsKIAotfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9CTVBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQzODMyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICsxLDU0IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQk1QSW1h
Z2VEZWNvZGVyX2gKLSNkZWZpbmUgQk1QSW1hZ2VEZWNvZGVyX2gKLQotI2luY2x1ZGUgIkJNUElt
YWdlUmVhZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIC8vIFRoaXMgY2xhc3Mg
ZGVjb2RlcyB0aGUgQk1QIGltYWdlIGZvcm1hdC4KLSAgICBjbGFzcyBCTVBJbWFnZURlY29kZXIg
OiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiYm1wIjsgfQotCi0gICAg
ICAgIC8vIEJNUEltYWdlUmVhZGVyCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShT
aGFyZWRCdWZmZXIqKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFByb2Nlc3NlcyB0aGUg
ZmlsZSBoZWFkZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YS4gIFJldHVybnMgdHJ1ZSBp
ZgotICAgICAgICAvLyB0aGUgZmlsZSBoZWFkZXIgY291bGQgYmUgZGVjb2RlZC4KLSAgICAgICAg
Ym9vbCBwcm9jZXNzRmlsZUhlYWRlcihTaGFyZWRCdWZmZXIqKTsKLSAgICB9OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIw
MDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKiANCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmli
dXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKiANCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
DQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisg
Ki8NCisNCisjaWZuZGVmIEJNUEltYWdlRGVjb2Rlcl9oDQorI2RlZmluZSBCTVBJbWFnZURlY29k
ZXJfaA0KKw0KKyNpbmNsdWRlICJCTVBJbWFnZVJlYWRlci5oIg0KKw0KK25hbWVzcGFjZSBXZWJD
b3JlIHsNCisNCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBCTVAgaW1hZ2UgZm9ybWF0
Lg0KKyAgICBjbGFzcyBCTVBJbWFnZURlY29kZXIgOiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIgew0K
KyAgICBwdWJsaWM6DQorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuICJibXAiOyB9DQorDQorICAgICAgICAvLyBCTVBJbWFnZVJlYWRlcg0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGRlY29kZUltYWdlKFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAg
ICBwcml2YXRlOg0KKyAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBmaWxlIGhlYWRlciBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAgUmV0dXJucyB0cnVlIGlmDQorICAgICAgICAvLyB0aGUg
ZmlsZSBoZWFkZXIgY291bGQgYmUgZGVjb2RlZC4NCisgICAgICAgIGJvb2wgcHJvY2Vzc0ZpbGVI
ZWFkZXIoU2hhcmVkQnVmZmVyKik7DQorICAgIH07DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQ0KKw0KKyNlbmRpZg0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9CTVBJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA0MzgzMikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMyNyArMSwzMjcgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIw
MDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBCTVBJbWFnZVJlYWRl
cl9oCi0jZGVmaW5lIEJNUEltYWdlUmVhZGVyX2gKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBU
aGlzIGNsYXNzIGRlY29kZXMgYSBCTVAgaW1hZ2UuICBJdCBpcyB1c2VkIGFzIGEgYmFzZSBmb3Ig
dGhlIEJNUCBhbmQgSUNPCi0gICAgLy8gZGVjb2RlcnMsIHdoaWNoIHdyYXAgaXQgaW4gdGhlIGFw
cHJvcHJpYXRlIGNvZGUgdG8gcmVhZCBmaWxlIGhlYWRlcnMsIGV0Yy4KLSAgICBjbGFzcyBCTVBJ
bWFnZVJlYWRlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAg
Qk1QSW1hZ2VSZWFkZXIoKTsKLQotICAgICAgICAvLyBEb2VzIHRoZSBhY3R1YWwgZGVjb2Rpbmcu
ICB8ZGF0YXwgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsCi0gICAgICAgIC8v
IGJ1dCBtYXkgYmUgaW5jb21wbGV0ZS4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlY29kZUltYWdl
KFNoYXJlZEJ1ZmZlciogZGF0YSkgPSAwOwotCi0gICAgICAgIC8vIEltYWdlRGVjb2RlcgotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKTsKLSAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBlbnVtIEFuZE1h
c2tTdGF0ZSB7Ci0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgTm90WWV0RGVjb2RlZCwK
LSAgICAgICAgICAgIERlY29kaW5nLAotICAgICAgICB9OwotCi0gICAgICAgIC8vIERlY29kZXMg
YSBzaW5nbGUgQk1QLCBzdGFydGluZyB3aXRoIGFuIGluZm8gaGVhZGVyLgotICAgICAgICB2b2lk
IGRlY29kZUJNUChTaGFyZWRCdWZmZXIqIGRhdGEpOwotCi0gICAgICAgIC8vIFJlYWQgYSB2YWx1
ZSBmcm9tIHxkYXRhW21fZGVjb2RlZE9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXRdfCwgY29udmVy
dGluZwotICAgICAgICAvLyBmcm9tIGxpdHRsZSB0byBuYXRpdmUgZW5kaWFubmVzcy4KLSAgICAg
ICAgaW5saW5lIHVpbnQxNl90IHJlYWRVaW50MTYoU2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQgYWRk
aXRpb25hbE9mZnNldCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgdWludDE2X3QgcmVz
dWx0OwotICAgICAgICAgICAgbWVtY3B5KCZyZXN1bHQsICZkYXRhLT5kYXRhKClbbV9kZWNvZGVk
T2Zmc2V0ICsgYWRkaXRpb25hbE9mZnNldF0sIDIpOwotICAgICAgICAjaWYgUExBVEZPUk0oQklH
X0VORElBTikKLSAgICAgICAgICAgIHJlc3VsdCA9ICgocmVzdWx0ICYgMHhmZikgPDwgOCkgfCAo
KHJlc3VsdCAmIDB4ZmYwMCkgPj4gOCk7Ci0gICAgICAgICNlbmRpZgotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB1aW50MzJfdCByZWFkVWlu
dDMyKFNoYXJlZEJ1ZmZlciogZGF0YSwgaW50IGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlc3VsdDsKLSAgICAgICAgICAgIG1lbWNweSgm
cmVzdWx0LCAmZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXRd
LCA0KTsKLSAgICAgICAgI2lmIFBMQVRGT1JNKEJJR19FTkRJQU4pCi0gICAgICAgICAgICByZXN1
bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDI0KSB8ICgocmVzdWx0ICYgMHhmZjAwKSA8PCA4KSB8
Ci0gICAgICAgICAgICAgICAgKChyZXN1bHQgJiAweGZmMDAwMCkgPj4gOCkgfCAoKHJlc3VsdCAm
IDB4ZmYwMDAwMDApID4+IDI0KTsKLSAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQW4gaW5kZXggaW50byB8bV9kYXRhfCBy
ZXByZXNlbnRpbmcgaG93IG11Y2ggd2UndmUgYWxyZWFkeSBkZWNvZGVkLgotICAgICAgICBzaXpl
X3QgbV9kZWNvZGVkT2Zmc2V0OwotCi0gICAgICAgIC8vIFRoZSBmaWxlIG9mZnNldCBhdCB3aGlj
aCB0aGUgQk1QIGluZm8gaGVhZGVyIHN0YXJ0cy4KLSAgICAgICAgc2l6ZV90IG1faGVhZGVyT2Zm
c2V0OwotCi0gICAgICAgIC8vIFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0aGUgYWN0dWFsIGlt
YWdlIGJpdHMgc3RhcnQuICBXaGVuIGRlY29kaW5nIElDTwotICAgICAgICAvLyBmaWxlcywgdGhp
cyBpcyBzZXQgdG8gMCwgc2luY2UgaXQncyBub3Qgc3RvcmVkIGFueXdoZXJlIGluIGEgaGVhZGVy
OyB0aGUKLSAgICAgICAgLy8gcmVhZGVyIGZ1bmN0aW9ucyBleHBlY3QgdGhlIGltYWdlIGRhdGEg
dG8gc3RhcnQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIGhlYWRlciBhbmQgKGlm
IG5lY2Vzc2FyeSkgY29sb3IgdGFibGUuCi0gICAgICAgIHNpemVfdCBtX2ltZ0RhdGFPZmZzZXQ7
Ci0KLSAgICAgICAgLy8gSUNPcyBzdG9yZSBhIDFicHAgIm1hc2siIGltbWVkaWF0ZWx5IGFmdGVy
IHRoZSBtYWluIGJpdG1hcCBpbWFnZSBkYXRhCi0gICAgICAgIC8vIChhbmQsIGNvbmZ1c2luZ2x5
LCBhZGQgaXRzIGhlaWdodCB0byB0aGUgYmlIZWlnaHQgdmFsdWUgaW4gdGhlIGluZm8KLSAgICAg
ICAgLy8gaGVhZGVyLCB0aHVzIGRvdWJsaW5nIGl0KS4gIFRoaXMgdmFyaWFibGUgdHJhY2tzIHdo
ZXRoZXIgd2UgaGF2ZSBzdWNoIGEKLSAgICAgICAgLy8gbWFzayBhbmQgaWYgd2UndmUgc3RhcnRl
ZCBkZWNvZGluZyBpdCB5ZXQuCi0gICAgICAgIEFuZE1hc2tTdGF0ZSBtX2FuZE1hc2tTdGF0ZTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFRoZSB2YXJpb3VzIEJNUCBjb21wcmVzc2lvbiB0
eXBlcy4gIFdlIGRvbid0IGN1cnJlbnRseSBkZWNvZGUgYWxsIHRoZXNlLgotICAgICAgICBlbnVt
IENvbXByZXNzaW9uVHlwZSB7Ci0gICAgICAgICAgICAvLyBVbml2ZXJzYWwgdHlwZXMKLSAgICAg
ICAgICAgIFJHQiA9IDAsCi0gICAgICAgICAgICBSTEU4ID0gMSwKLSAgICAgICAgICAgIFJMRTQg
PSAyLAotICAgICAgICAgICAgLy8gV2luZG93cyBWMysgb25seQotICAgICAgICAgICAgQklURklF
TERTID0gMywKLSAgICAgICAgICAgIEpQRUcgPSA0LAotICAgICAgICAgICAgUE5HID0gNSwKLSAg
ICAgICAgICAgIC8vIE9TLzIgMi54LW9ubHkKLSAgICAgICAgICAgIEhVRkZNQU4xRCwgIC8vIFN0
b3JlZCBpbiBmaWxlIGFzIDMKLSAgICAgICAgICAgIFJMRTI0LCAgICAgIC8vIFN0b3JlZCBpbiBm
aWxlIGFzIDQKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBUaGVzZSBhcmUgYmFzZWQgb24gdGhl
IFdpbmRvd3MgQklUTUFQSU5GT0hFQURFUiBhbmQgUkdCVFJJUExFIHN0cnVjdHMsCi0gICAgICAg
IC8vIGJ1dCB3aXRoIHVubmVjZXNzYXJ5IGVudHJpZXMgcmVtb3ZlZC4KLSAgICAgICAgc3RydWN0
IEJpdG1hcEluZm9IZWFkZXIgewotICAgICAgICAgICAgdWludDMyX3QgYmlTaXplOwotICAgICAg
ICAgICAgaW50MzJfdCBiaVdpZHRoOwotICAgICAgICAgICAgaW50MzJfdCBiaUhlaWdodDsKLSAg
ICAgICAgICAgIHVpbnQxNl90IGJpQml0Q291bnQ7Ci0gICAgICAgICAgICBDb21wcmVzc2lvblR5
cGUgYmlDb21wcmVzc2lvbjsKLSAgICAgICAgICAgIHVpbnQzMl90IGJpQ2xyVXNlZDsKLSAgICAg
ICAgfTsKLSAgICAgICAgc3RydWN0IFJHQlRyaXBsZSB7Ci0gICAgICAgICAgICB1aW50OF90IHJn
YkJsdWU7Ci0gICAgICAgICAgICB1aW50OF90IHJnYkdyZWVuOwotICAgICAgICAgICAgdWludDhf
dCByZ2JSZWQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gRGV0ZXJtaW5lcyB0aGUgc2l6ZSBv
ZiB0aGUgQk1QIGluZm8gaGVhZGVyLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIGlzCi0gICAg
ICAgIC8vIHZhbGlkLgotICAgICAgICBib29sIGdldEluZm9IZWFkZXJTaXplKFNoYXJlZEJ1ZmZl
ciogZGF0YSk7Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBCTVAgaW5mbyBoZWFkZXIuICBS
ZXR1cm5zIHRydWUgaWYgdGhlIGluZm8gaGVhZGVyIGNvdWxkIGJlCi0gICAgICAgIC8vIGRlY29k
ZWQuCi0gICAgICAgIGJvb2wgcHJvY2Vzc0luZm9IZWFkZXIoU2hhcmVkQnVmZmVyKiBkYXRhKTsK
LQotICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHByb2Nlc3NJbmZvSGVhZGVyKCkgd2hp
Y2ggZG9lcyB0aGUgYWN0dWFsIHJlYWRpbmcgb2YKLSAgICAgICAgLy8gaGVhZGVyIHZhbHVlcyBm
cm9tIHRoZSBieXRlIHN0cmVhbS4gIFJldHVybnMgZmFsc2Ugb24gZXJyb3IuCi0gICAgICAgIGJv
b2wgcmVhZEluZm9IZWFkZXIoU2hhcmVkQnVmZmVyKiBkYXRhKTsKLQotICAgICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBpcyBhIFdpbmRvd3MgVjQrIEJNUC4KLSAgICAgICAgaW5saW5lIGJv
b2wgaXNXaW5kb3dzVjRQbHVzKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgLy8gV2lu
ZG93cyBWNCBpbmZvIGhlYWRlciBpcyAxMDggYnl0ZXMuICBWNSBpcyAxMjQgYnl0ZXMuCi0gICAg
ICAgICAgICByZXR1cm4gKG1faW5mb0hlYWRlci5iaVNpemUgPT0gMTA4KSB8fCAobV9pbmZvSGVh
ZGVyLmJpU2l6ZSA9PSAxMjQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBjb25zaXN0ZW5jeSBlcnJvcnMgYXJlIGZvdW5kIGluIHRoZSBpbmZvIGhlYWRlci4KLSAg
ICAgICAgYm9vbCBpc0luZm9IZWFkZXJWYWxpZCgpIGNvbnN0OwotCi0gICAgICAgIC8vIEZvciBC
SV9CSVRGSUVMRFMgaW1hZ2VzLCBpbml0aWFsaXplcyB0aGUgbV9iaXRNYXNrc1tdIGFuZCBtX2Jp
dE9mZnNldHNbXQotICAgICAgICAvLyBhcnJheXMuICBwcm9jZXNzSW5mb0hlYWRlcigpIHdpbGwg
aW5pdGlhbGl6ZSB0aGVzZSBmb3Igb3RoZXIgY29tcHJlc3Npb24KLSAgICAgICAgLy8gdHlwZXMg
d2hlcmUgbmVlZGVkLgotICAgICAgICBib29sIHByb2Nlc3NCaXRtYXNrcyhTaGFyZWRCdWZmZXIq
IGRhdGEpOwotCi0gICAgICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGFsbG9jYXRlcyBhbmQg
aW5pdGlhbGl6ZXMgdGhlIG1fY29sb3JUYWJsZVtdIGFycmF5LgotICAgICAgICBib29sIHByb2Nl
c3NDb2xvclRhYmxlKFNoYXJlZEJ1ZmZlciogZGF0YSk7Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2Vz
IGFuIFJMRS1lbmNvZGVkIGltYWdlLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBlbnRpcmUgaW1hZ2Ug
d2FzCi0gICAgICAgIC8vIGRlY29kZWQuCi0gICAgICAgIGJvb2wgcHJvY2Vzc1JMRURhdGEoU2hh
cmVkQnVmZmVyKiBkYXRhKTsKLQotICAgICAgICAvLyBQcm9jZXNzZXMgYSBzZXQgb2Ygbm9uLVJM
RS1jb21wcmVzc2VkIHBpeGVscy4gIFR3byBjYXNlczoKLSAgICAgICAgLy8gICAqIGluUkxFID0g
dHJ1ZTogdGhlIGRhdGEgaXMgaW5zaWRlIGFuIFJMRS1lbmNvZGVkIGJpdG1hcC4gIFRyaWVzIHRv
Ci0gICAgICAgIC8vICAgICBwcm9jZXNzIHxudW1QaXhlbHN8IHBpeGVscyBvbiB0aGUgY3VycmVu
dCByb3c7IHJldHVybnMgdHJ1ZSBvbgotICAgICAgICAvLyAgICAgc3VjY2Vzcy4KLSAgICAgICAg
Ly8gICAqIGluUkxFID0gZmFsc2U6IHRoZSBkYXRhIGlzIGluc2lkZSBhIG5vbi1STEUtZW5jb2Rl
ZCBiaXRtYXAuCi0gICAgICAgIC8vICAgICB8bnVtUGl4ZWxzfCBpcyBpZ25vcmVkLiAgRXhwZWN0
cyB8bV9jb29yZHwgdG8gcG9pbnQgYXQgdGhlIGJlZ2lubmluZwotICAgICAgICAvLyAgICAgb2Yg
dGhlIG5leHQgcm93IHRvIGJlIGRlY29kZWQuICBUcmllcyB0byBwcm9jZXNzIGFzIG1hbnkgY29t
cGxldGUKLSAgICAgICAgLy8gICAgIHJvd3MgYXMgcG9zc2libGUuICBSZXR1cm5zIHRydWUgaWYg
dGhlIHdob2xlIGltYWdlIHdhcyBkZWNvZGVkLgotICAgICAgICBib29sIHByb2Nlc3NOb25STEVE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBpblJMRSwgaW50IG51bVBpeGVscyk7Ci0KLSAg
ICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHktY29vcmRpbmF0ZSBwbHVzIHxu
dW1Sb3dzfCB3b3VsZCBiZSBwYXN0Ci0gICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIGltYWdlLiAg
SGVyZSAicGx1cyIgbWVhbnMgInRvd2FyZCB0aGUgZW5kIG9mIHRoZSBpbWFnZSIsCi0gICAgICAg
IC8vIHNvIGRvd253YXJkcyBmb3IgbV9pc1RvcERvd24gaW1hZ2VzIGFuZCB1cHdhcmRzIG90aGVy
d2lzZS4KLSAgICAgICAgaW5saW5lIGJvb2wgcGFzdEVuZE9mSW1hZ2UoaW50IG51bVJvd3MpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2lzVG9wRG93bgotICAgICAgICAgICAgICAg
ID8gKChtX2Nvb3JkLnkoKSArIG51bVJvd3MpID49IHNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAg
ICAgICAgICA6ICgobV9jb29yZC55KCkgLSBudW1Sb3dzKSA8IDApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gUmV0dXJucyB0aGUgcGl4ZWwgZGF0YSBmb3IgdGhlIGN1cnJlbnQgWCBjb29yZGlu
YXRlIGluIGEgdWludDMyX3QuCi0gICAgICAgIC8vIEFzc3VtZXMgbV9kZWNvZGVkT2Zmc2V0IGhh
cyBiZWVuIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50Ci0gICAgICAgIC8vIHJv
dy4KLSAgICAgICAgLy8gTk9URTogT25seSBhcyBtYW55IGJ5dGVzIG9mIHRoZSByZXR1cm4gdmFs
dWUgYXMgYXJlIG5lZWRlZCB0byBob2xkIHRoZQotICAgICAgICAvLyBwaXhlbCBkYXRhIHdpbGwg
YWN0dWFsbHkgYmUgc2V0LgotICAgICAgICBpbmxpbmUgdWludDMyX3QgcmVhZEN1cnJlbnRQaXhl
bChTaGFyZWRCdWZmZXIqIGRhdGEsIGludCBieXRlc1BlclBpeGVsKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBjb25zdCBpbnQgYWRkaXRpb25hbE9mZnNldCA9IG1fY29vcmQueCgpICog
Ynl0ZXNQZXJQaXhlbDsKLSAgICAgICAgICAgIHN3aXRjaCAoYnl0ZXNQZXJQaXhlbCkgewotICAg
ICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiByZWFkVWludDE2KGRhdGEs
IGFkZGl0aW9uYWxPZmZzZXQpOwotCi0gICAgICAgICAgICBjYXNlIDM6IHsKLSAgICAgICAgICAg
ICAgICAvLyBJdCBkb2Vzbid0IG1hdHRlciB0aGF0IHdlIG5ldmVyIHNldCB0aGUgbW9zdCBzaWdu
aWZpY2FudCBieXRlIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlIHJldHVybiB2YWx1ZSBoZXJl
IGluIGxpdHRsZS1lbmRpYW4gbW9kZSwgdGhlIGNhbGxlciB3b24ndAotICAgICAgICAgICAgICAg
IC8vIHJlYWQgaXQuCi0gICAgICAgICAgICAgICAgdWludDMyX3QgcGl4ZWw7Ci0gICAgICAgICAg
ICAgICAgbWVtY3B5KCZwaXhlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEtPmRhdGEo
KVttX2RlY29kZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0XSwgMyk7Ci0gICAgICAgICNpZiBQ
TEFURk9STShCSUdfRU5ESUFOKQotICAgICAgICAgICAgICAgIHBpeGVsID0gKChwaXhlbCAmIDB4
ZmYwMCkgPDwgOCkgfCAoKHBpeGVsICYgMHhmZjAwMDApID4+IDgpIHwKLSAgICAgICAgICAgICAg
ICAgICAgKChwaXhlbCAmIDB4ZmYwMDAwMDApID4+IDI0KTsKLSAgICAgICAgI2VuZGlmCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBpeGVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
YXNlIDQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRVaW50MzIoZGF0YSwgYWRkaXRpb25h
bE9mZnNldCk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZGVzaXJl
ZCBjb21wb25lbnQgKDAsIDEsIDIsIDMgPT0gUiwgRywgQiwgQSkgaW4KLSAgICAgICAgLy8gdGhl
IGdpdmVuIHBpeGVsIGRhdGEuCi0gICAgICAgIGlubGluZSB1bnNpZ25lZCBnZXRDb21wb25lbnQo
dWludDMyX3QgcGl4ZWwsIGludCBjb21wb25lbnQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAoKHBpeGVsICYgbV9iaXRNYXNrc1tjb21wb25lbnRdKSA+PiBtX2JpdFNoaWZ0
c1JpZ2h0W2NvbXBvbmVudF0pCi0gICAgICAgICAgICAgICAgPDwgbV9iaXRTaGlmdHNMZWZ0W2Nv
bXBvbmVudF07Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0QWxwaGEo
dWludDMyX3QgcGl4ZWwpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZvciBpbWFn
ZXMgd2l0aG91dCBhbHBoYSwgcmV0dXJuIGFscGhhIG9mIDB4ZmYuCi0gICAgICAgICAgICBpZiAo
bV9iaXRNYXNrc1szXSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAweGZmOwotCi0gICAg
ICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgcGl4ZWwgdG8gdGhlIGNvbG9yIGdpdmVuIGJ5IHxjb2xv
ckluZGV4fC4gIFRoaXMgYWxzbwotICAgICAgICAvLyBpbmNyZW1lbnRzIHRoZSByZWxldmFudCBs
b2NhbCB2YXJpYWJsZXMgdG8gbW92ZSB0aGUgY3VycmVudCBwaXhlbCByaWdodAotICAgICAgICAv
LyBieSBvbmUuCi0gICAgICAgIGlubGluZSB2b2lkIHNldEkoc2l6ZV90IGNvbG9ySW5kZXgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEobV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJn
YlJlZCwgbV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYkdyZWVuLAotICAgICAgICAgICAgICAg
ICAgICBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiQmx1ZSwgMHhmZik7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBMaWtlIHNldEkoKSwgYnV0IHdpdGggdGhlIGluZGl2aWR1YWwgY29tcG9u
ZW50IHZhbHVlcyBzcGVjaWZpZWQuCi0gICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEodW5zaWdu
ZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgYWxwaGEpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgKLSAgICAgICAgICAg
ICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5iaXRtYXAoKS5nZXRBZGRyMzIobV9jb29y
ZC54KCksIG1fY29vcmQueSgpKSwKLSAgICAgICAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7Ci0gICAgICAgICAgICBtX2Nvb3JkLm1vdmUoMSwgMCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGaWxscyBwaXhlbHMgZnJvbSB0aGUgY3VycmVudCBYLWNvb3JkaW5hdGUgdXAgdG8s
IGJ1dCBub3QgaW5jbHVkaW5nLAotICAgICAgICAvLyB8ZW5kQ29vcmR8IHdpdGggdGhlIGNvbG9y
IGdpdmVuIGJ5IHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMuICBUaGlzIGFsc28KLSAgICAgICAg
Ly8gaW5jcmVtZW50cyB0aGUgcmVsZXZhbnQgbG9jYWwgdmFyaWFibGVzIHRvIG1vdmUgdGhlIGN1
cnJlbnQgcGl4ZWwgcmlnaHQKLSAgICAgICAgLy8gdG8gfGVuZENvb3JkfC4KLSAgICAgICAgaW5s
aW5lIHZvaWQgZmlsbFJHQkEoaW50IGVuZENvb3JkLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdy
ZWVuLCB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCBhbHBoYSkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKG1fY29vcmQueCgpIDwgZW5kQ29vcmQpCi0gICAgICAgICAgICAgICAgc2V0UkdC
QShyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXNl
dHMgdGhlIHJlbGV2YW50IGxvY2FsIHZhcmlhYmxlcyB0byBzdGFydCBkcmF3aW5nIGF0IHRoZSBs
ZWZ0IGVkZ2Ugb2YKLSAgICAgICAgLy8gdGhlICJuZXh0IiByb3csIHdoZXJlICJuZXh0IiBpcyBh
Ym92ZSBvciBiZWxvdyB0aGUgY3VycmVudCByb3cgZGVwZW5kaW5nCi0gICAgICAgIC8vIG9uIHRo
ZSB2YWx1ZSBvZiB8bV9pc1RvcERvd258LgotICAgICAgICB2b2lkIG1vdmVCdWZmZXJUb05leHRS
b3coKTsKLQotICAgICAgICAvLyBUaGUgQk1QIGluZm8gaGVhZGVyLgotICAgICAgICBCaXRtYXBJ
bmZvSGVhZGVyIG1faW5mb0hlYWRlcjsKLQotICAgICAgICAvLyBUcnVlIGlmIHRoaXMgaXMgYW4g
T1MvMiAxLnggKGFrYSBXaW5kb3dzIDIueCkgQk1QLiAgVGhlIHN0cnVjdCBsYXlvdXRzCi0gICAg
ICAgIC8vIGZvciB0aGlzIHR5cGUgb2YgQk1QIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0
aGUgbGF0ZXIsIG1vcmUgY29tbW9uCi0gICAgICAgIC8vIGZvcm1hdHMuCi0gICAgICAgIGJvb2wg
bV9pc09TMjF4OwotCi0gICAgICAgIC8vIFRydWUgaWYgdGhpcyBpcyBhbiBPUy8yIDIueCBCTVAu
ICBUaGUgbWVhbmluZ3Mgb2YgY29tcHJlc3Npb24gdHlwZXMgMwotICAgICAgICAvLyBhbmQgNCBm
b3IgdGhpcyB0eXBlIG9mIEJNUCBkaWZmZXIgZnJvbSBXaW5kb3dzIFYzKyBCTVBzLgotICAgICAg
ICAvLwotICAgICAgICAvLyBUaGlzIHdpbGwgYmUgZmFsc2VseSBuZWdhdGl2ZSBpbiBzb21lIGNh
c2VzLCBidXQgb25seSBvbmVzIHdoZXJlIHRoZSB3YXkKLSAgICAgICAgLy8gd2UgbWlzaW50ZXJw
cmV0IHRoZSBkYXRhIGlzIGlycmVsZXZhbnQuCi0gICAgICAgIGJvb2wgbV9pc09TMjJ4OwotCi0g
ICAgICAgIC8vIFRydWUgaWYgdGhlIEJNUCBpcyBub3QgdmVydGljYWxseSBmbGlwcGVkLCB0aGF0
IGlzLCB0aGUgZmlyc3QgbGluZSBvZgotICAgICAgICAvLyByYXN0ZXIgZGF0YSBpbiB0aGUgZmls
ZSBpcyB0aGUgdG9wIGxpbmUgb2YgdGhlIGltYWdlLgotICAgICAgICBib29sIG1faXNUb3BEb3du
OwotCi0gICAgICAgIC8vIFRoZXNlIGZsYWdzIGdldCBzZXQgdG8gZmFsc2UgYXMgd2UgZmluaXNo
IGVhY2ggcHJvY2Vzc2luZyBzdGFnZS4KLSAgICAgICAgYm9vbCBtX25lZWRUb1Byb2Nlc3NCaXRt
YXNrczsKLSAgICAgICAgYm9vbCBtX25lZWRUb1Byb2Nlc3NDb2xvclRhYmxlOwotCi0gICAgICAg
IC8vIE1hc2tzL29mZnNldHMgZm9yIHRoZSBjb2xvciB2YWx1ZXMgZm9yIG5vbi1wYWxldHRlIGZv
cm1hdHMuICBUaGVzZSBhcmUKLSAgICAgICAgLy8gYml0d2lzZSwgd2l0aCBhcnJheSBlbnRyaWVz
IDAsIDEsIDIsIDMgY29ycmVzcG9uZGluZyB0byBSLCBHLCBCLCBBLgotICAgICAgICAvLwotICAg
ICAgICAvLyBUaGUgcmlnaHQvbGVmdCBzaGlmdCB2YWx1ZXMgYXJlIG1lYW50IHRvIGJlIGFwcGxp
ZWQgYWZ0ZXIgdGhlIG1hc2tzLgotICAgICAgICAvLyBXZSBuZWVkIHRvIHJpZ2h0IHNoaWZ0IHRv
IGNvbXBlbnNhdGUgZm9yIHRoZSBiaXRmaWVsZHMnIG9mZnNldHMgaW50byB0aGUKLSAgICAgICAg
Ly8gMzIgYml0cyBvZiBwaXhlbCBkYXRhLCBhbmQgbGVmdCBzaGlmdCB0byBzY2FsZSB0aGUgY29s
b3IgdmFsdWVzIHVwIGZvcgotICAgICAgICAvLyBmaWVsZHMgd2l0aCBsZXNzIHRoYW4gOCBiaXRz
IG9mIHByZWNpc2lvbi4gIFNhZGx5LCB3ZSBjYW4ndCBqdXN0IGNvbWJpbmUKLSAgICAgICAgLy8g
dGhlc2UgaW50byBvbmUgc2hpZnQgdmFsdWUgYmVjYXVzZSB0aGUgbmV0IHNoaWZ0IGFtb3VudCBj
b3VsZCBnbyBlaXRoZXIKLSAgICAgICAgLy8gZGlyZWN0aW9uLiAgKElmIG9ubHkgIjw8IC14IiB3
ZXJlIGVxdWl2YWxlbnQgdG8gIj4+IHgiLi4uKQotICAgICAgICB1aW50MzJfdCBtX2JpdE1hc2tz
WzRdOwotICAgICAgICBpbnQgbV9iaXRTaGlmdHNSaWdodFs0XTsKLSAgICAgICAgaW50IG1fYml0
U2hpZnRzTGVmdFs0XTsKLQotICAgICAgICAvLyBUaGUgY29sb3IgcGFsZXR0ZSwgZm9yIHBhbGV0
dGVkIGZvcm1hdHMuCi0gICAgICAgIHNpemVfdCBtX3RhYmxlU2l6ZUluQnl0ZXM7Ci0gICAgICAg
IFZlY3RvcjxSR0JUcmlwbGU+IG1fY29sb3JUYWJsZTsKLQotICAgICAgICAvLyBUaGUgY29vcmRp
bmF0ZSB0byB3aGljaCB3ZSd2ZSBkZWNvZGVkIHRoZSBpbWFnZS4KLSAgICAgICAgSW50UG9pbnQg
bV9jb29yZDsKLQotICAgICAgICAvLyBWYXJpYWJsZXMgdGhhdCB0cmFjayB3aGV0aGVyIHdlJ3Zl
IHNlZW4gcGl4ZWxzIHdpdGggYWxwaGEgdmFsdWVzICE9IDAKLSAgICAgICAgLy8gYW5kID09IDAs
IHJlc3BlY3RpdmVseS4gIFNlZSBjb21tZW50cyBpbiBwcm9jZXNzTm9uUkxFRGF0YSgpIG9uIGhv
dwotICAgICAgICAvLyB0aGVzZSBhcmUgdXNlZC4KLSAgICAgICAgYm9vbCBtX3NlZW5Ob25aZXJv
QWxwaGFQaXhlbDsKLSAgICAgICAgYm9vbCBtX3NlZW5aZXJvQWxwaGFQaXhlbDsKLSAgICB9Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgorLyoNCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogDQorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKiANCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisg
KiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKiANCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4NCisgKi8NCisNCisjaWZuZGVmIEJNUEltYWdlUmVhZGVyX2gNCisjZGVmaW5lIEJNUElt
YWdlUmVhZGVyX2gNCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgIkltYWdlRGVj
b2Rlci5oIg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgLy8gVGhpcyBjbGFzcyBk
ZWNvZGVzIGEgQk1QIGltYWdlLiAgSXQgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBCTVAgYW5k
IElDTw0KKyAgICAvLyBkZWNvZGVycywgd2hpY2ggd3JhcCBpdCBpbiB0aGUgYXBwcm9wcmlhdGUg
Y29kZSB0byByZWFkIGZpbGUgaGVhZGVycywgZXRjLg0KKyAgICBjbGFzcyBCTVBJbWFnZVJlYWRl
ciA6IHB1YmxpYyBJbWFnZURlY29kZXIgew0KKyAgICBwdWJsaWM6DQorICAgICAgICBCTVBJbWFn
ZVJlYWRlcigpOw0KKw0KKyAgICAgICAgLy8gRG9lcyB0aGUgYWN0dWFsIGRlY29kaW5nLiAgfGRh
dGF8IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLA0KKyAgICAgICAgLy8gYnV0
IG1heSBiZSBpbmNvbXBsZXRlLg0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY29kZUltYWdlKFNo
YXJlZEJ1ZmZlciogZGF0YSkgPSAwOw0KKw0KKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyDQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKTsNCisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KTsNCisNCisgICAgcHJvdGVjdGVkOg0KKyAgICAgICAgZW51bSBB
bmRNYXNrU3RhdGUgew0KKyAgICAgICAgICAgIE5vbmUsDQorICAgICAgICAgICAgTm90WWV0RGVj
b2RlZCwNCisgICAgICAgICAgICBEZWNvZGluZywNCisgICAgICAgIH07DQorDQorICAgICAgICAv
LyBEZWNvZGVzIGEgc2luZ2xlIEJNUCwgc3RhcnRpbmcgd2l0aCBhbiBpbmZvIGhlYWRlci4NCisg
ICAgICAgIHZvaWQgZGVjb2RlQk1QKFNoYXJlZEJ1ZmZlciogZGF0YSk7DQorDQorICAgICAgICAv
LyBSZWFkIGEgdmFsdWUgZnJvbSB8ZGF0YVttX2RlY29kZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zm
c2V0XXwsIGNvbnZlcnRpbmcNCisgICAgICAgIC8vIGZyb20gbGl0dGxlIHRvIG5hdGl2ZSBlbmRp
YW5uZXNzLg0KKyAgICAgICAgaW5saW5lIHVpbnQxNl90IHJlYWRVaW50MTYoU2hhcmVkQnVmZmVy
KiBkYXRhLCBpbnQgYWRkaXRpb25hbE9mZnNldCkgY29uc3QNCisgICAgICAgIHsNCisgICAgICAg
ICAgICB1aW50MTZfdCByZXN1bHQ7DQorICAgICAgICAgICAgbWVtY3B5KCZyZXN1bHQsICZkYXRh
LT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgYWRkaXRpb25hbE9mZnNldF0sIDIpOw0KKyAgICAg
ICAgI2lmIFBMQVRGT1JNKEJJR19FTkRJQU4pDQorICAgICAgICAgICAgcmVzdWx0ID0gKChyZXN1
bHQgJiAweGZmKSA8PCA4KSB8ICgocmVzdWx0ICYgMHhmZjAwKSA+PiA4KTsNCisgICAgICAgICNl
bmRpZg0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQorICAgICAgICB9DQorDQorICAgICAg
ICBpbmxpbmUgdWludDMyX3QgcmVhZFVpbnQzMihTaGFyZWRCdWZmZXIqIGRhdGEsIGludCBhZGRp
dGlvbmFsT2Zmc2V0KSBjb25zdA0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVpbnQzMl90IHJl
c3VsdDsNCisgICAgICAgICAgICBtZW1jcHkoJnJlc3VsdCwgJmRhdGEtPmRhdGEoKVttX2RlY29k
ZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0XSwgNCk7DQorICAgICAgICAjaWYgUExBVEZPUk0o
QklHX0VORElBTikNCisgICAgICAgICAgICByZXN1bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDI0
KSB8ICgocmVzdWx0ICYgMHhmZjAwKSA8PCA4KSB8DQorICAgICAgICAgICAgICAgICgocmVzdWx0
ICYgMHhmZjAwMDApID4+IDgpIHwgKChyZXN1bHQgJiAweGZmMDAwMDAwKSA+PiAyNCk7DQorICAg
ICAgICAjZW5kaWYNCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgLy8gQW4gaW5kZXggaW50byB8bV9kYXRhfCByZXByZXNlbnRpbmcgaG93IG11Y2gg
d2UndmUgYWxyZWFkeSBkZWNvZGVkLg0KKyAgICAgICAgc2l6ZV90IG1fZGVjb2RlZE9mZnNldDsN
CisNCisgICAgICAgIC8vIFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0aGUgQk1QIGluZm8gaGVh
ZGVyIHN0YXJ0cy4NCisgICAgICAgIHNpemVfdCBtX2hlYWRlck9mZnNldDsNCisNCisgICAgICAg
IC8vIFRoZSBmaWxlIG9mZnNldCBhdCB3aGljaCB0aGUgYWN0dWFsIGltYWdlIGJpdHMgc3RhcnQu
ICBXaGVuIGRlY29kaW5nIElDTw0KKyAgICAgICAgLy8gZmlsZXMsIHRoaXMgaXMgc2V0IHRvIDAs
IHNpbmNlIGl0J3Mgbm90IHN0b3JlZCBhbnl3aGVyZSBpbiBhIGhlYWRlcjsgdGhlDQorICAgICAg
ICAvLyByZWFkZXIgZnVuY3Rpb25zIGV4cGVjdCB0aGUgaW1hZ2UgZGF0YSB0byBzdGFydCBpbW1l
ZGlhdGVseSBhZnRlciB0aGUNCisgICAgICAgIC8vIGhlYWRlciBhbmQgKGlmIG5lY2Vzc2FyeSkg
Y29sb3IgdGFibGUuDQorICAgICAgICBzaXplX3QgbV9pbWdEYXRhT2Zmc2V0Ow0KKw0KKyAgICAg
ICAgLy8gSUNPcyBzdG9yZSBhIDFicHAgIm1hc2siIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYWlu
IGJpdG1hcCBpbWFnZSBkYXRhDQorICAgICAgICAvLyAoYW5kLCBjb25mdXNpbmdseSwgYWRkIGl0
cyBoZWlnaHQgdG8gdGhlIGJpSGVpZ2h0IHZhbHVlIGluIHRoZSBpbmZvDQorICAgICAgICAvLyBo
ZWFkZXIsIHRodXMgZG91YmxpbmcgaXQpLiAgVGhpcyB2YXJpYWJsZSB0cmFja3Mgd2hldGhlciB3
ZSBoYXZlIHN1Y2ggYQ0KKyAgICAgICAgLy8gbWFzayBhbmQgaWYgd2UndmUgc3RhcnRlZCBkZWNv
ZGluZyBpdCB5ZXQuDQorICAgICAgICBBbmRNYXNrU3RhdGUgbV9hbmRNYXNrU3RhdGU7DQorDQor
ICAgIHByaXZhdGU6DQorICAgICAgICAvLyBUaGUgdmFyaW91cyBCTVAgY29tcHJlc3Npb24gdHlw
ZXMuICBXZSBkb24ndCBjdXJyZW50bHkgZGVjb2RlIGFsbCB0aGVzZS4NCisgICAgICAgIGVudW0g
Q29tcHJlc3Npb25UeXBlIHsNCisgICAgICAgICAgICAvLyBVbml2ZXJzYWwgdHlwZXMNCisgICAg
ICAgICAgICBSR0IgPSAwLA0KKyAgICAgICAgICAgIFJMRTggPSAxLA0KKyAgICAgICAgICAgIFJM
RTQgPSAyLA0KKyAgICAgICAgICAgIC8vIFdpbmRvd3MgVjMrIG9ubHkNCisgICAgICAgICAgICBC
SVRGSUVMRFMgPSAzLA0KKyAgICAgICAgICAgIEpQRUcgPSA0LA0KKyAgICAgICAgICAgIFBORyA9
IDUsDQorICAgICAgICAgICAgLy8gT1MvMiAyLngtb25seQ0KKyAgICAgICAgICAgIEhVRkZNQU4x
RCwgIC8vIFN0b3JlZCBpbiBmaWxlIGFzIDMNCisgICAgICAgICAgICBSTEUyNCwgICAgICAvLyBT
dG9yZWQgaW4gZmlsZSBhcyA0DQorICAgICAgICB9Ow0KKw0KKyAgICAgICAgLy8gVGhlc2UgYXJl
IGJhc2VkIG9uIHRoZSBXaW5kb3dzIEJJVE1BUElORk9IRUFERVIgYW5kIFJHQlRSSVBMRSBzdHJ1
Y3RzLA0KKyAgICAgICAgLy8gYnV0IHdpdGggdW5uZWNlc3NhcnkgZW50cmllcyByZW1vdmVkLg0K
KyAgICAgICAgc3RydWN0IEJpdG1hcEluZm9IZWFkZXIgew0KKyAgICAgICAgICAgIHVpbnQzMl90
IGJpU2l6ZTsNCisgICAgICAgICAgICBpbnQzMl90IGJpV2lkdGg7DQorICAgICAgICAgICAgaW50
MzJfdCBiaUhlaWdodDsNCisgICAgICAgICAgICB1aW50MTZfdCBiaUJpdENvdW50Ow0KKyAgICAg
ICAgICAgIENvbXByZXNzaW9uVHlwZSBiaUNvbXByZXNzaW9uOw0KKyAgICAgICAgICAgIHVpbnQz
Ml90IGJpQ2xyVXNlZDsNCisgICAgICAgIH07DQorICAgICAgICBzdHJ1Y3QgUkdCVHJpcGxlIHsN
CisgICAgICAgICAgICB1aW50OF90IHJnYkJsdWU7DQorICAgICAgICAgICAgdWludDhfdCByZ2JH
cmVlbjsNCisgICAgICAgICAgICB1aW50OF90IHJnYlJlZDsNCisgICAgICAgIH07DQorDQorICAg
ICAgICAvLyBEZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZSBCTVAgaW5mbyBoZWFkZXIuICBSZXR1
cm5zIHRydWUgaWYgdGhlIHNpemUgaXMNCisgICAgICAgIC8vIHZhbGlkLg0KKyAgICAgICAgYm9v
bCBnZXRJbmZvSGVhZGVyU2l6ZShTaGFyZWRCdWZmZXIqIGRhdGEpOw0KKw0KKyAgICAgICAgLy8g
UHJvY2Vzc2VzIHRoZSBCTVAgaW5mbyBoZWFkZXIuICBSZXR1cm5zIHRydWUgaWYgdGhlIGluZm8g
aGVhZGVyIGNvdWxkIGJlDQorICAgICAgICAvLyBkZWNvZGVkLg0KKyAgICAgICAgYm9vbCBwcm9j
ZXNzSW5mb0hlYWRlcihTaGFyZWRCdWZmZXIqIGRhdGEpOw0KKw0KKyAgICAgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciBwcm9jZXNzSW5mb0hlYWRlcigpIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBy
ZWFkaW5nIG9mDQorICAgICAgICAvLyBoZWFkZXIgdmFsdWVzIGZyb20gdGhlIGJ5dGUgc3RyZWFt
LiAgUmV0dXJucyBmYWxzZSBvbiBlcnJvci4NCisgICAgICAgIGJvb2wgcmVhZEluZm9IZWFkZXIo
U2hhcmVkQnVmZmVyKiBkYXRhKTsNCisNCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGlzIGEgV2luZG93cyBWNCsgQk1QLg0KKyAgICAgICAgaW5saW5lIGJvb2wgaXNXaW5kb3dzVjRQ
bHVzKCkgY29uc3QNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBXaW5kb3dzIFY0IGluZm8g
aGVhZGVyIGlzIDEwOCBieXRlcy4gIFY1IGlzIDEyNCBieXRlcy4NCisgICAgICAgICAgICByZXR1
cm4gKG1faW5mb0hlYWRlci5iaVNpemUgPT0gMTA4KSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6ZSA9
PSAxMjQpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBjb25z
aXN0ZW5jeSBlcnJvcnMgYXJlIGZvdW5kIGluIHRoZSBpbmZvIGhlYWRlci4NCisgICAgICAgIGJv
b2wgaXNJbmZvSGVhZGVyVmFsaWQoKSBjb25zdDsNCisNCisgICAgICAgIC8vIEZvciBCSV9CSVRG
SUVMRFMgaW1hZ2VzLCBpbml0aWFsaXplcyB0aGUgbV9iaXRNYXNrc1tdIGFuZCBtX2JpdE9mZnNl
dHNbXQ0KKyAgICAgICAgLy8gYXJyYXlzLiAgcHJvY2Vzc0luZm9IZWFkZXIoKSB3aWxsIGluaXRp
YWxpemUgdGhlc2UgZm9yIG90aGVyIGNvbXByZXNzaW9uDQorICAgICAgICAvLyB0eXBlcyB3aGVy
ZSBuZWVkZWQuDQorICAgICAgICBib29sIHByb2Nlc3NCaXRtYXNrcyhTaGFyZWRCdWZmZXIqIGRh
dGEpOw0KKw0KKyAgICAgICAgLy8gRm9yIHBhbGV0dGVkIGltYWdlcywgYWxsb2NhdGVzIGFuZCBp
bml0aWFsaXplcyB0aGUgbV9jb2xvclRhYmxlW10gYXJyYXkuDQorICAgICAgICBib29sIHByb2Nl
c3NDb2xvclRhYmxlKFNoYXJlZEJ1ZmZlciogZGF0YSk7DQorDQorICAgICAgICAvLyBQcm9jZXNz
ZXMgYW4gUkxFLWVuY29kZWQgaW1hZ2UuICBSZXR1cm5zIHRydWUgaWYgdGhlIGVudGlyZSBpbWFn
ZSB3YXMNCisgICAgICAgIC8vIGRlY29kZWQuDQorICAgICAgICBib29sIHByb2Nlc3NSTEVEYXRh
KFNoYXJlZEJ1ZmZlciogZGF0YSk7DQorDQorICAgICAgICAvLyBQcm9jZXNzZXMgYSBzZXQgb2Yg
bm9uLVJMRS1jb21wcmVzc2VkIHBpeGVscy4gIFR3byBjYXNlczoNCisgICAgICAgIC8vICAgKiBp
blJMRSA9IHRydWU6IHRoZSBkYXRhIGlzIGluc2lkZSBhbiBSTEUtZW5jb2RlZCBiaXRtYXAuICBU
cmllcyB0bw0KKyAgICAgICAgLy8gICAgIHByb2Nlc3MgfG51bVBpeGVsc3wgcGl4ZWxzIG9uIHRo
ZSBjdXJyZW50IHJvdzsgcmV0dXJucyB0cnVlIG9uDQorICAgICAgICAvLyAgICAgc3VjY2Vzcy4N
CisgICAgICAgIC8vICAgKiBpblJMRSA9IGZhbHNlOiB0aGUgZGF0YSBpcyBpbnNpZGUgYSBub24t
UkxFLWVuY29kZWQgYml0bWFwLg0KKyAgICAgICAgLy8gICAgIHxudW1QaXhlbHN8IGlzIGlnbm9y
ZWQuICBFeHBlY3RzIHxtX2Nvb3JkfCB0byBwb2ludCBhdCB0aGUgYmVnaW5uaW5nDQorICAgICAg
ICAvLyAgICAgb2YgdGhlIG5leHQgcm93IHRvIGJlIGRlY29kZWQuICBUcmllcyB0byBwcm9jZXNz
IGFzIG1hbnkgY29tcGxldGUNCisgICAgICAgIC8vICAgICByb3dzIGFzIHBvc3NpYmxlLiAgUmV0
dXJucyB0cnVlIGlmIHRoZSB3aG9sZSBpbWFnZSB3YXMgZGVjb2RlZC4NCisgICAgICAgIGJvb2wg
cHJvY2Vzc05vblJMRURhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGluUkxFLCBpbnQgbnVt
UGl4ZWxzKTsNCisNCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCB5LWNv
b3JkaW5hdGUgcGx1cyB8bnVtUm93c3wgd291bGQgYmUgcGFzdA0KKyAgICAgICAgLy8gdGhlIGVu
ZCBvZiB0aGUgaW1hZ2UuICBIZXJlICJwbHVzIiBtZWFucyAidG93YXJkIHRoZSBlbmQgb2YgdGhl
IGltYWdlIiwNCisgICAgICAgIC8vIHNvIGRvd253YXJkcyBmb3IgbV9pc1RvcERvd24gaW1hZ2Vz
IGFuZCB1cHdhcmRzIG90aGVyd2lzZS4NCisgICAgICAgIGlubGluZSBib29sIHBhc3RFbmRPZklt
YWdlKGludCBudW1Sb3dzKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHJldHVybiBtX2lzVG9w
RG93bg0KKyAgICAgICAgICAgICAgICA/ICgobV9jb29yZC55KCkgKyBudW1Sb3dzKSA+PSBzaXpl
KCkuaGVpZ2h0KCkpDQorICAgICAgICAgICAgICAgIDogKChtX2Nvb3JkLnkoKSAtIG51bVJvd3Mp
IDwgMCk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwaXhlbCBkYXRh
IGZvciB0aGUgY3VycmVudCBYIGNvb3JkaW5hdGUgaW4gYSB1aW50MzJfdC4NCisgICAgICAgIC8v
IEFzc3VtZXMgbV9kZWNvZGVkT2Zmc2V0IGhhcyBiZWVuIHNldCB0byB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBjdXJyZW50DQorICAgICAgICAvLyByb3cuDQorICAgICAgICAvLyBOT1RFOiBPbmx5IGFz
IG1hbnkgYnl0ZXMgb2YgdGhlIHJldHVybiB2YWx1ZSBhcyBhcmUgbmVlZGVkIHRvIGhvbGQgdGhl
DQorICAgICAgICAvLyBwaXhlbCBkYXRhIHdpbGwgYWN0dWFsbHkgYmUgc2V0Lg0KKyAgICAgICAg
aW5saW5lIHVpbnQzMl90IHJlYWRDdXJyZW50UGl4ZWwoU2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQg
Ynl0ZXNQZXJQaXhlbCkgY29uc3QNCisgICAgICAgIHsNCisgICAgICAgICAgICBjb25zdCBpbnQg
YWRkaXRpb25hbE9mZnNldCA9IG1fY29vcmQueCgpICogYnl0ZXNQZXJQaXhlbDsNCisgICAgICAg
ICAgICBzd2l0Y2ggKGJ5dGVzUGVyUGl4ZWwpIHsNCisgICAgICAgICAgICBjYXNlIDI6DQorICAg
ICAgICAgICAgICAgIHJldHVybiByZWFkVWludDE2KGRhdGEsIGFkZGl0aW9uYWxPZmZzZXQpOw0K
Kw0KKyAgICAgICAgICAgIGNhc2UgMzogew0KKyAgICAgICAgICAgICAgICAvLyBJdCBkb2Vzbid0
IG1hdHRlciB0aGF0IHdlIG5ldmVyIHNldCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIG9mDQor
ICAgICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgaGVyZSBpbiBsaXR0bGUtZW5kaWFu
IG1vZGUsIHRoZSBjYWxsZXIgd29uJ3QNCisgICAgICAgICAgICAgICAgLy8gcmVhZCBpdC4NCisg
ICAgICAgICAgICAgICAgdWludDMyX3QgcGl4ZWw7DQorICAgICAgICAgICAgICAgIG1lbWNweSgm
cGl4ZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9m
ZnNldCArIGFkZGl0aW9uYWxPZmZzZXRdLCAzKTsNCisgICAgICAgICNpZiBQTEFURk9STShCSUdf
RU5ESUFOKQ0KKyAgICAgICAgICAgICAgICBwaXhlbCA9ICgocGl4ZWwgJiAweGZmMDApIDw8IDgp
IHwgKChwaXhlbCAmIDB4ZmYwMDAwKSA+PiA4KSB8DQorICAgICAgICAgICAgICAgICAgICAoKHBp
eGVsICYgMHhmZjAwMDAwMCkgPj4gMjQpOw0KKyAgICAgICAgI2VuZGlmDQorICAgICAgICAgICAg
ICAgIHJldHVybiBwaXhlbDsNCisgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgY2FzZSA0
Og0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFVpbnQzMihkYXRhLCBhZGRpdGlvbmFsT2Zm
c2V0KTsNCisNCisgICAgICAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQorICAgICAgICAgICAg
fQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRl
c2lyZWQgY29tcG9uZW50ICgwLCAxLCAyLCAzID09IFIsIEcsIEIsIEEpIGluDQorICAgICAgICAv
LyB0aGUgZ2l2ZW4gcGl4ZWwgZGF0YS4NCisgICAgICAgIGlubGluZSB1bnNpZ25lZCBnZXRDb21w
b25lbnQodWludDMyX3QgcGl4ZWwsIGludCBjb21wb25lbnQpIGNvbnN0DQorICAgICAgICB7DQor
ICAgICAgICAgICAgcmV0dXJuICgocGl4ZWwgJiBtX2JpdE1hc2tzW2NvbXBvbmVudF0pID4+IG1f
Yml0U2hpZnRzUmlnaHRbY29tcG9uZW50XSkNCisgICAgICAgICAgICAgICAgPDwgbV9iaXRTaGlm
dHNMZWZ0W2NvbXBvbmVudF07DQorICAgICAgICB9DQorDQorICAgICAgICBpbmxpbmUgdW5zaWdu
ZWQgZ2V0QWxwaGEodWludDMyX3QgcGl4ZWwpIGNvbnN0DQorICAgICAgICB7DQorICAgICAgICAg
ICAgLy8gRm9yIGltYWdlcyB3aXRob3V0IGFscGhhLCByZXR1cm4gYWxwaGEgb2YgMHhmZi4NCisg
ICAgICAgICAgICBpZiAobV9iaXRNYXNrc1szXSA9PSAwKQ0KKyAgICAgICAgICAgICAgICByZXR1
cm4gMHhmZjsNCisNCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50KHBpeGVsLCAzKTsN
CisgICAgICAgIH0NCisNCisgICAgICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgcGl4ZWwgdG8gdGhl
IGNvbG9yIGdpdmVuIGJ5IHxjb2xvckluZGV4fC4gIFRoaXMgYWxzbw0KKyAgICAgICAgLy8gaW5j
cmVtZW50cyB0aGUgcmVsZXZhbnQgbG9jYWwgdmFyaWFibGVzIHRvIG1vdmUgdGhlIGN1cnJlbnQg
cGl4ZWwgcmlnaHQNCisgICAgICAgIC8vIGJ5IG9uZS4NCisgICAgICAgIGlubGluZSB2b2lkIHNl
dEkoc2l6ZV90IGNvbG9ySW5kZXgpDQorICAgICAgICB7DQorICAgICAgICAgICAgc2V0UkdCQSht
X2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiUmVkLCBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0u
cmdiR3JlZW4sDQorICAgICAgICAgICAgICAgICAgICBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0u
cmdiQmx1ZSwgMHhmZik7DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBMaWtlIHNldEkoKSwg
YnV0IHdpdGggdGhlIGluZGl2aWR1YWwgY29tcG9uZW50IHZhbHVlcyBzcGVjaWZpZWQuDQorICAg
ICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVu
c2lnbmVkIGJsdWUsIHVuc2lnbmVkIGFscGhhKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIFJH
QkEzMkJ1ZmZlcjo6c2V0UkdCQSgNCisgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
LmZpcnN0KCkuYml0bWFwKCkuZ2V0QWRkcjMyKG1fY29vcmQueCgpLCBtX2Nvb3JkLnkoKSksDQor
ICAgICAgICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsNCisgICAgICAgICAgICBt
X2Nvb3JkLm1vdmUoMSwgMCk7DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBGaWxscyBwaXhl
bHMgZnJvbSB0aGUgY3VycmVudCBYLWNvb3JkaW5hdGUgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5n
LA0KKyAgICAgICAgLy8gfGVuZENvb3JkfCB3aXRoIHRoZSBjb2xvciBnaXZlbiBieSB0aGUgaW5k
aXZpZHVhbCBjb21wb25lbnRzLiAgVGhpcyBhbHNvDQorICAgICAgICAvLyBpbmNyZW1lbnRzIHRo
ZSByZWxldmFudCBsb2NhbCB2YXJpYWJsZXMgdG8gbW92ZSB0aGUgY3VycmVudCBwaXhlbCByaWdo
dA0KKyAgICAgICAgLy8gdG8gfGVuZENvb3JkfC4NCisgICAgICAgIGlubGluZSB2b2lkIGZpbGxS
R0JBKGludCBlbmRDb29yZCwgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQg
Ymx1ZSwgdW5zaWduZWQgYWxwaGEpDQorICAgICAgICB7DQorICAgICAgICAgICAgd2hpbGUgKG1f
Y29vcmQueCgpIDwgZW5kQ29vcmQpDQorICAgICAgICAgICAgICAgIHNldFJHQkEocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gUmVzZXRzIHRoZSBy
ZWxldmFudCBsb2NhbCB2YXJpYWJsZXMgdG8gc3RhcnQgZHJhd2luZyBhdCB0aGUgbGVmdCBlZGdl
IG9mDQorICAgICAgICAvLyB0aGUgIm5leHQiIHJvdywgd2hlcmUgIm5leHQiIGlzIGFib3ZlIG9y
IGJlbG93IHRoZSBjdXJyZW50IHJvdyBkZXBlbmRpbmcNCisgICAgICAgIC8vIG9uIHRoZSB2YWx1
ZSBvZiB8bV9pc1RvcERvd258Lg0KKyAgICAgICAgdm9pZCBtb3ZlQnVmZmVyVG9OZXh0Um93KCk7
DQorDQorICAgICAgICAvLyBUaGUgQk1QIGluZm8gaGVhZGVyLg0KKyAgICAgICAgQml0bWFwSW5m
b0hlYWRlciBtX2luZm9IZWFkZXI7DQorDQorICAgICAgICAvLyBUcnVlIGlmIHRoaXMgaXMgYW4g
T1MvMiAxLnggKGFrYSBXaW5kb3dzIDIueCkgQk1QLiAgVGhlIHN0cnVjdCBsYXlvdXRzDQorICAg
ICAgICAvLyBmb3IgdGhpcyB0eXBlIG9mIEJNUCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20g
dGhlIGxhdGVyLCBtb3JlIGNvbW1vbg0KKyAgICAgICAgLy8gZm9ybWF0cy4NCisgICAgICAgIGJv
b2wgbV9pc09TMjF4Ow0KKw0KKyAgICAgICAgLy8gVHJ1ZSBpZiB0aGlzIGlzIGFuIE9TLzIgMi54
IEJNUC4gIFRoZSBtZWFuaW5ncyBvZiBjb21wcmVzc2lvbiB0eXBlcyAzDQorICAgICAgICAvLyBh
bmQgNCBmb3IgdGhpcyB0eXBlIG9mIEJNUCBkaWZmZXIgZnJvbSBXaW5kb3dzIFYzKyBCTVBzLg0K
KyAgICAgICAgLy8NCisgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBmYWxzZWx5IG5lZ2F0aXZlIGlu
IHNvbWUgY2FzZXMsIGJ1dCBvbmx5IG9uZXMgd2hlcmUgdGhlIHdheQ0KKyAgICAgICAgLy8gd2Ug
bWlzaW50ZXJwcmV0IHRoZSBkYXRhIGlzIGlycmVsZXZhbnQuDQorICAgICAgICBib29sIG1faXNP
UzIyeDsNCisNCisgICAgICAgIC8vIFRydWUgaWYgdGhlIEJNUCBpcyBub3QgdmVydGljYWxseSBm
bGlwcGVkLCB0aGF0IGlzLCB0aGUgZmlyc3QgbGluZSBvZg0KKyAgICAgICAgLy8gcmFzdGVyIGRh
dGEgaW4gdGhlIGZpbGUgaXMgdGhlIHRvcCBsaW5lIG9mIHRoZSBpbWFnZS4NCisgICAgICAgIGJv
b2wgbV9pc1RvcERvd247DQorDQorICAgICAgICAvLyBUaGVzZSBmbGFncyBnZXQgc2V0IHRvIGZh
bHNlIGFzIHdlIGZpbmlzaCBlYWNoIHByb2Nlc3Npbmcgc3RhZ2UuDQorICAgICAgICBib29sIG1f
bmVlZFRvUHJvY2Vzc0JpdG1hc2tzOw0KKyAgICAgICAgYm9vbCBtX25lZWRUb1Byb2Nlc3NDb2xv
clRhYmxlOw0KKw0KKyAgICAgICAgLy8gTWFza3Mvb2Zmc2V0cyBmb3IgdGhlIGNvbG9yIHZhbHVl
cyBmb3Igbm9uLXBhbGV0dGUgZm9ybWF0cy4gIFRoZXNlIGFyZQ0KKyAgICAgICAgLy8gYml0d2lz
ZSwgd2l0aCBhcnJheSBlbnRyaWVzIDAsIDEsIDIsIDMgY29ycmVzcG9uZGluZyB0byBSLCBHLCBC
LCBBLg0KKyAgICAgICAgLy8NCisgICAgICAgIC8vIFRoZSByaWdodC9sZWZ0IHNoaWZ0IHZhbHVl
cyBhcmUgbWVhbnQgdG8gYmUgYXBwbGllZCBhZnRlciB0aGUgbWFza3MuDQorICAgICAgICAvLyBX
ZSBuZWVkIHRvIHJpZ2h0IHNoaWZ0IHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBiaXRmaWVsZHMnIG9m
ZnNldHMgaW50byB0aGUNCisgICAgICAgIC8vIDMyIGJpdHMgb2YgcGl4ZWwgZGF0YSwgYW5kIGxl
ZnQgc2hpZnQgdG8gc2NhbGUgdGhlIGNvbG9yIHZhbHVlcyB1cCBmb3INCisgICAgICAgIC8vIGZp
ZWxkcyB3aXRoIGxlc3MgdGhhbiA4IGJpdHMgb2YgcHJlY2lzaW9uLiAgU2FkbHksIHdlIGNhbid0
IGp1c3QgY29tYmluZQ0KKyAgICAgICAgLy8gdGhlc2UgaW50byBvbmUgc2hpZnQgdmFsdWUgYmVj
YXVzZSB0aGUgbmV0IHNoaWZ0IGFtb3VudCBjb3VsZCBnbyBlaXRoZXINCisgICAgICAgIC8vIGRp
cmVjdGlvbi4gIChJZiBvbmx5ICI8PCAteCIgd2VyZSBlcXVpdmFsZW50IHRvICI+PiB4Ii4uLikN
CisgICAgICAgIHVpbnQzMl90IG1fYml0TWFza3NbNF07DQorICAgICAgICBpbnQgbV9iaXRTaGlm
dHNSaWdodFs0XTsNCisgICAgICAgIGludCBtX2JpdFNoaWZ0c0xlZnRbNF07DQorDQorICAgICAg
ICAvLyBUaGUgY29sb3IgcGFsZXR0ZSwgZm9yIHBhbGV0dGVkIGZvcm1hdHMuDQorICAgICAgICBz
aXplX3QgbV90YWJsZVNpemVJbkJ5dGVzOw0KKyAgICAgICAgVmVjdG9yPFJHQlRyaXBsZT4gbV9j
b2xvclRhYmxlOw0KKw0KKyAgICAgICAgLy8gVGhlIGNvb3JkaW5hdGUgdG8gd2hpY2ggd2UndmUg
ZGVjb2RlZCB0aGUgaW1hZ2UuDQorICAgICAgICBJbnRQb2ludCBtX2Nvb3JkOw0KKw0KKyAgICAg
ICAgLy8gVmFyaWFibGVzIHRoYXQgdHJhY2sgd2hldGhlciB3ZSd2ZSBzZWVuIHBpeGVscyB3aXRo
IGFscGhhIHZhbHVlcyAhPSAwDQorICAgICAgICAvLyBhbmQgPT0gMCwgcmVzcGVjdGl2ZWx5LiAg
U2VlIGNvbW1lbnRzIGluIHByb2Nlc3NOb25STEVEYXRhKCkgb24gaG93DQorICAgICAgICAvLyB0
aGVzZSBhcmUgdXNlZC4NCisgICAgICAgIGJvb2wgbV9zZWVuTm9uWmVyb0FscGhhUGl4ZWw7DQor
ICAgICAgICBib29sIG1fc2Vlblplcm9BbHBoYVBpeGVsOw0KKyAgICB9Ow0KKw0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYNCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAKICAgICAgICAgZGVjb2RlKEdJRlNpemVR
dWVyeSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpOwogfQogCiAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdl
LiAgV2lsbCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZvciB0aGUgYW5zd2VyCkBAIC0xODMsNyArMTgz
LDcgQEAgUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogCiAgICAgUkdC
QTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07CiAgICAgaWYgKGZy
YW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikK
LSAgICAgICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSwgaW5kZXgrMSk7IC8vIERlY29kZSB0aGlzIGZy
YW1lLgorICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCArIDEpOyAvLyBEZWNvZGUg
dGhpcyBmcmFtZS4KICAgICByZXR1cm4gJmZyYW1lOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VSZWFkZXIuaAkocmV2
aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lG
SW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDExICsxNjcsMTEgQEAgc3RydWN0
IEdJRkltYWdlUmVhZGVyIHsKICAgICBpbnQgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogRWl0
aGVyIDg5IGZvciBHSUY4OSBvciA4NyBmb3IgR0lGODcgKi8KICAgICB1bnNpZ25lZCBzY3JlZW5f
d2lkdGg7ICAgICAgIC8qIExvZ2ljYWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0ICovCiAgICAgdW5z
aWduZWQgc2NyZWVuX2hlaWdodDsKLSAgICBpbnQgZ2xvYmFsX2NvbG9ybWFwX3NpemU7ICAgIC8q
IFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LiAqLwotICAgIHVuc2lnbmVkIGludCBpbWFn
ZXNfZGVjb2RlZDsgLyogQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMg
Ki8KLSAgICBpbnQgaW1hZ2VzX2NvdW50OyAgICAgICAgICAgIC8qIENvdW50ZWQgYWxsIGZyYW1l
cyBzZWVuIHNvIGZhciAoaW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKSAqLwotICAgIGludCBs
b29wX2NvdW50OyAgICAgICAgICAgICAgLyogTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJs
b2NrIHRvIGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBu
dW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuICovCisgICAgaW50IGdsb2Jh
bF9jb2xvcm1hcF9zaXplOyAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LiAqLwor
ICAgIHVuc2lnbmVkIGltYWdlc19kZWNvZGVkOyAgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1l
cyBmb3IgYW5pbWF0ZWQgR0lGcyAqLworICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAgICAgICAv
KiBDb3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZy
YW1lcykgKi8KKyAgICBpbnQgbG9vcF9jb3VudDsgICAgICAgICAgICAgLyogTmV0c2NhcGUgc3Bl
Y2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4g
Ki8KICAgICAKICAgICAvLyBOb3QgcmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQgdG8gbG9j
YXRlIGhlcmUuCiAgICAgaW50IGNvdW50OyAgICAgICAgICAgICAgICAgIC8qIFJlbWFpbmluZyAj
IGJ5dGVzIGluIHN1Yi1ibG9jayAqLwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM4MzIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSUNPSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE4ICsxLDExOCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElD
T0ltYWdlRGVjb2Rlcl9oCi0jZGVmaW5lIElDT0ltYWdlRGVjb2Rlcl9oCi0KLSNpbmNsdWRlICJC
TVBJbWFnZVJlYWRlci5oIgotI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIElDTyBhbmQgQ1VS
IGltYWdlIGZvcm1hdHMuCi0gICAgY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEJNUElt
YWdlUmVhZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFNlZSBjb21tZW50cyBvbiB8bV9w
cmVmZXJyZWRJY29uU2l6ZXwgYmVsb3cuCi0gICAgICAgIElDT0ltYWdlRGVjb2Rlcihjb25zdCBJ
bnRTaXplJiBwcmVmZXJyZWRJY29uU2l6ZSkKLSAgICAgICAgICAgIDogbV9wcmVmZXJyZWRJY29u
U2l6ZShwcmVmZXJyZWRJY29uU2l6ZSkKLSAgICAgICAgICAgICwgbV9pbWFnZVR5cGUoVW5rbm93
bikKLSAgICAgICAgewotICAgICAgICAgICAgbV9hbmRNYXNrU3RhdGUgPSBOb3RZZXREZWNvZGVk
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdCB7IHJldHVybiAiaWNvIjsgfQotCi0gICAgICAgIC8vIEJNUEltYWdlUmVhZGVyCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqIGRhdGEpOwotICAg
ICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCk7Ci0KLSAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Np
emVBdmFpbGFibGUoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25z
dDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGVudW0gSW1hZ2VUeXBlIHsKLSAgICAgICAgICAg
IFVua25vd24sCi0gICAgICAgICAgICBCTVAsCi0gICAgICAgICAgICBQTkcsCi0gICAgICAgIH07
Ci0KLSAgICAgICAgLy8gVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBXaW5kb3dzIElDT05ESVIgYW5k
IElDT05ESVJFTlRSWSBzdHJ1Y3RzLCBidXQKLSAgICAgICAgLy8gd2l0aCB1bm5lY2Vzc2FyeSBl
bnRyaWVzIHJlbW92ZWQuCi0gICAgICAgIHN0cnVjdCBJY29uRGlyZWN0b3J5IHsKLSAgICAgICAg
ICAgIHVpbnQxNl90IGlkQ291bnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHN0cnVjdCBJY29uRGly
ZWN0b3J5RW50cnkgewotICAgICAgICAgICAgdWludDE2X3QgYldpZHRoOyAgIC8vIDE2IGJpdHMg
c28gd2UgY2FuIHJlcHJlc2VudCAyNTYgYXMgMjU2LCBub3QgMAotICAgICAgICAgICAgdWludDE2
X3QgYkhlaWdodDsgIC8vICIKLSAgICAgICAgICAgIHVpbnQxNl90IHdCaXRDb3VudDsKLSAgICAg
ICAgICAgIHVpbnQzMl90IGR3SW1hZ2VPZmZzZXQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8g
UHJvY2Vzc2VzIHRoZSBJQ09ORElSIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEuICBSZXR1
cm5zIHRydWUgaWYgdGhlCi0gICAgICAgIC8vIGRpcmVjdG9yeSBjb3VsZCBiZSBkZWNvZGVkLgot
ICAgICAgICBib29sIHByb2Nlc3NEaXJlY3RvcnkoU2hhcmVkQnVmZmVyKik7Ci0KLSAgICAgICAg
Ly8gUHJvY2Vzc2VzIHRoZSBJQ09ORElSRU5UUlkgcmVjb3JkcyBhZnRlciB0aGUgZGlyZWN0b3J5
LiAgS2VlcHMgdGhlCi0gICAgICAgIC8vICJiZXN0IiBlbnRyeSBhcyB0aGUgb25lIHdlJ2xsIGRl
Y29kZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50cmllcyBjb3VsZAotICAgICAgICAvLyBiZSBk
ZWNvZGVkLgotICAgICAgICBib29sIHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKFNoYXJlZEJ1ZmZl
ciopOwotCi0gICAgICAgIC8vIFJlYWRzIGFuZCByZXR1cm5zIGEgZGlyZWN0b3J5IGVudHJ5IGZy
b20gdGhlIGN1cnJlbnQgb2Zmc2V0IGludG8gfGRhdGF8LgotICAgICAgICBJY29uRGlyZWN0b3J5
RW50cnkgcmVhZERpcmVjdG9yeUVudHJ5KFNoYXJlZEJ1ZmZlciopOwotCi0gICAgICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB8ZW50cnl8IGlzIGEgcHJlZmVyYWJsZSBpY29uIGVudHJ5IHRvIG1fZGly
RW50cnkuCi0gICAgICAgIC8vIExhcmdlciBzaXplcywgb3IgZ3JlYXRlciBiaXRkZXB0aHMgYXQg
dGhlIHNhbWUgc2l6ZSwgYXJlIHByZWZlcmFibGUuCi0gICAgICAgIGJvb2wgaXNCZXR0ZXJFbnRy
eShjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmKSBjb25zdDsKLQotICAgICAgICAvLyBDYWxsZWQg
d2hlbiB0aGUgaW1hZ2UgdG8gYmUgZGVjb2RlZCBpcyBhIFBORyByYXRoZXIgdGhhbiBhIEJNUC4K
LSAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgUE5HSW1hZ2VEZWNvZGVyLCBkZWNvZGVzIHRoZSBp
bWFnZSwgYW5kIGNvcGllcyB0aGUKLSAgICAgICAgLy8gcmVzdWx0cyBsb2NhbGx5LgotICAgICAg
ICB2b2lkIGRlY29kZVBORyhTaGFyZWRCdWZmZXIqKTsKLQotICAgICAgICAvLyBUaGUgZW50cnkg
c2l6ZSB3ZSBzaG91bGQgcHJlZmVyLiAgSWYgdGhpcyBpcyBlbXB0eSwgd2UgY2hvb3NlIHRoZQot
ICAgICAgICAvLyBsYXJnZXN0IGF2YWlsYWJsZSBzaXplLiAgSWYgbm8gZW50cmllcyBvZiB0aGUg
ZGVzaXJlZCBzaXplIGFyZQotICAgICAgICAvLyBhdmFpbGFibGUsIHdlIHBpY2sgdGhlIG5leHQg
bGFyZ2VyIHNpemUuCi0gICAgICAgIEludFNpemUgbV9wcmVmZXJyZWRJY29uU2l6ZTsKLQotICAg
ICAgICAvLyBUaGUgaGVhZGVycyBmb3IgdGhlIElDTy4KLSAgICAgICAgSWNvbkRpcmVjdG9yeSBt
X2RpcmVjdG9yeTsKLSAgICAgICAgSWNvbkRpcmVjdG9yeUVudHJ5IG1fZGlyRW50cnk7Ci0KLSAg
ICAgICAgLy8gVGhlIFBORyBkZWNvZGVyLCBpZiB3ZSBuZWVkIHRvIHVzZSBvbmUuCi0gICAgICAg
IFBOR0ltYWdlRGVjb2RlciBtX3BuZ0RlY29kZXI7Ci0KLSAgICAgICAgLy8gV2hhdCBraW5kIG9m
IGltYWdlIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBlbnRyeSB3ZSdyZSBkZWNvZGluZy4KLSAgICAg
ICAgSW1hZ2VUeXBlIG1faW1hZ2VUeXBlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKiANCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlDQorICogbWV0Og0KKyAqIA0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
DQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqIA0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VA0KKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpZm5k
ZWYgSUNPSW1hZ2VEZWNvZGVyX2gNCisjZGVmaW5lIElDT0ltYWdlRGVjb2Rlcl9oDQorDQorI2lu
Y2x1ZGUgIkJNUEltYWdlUmVhZGVyLmgiDQorI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIg0K
Kw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisNCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRo
ZSBJQ08gYW5kIENVUiBpbWFnZSBmb3JtYXRzLg0KKyAgICBjbGFzcyBJQ09JbWFnZURlY29kZXIg
OiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIgew0KKyAgICBwdWJsaWM6DQorICAgICAgICAvLyBTZWUg
Y29tbWVudHMgb24gfG1fcHJlZmVycmVkSWNvblNpemV8IGJlbG93Lg0KKyAgICAgICAgSUNPSW1h
Z2VEZWNvZGVyKGNvbnN0IEludFNpemUmIHByZWZlcnJlZEljb25TaXplKQ0KKyAgICAgICAgICAg
IDogbV9wcmVmZXJyZWRJY29uU2l6ZShwcmVmZXJyZWRJY29uU2l6ZSkNCisgICAgICAgICAgICAs
IG1faW1hZ2VUeXBlKFVua25vd24pDQorICAgICAgICB7DQorICAgICAgICAgICAgbV9hbmRNYXNr
U3RhdGUgPSBOb3RZZXREZWNvZGVkOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiaWNvIjsgfQ0KKw0KKyAg
ICAgICAgLy8gQk1QSW1hZ2VSZWFkZXINCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFn
ZShTaGFyZWRCdWZmZXIqIGRhdGEpOw0KKyAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOw0KKw0KKyAgICAgICAgLy8gSW1hZ2VEZWNv
ZGVyDQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7DQorICAg
ICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Ow0KKw0KKyAgICBwcml2YXRlOg0KKyAg
ICAgICAgZW51bSBJbWFnZVR5cGUgew0KKyAgICAgICAgICAgIFVua25vd24sDQorICAgICAgICAg
ICAgQk1QLA0KKyAgICAgICAgICAgIFBORywNCisgICAgICAgIH07DQorDQorICAgICAgICAvLyBU
aGVzZSBhcmUgYmFzZWQgb24gdGhlIFdpbmRvd3MgSUNPTkRJUiBhbmQgSUNPTkRJUkVOVFJZIHN0
cnVjdHMsIGJ1dA0KKyAgICAgICAgLy8gd2l0aCB1bm5lY2Vzc2FyeSBlbnRyaWVzIHJlbW92ZWQu
DQorICAgICAgICBzdHJ1Y3QgSWNvbkRpcmVjdG9yeSB7DQorICAgICAgICAgICAgdWludDE2X3Qg
aWRDb3VudDsNCisgICAgICAgIH07DQorICAgICAgICBzdHJ1Y3QgSWNvbkRpcmVjdG9yeUVudHJ5
IHsNCisgICAgICAgICAgICB1aW50MTZfdCBiV2lkdGg7ICAgLy8gMTYgYml0cyBzbyB3ZSBjYW4g
cmVwcmVzZW50IDI1NiBhcyAyNTYsIG5vdCAwDQorICAgICAgICAgICAgdWludDE2X3QgYkhlaWdo
dDsgIC8vICINCisgICAgICAgICAgICB1aW50MTZfdCB3Qml0Q291bnQ7DQorICAgICAgICAgICAg
dWludDMyX3QgZHdJbWFnZU9mZnNldDsNCisgICAgICAgIH07DQorDQorICAgICAgICAvLyBQcm9j
ZXNzZXMgdGhlIElDT05ESVIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YS4gIFJldHVybnMg
dHJ1ZSBpZiB0aGUNCisgICAgICAgIC8vIGRpcmVjdG9yeSBjb3VsZCBiZSBkZWNvZGVkLg0KKyAg
ICAgICAgYm9vbCBwcm9jZXNzRGlyZWN0b3J5KFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAgICAgICAg
Ly8gUHJvY2Vzc2VzIHRoZSBJQ09ORElSRU5UUlkgcmVjb3JkcyBhZnRlciB0aGUgZGlyZWN0b3J5
LiAgS2VlcHMgdGhlDQorICAgICAgICAvLyAiYmVzdCIgZW50cnkgYXMgdGhlIG9uZSB3ZSdsbCBk
ZWNvZGUuICBSZXR1cm5zIHRydWUgaWYgdGhlIGVudHJpZXMgY291bGQNCisgICAgICAgIC8vIGJl
IGRlY29kZWQuDQorICAgICAgICBib29sIHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKFNoYXJlZEJ1
ZmZlciopOw0KKw0KKyAgICAgICAgLy8gUmVhZHMgYW5kIHJldHVybnMgYSBkaXJlY3RvcnkgZW50
cnkgZnJvbSB0aGUgY3VycmVudCBvZmZzZXQgaW50byB8ZGF0YXwuDQorICAgICAgICBJY29uRGly
ZWN0b3J5RW50cnkgcmVhZERpcmVjdG9yeUVudHJ5KFNoYXJlZEJ1ZmZlciopOw0KKw0KKyAgICAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHxlbnRyeXwgaXMgYSBwcmVmZXJhYmxlIGljb24gZW50cnkg
dG8gbV9kaXJFbnRyeS4NCisgICAgICAgIC8vIExhcmdlciBzaXplcywgb3IgZ3JlYXRlciBiaXRk
ZXB0aHMgYXQgdGhlIHNhbWUgc2l6ZSwgYXJlIHByZWZlcmFibGUuDQorICAgICAgICBib29sIGlz
QmV0dGVyRW50cnkoY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JikgY29uc3Q7DQorDQorICAgICAg
ICAvLyBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgdG8gYmUgZGVjb2RlZCBpcyBhIFBORyByYXRoZXIg
dGhhbiBhIEJNUC4NCisgICAgICAgIC8vIEluc3RhbnRpYXRlcyBhIFBOR0ltYWdlRGVjb2Rlciwg
ZGVjb2RlcyB0aGUgaW1hZ2UsIGFuZCBjb3BpZXMgdGhlDQorICAgICAgICAvLyByZXN1bHRzIGxv
Y2FsbHkuDQorICAgICAgICB2b2lkIGRlY29kZVBORyhTaGFyZWRCdWZmZXIqKTsNCisNCisgICAg
ICAgIC8vIFRoZSBlbnRyeSBzaXplIHdlIHNob3VsZCBwcmVmZXIuICBJZiB0aGlzIGlzIGVtcHR5
LCB3ZSBjaG9vc2UgdGhlDQorICAgICAgICAvLyBsYXJnZXN0IGF2YWlsYWJsZSBzaXplLiAgSWYg
bm8gZW50cmllcyBvZiB0aGUgZGVzaXJlZCBzaXplIGFyZQ0KKyAgICAgICAgLy8gYXZhaWxhYmxl
LCB3ZSBwaWNrIHRoZSBuZXh0IGxhcmdlciBzaXplLg0KKyAgICAgICAgSW50U2l6ZSBtX3ByZWZl
cnJlZEljb25TaXplOw0KKw0KKyAgICAgICAgLy8gVGhlIGhlYWRlcnMgZm9yIHRoZSBJQ08uDQor
ICAgICAgICBJY29uRGlyZWN0b3J5IG1fZGlyZWN0b3J5Ow0KKyAgICAgICAgSWNvbkRpcmVjdG9y
eUVudHJ5IG1fZGlyRW50cnk7DQorDQorICAgICAgICAvLyBUaGUgUE5HIGRlY29kZXIsIGlmIHdl
IG5lZWQgdG8gdXNlIG9uZS4NCisgICAgICAgIFBOR0ltYWdlRGVjb2RlciBtX3BuZ0RlY29kZXI7
DQorDQorICAgICAgICAvLyBXaGF0IGtpbmQgb2YgaW1hZ2UgZGF0YSBpcyBzdG9yZWQgYXQgdGhl
IGVudHJ5IHdlJ3JlIGRlY29kaW5nLg0KKyAgICAgICAgSW1hZ2VUeXBlIG1faW1hZ2VUeXBlOw0K
KyAgICB9Ow0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUNCisNCisjZW5kaWYNCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rl
ci5oCShyZXZpc2lvbiA0MzgzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDIsOSArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSAgICAvLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNv
ZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4KLSAgICAvLyBUaGlzIGJ1ZmZlciBpcyB3
aGF0IGFsbCBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFyZSB0
aGVuCi0gICAgLy8gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlz
IGJ1ZmZlci4KKyAgICAvLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBk
ZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQg
YWxsCisgICAgLy8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBh
cmUgdGhlbiBpbnN0YW50aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVm
ZmVyLgogICAgIGNsYXNzIFJHQkEzMkJ1ZmZlciB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVt
IEZyYW1lU3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07
CkBAIC0xOTYsNyArMTkzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBhbmQgdGhl
IGJhc2UgY2xhc3MgbWFuYWdlcyB0aGUgUkdCQTMyIGZyYW1lIGNhY2hlLgogICAgIGNsYXNzIElt
YWdlRGVjb2RlciB7CiAgICAgcHVibGljOgotICAgICAgICBJbWFnZURlY29kZXIoKSA6IG1fZmFp
bGVkKGZhbHNlKSwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKSAge30KKyAgICAgICAgSW1hZ2VEZWNv
ZGVyKCkKKyAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fc2l6
ZUF2YWlsYWJsZShmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKICAgICAgICAgdmlydHVh
bCB+SW1hZ2VEZWNvZGVyKCkge30KIAogICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVu
c2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0
eXBlLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQRUdJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgICAgICAvKiBBbGxvY2F0ZSBh
bmQgaW5pdGlhbGl6ZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0ICovCiAgICAgICAgIGpwZWdf
Y3JlYXRlX2RlY29tcHJlc3MoJm1faW5mbyk7CiAgIAotICAgICAgICBkZWNvZGVyX3NvdXJjZV9t
Z3IqIHNyYyA9IE5VTEw7CisgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3JjID0gMDsKICAg
ICAgICAgaWYgKCFtX2luZm8uc3JjKSB7CiAgICAgICAgICAgICBzcmMgPSAoZGVjb2Rlcl9zb3Vy
Y2VfbWdyKilmYXN0Q2FsbG9jKHNpemVvZihkZWNvZGVyX3NvdXJjZV9tZ3IpLCAxKTsKICAgICAg
ICAgICAgIGlmICghc3JjKSB7CkBAIC00MjEsNyArNDIxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0g
ICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwor
ICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiBSR0JBMzJC
dWZmZXIqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDM4MzIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzIsOSArNzIsMTIgQEAgY2xhc3MgUE5HSW1hZ2VSZWFkZXIKIHsKIHB1YmxpYzoKICAg
ICBQTkdJbWFnZVJlYWRlcihQTkdJbWFnZURlY29kZXIqIGRlY29kZXIpCi0gICAgOiBtX3JlYWRP
ZmZzZXQoMCksIG1fZGVjb2RpbmdTaXplT25seShmYWxzZSksIG1faW50ZXJsYWNlQnVmZmVyKDAp
LCBtX2hhc0FscGhhKDApCisgICAgICAgIDogbV9yZWFkT2Zmc2V0KDApCisgICAgICAgICwgbV9k
ZWNvZGluZ1NpemVPbmx5KGZhbHNlKQorICAgICAgICAsIG1faW50ZXJsYWNlQnVmZmVyKDApCisg
ICAgICAgICwgbV9oYXNBbHBoYSgwKQogICAgIHsKLSAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRl
X3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgTlVMTCwgZGVjb2RpbmdGYWlsZWQs
IGRlY29kaW5nV2FybmluZyk7CisgICAgICAgIG1fcG5nID0gcG5nX2NyZWF0ZV9yZWFkX3N0cnVj
dChQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIDAsIGRlY29kaW5nRmFpbGVkLCBkZWNvZGluZ1dhcm5p
bmcpOwogICAgICAgICBtX2luZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KG1fcG5nKTsKICAg
ICAgICAgcG5nX3NldF9wcm9ncmVzc2l2ZV9yZWFkX2ZuKG1fcG5nLCBkZWNvZGVyLCBoZWFkZXJB
dmFpbGFibGUsIHJvd0F2YWlsYWJsZSwgcG5nQ29tcGxldGUpOwogICAgIH0KQEAgLTEzNCw4ICsx
MzcsOSBAQCBwcml2YXRlOgogfTsKIAogUE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIo
KQotOiBtX3JlYWRlcigwKQote30KKyAgICA6IG1fcmVhZGVyKDApCit7Cit9CiAKIFBOR0ltYWdl
RGVjb2Rlcjo6flBOR0ltYWdlRGVjb2RlcigpCiB7CkBAIC0xNjksNyArMTczLDcgQEAgYm9vbCBQ
TkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIAogICAgICAgICBkZWNvZGUodHJ1ZSk7
CiAgICAgfQogCi0gICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSgpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwog
fQogCiBSR0JBMzJCdWZmZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCkKQEAgLTMwNSw4ICszMDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVh
ZGVyQXZhaWxhYmxlKCkKIHZvaWQgcm93QXZhaWxhYmxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5
dGVwIHJvd0J1ZmZlciwKICAgICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIHJvd0luZGV4LCBp
bnQgaW50ZXJsYWNlUGFzcykKIHsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihw
bmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKAotICAgICAgICByb3dC
dWZmZXIsIHJvd0luZGV4LCBpbnRlcmxhY2VQYXNzKTsKKyAgICBzdGF0aWNfY2FzdDxQTkdJbWFn
ZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKHJv
d0J1ZmZlciwgcm93SW5kZXgsIGludGVybGFjZVBhc3MpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93
SW5kZXgsIGludCBpbnRlcmxhY2VQYXNzKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9za2lhL1hCTUltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDM4
MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzEsODEgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBY
Qk1JbWFnZURlY29kZXJfaAotI2RlZmluZSBYQk1JbWFnZURlY29kZXJfaAotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIFhC
TSBpbWFnZSBmb3JtYXQuCi0gICAgY2xhc3MgWEJNSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdl
RGVjb2RlciB7Ci0gICAgcHVibGljOgotICAgICAgICBYQk1JbWFnZURlY29kZXIoKTsKLSAgICAg
ICAgdmlydHVhbCB+WEJNSW1hZ2VEZWNvZGVyKCkge30KLQotICAgICAgICB2aXJ0dWFsIFN0cmlu
ZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJ4Ym0iOyB9Ci0KLSAgICAgICAg
dmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCk7Ci0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhh
cyBiZWVuIGRlY29kZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxl
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFJlc3RyaWN0cyBp
bWFnZSBzaXplIHRvIHNvbWV0aGluZyAicmVhc29uYWJsZSIuCi0gICAgICAgIC8vIFRoaXMgcHJv
dGVjdHMgYWdhaW5zIHJpZGljdWxvdXNseSBsYXJnZSBYQk1zIGFuZCBwcmV2ZW50cyBiYWQgdGhp
bmdzCi0gICAgICAgIC8vIGxpa2Ugb3ZlcmZsb3cgb2YgbV9iaXRzRGVjb2RlZC4KLSAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhEaW1lbnNpb24gPSA2NTUzNTsKLQotICAgICAgICAvLyBJbiBY
MTAsIGFuIGFycmF5IG9mIHR5cGUgInNob3J0IiBpcyB1c2VkIHRvIGRlY2xhcmUgdGhlIGltYWdl
IGJpdHMsCi0gICAgICAgIC8vIGJ1dCBpbiBYMTEsIHRoZSB0eXBlIGlzICJjaGFyIi4KLSAgICAg
ICAgZW51bSBEYXRhVHlwZSB7Ci0gICAgICAgICAgICBVbmtub3duLAotICAgICAgICAgICAgWDEw
LAotICAgICAgICAgICAgWDExLAotICAgICAgICB9OwotCi0gICAgICAgIGJvb2wgZGVjb2RlSGVh
ZGVyKCk7Ci0gICAgICAgIGJvb2wgZGVjb2RlRGF0dW0odWludDE2X3QqIHJlc3VsdCk7Ci0gICAg
ICAgIGJvb2wgZGVjb2RlRGF0YSgpOwotICAgICAgICB2b2lkIGRlY29kZVhCTShib29sIHNpemVP
bmx5KTsKLQotICAgICAgICBzdGQ6OnN0cmluZyBtX3hibVN0cmluZzsgIC8vIE51bGwtdGVybWlu
YXRlZCBjb3B5IG9mIHRoZSBYQk0gZGF0YS4KLSAgICAgICAgc2l6ZV90IG1fZGVjb2RlT2Zmc2V0
OyAgICAvLyBUaGUgY3VycmVudCBvZmZzZXQgaW4gbV94Ym1TdHJpbmcgZm9yIGRlY29kaW5nLgot
ICAgICAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOwotICAgICAgICBib29sIG1fZGVjb2RlZEhl
YWRlcjsKLSAgICAgICAgZW51bSBEYXRhVHlwZSBtX2RhdGFUeXBlOwotICAgICAgICBpbnQgbV9i
aXRzRGVjb2RlZDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgor
LyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQorICogDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1l
dDoNCisgKiANCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4NCisgKiANCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFhCTUltYWdlRGVj
b2Rlcl9oDQorI2RlZmluZSBYQk1JbWFnZURlY29kZXJfaA0KKw0KKyNpbmNsdWRlIDxzdHJpbmc+
DQorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIg0KKw0KK25hbWVzcGFjZSBXZWJDb3JlIHsNCisN
CisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBYQk0gaW1hZ2UgZm9ybWF0Lg0KKyAgICBj
bGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsNCisgICAgcHVibGlj
Og0KKyAgICAgICAgWEJNSW1hZ2VEZWNvZGVyKCk7DQorICAgICAgICB2aXJ0dWFsIH5YQk1JbWFn
ZURlY29kZXIoKSB7fQ0KKw0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdCB7IHJldHVybiAieGJtIjsgfQ0KKw0KKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7DQorICAgICAg
ICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVk
IHlldC4NCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsNCisg
ICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KTsNCisNCisgICAgcHJpdmF0ZToNCisgICAgICAgIC8vIFJlc3RyaWN0cyBpbWFnZSBzaXpl
IHRvIHNvbWV0aGluZyAicmVhc29uYWJsZSIuDQorICAgICAgICAvLyBUaGlzIHByb3RlY3RzIGFn
YWlucyByaWRpY3Vsb3VzbHkgbGFyZ2UgWEJNcyBhbmQgcHJldmVudHMgYmFkIHRoaW5ncw0KKyAg
ICAgICAgLy8gbGlrZSBvdmVyZmxvdyBvZiBtX2JpdHNEZWNvZGVkLg0KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhEaW1lbnNpb24gPSA2NTUzNTsNCisNCisgICAgICAgIC8vIEluIFgxMCwg
YW4gYXJyYXkgb2YgdHlwZSAic2hvcnQiIGlzIHVzZWQgdG8gZGVjbGFyZSB0aGUgaW1hZ2UgYml0
cywNCisgICAgICAgIC8vIGJ1dCBpbiBYMTEsIHRoZSB0eXBlIGlzICJjaGFyIi4NCisgICAgICAg
IGVudW0gRGF0YVR5cGUgew0KKyAgICAgICAgICAgIFVua25vd24sDQorICAgICAgICAgICAgWDEw
LA0KKyAgICAgICAgICAgIFgxMSwNCisgICAgICAgIH07DQorDQorICAgICAgICBib29sIGRlY29k
ZUhlYWRlcigpOw0KKyAgICAgICAgYm9vbCBkZWNvZGVEYXR1bSh1aW50MTZfdCogcmVzdWx0KTsN
CisgICAgICAgIGJvb2wgZGVjb2RlRGF0YSgpOw0KKyAgICAgICAgdm9pZCBkZWNvZGVYQk0oYm9v
bCBzaXplT25seSk7DQorDQorICAgICAgICBzdGQ6OnN0cmluZyBtX3hibVN0cmluZzsgIC8vIE51
bGwtdGVybWluYXRlZCBjb3B5IG9mIHRoZSBYQk0gZGF0YS4NCisgICAgICAgIHNpemVfdCBtX2Rl
Y29kZU9mZnNldDsgICAgLy8gVGhlIGN1cnJlbnQgb2Zmc2V0IGluIG1feGJtU3RyaW5nIGZvciBk
ZWNvZGluZy4NCisgICAgICAgIGJvb2wgbV9hbGxEYXRhUmVjZWl2ZWQ7DQorICAgICAgICBib29s
IG1fZGVjb2RlZEhlYWRlcjsNCisgICAgICAgIGVudW0gRGF0YVR5cGUgbV9kYXRhVHlwZTsNCisg
ICAgICAgIGludCBtX2JpdHNEZWNvZGVkOw0KKyAgICB9Ow0KKw0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUNCisNCisjZW5kaWYNCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3hibS9YQk1JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQzODMyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogIAotI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oV1gpCi0KIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAKQEAg
LTQxLDYgKzM5LDQgQEAgUkdCQTMyQnVmZmVyKiBYQk1JbWFnZURlY29kZXI6OmZyYW1lQnVmZgog
ICAgIHJldHVybiAwOwogfQogCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShDQUlSTykKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
eGJtL1hCTUltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0MzgzMikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywyNyArMjMsMjYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgWEJNX0RFQ09ERVJfSF8KLSNkZWZpbmUgWEJNX0RFQ09ERVJfSF8KKyNpZm5kZWYgWEJN
SW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgWEJNSW1hZ2VEZWNvZGVyX2gKIAogI2luY2x1ZGUgIklt
YWdlRGVjb2Rlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFhCTUltYWdlUmVh
ZGVyOworICAgIGNsYXNzIFhCTUltYWdlUmVhZGVyOwogCi0vLyBUaGlzIGNsYXNzIGRlY29kZXMg
dGhlIFhCTSBpbWFnZSBmb3JtYXQuCi1jbGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1h
Z2VEZWNvZGVyCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdCB7IHJldHVybiAieGJtIjsgfQorICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0
aGUgWEJNIGltYWdlIGZvcm1hdC4KKyAgICBjbGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMg
SW1hZ2VEZWNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gInhibSI7IH0KIAotICAgIC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgIHZp
cnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAgICAgLy8gV2hldGhlciBv
ciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUkdC
QTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLX07CisgICAgICAg
IHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsK
KyAgICB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="15365"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30584</attachid>
            <date>2009-05-22 11:29:46 -0700</date>
            <delta_ts>2009-05-26 23:41:41 -0700</delta_ts>
            <desc>part one, simplified (Landed r44051)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28118</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDA1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDktMDUtMjIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IG9uZQor
ICAgICAgICBJbmRlbnQgY29udGVudHMgb2YgbmFtZXNwYWNlcyBpbiBoZWFkZXIgZmlsZXMsIHRv
IGNvbXBseSB3aXRoIHRoZQorICAgICAgICBzdHlsZSBndWlkZS4gIE5vIGZ1bmN0aW9uYWwgY2hh
bmdlLgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Oik6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Ynl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6ZHVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpkaXNwb3NhbE1ldGhvZCk6CisgICAgICAgIChXZWJD
b3JlOjpSR0JBMzJCdWZmZXI6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1
ZmZlcjo6c2V0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmVuc3VyZUhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldER1cmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6
UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjptX2ZhaWxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6On5JbWFnZURlY29kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1l
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzdXBwb3J0c0FscGhhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29k
ZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjopOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURl
Y29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRl
bnNpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVF
eHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c3VwcG9ydHNB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpyZWFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OnJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFn
ZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpYQk1JbWFnZURl
Y29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKwogMjAwOS0wNS0yMiAgRG9taW5payBSw7Z0dHNj
aGVzICA8ZG9taW5pay5yb2V0dHNjaGVzQGFjY2Vzcy1jb21wYW55LmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0MDQ5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTM1ICszNCwxMzUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZl
Y3Rvcjx1bnNpZ25lZD4gUkdCQTMyQXJyYXk7CisgICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQ+
IFJHQkEzMkFycmF5OwogCi0vLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRo
ZSBkZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdo
YXQgYWxsCi0vLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFy
ZSB0aGVuIGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZm
ZXIuCi1jbGFzcyBSR0JBMzJCdWZmZXIKLXsKLXB1YmxpYzoKLSAgICBlbnVtIEZyYW1lU3RhdHVz
IHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07Ci0gICAgZW51bSBG
cmFtZURpc3Bvc2FsTWV0aG9kIHsKLSAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVtZXJp
YyB2YWx1ZXMgb2YgdGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQgYWxsCi0gICAgICAgIC8vIHVz
ZXJzLCBhcyBzb21lIHVzZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25z
dGFudHMuCi0gICAgICAgIERpc3Bvc2VOb3RTcGVjaWZpZWQgPSAwLCAgICAgICAvLyBMZWF2ZSBm
cmFtZSBpbiBmcmFtZWJ1ZmZlcgotICAgICAgICBEaXNwb3NlS2VlcCA9IDEsICAgICAgICAgICAg
ICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgRGlzcG9zZU92ZXJ3cml0
ZUJnY29sb3IgPSAyLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50Ci0gICAgICAgIERp
c3Bvc2VPdmVyd3JpdGVQcmV2aW91cyA9IDMsICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBm
cmFtZWJ1ZmZlciBjb250ZW50cwotICAgIH07Ci0KLSAgICBSR0JBMzJCdWZmZXIoKSA6IG1faGVp
Z2h0KDApLCBtX3N0YXR1cyhGcmFtZUVtcHR5KSwgbV9kdXJhdGlvbigwKSwKLSAgICAgICAgICAg
ICAgICAgICAgIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCksIG1faGFzQWxw
aGEoZmFsc2UpCi0gICAge30gCi0KLSAgICB2b2lkIGNsZWFyKCkgewotICAgICAgbV9ieXRlcy5j
bGVhcigpOwotICAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwotICAgICAgLy8gTk9URTogRG8g
bm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2Fs
bHMKLSAgICAgIC8vIHRoaXMgdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5j
dGlvbnMgbGlrZQotICAgICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUo
KSBtYXkgc3RpbGwgbmVlZCB0byByZWFkIG90aGVyCi0gICAgICAvLyBtZXRhZGF0YSBvdXQgb2Yg
dGhpcyBmcmFtZSBsYXRlci4KLSAgICB9Ci0KLSAgICBjb25zdCBSR0JBMzJBcnJheSYgYnl0ZXMo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVzOyB9Ci0gICAgUkdCQTMyQXJyYXkmIGJ5dGVzKCkgeyBy
ZXR1cm4gbV9ieXRlczsgfQotICAgIGNvbnN0IEludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KLSAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdo
dDsgfQotICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9
Ci0gICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0g
ICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzcG9zYWxNZXRob2Q7IH0KLSAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNBbHBoYTsgfQotCi0gICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZWN0
ID0gcjsgfQotICAgIHZvaWQgZW5zdXJlSGVpZ2h0KHVuc2lnbmVkIHJvd0luZGV4KSB7IGlmIChy
b3dJbmRleCA+IG1faGVpZ2h0KSBtX2hlaWdodCA9IHJvd0luZGV4OyB9Ci0gICAgdm9pZCBzZXRT
dGF0dXMoRnJhbWVTdGF0dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KLSAgICB2b2lkIHNldER1cmF0
aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQotICAgIHZv
aWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNw
b3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkg
eyBtX2hhc0FscGhhID0gYWxwaGE7IH0KLQotICAgIHN0YXRpYyB2b2lkIHNldFJHQkEodW5zaWdu
ZWQmIHBvcywgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICAvLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGlt
YWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCisgICAg
Ly8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBhcmUgdGhlbiBp
bnN0YW50aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgorICAg
IGNsYXNzIFJHQkEzMkJ1ZmZlcgogICAgIHsKLSAgICAgICAgLy8gV2Ugc3RvcmUgdGhpcyBkYXRh
IHByZS1tdWx0aXBsaWVkLgotICAgICAgICBpZiAoYSA9PSAwKQotICAgICAgICAgICAgcG9zID0g
MDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAgICAgICAg
ICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAg
ciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsKLSAgICAgICAgICAg
ICAgICBnID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGcgKiBhbHBoYVBlcmNlbnQpOwotICAgICAg
ICAgICAgICAgIGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhhUGVyY2VudCk7Cisg
ICAgcHVibGljOgorICAgICAgICBlbnVtIEZyYW1lU3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQ
YXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07CisgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhv
ZCB7CisgICAgICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0
aGVzZSwgbWFrZSBzdXJlIHlvdSBhdWRpdCBhbGwKKyAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBz
b21lIHVzZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCisg
ICAgICAgICAgICBEaXNwb3NlTm90U3BlY2lmaWVkID0gMCwgICAgICAgLy8gTGVhdmUgZnJhbWUg
aW4gZnJhbWVidWZmZXIKKyAgICAgICAgICAgIERpc3Bvc2VLZWVwID0gMSwgICAgICAgICAgICAg
ICAvLyBMZWF2ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAgICAgICAgICAgRGlzcG9zZU92ZXJ3
cml0ZUJnY29sb3IgPSAyLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50CisgICAgICAg
ICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgPSAzLCAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJl
dmlvdXMgZnJhbWVidWZmZXIgY29udGVudHMKKyAgICAgICAgfTsKKworICAgICAgICBSR0JBMzJC
dWZmZXIoKSA6IG1faGVpZ2h0KDApLCBtX3N0YXR1cyhGcmFtZUVtcHR5KSwgbV9kdXJhdGlvbigw
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RT
cGVjaWZpZWQpLCBtX2hhc0FscGhhKGZhbHNlKQorICAgICAgICB7fSAKKworICAgICAgICB2b2lk
IGNsZWFyKCkgeworICAgICAgICAgIG1fYnl0ZXMuY2xlYXIoKTsKKyAgICAgICAgICBtX3N0YXR1
cyA9IEZyYW1lRW1wdHk7CisgICAgICAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1l
bWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMKKyAgICAgICAgICAvLyB0
aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UKKyAg
ICAgICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKSBhbmQgZnJhbWVDb21wbGV0ZSgpIG1heSBzdGls
bCBuZWVkIHRvIHJlYWQgb3RoZXIKKyAgICAgICAgICAvLyBtZXRhZGF0YSBvdXQgb2YgdGhpcyBm
cmFtZSBsYXRlci4KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRl
cygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH0KKyAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVz
KCkgeyByZXR1cm4gbV9ieXRlczsgfQorICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1faGVpZ2h0OyB9CisgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdHVzOyB9CisgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvbjsgfQorICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQorICAgICAgICBib29s
IGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQorCisgICAgICAgIHZvaWQg
c2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBl
bnN1cmVIZWlnaHQodW5zaWduZWQgcm93SW5kZXgpIHsgaWYgKHJvd0luZGV4ID4gbV9oZWlnaHQp
IG1faGVpZ2h0ID0gcm93SW5kZXg7IH0KKyAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0
dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KKyAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICAgICAgdm9pZCBzZXRE
aXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0
aG9kID0gbWV0aG9kOyB9CisgICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkgeyBt
X2hhc0FscGhhID0gYWxwaGE7IH0KKworICAgICAgICBzdGF0aWMgdm9pZCBzZXRSR0JBKHVuc2ln
bmVkJiBwb3MsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMgZGF0YSBwcmUtbXVsdGlw
bGllZC4KKyAgICAgICAgICAgIGlmIChhID09IDApCisgICAgICAgICAgICAgICAgcG9zID0gMDsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7CisgICAgICAg
ICAgICAgICAgICAgIHIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ociAqIGFscGhhUGVyY2VudCk7
CisgICAgICAgICAgICAgICAgICAgIGcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZyAqIGFscGhh
UGVyY2VudCk7CisgICAgICAgICAgICAgICAgICAgIGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
YiAqIGFscGhhUGVyY2VudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBv
cyA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcG9zID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CiAgICAgICAg
IH0KLSAgICB9CiAKLXByaXZhdGU6Ci0gICAgUkdCQTMyQXJyYXkgbV9ieXRlczsKLSAgICBJbnRS
ZWN0IG1fcmVjdDsgICAgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFt
ZSB3aXRoaW4gdGhlIG92ZXJhbGwgYnVmZmVyLgotICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYg
ZnJhbWVzCi0gICAgICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qgd2Fz
IHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgotICAgIHVuc2lnbmVkIG1faGVp
Z2h0OyAvLyBUaGUgaGVpZ2h0ICh0aGUgbnVtYmVyIG9mIHJvd3Mgd2UndmUgZnVsbHkgZGVjb2Rl
ZCkuCi0gICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgZnJh
bWUgaXMgY29tcGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4KLSAgICB1bnNpZ25lZCBtX2R1cmF0
aW9uOyAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgotICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9k
aXNwb3NhbE1ldGhvZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4g
aW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgotICAgIGJvb2wgbV9oYXNBbHBoYTsgLy8gV2hl
dGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlciBoYXZlIHRyYW5zcGFy
ZW5jeS4KLX07Ci0KLS8vIFRoZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2Ug
Y2xhc3MgZm9yIHNwZWNpZmljIGltYWdlIGZvcm1hdCBkZWNvZGVycwotLy8gKGUuZy4sIEdJRiwg
SlBHLCBQTkcsIElDTykgdG8gZGVyaXZlIGZyb20uICBBbGwgZGVjb2RlcnMgZGVjb2RlIGludG8g
UkdCQTMyIGZvcm1hdAotLy8gYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhlIFJHQkEzMiBm
cmFtZSBjYWNoZS4KLWNsYXNzIEltYWdlRGVjb2RlcgotewotcHVibGljOgotICAgIEltYWdlRGVj
b2RlcigpIDptX3NpemVBdmFpbGFibGUoZmFsc2UpLCBtX2ZhaWxlZChmYWxzZSkge30KLSAgICB2
aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQotCi0gICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRl
bnNpb24gdXN1YWxseSBhc3NvY2lhdGVkIHdpdGggYW4gdW5kZWNvZGVkIGltYWdlIG9mIHRoaXMg
dHlwZS4KLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsK
LQotICAgIC8vIEFsbCBzcGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhpbmcg
d2l0aCB0aGUgZGF0YSB0aGV5IGFyZSBnaXZlbi4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShT
aGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IG1fZGF0YSA9IGRhdGE7
IH0KLQotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVu
IGRlY29kZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdCA9
IDA7Ci0KLSAgICAvLyBSZXF1ZXN0cyB0aGUgc2l6ZS4KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgLy8gVGhlIHRvdGFsIG51bWJlciBv
ZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGZy
YW1lcwotICAgIC8vIHdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlciBpZiB0
aGV5IG5lZWQgdG8gKHdpdGhvdXQgbmVjZXNzYXJpbHkKLSAgICAvLyBkZWNvZGluZyBhbGwgb2Yg
dGhlIGluZGl2aWR1YWwgZnJhbWVzKS4KLSAgICB2aXJ0dWFsIGludCBmcmFtZUNvdW50KCkgeyBy
ZXR1cm4gMTsgfQotCi0gICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyB0byBwZXJmb3Jt
IGZvciBhbiBhbmltYXRpb24gbG9vcC4KLSAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQo
KSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQotCi0gICAgLy8gQ2FsbGVkIHRvIG9i
dGFpbiB0aGUgUkdCQTMyQnVmZmVyIGZ1bGwgb2YgZGVjb2RlZCBkYXRhIGZvciByZW5kZXJpbmcu
ICBUaGUKLSAgICAvLyBkZWNvZGVyIHBsdWdpbiB3aWxsIGRlY29kZSBhcyBtdWNoIG9mIHRoZSBm
cmFtZSBhcyBpdCBjYW4gYmVmb3JlIGhhbmRpbmcKLSAgICAvLyBiYWNrIHRoZSBidWZmZXIuCi0g
ICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
ID0gMDsKLQotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSB1bmRlcmx5aW5nIGltYWdlIGZvcm1h
dCBldmVuIHN1cHBvcnRzIGFscGhhIHRyYW5zcGFyZW5jeS4KLSAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZmFpbGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KLSAgICB2b2lkIHNldEZhaWxlZCgpIHsgbV9mYWls
ZWQgPSB0cnVlOyB9Ci0KLSAgICAvLyBXaXBlIG91dCBmcmFtZXMgaW4gdGhlIGZyYW1lIGJ1ZmZl
ciBjYWNoZSBiZWZvcmUgfGNsZWFyQmVmb3JlRnJhbWV8LAotICAgIC8vIGFzc3VtaW5nIHRoaXMg
Y2FuIGJlIGRvbmUgd2l0aG91dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZlcmVudCBkZWNvZGVy
cwotICAgIC8vIHBsYWNlIGRpZmZlcmVudCByZXN0cmljdGlvbnMgb24gd2hhdCBmcmFtZXMgYXJl
IHNhZmUgdG8gZGVzdHJveSwgc28gdGhpcwotICAgIC8vIGlzIGxlZnQgdG8gdGhlbSB0byBpbXBs
ZW1lbnQuCi0gICAgLy8gRm9yIGNvbnZlbmllbmNlJ3Mgc2FrZSwgd2UgcHJvdmlkZSBhIGRlZmF1
bHQgKGVtcHR5KSBpbXBsZW1lbnRhdGlvbiwKLSAgICAvLyBzaW5jZSBpbiBwcmFjdGljZSBvbmx5
IEdJRnMgd2lsbCBldmVyIHVzZSB0aGlzLgotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCBkYXRhLgotICAgIFZl
Y3RvcjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAgICBib29sIG1fc2l6ZUF2
YWlsYWJsZTsKLSAgICBtdXRhYmxlIGJvb2wgbV9mYWlsZWQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7
Ci19OworICAgIHByaXZhdGU6CisgICAgICAgIFJHQkEzMkFycmF5IG1fYnl0ZXM7CisgICAgICAg
IEludFJlY3QgbV9yZWN0OyAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVk
IGZyYW1lIHdpdGhpbiB0aGUgb3ZlcmFsbCBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgZnJhbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBvcmln
aW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KKyAgICAg
ICAgdW5zaWduZWQgbV9oZWlnaHQ7IC8vIFRoZSBoZWlnaHQgKHRoZSBudW1iZXIgb2Ygcm93cyB3
ZSd2ZSBmdWxseSBkZWNvZGVkKS4KKyAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdo
ZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgaXMgY29tcGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4K
KyAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KKyAg
ICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRv
IHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUu
CisgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgLy8gV2hldGhlciBvciBub3QgYW55IG9mIHRoZSBw
aXhlbHMgaW4gdGhlIGJ1ZmZlciBoYXZlIHRyYW5zcGFyZW5jeS4KKyAgICB9OworCisgICAgLy8g
VGhlIEltYWdlRGVjb2RlciBjbGFzcyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lm
aWMgaW1hZ2UgZm9ybWF0IGRlY29kZXJzCisgICAgLy8gKGUuZy4sIEdJRiwgSlBHLCBQTkcsIElD
TykgdG8gZGVyaXZlIGZyb20uICBBbGwgZGVjb2RlcnMgZGVjb2RlIGludG8gUkdCQTMyIGZvcm1h
dAorICAgIC8vIGFuZCB0aGUgYmFzZSBjbGFzcyBtYW5hZ2VzIHRoZSBSR0JBMzIgZnJhbWUgY2Fj
aGUuCisgICAgY2xhc3MgSW1hZ2VEZWNvZGVyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAg
SW1hZ2VEZWNvZGVyKCkgOm1fc2l6ZUF2YWlsYWJsZShmYWxzZSksIG1fZmFpbGVkKGZhbHNlKSB7
fQorICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQorCisgICAgICAgIC8vIFRoZSB0
aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFuIHVuZGVjb2Rl
ZCBpbWFnZSBvZiB0aGlzIHR5cGUuCisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QgPSAwOworCisgICAgICAgIC8vIEFsbCBzcGVjaWZpYyBkZWNvZGVyIHBs
dWdpbnMgbXVzdCBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZGF0YSB0aGV5IGFyZSBnaXZlbi4KKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCkgeyBtX2RhdGEgPSBkYXRhOyB9CisKKyAgICAgICAgLy8gV2hldGhlciBvciBu
b3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdCA9IDA7CisKKyAgICAgICAgLy8gUmVx
dWVzdHMgdGhlIHNpemUuCisgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisKKyAgICAgICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMg
Zm9yIHRoZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGZyYW1lcworICAg
ICAgICAvLyB3aWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIgaWYgdGhleSBu
ZWVkIHRvICh3aXRob3V0IG5lY2Vzc2FyaWx5CisgICAgICAgIC8vIGRlY29kaW5nIGFsbCBvZiB0
aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgorICAgICAgICB2aXJ0dWFsIGludCBmcmFtZUNvdW50KCkg
eyByZXR1cm4gMTsgfQorCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8g
cGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCisgICAgICAgIHZpcnR1YWwgaW50IHJlcGV0
aXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGNBbmltYXRpb25Ob25lOyB9CisKKyAgICAgICAg
Ly8gQ2FsbGVkIHRvIG9idGFpbiB0aGUgUkdCQTMyQnVmZmVyIGZ1bGwgb2YgZGVjb2RlZCBkYXRh
IGZvciByZW5kZXJpbmcuICBUaGUKKyAgICAgICAgLy8gZGVjb2RlciBwbHVnaW4gd2lsbCBkZWNv
ZGUgYXMgbXVjaCBvZiB0aGUgZnJhbWUgYXMgaXQgY2FuIGJlZm9yZSBoYW5kaW5nCisgICAgICAg
IC8vIGJhY2sgdGhlIGJ1ZmZlci4KKyAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpID0gMDsKKworICAgICAgICAvLyBXaGV0aGVyIG9y
IG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBzdXBwb3J0cyBhbHBoYSB0cmFu
c3BhcmVuY3kuCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIGJvb2wgZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9m
YWlsZWQ7IH0KKyAgICAgICAgdm9pZCBzZXRGYWlsZWQoKSB7IG1fZmFpbGVkID0gdHJ1ZTsgfQor
CisgICAgICAgIC8vIFdpcGUgb3V0IGZyYW1lcyBpbiB0aGUgZnJhbWUgYnVmZmVyIGNhY2hlIGJl
Zm9yZSB8Y2xlYXJCZWZvcmVGcmFtZXwsCisgICAgICAgIC8vIGFzc3VtaW5nIHRoaXMgY2FuIGJl
IGRvbmUgd2l0aG91dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZlcmVudCBkZWNvZGVycworICAg
ICAgICAvLyBwbGFjZSBkaWZmZXJlbnQgcmVzdHJpY3Rpb25zIG9uIHdoYXQgZnJhbWVzIGFyZSBz
YWZlIHRvIGRlc3Ryb3ksIHNvIHRoaXMKKyAgICAgICAgLy8gaXMgbGVmdCB0byB0aGVtIHRvIGlt
cGxlbWVudC4KKyAgICAgICAgLy8gRm9yIGNvbnZlbmllbmNlJ3Mgc2FrZSwgd2UgcHJvdmlkZSBh
IGRlZmF1bHQgKGVtcHR5KSBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgLy8gc2luY2UgaW4gcHJh
Y3RpY2Ugb25seSBHSUZzIHdpbGwgZXZlciB1c2UgdGhpcy4KKyAgICAgICAgdmlydHVhbCB2b2lk
IGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkgeyB9CisKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhl
IGVuY29kZWQgZGF0YS4KKyAgICAgICAgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZl
ckNhY2hlOworICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZTsKKyAgICAgICAgbXV0YWJsZSBi
b29sIG1fZmFpbGVkOworICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB9OwogCiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDA0OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOSAr
MzAsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBCTVBJbWFnZVJlYWRlcjsK
KyAgICBjbGFzcyBCTVBJbWFnZVJlYWRlcjsKIAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBC
TVAgaW1hZ2UgZm9ybWF0LgotY2xhc3MgQk1QSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVj
b2RlcgotewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QgeyByZXR1cm4gImJtcCI7IH0KKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEJN
UCBpbWFnZSBmb3JtYXQuCisgICAgY2xhc3MgQk1QSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdl
RGVjb2RlcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVu
YW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImJtcCI7IH0KIAotICAgIC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgIHZp
cnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAgICAgLy8gV2hldGhlciBv
ciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUkdC
QTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLX07CisgICAgICAg
IHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsK
KyAgICB9OwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDA0OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2MiArMzAsNjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBHSUZJbWFnZURlY29kZXJQcml2YXRlOworICAgIGNsYXNzIEdJRkltYWdlRGVjb2RlclByaXZh
dGU7CiAKLS8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgR0lGIGltYWdlIGZvcm1hdC4KLWNsYXNz
IEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIKLXsKLXB1YmxpYzoKLSAgICBH
SUZJbWFnZURlY29kZXIoKTsKLSAgICB+R0lGSW1hZ2VEZWNvZGVyKCk7CisgICAgLy8gVGhpcyBj
bGFzcyBkZWNvZGVzIHRoZSBHSUYgaW1hZ2UgZm9ybWF0LgorICAgIGNsYXNzIEdJRkltYWdlRGVj
b2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBH
SUZJbWFnZURlY29kZXIoKTsKKyAgICAgICAgfkdJRkltYWdlRGVjb2RlcigpOwogCi0gICAgdmly
dHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiZ2lmIjsgfQor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJu
ICJnaWYiOyB9CiAKLSAgICAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVk
KTsKKyAgICAgICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCisgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OwogCi0gICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4g
ZGVjb2RlZCB5ZXQuCi0gICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Owor
ICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBk
ZWNvZGVkIHlldC4KKyAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0
OwogCi0gICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdp
bGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlcgotICAgIC8vICh3aXRob3V0IG5l
Y2Vzc2FyaWx5IGRlY29kaW5nIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgotICAgIHZp
cnR1YWwgaW50IGZyYW1lQ291bnQoKTsKKyAgICAgICAgLy8gVGhlIHRvdGFsIG51bWJlciBvZiBm
cmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFu
c3dlcgorICAgICAgICAvLyAod2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBhbGwgb2YgdGhl
IGluZGl2aWR1YWwgZnJhbWVzKS4KKyAgICAgICAgdmlydHVhbCBpbnQgZnJhbWVDb3VudCgpOwog
Ci0gICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmlt
YXRpb24gbG9vcC4KLSAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKKyAg
ICAgICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmlt
YXRpb24gbG9vcC4KKyAgICAgICAgdmlydHVhbCBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBp
bmRleCk7CisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKTsKIAotICAgIHZpcnR1YWwgdW5z
aWduZWQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSB7IHJldHVybiAwOyB9Cisg
ICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KSB7IHJldHVybiAwOyB9CiAKLSAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5LCBHSUZT
aXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OworICAgICAgICBlbnVtIEdJRlF1ZXJ5IHsg
R0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwogCi0gICAg
dm9pZCBkZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKSBjb25zdDsK
KyAgICAgICAgdm9pZCBkZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1l
KSBjb25zdDsKIAotICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgotICAgIHZv
aWQgc2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLSAg
ICB2b2lkIGRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCk7Ci0gICAgdm9pZCBoYXZl
RGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIs
IHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpOwotICAgIHZvaWQgZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2QpOwotICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsKKyAgICAgICAgLy8gQ2FsbGJh
Y2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCisgICAgICAgIHZvaWQgc2l6ZU5vd0F2YWlsYWJsZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKyAgICAgICAgdm9pZCBkZWNvZGluZ0hh
bHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpOworICAgICAgICB2b2lkIGhhdmVEZWNvZGVkUm93KHVu
c2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hh
ciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwor
ICAgICAgICB2b2lkIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQg
ZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKTsKKyAgICAgICAgdm9pZCBnaWZDb21wbGV0ZSgpOwogCi1wcml2YXRlOgotICAgIC8v
IENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBmcmFtZSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4gaW5k
ZXgsIGJhc2VkIG9uIHRoZQotICAgIC8vIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0aG9k
LgotICAgIHZvaWQgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpOworICAgIHBy
aXZhdGU6CisgICAgICAgIC8vIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBmcmFtZSBidWZmZXIg
d2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJhc2VkIG9uIHRoZQorICAgICAgICAvLyBwcmV2aW91cyBm
cmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4KKyAgICAgICAgdm9pZCBpbml0RnJhbWVCdWZmZXIodW5z
aWduZWQgZnJhbWVJbmRleCk7CiAKLSAgICAvLyBBIGhlbHBlciBmb3IgaW5pdEZyYW1lQnVmZmVy
KCksIHRoaXMgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCBhbmQKLSAgICAvLyBmaWxscyBp
dCB3aXRoIHRyYW5zcGFyZW50IHBpeGVscy4KLSAgICB2b2lkIHByZXBFbXB0eUZyYW1lQnVmZmVy
KFJHQkEzMkJ1ZmZlciogYnVmZmVyKSBjb25zdDsKKyAgICAgICAgLy8gQSBoZWxwZXIgZm9yIGlu
aXRGcmFtZUJ1ZmZlcigpLCB0aGlzIHNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYW5kCisg
ICAgICAgIC8vIGZpbGxzIGl0IHdpdGggdHJhbnNwYXJlbnQgcGl4ZWxzLgorICAgICAgICB2b2lk
IHByZXBFbXB0eUZyYW1lQnVmZmVyKFJHQkEzMkJ1ZmZlciogYnVmZmVyKSBjb25zdDsKIAotICAg
IGJvb2wgbV9mcmFtZUNvdW50VmFsaWQ7Ci0gICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBo
YTsKLSAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKLSAgICBtdXRhYmxlIEdJRklt
YWdlRGVjb2RlclByaXZhdGUqIG1fcmVhZGVyOwotfTsKKyAgICAgICAgYm9vbCBtX2ZyYW1lQ291
bnRWYWxpZDsKKyAgICAgICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKKyAgICAgICAg
bXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CisgICAgICAgIG11dGFibGUgR0lGSW1hZ2VE
ZWNvZGVyUHJpdmF0ZSogbV9yZWFkZXI7CisgICAgfTsKIAogfQogCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gNDQwNDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTkgKzMwLDE5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSUNPSW1hZ2VSZWFkZXI7CisgICAgY2xhc3MgSUNP
SW1hZ2VSZWFkZXI7CiAKLS8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgSUNPIGFuZCBDVVIgaW1h
Z2UgZm9ybWF0cy4KLWNsYXNzIElDT0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIK
LXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
IHsgcmV0dXJuICJpY28iOyB9CisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBJQ08gYW5k
IENVUiBpbWFnZSBmb3JtYXRzLgorICAgIGNsYXNzIElDT0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJ
bWFnZURlY29kZXIKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJpY28iOyB9CiAKLSAgICAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgICAgIC8vIFdoZXRo
ZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgorICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci19OworICAg
ICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCk7CisgICAgfTsKIAogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0MDQ5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNDQgKzMwLDQ0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSlBFR0ltYWdlUmVhZGVyOworICAgIGNsYXNzIEpQRUdJbWFnZVJlYWRlcjsK
IAotLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBKUEVHIGltYWdlIGZvcm1hdC4KLWNsYXNzIEpQ
RUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyCi17Ci1wdWJsaWM6Ci0gICAgSlBF
R0ltYWdlRGVjb2RlcigpOwotICAgIH5KUEVHSW1hZ2VEZWNvZGVyKCk7CisgICAgLy8gVGhpcyBj
bGFzcyBkZWNvZGVzIHRoZSBKUEVHIGltYWdlIGZvcm1hdC4KKyAgICBjbGFzcyBKUEVHSW1hZ2VE
ZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEpQRUdJbWFnZURlY29kZXIoKTsKKyAgICAgICAgfkpQRUdJbWFnZURlY29kZXIoKTsKIAotICAg
IHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImpwZyI7
IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJl
dHVybiAianBnIjsgfQogCi0gICAgLy8gVGFrZSB0aGUgZGF0YSBhbmQgc3RvcmUgaXQuCi0gICAg
dmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNl
aXZlZCk7CisgICAgICAgIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgorICAgICAgICB2
aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKTsKIAotICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBi
ZWVuIGRlY29kZWQgeWV0LgotICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25z
dDsKKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJl
ZW4gZGVjb2RlZCB5ZXQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90IGluZGV4KTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZvaWQgZGVj
b2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7CisgICAgICAgIHZvaWQgZGVjb2RlKGJv
b2wgc2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICBKUEVHSW1hZ2VSZWFkZXIqIHJlYWRl
cigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9CisgICAgICAgIEpQRUdJbWFnZVJlYWRlciogcmVhZGVy
KCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KIAotICAgIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpIHsKLSAgICAgICAgaWYgKCFtX3NpemVBdmFpbGFibGUpIHsKLSAgICAgICAgICAg
IG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSB7CisgICAgICAgICAgICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSkgeworICAgICAgICAgICAgICAg
IG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9zaXplID0gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAg
IGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7Ci0gICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKKyAgICAg
ICAgYm9vbCBvdXRwdXRTY2FubGluZXMoKTsKKyAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsK
IAotcHJpdmF0ZToKLSAgICBtdXRhYmxlIEpQRUdJbWFnZVJlYWRlciogbV9yZWFkZXI7Ci19Owor
ICAgIHByaXZhdGU6CisgICAgICAgIG11dGFibGUgSlBFR0ltYWdlUmVhZGVyKiBtX3JlYWRlcjsK
KyAgICB9OwogCiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDA0OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwzOCArMzAsMzggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBQTkdJbWFnZVJlYWRlcjsKKyAgICBjbGFzcyBQTkdJbWFnZVJlYWRlcjsKIAotLy8gVGhpcyBj
bGFzcyBkZWNvZGVzIHRoZSBQTkcgaW1hZ2UgZm9ybWF0LgotY2xhc3MgUE5HSW1hZ2VEZWNvZGVy
IDogcHVibGljIEltYWdlRGVjb2RlcgotewotcHVibGljOgotICAgIFBOR0ltYWdlRGVjb2Rlcigp
OwotICAgIH5QTkdJbWFnZURlY29kZXIoKTsKKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhl
IFBORyBpbWFnZSBmb3JtYXQuCisgICAgY2xhc3MgUE5HSW1hZ2VEZWNvZGVyIDogcHVibGljIElt
YWdlRGVjb2RlcgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBOR0ltYWdlRGVjb2Rlcigp
OworICAgICAgICB+UE5HSW1hZ2VEZWNvZGVyKCk7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxl
bmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJwbmciOyB9CisgICAgICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gInBuZyI7IH0KIAotICAg
IC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgotICAgIHZpcnR1YWwgdm9pZCBzZXREYXRh
KFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBU
YWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKLSAgICAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgICAgIC8vIFdoZXRo
ZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgorICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAgICAg
IHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsK
IAotICAgIHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7CisgICAgICAg
IHZvaWQgZGVjb2RlKGJvb2wgc2l6ZU9ubHkgPSBmYWxzZSkgY29uc3Q7CiAKLSAgICBQTkdJbWFn
ZVJlYWRlciogcmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KKyAgICAgICAgUE5HSW1hZ2VS
ZWFkZXIqIHJlYWRlcigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9CiAKLSAgICAvLyBDYWxsYmFja3Mg
ZnJvbSBsaWJwbmcKLSAgICB2b2lkIGRlY29kaW5nRmFpbGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7
IH0KLSAgICB2b2lkIGhlYWRlckF2YWlsYWJsZSgpOwotICAgIHZvaWQgcm93QXZhaWxhYmxlKHVu
c2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsIGludCBpbnRlcmxhY2VQ
YXNzKTsKLSAgICB2b2lkIHBuZ0NvbXBsZXRlKCk7CisgICAgICAgIC8vIENhbGxiYWNrcyBmcm9t
IGxpYnBuZworICAgICAgICB2b2lkIGRlY29kaW5nRmFpbGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7
IH0KKyAgICAgICAgdm9pZCBoZWFkZXJBdmFpbGFibGUoKTsKKyAgICAgICAgdm9pZCByb3dBdmFp
bGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGlu
dGVybGFjZVBhc3MpOworICAgICAgICB2b2lkIHBuZ0NvbXBsZXRlKCk7CiAKLXByaXZhdGU6Ci0g
ICAgbXV0YWJsZSBQTkdJbWFnZVJlYWRlciogbV9yZWFkZXI7Ci19OworICAgIHByaXZhdGU6Cisg
ICAgICAgIG11dGFibGUgUE5HSW1hZ2VSZWFkZXIqIG1fcmVhZGVyOworICAgIH07CiAKIH0KIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJN
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0MDQ5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE5
ICszMCwxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFhCTUltYWdlUmVhZGVy
OworICAgIGNsYXNzIFhCTUltYWdlUmVhZGVyOwogCi0vLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhl
IFhCTSBpbWFnZSBmb3JtYXQuCi1jbGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdCB7IHJldHVybiAieGJtIjsgfQorICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUg
WEJNIGltYWdlIGZvcm1hdC4KKyAgICBjbGFzcyBYQk1JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1h
Z2VEZWNvZGVyCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAieGJtIjsgfQogCi0gICAgLy8gV2hldGhl
ciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCi0gICAg
dmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgICAgICAvLyBXaGV0aGVy
IG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBS
R0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwotfTsKKyAgICAg
ICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
OworICAgIH07CiAKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30587</attachid>
            <date>2009-05-22 11:55:07 -0700</date>
            <delta_ts>2009-05-26 23:41:52 -0700</delta_ts>
            <desc>part two (Landed r44167)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45186</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMDktMDUtMjIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHR3bwor
ICAgICAgICBNb3N0bHkgY29zbWV0aWMgY2hhbmdlcywgbWFpbmx5IHRvIGdldCBpbWFnZSBkZWNv
ZGVycyBmb3IgQ2Fpcm8gYnVpbGQgdG8KKyAgICAgICAgY29tcGx5IHdpdGggV2ViS2l0IHN0eWxl
IGd1aWRlbGluZXM6CisgICAgICAgICogRml4IGhlYWRlciBndWFyZCBuYW1lcworICAgICAgICAq
IEZpeCBpbml0aWFsaXplciBsaXN0IHdyYXBwaW5nCisgICAgICAgICogRml4IGNsYXNzL2Z1bmN0
aW9uICJ7IiB3cmFwcGluZworICAgICAgICAqIEZpeCB3cmFwcGluZyBvZiBsb25nIGJvb2xlYW4g
ZXhwcmVzc2lvbnMKKyAgICAgICAgKiBGaXggd2hpdGVzcGFjZSBhcm91bmQgb3BlcmF0b3JzCisg
ICAgICAgICogRWxpbWluYXRlIHdoaXRlc3BhY2Ugb24gb3RoZXJ3aXNlLWJsYW5rIGxpbmVzCisg
ICAgICAgICogTm8ge30gb24gc2luZ2xlLWxpbmUgY29uZGl0aW9uYWwgYXJtcworICAgICAgICAq
IFVzZSAwIGluc3RlYWQgb2YgTlVMTAorICAgICAgICAqIERvbid0ICNpbmNsdWRlICJjb25maWcu
aCIgaW4gaGVhZGVycworCisgICAgICAgIEFsc28gYSBmZXcgbm9uLWNvc21ldGljIGNoYW5nZXM6
CisgICAgICAgICogUmVtb3ZlIHVubmVlZGVkICNpZmRlZiBwcm90ZWN0aW5nIHRoZSBjb250ZW50
cyBvZiB0aGVzZSBmaWxlcy4gIFRoZQorICAgICAgICAgIHBsYXRmb3JtcyBsaXN0ZWQgZG9uJ3Qg
bWF0Y2ggd2hvIHVzZXMgdGhlc2UgZmlsZXMgYW55bW9yZSAoZXZlbgorICAgICAgICAgIHdpdGhv
dXQgY29uc2lkZXJpbmcgU2tpYSksIGFuZCBwbGF0Zm9ybXMgd2hpY2ggZG9uJ3QgdXNlIHRoZW0g
YXQgYWxsCisgICAgICAgICAgKGxpa2UgQ0cpIGFyZW4ndCBoYXJtZWQgYnkgdGhlIGZpbGVzLCBz
aW5jZSB0aGV5IGRvbid0IGhhdmUKKyAgICAgICAgICBlcXVpdmFsZW50bHktbmFtZWQgY2xhc3Nl
cy4gIEl0J3Mgc2ltcGxlciB0byBqdXN0IGRpdGNoIHRoZXNlLgorICAgICAgICAqIENvbnZlcnQg
YSB1c2Ugb2YgVmVjdG9yPD4mIGludG8gU2hhcmVkQnVmZmVyKiwgc2luY2UgdGhhdCdzIGhvdyB0
aGUKKyAgICAgICAgICBkYXRhIGlzIHJlYWxseSBzdG9yZWQgYW55d2F5LgorICAgICAgICAqIFVz
ZSBzaXplKCkgaW5zdGVhZCBvZiBtX3NpemUsIGZvciBjb25zaXN0ZW5jeSB3aXRoIFNraWEgY29k
ZSwgYW5kCisgICAgICAgICAgZnV0dXJlLXByb29maW5nIChpZiBhIHBhcnRpY3VsYXIgZGVjb2Rl
ciB3YW50cyB0byBzcGVjaWFsaXplIHRoaXMpLgorICAgICAgICAqIE1vdmUgYW4gQVNTRVJUIHRo
YXQgd2FzIHNsaWdodGx5IG1vcmUgYWdncmVzc2l2ZSB0aGFuIG5lY2Vzc2FyeS4KKyAgICAgICAg
KiBDaGFuZ2UgdmFyaWFibGUgbmFtZXMvdHlwZXMgZm9yIGNsYXJpdHkvYWNjdXJhY3kgYW5kIHRv
IG1hdGNoIFNraWEuCisgICAgICAgICogUmVtb3ZlIHVubmVjZXNzYXJ5IG1hY3JvIG1hZ2ljIHRv
IHdvcmsgYXJvdW5kIGEgcHJvYmxlbSB3aGljaCBubworICAgICAgICAgIGxvbmdlciBleGlzdHMg
aW4gdGhlIHRoaXJkLXBhcnR5IEpQRUcgaGVhZGVycy4KKyAgICAgICAgKiBTdG9wIHNpbGVuY2lu
ZyBhIHBvcnRhYmlsaXR5IHdhcm5pbmcgYWJvdXQgc2V0am1wICh0aGUgdmNwcm9qL3ZzcHJvcHMK
KyAgICAgICAgICBhcmUgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzKQorICAgICAgICAqIEluIFNr
aWEgY29kZSwgZG9uJ3QgZXhwbGljaXRseSBjaGVjayB8bV9mYWlsZWR8IGJlZm9yZSBjYWxsaW5n
CisgICAgICAgICAgaXNTaXplQXZhaWxhYmxlKCksIHdoaWNoIGl0c2VsZiBjaGVja3MgfG1fZmFp
bGVkfC4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
OiBGaXggaGVhZGVyIGd1YXJkcywgInsiIHdyYXBwaW5nLgorICAgICAgICAoV2ViQ29yZTo6UkdC
QTMyQnVmZmVyOjopOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZm
ZXIpOiBGaXggaW5pdGlhbGl6ZXIgbGlzdCB3cmFwcGluZy4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6SW1hZ2VEZWNvZGVyKTogRml4IGluaXRpYWxpemVyIGxpc3Qgd3JhcHBpbmcu
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5j
cHA6IFJlbW92ZSB1bm5lZWRlZCAjaWZkZWYuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOiBGaXggaGVhZGVyIGd1YXJkcywgInsiIHdyYXBw
aW5nLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwOiBSZW1vdmUgdW5uZWVkZWQgI2lmZGVmLCBmaXggInsiIHdyYXBwaW5nLgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZTo6R0lGSW1hZ2VEZWNvZGVyUHJpdmF0
ZSk6IFVzZSBhbiBpbml0aWFsaXplciBpbnN0ZWFkIG9mIGEgYmxvY2stbGV2ZWwgc3RhdGVtZW50
LgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZTo6ZGVjb2RlKTogRXhw
ZWN0IGEgU2hhcmVkQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyUHJp
dmF0ZTo6Z2V0Q29sb3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpH
SUZJbWFnZURlY29kZXIpOiBGaXggaW5pdGlhbGl6ZXIgbGlzdCB3cmFwcGluZy4KKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6IEFkZCBjb21tZW50LgorICAg
ICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOiBFeHBs
aWNpdGx5IGNhc3QsIGZpeCB3aGl0ZXNwYWNlIGFyb3VuZCBvcGVyYXRvcnMuCisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlY29kZSk6IFBhc3MgYSBTaGFyZWRCdWZmZXIuCisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6IFVzZSBz
aXplKCkgaW5zdGVhZCBvZiBtX3NpemUsIG1vdmUgQVNTRVJULCBmaXggYm9vbGVhbiB3cmFwcGlu
ZywgZml4IGluZGVudGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6cHJl
cEVtcHR5RnJhbWVCdWZmZXIpOiBVc2Ugc2l6ZSgpIGluc3RlYWQgb2YgbV9zaXplLgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6IFVzZSBzaXplKCkg
aW5zdGVhZCBvZiBtX3NpemUsIGVsaW1pbmF0ZSB1bm5lZWRlZCB3aGl0ZXNwYWNlLCBjaGFuZ2Ug
dmFyaWFibGUgbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSk6IFVzZSBzaXplKCkgaW5zdGVhZCBvZiBtX3NpemUsIG5vIHt9IG9uIHNpbmdsZS1s
aW5lIGNvbmRpdGlvbmFsIGFybXMsIGZpeCBib29sZWFuIHdyYXBwaW5nLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDogRml4IGhlYWRlciBn
dWFyZHMsICJ7IiB3cmFwcGluZy4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuY3BwOiBSZW1vdmUgdW5uZWVkZWQgI2lmZGVmLgorICAgICAgICAo
R0lGSW1hZ2VSZWFkZXI6OnJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZVJlYWRlci5oOiBGaXggaGVhZGVyIGd1YXJkcywgY2hhbmdlIHZhcmlhYmxl
IHR5cGUuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVj
b2Rlci5jcHA6IFJlbW92ZSB1bm5lZWRlZCAjaWZkZWYuCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oOiBGaXggaGVhZGVyIGd1YXJkcywgInsi
IHdyYXBwaW5nLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHA6IFJlbW92ZSB1bm5lZWRlZCAjaWZkZWYsIG1hY3JvIG1hZ2ljLCBzaWxl
bmNpbmcgb2Ygd2FybmluZy4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcyk6IFVzZSBzaXplKCkgaW5zdGVhZCBvZiBtX3NpemUsIGNoYW5nZSB2YXJp
YWJsZSBuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5oOiBGaXggaGVhZGVyIGd1YXJkcywgInsiIHdyYXBwaW5nLgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOiBSZW1vdmUg
dW5uZWVkZWQgI2lmZGVmLCBzaWxlbmNpbmcgb2Ygd2FybmluZywgY2hhbmdlIHZhcmlhYmxlIHR5
cGUuCisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZVJlYWRlcjo6UE5HSW1hZ2VSZWFkZXIpOiBG
aXggaW5pdGlhbGl6ZXIgbGlzdCB3cmFwcGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
UmVhZGVyOjpjbG9zZSk6IEFkZCBjb21tZW50LCB6ZXJvIGFub3RoZXIgbWVtYmVyIGZvciBjb25z
aXN0ZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNv
ZGVyKTogRml4IGluZGVudGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6
ZGVjb2RpbmdGYWlsZWQpOiBEZWZpbmUgaW4gLmNwcCwgbm90IC5oLgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDogRml4IGhlYWRlciBndWFyZHMsICJ7
IiB3cmFwcGluZy4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRklt
YWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSk6IERvbid0IGNoZWNrIG1fZmFpbGVkIHVubmVjZXNzYXJpbHkuCisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6IEZpeCB3aGl0
ZXNwYWNlIGFyb3VuZCBvcGVyYXRvcnMuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9HSUZJbWFnZVJlYWRlci5oOiAidW5zaWduZWQiIGlzIHN1ZmZpY2llbnQgdG8gY29u
dmV5ICJ1bnNpZ25lZCBpbnQiLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvSW1hZ2VEZWNvZGVyLmg6IFJlbW92ZSB1bm5lY2Vzc2FyeSAjaW5jbHVkZXMuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6IEZpeCBpbml0aWFsaXplciBs
aXN0IHdyYXBwaW5nLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBF
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OkpQ
RUdJbWFnZVJlYWRlcik6IFVzZSAwIGluc3RlYWQgb2YgTlVMTC4KKyAgICAgICAgKFdlYkNvcmU6
OkpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6IERvbid0IGNoZWNrIG1fZmFpbGVk
IHVubmVjZXNzYXJpbHkuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9Q
TkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VSZWFkZXI6OlBO
R0ltYWdlUmVhZGVyKTogRml4IGluaXRpYWxpemVyIGxpc3Qgd3JhcHBpbmcuCisgICAgICAgIChX
ZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2Rlcik6IEZpeCBpbmRlbnRpbmcu
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSk6IERv
bid0IGNoZWNrIG1fZmFpbGVkIHVubmVjZXNzYXJpbHkuCisgICAgICAgIChXZWJDb3JlOjpyb3dB
dmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1h
Z2VEZWNvZGVyLmg6IERvbid0ICNpbmNsdWRlIGNvbmZpZy5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwOiBSZW1vdmUgdW5uZWVkZWQg
I2lmZGVmLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURl
Y29kZXIuaDogRml4IGhlYWRlciBndWFyZHMsICJ7IiB3cmFwcGluZy4KKwogMjAwOS0wNS0yMiAg
UGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIz
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSU1BR0VfREVDT0RFUl9IXwot
I2RlZmluZSBJTUFHRV9ERUNPREVSX0hfCisjaWZuZGVmIEltYWdlRGVjb2Rlcl9oCisjZGVmaW5l
IEltYWdlRGVjb2Rlcl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VT
b3VyY2UuaCIKQEAgLTM4LDIyICszOCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAv
LyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRh
dGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCiAgICAgLy8gZGVj
b2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBhcmUgdGhlbiBpbnN0YW50
aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgotICAgIGNsYXNz
IFJHQkEzMkJ1ZmZlcgotICAgIHsKKyAgICBjbGFzcyBSR0JBMzJCdWZmZXIgewogICAgIHB1Ymxp
YzoKICAgICAgICAgZW51bSBGcmFtZVN0YXR1cyB7IEZyYW1lRW1wdHksIEZyYW1lUGFydGlhbCwg
RnJhbWVDb21wbGV0ZSB9OworCiAgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhvZCB7CiAg
ICAgICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwg
bWFrZSBzdXJlIHlvdSBhdWRpdCBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBzb21lIHVz
ZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCi0gICAgICAg
ICAgICBEaXNwb3NlTm90U3BlY2lmaWVkID0gMCwgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJh
bWVidWZmZXIKLSAgICAgICAgICAgIERpc3Bvc2VLZWVwID0gMSwgICAgICAgICAgICAgICAvLyBM
ZWF2ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgotICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJn
Y29sb3IgPSAyLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50Ci0gICAgICAgICAgICBE
aXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgPSAzLCAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMg
ZnJhbWVidWZmZXIgY29udGVudHMKKyAgICAgICAgICAgIERpc3Bvc2VOb3RTcGVjaWZpZWQsICAg
ICAgIC8vIExlYXZlIGZyYW1lIGluIGZyYW1lYnVmZmVyCisgICAgICAgICAgICBEaXNwb3NlS2Vl
cCwgICAgICAgICAgICAgICAvLyBMZWF2ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgorICAgICAgICAg
ICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJhbnNwYXJl
bnQKKyAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cywgIC8vIENsZWFyIGZyYW1l
IHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCiAgICAgICAgIH07CiAKLSAgICAgICAg
UkdCQTMyQnVmZmVyKCkgOiBtX2hlaWdodCgwKSwgbV9zdGF0dXMoRnJhbWVFbXB0eSksIG1fZHVy
YXRpb24oMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9kaXNwb3NhbE1ldGhvZChEaXNw
b3NlTm90U3BlY2lmaWVkKSwgbV9oYXNBbHBoYShmYWxzZSkKLSAgICAgICAge30gCisgICAgICAg
IFJHQkEzMkJ1ZmZlcigpCisgICAgICAgICAgICA6IG1faGVpZ2h0KDApCisgICAgICAgICAgICAs
IG1fc3RhdHVzKEZyYW1lRW1wdHkpCisgICAgICAgICAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAg
ICAgICAgICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICAgICAg
ICAgLCBtX2hhc0FscGhhKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0gCiAKICAgICAgICAg
dm9pZCBjbGVhcigpIHsKICAgICAgICAgICBtX2J5dGVzLmNsZWFyKCk7CkBAIC0xMTEsMTAgKzEx
NiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gVGhlIEltYWdlRGVjb2RlciBjbGFz
cyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0IGRlY29k
ZXJzCiAgICAgLy8gKGUuZy4sIEdJRiwgSlBHLCBQTkcsIElDTykgdG8gZGVyaXZlIGZyb20uICBB
bGwgZGVjb2RlcnMgZGVjb2RlIGludG8gUkdCQTMyIGZvcm1hdAogICAgIC8vIGFuZCB0aGUgYmFz
ZSBjbGFzcyBtYW5hZ2VzIHRoZSBSR0JBMzIgZnJhbWUgY2FjaGUuCi0gICAgY2xhc3MgSW1hZ2VE
ZWNvZGVyCi0gICAgeworICAgIGNsYXNzIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgotICAg
ICAgICBJbWFnZURlY29kZXIoKSA6bV9zaXplQXZhaWxhYmxlKGZhbHNlKSwgbV9mYWlsZWQoZmFs
c2UpIHt9CisgICAgICAgIEltYWdlRGVjb2RlcigpCisgICAgICAgICAgICA6IG1fc2l6ZUF2YWls
YWJsZShmYWxzZSkKKyAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkge30KIAog
ICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQg
d2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBlLgpAQCAtMTY0LDYgKzE3Myw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgfTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCiAKLSNpZiBQTEFU
Rk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotCiBuYW1lc3BhY2Ug
V2ViQ29yZQogewogCkBAIC00MSw2ICszOSw0IEBAIFJHQkEzMkJ1ZmZlciogQk1QSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmYKICAgICByZXR1cm4gMDsKIH0KIAotfQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBCTVBfREVDT0RFUl9IXwotI2RlZmluZSBCTVBfREVDT0RFUl9I
XworI2lmbmRlZiBCTVBJbWFnZURlY29kZXJfaAorI2RlZmluZSBCTVBJbWFnZURlY29kZXJfaAog
CiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAKQEAgLTMzLDggKzMzLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEJNUEltYWdlUmVhZGVyOwogCiAgICAgLy8gVGhpcyBjbGFz
cyBkZWNvZGVzIHRoZSBCTVAgaW1hZ2UgZm9ybWF0LgotICAgIGNsYXNzIEJNUEltYWdlRGVjb2Rl
ciA6IHB1YmxpYyBJbWFnZURlY29kZXIKLSAgICB7CisgICAgY2xhc3MgQk1QSW1hZ2VEZWNvZGVy
IDogcHVibGljIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJibXAiOyB9CiAKQEAgLTQ0
LDYgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1
ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAgfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNyArMjcsMTQgQEAKICNpbmNsdWRl
ICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgogCi0jaWYg
UExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBHSUZJbWFnZURlY29kZXJQcml2YXRlCi17CitjbGFzcyBH
SUZJbWFnZURlY29kZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBHSUZJbWFnZURlY29kZXJQcml2
YXRlKEdJRkltYWdlRGVjb2RlciogZGVjb2RlciA9IDApCiAgICAgICAgIDogbV9yZWFkZXIoZGVj
b2RlcikKKyAgICAgICAgLCBtX3JlYWRPZmZzZXQoMCkKICAgICB7Ci0gICAgICAgIG1fcmVhZE9m
ZnNldCA9IDA7CiAgICAgfQogCiAgICAgfkdJRkltYWdlRGVjb2RlclByaXZhdGUoKQpAQCAtNDUs
MTEgKzQyLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWFkZXIuY2xvc2UoKTsKICAgICB9CiAK
LSAgICBib29sIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIAorICAgIGJvb2wgZGVj
b2RlKFNoYXJlZEJ1ZmZlciogZGF0YSwgCiAgICAgICAgICAgICAgICAgR0lGSW1hZ2VEZWNvZGVy
OjpHSUZRdWVyeSBxdWVyeSA9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LAogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBoYWx0RnJhbWUgPSAtMSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3JlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKilkYXRhLmRhdGEoKSArIG1f
cmVhZE9mZnNldCwgZGF0YS5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIAorICAgICAgICByZXR1cm4g
bV9yZWFkZXIucmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopZGF0YS0+ZGF0YSgpICsgbV9yZWFk
T2Zmc2V0LCBkYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsdEZyYW1l
KTsKICAgICB9CkBAIC02MSw3ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNUcmFuc3Bh
cmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmZyYW1lX3JlYWRlci0+aXNfdHJhbnNwYXJl
bnQ7IH0KIAotICAgIHZvaWQgZ2V0Q29sb3JNYXAodW5zaWduZWQgY2hhciomIG1hcCwgdW5zaWdu
ZWQmIHNpemUpIGNvbnN0IHsKKyAgICB2b2lkIGdldENvbG9yTWFwKHVuc2lnbmVkIGNoYXIqJiBt
YXAsIHVuc2lnbmVkJiBzaXplKSBjb25zdAorICAgIHsKICAgICAgICAgaWYgKG1fcmVhZGVyLmZy
YW1lX3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgewogICAgICAgICAgICAgbWFw
ID0gbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKICAgICAgICAgICAgIHNp
emUgPSAodW5zaWduZWQpbV9yZWFkZXIuZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXpl
OwpAQCAtODYsOCArODQsMTEgQEAgcHJpdmF0ZToKIH07CiAKIEdJRkltYWdlRGVjb2Rlcjo6R0lG
SW1hZ2VEZWNvZGVyKCkKLTogbV9mcmFtZUNvdW50VmFsaWQodHJ1ZSksIG1fcmVwZXRpdGlvbkNv
dW50KGNBbmltYXRpb25Mb29wT25jZSksIG1fcmVhZGVyKDApCi17fQorICAgIDogbV9mcmFtZUNv
dW50VmFsaWQodHJ1ZSkKKyAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25j
ZSkKKyAgICAsIG1fcmVhZGVyKDApCit7Cit9CiAKIEdJRkltYWdlRGVjb2Rlcjo6fkdJRkltYWdl
RGVjb2RlcigpCiB7CkBAIC0xMzksNyArMTQwLDEwIEBAIGludCBHSUZJbWFnZURlY29kZXI6OmZy
YW1lQ291bnQoKQogICAgICAgICAvLyBzdGF0ZSwgYnV0IGZvciBub3cgd2UganVzdCBjcmF3bCBh
bGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQKICAgICAg
ICAgLy8gSW1hZ2VJTyBkb2VzIG9uIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0
aGUgZGF0YSBhZ2FpbikuCiAgICAgICAgIEdJRkltYWdlRGVjb2RlclByaXZhdGUgcmVhZGVyOwot
ICAgICAgICByZWFkZXIuZGVjb2RlKG1fZGF0YS0+YnVmZmVyKCksIEdJRkZyYW1lQ291bnRRdWVy
eSk7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGZhaWwsIGJ1dCB3ZSB3YW50IHRvIGtl
ZXAgYW55IHBhcnRpYWwgZGF0YSBpdCBtYXkKKyAgICAgICAgLy8gaGF2ZSBkZWNvZGVkLCBzbyBk
b24ndCBtYXJrIGl0IGlzIGludmFsaWQuIElmIHRoZXJlIGlzIGFuIG92ZXJmbG93CisgICAgICAg
IC8vIG9yIHNvbWUgc2VyaW91cyBlcnJvciwgbV9mYWlsZWQgd2lsbCBoYXZlIGdvdHRlbiBzZXQg
Zm9yIHVzLgorICAgICAgICByZWFkZXIuZGVjb2RlKG1fZGF0YS5nZXQoKSwgR0lGRnJhbWVDb3Vu
dFF1ZXJ5KTsKICAgICAgICAgbV9mcmFtZUNvdW50VmFsaWQgPSB0cnVlOwogICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5mcmFtZUNvdW50KCkpOwogICAgIH0KQEAgLTE3
MywxMyArMTc3LDEyIEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGMK
IAogUkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7Ci0gICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKKyAgICBpZiAoaW5k
ZXggPj0gc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUNvdW50KCkpKQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhd
OwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUg
JiYgbV9yZWFkZXIpCi0gICAgICAgIC8vIERlY29kZSB0aGlzIGZyYW1lLgotICAgICAgICBkZWNv
ZGUoR0lGRnVsbFF1ZXJ5LCBpbmRleCsxKTsKKyAgICAgICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSwg
aW5kZXggKyAxKTsgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCiAgICAgcmV0dXJuICZmcmFtZTsKIH0K
IApAQCAtMjM5LDcgKzI0Miw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUoR0lGUXVl
cnkgcXUKICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZmFpbGVk
ID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgcXVlcnksIGhhbHRBdEZyYW1l
KTsKKyAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVjb2RlKG1fZGF0YS5nZXQoKSwgcXVlcnks
IGhhbHRBdEZyYW1lKTsKICAgICAKICAgICBpZiAobV9mYWlsZWQpIHsKICAgICAgICAgZGVsZXRl
IG1fcmVhZGVyOwpAQCAtMjY2LDEwICsyNjksMTAgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6Omlu
aXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAgICAgICAgIG1fcmVhZGVyLT5mcmFtZVdp
ZHRoKCksIG1fcmVhZGVyLT5mcmFtZUhlaWdodCgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUg
ZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIHBhc3QgdGhlIGJvdHRvbS1yaWdodCBvZiB0aGUgYnVm
ZmVyLgotICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IG1fc2l6ZS53aWR0aCgpKQotICAgICAg
ICBmcmFtZVJlY3Quc2V0V2lkdGgobV9zaXplLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zm
c2V0KCkpOwotICAgIGlmIChmcmFtZVJlY3QuYm90dG9tKCkgPiBtX3NpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQobV9zaXplLmhlaWdodCgpIC0gbV9yZWFkZXItPmZy
YW1lWU9mZnNldCgpKTsKKyAgICBpZiAoZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgo
KSkKKyAgICAgICAgZnJhbWVSZWN0LnNldFdpZHRoKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXIt
PmZyYW1lWE9mZnNldCgpKTsKKyAgICBpZiAoZnJhbWVSZWN0LmJvdHRvbSgpID4gc2l6ZSgpLmhl
aWdodCgpKQorICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1f
cmVhZGVyLT5mcmFtZVlPZmZzZXQoKSk7CiAKICAgICBSR0JBMzJCdWZmZXIqIGNvbnN0IGJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgYnVmZmVyLT5zZXRSZWN0
KGZyYW1lUmVjdCk7CkBAIC0yODcsMTQgKzI5MCwxNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6
aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIC8vIGZpcnN0IGZyYW1lIHNwZWNpZmllcyB0aGlz
IG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCiAgICAgICAgIC8vIERpc3Bvc2VPdmVy
d3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2Uu
KQogICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZl
ckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwogICAgICAgICBSR0JBMzJCdWZmZXI6
OkZyYW1lRGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9CiAgICAgICAgICAgICBwcmV2QnVmZmVy
LT5kaXNwb3NhbE1ldGhvZCgpOwotICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKSAmJgot
ICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzKSkgeworICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQorICAgICAg
ICAgICAgICAgJiYgKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMpKSB7CiAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVstLWZyYW1lSW5kZXhdOwogICAgICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRp
c3Bvc2FsTWV0aG9kKCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHByZXZCdWZmZXItPnN0
YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICAgICAgaWYgKChw
cmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwKICAgICAg
ICAgICAgICAgICAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSkgewpA
QCAtMzA1LDggKzMwOCw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIo
dW4KICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRv
IHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGlu
IHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KICAgICAgICAgICAgIGNvbnN0IEludFJl
Y3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+cmVjdCgpOwotICAgICAgICAgICAgaWYgKChmcmFt
ZUluZGV4ID09IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgIHByZXZSZWN0LmNvbnRhaW5zKElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIG1fc2l6ZSkpKSB7CisgICAgICAgICAgICBpZiAoKGZyYW1l
SW5kZXggPT0gMCkKKyAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0
KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5n
IHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAg
ICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2Uu
CiAgICAgICAgICAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVmZmVyKTsKQEAgLTMyMSw3
ICszMjQsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKCooY3VycmVudFJvdyArIHgpLCAwLCAw
LCAwLCAwKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0Lndp
ZHRoKCkgPiAwKSAmJiAocHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKLSAgICAgICAgICAgICAgICBi
dWZmZXItPnNldEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRI
YXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMzNSw3
ICszMzgsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAKIHZv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZmZXIqIGJ1
ZmZlcikgY29uc3QKIHsKLSAgICBidWZmZXItPmJ5dGVzKCkucmVzaXplKG1fc2l6ZS53aWR0aCgp
ICogbV9zaXplLmhlaWdodCgpKTsKKyAgICBidWZmZXItPmJ5dGVzKCkucmVzaXplKHNpemUoKS53
aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKICAgICBidWZmZXItPmJ5dGVzKCkuZmlsbCgwKTsK
ICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwogfQpAQCAtMzUzLDggKzM1Niw4IEBAIHZv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICAgICAgaW5pdEZyYW1l
QnVmZmVyKGZyYW1lSW5kZXgpOwogCiAgICAgLy8gRG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4K
LSAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJh
bWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgIHJldHVy
bjsKKyAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+
ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IHNpemUoKS5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwogICAgIHVuc2lnbmVkIGNoYXIq
IGNvbG9yTWFwOwpAQCAtMzY5LDEyICszNzIsMTIgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6Omhh
dmVEZWNvZGVkUm93KHVucwogICAgIC8vIHdpdGhpbiB0aGUgb3ZlcmFsbCBpbWFnZS4gIFRoZSBy
b3dzIHdlIGFyZSBkZWNvZGluZyBhcmUgd2l0aGluIHRoaXMKICAgICAvLyBzdWItcmVjdGFuZ2xl
LiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBHSUYgZnJhbWUncyBzdWItcmVjdGFuZ2xlIGlzICh4
LHksdyxoKSB0aGVuIHJvdyAwIGlzIHJlYWxseSByb3cKICAgICAvLyB5LCBhbmQgZWFjaCByb3cg
Z29lcyBmcm9tIHggdG8geCt3LgotICAgIHVuc2lnbmVkIGRzdFBvcyA9IChtX3JlYWRlci0+ZnJh
bWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpICogbV9zaXplLndpZHRoKCkgKyBtX3JlYWRlci0+ZnJh
bWVYT2Zmc2V0KCk7CisgICAgdW5zaWduZWQgZHN0UG9zID0gKG1fcmVhZGVyLT5mcmFtZVlPZmZz
ZXQoKSArIHJvd051bWJlcikgKiBzaXplKCkud2lkdGgoKSArIG1fcmVhZGVyLT5mcmFtZVhPZmZz
ZXQoKTsKICAgICB1bnNpZ25lZCogZHN0ID0gYnVmZmVyLmJ5dGVzKCkuZGF0YSgpICsgZHN0UG9z
OwotICAgIHVuc2lnbmVkKiBkc3RFbmQgPSBkc3QgKyBtX3NpemUud2lkdGgoKSAtIG1fcmVhZGVy
LT5mcmFtZVhPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCogZHN0RW5kID0gZHN0ICsgc2l6ZSgpLndp
ZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7CiAgICAgdW5zaWduZWQqIGN1cnJEc3Qg
PSBkc3Q7CiAgICAgdW5zaWduZWQgY2hhciogY3VycmVudFJvd0J5dGUgPSByb3dCdWZmZXI7Ci0g
ICAgCisKICAgICB3aGlsZSAoY3VycmVudFJvd0J5dGUgIT0gcm93RW5kICYmIGN1cnJEc3QgPCBk
c3RFbmQpIHsKICAgICAgICAgaWYgKCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAqY3Vy
cmVudFJvd0J5dGUgIT0gbV9yZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkgJiYgKmN1cnJlbnRS
b3dCeXRlIDwgY29sb3JNYXBTaXplKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckluZGV4
ID0gKmN1cnJlbnRSb3dCeXRlICogMzsKQEAgLTQwMSwxNCArNDA0LDE0IEBAIHZvaWQgR0lGSW1h
Z2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICBpZiAocmVwZWF0Q291bnQgPiAxKSB7
CiAgICAgICAgIC8vIENvcHkgdGhlIHJvdyB8cmVwZWF0Q291bnR8LTEgdGltZXMuCiAgICAgICAg
IHVuc2lnbmVkIG51bSA9IGN1cnJEc3QgLSBkc3Q7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBu
dW0gKiBzaXplb2YodW5zaWduZWQpOwotICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IG1fc2l6ZS53
aWR0aCgpOwotICAgICAgICB1bnNpZ25lZCogZW5kID0gYnVmZmVyLmJ5dGVzKCkuZGF0YSgpICsg
d2lkdGggKiBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgIHVuc2lnbmVkIGRhdGFfc2l6ZSA9IG51
bSAqIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHVuc2lnbmVkIHdpZHRoID0gc2l6ZSgpLndp
ZHRoKCk7CisgICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyB3
aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgY3VyckRzdCA9IGRzdCArIHdpZHRoOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkrKykgewogICAg
ICAgICAgICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQpIC8vIFByb3RlY3QgYWdhaW5zdCBhIGJ1
ZmZlciBvdmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRDb3VudC4KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIHNpemUpOworICAgICAgICAg
ICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgZGF0YV9zaXplKTsKICAgICAgICAgICAgIGN1cnJEc3Qg
Kz0gd2lkdGg7CiAgICAgICAgIH0KICAgICB9CkBAIC00MzQsOSArNDM3LDkgQEAgdm9pZCBHSUZJ
bWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgIGlmICghbV9jdXJyZW50QnVmZmVy
U2F3QWxwaGEpIHsKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1lIHdhcyBub24tdHJhbnNwYXJl
bnQsIHNvIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAgICAgICAgIC8vIHJlc3VsdGlu
ZyBidWZmZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNhbiBzZXRIYXNBbHBoYShmYWxz
ZSkuCi0gICAgICAgIGlmIChidWZmZXIucmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQo
MCwgMCksIG1fc2l6ZSkpKSB7CisgICAgICAgIGlmIChidWZmZXIucmVjdCgpLmNvbnRhaW5zKElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhh
c0FscGhhKGZhbHNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChmcmFtZUluZGV4ID4gMCkgeworICAg
ICAgICBlbHNlIGlmIChmcmFtZUluZGV4ID4gMCkgewogICAgICAgICAgICAgLy8gVHJpY2t5IGNh
c2UuICBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJlCiAg
ICAgICAgICAgICAvLyBvdXRzaWRlIGl0cyByZWN0IGRvZXNuJ3QgaGF2ZSBhbHBoYS4gIFRvIGtu
b3cgd2hldGhlciB0aGlzIGlzCiAgICAgICAgICAgICAvLyB0cnVlLCB3ZSBjaGVjayB0aGUgc3Rh
cnQgc3RhdGUgb2YgdGhlIGZyYW1lIC0tIGlmIGl0IGRvZXNuJ3QgaGF2ZQpAQCAtNDQ2LDkgKzQ0
OSw4IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAgICAgICAg
ICAgIC8vIGRvbid0IGFmZmVjdCB0aGUgc3RhcnQgc3RhdGUgb2YgdGhpcyBmcmFtZSkgdGhlIHNh
bWUgd2F5IHdlIGRvIGluCiAgICAgICAgICAgICAvLyBpbml0RnJhbWVCdWZmZXIoKS4KICAgICAg
ICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgICAgIHdoaWxlICgoZnJhbWVJbmRleCA+IDApICYm
Ci0gICAgICAgICAgICAgICAgICAgIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2
aW91cykpCisgICAgICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQorICAgICAgICAgICAg
ICAgICAgICYmIChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1ZmZlcjo6
RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0g
Jm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogCiAgICAgICAgICAgICAvLyBOb3cs
IGlmIHdlJ3JlIGF0IGEgRGlzcG9zZU5vdFNwZWNpZmllZCBvciBEaXNwb3NlS2VlcCBmcmFtZSwg
dGhlbgpAQCAtNDU5LDEwICs0NjEsOCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21w
bGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgY2FzZSBpcyBhIERp
c3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAgSWYKICAgICAgICAgICAgIC8vIGl0IGhhZCBu
byBhbHBoYSwgYW5kIGl0cyByZWN0IGlzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBmcmFtZSdz
CiAgICAgICAgICAgICAvLyByZWN0LCB3ZSBrbm93IHRoZSBjdXJyZW50IGZyYW1lIGhhcyBubyBh
bHBoYS4KLSAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PQot
ICAgICAgICAgICAgICAgICAgICBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9y
KSAmJgotICAgICAgICAgICAgICAgICAgICAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJgotICAg
ICAgICAgICAgICAgICAgICBidWZmZXIucmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3Qo
KSkpCisgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gUkdC
QTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikKKyAgICAgICAgICAgICAgICAmJiAh
cHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucmVjdCgpLmNvbnRhaW5zKHByZXZCdWZm
ZXItPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTQ3Niw2ICs0NzYsNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rl
cjo6Z2lmQ29tcGxldGUoKQogICAgIG1fcmVhZGVyID0gMDsKIH0KIAotfQotCi0jZW5kaWYgLy8g
UExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAko
cmV2aXNpb24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBHSUZfREVDT0RFUl9IXwotI2RlZmluZSBHSUZfREVD
T0RFUl9IXworI2lmbmRlZiBHSUZJbWFnZURlY29kZXJfaAorI2RlZmluZSBHSUZJbWFnZURlY29k
ZXJfaAogCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAKQEAgLTMzLDggKzMzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdJRkltYWdlRGVjb2RlclByaXZhdGU7CiAKICAg
ICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEdJRiBpbWFnZSBmb3JtYXQuCi0gICAgY2xhc3Mg
R0lGSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlcgotICAgIHsKKyAgICBjbGFzcyBH
SUZJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEdJRkltYWdlRGVjb2RlcigpOwogICAgICAgICB+R0lGSW1hZ2VEZWNvZGVyKCk7CkBAIC02
Miw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBlbnVtIEdJRlF1ZXJ5
IHsgR0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwogCi0g
ICAgICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkg
Y29uc3Q7CisgICAgICAgIHZvaWQgZGVjb2RlKEdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFt
ZSkgY29uc3Q7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCiAg
ICAgICAgIHZvaWQgc2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0KTsKQEAgLTc5LDcgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8v
IEEgaGVscGVyIGZvciBpbml0RnJhbWVCdWZmZXIoKSwgdGhpcyBzZXRzIHRoZSBzaXplIG9mIHRo
ZSBidWZmZXIsIGFuZAogICAgICAgICAvLyBmaWxscyBpdCB3aXRoIHRyYW5zcGFyZW50IHBpeGVs
cy4KLSAgICAgICAgdm9pZCBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZmZXIqIGJ1ZmZl
cikgY29uc3Q7CisgICAgICAgIHZvaWQgcHJlcEVtcHR5RnJhbWVCdWZmZXIoUkdCQTMyQnVmZmVy
KikgY29uc3Q7CiAKICAgICAgICAgYm9vbCBtX2ZyYW1lQ291bnRWYWxpZDsKICAgICAgICAgYm9v
bCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKQEAgLTg3LDYgKzg2LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBtdXRhYmxlIEdJRkltYWdlRGVjb2RlclByaXZhdGUqIG1fcmVhZGVy
OwogICAgIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgs
NiBAQCBtYWlsaW5nIGFkZHJlc3MuCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAiR0lG
SW1hZ2VEZWNvZGVyLmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKFdYKQotCiB1c2luZyBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI7CiAKIC8vIERl
ZmluZSB0aGUgTW96aWxsYSBtYWNybyBzZXR1cCBzbyB0aGF0IHdlIGNhbiBsZWF2ZSB0aGUgbWFj
cm9zIGFsb25lLgpAQCAtOTM5LDUgKzkzNywzIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQo
Y29uc3QgdW5zaWduZWQKICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwogICByZXR1
cm4gdHJ1ZTsKIH0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCShy
ZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICAqCiAgKiAq
KioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLwogCi0jaWZuZGVmIF9HSUZfSF8KLSNkZWZp
bmUgX0dJRl9IXworI2lmbmRlZiBHSUZJbWFnZVJlYWRlcl9oCisjZGVmaW5lIEdJRkltYWdlUmVh
ZGVyX2gKIAogLy8gRGVmaW5lIG91cnNlbHZlcyBhcyB0aGUgY2xpZW50UHRyLiAgTW96aWxsYSBq
dXN0IGhhY2tlZCB0aGVpciBDKysgY2FsbGJhY2sgY2xhc3MgaW50byB0aGlzIG9sZCBDIGRlY29k
ZXIsCiAvLyBzbyB3ZSB3aWxsIHRvby4KQEAgLTE2OCw3ICsxNjgsNyBAQCBzdHJ1Y3QgR0lGSW1h
Z2VSZWFkZXIgewogICAgIHVuc2lnbmVkIHNjcmVlbl93aWR0aDsgICAgICAgLyogTG9naWNhbCBz
Y3JlZW4gd2lkdGggJiBoZWlnaHQgKi8KICAgICB1bnNpZ25lZCBzY3JlZW5faGVpZ2h0OwogICAg
IGludCBnbG9iYWxfY29sb3JtYXBfc2l6ZTsgICAvKiBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBh
cnJheS4gKi8KLSAgICBpbnQgaW1hZ2VzX2RlY29kZWQ7ICAgICAgICAgLyogQ291bnRzIGNvbXBs
ZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMgKi8KKyAgICB1bnNpZ25lZCBpbWFnZXNfZGVj
b2RlZDsgICAgLyogQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMgKi8K
ICAgICBpbnQgaW1hZ2VzX2NvdW50OyAgICAgICAgICAgLyogQ291bnRlZCBhbGwgZnJhbWVzIHNl
ZW4gc28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0ZSBmcmFtZXMpICovCiAgICAgaW50IGxvb3Bf
Y291bnQ7ICAgICAgICAgICAgIC8qIE5ldHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0
byBjb250cm9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIg
b2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuICovCkBAIC0yMTMsNCArMjEzLDMgQEAg
cHJpdmF0ZToKIH07CiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0
MDUxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIklDT0ltYWdlRGVjb2Rlci5oIgogCi0jaWYgUExBVEZPUk0oQ0FJUk8p
IHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKLQogbmFtZXNwYWNlIFdlYkNvcmUKIHsK
IApAQCAtNDEsNiArMzksNCBAQCBSR0JBMzJCdWZmZXIqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVC
dWZmCiAgICAgcmV0dXJuIDA7CiB9CiAKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0MDUxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgSUNPX0RFQ09ERVJfSF8KLSNkZWZpbmUgSUNPX0RFQ09ERVJfSF8KKyNpZm5kZWYg
SUNPSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgSUNPSW1hZ2VEZWNvZGVyX2gKIAogI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgogCkBAIC0zMyw4ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBJQ09JbWFnZVJlYWRlcjsKIAogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0
aGUgSUNPIGFuZCBDVVIgaW1hZ2UgZm9ybWF0cy4KLSAgICBjbGFzcyBJQ09JbWFnZURlY29kZXIg
OiBwdWJsaWMgSW1hZ2VEZWNvZGVyCi0gICAgeworICAgIGNsYXNzIElDT0ltYWdlRGVjb2RlciA6
IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiaWNvIjsgfQogCkBAIC00NCw2
ICs0Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZm
ZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogICAgIH07CiAKLX0KK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZp
c2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMzQgKzM4LDExIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUg
PGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZiBQTEFURk9STShDQUlSTykgfHwg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQotCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJl
bW92ZSB3YXJuaW5ncyBmcm9tIHdhcm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlIDogNDYxMSkgLy8gd2FybmluZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGpt
cCcgYW5kIEMrKyBvYmplY3QgZGVzdHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0KLS8vIGlmIEFE
RFJFU1NfVEFHX0JJVCBpcyBkZmluZWQsIElOVDMyIGhhcyBiZWVuIGRlY2xhcmVkIGFzIGEgdHlw
ZWRlZiBpbiB0aGUgUGxhdGZvcm1TREsgKEJhc2VUc2QuaCksCi0vLyBzbyB3ZSBuZWVkIHRvIHN0
b3AganBlZ2xpYi5oIGZyb20gdHJ5aW5nIHRvICNkZWZpbmUgaXQgCi0vLyBzZWUgaGVyZSBmb3Ig
bW9yZSBpbmZvOiBodHRwOi8vd3d3LmN5Z3dpbi5jb20vbWwvY3lnd2luLzIwMDQtMDcvbXNnMDEw
NTEuaHRtbAotIyBpZiBkZWZpbmVkKEFERFJFU1NfVEFHX0JJVCkgJiYgIWRlZmluZWQoWE1EX0gp
Ci0jICBkZWZpbmUgWE1EX0gKLSMgIGRlZmluZSBWVEtfSlBFR19YTURfSAotIyBlbmRpZgotI2Vu
ZGlmIC8vIENPTVBJTEVSKE1TVkMpCiAKIGV4dGVybiAiQyIgewogI2luY2x1ZGUgImpwZWdsaWIu
aCIKIH0KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0jIGlmIGRlZmluZWQoVlRLX0pQRUdfWE1EX0gp
Ci0jICB1bmRlZiBWVEtfSlBFR19YTURfSAotIyAgdW5kZWYgWE1EX0gKLSMgZW5kaWYKLSNlbmRp
ZiAvLyBDT01QSUxFUihNU1ZDKQotCiAjaW5jbHVkZSA8c2V0am1wLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ4Miw3ICs0NTksNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcygpCiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZy
YW1lRW1wdHkpIHsKICAgICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRo
ZSBjb3JyZWN0IHdpZHRoL2hlaWdodC4KICAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzID0gYnVm
ZmVyLmJ5dGVzKCk7Ci0gICAgICAgIGJ5dGVzLnJlc2l6ZShtX3NpemUud2lkdGgoKSAqIG1fc2l6
ZS5oZWlnaHQoKSk7CisgICAgICAgIGJ5dGVzLnJlc2l6ZShzaXplKCkud2lkdGgoKSAqIHNpemUo
KS5oZWlnaHQoKSk7CiAKICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlh
bGx5IGNvbXBsZXRlLgogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJh
bWVQYXJ0aWFsKTsKQEAgLTUwMyw3ICs0ODAsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcygpCiAgICAgICAgIGlmIChqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sIHNh
bXBsZXMsIDEpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEpTQU1Q
TEUgKmoxID0gc2FtcGxlc1swXTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlu
Zm8tPm91dHB1dF93aWR0aDsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHgg
PCBpbmZvLT5vdXRwdXRfd2lkdGg7ICsreCkgewogICAgICAgICAgICAgdW5zaWduZWQgciA9ICpq
MSsrOwogICAgICAgICAgICAgdW5zaWduZWQgZyA9ICpqMSsrOwogICAgICAgICAgICAgdW5zaWdu
ZWQgYiA9ICpqMSsrOwpAQCAtNTI3LDUgKzUwNCwzIEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6
anBlZ0NvbXBsZXRlKCkKIH0KIAogfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0MDUxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
OCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBKUEVHX0RFQ09ERVJf
SF8KLSNkZWZpbmUgSlBFR19ERUNPREVSX0hfCisjaWZuZGVmIEpQRUdJbWFnZURlY29kZXJfaAor
I2RlZmluZSBKUEVHSW1hZ2VEZWNvZGVyX2gKIAogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgog
CkBAIC0zMyw4ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBKUEVHSW1h
Z2VSZWFkZXI7CiAKICAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEpQRUcgaW1hZ2UgZm9y
bWF0LgotICAgIGNsYXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyCi0g
ICAgeworICAgIGNsYXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIEpQRUdJbWFnZURlY29kZXIoKTsKICAgICAgICAgfkpQRUdJ
bWFnZURlY29kZXIoKTsKQEAgLTY5LDYgKzY4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBtdXRhYmxlIEpQRUdJbWFnZVJlYWRlciogbV9yZWFkZXI7CiAgICAgfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsNiBAQAogI2luY2x1ZGUg
InBuZy5oIgogI2luY2x1ZGUgImFzc2VydC5oIgogCi0jaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBM
QVRGT1JNKFFUKSB8fCBQTEFURk9STShXWCkKLQotI2lmIENPTVBJTEVSKE1TVkMpCi0vLyBSZW1v
dmUgd2FybmluZ3MgZnJvbSB3YXJuaW5nIGxldmVsIDQuCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZSA6IDQ2MTEpIC8vIHdhcm5pbmcgQzQ2MTE6IGludGVyYWN0aW9uIGJldHdlZW4gJ19zZXRqbXAn
IGFuZCBDKysgb2JqZWN0IGRlc3RydWN0aW9uIGlzIG5vbi1wb3J0YWJsZQotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gR2FtbWEgY29uc3RhbnRzLgpAQCAtNTUsNyArNDgsNyBA
QCBjb25zdCBkb3VibGUgY0RlZmF1bHRHYW1tYSA9IDIuMjsKIGNvbnN0IGRvdWJsZSBjSW52ZXJz
ZUdhbW1hID0gMC40NTQ1NTsKIAogLy8gUHJvdGVjdCBhZ2FpbnN0IGxhcmdlIFBOR3MuIFNlZSBN
b3ppbGxhJ3MgYnVnICMyNTEzODEgZm9yIG1vcmUgaW5mby4KLWNvbnN0IGxvbmcgY01heFBOR1Np
emUgPSAxMDAwMDAwTDsKK2NvbnN0IHVuc2lnbmVkIGxvbmcgY01heFBOR1NpemUgPSAxMDAwMDAw
VUw7CiAKIC8vIENhbGxlZCBpZiB0aGUgZGVjb2Rpbmcgb2YgdGhlIGltYWdlIGZhaWxzLgogc3Rh
dGljIHZvaWQgUE5HQVBJIGRlY29kaW5nRmFpbGVkKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19j
b25zdF9jaGFycCBlcnJvcl9tc2cpOwpAQCAtNzgsOSArNzEsMTIgQEAgY2xhc3MgUE5HSW1hZ2VS
ZWFkZXIKIHsKIHB1YmxpYzoKICAgICBQTkdJbWFnZVJlYWRlcihQTkdJbWFnZURlY29kZXIqIGRl
Y29kZXIpCi0gICAgOiBtX3JlYWRPZmZzZXQoMCksIG1fZGVjb2RpbmdTaXplT25seShmYWxzZSks
IG1faW50ZXJsYWNlQnVmZmVyKDApLCBtX2hhc0FscGhhKDApCisgICAgICAgIDogbV9yZWFkT2Zm
c2V0KDApCisgICAgICAgICwgbV9kZWNvZGluZ1NpemVPbmx5KGZhbHNlKQorICAgICAgICAsIG1f
aW50ZXJsYWNlQnVmZmVyKDApCisgICAgICAgICwgbV9oYXNBbHBoYSgwKQogICAgIHsKLSAgICAg
ICAgbV9wbmcgPSBwbmdfY3JlYXRlX3JlYWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywg
TlVMTCwgZGVjb2RpbmdGYWlsZWQsIGRlY29kaW5nV2FybmluZyk7CisgICAgICAgIG1fcG5nID0g
cG5nX2NyZWF0ZV9yZWFkX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIDAsIGRlY29kaW5n
RmFpbGVkLCBkZWNvZGluZ1dhcm5pbmcpOwogICAgICAgICBtX2luZm8gPSBwbmdfY3JlYXRlX2lu
Zm9fc3RydWN0KG1fcG5nKTsKICAgICAgICAgcG5nX3NldF9wcm9ncmVzc2l2ZV9yZWFkX2ZuKG1f
cG5nLCBkZWNvZGVyLCBoZWFkZXJBdmFpbGFibGUsIHJvd0F2YWlsYWJsZSwgcG5nQ29tcGxldGUp
OwogICAgIH0KQEAgLTkyLDggKzg4LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbG9zZSgpIHsK
ICAgICAgICAgaWYgKG1fcG5nICYmIG1faW5mbykKLSAgICAgICAgICAgIHBuZ19kZXN0cm95X3Jl
YWRfc3RydWN0KCZtX3BuZywgJm1faW5mbywgMCk7CisgICAgICAgICAgICBwbmdfZGVzdHJveV9y
ZWFkX3N0cnVjdCgmbV9wbmcsICZtX2luZm8sIDApOyAgLy8gV2lsbCB6ZXJvIHRoZSBwb2ludGVy
cy4KICAgICAgICAgZGVsZXRlIFtdbV9pbnRlcmxhY2VCdWZmZXI7CisgICAgICAgIG1faW50ZXJs
YWNlQnVmZmVyID0gMDsKICAgICAgICAgbV9yZWFkT2Zmc2V0ID0gMDsKICAgICB9CiAKQEAgLTEz
OSw3ICsxMzYsNyBAQCBwcml2YXRlOgogfTsKIAogUE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURl
Y29kZXIoKQotOiBtX3JlYWRlcigwKQorICAgIDogbV9yZWFkZXIoMCkKIHsKICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGUucmVzaXplKDEpOwogfQpAQCAtMjI0LDYgKzIyMSwxMCBAQCB2b2lkIGhlYWRl
ckF2YWlsYWJsZShwbmdfc3RydWN0cCBwbmcsIHBuCiAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VE
ZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSktPmhlYWRlckF2YWlsYWJsZSgp
OwogfQogCit2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdGYWlsZWQoKSB7CisgICAgbV9m
YWlsZWQgPSB0cnVlOworfQorCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxl
KCkKIHsKICAgICBwbmdfc3RydWN0cCBwbmcgPSByZWFkZXIoKS0+cG5nUHRyKCk7CkBAIC0zMTIs
MTYgKzMxMywxNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAg
ICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKICAg
ICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRo
L2hlaWdodC4KICAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzID0gYnVmZmVyLmJ5dGVzKCk7Ci0g
ICAgICAgIGJ5dGVzLnJlc2l6ZShtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIGJ5dGVzLnJlc2l6ZShzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CiAK
ICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgog
ICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKIAog
ICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGlt
YWdlLgotICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgYnVmZmVyLnNldFJlY3QoSW50UmVjdCgwLCAw
LCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CiAKICAgICAgICAgaWYgKHJlYWRl
cigpLT5wbmdQdHIoKS0+aW50ZXJsYWNlZCkKLSAgICAgICAgICAgIHJlYWRlcigpLT5jcmVhdGVJ
bnRlcmxhY2VCdWZmZXIoKHJlYWRlcigpLT5oYXNBbHBoYSgpID8gNCA6IDMpICogbV9zaXplLndp
ZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgcmVhZGVyKCktPmNyZWF0ZUlu
dGVybGFjZUJ1ZmZlcigocmVhZGVyKCktPmhhc0FscGhhKCkgPyA0IDogMykgKiBzaXplKCkud2lk
dGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgaWYgKHJvd0J1ZmZlciA9PSAw
KQpAQCAtMzYxLDE3ICszNjIsMTcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZwogICAgIHBuZ19ieXRlcCByb3c7CiAgICAgcG5nX2J5dGVwIGludGVybGFjZUJ1ZmZl
ciA9IHJlYWRlcigpLT5pbnRlcmxhY2VCdWZmZXIoKTsKICAgICBpZiAoaW50ZXJsYWNlQnVmZmVy
KSB7Ci0gICAgICAgIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChyb3dJbmRleCAqIGNvbG9yQ2hh
bm5lbHMgKiBtX3NpemUud2lkdGgoKSk7CisgICAgICAgIHJvdyA9IGludGVybGFjZUJ1ZmZlciAr
IChyb3dJbmRleCAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSk7CiAgICAgICAgIHBu
Z19wcm9ncmVzc2l2ZV9jb21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsKICAgICB9CiAg
ICAgZWxzZQogICAgICAgICByb3cgPSByb3dCdWZmZXI7CiAKICAgICAvLyBDb3B5IHRoZSBkYXRh
IGludG8gb3VyIGJ1ZmZlci4KLSAgICBpbnQgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAgICBp
bnQgd2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCogZHN0ID0gYnVmZmVyLmJ5
dGVzKCkuZGF0YSgpICsgcm93SW5kZXggKiB3aWR0aDsKICAgICBib29sIHNhd0FscGhhID0gZmFs
c2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7CisgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CiAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICpyb3crKzsK
ICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7CiAgICAgICAgIHVuc2lnbmVkIGJsdWUg
PSAqcm93Kys7CkBAIC0zOTgsNiArMzk5LDQgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnBuZ0Nv
bXBsZXRlKCkKICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSk7CiB9CiAKLX0KLQotI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0MDUxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUE5HX0RF
Q09ERVJfSF8KLSNkZWZpbmUgUE5HX0RFQ09ERVJfSF8KKyNpZm5kZWYgUE5HSW1hZ2VEZWNvZGVy
X2gKKyNkZWZpbmUgUE5HSW1hZ2VEZWNvZGVyX2gKIAogI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5o
IgogCkBAIC0zMyw4ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQTkdJ
bWFnZVJlYWRlcjsKIAogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgUE5HIGltYWdlIGZv
cm1hdC4KLSAgICBjbGFzcyBQTkdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyCi0g
ICAgeworICAgIGNsYXNzIFBOR0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewog
ICAgIHB1YmxpYzoKICAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKCk7CiAgICAgICAgIH5QTkdJbWFn
ZURlY29kZXIoKTsKQEAgLTU0LDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBQTkdJbWFnZVJlYWRlciogcmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KIAogICAgICAg
ICAvLyBDYWxsYmFja3MgZnJvbSBsaWJwbmcKLSAgICAgICAgdm9pZCBkZWNvZGluZ0ZhaWxlZCgp
IHsgbV9mYWlsZWQgPSB0cnVlOyB9CisgICAgICAgIHZvaWQgZGVjb2RpbmdGYWlsZWQoKTsKICAg
ICAgICAgdm9pZCBoZWFkZXJBdmFpbGFibGUoKTsKICAgICAgICAgdm9pZCByb3dBdmFpbGFibGUo
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFj
ZVBhc3MpOwogICAgICAgICB2b2lkIHBuZ0NvbXBsZXRlKCk7CkBAIC02Myw2ICs2Miw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBQTkdJbWFnZVJlYWRlciogbV9yZWFk
ZXI7CiAgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYsNyArMTI2LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIAog
ICAgICAgICBkZWNvZGUoR0lGU2l6ZVF1ZXJ5LCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4gIW1f
ZmFpbGVkICYmIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CisgICAgcmV0dXJuIElt
YWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKIC8vIFRoZSB0b3RhbCBudW1iZXIg
b2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRo
ZSBhbnN3ZXIKQEAgLTE4Myw3ICsxODMsNyBAQCBSR0JBMzJCdWZmZXIqIEdJRkltYWdlRGVjb2Rl
cjo6ZnJhbWVCdWZmCiAKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNh
Y2hlW2luZGV4XTsKICAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlICYmIG1fcmVhZGVyKQotICAgICAgICBkZWNvZGUoR0lGRnVsbFF1ZXJ5LCBpbmRl
eCsxKTsgLy8gRGVjb2RlIHRoaXMgZnJhbWUuCisgICAgICAgIGRlY29kZShHSUZGdWxsUXVlcnks
IGluZGV4ICsgMSk7IC8vIERlY29kZSB0aGlzIGZyYW1lLgogICAgIHJldHVybiAmZnJhbWU7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZVJl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjcsMTEgKzE2NywxMSBAQCBzdHJ1Y3QgR0lGSW1hZ2VSZWFkZXIgewogICAgIGludCB2ZXJzaW9u
OyAgICAgICAgICAgICAgICAvKiBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4NyAq
LwogICAgIHVuc2lnbmVkIHNjcmVlbl93aWR0aDsgICAgICAgLyogTG9naWNhbCBzY3JlZW4gd2lk
dGggJiBoZWlnaHQgKi8KICAgICB1bnNpZ25lZCBzY3JlZW5faGVpZ2h0OwotICAgIGludCBnbG9i
YWxfY29sb3JtYXBfc2l6ZTsgICAgLyogU2l6ZSBvZiBnbG9iYWwgY29sb3JtYXAgYXJyYXkuICov
Ci0gICAgdW5zaWduZWQgaW50IGltYWdlc19kZWNvZGVkOyAvKiBDb3VudHMgY29tcGxldGVkIGZy
YW1lcyBmb3IgYW5pbWF0ZWQgR0lGcyAqLwotICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAgICAg
ICAgLyogQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4gc28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0
ZSBmcmFtZXMpICovCi0gICAgaW50IGxvb3BfY291bnQ7ICAgICAgICAgICAgICAvKiBOZXRzY2Fw
ZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVu
ZGVycy4gKi8KKyAgICBpbnQgZ2xvYmFsX2NvbG9ybWFwX3NpemU7ICAgLyogU2l6ZSBvZiBnbG9i
YWwgY29sb3JtYXAgYXJyYXkuICovCisgICAgdW5zaWduZWQgaW1hZ2VzX2RlY29kZWQ7ICAgIC8q
IENvdW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzICovCisgICAgaW50IGlt
YWdlc19jb3VudDsgICAgICAgICAgIC8qIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAo
aW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKSAqLworICAgIGludCBsb29wX2NvdW50OyAgICAg
ICAgICAgICAvKiBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGFuaW1hdGlv
biBsb29wcyBhIEdJRiByZW5kZXJzLiAqLwogICAgIAogICAgIC8vIE5vdCByZWFsbHkgZ2xvYmFs
LCBidXQgY29udmVuaWVudCB0byBsb2NhdGUgaGVyZS4KICAgICBpbnQgY291bnQ7ICAgICAgICAg
ICAgICAgICAgLyogUmVtYWluaW5nICMgYnl0ZXMgaW4gc3ViLWJsb2NrICovCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rlci5o
CShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQAogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIApAQCAtNDIsOSArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSAgICAvLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVk
IGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4KLSAgICAvLyBUaGlzIGJ1ZmZlciBpcyB3aGF0
IGFsbCBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLiAgRnJhbWVzIGFyZSB0aGVu
Ci0gICAgLy8gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlzIGJ1
ZmZlci4KKyAgICAvLyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNv
ZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxs
CisgICAgLy8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBhcmUg
dGhlbiBpbnN0YW50aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVy
LgogICAgIGNsYXNzIFJHQkEzMkJ1ZmZlciB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIEZy
YW1lU3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07CkBA
IC0xOTYsNyArMTkzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBhbmQgdGhlIGJh
c2UgY2xhc3MgbWFuYWdlcyB0aGUgUkdCQTMyIGZyYW1lIGNhY2hlLgogICAgIGNsYXNzIEltYWdl
RGVjb2RlciB7CiAgICAgcHVibGljOgotICAgICAgICBJbWFnZURlY29kZXIoKSA6IG1fZmFpbGVk
KGZhbHNlKSwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKSAge30KKyAgICAgICAgSW1hZ2VEZWNvZGVy
KCkKKyAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2UpCisgICAgICAgICAgICAsIG1fc2l6ZUF2
YWlsYWJsZShmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCB+
SW1hZ2VEZWNvZGVyKCkge30KIAogICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lv
biB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBl
LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQRUdJbWFnZURl
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQwNTEpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgICAgICAvKiBBbGxvY2F0ZSBhbmQg
aW5pdGlhbGl6ZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0ICovCiAgICAgICAgIGpwZWdfY3Jl
YXRlX2RlY29tcHJlc3MoJm1faW5mbyk7CiAgIAotICAgICAgICBkZWNvZGVyX3NvdXJjZV9tZ3Iq
IHNyYyA9IE5VTEw7CisgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3JjID0gMDsKICAgICAg
ICAgaWYgKCFtX2luZm8uc3JjKSB7CiAgICAgICAgICAgICBzcmMgPSAoZGVjb2Rlcl9zb3VyY2Vf
bWdyKilmYXN0Q2FsbG9jKHNpemVvZihkZWNvZGVyX3NvdXJjZV9tZ3IpLCAxKTsKICAgICAgICAg
ICAgIGlmICghc3JjKSB7CkBAIC00MjEsNyArNDIxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUoKQogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAg
cmV0dXJuICFtX2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOworICAg
IHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiBSR0JBMzJCdWZm
ZXIqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
UE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsOSArNzIsMTIgQEAgY2xhc3MgUE5HSW1hZ2VSZWFkZXIKIHsKIHB1YmxpYzoKICAgICBQ
TkdJbWFnZVJlYWRlcihQTkdJbWFnZURlY29kZXIqIGRlY29kZXIpCi0gICAgOiBtX3JlYWRPZmZz
ZXQoMCksIG1fZGVjb2RpbmdTaXplT25seShmYWxzZSksIG1faW50ZXJsYWNlQnVmZmVyKDApLCBt
X2hhc0FscGhhKDApCisgICAgICAgIDogbV9yZWFkT2Zmc2V0KDApCisgICAgICAgICwgbV9kZWNv
ZGluZ1NpemVPbmx5KGZhbHNlKQorICAgICAgICAsIG1faW50ZXJsYWNlQnVmZmVyKDApCisgICAg
ICAgICwgbV9oYXNBbHBoYSgwKQogICAgIHsKLSAgICAgICAgbV9wbmcgPSBwbmdfY3JlYXRlX3Jl
YWRfc3RydWN0KFBOR19MSUJQTkdfVkVSX1NUUklORywgTlVMTCwgZGVjb2RpbmdGYWlsZWQsIGRl
Y29kaW5nV2FybmluZyk7CisgICAgICAgIG1fcG5nID0gcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdChQ
TkdfTElCUE5HX1ZFUl9TVFJJTkcsIDAsIGRlY29kaW5nRmFpbGVkLCBkZWNvZGluZ1dhcm5pbmcp
OwogICAgICAgICBtX2luZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KG1fcG5nKTsKICAgICAg
ICAgcG5nX3NldF9wcm9ncmVzc2l2ZV9yZWFkX2ZuKG1fcG5nLCBkZWNvZGVyLCBoZWFkZXJBdmFp
bGFibGUsIHJvd0F2YWlsYWJsZSwgcG5nQ29tcGxldGUpOwogICAgIH0KQEAgLTEzNCw4ICsxMzcs
OSBAQCBwcml2YXRlOgogfTsKIAogUE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoKQot
OiBtX3JlYWRlcigwKQote30KKyAgICA6IG1fcmVhZGVyKDApCit7Cit9CiAKIFBOR0ltYWdlRGVj
b2Rlcjo6flBOR0ltYWdlRGVjb2RlcigpCiB7CkBAIC0xNjksNyArMTczLDcgQEAgYm9vbCBQTkdJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIAogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpOworICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQog
CiBSR0JBMzJCdWZmZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCkKQEAgLTMwNSw4ICszMDksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVy
QXZhaWxhYmxlKCkKIHZvaWQgcm93QXZhaWxhYmxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVw
IHJvd0J1ZmZlciwKICAgICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIHJvd0luZGV4LCBpbnQg
aW50ZXJsYWNlUGFzcykKIHsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdf
Z2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKAotICAgICAgICByb3dCdWZm
ZXIsIHJvd0luZGV4LCBpbnRlcmxhY2VQYXNzKTsKKyAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURl
Y29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKHJvd0J1
ZmZlciwgcm93SW5kZXgsIGludGVybGFjZVBhc3MpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5k
ZXgsIGludCBpbnRlcmxhY2VQYXNzKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL1hCTUltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQwNTEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpZm5kZWYgWEJNSW1hZ2VEZWNv
ZGVyX2gKICNkZWZpbmUgWEJNSW1hZ2VEZWNvZGVyX2gKIAotI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA0NDA1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2
LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIK
ICAKLSNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdYKQot
CiBuYW1lc3BhY2UgV2ViQ29yZQogewogCkBAIC00MSw2ICszOSw0IEBAIFJHQkEzMkJ1ZmZlciog
WEJNSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICByZXR1cm4gMDsKIH0KIAotfQotCi0jZW5k
aWYgLy8gUExBVEZPUk0oQ0FJUk8pCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gNDQwNTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3hibS9YQk1JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsOCBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBYQk1fREVDT0RFUl9IXwotI2RlZmluZSBY
Qk1fREVDT0RFUl9IXworI2lmbmRlZiBYQk1JbWFnZURlY29kZXJfaAorI2RlZmluZSBYQk1JbWFn
ZURlY29kZXJfaAogCiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAKQEAgLTMzLDggKzMzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFhCTUltYWdlUmVhZGVyOwogCiAgICAg
Ly8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBYQk0gaW1hZ2UgZm9ybWF0LgotICAgIGNsYXNzIFhC
TUltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIKLSAgICB7CisgICAgY2xhc3MgWEJN
SW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgogICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJ4Ym0i
OyB9CiAKQEAgLTQ0LDYgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAg
fTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31069</attachid>
            <date>2009-06-08 16:17:56 -0700</date>
            <delta_ts>2009-06-08 16:56:45 -0700</delta_ts>
            <desc>Misc. work, not ready for review</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32314</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IHBuZy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBuZy9QTkdJbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIHBuZy9QTkdJbWFnZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsNiBAQAogI2luY2x1ZGUgInBuZy5oIgogI2lu
Y2x1ZGUgImFzc2VydC5oIgogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJlbW92ZSB3YXJuaW5n
cyBmcm9tIHdhcm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDYxMSkg
Ly8gd2FybmluZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGptcCcgYW5kIEMrKyBv
YmplY3QgZGVzdHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNW
QykKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHYW1tYSBjb25zdGFudHMuCkBAIC0xNDMs
NyArMTM4LDYgQEAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKICAgICA6IG1f
cmVhZGVyKDApCiB7Ci0gICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIH0KIAogUE5H
SW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKQEAgLTE2OSw3ICsxNjMsNyBAQAogYm9v
bCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYg
d2UgaGF2ZSBwZW5kaW5nIGRhdGEgdG8gZGVjb2RlLCBzZW5kIGl0IHRvIHRoZSBQTkcgcmVhZGVy
IG5vdy4KLSAgICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSAmJiBtX3JlYWRlcikgeworICAgIGlmICgh
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBtX3JlYWRlcikgewogICAgICAgICBp
ZiAobV9mYWlsZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3OCw3ICsxNzIs
NyBAQAogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc2l6ZUF2
YWlsYWJsZTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0K
IAogUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpCkBAIC0xODYsNiArMTgwLDkgQEAKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJl
dHVybiAwOwogCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisKICAgICBSR0JBMzJCdWZmZXImIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCiAgICAgICAgIC8vIERlY29kZSB0
aGlzIGZyYW1lLgpAQCAtMjAxLDcgKzE5OCw3IEBACiAKICAgICBtX3JlYWRlci0+ZGVjb2RlKG1f
ZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKICAgICAKLSAgICBpZiAobV9mYWlsZWQgfHwgKG1f
ZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpKSB7CisgICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKSkgewogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CiAgICAgICAgIG1fcmVhZGVy
ID0gMDsKICAgICB9CkBAIC0yMjYsNyArMjIzLDggQEAKICAgICBzdGF0aWNfY2FzdDxQTkdJbWFn
ZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxl
KCk7CiB9CiAKLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpIHsKK3ZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpCit7CiAgICAgbV9mYWlsZWQgPSB0cnVl
OwogfQogCkBAIC0yNDUsOSArMjQzLDEyIEBACiAgICAgfQogICAgIAogICAgIC8vIFdlIGNhbiBm
aWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgIGlm
ICghbV9zaXplQXZhaWxhYmxlKSB7Ci0gICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7Ci0g
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKCFJbWFnZURl
Y29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkgeworICAgICAgICAgICAgLy8gU2l6ZSB1bnJlYXNvbmFibGUsIGJhaWwgb3V0Lgor
ICAgICAgICAgICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgYml0RGVwdGgsIGNvbG9yVHlwZSwgaW50ZXJs
YWNlVHlwZSwgY29tcHJlc3Npb25UeXBlLCBmaWx0ZXJUeXBlLCBjaGFubmVsczsKQEAgLTMxMywx
NSArMzE0LDIzIEBACiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3Mp
CiB7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIC8vIFJlc2l6ZSB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgaW1hZ2Uu
CiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAg
aWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKICAgICAg
ICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRoL2hl
aWdodC4KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzID0gYnVmZmVyLmJ5dGVzKCk7Ci0gICAg
ICAgIGJ5dGVzLnJlc2l6ZShzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CisgICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkp
IHsKKyAgICAgICAgICAgIC8vIEVycm9yIGFsbG9jYXRpbmcgdGhlIGJpdG1hcC4gV2Ugc2hvdWxk
IG5vdCBjb250aW51ZS4KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+
KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRlcigpLT5wbmdQdHIoKSkpLT5kZWNvZGluZ0Zh
aWxlZCgpOworICAgICAgICAgICAgbG9uZ2ptcChyZWFkZXIoKS0+cG5nUHRyKCktPmptcGJ1Ziwg
MSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0SGFz
QWxwaGEoZmFsc2UpOwogCiAgICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZp
bGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwg
MCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwpAQCAtMzg4LDggKzM5Nyw2IEBA
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9
Ci0KLSAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KHJvd0luZGV4ICsgMSk7CiB9CiAKIHZvaWQgcG5n
Q29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKQEAgLTM5OSw2ICs0MDYs
OSBAQAogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogeworICAgIGlmICht
X2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBI
YW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdl
IGVuZGVkIHVwIGJlaW5nIGVtcHR5LgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOwogICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKTsKSW5kZXg6IGdpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGdpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIGdpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAKIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAogewogICAgIC8vIElmIHdlIGhh
dmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgR0lGIHJlYWRlciBub3cu
Ci0gICAgaWYgKCFtX3NpemVBdmFpbGFibGUgJiYgbV9yZWFkZXIpIHsKKyAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgbV9yZWFkZXIpIHsKICAgICAgICAgaWYgKG1f
ZmFpbGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjUsNyArMTI1LDcgQEAK
ICAgICAgICAgZGVjb2RlKEdJRlNpemVRdWVyeSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1f
c2l6ZUF2YWlsYWJsZTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KTsKIH0KIAogLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdp
bGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlcgpAQCAtMjUxLDEwICsyNTEsOSBA
QAogfQogCiAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
Citib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KQogewotICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gc2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2ln
bmVkIGJ5dGVzTGVmdCkKQEAgLTI2Miw3ICsyNjEsNyBAQAogICAgIG1fcmVhZGVyLT5zZXRSZWFk
T2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsKIH0KIAotdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQorYm9vbCBHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogewogICAgIC8v
IEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBJbnRSZWN0IGZy
YW1lUmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQo
KSwKQEAgLTI3OSw3ICsyNzgsMTAgQEAKICAgICAKICAgICBpZiAoZnJhbWVJbmRleCA9PSAwKSB7
CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWlu
ZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KLSAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVm
ZmVyKTsKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBz
dGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFt
ZSdzCiAgICAgICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KQEAgLTMwMiw4ICszMDQsNyBAQAogICAg
ICAgICBpZiAoKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVk
KSB8fAogICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9z
ZUtlZXApKSB7CiAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUg
c3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgICAgICBidWZmZXItPmJ5dGVz
KCkgPSBwcmV2QnVmZmVyLT5ieXRlcygpOwotICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBo
YShwcmV2QnVmZmVyLT5oYXNBbHBoYSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1h
cERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ug
d2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQK
ICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2Yg
dGhlIGZyYW1lLgpAQCAtMzEyLDExICszMTMsMTMgQEAKICAgICAgICAgICAgICAgICB8fCBwcmV2
UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgewogICAgICAg
ICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6
ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNv
bXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZm
ZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZhaWxl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3
aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCi0gICAgICAg
ICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKSA9IHByZXZCdWZmZXItPmJ5dGVzKCk7Ci0gICAgICAgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEocHJldkJ1ZmZlci0+aGFzQWxwaGEoKSk7CisgICAgICAg
ICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkg
ewogICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIGNvbnN0IGN1cnJlbnRSb3cgPQogICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCkgKyAoeSAqIG1fc2l6ZS53aWR0
aCgpKTsKQEAgLTMzNCwxMyArMzM3LDcgQEAKIAogICAgIC8vIFJlc2V0IHRoZSBhbHBoYSBwaXhl
bCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgogICAgIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpwcmVwRW1wdHlGcmFtZUJ1ZmZlcihS
R0JBMzJCdWZmZXIqIGJ1ZmZlcikgY29uc3QKLXsKLSAgICBidWZmZXItPmJ5dGVzKCkucmVzaXpl
KHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBidWZmZXItPmJ5dGVzKCku
ZmlsbCgwKTsKLSAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJh
bWVJbmRleCwKQEAgLTM1Miw4ICszNDksOCBAQAogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZy
YW1lIGlmIG5lY2Vzc2FyeS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpOwor
ICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KICAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3Rh
dGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IHNp
emUoKS5oZWlnaHQoKSkKQEAgLTQwNCwyMSArNDAxLDE3IEBACiAgICAgaWYgKHJlcGVhdENvdW50
ID4gMSkgewogICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRpbWVzLgog
ICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAgICB1bnNpZ25lZCBk
YXRhX3NpemUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOworICAgICAgICB1bnNpZ25lZCBzaXpl
ID0gbnVtICogc2l6ZW9mKHVuc2lnbmVkKTsKICAgICAgICAgdW5zaWduZWQgd2lkdGggPSBzaXpl
KCkud2lkdGgoKTsKICAgICAgICAgdW5zaWduZWQqIGVuZCA9IGJ1ZmZlci5ieXRlcygpLmRhdGEo
KSArIHdpZHRoICogc2l6ZSgpLmhlaWdodCgpOwogICAgICAgICBjdXJyRHN0ID0gZHN0ICsgd2lk
dGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZXBlYXRDb3VudDsgaSsrKSB7
CiAgICAgICAgICAgICBpZiAoY3VyckRzdCArIG51bSA+IGVuZCkgLy8gUHJvdGVjdCBhZ2FpbnN0
IGEgYnVmZmVyIG92ZXJydW4gZnJvbSBhIGJvZ3VzIHJlcGVhdENvdW50LgogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgZGF0YV9zaXplKTsK
KyAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIHNpemUpOwogICAgICAgICAgICAgY3Vy
ckRzdCArPSB3aWR0aDsKICAgICAgICAgfQogICAgIH0KLQotICAgIC8vIE91ciBwYXJ0aWFsIGhl
aWdodCBpcyByb3dOdW1iZXIgKyAxLCBlLmcuLCByb3cgMiBpcyB0aGUgM3JkIHJvdywgc28gdGhh
dCdzIGEgaGVpZ2h0IG9mIDMuCi0gICAgLy8gQWRkaW5nIGluIHJlcGVhdENvdW50IC0gMSB0byBy
b3dOdW1iZXIgKyAxIHdvcmtzIG91dCB0byBqdXN0IGJlIHJvd051bWJlciArIHJlcGVhdENvdW50
LgotICAgIGJ1ZmZlci5lbnN1cmVIZWlnaHQocm93TnVtYmVyICsgcmVwZWF0Q291bnQpOwogfQog
CiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QpCkBAIC00MjYsMTAgKzQxOSw5IEBACiAgICAgLy8gSW5pdGlhbGl6
ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZy
YW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93
KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJH
QkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5k
ZXgpOworICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgYnVmZmVyLmVuc3VyZUhlaWdodChtX3NpemUuaGVpZ2h0KCkpOwogICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0RHVyYXRp
b24oZnJhbWVEdXJhdGlvbik7CiAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2Fs
TWV0aG9kKTsKSW5kZXg6IGdpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnaWYv
R0lGSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NTAzKQorKysgZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIHZvaWQgZGVjb2Rl
KEdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkgY29uc3Q7CiAKICAgICAgICAgLy8gQ2Fs
bGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCi0gICAgICAgIHZvaWQgc2l6ZU5vd0F2YWlsYWJs
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKKyAgICAgICAgYm9vbCBzaXplTm93
QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwogICAgICAgICB2b2lk
IGRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCk7CiAgICAgICAgIHZvaWQgaGF2ZURl
Y29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1
bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVkIHJvd051bWJlciwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVu
dFBpeGVscyk7CkBAIC03MywxMiArNzMsOSBAQAogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8g
Q2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiBpbmRl
eCwgYmFzZWQgb24gdGhlCi0gICAgICAgIC8vIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0
aG9kLgotICAgICAgICB2b2lkIGluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KTsK
LQotICAgICAgICAvLyBBIGhlbHBlciBmb3IgaW5pdEZyYW1lQnVmZmVyKCksIHRoaXMgc2V0cyB0
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCBhbmQKLSAgICAgICAgLy8gZmlsbHMgaXQgd2l0aCB0cmFu
c3BhcmVudCBwaXhlbHMuCi0gICAgICAgIHZvaWQgcHJlcEVtcHR5RnJhbWVCdWZmZXIoUkdCQTMy
QnVmZmVyKikgY29uc3Q7CisgICAgICAgIC8vIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0
aG9kLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gT24gZmFpbHVyZSwKKyAgICAgICAgLy8gdGhp
cyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4KKyAgICAgICAgYm9vbCBpbml0RnJhbWVC
dWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCk7CiAKICAgICAgICAgYm9vbCBtX2ZyYW1lQ291bnRW
YWxpZDsKICAgICAgICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKSW5kZXg6IGdpZi9H
SUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAko
cmV2aXNpb24gNDQ1MDMpCisrKyBnaWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTEsOSArMzExLDEzIEBACiAKICAgICAgIHdoaWxlIChjb2RlID49IGNsZWFyX2NvZGUp
CiAgICAgICB7Ci0gICAgICAgIGlmIChjb2RlID09IHByZWZpeFtjb2RlXSkKKyAgICAgICAgaWYg
KGNvZGUgPj0gTUFYX0JJVFMgfHwgY29kZSA9PSBwcmVmaXhbY29kZV0pCiAgICAgICAgICAgcmV0
dXJuIC0xOwogCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN1ZmZpeFtdIG9ubHkgaG9sZHMgY2hh
cmFjdGVycyB0aHJvdWdoIHN1ZmZpeFthdmFpbCAtIDFdLAorICAgICAgICAvLyBhbGxvd2luZyBj
b2RlID49IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1lZAor
ICAgICAgICAvLyBkYXRhLiBBcyBsb25nIGFzIGNvZGUgPCBNQVhfQklUUywgdGhlIG9ubHkgcmlz
ayBpcyBhIGdhcmJsZWQgaW1hZ2UsCisgICAgICAgIC8vIHdoaWNoIGlzIG5vIHdvcnNlIHRoYW4g
cmVmdXNpbmcgdG8gZGlzcGxheSBpdC4KICAgICAgICAgKnN0YWNrcCsrID0gc3VmZml4W2NvZGVd
OwogICAgICAgICBjb2RlID0gcHJlZml4W2NvZGVdOwogCkBAIC00NDUsNyArNDQ5LDEwIEBACiAg
ICAgewogICAgICAgLyogSW5pdGlhbGl6ZSBMWlcgcGFyc2VyL2RlY29kZXIgKi8KICAgICAgIGlu
dCBkYXRhc2l6ZSA9ICpxOwotICAgICAgaWYgKGRhdGFzaXplID4gTUFYX0xaV19CSVRTKSB7Cisg
ICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0aGUgZGF0YXNp
emUsIHdlIG5lZWQgdG8gZW5zdXJlCisgICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJp
Y3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgorICAgICAgLy8gVGhp
cyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBhdCA0MDk1Lgor
ICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykgewogICAgICAgICBzdGF0ZSA9IGdp
Zl9lcnJvcjsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC00NjgsNiArNDc1LDggQEAKICAg
ICAgICAgLyogaW5pdCB0aGUgdGFibGVzICovCiAgICAgICAgIGlmICghZnJhbWVfcmVhZGVyLT5z
dWZmaXgpCiAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdWZmaXggPSBuZXcgdW5zaWduZWQgY2hh
cltNQVhfQklUU107CisgICAgICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFibGUg
bGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgorICAgICAgICBtZW1zZXQoZnJh
bWVfcmVhZGVyLT5zdWZmaXgsIDAsIE1BWF9CSVRTKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmcmFtZV9yZWFkZXItPmNsZWFyX2NvZGU7IGkrKykKICAgICAgICAgICBmcmFtZV9yZWFk
ZXItPnN1ZmZpeFtpXSA9IGk7CiAKQEAgLTUwOCw4ICs1MTcsMTAgQEAKICAgICAgIHNjcmVlbl9o
ZWlnaHQgPSBHRVRJTlQxNihxICsgMik7CiAKICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhl
IGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCi0gICAgICBpZiAoY2xpZW50cHRyKQotICAgICAg
ICBjbGllbnRwdHItPnNpemVOb3dBdmFpbGFibGUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0
KTsKKyAgICAgIGlmIChjbGllbnRwdHIpIHsKKyAgICAgICAgaWYgKCFjbGllbnRwdHItPnNpemVO
b3dBdmFpbGFibGUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKKyAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICB9CiAgICAgICAKICAgICAgIHNjcmVlbl9iZ2NvbG9yID0gcVs1XTsK
ICAgICAgIGdsb2JhbF9jb2xvcm1hcF9zaXplID0gMjw8KHFbNF0mMHgwNyk7CkluZGV4OiBqcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGpwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDQ0NTAzKQorKysganBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsMTcgKzM4LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUg
PHN0ZGlvLmg+CiAKIGV4dGVybiAiQyIgewogI2luY2x1ZGUgImpwZWdsaWIuaCIKIH0KIAotI2lm
IENPTVBJTEVSKE1TVkMpCi0vLyBSZW1vdmUgd2FybmluZ3MgZnJvbSB3YXJuaW5nIGxldmVsIDQu
Ci0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ2MTEpIC8vIHdhcm5pbmcgQzQ2MTE6IGludGVy
YWN0aW9uIGJldHdlZW4gJ19zZXRqbXAnIGFuZCBDKysgb2JqZWN0IGRlc3RydWN0aW9uIGlzIG5v
bi1wb3J0YWJsZQotI2VuZGlmIC8vIENPTVBJTEVSKE1TVkMpCi0KICNpbmNsdWRlIDxzZXRqbXAu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjE5LDcgKzIxMywxMCBAQAogICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAgICAgICAg
ICAvLyBXZSBjYW4gZmlsbCBpbiB0aGUgc2l6ZSBub3cgdGhhdCB0aGUgaGVhZGVyIGlzIGF2YWls
YWJsZS4KLSAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dp
ZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZGVjb2Rl
ci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX0VSUk9SOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
aWYgKG1fZGVjb2RpbmdTaXplT25seSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4g
c3RvcCBoZXJlLgpAQCAtNDE0LDcgKzQxMSw3IEBACiBib29sIEpQRUdJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIGRhdGEg
dG8gZGVjb2RlLCBzZW5kIGl0IHRvIHRoZSBKUEVHIHJlYWRlciBub3cuCi0gICAgaWYgKCFtX3Np
emVBdmFpbGFibGUgJiYgbV9yZWFkZXIpIHsKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXpl
QXZhaWxhYmxlKCkgJiYgbV9yZWFkZXIpIHsKICAgICAgICAgaWYgKG1fZmFpbGVkKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00MjMsNyArNDIwLDcgQEAKICAgICAgICAgZGVjb2Rl
KHRydWUpOwogICAgIH0KIAotICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CisgICAgcmV0dXJu
IEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKIFJHQkEzMkJ1ZmZlciogSlBF
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKQEAgLTQ2Mywx
NyArNDYwLDE5IEBACiAgICAgLy8gUmVzaXplIHRvIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRo
ZSBpbWFnZS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVsw
XTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkg
ewotICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNvcnJlY3Qg
d2lkdGgvaGVpZ2h0LgotICAgICAgICBSR0JBMzJBcnJheSYgYnl0ZXMgPSBidWZmZXIuYnl0ZXMo
KTsKLSAgICAgICAgYnl0ZXMucmVzaXplKHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgp
KTsKKyAgICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0
IHdpZHRoL2hlaWdodC4gVGhpcyB3aWxsCisgICAgICAgIC8vIGFsc28gaW5pdGlhbGl6ZSBpdCB0
byB0cmFuc3BhcmVudC4KKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgLy8gVXBkYXRlIG91
ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgogICAgICAgICBidWZmZXIuc2V0U3Rh
dHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKGZhbHNlKTsKIAogICAgICAgICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmls
bHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAgYnVmZmVyLnNldFJlY3QoSW50UmVjdCgwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0KLSAgICAgICAgLy8gV2UgZG9u
J3QgaGF2ZSBhbHBoYSAodGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBidWZmZXIgaXMgY29u
c3RydWN0ZWQpLgorICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIHNpemUoKS53
aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nf
c3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKQEAgLTQ5Miw4ICs0OTEsNiBAQAogICAg
ICAgICAgICAgdW5zaWduZWQgYiA9ICpqMSsrOwogICAgICAgICAgICAgUkdCQTMyQnVmZmVyOjpz
ZXRSR0JBKCpkc3QrKywgciwgZywgYiwgMHhGRik7CiAgICAgICAgIH0KLQotICAgICAgICBidWZm
ZXIuZW5zdXJlSGVpZ2h0KGluZm8tPm91dHB1dF9zY2FubGluZSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBqcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBq
cGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQ1MDMpCisrKyBqcGVnL0pQRUdJbWFn
ZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTcgKzU0LDExIEBACiAKICAgICAgICAg
SlBFR0ltYWdlUmVhZGVyKiByZWFkZXIoKSB7IHJldHVybiBtX3JlYWRlcjsgfQogCi0gICAgICAg
IHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgIGlmICgh
bV9zaXplQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMoKTsK
ICAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIGZy
aWVuZCBjbGFzcyBKUEVHSW1hZ2VSZWFkZXI7CiAgICAgICAgIG11dGFibGUgSlBFR0ltYWdlUmVh
ZGVyKiBtX3JlYWRlcjsKICAgICB9OwogCkluZGV4OiBza2lhL0dJRkltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc2tpYS9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykK
KysrIHNraWEvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDggKzI3
OSw3IEBACiAgICAgCiAgICAgaWYgKGZyYW1lSW5kZXggPT0gMCkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3Vz
IGRhdGEuCi0gICAgICAgIGlmICghcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVmZmVyKSkgewotICAg
ICAgICAgICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsK
KyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWln
aHQoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtMzA3LDEwICszMDYsNiBAQAogICAgICAgICAgICAgICAg
IChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZUtlZXApKSB7CiAgICAgICAgICAg
ICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRo
aXMgZnJhbWUuCiAgICAgICAgICAgICBidWZmZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVy
KTsKLSAgICAgICAgICAgIC8vIFRoaXMgbmV4dCBsaW5lIGlzbid0IGN1cnJlbnRseSBuZWNlc3Nh
cnkgc2luY2UgdGhlIGFscGhhIHN0YXRlIGlzCi0gICAgICAgICAgICAvLyBjdXJyZW50bHkgY2Fy
cmllZCBhbG9uZyBpbiB0aGUgU2tpYSBiaXRtYXAgZGF0YSwgYnV0IGl0J3Mgc2FmZSwKLSAgICAg
ICAgICAgIC8vIGZ1dHVyZS1wcm9vZiwgYW5kIHBhcmFsbGVsIHRvIHRoZSBDYWlybyBjb2RlLgot
ICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBoYShwcmV2QnVmZmVyLT5oYXNBbHBoYSgpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHBy
ZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZl
Y3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KQEAgLTMxOSwx
NiArMzE0LDE2IEBACiAgICAgICAgICAgICAgICAgfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgc2l6ZSgpKSkpIHsKICAgICAgICAgICAgICAgICAvLyBDbGVhcmlu
ZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAg
ICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdl
LgotICAgICAgICAgICAgICAgIHByZXBFbXB0eUZyYW1lQnVmZmVyKGJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWln
aHQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVy
LCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1lLgogICAgICAgICAgICAgICBidWZmZXItPmNvcHlC
aXRtYXBEYXRhKCpwcmV2QnVmZmVyKTsKLSAgICAgICAgICAgICAgLy8gVW5uZWNlc3NhcnkgKGJ1
dCBzYWZlKTsgc2VlIGNvbW1lbnRzIG9uIHRoZSBzaW1pbGFyIGNhbGwgYWJvdmUuCi0gICAgICAg
ICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEocHJldkJ1ZmZlci0+aGFzQWxwaGEoKSk7Ci0gICAg
ICAgICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBidWZmZXItPmJpdG1hcCgpOwogICAgICAgICAg
ICAgICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsr
eSkgewogICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHBy
ZXZSZWN0LnJpZ2h0KCk7ICsreCkKLSAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJH
QkEoYml0bWFwLmdldEFkZHIzMih4LCB5KSwgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyLT5zZXRSR0JBKHgsIHksIDAsIDAsIDAsIDApOwogICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgIGlmICgocHJldlJlY3Qud2lkdGgoKSA+IDApICYmIChwcmV2UmVjdC5o
ZWlnaHQoKSA+IDApKQogICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVl
KTsKQEAgLTM0OCw5ICszNDMsNiBAQAogewogICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ly8gVGhpcyBuZXh0IGxpbmUgaXNuJ3QgY3VycmVudGx5IG5lY2Vzc2FyeSBzaW5jZSBTa2lhJ3Mg
ZXJhc2VBUkdCKCkgc2V0cwotICAgIC8vIHRoaXMgZm9yIHVzLCBidXQgd2UgZG8gaXQgZm9yIHNp
bWlsYXIgcmVhc29ucyB0byB0aGUgc2V0SGFzQWxwaGEoKSBjYWxscwotICAgIC8vIGluIGluaXRG
cmFtZUJ1ZmZlcigpIGFib3ZlLgogICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC00MTYsMTQgKzQwOCwxNCBAQAogICAgIGlmIChyZXBlYXRDb3Vu
dCA+IDEpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcm93IHxyZXBlYXRDb3VudHwtMSB0aW1lcy4K
ICAgICAgICAgdW5zaWduZWQgbnVtID0gY3VyckRzdCAtIGRzdDsKLSAgICAgICAgdW5zaWduZWQg
ZGF0YV9zaXplID0gbnVtICogc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgc2l6
ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHdpZHRoID0gc2l6
ZSgpLndpZHRoKCk7CiAgICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYml0bWFwKCkuZ2V0
QWRkcjMyKDAsIDApICsgd2lkdGggKiBzaXplKCkuaGVpZ2h0KCk7CiAgICAgICAgIGN1cnJEc3Qg
PSBkc3QgKyB3aWR0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlcGVhdENv
dW50OyBpKyspIHsKICAgICAgICAgICAgIGlmIChjdXJyRHN0ICsgbnVtID4gZW5kKSAvLyBQcm90
ZWN0IGFnYWluc3QgYSBidWZmZXIgb3ZlcnJ1biBmcm9tIGEgYm9ndXMgcmVwZWF0Q291bnQuCiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtZW1jcHkoY3VyckRzdCwgZHN0LCBk
YXRhX3NpemUpOworICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgc2l6ZSk7CiAgICAg
ICAgICAgICBjdXJyRHN0ICs9IHdpZHRoOwogICAgICAgICB9CiAgICAgfQpJbmRleDogc2tpYS9H
SUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBza2lhL0dJRkltYWdlRGVjb2Rlci5oCShy
ZXZpc2lvbiA0NDUwMykKKysrIHNraWEvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDEwICs3OCw2IEBACiAgICAgICAgIC8vIHRoaXMgd2lsbCBtYXJrIHRoZSBpbWFnZSBh
cyBmYWlsZWQuCiAgICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5k
ZXgpOwogCi0gICAgICAgIC8vIEEgaGVscGVyIGZvciBpbml0RnJhbWVCdWZmZXIoKSwgdGhpcyBz
ZXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGFuZAotICAgICAgICAvLyBmaWxscyBpdCB3aXRo
IHRyYW5zcGFyZW50IHBpeGVscy4KLSAgICAgICAgYm9vbCBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihS
R0JBMzJCdWZmZXIqKSBjb25zdDsKLQogICAgICAgICBib29sIG1fZnJhbWVDb3VudFZhbGlkOwog
ICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGlu
dCBtX3JlcGV0aXRpb25Db3VudDsKSW5kZXg6IHNraWEvQk1QSW1hZ2VSZWFkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBza2lhL0JNUEltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDQ0NTAzKQorKysgc2tpYS9C
TVBJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsOSArMjUxLDcgQEAKICAgICAg
ICAgLy8gTGlrZSBzZXRJKCksIGJ1dCB3aXRoIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudCB2YWx1
ZXMgc3BlY2lmaWVkLgogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKHVuc2lnbmVkIHJlZCwg
dW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIGFscGhhKQogICAgICAgICB7
Ci0gICAgICAgICAgICBSR0JBMzJCdWZmZXI6OnNldFJHQkEoCi0gICAgICAgICAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuYml0bWFwKCkuZ2V0QWRkcjMyKG1fY29vcmQueCgpLCBt
X2Nvb3JkLnkoKSksCi0gICAgICAgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwor
ICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCktPnNldFJHQkEobV9jb29yZC54
KCksIG1fY29vcmQueSgpLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAgICAgICAgICBt
X2Nvb3JkLm1vdmUoMSwgMCk7CiAgICAgICAgIH0KIApJbmRleDogc2tpYS9QTkdJbWFnZURlY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHNraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24g
NDQ1MDMpCisrKyBza2lhL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
NCw3ICsyMjQsOCBAQAogICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRf
cHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5oZWFkZXJBdmFpbGFibGUoKTsKIH0KIAotdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKCkgewordm9pZCBQTkdJbWFnZURlY29kZXI6OmRl
Y29kaW5nRmFpbGVkKCkKK3sKICAgICBtX2ZhaWxlZCA9IHRydWU7CiB9CiAKQEAgLTMzMCw2ICsz
MzEsNyBAQAogCiAgICAgICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBj
b21wbGV0ZS4KICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFy
dGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAKICAgICAgICAgLy8g
Rm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KICAgICAg
ICAgYnVmZmVyLnNldFJlY3QoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhl
aWdodCgpKSk7CkluZGV4OiBza2lhL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNraWEv
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NTAzKQorKysgc2tpYS9JbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTI4LDggKzEyOCwxMSBAQAogICAgICAgICAgICAgLy8gb3RoZXJ3
aXNlLgogICAgICAgICAgICAgQVNTRVJUKG1fYml0bWFwLndpZHRoKCkgPT0gMCAmJiBtX2JpdG1h
cC5oZWlnaHQoKSA9PSAwKTsKICAgICAgICAgICAgIG1fYml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgaWYgKCFt
X2JpdG1hcC5hbGxvY1BpeGVscygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8v
IEFsbG9jYXRpb24gZmFpbHVyZSwgbWF5YmUgdGhlIGJpdG1hcCB3YXMgdG9vIGJpZy4KKyAgICAg
ICAgICAgIGlmICghbV9iaXRtYXAuYWxsb2NQaXhlbHMoKSkgeworICAgICAgICAgICAgICAgIC8v
IEFsbG9jYXRpb24gZmFpbHVyZSwgbWF5YmUgdGhlIGJpdG1hcCB3YXMgdG9vIGJpZy4KKyAgICAg
ICAgICAgICAgICBzZXRTdGF0dXMoRnJhbWVDb21wbGV0ZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBDbGVhciB0aGUgaW1h
Z2UuCiAgICAgICAgICAgICBtX2JpdG1hcC5lcmFzZUFSR0IoMCwgMCwgMCwgMCk7CkBAIC0yNzIs
MjIgKzI3NSwxNSBAQAogICAgICAgICBtdXRhYmxlIGJvb2wgbV9mYWlsZWQ7CiAKICAgICBwcml2
YXRlOgotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB1cyB0byBtYWtlIHN1cmUgdGhl
IGltYWdlIGlzIG5vdCB0b28gbGFyZ2UuIFZlcnkKLSAgICAgICAgLy8gbGFyZ2UgaW1hZ2VzLCBl
dmVuIGlmIHRoZSBhbGxvY2F0aW9uIHN1Y2NlZWRzLCBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1l
Ci0gICAgICAgIC8vIHRvIHByb2Nlc3MsIGdpdmluZyB0aGUgYXBwZWFyYW5jZSBvZiBhIERvUy4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gV2ViS2l0IGFsc28gc2VlbXMgdG8gbGlrZSB0byBhc2sg
Zm9yIHRoZSBzaXplIGJlZm9yZSBkYXRhIGlzIGF2YWlsYWJsZQotICAgICAgICAvLyBhbmQgaW4g
c29tZSBjYXNlcyB3aGVuIHRoZSBmYWlsZWQgZmxhZyBpcyBzZXQuIFNvbWUgb2YgdGhlc2UgY29k
ZSBwYXRocwotICAgICAgICAvLyBzdWNoIGFzIEJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbiB0
aGVuIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdlCi0gICAgICAgIC8vIGJhc2VkIG9uIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0LiBCZWNhdXNlIG9mIHRoaXMsIG91ciB0b3RhbCBjb21wdXRlZCBp
bWFnZQotICAgICAgICAvLyBieXRlIHNpemUgbXVzdCBuZXZlciBvdmVyZmxvdyBhbiBpbnQuCisg
ICAgICAgIC8vIFNvbWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBh
cyAid2lkdGggKiBoZWlnaHQgKiA0IgorICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEgKHNp
Z25lZCkgaW50LiAgQXZvaWQgb3ZlcmZsb3cuCiAgICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKICAgICAgICAgeworICAgICAgICAg
ICAgLy8gd2lkdGggKiBoZWlnaHQgbXVzdCBub3QgZXhjZWVkICgyIF4gMjkpIC0gMSwgc28gdGhh
dCB3ZSBkb24ndAorICAgICAgICAgICAgLy8gb3ZlcmZsb3cgd2hlbiB3ZSBtdWx0aXBseSBieSA0
LgogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KHdpZHRoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7
Ci0gICAgICAgICAgICBpZiAodG90YWxfc2l6ZSA+IDMyICogMTAyNCAqIDEwMjQpICAvLyAzMk0g
PSAxMjhNQiBtZW1vcnkgdG90YWwgKDMyIGJwcCkuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdG90YWxf
c2l6ZSA+ICgoMjU2ICogMjU2ICogMjU2ICogMzIpIC0gMSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBJbnRTaXplIG1fc2l6ZTsKSW5kZXg6IHNraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1MDMpCisrKyBz
a2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsMTcgKzQ2NSwx
NSBAQAogICAgICAgICAvLyBhbHNvIGluaXRpYWxpemUgaXQgdG8gdHJhbnNwYXJlbnQuCiAgICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkp
IHsKICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBh
cnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6
OkZyYW1lUGFydGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAKICAg
ICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1h
Z2UuCiAgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCks
IHNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYWxwaGEgKHRo
aXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgYnVmZmVyIGlzIGNvbnN0cnVjdGVkKS4KICAgICB9
CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsK
SW5kZXg6IHNraWEvWEJNSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBza2lhL1hCTUlt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NTAzKQorKysgc2tpYS9YQk1JbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBACiAgICAgICAgIGZyYW1lLnN0YXR1
cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewogICAgICAgICBpZiAoIWZyYW1lLnNl
dFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpIHsKICAgICAgICAgICAgIG1f
ZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZyYW1lLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAg
ICAgZnJhbWUuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKSW5kZXg6IElt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDUw
MykKKysrIEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAj
aW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTIsOCArNTQsNyBAQAogICAgICAgICB9OwogCiAgICAgICAgIFJHQkEz
MkJ1ZmZlcigpCi0gICAgICAgICAgICA6IG1faGVpZ2h0KDApCi0gICAgICAgICAgICAsIG1fc3Rh
dHVzKEZyYW1lRW1wdHkpCisgICAgICAgICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkpCiAgICAg
ICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgICAgICwgbV9kaXNwb3NhbE1ldGhvZChE
aXNwb3NlTm90U3BlY2lmaWVkKQogICAgICAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQpAQCAt
NjksMTcgKzcwLDQyIEBACiAgICAgICAgICAgLy8gbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUg
bGF0ZXIuCiAgICAgICAgIH0KIAorICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBu
ZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSBpbiB8b3RoZXJ8LCBzbyB0aGUKKyAgICAgICAgLy8g
dHdvIGltYWdlcyBjYW4gYmUgbW9kaWZpZWQgaW5kZXBlbmRlbnRseS4KKyAgICAgICAgdm9pZCBj
b3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICAgICAgICAgIG1faGFzQWxw
aGEgPSBvdGhlci5tX2hhc0FscGhhOworICAgICAgICB9CisKICAgICAgICAgY29uc3QgUkdCQTMy
QXJyYXkmIGJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlczsgfQogICAgICAgICBSR0JBMzJB
cnJheSYgYnl0ZXMoKSB7IHJldHVybiBtX2J5dGVzOyB9CisKKyAgICAgICAgLy8gTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBwaXhlbHMgYXJlIHdyaXR0ZW4uIFdpbGwgcmV0dXJuIHRydWUgb24K
KyAgICAgICAgLy8gc3VjY2VzcywgZmFsc2UgaWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxz
LgorICAgICAgICBib29sIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sgZm9yIGFsbG9j
YXRpb24gZmFpbHVyZSBpZiB0aGUKKyAgICAgICAgICAgIC8vIHJlcXVlc3RlZCBzaXplIHdhcyB0
b28gYmlnLi4uCisgICAgICAgICAgICBtX2J5dGVzLnJlc2l6ZSh3aWR0aCAqIGhlaWdodCk7CisK
KyAgICAgICAgICAgIC8vIENsZWFyIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIG1fYnl0ZXMuZmls
bCgwKTsKKyAgICAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICAgICAgdW5zaWduZWQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9oZWlnaHQ7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxN
ZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAgICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKICAgICAgICAgdm9pZCBz
ZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZWN0ID0gcjsgfQotICAgICAgICB2b2lkIGVu
c3VyZUhlaWdodCh1bnNpZ25lZCByb3dJbmRleCkgeyBpZiAocm93SW5kZXggPiBtX2hlaWdodCkg
bV9oZWlnaHQgPSByb3dJbmRleDsgfQogICAgICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1
cyBzKSB7IG1fc3RhdHVzID0gczsgfQogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVk
IGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERp
c3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRo
b2QgPSBtZXRob2Q7IH0KQEAgLTEwNiw3ICsxMzIsNiBAQAogICAgICAgICBJbnRSZWN0IG1fcmVj
dDsgICAgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4g
dGhlIG92ZXJhbGwgYnVmZmVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3
aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1l
cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3YXMg
c21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCi0gICAgICAgIHVuc2lnbmVkIG1f
aGVpZ2h0OyAvLyBUaGUgaGVpZ2h0ICh0aGUgbnVtYmVyIG9mIHJvd3Mgd2UndmUgZnVsbHkgZGVj
b2RlZCkuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOyAvLyBXaGV0aGVyIG9yIG5vdCB0
aGlzIGZyYW1lIGlzIGNvbXBsZXRlbHkgZmluaXNoZWQgZGVjb2RpbmcuCiAgICAgICAgIHVuc2ln
bmVkIG1fZHVyYXRpb247IC8vIFRoZSBhbmltYXRpb24gZGVsYXkuCiAgICAgICAgIEZyYW1lRGlz
cG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJh
bWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgpAQCAtMTE5LDExICsx
NDQsMTEgQEAKICAgICBjbGFzcyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKICAgICAgICAg
SW1hZ2VEZWNvZGVyKCkKLSAgICAgICAgICAgIDogbV9zaXplQXZhaWxhYmxlKGZhbHNlKQotICAg
ICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkKKyAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2Up
CisgICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkKICAgICAgICAgewogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlcigpIHt9CiAKICAg
ICAgICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdXN1YWxseSBhc3NvY2lhdGVkIHdp
dGggYW4gdW5kZWNvZGVkIGltYWdlIG9mIHRoaXMgdHlwZS4KQEAgLTEzMiwxMSArMTU3LDIyIEBA
CiAgICAgICAgIC8vIEFsbCBzcGVjaWZpYyBkZWNvZGVyIHBsdWdpbnMgbXVzdCBkbyBzb21ldGhp
bmcgd2l0aCB0aGUgZGF0YSB0aGV5IGFyZSBnaXZlbi4KICAgICAgICAgdmlydHVhbCB2b2lkIHNl
dERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgeyBtX2RhdGEg
PSBkYXRhOyB9CiAKLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRp
b24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFp
bGFibGUoKSBjb25zdCA9IDA7CisgICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGlu
Zm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBUaGlzIGRlZmF1bHQKKyAgICAgICAgLy8g
aW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0
IGFuZCB3ZSBoYXZlIG5vdAorICAgICAgICAvLyBzZWVuIGEgZmFpbHVyZS4gRGVjb2RlcnMgbWF5
IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyB0byBsYXppbHkgZGVjb2RlCisgICAgICAgIC8vIGVub3Vn
aCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBzaXplLgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFtX2Zh
aWxlZCAmJiBtX3NpemVBdmFpbGFibGU7IAorICAgICAgICB9CiAKICAgICAgICAgLy8gUmVxdWVz
dHMgdGhlIHNpemUuCi0gICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gUmVxdWVzdGluZyB0aGUgc2l6ZSBvZiBhbiBpbnZhbGlkIGJp
dG1hcCBpcyBtZWFuaW5nbGVzcy4KKyAgICAgICAgICAgIEFTU0VSVCghbV9mYWlsZWQpOworICAg
ICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFRoZSB0b3Rh
bCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBDbGFzc2VzIHRoYXQgc3VwcG9ydCBt
dWx0aXBsZSBmcmFtZXMKICAgICAgICAgLy8gd2lsbCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZvciB0
aGUgYW5zd2VyIGlmIHRoZXkgbmVlZCB0byAod2l0aG91dCBuZWNlc3NhcmlseQpAQCAtMTY2LDEx
ICsyMDIsMzkgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShz
aXplX3QgY2xlYXJCZWZvcmVGcmFtZSkgeyB9CiAKICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIC8v
IENhbGxlZCBieSB0aGUgaW1hZ2UgZGVjb2RlcnMgdG8gc2V0IHRoZWlyIGRlY29kZWQgc2l6ZSwg
dGhpcyBhbHNvIGNoZWNrCisgICAgICAgIC8vIHRoZSBzaXplIGZvciB2YWxpZGl0eS4gSXQgd2ls
bCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2l6ZSB3YXMgc2V0LCBvciBmYWxzZQorICAgICAgICAvLyBp
ZiB0aGVyZSBpcyBhbiBlcnJvci4gT24gZXJyb3IsIHRoZSBtX2ZhaWxlZCBmbGFnIHdpbGwgYmUg
c2V0IGFuZCB0aGUKKyAgICAgICAgLy8gY2FsbGVyIHNob3VsZCBpbW1lZGlhdGVseSBzdG9wIGRl
Y29kaW5nLgorICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zaXplID0gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgZGF0YS4KICAgICAgICAgVmVjdG9yPFJH
QkEzMkJ1ZmZlcj4gbV9mcmFtZUJ1ZmZlckNhY2hlOwotICAgICAgICBib29sIG1fc2l6ZUF2YWls
YWJsZTsKICAgICAgICAgbXV0YWJsZSBib29sIG1fZmFpbGVkOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFz
ICJ3aWR0aCAqIGhlaWdodCAqIDQiCisgICAgICAgIC8vIGFuZCByZXR1cm4gaXQgYXMgYSAoc2ln
bmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KKyAgICAgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyB3aWR0aCAqIGhlaWdodCBtdXN0IG5vdCBleGNlZWQgKDIgXiAyOSkgLSAxLCBzbyB0aGF0
IHdlIGRvbid0CisgICAgICAgICAgICAvLyBvdmVyZmxvdyB3aGVuIHdlIG11bHRpcGx5IGJ5IDQu
CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4od2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaGVpZ2h0KTsK
KyAgICAgICAgICAgIHJldHVybiB0b3RhbF9zaXplID4gKCgyNTYgKiAyNTYgKiAyNTYgKiAzMikg
LSAxKTsKKyAgICAgICAgfQorCiAgICAgICAgIEludFNpemUgbV9zaXplOworICAgICAgICBib29s
IG1fc2l6ZUF2YWlsYWJsZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31071</attachid>
            <date>2009-06-08 16:56:45 -0700</date>
            <delta_ts>2009-06-08 17:06:51 -0700</delta_ts>
            <desc>Misc. work, not ready for review, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32652</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IHBuZy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBuZy9QTkdJbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIHBuZy9QTkdJbWFnZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsNiBAQAogI2luY2x1ZGUgInBuZy5oIgogI2lu
Y2x1ZGUgImFzc2VydC5oIgogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJlbW92ZSB3YXJuaW5n
cyBmcm9tIHdhcm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDYxMSkg
Ly8gd2FybmluZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGptcCcgYW5kIEMrKyBv
YmplY3QgZGVzdHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNW
QykKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHYW1tYSBjb25zdGFudHMuCkBAIC0xNDMs
NyArMTM4LDYgQEAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKICAgICA6IG1f
cmVhZGVyKDApCiB7Ci0gICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIH0KIAogUE5H
SW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKQEAgLTE2OSw3ICsxNjMsNyBAQAogYm9v
bCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYg
d2UgaGF2ZSBwZW5kaW5nIGRhdGEgdG8gZGVjb2RlLCBzZW5kIGl0IHRvIHRoZSBQTkcgcmVhZGVy
IG5vdy4KLSAgICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSAmJiBtX3JlYWRlcikgeworICAgIGlmICgh
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBtX3JlYWRlcikgewogICAgICAgICBp
ZiAobV9mYWlsZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3OCw3ICsxNzIs
NyBAQAogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc2l6ZUF2
YWlsYWJsZTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0K
IAogUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpCkBAIC0xODYsNiArMTgwLDkgQEAKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJl
dHVybiAwOwogCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisKICAgICBSR0JBMzJCdWZmZXImIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCiAgICAgICAgIC8vIERlY29kZSB0
aGlzIGZyYW1lLgpAQCAtMjAxLDcgKzE5OCw3IEBACiAKICAgICBtX3JlYWRlci0+ZGVjb2RlKG1f
ZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKICAgICAKLSAgICBpZiAobV9mYWlsZWQgfHwgKG1f
ZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpKSB7CisgICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKSkgewogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CiAgICAgICAgIG1fcmVhZGVy
ID0gMDsKICAgICB9CkBAIC0yMjYsNyArMjIzLDggQEAKICAgICBzdGF0aWNfY2FzdDxQTkdJbWFn
ZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxl
KCk7CiB9CiAKLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpIHsKK3ZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpCit7CiAgICAgbV9mYWlsZWQgPSB0cnVl
OwogfQogCkBAIC0yNDUsOSArMjQzLDEyIEBACiAgICAgfQogICAgIAogICAgIC8vIFdlIGNhbiBm
aWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgIGlm
ICghbV9zaXplQXZhaWxhYmxlKSB7Ci0gICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7Ci0g
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKCFJbWFnZURl
Y29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkgeworICAgICAgICAgICAgLy8gU2l6ZSB1bnJlYXNvbmFibGUsIGJhaWwgb3V0Lgor
ICAgICAgICAgICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgYml0RGVwdGgsIGNvbG9yVHlwZSwgaW50ZXJs
YWNlVHlwZSwgY29tcHJlc3Npb25UeXBlLCBmaWx0ZXJUeXBlLCBjaGFubmVsczsKQEAgLTMxMywx
NSArMzE0LDIzIEBACiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3Mp
CiB7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIC8vIFJlc2l6ZSB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgaW1hZ2Uu
CiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAg
aWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKICAgICAg
ICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRoL2hl
aWdodC4KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzID0gYnVmZmVyLmJ5dGVzKCk7Ci0gICAg
ICAgIGJ5dGVzLnJlc2l6ZShzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CisgICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkp
IHsKKyAgICAgICAgICAgIC8vIEVycm9yIGFsbG9jYXRpbmcgdGhlIGJpdG1hcC4gV2Ugc2hvdWxk
IG5vdCBjb250aW51ZS4KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+
KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRlcigpLT5wbmdQdHIoKSkpLT5kZWNvZGluZ0Zh
aWxlZCgpOworICAgICAgICAgICAgbG9uZ2ptcChyZWFkZXIoKS0+cG5nUHRyKCktPmptcGJ1Ziwg
MSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0SGFz
QWxwaGEoZmFsc2UpOwogCiAgICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZp
bGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwg
MCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwpAQCAtMzg4LDggKzM5Nyw2IEBA
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9
Ci0KLSAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KHJvd0luZGV4ICsgMSk7CiB9CiAKIHZvaWQgcG5n
Q29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKQEAgLTM5OSw2ICs0MDYs
OSBAQAogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogeworICAgIGlmICht
X2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBI
YW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdl
IGVuZGVkIHVwIGJlaW5nIGVtcHR5LgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOwogICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKTsKSW5kZXg6IGdpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGdpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIGdpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAKIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAogewogICAgIC8vIElmIHdlIGhh
dmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgR0lGIHJlYWRlciBub3cu
Ci0gICAgaWYgKCFtX3NpemVBdmFpbGFibGUgJiYgbV9yZWFkZXIpIHsKKyAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgbV9yZWFkZXIpIHsKICAgICAgICAgaWYgKG1f
ZmFpbGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjUsNyArMTI1LDcgQEAK
ICAgICAgICAgZGVjb2RlKEdJRlNpemVRdWVyeSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1f
c2l6ZUF2YWlsYWJsZTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KTsKIH0KIAogLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdp
bGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlcgpAQCAtMjUxLDEwICsyNTEsOSBA
QAogfQogCiAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
Citib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KQogewotICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gc2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2ln
bmVkIGJ5dGVzTGVmdCkKQEAgLTI2Miw3ICsyNjEsNyBAQAogICAgIG1fcmVhZGVyLT5zZXRSZWFk
T2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsKIH0KIAotdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQorYm9vbCBHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogewogICAgIC8v
IEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBJbnRSZWN0IGZy
YW1lUmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQo
KSwKQEAgLTI3OSw3ICsyNzgsMTAgQEAKICAgICAKICAgICBpZiAoZnJhbWVJbmRleCA9PSAwKSB7
CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWlu
ZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KLSAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVm
ZmVyKTsKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBz
dGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFt
ZSdzCiAgICAgICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KQEAgLTMwMiw4ICszMDQsNyBAQAogICAg
ICAgICBpZiAoKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVk
KSB8fAogICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9z
ZUtlZXApKSB7CiAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUg
c3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgICAgICBidWZmZXItPmJ5dGVz
KCkgPSBwcmV2QnVmZmVyLT5ieXRlcygpOwotICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBo
YShwcmV2QnVmZmVyLT5oYXNBbHBoYSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1h
cERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ug
d2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQK
ICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2Yg
dGhlIGZyYW1lLgpAQCAtMzEyLDExICszMTMsMTMgQEAKICAgICAgICAgICAgICAgICB8fCBwcmV2
UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgewogICAgICAg
ICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6
ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNv
bXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZm
ZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZhaWxl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3
aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCi0gICAgICAg
ICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKSA9IHByZXZCdWZmZXItPmJ5dGVzKCk7Ci0gICAgICAgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEocHJldkJ1ZmZlci0+aGFzQWxwaGEoKSk7CisgICAgICAg
ICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkg
ewogICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIGNvbnN0IGN1cnJlbnRSb3cgPQogICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCkgKyAoeSAqIG1fc2l6ZS53aWR0
aCgpKTsKQEAgLTMzNCwxMyArMzM3LDcgQEAKIAogICAgIC8vIFJlc2V0IHRoZSBhbHBoYSBwaXhl
bCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgogICAgIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpwcmVwRW1wdHlGcmFtZUJ1ZmZlcihS
R0JBMzJCdWZmZXIqIGJ1ZmZlcikgY29uc3QKLXsKLSAgICBidWZmZXItPmJ5dGVzKCkucmVzaXpl
KHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBidWZmZXItPmJ5dGVzKCku
ZmlsbCgwKTsKLSAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJh
bWVJbmRleCwKQEAgLTM1Miw4ICszNDksOCBAQAogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZy
YW1lIGlmIG5lY2Vzc2FyeS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpOwor
ICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KICAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3Rh
dGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IHNp
emUoKS5oZWlnaHQoKSkKQEAgLTQwNCwyMSArNDAxLDE3IEBACiAgICAgaWYgKHJlcGVhdENvdW50
ID4gMSkgewogICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRpbWVzLgog
ICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAgICB1bnNpZ25lZCBk
YXRhX3NpemUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOworICAgICAgICB1bnNpZ25lZCBkYXRh
U2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHdpZHRoID0g
c2l6ZSgpLndpZHRoKCk7CiAgICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYnl0ZXMoKS5k
YXRhKCkgKyB3aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgY3VyckRzdCA9IGRzdCAr
IHdpZHRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkr
KykgewogICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQpIC8vIFByb3RlY3QgYWdh
aW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRDb3VudC4KICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIGRhdGFfc2l6
ZSk7CisgICAgICAgICAgICBtZW1jcHkoY3VyckRzdCwgZHN0LCBzaXplKTsKICAgICAgICAgICAg
IGN1cnJEc3QgKz0gd2lkdGg7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBPdXIgcGFydGlh
bCBoZWlnaHQgaXMgcm93TnVtYmVyICsgMSwgZS5nLiwgcm93IDIgaXMgdGhlIDNyZCByb3csIHNv
IHRoYXQncyBhIGhlaWdodCBvZiAzLgotICAgIC8vIEFkZGluZyBpbiByZXBlYXRDb3VudCAtIDEg
dG8gcm93TnVtYmVyICsgMSB3b3JrcyBvdXQgdG8ganVzdCBiZSByb3dOdW1iZXIgKyByZXBlYXRD
b3VudC4KLSAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KHJvd051bWJlciArIHJlcGVhdENvdW50KTsK
IH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQpAQCAtNDI2LDEwICs0MTksOSBAQAogICAgIC8vIEluaXRp
YWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGlu
ZyBmcmFtZXMsCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2Rl
ZFJvdygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9
PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCi0gICAgICAgIGluaXRGcmFtZUJ1ZmZlcihmcmFt
ZUluZGV4KTsKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCisgICAgICAgIHJldHVybjsK
IAotICAgIGJ1ZmZlci5lbnN1cmVIZWlnaHQobV9zaXplLmhlaWdodCgpKTsKICAgICBidWZmZXIu
c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CiAgICAgYnVmZmVyLnNldER1
cmF0aW9uKGZyYW1lRHVyYXRpb24pOwogICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChkaXNw
b3NhbE1ldGhvZCk7CkluZGV4OiBnaWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Z2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDUwMykKKysrIGdpZi9HSUZJbWFnZURl
Y29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICB2b2lkIGRl
Y29kZShHSUZRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpIGNvbnN0OwogCiAgICAgICAgIC8v
IENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgotICAgICAgICB2b2lkIHNpemVOb3dBdmFp
bGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CisgICAgICAgIGJvb2wgc2l6
ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAg
dm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpOwogICAgICAgICB2b2lkIGhh
dmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZl
ciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNw
YXJlbnRQaXhlbHMpOwpAQCAtNzMsMTIgKzczLDkgQEAKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IC8vIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBmcmFtZSBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4g
aW5kZXgsIGJhc2VkIG9uIHRoZQotICAgICAgICAvLyBwcmV2aW91cyBmcmFtZSdzIGRpc3Bvc2Fs
IG1ldGhvZC4KLSAgICAgICAgdm9pZCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRl
eCk7Ci0KLSAgICAgICAgLy8gQSBoZWxwZXIgZm9yIGluaXRGcmFtZUJ1ZmZlcigpLCB0aGlzIHNl
dHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYW5kCi0gICAgICAgIC8vIGZpbGxzIGl0IHdpdGgg
dHJhbnNwYXJlbnQgcGl4ZWxzLgotICAgICAgICB2b2lkIHByZXBFbXB0eUZyYW1lQnVmZmVyKFJH
QkEzMkJ1ZmZlciopIGNvbnN0OworICAgICAgICAvLyBwcmV2aW91cyBmcmFtZSdzIGRpc3Bvc2Fs
IG1ldGhvZC4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9uIGZhaWx1cmUsCisgICAgICAgIC8v
IHRoaXMgd2lsbCBtYXJrIHRoZSBpbWFnZSBhcyBmYWlsZWQuCisgICAgICAgIGJvb2wgaW5pdEZy
YW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpOwogCiAgICAgICAgIGJvb2wgbV9mcmFtZUNv
dW50VmFsaWQ7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGE7CkluZGV4OiBn
aWYvR0lGSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdpZi9HSUZJbWFnZVJlYWRlci5j
cHAJKHJldmlzaW9uIDQ0NTAzKQorKysgZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzExLDkgKzMxMSwxMyBAQAogCiAgICAgICB3aGlsZSAoY29kZSA+PSBjbGVhcl9j
b2RlKQogICAgICAgewotICAgICAgICBpZiAoY29kZSA9PSBwcmVmaXhbY29kZV0pCisgICAgICAg
IGlmIChjb2RlID49IE1BWF9CSVRTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQogICAgICAgICAg
IHJldHVybiAtMTsKIAorICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRz
IGNoYXJhY3RlcnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKKyAgICAgICAgLy8gYWxsb3dp
bmcgY29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3Jt
ZWQKKyAgICAgICAgLy8gZGF0YS4gQXMgbG9uZyBhcyBjb2RlIDwgTUFYX0JJVFMsIHRoZSBvbmx5
IHJpc2sgaXMgYSBnYXJibGVkIGltYWdlLAorICAgICAgICAvLyB3aGljaCBpcyBubyB3b3JzZSB0
aGFuIHJlZnVzaW5nIHRvIGRpc3BsYXkgaXQuCiAgICAgICAgICpzdGFja3ArKyA9IHN1ZmZpeFtj
b2RlXTsKICAgICAgICAgY29kZSA9IHByZWZpeFtjb2RlXTsKIApAQCAtNDQ1LDcgKzQ0OSwxMCBA
QAogICAgIHsKICAgICAgIC8qIEluaXRpYWxpemUgTFpXIHBhcnNlci9kZWNvZGVyICovCiAgICAg
ICBpbnQgZGF0YXNpemUgPSAqcTsKLSAgICAgIGlmIChkYXRhc2l6ZSA+IE1BWF9MWldfQklUUykg
eworICAgICAgLy8gU2luY2Ugd2UgdXNlIGEgY29kZXNpemUgb2YgMSBtb3JlIHRoYW4gdGhlIGRh
dGFzaXplLCB3ZSBuZWVkIHRvIGVuc3VyZQorICAgICAgLy8gdGhhdCBvdXIgZGF0YXNpemUgaXMg
c3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBNQVhfTFpXX0JJVFMgdmFsdWUgKDEyKS4KKyAgICAgIC8v
IFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0bHkgYXQgNDA5
NS4KKyAgICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpIHsKICAgICAgICAgc3RhdGUg
PSBnaWZfZXJyb3I7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtNDY4LDYgKzQ3NSw4IEBA
CiAgICAgICAgIC8qIGluaXQgdGhlIHRhYmxlcyAqLwogICAgICAgICBpZiAoIWZyYW1lX3JlYWRl
ci0+c3VmZml4KQogICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3VmZml4ID0gbmV3IHVuc2lnbmVk
IGNoYXJbTUFYX0JJVFNdOworICAgICAgICAvLyBDbGVhcmluZyB0aGUgd2hvbGUgc3VmZml4IHRh
YmxlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBiYWQgZGF0YS4KKyAgICAgICAgbWVtc2V0
KGZyYW1lX3JlYWRlci0+c3VmZml4LCAwLCBNQVhfQklUUyk7CiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZnJhbWVfcmVhZGVyLT5jbGVhcl9jb2RlOyBpKyspCiAgICAgICAgICAgZnJhbWVf
cmVhZGVyLT5zdWZmaXhbaV0gPSBpOwogCkBAIC01MDgsOCArNTE3LDEwIEBACiAgICAgICBzY3Jl
ZW5faGVpZ2h0ID0gR0VUSU5UMTYocSArIDIpOwogCiAgICAgICAvLyBDQUxMQkFDSzogSW5mb3Jt
IHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAgICAgaWYgKGNsaWVudHB0cikKLSAg
ICAgICAgY2xpZW50cHRyLT5zaXplTm93QXZhaWxhYmxlKHNjcmVlbl93aWR0aCwgc2NyZWVuX2hl
aWdodCk7CisgICAgICBpZiAoY2xpZW50cHRyKSB7CisgICAgICAgIGlmICghY2xpZW50cHRyLT5z
aXplTm93QXZhaWxhYmxlKHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCkpCisgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgfQogICAgICAgCiAgICAgICBzY3JlZW5fYmdjb2xvciA9IHFb
NV07CiAgICAgICBnbG9iYWxfY29sb3JtYXBfc2l6ZSA9IDI8PChxWzRdJjB4MDcpOwpJbmRleDog
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIGpwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDE3ICszOCwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPgogCiBleHRlcm4gIkMiIHsKICNpbmNsdWRlICJqcGVnbGliLmgiCiB9CiAK
LSNpZiBDT01QSUxFUihNU1ZDKQotLy8gUmVtb3ZlIHdhcm5pbmdzIGZyb20gd2FybmluZyBsZXZl
bCA0LgotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0NjExKSAvLyB3YXJuaW5nIEM0NjExOiBp
bnRlcmFjdGlvbiBiZXR3ZWVuICdfc2V0am1wJyBhbmQgQysrIG9iamVjdCBkZXN0cnVjdGlvbiBp
cyBub24tcG9ydGFibGUKLSNlbmRpZiAvLyBDT01QSUxFUihNU1ZDKQotCiAjaW5jbHVkZSA8c2V0
am1wLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIxOSw3ICsyMTMsMTAgQEAKICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TVEFSVF9ERUNPTVBSRVNTOwogCiAgICAgICAgICAg
ICAgICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBh
dmFpbGFibGUuCi0gICAgICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFn
ZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2Rl
Y29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkg
eworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIGlmIChtX2RlY29kaW5nU2l6ZU9ubHkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuIHN0b3AgaGVyZS4KQEAgLTQxNCw3ICs0MTEsNyBAQAogYm9vbCBKUEVHSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUoKSBjb25zdAogewogICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyBk
YXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgSlBFRyByZWFkZXIgbm93LgotICAgIGlmICgh
bV9zaXplQXZhaWxhYmxlICYmIG1fcmVhZGVyKSB7CisgICAgaWYgKCFJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpICYmIG1fcmVhZGVyKSB7CiAgICAgICAgIGlmIChtX2ZhaWxlZCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDIzLDcgKzQyMCw3IEBACiAgICAgICAgIGRl
Y29kZSh0cnVlKTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9zaXplQXZhaWxhYmxlOworICAgIHJl
dHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCiBSR0JBMzJCdWZmZXIq
IEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCkBAIC00
NjMsMTcgKzQ2MCwxOSBAQAogICAgIC8vIFJlc2l6ZSB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBv
ZiB0aGUgaW1hZ2UuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1w
dHkpIHsKLSAgICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3Jy
ZWN0IHdpZHRoL2hlaWdodC4KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzID0gYnVmZmVyLmJ5
dGVzKCk7Ci0gICAgICAgIGJ5dGVzLnJlc2l6ZShzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWln
aHQoKSk7CisgICAgICAgIC8vIExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29y
cmVjdCB3aWR0aC9oZWlnaHQuIFRoaXMgd2lsbAorICAgICAgICAvLyBhbHNvIGluaXRpYWxpemUg
aXQgdG8gdHJhbnNwYXJlbnQuCisgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFVwZGF0
ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgYnVmZmVyLnNl
dFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRI
YXNBbHBoYShmYWxzZSk7CiAKICAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlz
IGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3Qo
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYWxwaGEgKHRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGUgYnVmZmVyIGlz
IGNvbnN0cnVjdGVkKS4KKyAgICAgICAgYnVmZmVyLnNldFJlY3QoSW50UmVjdCgwLCAwLCBzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CiAgICAgfQogCiAgICAganBlZ19kZWNvbXBy
ZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7CkBAIC00OTIsOCArNDkxLDYgQEAK
ICAgICAgICAgICAgIHVuc2lnbmVkIGIgPSAqajErKzsKICAgICAgICAgICAgIFJHQkEzMkJ1ZmZl
cjo6c2V0UkdCQSgqZHN0KyssIHIsIGcsIGIsIDB4RkYpOwogICAgICAgICB9Ci0KLSAgICAgICAg
YnVmZmVyLmVuc3VyZUhlaWdodChpbmZvLT5vdXRwdXRfc2NhbmxpbmUpOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpJbmRleDoganBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ganBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NTAzKQorKysganBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE3ICs1NCwxMSBAQAogCiAgICAg
ICAgIEpQRUdJbWFnZVJlYWRlciogcmVhZGVyKCkgeyByZXR1cm4gbV9yZWFkZXI7IH0KIAotICAg
ICAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fc2l6ZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVz
KCk7CiAgICAgICAgIHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKICAgICBwcml2YXRlOgorICAgICAg
ICBmcmllbmQgY2xhc3MgSlBFR0ltYWdlUmVhZGVyOwogICAgICAgICBtdXRhYmxlIEpQRUdJbWFn
ZVJlYWRlciogbV9yZWFkZXI7CiAgICAgfTsKIApJbmRleDogc2tpYS9HSUZJbWFnZURlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHNraWEvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1
MDMpCisrKyBza2lhL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4
ICsyNzksNyBAQAogICAgIAogICAgIGlmIChmcmFtZUluZGV4ID09IDApIHsKICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2
aW91cyBkYXRhLgotICAgICAgICBpZiAoIXByZXBFbXB0eUZyYW1lQnVmZmVyKGJ1ZmZlcikpIHsK
LSAgICAgICAgICAgIGJ1ZmZlci0+c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSk7CisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCku
aGVpZ2h0KCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTMwNywxMCArMzA2LDYgQEAKICAgICAgICAgICAg
ICAgICAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSkgewogICAgICAg
ICAgICAgLy8gUHJlc2VydmUgdGhlIGxhc3QgZnJhbWUgYXMgdGhlIHN0YXJ0aW5nIHN0YXRlIGZv
ciB0aGlzIGZyYW1lLgogICAgICAgICAgICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1
ZmZlcik7Ci0gICAgICAgICAgICAvLyBUaGlzIG5leHQgbGluZSBpc24ndCBjdXJyZW50bHkgbmVj
ZXNzYXJ5IHNpbmNlIHRoZSBhbHBoYSBzdGF0ZSBpcwotICAgICAgICAgICAgLy8gY3VycmVudGx5
IGNhcnJpZWQgYWxvbmcgaW4gdGhlIFNraWEgYml0bWFwIGRhdGEsIGJ1dCBpdCdzIHNhZmUsCi0g
ICAgICAgICAgICAvLyBmdXR1cmUtcHJvb2YsIGFuZCBwYXJhbGxlbCB0byB0aGUgQ2Fpcm8gY29k
ZS4KLSAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEocHJldkJ1ZmZlci0+aGFzQWxwaGEo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRo
ZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8g
YWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCkBAIC0z
MTksMTYgKzMxNCwxNiBAQAogICAgICAgICAgICAgICAgIHx8IHByZXZSZWN0LmNvbnRhaW5zKElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xl
YXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQog
ICAgICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBp
bWFnZS4KLSAgICAgICAgICAgICAgICBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCku
aGVpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1
ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KICAgICAgICAgICAgICAgYnVmZmVyLT5j
b3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICAgIC8vIFVubmVjZXNzYXJ5
IChidXQgc2FmZSk7IHNlZSBjb21tZW50cyBvbiB0aGUgc2ltaWxhciBjYWxsIGFib3ZlLgotICAg
ICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHByZXZCdWZmZXItPmhhc0FscGhhKCkpOwot
ICAgICAgICAgICAgICBTa0JpdG1hcCYgYml0bWFwID0gYnVmZmVyLT5iaXRtYXAoKTsKICAgICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0LnkoKTsgeSA8IHByZXZSZWN0LmJvdHRvbSgp
OyArK3kpIHsKICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7IHgg
PCBwcmV2UmVjdC5yaWdodCgpOyArK3gpCi0gICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5z
ZXRSR0JBKGJpdG1hcC5nZXRBZGRyMzIoeCwgeSksIDAsIDAsIDAsIDApOworICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAwKSAmJiAocHJldlJl
Y3QuaGVpZ2h0KCkgPiAwKSkKICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEo
dHJ1ZSk7CkBAIC0zNDQsMTcgKzMzOSw2IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjpwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JBMzJCdWZmZXIqIGJ1ZmZl
cikgY29uc3QKLXsKLSAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRoaXMgbmV4dCBs
aW5lIGlzbid0IGN1cnJlbnRseSBuZWNlc3Nhcnkgc2luY2UgU2tpYSdzIGVyYXNlQVJHQigpIHNl
dHMKLSAgICAvLyB0aGlzIGZvciB1cywgYnV0IHdlIGRvIGl0IGZvciBzaW1pbGFyIHJlYXNvbnMg
dG8gdGhlIHNldEhhc0FscGhhKCkgY2FsbHMKLSAgICAvLyBpbiBpbml0RnJhbWVCdWZmZXIoKSBh
Ym92ZS4KLSAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJ
bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
KiByb3dCdWZmZXIsICAgLy8gUG9pbnRlciB0byBzaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1
ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IHJvd0VuZCwKQEAgLTQxNiwxNCArNDAwLDE0IEBACiAgICAgaWYgKHJlcGVhdENvdW50ID4gMSkg
ewogICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRpbWVzLgogICAgICAg
ICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAgICB1bnNpZ25lZCBkYXRhX3Np
emUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOworICAgICAgICB1bnNpZ25lZCBkYXRhU2l6ZSA9
IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHdpZHRoID0gc2l6ZSgp
LndpZHRoKCk7CiAgICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYml0bWFwKCkuZ2V0QWRk
cjMyKDAsIDApICsgd2lkdGggKiBzaXplKCkuaGVpZ2h0KCk7CiAgICAgICAgIGN1cnJEc3QgPSBk
c3QgKyB3aWR0aDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlcGVhdENvdW50
OyBpKyspIHsKICAgICAgICAgICAgIGlmIChjdXJyRHN0ICsgbnVtID4gZW5kKSAvLyBQcm90ZWN0
IGFnYWluc3QgYSBidWZmZXIgb3ZlcnJ1biBmcm9tIGEgYm9ndXMgcmVwZWF0Q291bnQuCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtZW1jcHkoY3VyckRzdCwgZHN0LCBkYXRh
X3NpemUpOworICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgc2l6ZSk7CiAgICAgICAg
ICAgICBjdXJyRHN0ICs9IHdpZHRoOwogICAgICAgICB9CiAgICAgfQpJbmRleDogc2tpYS9HSUZJ
bWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBza2lhL0dJRkltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiA0NDUwMykKKysrIHNraWEvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDEwICs3OCw2IEBACiAgICAgICAgIC8vIHRoaXMgd2lsbCBtYXJrIHRoZSBpbWFnZSBhcyBm
YWlsZWQuCiAgICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgp
OwogCi0gICAgICAgIC8vIEEgaGVscGVyIGZvciBpbml0RnJhbWVCdWZmZXIoKSwgdGhpcyBzZXRz
IHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGFuZAotICAgICAgICAvLyBmaWxscyBpdCB3aXRoIHRy
YW5zcGFyZW50IHBpeGVscy4KLSAgICAgICAgYm9vbCBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihSR0JB
MzJCdWZmZXIqKSBjb25zdDsKLQogICAgICAgICBib29sIG1fZnJhbWVDb3VudFZhbGlkOwogICAg
ICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBt
X3JlcGV0aXRpb25Db3VudDsKSW5kZXg6IHNraWEvQk1QSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBza2lhL0JNUEltYWdlUmVhZGVyLmgJKHJldmlzaW9uIDQ0NTAzKQorKysgc2tpYS9CTVBJ
bWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsOSArMjUxLDcgQEAKICAgICAgICAg
Ly8gTGlrZSBzZXRJKCksIGJ1dCB3aXRoIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudCB2YWx1ZXMg
c3BlY2lmaWVkLgogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKHVuc2lnbmVkIHJlZCwgdW5z
aWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIGFscGhhKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBSR0JBMzJCdWZmZXI6OnNldFJHQkEoCi0gICAgICAgICAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLmZpcnN0KCkuYml0bWFwKCkuZ2V0QWRkcjMyKG1fY29vcmQueCgpLCBtX2Nv
b3JkLnkoKSksCi0gICAgICAgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAg
ICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0UkdCQShtX2Nvb3JkLngoKSwg
bV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgICAgIG1fY29v
cmQubW92ZSgxLCAwKTsKICAgICAgICAgfQogCkluZGV4OiBza2lhL1BOR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gc2tpYS9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUw
MykKKysrIHNraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcg
KzIyNCw4IEBACiAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9n
cmVzc2l2ZV9wdHIocG5nKSktPmhlYWRlckF2YWlsYWJsZSgpOwogfQogCi12b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZGVjb2RpbmdGYWlsZWQoKSB7Cit2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2Rp
bmdGYWlsZWQoKQorewogICAgIG1fZmFpbGVkID0gdHJ1ZTsKIH0KIApAQCAtMzMwLDYgKzMzMSw3
IEBACiAKICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBs
ZXRlLgogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFs
KTsKKyAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKIAogICAgICAgICAvLyBGb3Ig
UE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgogICAgICAgICBi
dWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKTsKSW5kZXg6IHNraWEvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2tpYS9JbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gNDQ1MDMpCisrKyBza2lhL0ltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsOCArMTI4LDExIEBACiAgICAgICAgICAgICAvLyBvdGhlcndpc2Uu
CiAgICAgICAgICAgICBBU1NFUlQobV9iaXRtYXAud2lkdGgoKSA9PSAwICYmIG1fYml0bWFwLmhl
aWdodCgpID09IDApOwogICAgICAgICAgICAgbV9iaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZywgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICBpZiAoIW1fYml0
bWFwLmFsbG9jUGl4ZWxzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxs
b2NhdGlvbiBmYWlsdXJlLCBtYXliZSB0aGUgYml0bWFwIHdhcyB0b28gYmlnLgorICAgICAgICAg
ICAgaWYgKCFtX2JpdG1hcC5hbGxvY1BpeGVscygpKSB7CisgICAgICAgICAgICAgICAgLy8gQWxs
b2NhdGlvbiBmYWlsdXJlLCBtYXliZSB0aGUgYml0bWFwIHdhcyB0b28gYmlnLgorICAgICAgICAg
ICAgICAgIHNldFN0YXR1cyhGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBpbWFnZS4K
ICAgICAgICAgICAgIG1fYml0bWFwLmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKQEAgLTI3MiwyMiAr
Mjc1LDE1IEBACiAgICAgICAgIG11dGFibGUgYm9vbCBtX2ZhaWxlZDsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIG1ha2Ugc3VyZSB0aGUgaW1h
Z2UgaXMgbm90IHRvbyBsYXJnZS4gVmVyeQotICAgICAgICAvLyBsYXJnZSBpbWFnZXMsIGV2ZW4g
aWYgdGhlIGFsbG9jYXRpb24gc3VjY2VlZHMsIGNhbiB0YWtlIGEgdmVyeSBsb25nIHRpbWUKLSAg
ICAgICAgLy8gdG8gcHJvY2VzcywgZ2l2aW5nIHRoZSBhcHBlYXJhbmNlIG9mIGEgRG9TLgotICAg
ICAgICAvLwotICAgICAgICAvLyBXZWJLaXQgYWxzbyBzZWVtcyB0byBsaWtlIHRvIGFzayBmb3Ig
dGhlIHNpemUgYmVmb3JlIGRhdGEgaXMgYXZhaWxhYmxlCi0gICAgICAgIC8vIGFuZCBpbiBzb21l
IGNhc2VzIHdoZW4gdGhlIGZhaWxlZCBmbGFnIGlzIHNldC4gU29tZSBvZiB0aGVzZSBjb2RlIHBh
dGhzCi0gICAgICAgIC8vIHN1Y2ggYXMgQml0bWFwSW1hZ2U6OnJlc2V0QW5pbWF0aW9uIHRoZW4g
Y29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UKLSAgICAgICAgLy8gYmFzZWQgb24gdGhlIHdp
ZHRoIGFuZCBoZWlnaHQuIEJlY2F1c2Ugb2YgdGhpcywgb3VyIHRvdGFsIGNvbXB1dGVkIGltYWdl
Ci0gICAgICAgIC8vIGJ5dGUgc2l6ZSBtdXN0IG5ldmVyIG92ZXJmbG93IGFuIGludC4KKyAgICAg
ICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFzICJ3
aWR0aCAqIGhlaWdodCAqIDQiCisgICAgICAgIC8vIGFuZCByZXR1cm4gaXQgYXMgYSAoc2lnbmVk
KSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KICAgICAgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6ZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgICAgICB7CisgICAgICAgICAgICAv
LyB3aWR0aCAqIGhlaWdodCBtdXN0IG5vdCBleGNlZWQgKDIgXiAyOSkgLSAxLCBzbyB0aGF0IHdl
IGRvbid0CisgICAgICAgICAgICAvLyBvdmVyZmxvdyB3aGVuIHdlIG11bHRpcGx5IGJ5IDQuCiAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4od2lkdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaGVpZ2h0KTsKLSAg
ICAgICAgICAgIGlmICh0b3RhbF9zaXplID4gMzIgKiAxMDI0ICogMTAyNCkgIC8vIDMyTSA9IDEy
OE1CIG1lbW9yeSB0b3RhbCAoMzIgYnBwKS4KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0b3RhbF9zaXpl
ID4gKCgyNTYgKiAyNTYgKiAyNTYgKiAzMikgLSAxKTsKICAgICAgICAgfQogCiAgICAgICAgIElu
dFNpemUgbV9zaXplOwpJbmRleDogc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBza2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIHNraWEv
SlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NSwxNyArNDY1LDE1IEBA
CiAgICAgICAgIC8vIGFsc28gaW5pdGlhbGl6ZSBpdCB0byB0cmFuc3BhcmVudC4KICAgICAgICAg
aWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewog
ICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnVmZmVyLnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlh
bGx5IGNvbXBsZXRlLgogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJh
bWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKIAogICAgICAg
ICAvLyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4K
ICAgICAgICAgYnVmZmVyLnNldFJlY3QoSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbHBoYSAodGhpcyBp
cyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBidWZmZXIgaXMgY29uc3RydWN0ZWQpLgogICAgIH0KIAog
ICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpJbmRl
eDogc2tpYS9YQk1JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNraWEvWEJNSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1MDMpCisrKyBza2lhL1hCTUltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDYgQEAKICAgICAgICAgZnJhbWUuc3RhdHVzKCkg
PT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIGlmICghZnJhbWUuc2V0U2l6
ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewogICAgICAgICAgICAgbV9mYWls
ZWQgPSB0cnVlOwotICAgICAgICAgICAgZnJhbWUuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJh
bWVDb21wbGV0ZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBm
cmFtZS5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwpJbmRleDogSW1hZ2VE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NTAzKQor
KysgSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNs
dWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01Miw4ICs1NCw3IEBACiAgICAgICAgIH07CiAKICAgICAgICAgUkdCQTMyQnVm
ZmVyKCkKLSAgICAgICAgICAgIDogbV9oZWlnaHQoMCkKLSAgICAgICAgICAgICwgbV9zdGF0dXMo
RnJhbWVFbXB0eSkKKyAgICAgICAgICAgIDogbV9zdGF0dXMoRnJhbWVFbXB0eSkKICAgICAgICAg
ICAgICwgbV9kdXJhdGlvbigwKQogICAgICAgICAgICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bv
c2VOb3RTcGVjaWZpZWQpCiAgICAgICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCkBAIC02OSwx
NyArNzAsNDIgQEAKICAgICAgICAgICAvLyBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRl
ci4KICAgICAgICAgfQogCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBj
b3B5IG9mIHRoZSBpbWFnZSBkYXRhIGluIHxvdGhlcnwsIHNvIHRoZQorICAgICAgICAvLyB0d28g
aW1hZ2VzIGNhbiBiZSBtb2RpZmllZCBpbmRlcGVuZGVudGx5LgorICAgICAgICB2b2lkIGNvcHlC
aXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIG1fYnl0ZXMgPSBvdGhlci5tX2J5dGVzOworICAgICAgICAgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBSR0JBMzJBcnJh
eSYgYnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzOyB9CiAgICAgICAgIFJHQkEzMkFycmF5
JiBieXRlcygpIHsgcmV0dXJuIG1fYnl0ZXM7IH0KKworICAgICAgICAvLyBNdXN0IGJlIGNhbGxl
ZCBiZWZvcmUgYW55IHBpeGVscyBhcmUgd3JpdHRlbi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgorICAg
ICAgICAvLyBzdWNjZXNzLCBmYWxzZSBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCisg
ICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2NhdGlv
biBmYWlsdXJlIGlmIHRoZQorICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHNpemUgd2FzIHRvbyBi
aWcuLi4KKyAgICAgICAgICAgIG1fYnl0ZXMucmVzaXplKHdpZHRoICogaGVpZ2h0KTsKKworICAg
ICAgICAgICAgLy8gQ2xlYXIgdGhlIGltYWdlLgorICAgICAgICAgICAgbV9ieXRlcy5maWxsKDAp
OworICAgICAgICAgICAgbV9oYXNBbHBoYSA9IHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQotICAgICAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2hlaWdodDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVy
biBtX3N0YXR1czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhv
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KICAgICAgICAgYm9vbCBoYXNB
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KIAogICAgICAgICB2b2lkIHNldFJl
Y3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3JlY3QgPSByOyB9Ci0gICAgICAgIHZvaWQgZW5zdXJl
SGVpZ2h0KHVuc2lnbmVkIHJvd0luZGV4KSB7IGlmIChyb3dJbmRleCA+IG1faGVpZ2h0KSBtX2hl
aWdodCA9IHJvd0luZGV4OyB9CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHMp
IHsgbV9zdGF0dXMgPSBzOyB9CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVy
YXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9z
YWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9
IG1ldGhvZDsgfQpAQCAtMTA2LDcgKzEzMiw2IEBACiAgICAgICAgIEludFJlY3QgbV9yZWN0OyAg
ICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUg
b3ZlcmFsbCBidWZmZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
YWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBvcmlnaW5hbCByZWN0IHdhcyBzbWFs
bGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KLSAgICAgICAgdW5zaWduZWQgbV9oZWln
aHQ7IC8vIFRoZSBoZWlnaHQgKHRoZSBudW1iZXIgb2Ygcm93cyB3ZSd2ZSBmdWxseSBkZWNvZGVk
KS4KICAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMg
ZnJhbWUgaXMgY29tcGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4KICAgICAgICAgdW5zaWduZWQg
bV9kdXJhdGlvbjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KICAgICAgICAgRnJhbWVEaXNwb3Nh
bE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdz
IGRhdGEgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCkBAIC0xMTksMTEgKzE0NCwx
MSBAQAogICAgIGNsYXNzIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgogICAgICAgICBJbWFn
ZURlY29kZXIoKQotICAgICAgICAgICAgOiBtX3NpemVBdmFpbGFibGUoZmFsc2UpCi0gICAgICAg
ICAgICAsIG1fZmFpbGVkKGZhbHNlKQorICAgICAgICAgICAgOiBtX2ZhaWxlZChmYWxzZSkKKyAg
ICAgICAgICAgICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkge30KIAogICAgICAg
ICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBh
biB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBlLgpAQCAtMTMyLDExICsxNTcsMjIgQEAKICAg
ICAgICAgLy8gQWxsIHNwZWNpZmljIGRlY29kZXIgcGx1Z2lucyBtdXN0IGRvIHNvbWV0aGluZyB3
aXRoIHRoZSBkYXRhIHRoZXkgYXJlIGdpdmVuLgogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSB7IG1fZGF0YSA9IGRh
dGE7IH0KIAotICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBo
YXMgYmVlbiBkZWNvZGVkIHlldC4KLSAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJs
ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3Jt
YXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuIFRoaXMgZGVmYXVsdAorICAgICAgICAvLyBpbXBs
ZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBoYXMgYmVlbiBzZXQgYW5k
IHdlIGhhdmUgbm90CisgICAgICAgIC8vIHNlZW4gYSBmYWlsdXJlLiBEZWNvZGVycyBtYXkgd2Fu
dCB0byBvdmVycmlkZSB0aGlzIHRvIGxhemlseSBkZWNvZGUKKyAgICAgICAgLy8gZW5vdWdoIG9m
IHRoZSBpbWFnZSB0byBnZXQgdGhlIHNpemUuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVB
dmFpbGFibGUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIW1fZmFpbGVk
ICYmIG1fc2l6ZUF2YWlsYWJsZTsgCisgICAgICAgIH0KIAogICAgICAgICAvLyBSZXF1ZXN0cyB0
aGUgc2l6ZS4KLSAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICAvLyBSZXF1ZXN0aW5nIHRoZSBzaXplIG9mIGFuIGludmFsaWQgYml0bWFw
IGlzIG1lYW5pbmdsZXNzLgorICAgICAgICAgICAgQVNTRVJUKCFtX2ZhaWxlZCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9zaXplOworICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIHRvdGFsIG51
bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0IG11bHRp
cGxlIGZyYW1lcwogICAgICAgICAvLyB3aWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBh
bnN3ZXIgaWYgdGhleSBuZWVkIHRvICh3aXRob3V0IG5lY2Vzc2FyaWx5CkBAIC0xNjYsMTEgKzIw
MiwzOSBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCBjbGVhckJlZm9yZUZyYW1lKSB7IH0KIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgLy8gQ2Fs
bGVkIGJ5IHRoZSBpbWFnZSBkZWNvZGVycyB0byBzZXQgdGhlaXIgZGVjb2RlZCBzaXplLCB0aGlz
IGFsc28gY2hlY2sKKyAgICAgICAgLy8gdGhlIHNpemUgZm9yIHZhbGlkaXR5LiBJdCB3aWxsIHJl
dHVybiB0cnVlIGlmIHRoZSBzaXplIHdhcyBzZXQsIG9yIGZhbHNlCisgICAgICAgIC8vIGlmIHRo
ZXJlIGlzIGFuIGVycm9yLiBPbiBlcnJvciwgdGhlIG1fZmFpbGVkIGZsYWcgd2lsbCBiZSBzZXQg
YW5kIHRoZQorICAgICAgICAvLyBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgZGVjb2Rp
bmcuCisgICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkg
eworICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gbV9kYXRhOyAvLyBUaGUgZW5jb2RlZCBkYXRhLgogICAgICAgICBWZWN0b3I8UkdCQTMy
QnVmZmVyPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7Ci0gICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxl
OwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9mYWlsZWQ7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndp
ZHRoICogaGVpZ2h0ICogNCIKKyAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQp
IGludC4gIEF2b2lkIG92ZXJmbG93LgorICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IHdpZHRoICogaGVpZ2h0IG11c3Qgbm90IGV4Y2VlZCAoMiBeIDI5KSAtIDEsIHNvIHRoYXQgd2Ug
ZG9uJ3QKKyAgICAgICAgICAgIC8vIG92ZXJmbG93IHdoZW4gd2UgbXVsdGlwbHkgYnkgNC4KKyAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPih3aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOworICAg
ICAgICAgICAgcmV0dXJuIHRvdGFsX3NpemUgPiAoKDI1NiAqIDI1NiAqIDI1NiAqIDMyKSAtIDEp
OworICAgICAgICB9CisKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIGJvb2wgbV9z
aXplQXZhaWxhYmxlOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31072</attachid>
            <date>2009-06-08 17:06:51 -0700</date>
            <delta_ts>2009-06-09 16:49:25 -0700</delta_ts>
            <desc>Misc. work, not ready for review, v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32660</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IHBuZy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBuZy9QTkdJbWFn
ZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIHBuZy9QTkdJbWFnZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsNiBAQAogI2luY2x1ZGUgInBuZy5oIgogI2lu
Y2x1ZGUgImFzc2VydC5oIgogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJlbW92ZSB3YXJuaW5n
cyBmcm9tIHdhcm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDYxMSkg
Ly8gd2FybmluZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGptcCcgYW5kIEMrKyBv
YmplY3QgZGVzdHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNW
QykKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHYW1tYSBjb25zdGFudHMuCkBAIC0xNDMs
NyArMTM4LDYgQEAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKICAgICA6IG1f
cmVhZGVyKDApCiB7Ci0gICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIH0KIAogUE5H
SW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKQEAgLTE2OSw3ICsxNjMsNyBAQAogYm9v
bCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYg
d2UgaGF2ZSBwZW5kaW5nIGRhdGEgdG8gZGVjb2RlLCBzZW5kIGl0IHRvIHRoZSBQTkcgcmVhZGVy
IG5vdy4KLSAgICBpZiAoIW1fc2l6ZUF2YWlsYWJsZSAmJiBtX3JlYWRlcikgeworICAgIGlmICgh
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBtX3JlYWRlcikgewogICAgICAgICBp
ZiAobV9mYWlsZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3OCw3ICsxNzIs
NyBAQAogICAgICAgICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc2l6ZUF2
YWlsYWJsZTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0K
IAogUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpCkBAIC0xODYsNiArMTgwLDkgQEAKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJl
dHVybiAwOwogCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisKICAgICBSR0JBMzJCdWZmZXImIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCiAgICAgICAgIC8vIERlY29kZSB0
aGlzIGZyYW1lLgpAQCAtMjAxLDcgKzE5OCw3IEBACiAKICAgICBtX3JlYWRlci0+ZGVjb2RlKG1f
ZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKICAgICAKLSAgICBpZiAobV9mYWlsZWQgfHwgKG1f
ZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpKSB7CisgICAgaWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSAmJiBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKSkgewogICAgICAgICBkZWxldGUgbV9yZWFkZXI7CiAgICAgICAgIG1fcmVhZGVy
ID0gMDsKICAgICB9CkBAIC0yMjYsNyArMjIzLDggQEAKICAgICBzdGF0aWNfY2FzdDxQTkdJbWFn
ZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxl
KCk7CiB9CiAKLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpIHsKK3ZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpCit7CiAgICAgbV9mYWlsZWQgPSB0cnVl
OwogfQogCkBAIC0yNDUsOSArMjQzLDEyIEBACiAgICAgfQogICAgIAogICAgIC8vIFdlIGNhbiBm
aWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgIGlm
ICghbV9zaXplQXZhaWxhYmxlKSB7Ci0gICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7Ci0g
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaWYgKCFJbWFnZURl
Y29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkgeworICAgICAgICAgICAgLy8gU2l6ZSB1bnJlYXNvbmFibGUsIGJhaWwgb3V0Lgor
ICAgICAgICAgICAgbG9uZ2ptcChwbmctPmptcGJ1ZiwgMSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgYml0RGVwdGgsIGNvbG9yVHlwZSwgaW50ZXJs
YWNlVHlwZSwgY29tcHJlc3Npb25UeXBlLCBmaWx0ZXJUeXBlLCBjaGFubmVsczsKQEAgLTMxMywx
NSArMzE0LDIzIEBACiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3Mp
CiB7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIC8vIFJlc2l6ZSB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgaW1hZ2Uu
CiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAg
aWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKICAgICAg
ICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0IHdpZHRoL2hl
aWdodC4KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzID0gYnVmZmVyLmJ5dGVzKCk7Ci0gICAg
ICAgIGJ5dGVzLnJlc2l6ZShzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSk7CisgICAg
ICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkp
IHsKKyAgICAgICAgICAgIC8vIEVycm9yIGFsbG9jYXRpbmcgdGhlIGJpdG1hcC4gV2Ugc2hvdWxk
IG5vdCBjb250aW51ZS4KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFBOR0ltYWdlRGVjb2Rlcio+
KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHJlYWRlcigpLT5wbmdQdHIoKSkpLT5kZWNvZGluZ0Zh
aWxlZCgpOworICAgICAgICAgICAgbG9uZ2ptcChyZWFkZXIoKS0+cG5nUHRyKCktPmptcGJ1Ziwg
MSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUg
b3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0SGFz
QWxwaGEoZmFsc2UpOwogCiAgICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZp
bGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwg
MCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwpAQCAtMzg4LDggKzM5Nyw2IEBA
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9
Ci0KLSAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KHJvd0luZGV4ICsgMSk7CiB9CiAKIHZvaWQgcG5n
Q29tcGxldGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKQEAgLTM5OSw2ICs0MDYs
OSBAQAogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUoKQogeworICAgIGlmICht
X2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBI
YW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdl
IGVuZGVkIHVwIGJlaW5nIGVtcHR5LgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOwogICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKTsKSW5kZXg6IGdpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGdpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIGdpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAKIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAogewogICAgIC8vIElmIHdlIGhh
dmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgR0lGIHJlYWRlciBub3cu
Ci0gICAgaWYgKCFtX3NpemVBdmFpbGFibGUgJiYgbV9yZWFkZXIpIHsKKyAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgbV9yZWFkZXIpIHsKICAgICAgICAgaWYgKG1f
ZmFpbGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjUsNyArMTI1LDcgQEAK
ICAgICAgICAgZGVjb2RlKEdJRlNpemVRdWVyeSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1f
c2l6ZUF2YWlsYWJsZTsKKyAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KTsKIH0KIAogLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdp
bGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlcgpAQCAtMjUxLDEwICsyNTEsOSBA
QAogfQogCiAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
Citib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KQogewotICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gc2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2ln
bmVkIGJ5dGVzTGVmdCkKQEAgLTI2Miw3ICsyNjEsNyBAQAogICAgIG1fcmVhZGVyLT5zZXRSZWFk
T2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0KTsKIH0KIAotdm9pZCBHSUZJbWFnZURl
Y29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQorYm9vbCBHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogewogICAgIC8v
IEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3VyIGJ1ZmZlci4KICAgICBJbnRSZWN0IGZy
YW1lUmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQo
KSwKQEAgLTI3OSw3ICsyNzgsMTAgQEAKICAgICAKICAgICBpZiAoZnJhbWVJbmRleCA9PSAwKSB7
CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWlu
ZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KLSAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVm
ZmVyKTsKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBz
dGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFt
ZSdzCiAgICAgICAgIC8vIGRpc3Bvc2FsIG1ldGhvZC4KQEAgLTMwMiw4ICszMDQsNyBAQAogICAg
ICAgICBpZiAoKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVk
KSB8fAogICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9z
ZUtlZXApKSB7CiAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBmcmFtZSBhcyB0aGUg
c3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgICAgICBidWZmZXItPmJ5dGVz
KCkgPSBwcmV2QnVmZmVyLT5ieXRlcygpOwotICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBo
YShwcmV2QnVmZmVyLT5oYXNBbHBoYSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1h
cERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ug
d2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQK
ICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2Yg
dGhlIGZyYW1lLgpAQCAtMzEyLDExICszMTMsMTMgQEAKICAgICAgICAgICAgICAgICB8fCBwcmV2
UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgewogICAgICAg
ICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6
ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNv
bXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZm
ZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZhaWxl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3
aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCi0gICAgICAg
ICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKSA9IHByZXZCdWZmZXItPmJ5dGVzKCk7Ci0gICAgICAgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEocHJldkJ1ZmZlci0+aGFzQWxwaGEoKSk7CisgICAgICAg
ICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkg
ewogICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIGNvbnN0IGN1cnJlbnRSb3cgPQogICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCkgKyAoeSAqIG1fc2l6ZS53aWR0
aCgpKTsKQEAgLTMzNCwxMyArMzM3LDcgQEAKIAogICAgIC8vIFJlc2V0IHRoZSBhbHBoYSBwaXhl
bCB0cmFja2VyIGZvciB0aGlzIGZyYW1lLgogICAgIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0g
ZmFsc2U7Ci19Ci0KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpwcmVwRW1wdHlGcmFtZUJ1ZmZlcihS
R0JBMzJCdWZmZXIqIGJ1ZmZlcikgY29uc3QKLXsKLSAgICBidWZmZXItPmJ5dGVzKCkucmVzaXpl
KHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKLSAgICBidWZmZXItPmJ5dGVzKCku
ZmlsbCgwKTsKLSAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJh
bWVJbmRleCwKQEAgLTM1Miw4ICszNDksOCBAQAogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZy
YW1lIGlmIG5lY2Vzc2FyeS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpOwor
ICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KICAgICBpZiAocm93QnVmZmVyID09IDAgfHwgc3Rh
dGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IHNp
emUoKS5oZWlnaHQoKSkKQEAgLTQwNCwyMSArNDAxLDE3IEBACiAgICAgaWYgKHJlcGVhdENvdW50
ID4gMSkgewogICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRpbWVzLgog
ICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAgICB1bnNpZ25lZCBk
YXRhX3NpemUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOworICAgICAgICB1bnNpZ25lZCBkYXRh
U2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CiAgICAgICAgIHVuc2lnbmVkIHdpZHRoID0g
c2l6ZSgpLndpZHRoKCk7CiAgICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYnl0ZXMoKS5k
YXRhKCkgKyB3aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsKICAgICAgICAgY3VyckRzdCA9IGRzdCAr
IHdpZHRoOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVwZWF0Q291bnQ7IGkr
KykgewogICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQpIC8vIFByb3RlY3QgYWdh
aW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRDb3VudC4KICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIGRhdGFfc2l6
ZSk7CisgICAgICAgICAgICBtZW1jcHkoY3VyckRzdCwgZHN0LCBkYXRhU2l6ZSk7CiAgICAgICAg
ICAgICBjdXJyRHN0ICs9IHdpZHRoOwogICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gT3VyIHBh
cnRpYWwgaGVpZ2h0IGlzIHJvd051bWJlciArIDEsIGUuZy4sIHJvdyAyIGlzIHRoZSAzcmQgcm93
LCBzbyB0aGF0J3MgYSBoZWlnaHQgb2YgMy4KLSAgICAvLyBBZGRpbmcgaW4gcmVwZWF0Q291bnQg
LSAxIHRvIHJvd051bWJlciArIDEgd29ya3Mgb3V0IHRvIGp1c3QgYmUgcm93TnVtYmVyICsgcmVw
ZWF0Q291bnQuCi0gICAgYnVmZmVyLmVuc3VyZUhlaWdodChyb3dOdW1iZXIgKyByZXBlYXRDb3Vu
dCk7CiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZy
YW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKQEAgLTQyNiwxMCArNDE5LDkgQEAKICAgICAvLyBJ
bml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuICBTb21lIEdJRnMgaW5zZXJ0IGRvLW5v
dGhpbmcgZnJhbWVzLAogICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgbmV2ZXIgcmVhY2ggaGF2ZURl
Y29kZWRSb3coKSBiZWZvcmUgZ2V0dGluZyBoZXJlLgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVy
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmIChidWZmZXIuc3RhdHVz
KCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQotICAgICAgICBpbml0RnJhbWVCdWZmZXIo
ZnJhbWVJbmRleCk7CisgICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpG
cmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQorICAgICAgICByZXR1
cm47CiAKLSAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgYnVm
ZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwogICAgIGJ1ZmZlci5z
ZXREdXJhdGlvbihmcmFtZUR1cmF0aW9uKTsKICAgICBidWZmZXIuc2V0RGlzcG9zYWxNZXRob2Qo
ZGlzcG9zYWxNZXRob2QpOwpJbmRleDogZ2lmL0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGdpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQ1MDMpCisrKyBnaWYvR0lGSW1h
Z2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgdm9p
ZCBkZWNvZGUoR0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKSBjb25zdDsKIAogICAgICAg
ICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLSAgICAgICAgdm9pZCBzaXplTm93
QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworICAgICAgICBib29s
IHNpemVOb3dBdmFpbGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAgICAg
ICAgIHZvaWQgZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsKICAgICAgICAgdm9p
ZCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dC
dWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRy
YW5zcGFyZW50UGl4ZWxzKTsKQEAgLTczLDEyICs3Myw5IEBACiAKICAgICBwcml2YXRlOgogICAg
ICAgICAvLyBDYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZnJhbWUgYnVmZmVyIHdpdGggdGhlIGdp
dmVuIGluZGV4LCBiYXNlZCBvbiB0aGUKLSAgICAgICAgLy8gcHJldmlvdXMgZnJhbWUncyBkaXNw
b3NhbCBtZXRob2QuCi0gICAgICAgIHZvaWQgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1l
SW5kZXgpOwotCi0gICAgICAgIC8vIEEgaGVscGVyIGZvciBpbml0RnJhbWVCdWZmZXIoKSwgdGhp
cyBzZXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGFuZAotICAgICAgICAvLyBmaWxscyBpdCB3
aXRoIHRyYW5zcGFyZW50IHBpeGVscy4KLSAgICAgICAgdm9pZCBwcmVwRW1wdHlGcmFtZUJ1ZmZl
cihSR0JBMzJCdWZmZXIqKSBjb25zdDsKKyAgICAgICAgLy8gcHJldmlvdXMgZnJhbWUncyBkaXNw
b3NhbCBtZXRob2QuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLAorICAgICAg
ICAvLyB0aGlzIHdpbGwgbWFyayB0aGUgaW1hZ2UgYXMgZmFpbGVkLgorICAgICAgICBib29sIGlu
aXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KTsKIAogICAgICAgICBib29sIG1fZnJh
bWVDb3VudFZhbGlkOwogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwpJbmRl
eDogZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnaWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIGdpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMSw5ICszMTEsMTMgQEAKIAogICAgICAgd2hpbGUgKGNvZGUgPj0gY2xl
YXJfY29kZSkKICAgICAgIHsKLSAgICAgICAgaWYgKGNvZGUgPT0gcHJlZml4W2NvZGVdKQorICAg
ICAgICBpZiAoY29kZSA+PSBNQVhfQklUUyB8fCBjb2RlID09IHByZWZpeFtjb2RlXSkKICAgICAg
ICAgICByZXR1cm4gLTE7CiAKKyAgICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25seSBo
b2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWlsIC0gMV0sCisgICAgICAgIC8vIGFs
bG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgbWFs
Zm9ybWVkCisgICAgICAgIC8vIGRhdGEuIEFzIGxvbmcgYXMgY29kZSA8IE1BWF9CSVRTLCB0aGUg
b25seSByaXNrIGlzIGEgZ2FyYmxlZCBpbWFnZSwKKyAgICAgICAgLy8gd2hpY2ggaXMgbm8gd29y
c2UgdGhhbiByZWZ1c2luZyB0byBkaXNwbGF5IGl0LgogICAgICAgICAqc3RhY2twKysgPSBzdWZm
aXhbY29kZV07CiAgICAgICAgIGNvZGUgPSBwcmVmaXhbY29kZV07CiAKQEAgLTQ0NSw3ICs0NDks
MTAgQEAKICAgICB7CiAgICAgICAvKiBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2RlciAqLwog
ICAgICAgaW50IGRhdGFzaXplID0gKnE7Ci0gICAgICBpZiAoZGF0YXNpemUgPiBNQVhfTFpXX0JJ
VFMpIHsKKyAgICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRo
ZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKKyAgICAgIC8vIHRoYXQgb3VyIGRhdGFzaXpl
IGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMikuCisgICAg
ICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgY29kZW1hc2sgY29ycmVjdGx5IGF0
IDQwOTUuCisgICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKSB7CiAgICAgICAgIHN0
YXRlID0gZ2lmX2Vycm9yOwogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTQ2OCw2ICs0NzUs
OCBAQAogICAgICAgICAvKiBpbml0IHRoZSB0YWJsZXMgKi8KICAgICAgICAgaWYgKCFmcmFtZV9y
ZWFkZXItPnN1ZmZpeCkKICAgICAgICAgICBmcmFtZV9yZWFkZXItPnN1ZmZpeCA9IG5ldyB1bnNp
Z25lZCBjaGFyW01BWF9CSVRTXTsKKyAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZp
eCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCisgICAgICAgIG1l
bXNldChmcmFtZV9yZWFkZXItPnN1ZmZpeCwgMCwgTUFYX0JJVFMpOwogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZyYW1lX3JlYWRlci0+Y2xlYXJfY29kZTsgaSsrKQogICAgICAgICAgIGZy
YW1lX3JlYWRlci0+c3VmZml4W2ldID0gaTsKIApAQCAtNTA4LDggKzUxNywxMCBAQAogICAgICAg
c2NyZWVuX2hlaWdodCA9IEdFVElOVDE2KHEgKyAyKTsKIAogICAgICAgLy8gQ0FMTEJBQ0s6IElu
Zm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KLSAgICAgIGlmIChjbGllbnRwdHIp
Ci0gICAgICAgIGNsaWVudHB0ci0+c2l6ZU5vd0F2YWlsYWJsZShzY3JlZW5fd2lkdGgsIHNjcmVl
bl9oZWlnaHQpOworICAgICAgaWYgKGNsaWVudHB0cikgeworICAgICAgICBpZiAoIWNsaWVudHB0
ci0+c2l6ZU5vd0F2YWlsYWJsZShzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQpKQorICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KICAgICAgIAogICAgICAgc2NyZWVuX2JnY29sb3Ig
PSBxWzVdOwogICAgICAgZ2xvYmFsX2NvbG9ybWFwX3NpemUgPSAyPDwocVs0XSYweDA3KTsKSW5k
ZXg6IGpwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ganBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1MDMpCisrKyBqcGVnL0pQRUdJbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNyArMzgsMTEgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KIAogZXh0ZXJuICJDIiB7CiAjaW5jbHVkZSAianBlZ2xpYi5oIgog
fQogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJlbW92ZSB3YXJuaW5ncyBmcm9tIHdhcm5pbmcg
bGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDYxMSkgLy8gd2FybmluZyBDNDYx
MTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGptcCcgYW5kIEMrKyBvYmplY3QgZGVzdHJ1Y3Rp
b24gaXMgbm9uLXBvcnRhYmxlCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKLQogI2luY2x1ZGUg
PHNldGptcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMTksNyArMjEzLDEwIEBACiAg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIg
aXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8u
aW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpOworICAgICAgICAgICAgICAgIGlmICgh
bV9kZWNvZGVyLT5zZXRTaXplKG1faW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfRVJST1I7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICBpZiAobV9kZWNvZGluZ1NpemVPbmx5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGNhbiBzdG9wIGhlcmUuCkBAIC00MTQsNyArNDExLDcgQEAKIGJvb2wgSlBFR0ltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKIHsKICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRp
bmcgZGF0YSB0byBkZWNvZGUsIHNlbmQgaXQgdG8gdGhlIEpQRUcgcmVhZGVyIG5vdy4KLSAgICBp
ZiAoIW1fc2l6ZUF2YWlsYWJsZSAmJiBtX3JlYWRlcikgeworICAgIGlmICghSW1hZ2VEZWNvZGVy
Ojppc1NpemVBdmFpbGFibGUoKSAmJiBtX3JlYWRlcikgewogICAgICAgICBpZiAobV9mYWlsZWQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQyMyw3ICs0MjAsNyBAQAogICAgICAg
ICBkZWNvZGUodHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKKyAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAogUkdCQTMyQnVm
ZmVyKiBKUEVHSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQpA
QCAtNDYzLDE3ICs0NjAsMTkgQEAKICAgICAvLyBSZXNpemUgdG8gdGhlIHdpZHRoIGFuZCBoZWln
aHQgb2YgdGhlIGltYWdlLgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZl
ckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUVtcHR5KSB7Ci0gICAgICAgIC8vIExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUg
Y29ycmVjdCB3aWR0aC9oZWlnaHQuCi0gICAgICAgIFJHQkEzMkFycmF5JiBieXRlcyA9IGJ1ZmZl
ci5ieXRlcygpOwotICAgICAgICBieXRlcy5yZXNpemUoc2l6ZSgpLndpZHRoKCkgKiBzaXplKCku
aGVpZ2h0KCkpOworICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhl
IGNvcnJlY3Qgd2lkdGgvaGVpZ2h0LiBUaGlzIHdpbGwKKyAgICAgICAgLy8gYWxzbyBpbml0aWFs
aXplIGl0IHRvIHRyYW5zcGFyZW50LgorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICBtX2ZhaWxlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAogICAgICAgICAvLyBV
cGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIu
c2V0SGFzQWxwaGEoZmFsc2UpOwogCiAgICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFs
d2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRS
ZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLQotICAgICAgICAv
LyBXZSBkb24ndCBoYXZlIGFscGhhICh0aGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGJ1ZmZl
ciBpcyBjb25zdHJ1Y3RlZCkuCisgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwgMCwg
c2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVj
b21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpAQCAtNDkyLDggKzQ5MSw2
IEBACiAgICAgICAgICAgICB1bnNpZ25lZCBiID0gKmoxKys7CiAgICAgICAgICAgICBSR0JBMzJC
dWZmZXI6OnNldFJHQkEoKmRzdCsrLCByLCBnLCBiLCAweEZGKTsKICAgICAgICAgfQotCi0gICAg
ICAgIGJ1ZmZlci5lbnN1cmVIZWlnaHQoaW5mby0+b3V0cHV0X3NjYW5saW5lKTsKICAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IGpwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGpwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDUwMykKKysrIGpwZWcv
SlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNyArNTQsMTEgQEAKIAog
ICAgICAgICBKUEVHSW1hZ2VSZWFkZXIqIHJlYWRlcigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9CiAK
LSAgICAgICAgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAg
ICAgaWYgKCFtX3NpemVBdmFpbGFibGUpIHsKLSAgICAgICAgICAgICAgICBtX3NpemVBdmFpbGFi
bGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIG91dHB1dFNjYW5s
aW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIEpQRUdJbWFnZVJlYWRlcjsKICAgICAgICAgbXV0YWJsZSBKUEVH
SW1hZ2VSZWFkZXIqIG1fcmVhZGVyOwogICAgIH07CiAKSW5kZXg6IHNraWEvR0lGSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBza2lhL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDQ0NTAzKQorKysgc2tpYS9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzksOCArMjc5LDcgQEAKICAgICAKICAgICBpZiAoZnJhbWVJbmRleCA9PSAwKSB7CiAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkg
cHJldmlvdXMgZGF0YS4KLSAgICAgICAgaWYgKCFwcmVwRW1wdHlGcmFtZUJ1ZmZlcihidWZmZXIp
KSB7Ci0gICAgICAgICAgICBidWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUpOworICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSkgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zMDcsMTAgKzMwNiw2IEBACiAgICAgICAg
ICAgICAgICAgKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlS2VlcCkpIHsKICAg
ICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0
ZSBmb3IgdGhpcyBmcmFtZS4KICAgICAgICAgICAgIGJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnBy
ZXZCdWZmZXIpOwotICAgICAgICAgICAgLy8gVGhpcyBuZXh0IGxpbmUgaXNuJ3QgY3VycmVudGx5
IG5lY2Vzc2FyeSBzaW5jZSB0aGUgYWxwaGEgc3RhdGUgaXMKLSAgICAgICAgICAgIC8vIGN1cnJl
bnRseSBjYXJyaWVkIGFsb25nIGluIHRoZSBTa2lhIGJpdG1hcCBkYXRhLCBidXQgaXQncyBzYWZl
LAotICAgICAgICAgICAgLy8gZnV0dXJlLXByb29mLCBhbmQgcGFyYWxsZWwgdG8gdGhlIENhaXJv
IGNvZGUuCi0gICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHByZXZCdWZmZXItPmhhc0Fs
cGhhKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVh
ciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgICAg
IC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgpA
QCAtMzE5LDE2ICszMTQsMTYgQEAKICAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlu
cyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8v
IENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hv
bGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1w
dHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91
cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCiAgICAgICAgICAgICAgIGJ1ZmZl
ci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwotICAgICAgICAgICAgICAvLyBVbm5lY2Vz
c2FyeSAoYnV0IHNhZmUpOyBzZWUgY29tbWVudHMgb24gdGhlIHNpbWlsYXIgY2FsbCBhYm92ZS4K
LSAgICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBoYShwcmV2QnVmZmVyLT5oYXNBbHBoYSgp
KTsKLSAgICAgICAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGJ1ZmZlci0+Yml0bWFwKCk7CiAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5ib3R0
b20oKTsgKyt5KSB7CiAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gcHJldlJlY3QueCgp
OyB4IDwgcHJldlJlY3QucmlnaHQoKTsgKyt4KQotICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ci0+c2V0UkdCQShiaXRtYXAuZ2V0QWRkcjMyKHgsIHkpLCAwLCAwLCAwLCAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXItPnNldFJHQkEoeCwgeSwgMCwgMCwgMCwgMCk7CiAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKChwcmV2UmVjdC53aWR0aCgpID4gMCkgJiYgKHBy
ZXZSZWN0LmhlaWdodCgpID4gMCkpCiAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0Fs
cGhhKHRydWUpOwpAQCAtMzQ0LDE3ICszMzksNiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEdJRkltYWdlRGVjb2Rlcjo6cHJlcEVtcHR5RnJhbWVCdWZmZXIoUkdCQTMyQnVmZmVyKiBi
dWZmZXIpIGNvbnN0Ci17Ci0gICAgaWYgKCFidWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCks
IHNpemUoKS5oZWlnaHQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBUaGlzIG5l
eHQgbGluZSBpc24ndCBjdXJyZW50bHkgbmVjZXNzYXJ5IHNpbmNlIFNraWEncyBlcmFzZUFSR0Io
KSBzZXRzCi0gICAgLy8gdGhpcyBmb3IgdXMsIGJ1dCB3ZSBkbyBpdCBmb3Igc2ltaWxhciByZWFz
b25zIHRvIHRoZSBzZXRIYXNBbHBoYSgpIGNhbGxzCi0gICAgLy8gaW4gaW5pdEZyYW1lQnVmZmVy
KCkgYWJvdmUuCi0gICAgYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZy
YW1lSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogcm93QnVmZmVyLCAgIC8vIFBvaW50ZXIgdG8gc2luZ2xlIHNjYW5saW5lIHRlbXBvcmFy
eSBidWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyKiByb3dFbmQsCkBAIC00MTYsMTQgKzQwMCwxNCBAQAogICAgIGlmIChyZXBlYXRDb3VudCA+
IDEpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcm93IHxyZXBlYXRDb3VudHwtMSB0aW1lcy4KICAg
ICAgICAgdW5zaWduZWQgbnVtID0gY3VyckRzdCAtIGRzdDsKLSAgICAgICAgdW5zaWduZWQgZGF0
YV9zaXplID0gbnVtICogc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgZGF0YVNp
emUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOwogICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IHNp
emUoKS53aWR0aCgpOwogICAgICAgICB1bnNpZ25lZCogZW5kID0gYnVmZmVyLmJpdG1hcCgpLmdl
dEFkZHIzMigwLCAwKSArIHdpZHRoICogc2l6ZSgpLmhlaWdodCgpOwogICAgICAgICBjdXJyRHN0
ID0gZHN0ICsgd2lkdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZXBlYXRD
b3VudDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoY3VyckRzdCArIG51bSA+IGVuZCkgLy8gUHJv
dGVjdCBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJydW4gZnJvbSBhIGJvZ3VzIHJlcGVhdENvdW50Lgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwg
ZGF0YV9zaXplKTsKKyAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIGRhdGFTaXplKTsK
ICAgICAgICAgICAgIGN1cnJEc3QgKz0gd2lkdGg7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBz
a2lhL0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNraWEvR0lGSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDQ0NTAzKQorKysgc2tpYS9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNzgsMTAgKzc4LDYgQEAKICAgICAgICAgLy8gdGhpcyB3aWxsIG1hcmsgdGhlIGlt
YWdlIGFzIGZhaWxlZC4KICAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJh
bWVJbmRleCk7CiAKLSAgICAgICAgLy8gQSBoZWxwZXIgZm9yIGluaXRGcmFtZUJ1ZmZlcigpLCB0
aGlzIHNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYW5kCi0gICAgICAgIC8vIGZpbGxzIGl0
IHdpdGggdHJhbnNwYXJlbnQgcGl4ZWxzLgotICAgICAgICBib29sIHByZXBFbXB0eUZyYW1lQnVm
ZmVyKFJHQkEzMkJ1ZmZlciopIGNvbnN0OwotCiAgICAgICAgIGJvb2wgbV9mcmFtZUNvdW50VmFs
aWQ7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGE7CiAgICAgICAgIG11dGFi
bGUgaW50IG1fcmVwZXRpdGlvbkNvdW50OwpJbmRleDogc2tpYS9CTVBJbWFnZVJlYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHNraWEvQk1QSW1hZ2VSZWFkZXIuaAkocmV2aXNpb24gNDQ1MDMpCisrKyBz
a2lhL0JNUEltYWdlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw5ICsyNTEsNyBAQAog
ICAgICAgICAvLyBMaWtlIHNldEkoKSwgYnV0IHdpdGggdGhlIGluZGl2aWR1YWwgY29tcG9uZW50
IHZhbHVlcyBzcGVjaWZpZWQuCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEodW5zaWduZWQg
cmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgYWxwaGEpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgKLSAgICAgICAgICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5iaXRtYXAoKS5nZXRBZGRyMzIobV9jb29yZC54
KCksIG1fY29vcmQueSgpKSwKLSAgICAgICAgICAgICAgICByZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7CisgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRSR0JBKG1fY29v
cmQueCgpLCBtX2Nvb3JkLnkoKSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICAg
ICAgbV9jb29yZC5tb3ZlKDEsIDApOwogICAgICAgICB9CiAKSW5kZXg6IHNraWEvUE5HSW1hZ2VE
ZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBza2lhL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlz
aW9uIDQ0NTAzKQorKysgc2tpYS9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjQsNyArMjI0LDggQEAKICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdf
Z2V0X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxlKCk7CiB9CiAKLXZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpIHsKK3ZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpkZWNvZGluZ0ZhaWxlZCgpCit7CiAgICAgbV9mYWlsZWQgPSB0cnVlOwogfQogCkBAIC0zMzAs
NiArMzMxLDcgQEAKIAogICAgICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFs
bHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogCiAgICAgICAg
IC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAg
ICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUo
KS5oZWlnaHQoKSkpOwpJbmRleDogc2tpYS9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
a2lhL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDUwMykKKysrIHNraWEvSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw4ICsxMjgsMTEgQEAKICAgICAgICAgICAgIC8vIG90
aGVyd2lzZS4KICAgICAgICAgICAgIEFTU0VSVChtX2JpdG1hcC53aWR0aCgpID09IDAgJiYgbV9i
aXRtYXAuaGVpZ2h0KCkgPT0gMCk7CiAgICAgICAgICAgICBtX2JpdG1hcC5zZXRDb25maWcoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIGlm
ICghbV9iaXRtYXAuYWxsb2NQaXhlbHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
ICAvLyBBbGxvY2F0aW9uIGZhaWx1cmUsIG1heWJlIHRoZSBiaXRtYXAgd2FzIHRvbyBiaWcuCisg
ICAgICAgICAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBBbGxvY2F0aW9uIGZhaWx1cmUsIG1heWJlIHRoZSBiaXRtYXAgd2FzIHRvbyBiaWcuCisg
ICAgICAgICAgICAgICAgc2V0U3RhdHVzKEZyYW1lQ29tcGxldGUpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gQ2xlYXIgdGhl
IGltYWdlLgogICAgICAgICAgICAgbV9iaXRtYXAuZXJhc2VBUkdCKDAsIDAsIDAsIDApOwpAQCAt
MjcyLDIyICsyNzUsMTUgQEAKICAgICAgICAgbXV0YWJsZSBib29sIG1fZmFpbGVkOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gbWFrZSBzdXJl
IHRoZSBpbWFnZSBpcyBub3QgdG9vIGxhcmdlLiBWZXJ5Ci0gICAgICAgIC8vIGxhcmdlIGltYWdl
cywgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkcywgY2FuIHRha2UgYSB2ZXJ5IGxvbmcg
dGltZQotICAgICAgICAvLyB0byBwcm9jZXNzLCBnaXZpbmcgdGhlIGFwcGVhcmFuY2Ugb2YgYSBE
b1MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdlYktpdCBhbHNvIHNlZW1zIHRvIGxpa2UgdG8g
YXNrIGZvciB0aGUgc2l6ZSBiZWZvcmUgZGF0YSBpcyBhdmFpbGFibGUKLSAgICAgICAgLy8gYW5k
IGluIHNvbWUgY2FzZXMgd2hlbiB0aGUgZmFpbGVkIGZsYWcgaXMgc2V0LiBTb21lIG9mIHRoZXNl
IGNvZGUgcGF0aHMKLSAgICAgICAgLy8gc3VjaCBhcyBCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRp
b24gdGhlbiBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZQotICAgICAgICAvLyBiYXNlZCBv
biB0aGUgd2lkdGggYW5kIGhlaWdodC4gQmVjYXVzZSBvZiB0aGlzLCBvdXIgdG90YWwgY29tcHV0
ZWQgaW1hZ2UKLSAgICAgICAgLy8gYnl0ZSBzaXplIG11c3QgbmV2ZXIgb3ZlcmZsb3cgYW4gaW50
LgorICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1h
Z2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKKyAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBh
IChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgogICAgICAgICBzdGF0aWMgYm9vbCBpc092
ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIHdpZHRoICogaGVpZ2h0IG11c3Qgbm90IGV4Y2VlZCAoMiBeIDI5KSAtIDEsIHNv
IHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIG92ZXJmbG93IHdoZW4gd2UgbXVsdGlwbHkg
YnkgNC4KICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWln
aHQpOwotICAgICAgICAgICAgaWYgKHRvdGFsX3NpemUgPiAzMiAqIDEwMjQgKiAxMDI0KSAgLy8g
MzJNID0gMTI4TUIgbWVtb3J5IHRvdGFsICgzMiBicHApLgotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRv
dGFsX3NpemUgPiAoKDI1NiAqIDI1NiAqIDI1NiAqIDMyKSAtIDEpOwogICAgICAgICB9CiAKICAg
ICAgICAgSW50U2l6ZSBtX3NpemU7CkluZGV4OiBza2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHNraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NTAzKQor
Kysgc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDE3ICs0
NjUsMTUgQEAKICAgICAgICAgLy8gYWxzbyBpbml0aWFsaXplIGl0IHRvIHRyYW5zcGFyZW50Lgog
ICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICBidWZmZXIu
c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBi
ZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVm
ZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwog
CiAgICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgogICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFscGhh
ICh0aGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGJ1ZmZlciBpcyBjb25zdHJ1Y3RlZCkuCiAg
ICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVhZGVyLT5pbmZv
KCk7CkluZGV4OiBza2lhL1hCTUltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2tpYS9Y
Qk1JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUwMykKKysrIHNraWEvWEJNSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBAQAogICAgICAgICBmcmFtZS5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKICAgICAgICAgaWYgKCFmcmFt
ZS5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CiAgICAgICAgICAg
ICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICBmcmFtZS5zZXRTdGF0dXMoUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIGZyYW1lLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CkluZGV4
OiBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBJbWFnZURlY29kZXIuaAkocmV2aXNpb24g
NDQ1MDMpCisrKyBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBA
QAogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTUyLDggKzU0LDcgQEAKICAgICAgICAgfTsKIAogICAgICAgICBS
R0JBMzJCdWZmZXIoKQotICAgICAgICAgICAgOiBtX2hlaWdodCgwKQotICAgICAgICAgICAgLCBt
X3N0YXR1cyhGcmFtZUVtcHR5KQorICAgICAgICAgICAgOiBtX3N0YXR1cyhGcmFtZUVtcHR5KQog
ICAgICAgICAgICAgLCBtX2R1cmF0aW9uKDApCiAgICAgICAgICAgICAsIG1fZGlzcG9zYWxNZXRo
b2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKICAgICAgICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkK
QEAgLTY5LDE3ICs3MCw0MiBAQAogICAgICAgICAgIC8vIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZy
YW1lIGxhdGVyLgogICAgICAgICB9CiAKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBjcmVhdGVz
IGEgbmV3IGNvcHkgb2YgdGhlIGltYWdlIGRhdGEgaW4gfG90aGVyfCwgc28gdGhlCisgICAgICAg
IC8vIHR3byBpbWFnZXMgY2FuIGJlIG1vZGlmaWVkIGluZGVwZW5kZW50bHkuCisgICAgICAgIHZv
aWQgY29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7CisgICAgICAgICAgICBtX2hh
c0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICAgICAgfQorCiAgICAgICAgIGNvbnN0IFJH
QkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH0KICAgICAgICAgUkdC
QTMyQXJyYXkmIGJ5dGVzKCkgeyByZXR1cm4gbV9ieXRlczsgfQorCisgICAgICAgIC8vIE11c3Qg
YmUgY2FsbGVkIGJlZm9yZSBhbnkgcGl4ZWxzIGFyZSB3cml0dGVuLiBXaWxsIHJldHVybiB0cnVl
IG9uCisgICAgICAgIC8vIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBm
YWlscy4KKyAgICAgICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5IHRvIGNoZWNrIGZvciBh
bGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlCisgICAgICAgICAgICAvLyByZXF1ZXN0ZWQgc2l6ZSB3
YXMgdG9vIGJpZy4uLgorICAgICAgICAgICAgbV9ieXRlcy5yZXNpemUod2lkdGggKiBoZWlnaHQp
OworCisgICAgICAgICAgICAvLyBDbGVhciB0aGUgaW1hZ2UuCisgICAgICAgICAgICBtX2J5dGVz
LmZpbGwoMCk7CisgICAgICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bv
c2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogICAgICAgICBi
b29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQogCiAgICAgICAgIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KLSAgICAgICAgdm9p
ZCBlbnN1cmVIZWlnaHQodW5zaWduZWQgcm93SW5kZXgpIHsgaWYgKHJvd0luZGV4ID4gbV9oZWln
aHQpIG1faGVpZ2h0ID0gcm93SW5kZXg7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVT
dGF0dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNp
Z25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBz
ZXREaXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2Fs
TWV0aG9kID0gbWV0aG9kOyB9CkBAIC0xMDYsNyArMTMyLDYgQEAKICAgICAgICAgSW50UmVjdCBt
X3JlY3Q7ICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0
aGluIHRoZSBvdmVyYWxsIGJ1ZmZlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBm
cmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qg
d2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgotICAgICAgICB1bnNpZ25l
ZCBtX2hlaWdodDsgLy8gVGhlIGhlaWdodCAodGhlIG51bWJlciBvZiByb3dzIHdlJ3ZlIGZ1bGx5
IGRlY29kZWQpLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBvciBu
b3QgdGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5IGZpbmlzaGVkIGRlY29kaW5nLgogICAgICAgICB1
bnNpZ25lZCBtX2R1cmF0aW9uOyAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgogICAgICAgICBGcmFt
ZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7IC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlz
IGZyYW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KQEAgLTExOSwx
MSArMTQ0LDExIEBACiAgICAgY2xhc3MgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIEltYWdlRGVjb2RlcigpCi0gICAgICAgICAgICA6IG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkK
LSAgICAgICAgICAgICwgbV9mYWlsZWQoZmFsc2UpCisgICAgICAgICAgICA6IG1fZmFpbGVkKGZh
bHNlKQorICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCiAgICAgICAgIHsKICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQog
CiAgICAgICAgIC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRl
ZCB3aXRoIGFuIHVuZGVjb2RlZCBpbWFnZSBvZiB0aGlzIHR5cGUuCkBAIC0xMzIsMTEgKzE1Nywy
MiBAQAogICAgICAgICAvLyBBbGwgc3BlY2lmaWMgZGVjb2RlciBwbHVnaW5zIG11c3QgZG8gc29t
ZXRoaW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2ZW4uCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIHsgbV9k
YXRhID0gZGF0YTsgfQogCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9y
bWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXpl
QXZhaWxhYmxlKCkgY29uc3QgPSAwOworICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6
ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhpcyBkZWZhdWx0CisgICAgICAg
IC8vIGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIGhhcyBiZWVu
IHNldCBhbmQgd2UgaGF2ZSBub3QKKyAgICAgICAgLy8gc2VlbiBhIGZhaWx1cmUuIERlY29kZXJz
IG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8gbGF6aWx5IGRlY29kZQorICAgICAgICAvLyBl
bm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KKyAgICAgICAgdmlydHVhbCBib29s
IGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAh
bV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOyAKKyAgICAgICAgfQogCiAgICAgICAgIC8vIFJl
cXVlc3RzIHRoZSBzaXplLgotICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlcXVlc3RpbmcgdGhlIHNpemUgb2YgYW4gaW52YWxp
ZCBiaXRtYXAgaXMgbWVhbmluZ2xlc3MuCisgICAgICAgICAgICBBU1NFUlQoIW1fZmFpbGVkKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3NpemU7CisgICAgICAgIH0KIAogICAgICAgICAvLyBUaGUg
dG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgQ2xhc3NlcyB0aGF0IHN1cHBv
cnQgbXVsdGlwbGUgZnJhbWVzCiAgICAgICAgIC8vIHdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBm
b3IgdGhlIGFuc3dlciBpZiB0aGV5IG5lZWQgdG8gKHdpdGhvdXQgbmVjZXNzYXJpbHkKQEAgLTE2
NiwxMSArMjAyLDM5IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2Fj
aGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQogCiAgICAgcHJvdGVjdGVkOgorICAgICAg
ICAvLyBDYWxsZWQgYnkgdGhlIGltYWdlIGRlY29kZXJzIHRvIHNldCB0aGVpciBkZWNvZGVkIHNp
emUsIHRoaXMgYWxzbyBjaGVjaworICAgICAgICAvLyB0aGUgc2l6ZSBmb3IgdmFsaWRpdHkuIEl0
IHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNpemUgd2FzIHNldCwgb3IgZmFsc2UKKyAgICAgICAg
Ly8gaWYgdGhlcmUgaXMgYW4gZXJyb3IuIE9uIGVycm9yLCB0aGUgbV9mYWlsZWQgZmxhZyB3aWxs
IGJlIHNldCBhbmQgdGhlCisgICAgICAgIC8vIGNhbGxlciBzaG91bGQgaW1tZWRpYXRlbHkgc3Rv
cCBkZWNvZGluZy4KKyAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBo
ZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc2l6ZSA9IElu
dFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCiAgICAgICAgIFZlY3Rv
cjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAgICAgICAgYm9vbCBtX3NpemVB
dmFpbGFibGU7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2ZhaWxlZDsKKworICAgIHByaXZhdGU6
CisgICAgICAgIC8vIFNvbWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFn
ZSBhcyAid2lkdGggKiBoZWlnaHQgKiA0IgorICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEg
KHNpZ25lZCkgaW50LiAgQXZvaWQgb3ZlcmZsb3cuCisgICAgICAgIHN0YXRpYyBib29sIGlzT3Zl
clNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gd2lkdGggKiBoZWlnaHQgbXVzdCBub3QgZXhjZWVkICgyIF4gMjkpIC0gMSwgc28g
dGhhdCB3ZSBkb24ndAorICAgICAgICAgICAgLy8gb3ZlcmZsb3cgd2hlbiB3ZSBtdWx0aXBseSBi
eSA0LgorICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdpZHRoKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdo
dCk7CisgICAgICAgICAgICByZXR1cm4gdG90YWxfc2l6ZSA+ICgoMjU2ICogMjU2ICogMjU2ICog
MzIpIC0gMSk7CisgICAgICAgIH0KKwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAg
Ym9vbCBtX3NpemVBdmFpbGFibGU7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31073</attachid>
            <date>2009-06-08 17:20:09 -0700</date>
            <delta_ts>2009-06-09 16:05:29 -0700</delta_ts>
            <desc>part three (Landed r44545)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>13028</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDUxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDktMDYtMDggIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHRocmVl
CisgICAgICAgIFZhcmlvdXMgbWlub3IgY2xlYW51cHMgdG8gdGhlIFNraWEgZmlsZXMuICBNb3N0
bHkgbm9uLWZ1bmN0aW9uYWwsIGV4Y2VwdAorICAgICAgICBmb3IgdHdvIHNwZWNpZmljIGNoYW5n
ZXM6CisgICAgICAgICogSlBFR3MgYW5kIFBOR3Mgd2VyZSBhbHdheXMgbWFya2VkIGFzIHRyYW5z
cGFyZW50OyBub3cgdGhleSBhcmUgb25seQorICAgICAgICAgIG1hcmtlZCBhcyB0cmFuc3BhcmVu
dCB3aGVuIHRoZXkgYWN0dWFsbHkgYXJlLiAgSSBkb3VidCB0aGlzIGhhcyBtdWNoCisgICAgICAg
ICAgb2YgYW4gZWZmZWN0IGJ1dCBpbiB0aGVvcnkgaXQgY291bGQgYmUgdXNlZCB0byBvcHRpbWl6
ZSB0aGVpciBkaXNwbGF5LgorICAgICAgICAqIEluc3RlYWQgb2YgYXJiaXRyYXJpbHkgZGlzYWxs
b3dpbmcgaW1hZ2VzIG92ZXIgMzIgKiAxMDI0ICogMTAyNCBweF4yLAorICAgICAgICAgIG9ubHkg
ZGlzYWxsb3cgaW1hZ2VzIHdoaWNoIGFyZSBzbyBsYXJnZSB0aGV5IHdpbGwgY2F1c2Ugb3ZlcmZs
b3cgaW4KKyAgICAgICAgICBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZS4gIFRoaXMgc2hvdWxkIGZp
eCB0aGUgdGVzdGNhc2Ugb24KKyAgICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hy
b21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNjQzLgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VSZWFkZXI6OnNldFJHQkEpOiBVc2Ugc2ltcGxlciBub24tc3RhdGljIHNldFJHQkEoKSBmb3Jt
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIp
OiBSZW1vdmUgdW5uZWVkZWQgY29kZSwgdXNlIG1vcmUgcmVhZGFibGUgc2V0UkdCQSgpIGZvcm0K
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOiBGaXgg
c3R5bGUgdmlvbGF0aW9uCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9H
SUZJbWFnZURlY29kZXIuaDogUmVtb3ZlIHVubmVlZGVkIGNvZGUKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6
UkdCQTMyQnVmZmVyOjpzZXRTaXplKTogc2V0U2l6ZSgpIHNob3VsZCBqdXN0IHNldFN0YXR1cygp
IHdoZW4gaXQgZmFpbHMgc2luY2UgYWxsIGNhbGxlcnMgd2VyZSBkb2luZyBpdAorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXplKTogRWFzZSAib3ZlcnNpemVkIiBpbWFn
ZSBjb25zdHJhaW50cyB0byBhbGxvdyBhbnkgaW1hZ2UgdGhhdCB3b24ndCBvdmVyZmxvdworICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOiBS
ZW1vdmUgdW5uZWVkZWQgY29kZSwgbWFyayBKUEVHcyBhcyBub24tdHJhbnNwYXJlbnQKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1BOR0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKTogRml4IHN0
eWxlIHZpb2xhdGlvbgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUpOiBNYXJrIHVuLWRlY29kZWQgUE5HcyBhcyBub24tdHJhbnNwYXJlbnQgKHRoaXMgd2ls
bCBnZXQgcmVzZXQgbGF0ZXIgYXMgbmVlZGVkKQorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhCTUlt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KTogUmVtb3ZlIHVubmVlZGVkIGNvZGUKKwog
MjAwOS0wNi0wOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVyLmgJKHJldmlzaW9u
IDQ0NTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdl
UmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw5ICsyNTEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIExpa2Ugc2V0SSgpLCBidXQgd2l0aCB0aGUgaW5kaXZpZHVhbCBj
b21wb25lbnQgdmFsdWVzIHNwZWNpZmllZC4KICAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQSh1
bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLCB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCBhbHBo
YSkKICAgICAgICAgewotICAgICAgICAgICAgUkdCQTMyQnVmZmVyOjpzZXRSR0JBKAotICAgICAg
ICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLmJpdG1hcCgpLmdldEFkZHIzMiht
X2Nvb3JkLngoKSwgbV9jb29yZC55KCkpLAotICAgICAgICAgICAgICAgIHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFJH
QkEobV9jb29yZC54KCksIG1fY29vcmQueSgpLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAg
ICAgICAgICAgICBtX2Nvb3JkLm1vdmUoMSwgMCk7CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVj
b2Rlci5jcHAJKHJldmlzaW9uIDQ0NTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsy
NzksNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgCiAg
ICAgaWYgKGZyYW1lSW5kZXggPT0gMCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBm
cmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAg
IGlmICghcHJlcEVtcHR5RnJhbWVCdWZmZXIoYnVmZmVyKSkgewotICAgICAgICAgICAgYnVmZmVy
LT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgaWYgKCFi
dWZmZXItPnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpIHsKICAgICAg
ICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQpAQCAtMzA3LDEwICszMDYsNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1l
QnVmZmVyKHVuCiAgICAgICAgICAgICAgICAgKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpE
aXNwb3NlS2VlcCkpIHsKICAgICAgICAgICAgIC8vIFByZXNlcnZlIHRoZSBsYXN0IGZyYW1lIGFz
IHRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4KICAgICAgICAgICAgIGJ1ZmZlci0+
Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwotICAgICAgICAgICAgLy8gVGhpcyBuZXh0IGxp
bmUgaXNuJ3QgY3VycmVudGx5IG5lY2Vzc2FyeSBzaW5jZSB0aGUgYWxwaGEgc3RhdGUgaXMKLSAg
ICAgICAgICAgIC8vIGN1cnJlbnRseSBjYXJyaWVkIGFsb25nIGluIHRoZSBTa2lhIGJpdG1hcCBk
YXRhLCBidXQgaXQncyBzYWZlLAotICAgICAgICAgICAgLy8gZnV0dXJlLXByb29mLCBhbmQgcGFy
YWxsZWwgdG8gdGhlIENhaXJvIGNvZGUuCi0gICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhh
KHByZXZCdWZmZXItPmhhc0FscGhhKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdp
dGhvdXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNp
ZGUgb2YgdGhlIGZyYW1lLgpAQCAtMzE5LDE2ICszMTQsMTYgQEAgYm9vbCBHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAgIHx8IHByZXZSZWN0LmNvbnRh
aW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3
aG9sZQogICAgICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBl
bXB0eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihidWZmZXIp
OworICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZp
b3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KICAgICAgICAgICAgICAgYnVm
ZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICAgIC8vIFVubmVj
ZXNzYXJ5IChidXQgc2FmZSk7IHNlZSBjb21tZW50cyBvbiB0aGUgc2ltaWxhciBjYWxsIGFib3Zl
LgotICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHByZXZCdWZmZXItPmhhc0FscGhh
KCkpOwotICAgICAgICAgICAgICBTa0JpdG1hcCYgYml0bWFwID0gYnVmZmVyLT5iaXRtYXAoKTsK
ICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0LnkoKTsgeSA8IHByZXZSZWN0LmJv
dHRvbSgpOyArK3kpIHsKICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54
KCk7IHggPCBwcmV2UmVjdC5yaWdodCgpOyArK3gpCi0gICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyLT5zZXRSR0JBKGJpdG1hcC5nZXRBZGRyMzIoeCwgeSksIDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAwKSAmJiAo
cHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFz
QWxwaGEodHJ1ZSk7CkBAIC0zNDQsMTcgKzMzOSw2IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIodW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHSUZJbWFnZURl
Y29kZXI6OnByZXBFbXB0eUZyYW1lQnVmZmVyKFJHQkEzMkJ1ZmZlciogYnVmZmVyKSBjb25zdAot
ewotICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gVGhpcyBuZXh0IGxpbmUgaXNuJ3Qg
Y3VycmVudGx5IG5lY2Vzc2FyeSBzaW5jZSBTa2lhJ3MgZXJhc2VBUkdCKCkgc2V0cwotICAgIC8v
IHRoaXMgZm9yIHVzLCBidXQgd2UgZG8gaXQgZm9yIHNpbWlsYXIgcmVhc29ucyB0byB0aGUgc2V0
SGFzQWxwaGEoKSBjYWxscwotICAgIC8vIGluIGluaXRGcmFtZUJ1ZmZlcigpIGFib3ZlLgotICAg
IGJ1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZl
ciwgICAvLyBQb2ludGVyIHRvIHNpbmdsZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93RW5kLApA
QCAtNDE2LDE0ICs0MDAsMTQgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93
KHVucwogICAgIGlmIChyZXBlYXRDb3VudCA+IDEpIHsKICAgICAgICAgLy8gQ29weSB0aGUgcm93
IHxyZXBlYXRDb3VudHwtMSB0aW1lcy4KICAgICAgICAgdW5zaWduZWQgbnVtID0gY3VyckRzdCAt
IGRzdDsKLSAgICAgICAgdW5zaWduZWQgZGF0YV9zaXplID0gbnVtICogc2l6ZW9mKHVuc2lnbmVk
KTsKKyAgICAgICAgdW5zaWduZWQgZGF0YVNpemUgPSBudW0gKiBzaXplb2YodW5zaWduZWQpOwog
ICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwogICAgICAgICB1bnNpZ25l
ZCogZW5kID0gYnVmZmVyLmJpdG1hcCgpLmdldEFkZHIzMigwLCAwKSArIHdpZHRoICogc2l6ZSgp
LmhlaWdodCgpOwogICAgICAgICBjdXJyRHN0ID0gZHN0ICsgd2lkdGg7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCByZXBlYXRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAo
Y3VyckRzdCArIG51bSA+IGVuZCkgLy8gUHJvdGVjdCBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJydW4g
ZnJvbSBhIGJvZ3VzIHJlcGVhdENvdW50LgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgZGF0YV9zaXplKTsKKyAgICAgICAgICAgIG1lbWNw
eShjdXJyRHN0LCBkc3QsIGRhdGFTaXplKTsKICAgICAgICAgICAgIGN1cnJEc3QgKz0gd2lkdGg7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3NraWEvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDUxMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsMTAgKzc4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyB0aGlzIHdpbGwgbWFyayB0aGUgaW1hZ2UgYXMgZmFpbGVkLgogICAgICAgICBib29s
IGluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KTsKIAotICAgICAgICAvLyBBIGhl
bHBlciBmb3IgaW5pdEZyYW1lQnVmZmVyKCksIHRoaXMgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgYnVm
ZmVyLCBhbmQKLSAgICAgICAgLy8gZmlsbHMgaXQgd2l0aCB0cmFuc3BhcmVudCBwaXhlbHMuCi0g
ICAgICAgIGJvb2wgcHJlcEVtcHR5RnJhbWVCdWZmZXIoUkdCQTMyQnVmZmVyKikgY29uc3Q7Ci0K
ICAgICAgICAgYm9vbCBtX2ZyYW1lQ291bnRWYWxpZDsKICAgICAgICAgYm9vbCBtX2N1cnJlbnRC
dWZmZXJTYXdBbHBoYTsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA0NDUxMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDggKzEyOCwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAvLyBvdGhlcndpc2UuCiAgICAg
ICAgICAgICBBU1NFUlQobV9iaXRtYXAud2lkdGgoKSA9PSAwICYmIG1fYml0bWFwLmhlaWdodCgp
ID09IDApOwogICAgICAgICAgICAgbV9iaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZywgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICBpZiAoIW1fYml0bWFwLmFs
bG9jUGl4ZWxzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxsb2NhdGlv
biBmYWlsdXJlLCBtYXliZSB0aGUgYml0bWFwIHdhcyB0b28gYmlnLgorICAgICAgICAgICAgaWYg
KCFtX2JpdG1hcC5hbGxvY1BpeGVscygpKSB7CisgICAgICAgICAgICAgICAgLy8gQWxsb2NhdGlv
biBmYWlsdXJlLCBtYXliZSB0aGUgYml0bWFwIHdhcyB0b28gYmlnLgorICAgICAgICAgICAgICAg
IHNldFN0YXR1cyhGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBpbWFnZS4KICAgICAg
ICAgICAgIG1fYml0bWFwLmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKQEAgLTI3MiwyMiArMjc1LDE1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBib29sIG1fZmFpbGVkOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gbWFr
ZSBzdXJlIHRoZSBpbWFnZSBpcyBub3QgdG9vIGxhcmdlLiBWZXJ5Ci0gICAgICAgIC8vIGxhcmdl
IGltYWdlcywgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkcywgY2FuIHRha2UgYSB2ZXJ5
IGxvbmcgdGltZQotICAgICAgICAvLyB0byBwcm9jZXNzLCBnaXZpbmcgdGhlIGFwcGVhcmFuY2Ug
b2YgYSBEb1MuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdlYktpdCBhbHNvIHNlZW1zIHRvIGxp
a2UgdG8gYXNrIGZvciB0aGUgc2l6ZSBiZWZvcmUgZGF0YSBpcyBhdmFpbGFibGUKLSAgICAgICAg
Ly8gYW5kIGluIHNvbWUgY2FzZXMgd2hlbiB0aGUgZmFpbGVkIGZsYWcgaXMgc2V0LiBTb21lIG9m
IHRoZXNlIGNvZGUgcGF0aHMKLSAgICAgICAgLy8gc3VjaCBhcyBCaXRtYXBJbWFnZTo6cmVzZXRB
bmltYXRpb24gdGhlbiBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZQotICAgICAgICAvLyBi
YXNlZCBvbiB0aGUgd2lkdGggYW5kIGhlaWdodC4gQmVjYXVzZSBvZiB0aGlzLCBvdXIgdG90YWwg
Y29tcHV0ZWQgaW1hZ2UKLSAgICAgICAgLy8gYnl0ZSBzaXplIG11c3QgbmV2ZXIgb3ZlcmZsb3cg
YW4gaW50LgorICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0
aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKKyAgICAgICAgLy8gYW5kIHJldHVybiBp
dCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgogICAgICAgICBzdGF0aWMgYm9v
bCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIHdpZHRoICogaGVpZ2h0IG11c3Qgbm90IGV4Y2VlZCAoMiBeIDI5KSAt
IDEsIHNvIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIG92ZXJmbG93IHdoZW4gd2UgbXVs
dGlwbHkgYnkgNC4KICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihoZWlnaHQpOwotICAgICAgICAgICAgaWYgKHRvdGFsX3NpemUgPiAzMiAqIDEwMjQgKiAxMDI0
KSAgLy8gMzJNID0gMTI4TUIgbWVtb3J5IHRvdGFsICgzMiBicHApLgotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIHRvdGFsX3NpemUgPiAoKDI1NiAqIDI1NiAqIDI1NiAqIDMyKSAtIDEpOwogICAgICAgICB9
CiAKICAgICAgICAgSW50U2l6ZSBtX3NpemU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZp
c2lvbiA0NDUxMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY1LDE3ICs0NjUsMTUgQEAgYm9v
bCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAvLyBhbHNvIGlu
aXRpYWxpemUgaXQgdG8gdHJhbnNwYXJlbnQuCiAgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUo
c2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICAg
ICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CisgICAgICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAKICAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUg
ZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZlci5zZXRS
ZWN0KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOwotCi0g
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYWxwaGEgKHRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiB0
aGUgYnVmZmVyIGlzIGNvbnN0cnVjdGVkKS4KICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nf
c3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9QTkdJbWFnZURlY29kZXIuY3BwCShy
ZXZpc2lvbiA0NDUxMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9Q
TkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDggQEAgdm9p
ZCBoZWFkZXJBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nLCBwbgogICAgIHN0YXRpY19jYXN0PFBO
R0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5oZWFkZXJBdmFp
bGFibGUoKTsKIH0KIAotdm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKCkgewor
dm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kaW5nRmFpbGVkKCkKK3sKICAgICBtX2ZhaWxlZCA9
IHRydWU7CiB9CiAKQEAgLTMzMCw2ICszMzEsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKHVuc2lnCiAKICAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFy
dGlhbGx5IGNvbXBsZXRlLgogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6
RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKIAogICAg
ICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdl
LgogICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9YQk1JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDUxMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBAIFJHQkEzMkJ1ZmZlciogWEJNSW1h
Z2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICAgICAgZnJhbWUuc3RhdHVzKCkgPT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIGlmICghZnJhbWUuc2V0U2l6ZShzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgZnJhbWUuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBmcmFtZS5zZXRTdGF0
dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31112</attachid>
            <date>2009-06-09 16:49:25 -0700</date>
            <delta_ts>2009-06-09 19:23:48 -0700</delta_ts>
            <desc>part four (Landed r44553)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30992</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDU0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDktMDYtMDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IGZvdXIK
KyAgICAgICAgTW9zdCBvZiB0aGUgcmVtYWluaW5nIENhaXJvIGNoYW5nZXMgbmVlZGVkIGJlZm9y
ZSBtZXJnaW5nIFNraWEvQ2Fpcm8KKyAgICAgICAgaW1hZ2UgZGVjb2RlcnMuICBNb3N0IG9mIHRo
ZXNlIGludm9sdmUgcGx1bWJpbmcgbW9yZSBlcnJvciBkZXRlY3Rpb24gYW5kCisgICAgICAgIGhh
bmRsaW5nIChvciwgaW4gc29tZSBjYXNlcywgbWVyZWx5IHRoZSBjYXBhYmlsaXR5IHRvIGRldGVj
dCBlcnJvcnMsIGFzCisgICAgICAgIGUuZy4gU2tpYSBkZXRlY3RzIGFuZCBoYW5kbGVzIGltYWdl
IGFsbG9jYXRpb24gZmFpbHVyZSB3aGlsZSBDYWlybworICAgICAgICBjdXJyZW50bHkgZG9lc24n
dCkuICBUaGVyZSBpcyBhbHNvIHNvbWUgZ2VuZXJhbCBjbGVhbnVwIGFuZAorICAgICAgICBzaW1w
bGlmaWNhdGlvbjsgUkdCQTMyQnVmZmVyOjptX2hlaWdodCBhbmQgYWxsIGFzc29jaWF0ZWQgZnVu
Y3Rpb25zIGhhdmUKKyAgICAgICAgYmVlbiByZW1vdmVkIChzZXQgYnV0IG5ldmVyIHVzZWQpIGFu
ZCBzb21lIHBsYWNlcyBub3cgcmVseSBvbiBzdXBlcmNsYXNzCisgICAgICAgIGltcGxlbWVudGF0
aW9ucy4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
OgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIpOiBSZW1vdmUg
bV9oZWlnaHQsIGVuc3VyZUhlaWdodCgpIGFuZCBhc3NvY2lhdGVkIHN0dWZmCisgICAgICAgIChX
ZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKTogQWRkIEFQSSBmdW5jdGlvbiBz
byByZWZjb3VudGVkIGJhY2tpbmcgc3RvcmVzIChsaWtlIFNraWEgdXNlcykgY2FuIGJlIHVzZWQg
d2l0aCBHSUZzCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFNpemUpOiBaZXJv
LWZpbGwgaW1hZ2UgdG8gYXZvaWQgZ2FyYmFnZQorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVm
ZmVyOjpoZWlnaHQpOiBSZW1vdmUKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6ZW5z
dXJlSGVpZ2h0KTogUmVtb3ZlCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdl
RGVjb2Rlcik6IEtlZXAgbWVtYmVyIGluaXRpYWxpemF0aW9uIGluIG9yZGVyLCBmb3JjZSBzdWJj
bGFzc2VzIHRvIGdvIHRocm91Z2ggc2l6ZSgpIGluc3RlYWQgb2YgYWNjZXNzaW5nIG1fc2l6ZSBk
aXJlY3RseQorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUp
OiBDaGVjayB0aGF0IGRlY29kaW5nIGhhc24ndCBmYWlsZWQKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2l6ZSk6IENoZWNrIHRoYXQgZGVjb2RpbmcgaGFzbid0IGZhaWxlZAorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKTogUHJvdGVjdCBhZ2FpbnN0IGlu
dGVnZXIgb3ZlcmZsb3cKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6
ZSk6IFByb3RlY3QgYWdhaW5zdCBpbnRlZ2VyIG92ZXJmbG93CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6IFJlbW92ZSBwcmVwRW1wdHlG
cmFtZUJ1ZmZlcigpCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSk6IFJlbHkgb24gc3VwZXJjbGFzcyBpc1NpemVBdmFpbGFibGUoKSBmb3IgYmV0dGVy
IGZhaWx1cmUgaGFuZGxpbmcKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2l6
ZU5vd0F2YWlsYWJsZSk6IEFkZCByZXR1cm4gdmFsdWVzIGZvciBiZXR0ZXIgZmFpbHVyZSBoYW5k
bGluZywgcmVseSBvbiBzdXBlcmNsYXNzIHNldFNpemUoKSBmb3Igb3ZlcmZsb3cgcHJvdGVjdGlv
bgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOiBB
ZGQgcmV0dXJuIHZhbHVlcyBmb3IgYmV0dGVyIGZhaWx1cmUgaGFuZGxpbmcsIHJlbW92ZSBwcmVw
RW1wdHlGcmFtZUJ1ZmZlcigpLCB1c2UgUkdCQTMyQnVmZmVyOjpzZXRTaXplKCkgdG8gaGFuZGxl
IHBvdGVudGlhbCBhbGxvY2F0aW9uIGZhaWx1cmVzICh3b24ndCBoYXBwZW4gd2l0aCBDYWlybyBw
b3J0LCBjYW4gaW4gU2tpYSksIHVzZSBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKCkgc28g
YmFja2luZyBzdG9yZSBjYW4gYmUgcmVmY291bnRlZCBpbnRlcm5hbGx5IChDYWlybyB3b24ndCBi
ZSwgU2tpYSBpcyksIHJlbHkgb24gc3VwZXJjbGFzcyBzaXplKCkgZm9yIGJldHRlciBmYWlsdXJl
IGhhbmRsaW5nCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVk
Um93KTogRml4IHN0eWxlIHZpb2xhdGlvbiwgcmVtb3ZlIFJHQkEzMkJ1ZmZlcjo6ZW5zdXJlSGVp
Z2h0KCkKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6
IFJlbW92ZSBSR0JBMzJCdWZmZXI6OmVuc3VyZUhlaWdodCgpCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOiBSZW1vdmUgcHJlcEVtcHR5RnJh
bWVCdWZmZXIoKSwgYWRkIHJldHVybiB2YWx1ZXMgZm9yIGJldHRlciBmYWlsdXJlIGhhbmRsaW5n
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNw
cDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpkb19sencpOiBQcm90ZWN0IGFnYWluc3QgYXJy
YXkgb3ZlcmZsb3csIGFkZCBjb21tZW50cworICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnJlYWQp
OiBQcm90ZWN0IGFnYWluc3QgYXJyYXkgb3ZlcmZsb3csIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFk
IGRhdGEsIGJldHRlciBmYWlsdXJlIGhhbmRsaW5nCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogUmVtb3ZlIE1TVkMtc3BlY2lmaWMg
d2FybmluZyBkaXNhYmxlIChiZnVsZ2hhbSB3aWxsIG1vdmUgaW50byBidWlsZCBmaWxlcykKKyAg
ICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6ZGVjb2RlKTogQmV0dGVyIGZhaWx1cmUg
aGFuZGxpbmcKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSk6IFJlbHkgb24gc3VwZXJjbGFzcyBpc1NpemVBdmFpbGFibGUoKSBmb3IgYmV0dGVyIGZh
aWx1cmUgaGFuZGxpbmcKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcyk6IFVzZSBSR0JBMzJCdWZmZXI6OnNldFNpemUoKSB0byBoYW5kbGUgcG90ZW50
aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdvbid0IGhhcHBlbiB3aXRoIENhaXJvIHBvcnQsIGNh
biBpbiBTa2lhKSwgcmVseSBvbiBzdXBlcmNsYXNzIHNpemUoKSBmb3IgYmV0dGVyIGZhaWx1cmUg
aGFuZGxpbmcsIHJlbW92ZSBSR0JBMzJCdWZmZXI6OmVuc3VyZUhlaWdodCgpCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6IFJlbHkgb24g
c3VwZXJjbGFzcyBzZXRTaXplKCkgZm9yIG92ZXJmbG93IHByb3RlY3Rpb24KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDogUmVtb3ZlIE1T
VkMtc3BlY2lmaWMgd2FybmluZyBkaXNhYmxlIChiZnVsZ2hhbSB3aWxsIG1vdmUgaW50byBidWls
ZCBmaWxlcykKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNv
ZGVyKTogRG9uJ3QgYWxsb2NhdGUgYSBzbG90IGluIHRoZSBmcmFtZWJ1ZmZlciBjYWNoZSB1bnRp
bCBpdCdzIG5lZWRlZAorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUpOiBSZWx5IG9uIHN1cGVyY2xhc3MgaXNTaXplQXZhaWxhYmxlKCkgZm9yIGJldHRl
ciBmYWlsdXJlIGhhbmRsaW5nCisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleCk6IERvbid0IGFsbG9jYXRlIGEgc2xvdCBpbiB0aGUgZnJhbWVidWZm
ZXIgY2FjaGUgdW50aWwgaXQncyBuZWVkZWQKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZGVjb2RlKTogRG9uJ3QgYWxsb2NhdGUgYSBzbG90IGluIHRoZSBmcmFtZWJ1ZmZlciBj
YWNoZSB1bnRpbCBpdCdzIG5lZWRlZAorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVy
OjpkZWNvZGluZ0ZhaWxlZCk6IEZpeCBzdHlsZSB2aW9sYXRpb24KKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKTogUmVseSBvbiBzdXBlcmNsYXNzIGlz
U2l6ZUF2YWlsYWJsZSgpIGFuZCBzZXRTaXplKCkgZm9yIG92ZXJmbG93IHByb3RlY3Rpb24gYW5k
IGJldHRlciBmYWlsdXJlIGhhbmRsaW5nCisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29k
ZXI6OnJvd0F2YWlsYWJsZSk6IERvbid0IGFsbG9jYXRlIGEgc2xvdCBpbiB0aGUgZnJhbWVidWZm
ZXIgY2FjaGUgdW50aWwgaXQncyBuZWVkZWQsIHVzZSBSR0JBMzJCdWZmZXI6OnNldFNpemUoKSB0
byBoYW5kbGUgcG90ZW50aWFsIGFsbG9jYXRpb24gZmFpbHVyZXMgKHdvbid0IGhhcHBlbiB3aXRo
IENhaXJvIHBvcnQsIGNhbiBpbiBTa2lhKSwgcmVtb3ZlIFJHQkEzMkJ1ZmZlcjo6ZW5zdXJlSGVp
Z2h0KCkKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUpOiBE
b24ndCBhbGxvY2F0ZSBhIHNsb3QgaW4gdGhlIGZyYW1lYnVmZmVyIGNhY2hlIHVudGlsIGl0J3Mg
bmVlZGVkCisKIDIwMDktMDYtMDkgIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24g
NDQ1NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTIsOCAr
NTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH07CiAKICAgICAgICAgUkdCQTMy
QnVmZmVyKCkKLSAgICAgICAgICAgIDogbV9oZWlnaHQoMCkKLSAgICAgICAgICAgICwgbV9zdGF0
dXMoRnJhbWVFbXB0eSkKKyAgICAgICAgICAgIDogbV9zdGF0dXMoRnJhbWVFbXB0eSkKICAgICAg
ICAgICAgICwgbV9kdXJhdGlvbigwKQogICAgICAgICAgICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERp
c3Bvc2VOb3RTcGVjaWZpZWQpCiAgICAgICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCkBAIC02
OSwxNyArNzAsNDIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgIC8vIG1ldGFkYXRh
IG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgogICAgICAgICB9CiAKKyAgICAgICAgLy8gVGhpcyBm
dW5jdGlvbiBjcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIGltYWdlIGRhdGEgaW4gfG90aGVyfCwg
c28gdGhlCisgICAgICAgIC8vIHR3byBpbWFnZXMgY2FuIGJlIG1vZGlmaWVkIGluZGVwZW5kZW50
bHkuCisgICAgICAgIHZvaWQgY29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhl
cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7Cisg
ICAgICAgICAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7
IH0KICAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzKCkgeyByZXR1cm4gbV9ieXRlczsgfQorCisg
ICAgICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGl4ZWxzIGFyZSB3cml0dGVuLiBX
aWxsIHJldHVybiB0cnVlIG9uCisgICAgICAgIC8vIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZSBtZW1v
cnkgYWxsb2NhdGlvbiBmYWlscy4KKyAgICAgICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50
IGhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5
IHRvIGNoZWNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlCisgICAgICAgICAgICAvLyBy
ZXF1ZXN0ZWQgc2l6ZSB3YXMgdG9vIGJpZy4uLgorICAgICAgICAgICAgbV9ieXRlcy5yZXNpemUo
d2lkdGggKiBoZWlnaHQpOworCisgICAgICAgICAgICAvLyBDbGVhciB0aGUgaW1hZ2UuCisgICAg
ICAgICAgICBtX2J5dGVzLmZpbGwoMCk7CisgICAgICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsK
KworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBjb25zdCBJ
bnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgICAgIHVuc2lnbmVk
IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAgICAgIEZyYW1lU3RhdHVz
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bv
c2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhv
ZDsgfQogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsg
fQogCiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7
IH0KLSAgICAgICAgdm9pZCBlbnN1cmVIZWlnaHQodW5zaWduZWQgcm93SW5kZXgpIHsgaWYgKHJv
d0luZGV4ID4gbV9oZWlnaHQpIG1faGVpZ2h0ID0gcm93SW5kZXg7IH0KICAgICAgICAgdm9pZCBz
ZXRTdGF0dXMoRnJhbWVTdGF0dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KICAgICAgICAgdm9pZCBz
ZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0K
ICAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhv
ZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CkBAIC0xMDYsNyArMTMyLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbnRSZWN0IG1fcmVjdDsgICAgLy8gVGhlIHJlY3Qg
b2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4gdGhlIG92ZXJhbGwgYnVmZmVy
LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJl
IHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZSBv
dmVyYWxsIGltYWdlIHNpemUuCi0gICAgICAgIHVuc2lnbmVkIG1faGVpZ2h0OyAvLyBUaGUgaGVp
Z2h0ICh0aGUgbnVtYmVyIG9mIHJvd3Mgd2UndmUgZnVsbHkgZGVjb2RlZCkuCiAgICAgICAgIEZy
YW1lU3RhdHVzIG1fc3RhdHVzOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGZyYW1lIGlzIGNvbXBs
ZXRlbHkgZmluaXNoZWQgZGVjb2RpbmcuCiAgICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8v
IFRoZSBhbmltYXRpb24gZGVsYXkuCiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNw
b3NhbE1ldGhvZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4gaW5p
dGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgpAQCAtMTE5LDExICsxNDQsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEltYWdlRGVjb2RlciB7CiAgICAgcHVibGljOgogICAgICAg
ICBJbWFnZURlY29kZXIoKQotICAgICAgICAgICAgOiBtX3NpemVBdmFpbGFibGUoZmFsc2UpCi0g
ICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNlKQorICAgICAgICAgICAgOiBtX2ZhaWxlZChmYWxz
ZSkKKyAgICAgICAgICAgICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQogICAgICAgICB7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkge30KIAog
ICAgICAgICAvLyBUaGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQg
d2l0aCBhbiB1bmRlY29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBlLgpAQCAtMTMyLDExICsxNTcsMjIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBBbGwgc3BlY2lmaWMgZGVjb2RlciBw
bHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2ZW4uCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpIHsgbV9kYXRhID0gZGF0YTsgfQogCi0gICAgICAgIC8vIFdoZXRoZXIgb3Ig
bm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3QgPSAwOworICAgICAgICAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhp
cyBkZWZhdWx0CisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlm
IHRoZSBzaXplIGhhcyBiZWVuIHNldCBhbmQgd2UgaGF2ZSBub3QKKyAgICAgICAgLy8gc2VlbiBh
IGZhaWx1cmUuIERlY29kZXJzIG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8gbGF6aWx5IGRl
Y29kZQorICAgICAgICAvLyBlbm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOyAKKyAgICAgICAg
fQogCiAgICAgICAgIC8vIFJlcXVlc3RzIHRoZSBzaXplLgotICAgICAgICB2aXJ0dWFsIEludFNp
emUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgICAgICB2aXJ0dWFsIEludFNp
emUgc2l6ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlcXVlc3RpbmcgdGhl
IHNpemUgb2YgYW4gaW52YWxpZCBiaXRtYXAgaXMgbWVhbmluZ2xlc3MuCisgICAgICAgICAgICBB
U1NFUlQoIW1fZmFpbGVkKTsKKyAgICAgICAgICAgIHJldHVybiBtX3NpemU7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAg
Q2xhc3NlcyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgZnJhbWVzCiAgICAgICAgIC8vIHdpbGwgc2Nh
biB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlciBpZiB0aGV5IG5lZWQgdG8gKHdpdGhvdXQg
bmVjZXNzYXJpbHkKQEAgLTE2NiwxMSArMjAyLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZv
cmVGcmFtZSkgeyB9CiAKICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIC8vIENhbGxlZCBieSB0aGUg
aW1hZ2UgZGVjb2RlcnMgdG8gc2V0IHRoZWlyIGRlY29kZWQgc2l6ZSwgdGhpcyBhbHNvIGNoZWNr
CisgICAgICAgIC8vIHRoZSBzaXplIGZvciB2YWxpZGl0eS4gSXQgd2lsbCByZXR1cm4gdHJ1ZSBp
ZiB0aGUgc2l6ZSB3YXMgc2V0LCBvciBmYWxzZQorICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbiBl
cnJvci4gT24gZXJyb3IsIHRoZSBtX2ZhaWxlZCBmbGFnIHdpbGwgYmUgc2V0IGFuZCB0aGUKKyAg
ICAgICAgLy8gY2FsbGVyIHNob3VsZCBpbW1lZGlhdGVseSBzdG9wIGRlY29kaW5nLgorICAgICAg
ICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0
YTsgLy8gVGhlIGVuY29kZWQgZGF0YS4KICAgICAgICAgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4gbV9m
cmFtZUJ1ZmZlckNhY2hlOwotICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZTsKICAgICAgICAg
bXV0YWJsZSBib29sIG1fZmFpbGVkOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gU29tZSBj
b2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFzICJ3aWR0aCAqIGhlaWdo
dCAqIDQiCisgICAgICAgIC8vIGFuZCByZXR1cm4gaXQgYXMgYSAoc2lnbmVkKSBpbnQuICBBdm9p
ZCBvdmVyZmxvdy4KKyAgICAgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyB3aWR0aCAqIGhl
aWdodCBtdXN0IG5vdCBleGNlZWQgKDIgXiAyOSkgLSAxLCBzbyB0aGF0IHdlIGRvbid0CisgICAg
ICAgICAgICAvLyBvdmVyZmxvdyB3aGVuIHdlIG11bHRpcGx5IGJ5IDQuCisgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4od2lkdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaGVpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiB0b3RhbF9zaXplID4gKCgxIDw8IDI5KSAtIDEpOworICAgICAgICB9CisKICAgICAgICAg
SW50U2l6ZSBtX3NpemU7CisgICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxlOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1
NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBHSUZJbWFnZURl
Y29kZXI6OnNldERhdGEoU2hhcmVkQnVmZgogYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIGRhdGEgdG8gZGVj
b2RlLCBzZW5kIGl0IHRvIHRoZSBHSUYgcmVhZGVyIG5vdy4KLSAgICBpZiAoIW1fc2l6ZUF2YWls
YWJsZSAmJiBtX3JlYWRlcikgeworICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKSAmJiBtX3JlYWRlcikgewogICAgICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCkgCiAgICAgICAgIGRlY29kZShHSUZTaXplUXVlcnksIDApOwogICAg
IH0KIAotICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CisgICAgcmV0dXJuIEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVz
IGZvciB0aGUgaW1hZ2UuICBXaWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIK
QEAgLTI1MSwxMCArMjUxLDkgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZShHSUZRdWVy
eSBxdQogfQogCiAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1h
Z2VEZWNvZGVyOjpzaXplTm93QXZhaWxhYmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKKyAgICByZXR1cm4gc2V0U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVu
c2lnbmVkIGJ5dGVzTGVmdCkKQEAgLTI2Miw3ICsyNjEsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rl
cjo6ZGVjb2RpbmdIYWx0ZWQodW5zCiAgICAgbV9yZWFkZXItPnNldFJlYWRPZmZzZXQobV9kYXRh
LT5zaXplKCkgLSBieXRlc0xlZnQpOwogfQogCi12b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVmZmVyLgogICAgIEludFJlY3QgZnJhbWVSZWN0KG1fcmVh
ZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpLApAQCAtMjc5LDcg
KzI3OCwxMCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAg
CiAgICAgaWYgKGZyYW1lSW5kZXggPT0gMCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAg
ICAgIHByZXBFbXB0eUZyYW1lQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgIGlmICghYnVmZmVyLT5z
ZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICBt
X2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUg
ZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUncwogICAgICAgICAvLyBkaXNwb3NhbCBtZXRo
b2QuCkBAIC0zMDIsOCArMzA0LDcgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcih1bgogICAgICAgICBpZiAoKHByZXZNZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3Nl
Tm90U3BlY2lmaWVkKSB8fAogICAgICAgICAgICAgICAgIChwcmV2TWV0aG9kID09IFJHQkEzMkJ1
ZmZlcjo6RGlzcG9zZUtlZXApKSB7CiAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgbGFzdCBm
cmFtZSBhcyB0aGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUuCi0gICAgICAgICAgICBi
dWZmZXItPmJ5dGVzKCkgPSBwcmV2QnVmZmVyLT5ieXRlcygpOwotICAgICAgICAgICAgYnVmZmVy
LT5zZXRIYXNBbHBoYShwcmV2QnVmZmVyLT5oYXNBbHBoYSgpKTsKKyAgICAgICAgICAgIGJ1ZmZl
ci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJl
bnQsIHdpdGhvdXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdl
IG91dHNpZGUgb2YgdGhlIGZyYW1lLgpAQCAtMzEyLDE0ICszMTMsMTYgQEAgdm9pZCBHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAgIHx8IHByZXZSZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoMCwgMCksIHNpemUoKSkpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9m
IHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxl
dGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAgICAgICBwcmVwRW1wdHlGcmFtZUJ1ZmZlcihi
dWZmZXIpOworICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xl
IHByZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAg
ICAgYnVmZmVyLT5ieXRlcygpID0gcHJldkJ1ZmZlci0+Ynl0ZXMoKTsKLSAgICAgICAgICAgICAg
YnVmZmVyLT5zZXRIYXNBbHBoYShwcmV2QnVmZmVyLT5oYXNBbHBoYSgpKTsKKyAgICAgICAgICAg
ICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7CiAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5ib3R0b20oKTsgKyt5KSB7CiAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCogY29uc3QgY3VycmVudFJvdyA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLT5ieXRlcygpLmRhdGEoKSArICh5ICogbV9zaXplLndpZHRoKCkp
OworICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCkgKyAoeSAqIHNp
emUoKS53aWR0aCgpKTsKICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54
KCk7IHggPCBwcmV2UmVjdC5yaWdodCgpOyArK3gpCiAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyLT5zZXRSR0JBKCooY3VycmVudFJvdyArIHgpLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAg
ICAgfQpAQCAtMzM0LDEzICszMzcsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1l
QnVmZmVyKHVuCiAKICAgICAvLyBSZXNldCB0aGUgYWxwaGEgcGl4ZWwgdHJhY2tlciBmb3IgdGhp
cyBmcmFtZS4KICAgICBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IGZhbHNlOwotfQotCi12b2lk
IEdJRkltYWdlRGVjb2Rlcjo6cHJlcEVtcHR5RnJhbWVCdWZmZXIoUkdCQTMyQnVmZmVyKiBidWZm
ZXIpIGNvbnN0Ci17Ci0gICAgYnVmZmVyLT5ieXRlcygpLnJlc2l6ZShzaXplKCkud2lkdGgoKSAq
IHNpemUoKS5oZWlnaHQoKSk7Ci0gICAgYnVmZmVyLT5ieXRlcygpLmZpbGwoMCk7Ci0gICAgYnVm
ZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBHSUZJ
bWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsCkBAIC0zNTIs
OCArMzQ5LDggQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVucwogewog
ICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBSR0JBMzJCdWZm
ZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoYnVm
ZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgaW5pdEZy
YW1lQnVmZmVyKGZyYW1lSW5kZXgpOworICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KICAgICBp
ZiAocm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zm
c2V0KCkgKyByb3dOdW1iZXIpID49IHNpemUoKS5oZWlnaHQoKSkKQEAgLTQwNCwyMSArNDAxLDE3
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICBpZiAocmVw
ZWF0Q291bnQgPiAxKSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJvdyB8cmVwZWF0Q291bnR8LTEg
dGltZXMuCiAgICAgICAgIHVuc2lnbmVkIG51bSA9IGN1cnJEc3QgLSBkc3Q7Ci0gICAgICAgIHVu
c2lnbmVkIGRhdGFfc2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7CisgICAgICAgIHVuc2ln
bmVkIGRhdGFTaXplID0gbnVtICogc2l6ZW9mKHVuc2lnbmVkKTsKICAgICAgICAgdW5zaWduZWQg
d2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICAgICAgdW5zaWduZWQqIGVuZCA9IGJ1ZmZlci5i
eXRlcygpLmRhdGEoKSArIHdpZHRoICogc2l6ZSgpLmhlaWdodCgpOwogICAgICAgICBjdXJyRHN0
ID0gZHN0ICsgd2lkdGg7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZXBlYXRD
b3VudDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoY3VyckRzdCArIG51bSA+IGVuZCkgLy8gUHJv
dGVjdCBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJydW4gZnJvbSBhIGJvZ3VzIHJlcGVhdENvdW50Lgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwg
ZGF0YV9zaXplKTsKKyAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3QsIGRhdGFTaXplKTsK
ICAgICAgICAgICAgIGN1cnJEc3QgKz0gd2lkdGg7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAv
LyBPdXIgcGFydGlhbCBoZWlnaHQgaXMgcm93TnVtYmVyICsgMSwgZS5nLiwgcm93IDIgaXMgdGhl
IDNyZCByb3csIHNvIHRoYXQncyBhIGhlaWdodCBvZiAzLgotICAgIC8vIEFkZGluZyBpbiByZXBl
YXRDb3VudCAtIDEgdG8gcm93TnVtYmVyICsgMSB3b3JrcyBvdXQgdG8ganVzdCBiZSByb3dOdW1i
ZXIgKyByZXBlYXRDb3VudC4KLSAgICBidWZmZXIuZW5zdXJlSGVpZ2h0KHJvd051bWJlciArIHJl
cGVhdENvdW50KTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5z
aWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpG
cmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQpAQCAtNDI2LDEwICs0MTksOSBAQCB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgLy8gSW5pdGlhbGl6
ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBkby1ub3RoaW5nIGZy
YW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93
KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJH
QkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKLSAgICAgICAgaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5k
ZXgpOworICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgYnVmZmVyLmVuc3VyZUhlaWdodChtX3NpemUuaGVpZ2h0KCkpOwogICAgIGJ1ZmZlci5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0RHVyYXRp
b24oZnJhbWVEdXJhdGlvbik7CiAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2Fs
TWV0aG9kKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDU0NSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkZWNv
ZGUoR0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKSBjb25zdDsKIAogICAgICAgICAvLyBD
YWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLSAgICAgICAgdm9pZCBzaXplTm93QXZhaWxh
YmxlKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOworICAgICAgICBib29sIHNpemVO
b3dBdmFpbGFibGUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAgICAgICAgIHZv
aWQgZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsKICAgICAgICAgdm9pZCBoYXZl
RGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIs
IHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFy
ZW50UGl4ZWxzKTsKQEAgLTczLDEyICs3Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIC8vIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBmcmFtZSBidWZm
ZXIgd2l0aCB0aGUgZ2l2ZW4gaW5kZXgsIGJhc2VkIG9uIHRoZQotICAgICAgICAvLyBwcmV2aW91
cyBmcmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4KLSAgICAgICAgdm9pZCBpbml0RnJhbWVCdWZmZXIo
dW5zaWduZWQgZnJhbWVJbmRleCk7Ci0KLSAgICAgICAgLy8gQSBoZWxwZXIgZm9yIGluaXRGcmFt
ZUJ1ZmZlcigpLCB0aGlzIHNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgYW5kCi0gICAgICAg
IC8vIGZpbGxzIGl0IHdpdGggdHJhbnNwYXJlbnQgcGl4ZWxzLgotICAgICAgICB2b2lkIHByZXBF
bXB0eUZyYW1lQnVmZmVyKFJHQkEzMkJ1ZmZlciopIGNvbnN0OworICAgICAgICAvLyBwcmV2aW91
cyBmcmFtZSdzIGRpc3Bvc2FsIG1ldGhvZC4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuIE9uIGZh
aWx1cmUsCisgICAgICAgIC8vIHRoaXMgd2lsbCBtYXJrIHRoZSBpbWFnZSBhcyBmYWlsZWQuCisg
ICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpOwogCiAgICAg
ICAgIGJvb2wgbV9mcmFtZUNvdW50VmFsaWQ7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVmZmVy
U2F3QWxwaGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA0NDU0NSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzExLDkgKzMxMSwxMyBAQCBpbnQgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25z
dCB1bnNpZ25lCiAKICAgICAgIHdoaWxlIChjb2RlID49IGNsZWFyX2NvZGUpCiAgICAgICB7Ci0g
ICAgICAgIGlmIChjb2RlID09IHByZWZpeFtjb2RlXSkKKyAgICAgICAgaWYgKGNvZGUgPj0gTUFY
X0JJVFMgfHwgY29kZSA9PSBwcmVmaXhbY29kZV0pCiAgICAgICAgICAgcmV0dXJuIC0xOwogCisg
ICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN1ZmZpeFtdIG9ubHkgaG9sZHMgY2hhcmFjdGVycyB0aHJv
dWdoIHN1ZmZpeFthdmFpbCAtIDFdLAorICAgICAgICAvLyBhbGxvd2luZyBjb2RlID49IGF2YWls
IGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1lZAorICAgICAgICAvLyBk
YXRhLiBBcyBsb25nIGFzIGNvZGUgPCBNQVhfQklUUywgdGhlIG9ubHkgcmlzayBpcyBhIGdhcmJs
ZWQgaW1hZ2UsCisgICAgICAgIC8vIHdoaWNoIGlzIG5vIHdvcnNlIHRoYW4gcmVmdXNpbmcgdG8g
ZGlzcGxheSBpdC4KICAgICAgICAgKnN0YWNrcCsrID0gc3VmZml4W2NvZGVdOwogICAgICAgICBj
b2RlID0gcHJlZml4W2NvZGVdOwogCkBAIC00NDUsNyArNDQ5LDEwIEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICB7CiAgICAgICAvKiBJbml0aWFsaXplIExa
VyBwYXJzZXIvZGVjb2RlciAqLwogICAgICAgaW50IGRhdGFzaXplID0gKnE7Ci0gICAgICBpZiAo
ZGF0YXNpemUgPiBNQVhfTFpXX0JJVFMpIHsKKyAgICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVz
aXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKKyAgICAg
IC8vIHRoYXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19C
SVRTIHZhbHVlICgxMikuCisgICAgICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUg
Y29kZW1hc2sgY29ycmVjdGx5IGF0IDQwOTUuCisgICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xa
V19CSVRTKSB7CiAgICAgICAgIHN0YXRlID0gZ2lmX2Vycm9yOwogICAgICAgICBicmVhazsKICAg
ICAgIH0KQEAgLTQ2OCw2ICs0NzUsOCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0
IHVuc2lnbmVkCiAgICAgICAgIC8qIGluaXQgdGhlIHRhYmxlcyAqLwogICAgICAgICBpZiAoIWZy
YW1lX3JlYWRlci0+c3VmZml4KQogICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3VmZml4ID0gbmV3
IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOworICAgICAgICAvLyBDbGVhcmluZyB0aGUgd2hvbGUg
c3VmZml4IHRhYmxlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBiYWQgZGF0YS4KKyAgICAg
ICAgbWVtc2V0KGZyYW1lX3JlYWRlci0+c3VmZml4LCAwLCBNQVhfQklUUyk7CiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZnJhbWVfcmVhZGVyLT5jbGVhcl9jb2RlOyBpKyspCiAgICAgICAg
ICAgZnJhbWVfcmVhZGVyLT5zdWZmaXhbaV0gPSBpOwogCkBAIC01MDgsOCArNTE3LDEwIEBAIGJv
b2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQKICAgICAgIHNjcmVlbl9oZWln
aHQgPSBHRVRJTlQxNihxICsgMik7CiAKICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRl
Y29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCi0gICAgICBpZiAoY2xpZW50cHRyKQotICAgICAgICBj
bGllbnRwdHItPnNpemVOb3dBdmFpbGFibGUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KTsK
KyAgICAgIGlmIChjbGllbnRwdHIpIHsKKyAgICAgICAgaWYgKCFjbGllbnRwdHItPnNpemVOb3dB
dmFpbGFibGUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKKyAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICB9CiAgICAgICAKICAgICAgIHNjcmVlbl9iZ2NvbG9yID0gcVs1XTsKICAg
ICAgIGdsb2JhbF9jb2xvcm1hcF9zaXplID0gMjw8KHFbNF0mMHgwNyk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA0NDU0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTcg
KzM4LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+CiAKIGV4dGVybiAi
QyIgewogI2luY2x1ZGUgImpwZWdsaWIuaCIKIH0KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0vLyBS
ZW1vdmUgd2FybmluZ3MgZnJvbSB3YXJuaW5nIGxldmVsIDQuCi0jcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZSA6IDQ2MTEpIC8vIHdhcm5pbmcgQzQ2MTE6IGludGVyYWN0aW9uIGJldHdlZW4gJ19zZXRq
bXAnIGFuZCBDKysgb2JqZWN0IGRlc3RydWN0aW9uIGlzIG5vbi1wb3J0YWJsZQotI2VuZGlmIC8v
IENPTVBJTEVSKE1TVkMpCi0KICNpbmNsdWRlIDxzZXRqbXAuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMjE5LDcgKzIxMywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBm
aWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgICAg
ICAgICAgICAgIG1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5p
bWFnZV9oZWlnaHQpOworICAgICAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKG1f
aW5mby5pbWFnZV93aWR0aCwgbV9pbmZvLmltYWdlX2hlaWdodCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEpQRUdfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobV9kZWNvZGlu
Z1NpemVPbmx5KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBzdG9wIGhlcmUuCkBA
IC00MTQsNyArNDExLDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1
ZgogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAogewogICAg
IC8vIElmIHdlIGhhdmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgSlBF
RyByZWFkZXIgbm93LgotICAgIGlmICghbV9zaXplQXZhaWxhYmxlICYmIG1fcmVhZGVyKSB7Cisg
ICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIG1fcmVhZGVyKSB7CiAg
ICAgICAgIGlmIChtX2ZhaWxlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDIz
LDcgKzQyMCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICAgICAgZGVjb2RlKHRydWUpOwogICAgIH0KIAotICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7
CisgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKIFJHQkEz
MkJ1ZmZlciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKQEAgLTQ2MywyMyArNDYwLDI1IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nh
bmxpbmVzKCkKICAgICAvLyBSZXNpemUgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGlt
YWdlLgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwog
ICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7Ci0g
ICAgICAgIC8vIExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0
aC9oZWlnaHQuCi0gICAgICAgIFJHQkEzMkFycmF5JiBieXRlcyA9IGJ1ZmZlci5ieXRlcygpOwot
ICAgICAgICBieXRlcy5yZXNpemUoc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkpOwor
ICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNvcnJlY3Qgd2lk
dGgvaGVpZ2h0LiBUaGlzIHdpbGwKKyAgICAgICAgLy8gYWxzbyBpbml0aWFsaXplIGl0IHRvIHRy
YW5zcGFyZW50LgorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgb3VyIHN0
YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMo
UkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEo
ZmFsc2UpOwogCiAgICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0
aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KDAsIDAsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLQotICAgICAgICAvLyBXZSBkb24ndCBo
YXZlIGFscGhhICh0aGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gdGhlIGJ1ZmZlciBpcyBjb25zdHJ1
Y3RlZCkuCisgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRo
KCksIHNpemUoKS5oZWlnaHQoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1
Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwogICAgIEpTQU1QQVJSQVkgc2FtcGxlcyA9IG1f
cmVhZGVyLT5zYW1wbGVzKCk7CiAKLSAgICB1bnNpZ25lZCogZHN0ID0gYnVmZmVyLmJ5dGVzKCku
ZGF0YSgpICsgaW5mby0+b3V0cHV0X3NjYW5saW5lICogbV9zaXplLndpZHRoKCk7CisgICAgdW5z
aWduZWQqIGRzdCA9IGJ1ZmZlci5ieXRlcygpLmRhdGEoKSArIGluZm8tPm91dHB1dF9zY2FubGlu
ZSAqIHNpemUoKS53aWR0aCgpOwogICAgCiAgICAgd2hpbGUgKGluZm8tPm91dHB1dF9zY2FubGlu
ZSA8IGluZm8tPm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgLyogUmVxdWVzdCBvbmUgc2Nhbmxp
bmUuICBSZXR1cm5zIDAgb3IgMSBzY2FubGluZXMuICovCkBAIC00OTIsOCArNDkxLDYgQEAgYm9v
bCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAgICAgdW5zaWdu
ZWQgYiA9ICpqMSsrOwogICAgICAgICAgICAgUkdCQTMyQnVmZmVyOjpzZXRSR0JBKCpkc3QrKywg
ciwgZywgYiwgMHhGRik7CiAgICAgICAgIH0KLQotICAgICAgICBidWZmZXIuZW5zdXJlSGVpZ2h0
KGluZm8tPm91dHB1dF9zY2FubGluZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTcgKzU0LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBKUEVHSW1hZ2VSZWFk
ZXIqIHJlYWRlcigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTaXpl
KGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAgICAgaWYgKCFtX3NpemVBdmFpbGFi
bGUpIHsKLSAgICAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQogICAgICAgICBib29sIG91dHB1dFNjYW5saW5lcygpOwogICAgICAgICB2b2lk
IGpwZWdDb21wbGV0ZSgpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEpQ
RUdJbWFnZVJlYWRlcjsKICAgICAgICAgbXV0YWJsZSBKUEVHSW1hZ2VSZWFkZXIqIG1fcmVhZGVy
OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1NDUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCwxMSArNDAsNiBAQAogI2luY2x1ZGUgInBuZy5oIgogI2luY2x1ZGUg
ImFzc2VydC5oIgogCi0jaWYgQ09NUElMRVIoTVNWQykKLS8vIFJlbW92ZSB3YXJuaW5ncyBmcm9t
IHdhcm5pbmcgbGV2ZWwgNC4KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDYxMSkgLy8gd2Fy
bmluZyBDNDYxMTogaW50ZXJhY3Rpb24gYmV0d2VlbiAnX3NldGptcCcgYW5kIEMrKyBvYmplY3Qg
ZGVzdHJ1Y3Rpb24gaXMgbm9uLXBvcnRhYmxlCi0jZW5kaWYgLy8gQ09NUElMRVIoTVNWQykKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHYW1tYSBjb25zdGFudHMuCkBAIC0xNDMsNyArMTM4
LDYgQEAgcHJpdmF0ZToKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKICAgICA6
IG1fcmVhZGVyKDApCiB7Ci0gICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKIH0KIAog
UE5HSW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKQEAgLTE2OSw3ICsxNjMsNyBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmCiBib29sIFBOR0ltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKIHsKICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRp
bmcgZGF0YSB0byBkZWNvZGUsIHNlbmQgaXQgdG8gdGhlIFBORyByZWFkZXIgbm93LgotICAgIGlm
ICghbV9zaXplQXZhaWxhYmxlICYmIG1fcmVhZGVyKSB7CisgICAgaWYgKCFJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpICYmIG1fcmVhZGVyKSB7CiAgICAgICAgIGlmIChtX2ZhaWxlZCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTc4LDcgKzE3Miw3IEBAIGJvb2wgUE5H
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAKICAgICAgICAgZGVjb2RlKHRydWUpOwog
ICAgIH0KIAotICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CisgICAgcmV0dXJuIEltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQpAQCAtMTg2LDYgKzE4MCw5IEBA
IFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICBpZiAoaW5kZXgp
CiAgICAgICAgIHJldHVybiAwOwogCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisKICAgICBSR0JBMzJC
dWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0
dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYgbV9yZWFkZXIpCiAgICAgICAg
IC8vIERlY29kZSB0aGlzIGZyYW1lLgpAQCAtMjAxLDcgKzE5OCw3IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT24KIAogICAgIG1fcmVhZGVyLT5kZWNvZGUobV9kYXRh
LT5idWZmZXIoKSwgc2l6ZU9ubHkpOwogICAgIAotICAgIGlmIChtX2ZhaWxlZCB8fCAobV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkp
IHsKKyAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYm
IG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUpKSB7CiAgICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKICAgICAgICAgbV9yZWFkZXIgPSAw
OwogICAgIH0KQEAgLTIyNiw3ICsyMjMsOCBAQCB2b2lkIGhlYWRlckF2YWlsYWJsZShwbmdfc3Ry
dWN0cCBwbmcsIHBuCiAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9w
cm9ncmVzc2l2ZV9wdHIocG5nKSktPmhlYWRlckF2YWlsYWJsZSgpOwogfQogCi12b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZGVjb2RpbmdGYWlsZWQoKSB7Cit2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZGVj
b2RpbmdGYWlsZWQoKQorewogICAgIG1fZmFpbGVkID0gdHJ1ZTsKIH0KIApAQCAtMjQ1LDkgKzI0
MywxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiAg
ICAgCiAgICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBp
cyBhdmFpbGFibGUuCi0gICAgaWYgKCFtX3NpemVBdmFpbGFibGUpIHsKLSAgICAgICAgbV9zaXpl
QXZhaWxhYmxlID0gdHJ1ZTsKLSAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpIHsKKyAgICAgICAg
aWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgICAgICAvLyBTaXplIHVucmVh
c29uYWJsZSwgYmFpbCBvdXQuCisgICAgICAgICAgICBsb25nam1wKHBuZy0+am1wYnVmLCAxKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGludCBiaXREZXB0
aCwgY29sb3JUeXBlLCBpbnRlcmxhY2VUeXBlLCBjb21wcmVzc2lvblR5cGUsIGZpbHRlclR5cGUs
IGNoYW5uZWxzOwpAQCAtMzEzLDE1ICszMTQsMjMgQEAgdm9pZCByb3dBdmFpbGFibGUocG5nX3N0
cnVjdHAgcG5nLCBwbmdfYgogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVu
c2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsIGludCBpbnRlcmxhY2VQ
YXNzKQogeworICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICAvLyBSZXNpemUgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGlt
YWdlLgogICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwog
ICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CiAg
ICAgICAgIC8vIExldCdzIHJlc2l6ZSBvdXIgYnVmZmVyIG5vdyB0byB0aGUgY29ycmVjdCB3aWR0
aC9oZWlnaHQuCi0gICAgICAgIFJHQkEzMkFycmF5JiBieXRlcyA9IGJ1ZmZlci5ieXRlcygpOwot
ICAgICAgICBieXRlcy5yZXNpemUoc2l6ZSgpLndpZHRoKCkgKiBzaXplKCkuaGVpZ2h0KCkpOwor
ICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKSB7CisgICAgICAgICAgICAvLyBFcnJvciBhbGxvY2F0aW5nIHRoZSBiaXRtYXAuIFdlIHNo
b3VsZCBub3QgY29udGludWUuCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29k
ZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihyZWFkZXIoKS0+cG5nUHRyKCkpKS0+ZGVjb2Rp
bmdGYWlsZWQoKTsKKyAgICAgICAgICAgIGxvbmdqbXAocmVhZGVyKCktPnBuZ1B0cigpLT5qbXBi
dWYsIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKICAgICAgICAgLy8gVXBk
YXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgogICAgICAgICBidWZmZXIu
c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNl
dEhhc0FscGhhKGZhbHNlKTsKIAogICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5
cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgogICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0
KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKQEAgLTM4OCw4ICszOTcs
NiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgICAgICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBidWZm
ZXIuZW5zdXJlSGVpZ2h0KHJvd0luZGV4ICsgMSk7CiB9CiAKIHZvaWQgcG5nQ29tcGxldGUocG5n
X3N0cnVjdHAgcG5nLCBwbmdfaW5mb3AgaW5mbykKQEAgLTM5OSw2ICs0MDYsOSBAQCB2b2lkIHBu
Z0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luCiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpwbmdDb21wbGV0ZSgpCiB7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNp
emVkIGJ1ZmZlciwgZXZlbiBpZiB0aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcgZW1wdHkuCiAgICAg
UkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgYnVmZmVy
LnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31123</attachid>
            <date>2009-06-09 21:01:14 -0700</date>
            <delta_ts>2009-06-10 10:47:39 -0700</delta_ts>
            <desc>part five (Landed r44573)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>13069</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDU1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMDktMDYtMDkgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IGZpdmUK
KyAgICAgICAgUmV3cml0ZSB1c2VycyBvZiBJbWFnZURlY29kZXIuaCB0byB1c2UgInNhZmUiIEFQ
SSBjYWxscywgU2tpYSBzaWRlLgorICAgICAgICBUaGlzIHR3ZWFrcyB0aGUgUkdCQTMyQnVmZmVy
IGludGVyZmFjZXMgdG8gYmUgaW1wbGVtZW50YWJsZSBieSBDYWlybyBhcworICAgICAgICB3ZWxs
IGFuZCBtb2RpZmllcyBTa2lhJ3MgdXNhZ2Ugb2YgdGhvc2UgaW50ZXJmYWNlcyBhY2NvcmRpbmds
eS4gIE9uY2UgYQorICAgICAgICBzaW1pbGFyIGNoYW5nZSBsYW5kcyBvbiB0aGUgQ2Fpcm8gc2lk
ZSwgdGhlIFNraWEgYW5kIENhaXJvIGRlY29kZXJzCisgICAgICAgIHNob3VsZCBiZSBpZGVudGlj
YWwgZXhjZXB0IGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgUkdCQTMyQnVmZmVyLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6IFVzZSBuZXcgUkdC
QTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgZnVuY3Rpb24uCisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEpOiBVc2UgbmV3IFJHQkEzMkJ1
ZmZlcjo6emVyb0ZpbGwoKSBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KTogUmV3cml0ZSB0byB1c2UgUkdCQTMyQnVmZmVyOjpz
ZXRSR0JBKHgsIHksIC4uLikgY2FsbHMgYXMgd2VsbCBhcyBvdGhlciBSR0JBMzJCdWZmZXIgaW50
ZXJmYWNlIGNhbGxzIGluc3RlYWQgb2Yga25vd2luZyB0aGUgdW5kZXJseWluZyB0eXBlcyBpbnNp
ZGUgdGhlIGJ1ZmZlcjsgYWxzbyB0cnkgYW5kIGFkZCBjbGFyaXR5LgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmg6IFJlbW92ZWQgYml0bWFwKCks
IHdpZHRoKCksIGFuZCBoZWlnaHQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
emVyb0ZpbGwpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weUJp
dG1hcERhdGEpOiBBdm9pZCB1c2luZyBiaXRtYXAoKSwgd2hpY2ggaXMgZ29pbmcgYXdheS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weVJvd05UaW1lcyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKTogVXNlIG5ldyB6ZXJvRmlsbCgp
IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUlt
YWdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFJHQkEpOiBD
b25kZW5zZWQgdHdvIHZlcnNpb25zIGludG8gb25lIHRoYXQgdGFrZXMgY29vcmRpbmF0ZXMgaW5z
dGVhZCBvZiBhIHJhdyBwb2ludGVyLgorCiAyMDA5LTA2LTA5ICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNraWEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNvdXJjZVNr
aWEuY3BwCShyZXZpc2lvbiA0NDU1MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZVNvdXJjZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOSArMTg1LDggQEAg
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQQogICAgICAgICByZXR1cm4g
MDsKIAogICAgIC8vIENvcHkgdGhlIGJpdG1hcC4gIFRoZSBwaXhlbCBkYXRhIGlzIHJlZmNvdW50
ZWQgaW50ZXJuYWxseSBieSBTa0JpdG1hcCwgc28KLSAgICAvLyB0aGlzIGRvZXNuJ3QgY29zdCBt
dWNoLiAgVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgdGhlIEJpdG1hcEltYWdlCi0gICAg
Ly8gYW5kIGZyZWVkIGluIEZyYW1lRGF0YTo6Y2xlYXIoKS4KLSAgICByZXR1cm4gbmV3IE5hdGl2
ZUltYWdlU2tpYShidWZmZXItPmJpdG1hcCgpKTsKKyAgICAvLyB0aGlzIGRvZXNuJ3QgY29zdCBt
dWNoLiAgCisgICAgcmV0dXJuIGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOwogfQogCiBib29s
IEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUElt
YWdlUmVhZGVyLmNwcAkocmV2aXNpb24gNDQ1NTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvQk1QSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDMs
OSArODAzLDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoUwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fc2Vlbk5vblplcm9B
bHBoYVBpeGVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2Vlblplcm9BbHBo
YVBpeGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZXJhc2VBUkdCKCkgY2Fs
bCBoZXJlIGFsc28gc2V0cyAiaGFzQWxwaGEiIHRydWUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5iaXRtYXAoKS5lcmFzZUFSR0IoMCwgMCwgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5maXJzdCgpLnplcm9GaWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlZW5a
ZXJvQWxwaGFQaXhlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFs
cGhhICE9IDI1NSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5m
aXJzdCgpLnNldEhhc0FscGhhKHRydWUpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDQ0NTUyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdl
RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCw0NyArMzQwLDQzIEBAIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KIH0KIAogdm9pZCBHSUZJbWFnZURlY29k
ZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLCAgIC8vIFBvaW50
ZXIgdG8gc2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93RW5kLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJvd051bWJlciwgIC8vIFRo
ZSByb3cgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCByZXBlYXRDb3VudCwgIC8vIEhvdyBtYW55IHRpbWVzIHRvIHJlcGVhdCB0aGUgcm93CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93TnVtYmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGVUcmFuc3BhcmVu
dFBpeGVscykKIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuCi0g
ICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
Ci0gICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSAm
JiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQotICAgICAgICByZXR1cm47CisgICAgLy8g
VGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2
ZSB0byB0aGUgZnJhbWUncworICAgIC8vIG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBz
aXplLCBpLmUuCisgICAgLy8gKG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSwgbV9yZWFkZXItPmZy
YW1lWU9mZnNldCgpKS4KKyAgICBpbnQgeCA9IG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKTsKKyAg
ICBjb25zdCBpbnQgeSA9IG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSArIHJvd051bWJlcjsKIAot
ICAgIC8vIERvIG5vdGhpbmcgZm9yIGJvZ3VzIGRhdGEuCi0gICAgaWYgKHJvd0J1ZmZlciA9PSAw
IHx8IHN0YXRpY19jYXN0PGludD4obV9yZWFkZXItPmZyYW1lWU9mZnNldCgpICsgcm93TnVtYmVy
KSA+PSBzaXplKCkuaGVpZ2h0KCkpCisgICAgLy8gU2FuaXR5LWNoZWNrIHRoZSBhcmd1bWVudHMu
CisgICAgaWYgKChyb3dCdWZmZXIgPT0gMCkgfHwgKHkgPj0gc2l6ZSgpLmhlaWdodCgpKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgLy8gR2V0IHRoZSBjb2xvcm1hcC4KICAgICB1bnNpZ25lZCBj
b2xvck1hcFNpemU7CiAgICAgdW5zaWduZWQgY2hhciogY29sb3JNYXA7CiAgICAgbV9yZWFkZXIt
PmdldENvbG9yTWFwKGNvbG9yTWFwLCBjb2xvck1hcFNpemUpOwogICAgIGlmICghY29sb3JNYXAp
CiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRoZSBidWZmZXJzIHRoYXQgd2UgZHJhdyBhcmUg
dGhlIGVudGlyZSBpbWFnZSdzIHdpZHRoIGFuZCBoZWlnaHQsIHNvIGEgZmluYWwgb3V0cHV0IGZy
YW1lIGlzCi0gICAgLy8gd2lkdGggKiBoZWlnaHQgUkdCQTMyIHZhbHVlcyBpbiBzaXplLgotICAg
IC8vCi0gICAgLy8gQSBzaW5nbGUgR0lGIGZyYW1lLCBob3dldmVyLCBjYW4gYmUgc21hbGxlciB0
aGFuIHRoZSBlbnRpcmUgaW1hZ2UsIGkuZS4sIGl0IGNhbiByZXByZXNlbnQgc29tZSBzdWItcmVj
dGFuZ2xlCi0gICAgLy8gd2l0aGluIHRoZSBvdmVyYWxsIGltYWdlLiAgVGhlIHJvd3Mgd2UgYXJl
IGRlY29kaW5nIGFyZSB3aXRoaW4gdGhpcwotICAgIC8vIHN1Yi1yZWN0YW5nbGUuICBUaGlzIG1l
YW5zIHRoYXQgaWYgdGhlIEdJRiBmcmFtZSdzIHN1Yi1yZWN0YW5nbGUgaXMgKHgseSx3LGgpIHRo
ZW4gcm93IDAgaXMgcmVhbGx5IHJvdwotICAgIC8vIHksIGFuZCBlYWNoIHJvdyBnb2VzIGZyb20g
eCB0byB4K3cuCi0gICAgdW5zaWduZWQgZHN0UG9zID0gKG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQo
KSArIHJvd051bWJlcikgKiBzaXplKCkud2lkdGgoKSArIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQo
KTsKLSAgICB1bnNpZ25lZCogZHN0ID0gYnVmZmVyLmJpdG1hcCgpLmdldEFkZHIzMigwLCAwKSAr
IGRzdFBvczsKLSAgICB1bnNpZ25lZCogZHN0RW5kID0gZHN0ICsgc2l6ZSgpLndpZHRoKCkgLSBt
X3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQqIGN1cnJEc3QgPSBkc3Q7Ci0g
ICAgdW5zaWduZWQgY2hhciogY3VycmVudFJvd0J5dGUgPSByb3dCdWZmZXI7Ci0KLSAgICB3aGls
ZSAoY3VycmVudFJvd0J5dGUgIT0gcm93RW5kICYmIGN1cnJEc3QgPCBkc3RFbmQpIHsKLSAgICAg
ICAgaWYgKCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAqY3VycmVudFJvd0J5dGUgIT0g
bV9yZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkgJiYgKmN1cnJlbnRSb3dCeXRlIDwgY29sb3JN
YXBTaXplKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb2xvckluZGV4ID0gKmN1cnJlbnRSb3dC
eXRlICogMzsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IGNvbG9yTWFwW2NvbG9ySW5kZXhd
OwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBjb2xvck1hcFtjb2xvckluZGV4ICsgMV07
Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gY29sb3JNYXBbY29sb3JJbmRleCArIDJdOwot
ICAgICAgICAgICAgUkdCQTMyQnVmZmVyOjpzZXRSR0JBKGN1cnJEc3QsIHJlZCwgZ3JlZW4sIGJs
dWUsIDI1NSk7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LgorICAg
IFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwor
ICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
V3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICBUaGVyZSBpcyBu
byBndWFyYW50ZWUgdGhhdAorICAgIC8vIChyb3dFbmQgLSByb3dCdWZmZXIpID09IChzaXplKCku
d2lkdGgoKSAtIG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQoKSksIHNvCisgICAgLy8gd2UgbXVzdCBl
bnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291cmNlIGRhdGEg
b3IgdGhlCisgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGNo
YXIqIHNvdXJjZUFkZHIgPSByb3dCdWZmZXI7IChzb3VyY2VBZGRyICE9IHJvd0VuZCkgJiYgKHgg
PCBzaXplKCkud2lkdGgoKSk7ICsrc291cmNlQWRkciwgKyt4KSB7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqc291cmNlQWRkcjsKKyAgICAgICAgaWYgKCghbV9y
ZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAoc291cmNlVmFsdWUgIT0gbV9yZWFkZXItPnRyYW5z
cGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3Vy
Y2VWYWx1ZSkgKiAzOworICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeSwgY29sb3JNYXBb
Y29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAxXSwgY29sb3JNYXBbY29sb3JJbmRl
eCArIDJdLCAyNTUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9jdXJyZW50QnVm
ZmVyU2F3QWxwaGEgPSB0cnVlOwogICAgICAgICAgICAgLy8gV2UgbWF5IG9yIG1heSBub3QgbmVl
ZCB0byB3cml0ZSB0cmFuc3BhcmVudCBwaXhlbHMgdG8gdGhlIGJ1ZmZlci4KQEAgLTM5MSwyNiAr
Mzg3LDEzIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICAg
ICAgICAgIC8vIGJleW9uZCB0aGUgZmlyc3QsIG9yIHRoZSBpbml0aWFsIHBhc3NlcyB3aWxsICJz
aG93IHRocm91Z2giIHRoZQogICAgICAgICAgICAgLy8gbGF0ZXIgb25lcy4KICAgICAgICAgICAg
IGlmICh3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQotICAgICAgICAgICAgICAgIFJHQkEzMkJ1ZmZl
cjo6c2V0UkdCQShjdXJyRHN0LCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBidWZmZXIu
c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKICAgICAgICAgfQotICAgICAgICBjdXJyRHN0Kys7
Ci0gICAgICAgIGN1cnJlbnRSb3dCeXRlKys7CiAgICAgfQogCi0gICAgaWYgKHJlcGVhdENvdW50
ID4gMSkgewotICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRpbWVzLgot
ICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAgICB1bnNpZ25lZCBk
YXRhU2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7Ci0gICAgICAgIHVuc2lnbmVkIHdpZHRo
ID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIuYml0bWFw
KCkuZ2V0QWRkcjMyKDAsIDApICsgd2lkdGggKiBzaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIGN1
cnJEc3QgPSBkc3QgKyB3aWR0aDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJl
cGVhdENvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChjdXJyRHN0ICsgbnVtID4gZW5kKSAv
LyBQcm90ZWN0IGFnYWluc3QgYSBidWZmZXIgb3ZlcnJ1biBmcm9tIGEgYm9ndXMgcmVwZWF0Q291
bnQuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtZW1jcHkoY3VyckRzdCwg
ZHN0LCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBjdXJyRHN0ICs9IHdpZHRoOwotICAgICAgICB9
Ci0gICAgfQorICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNvcHkgdGhlIHJvdyBkYXRhIGlmIG5l
ZWQgYmUuCisgICAgaWYgKHJlcGVhdENvdW50ID4gMSkKKyAgICAgICAgYnVmZmVyLmNvcHlSb3dO
VGltZXMobV9yZWFkZXItPmZyYW1lWE9mZnNldCgpLCB4LCB5LCBzdGQ6Om1pbih5ICsgc3RhdGlj
X2Nhc3Q8aW50PihyZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkpOwogfQogCiB2b2lkIEdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25l
ZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9z
YWxNZXRob2QpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDU1MikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDYgKzEwNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAvLyBvdGhl
ciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KICAgICAgICAgfQogCisgICAgICAg
IHZvaWQgemVyb0ZpbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JpdG1hcC5lcmFzZUFS
R0IoMCwgMCwgMCwgMCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNy
ZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSBpbiB8b3RoZXJ8LCBzbyB0aGUKICAg
ICAgICAgLy8gdHdvIGltYWdlcyBjYW4gYmUgbW9kaWZpZWQgaW5kZXBlbmRlbnRseS4KICAgICAg
ICAgdm9pZCBjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQpAQCAtMTEz
LDEyICsxMTgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAgICAgbV9iaXRtYXAucmVzZXQoKTsKLSAgICAgICAgICAgIGNvbnN0IE5h
dGl2ZUltYWdlU2tpYSYgb3RoZXJCaXRtYXAgPSBvdGhlci5iaXRtYXAoKTsKKyAgICAgICAgICAg
IGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgb3RoZXJCaXRtYXAgPSBvdGhlci5tX2JpdG1hcDsKICAg
ICAgICAgICAgIG90aGVyQml0bWFwLmNvcHlUbygmbV9iaXRtYXAsIG90aGVyQml0bWFwLmNvbmZp
ZygpKTsKICAgICAgICAgfQogCi0gICAgICAgIE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwKCkgeyBy
ZXR1cm4gbV9iaXRtYXA7IH0KLSAgICAgICAgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAo
KSBjb25zdCB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNv
cGllcyBbKHN0YXJ0WCwgc3RhcnRZKSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZSBzYW1lCisgICAg
ICAgIC8vIFgtY29vcmRpbmF0ZXMgb24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90
IGluY2x1ZGluZyBlbmRZLgorICAgICAgICAvLworICAgICAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0
aW9uIGRvZXMgbm90IHNhbml0eS1jaGVjayBpdHMgYXJndW1lbnRzISAgQ2FsbGVycworICAgICAg
ICAvLyBNVVNUIG5vdCBwYXNzIGludmFsaWQgdmFsdWVzIG9yIHRoaXMgd2lsbCBjb3JydXB0IG1l
bW9yeS4KKyAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSkKKyAgICAgICAgeworICAgICAgICAgIGNvbnN0IGludCByb3dC
eXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZiB1aW50MzJfdDsKKyAgICAgICAgICBjb25z
dCB1aW50MzJfdCogY29uc3Qgc3RhcnRBZGRyID0gbV9iaXRtYXAuZ2V0QWRkcjMyKHN0YXJ0WCwg
c3RhcnRZKTsKKyAgICAgICAgICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwg
ZW5kWTsgKytkZXN0WSkKKyAgICAgICAgICAgICAgbWVtY3B5KG1fYml0bWFwLmdldEFkZHIzMihz
dGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7CisgICAgICAgIH0KIAogICAgICAg
ICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscyBhcmUgd3JpdHRlbi4gV2lsbCBy
ZXR1cm4gdHJ1ZSBvbgogICAgICAgICAvLyBzdWNjZXNzLCBmYWxzZSBpZiB0aGUgbWVtb3J5IGFs
bG9jYXRpb24gZmFpbHMuCkBAIC0xMzQsMTQgKzE0OSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAvLyBDbGVhciB0aGUgaW1hZ2UuCi0gICAgICAgICAgICBtX2JpdG1hcC5lcmFzZUFSR0Io
MCwgMCwgMCwgMCk7CisgICAgICAgICAgICAvLyBaZXJvIHRoZSBpbWFnZS4KKyAgICAgICAgICAg
IHplcm9GaWxsKCk7CiAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXAud2lkdGgoKTsgfQotICAg
ICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXAuaGVpZ2h0KCk7IH0KKyAg
ICAgICAgLy8gVG8gYmUgdXNlZCBieSBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KCku
ICBSZXR1cm5zIGEgcG9pbnRlcgorICAgICAgICAvLyB0byB0aGUgdW5kZXJseWluZyBuYXRpdmUg
aW1hZ2UgZGF0YS4gIFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5CisgICAgICAgIC8vIHRo
ZSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4gRnJhbWVEYXRhOjpjbGVhcigpLgorICAgICAgICBO
YXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyBOYXRpdmVJbWFnZVNraWEobV9iaXRtYXApOworICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgICAg
ICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQpAQCAtMTYw
LDggKzE4MCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0RGlzcG9z
YWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9
IG1ldGhvZDsgfQogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9iaXRt
YXAuc2V0SXNPcGFxdWUoIWFscGhhKTsgfQogCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldFJHQkEo
dWludDMyX3QqIGRlc3QsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIsIHVpbnQ4X3Qg
YSkKKyAgICAgICAgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdWludDhfdCByLCB1aW50OF90
IGcsIHVpbnQ4X3QgYiwgdWludDhfdCBhKQogICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJf
dCogY29uc3QgZGVzdCA9IG1fYml0bWFwLmdldEFkZHIzMih4LCB5KTsKKwogICAgICAgICAgICAg
Ly8gV2Ugc3RvcmUgdGhpcyBkYXRhIHByZS1tdWx0aXBsaWVkLgogICAgICAgICAgICAgaWYgKGEg
PT0gMCkKICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7CkBAIC0xNzYsMTEgKzE5OCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHZv
aWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIs
IHVpbnQ4X3QgYSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShtX2JpdG1hcC5nZXRB
ZGRyMzIoeCwgeSksIHIsIGcsIGIsIGEpOwotICAgICAgICB9Ci0KICAgICBwcml2YXRlOgogICAg
ICAgICBOYXRpdmVJbWFnZVNraWEgbV9iaXRtYXA7CiAgICAgICAgIEludFJlY3QgbV9yZWN0OyAg
ICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUg
b3ZlcmFsbCBidWZmZXIuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31146</attachid>
            <date>2009-06-10 17:10:16 -0700</date>
            <delta_ts>2009-06-10 17:31:55 -0700</delta_ts>
            <desc>part six (Landed r44597)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19546</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDU5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDYtMTAgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHNpeAor
ICAgICAgICBNaXNjZWxsYW5lb3VzIHRpbnkgY2hhbmdlcy4gIFRoZSBpbXBvcnRhbnQgYml0cyBo
ZXJlIGFyZSB0aGUgQU5TSSBDKysKKyAgICAgICAgY29tcGxpYW5jZSBmaXggaW4gc2tpYS9JbWFn
ZURlY29kZXJzLmggKG5lZWRlZCB0byBjb21waWxlIHRoaXMgZmlsZSBvbgorICAgICAgICBub24t
TVNWQykgYW5kIHNvbWUgYmVoYXZpb3JhbCBmaXhlcyBmb3IgdGhlIFhCTSBkZWNvZGVyIHRoYXQg
Q2hyb21pdW0KKyAgICAgICAgdW5pdCB0ZXN0cyBwYXJ0bHkgZXhwb3NlZC4gIE90aGVyIGNoYW5n
ZXMgYXJlIG1vc3RseSBjb3NtZXRpYy4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oOiBNYWtlIHNvbWUgdmFyaWFibGVzIHByaXZhdGUgYWdhaW4uICBU
aGlzIHdpbGwgYnJlYWsgUVRXZWJLaXQgYnV0IHRob3NlIGd1eXMgaGF2ZSBhZ3JlZWQgdG8gd2Fp
dCBvbiBteSBmaW5pc2hpbmcgdGhlIEltYWdlRGVjb2RlciBjaGFuZ2VzLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOiBVc2UgSW50UG9pbnQo
KSBpbnN0ZWFkIG9mIHRoZSByZWR1bmRhbnQgSW50UG9pbnQoMCwgMCkuCisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOiBVc2UgSW50UG9pbnQoKSBpbnN0
ZWFkIG9mIHRoZSByZWR1bmRhbnQgSW50UG9pbnQoMCwgMCkuCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6IFJlbW92ZSBvYnZpb3VzIGNv
bW1lbnRzLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFi
bGUpOiBSZW1vdmUgb2J2aW91cyBjb21tZW50cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlUmVhZGVyOjpkZWNvZGVCTVApOiBNYWtlIG1vcmUgaW4gbGluZSB3aXRoIG90aGVyIGRlY29k
ZXJzJyBjb21tZW50cyBhbmQgc3RydWN0dXJlLCB1c2UgYSByZWYgdG8gZGVjcmVhc2UgdmVyYm9z
aXR5LgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRhKTog
VXNlIGEgcmVmIHRvIGRlY3JlYXNlIHZlcmJvc2l0eS4KKyAgICAgICAgKFdlYkNvcmU6OkJNUElt
YWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0YSk6IFVzZSBhIHJlZiB0byBkZWNyZWFzZSB2ZXJi
b3NpdHkuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURl
Y29kZXIuY3BwOiBVc2UgSW50UG9pbnQoKSBpbnN0ZWFkIG9mIHRoZSByZWR1bmRhbnQgSW50UG9p
bnQoMCwgMCkuCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6IFVzZSBJbnRQb2ludCgpIGluc3RlYWQgb2YgdGhlIHJlZHVuZGFudCBJbnRQb2ludCgw
LCAwKS4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6
IFVzZSBJbnRQb2ludCgpIGluc3RlYWQgb2YgdGhlIHJlZHVuZGFudCBJbnRQb2ludCgwLCAwKS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpjb3B5Um93TlRpbWVzKTogRml4IEFOU0kg
dmlvbGF0aW9uIHRoYXQgTVNWQyBsZXQgbWUgY29tcGlsZSAoISkuCisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6IFJlbW92ZSBvYnZpb3Vz
IGNvbW1lbnRzLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZh
aWxhYmxlKTogUmVtb3ZlIG9idmlvdXMgY29tbWVudHMuCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WEJNSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOiBSZXR1cm4gMCBmb3Igbm9uLXpl
cm8gaW5kZXhlcywgZG9uJ3QgdHJ5IHRvIGRlY29kZSB1bm5lY2Vzc2FyaWx5IGFmdGVyIGZhaWx1
cmUgb3Igd2hlbiB0aGUgc2l6ZSBjb3VsZG4ndCBiZSBjb21wdXRlZCwgbWFrZSBtb3JlIGluIGxp
bmUgd2l0aCBvdGhlciBkZWNvZGVycycgY29tbWVudHMgYW5kIHN0cnVjdHVyZSwgY2FsbCBSR0JB
MzJCdWZmZXI6OnNldFJlY3QoKSBhcHByb3ByaWF0ZWx5LgorCiAyMDA5LTA2LTEwICBPamFuIFZh
ZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDQ0NTk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDggKzIyMCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOyAvLyBU
aGUgZW5jb2RlZCBkYXRhLgogICAgICAgICBWZWN0b3I8UkdCQTMyQnVmZmVyPiBtX2ZyYW1lQnVm
ZmVyQ2FjaGU7CiAgICAgICAgIG11dGFibGUgYm9vbCBtX2ZhaWxlZDsKLSAgICAgICAgSW50U2l6
ZSBtX3NpemU7Ci0gICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxlOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdl
IGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCkBAIC0yMzQsNiArMjMyLDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7CiAgICAgICAgICAgICByZXR1cm4g
dG90YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKICAgICAgICAgfQorCisgICAgICAgIEludFNp
emUgbV9zaXplOworICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZTsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NTk1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDcgKzMxMCw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
Ojppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4g
dGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgogICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5yZWN0KCk7CiAgICAgICAgICAgICBpZiAoKGZyYW1l
SW5kZXggPT0gMCkKLSAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0
KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkgeworICAgICAgICAgICAgICAgIHx8IHByZXZSZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSkpIHsKICAgICAgICAgICAgICAg
ICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhl
IHdob2xlCiAgICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5
IGVtcHR5IGltYWdlLgogICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCBH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaQogICAgIGlmICghbV9jdXJyZW50QnVm
ZmVyU2F3QWxwaGEpIHsKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1lIHdhcyBub24tdHJhbnNw
YXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAgICAgICAgIC8vIHJlc3Vs
dGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNhbiBzZXRIYXNBbHBoYShm
YWxzZSkuCi0gICAgICAgIGlmIChidWZmZXIucmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9p
bnQoMCwgMCksIHNpemUoKSkpKQorICAgICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDApIHsKICAgICAgICAg
ICAgIC8vIFRyaWNreSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkg
aWYgZXZlcnl3aGVyZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1OTUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCwxNyArNDU4LDEzIEBAIGJvb2wgSlBFR0ltYWdlRGVj
b2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gUmVzaXplIHRvIHRoZSB3aWR0
aCBhbmQgaGVpZ2h0IG9mIHRoZSBpbWFnZS4KKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1
ZmZlciBpZiBuZWVkZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkpIHsKLSAgICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBj
b3JyZWN0IHdpZHRoL2hlaWdodC4gVGhpcyB3aWxsCi0gICAgICAgIC8vIGFsc28gaW5pdGlhbGl6
ZSBpdCB0byB0cmFuc3BhcmVudC4KICAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBk
YXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgogICAgICAgICBidWZmZXIu
c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNl
dEhhc0FscGhhKGZhbHNlKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDU5NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNywxOCArMzE3LDE0IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gUmVzaXplIHRvIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IG9mIHRoZSBpbWFnZS4KKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBp
ZiBuZWVkZWQuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
IHsKLSAgICAgICAgLy8gTGV0J3MgcmVzaXplIG91ciBidWZmZXIgbm93IHRvIHRoZSBjb3JyZWN0
IHdpZHRoL2hlaWdodC4KICAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgo
KSwgc2l6ZSgpLmhlaWdodCgpKSkgewotICAgICAgICAgICAgLy8gRXJyb3IgYWxsb2NhdGluZyB0
aGUgYml0bWFwLiBXZSBzaG91bGQgbm90IGNvbnRpbnVlLgogICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocmVhZGVyKCktPnBu
Z1B0cigpKSktPmRlY29kaW5nRmFpbGVkKCk7CiAgICAgICAgICAgICBsb25nam1wKHJlYWRlcigp
LT5wbmdQdHIoKS0+am1wYnVmLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
Ci0gICAgICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4K
ICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CiAg
ICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVyLmNwcAko
cmV2aXNpb24gNDQ1OTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
Qk1QSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMjEgKzExMSwyMyBAQCB2
b2lkIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoU2hhcmVkQnVmCiAgICAgaWYgKG1fbmVlZFRv
UHJvY2Vzc0NvbG9yVGFibGUgJiYgIXByb2Nlc3NDb2xvclRhYmxlKGRhdGEpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICAvLyBJbml0aWFsaXplIGZyYW1lIGJ1ZmZlciBzdGF0ZSwgaWYgbmVlZGVk
LgotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBSR0JBMzJC
dWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCku
c2V0UmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwotICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuZmlyc3QoKS5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwot
ICAgICAgICBpZiAoIW1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFNpemUobV9pbmZvSGVh
ZGVyLmJpV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKSB7CisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJh
bWVidWZmZXIgaWYgbmVlZGVkLgorICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlLmZpcnN0KCk7CisgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewogICAgICAgICAgICAgLy8gVW5hYmxlIHRvIGFsbG9j
YXRlLgogICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0KKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1l
UGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2gg
cmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQogICAgICAgICAvLyBpdCBiYWNrIHRv
IGZhbHNlIGhlcmUuICBXZSdsbCBzZXQgaXQgdHJ1ZSBiZWxvdyBpbiBhbGwgY2FzZXMgd2hlcmUK
ICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgotICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRIYXNBbHBoYShmYWxzZSk7CisgICAgICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CisKKyAgICAgICAgLy8gRm9yIEJNUHMsIHRoZSBm
cmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KKyAgICAgICAgYnVmZmVyLnNldFJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKKwogICAgICAgICBpZiAoIW1faXNUb3BE
b3duKQogICAgICAgICAgICAgbV9jb29yZC5zZXRZKHNpemUoKS5oZWlnaHQoKSAtIDEpOwogICAg
IH0KQEAgLTE0Myw4ICsxNDUsNyBAQCB2b2lkIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoU2hh
cmVkQnVmCiAKICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIGFuIEFORCBtYXNrIGFuZCB0aGVyZSB3
YXMgbm8gYWxwaGEgZGF0YSwgcHJvY2VzcyB0aGUKICAgICAvLyBtYXNrLgotICAgIGlmICgobV9h
bmRNYXNrU3RhdGUgPT0gTm90WWV0RGVjb2RlZCkKLSAgICAgICAgJiYgIW1fZnJhbWVCdWZmZXJD
YWNoZS5maXJzdCgpLmhhc0FscGhhKCkpIHsKKyAgICBpZiAoKG1fYW5kTWFza1N0YXRlID09IE5v
dFlldERlY29kZWQpICYmICFidWZmZXIuaGFzQWxwaGEoKSkgewogICAgICAgICAvLyBSZXNldCBk
ZWNvZGluZyBjb29yZGluYXRlcyB0byBzdGFydCBvZiBpbWFnZS4KICAgICAgICAgbV9jb29yZC5z
ZXRYKDApOwogICAgICAgICBtX2Nvb3JkLnNldFkobV9pc1RvcERvd24gPyAwIDogKHNpemUoKS5o
ZWlnaHQoKSAtIDEpKTsKQEAgLTE1OCw3ICsxNTksNyBAQCB2b2lkIEJNUEltYWdlUmVhZGVyOjpk
ZWNvZGVCTVAoU2hhcmVkQnVmCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERvbmUhCi0gICAg
bV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSk7CisgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpOwogfQogCiBib29sIEJNUEltYWdlUmVhZGVyOjpnZXRJbmZvSGVhZGVyU2l6ZShTaGFyZWRC
dWZmZXIqIGRhdGEpCkBAIC02MDUsNiArNjA2LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJv
Y2Vzc1JMRURhdGEoU2hhcgogCiAgICAgLy8gSW1wb3NzaWJsZSB0byBkZWNvZGUgcm93LWF0LWEt
dGltZSwgc28ganVzdCBkbyB0aGluZ3MgYXMgYSBzdHJlYW0gb2YKICAgICAvLyBieXRlcy4KKyAg
ICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIEV2ZXJ5IGVudHJ5IHRha2VzIGF0IGxlYXN0IHR3
byBieXRlczsgYmFpbCBpZiB0aGVyZSBpc24ndCBlbm91Z2gKICAgICAgICAgLy8gZGF0YS4KQEAg
LTYyNiw3ICs2MjgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0YShTaGFy
CiAgICAgICAgICAgICBjYXNlIDA6ICAvLyBNYWdpYyB0b2tlbjogRU9MCiAgICAgICAgICAgICAg
ICAgLy8gU2tpcCBhbnkgcmVtYWluaW5nIHBpeGVscyBpbiB0aGlzIHJvdy4KICAgICAgICAgICAg
ICAgICBpZiAobV9jb29yZC54KCkgPCBzaXplKCkud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAgICAgICBt
b3ZlQnVmZmVyVG9OZXh0Um93KCk7CiAKICAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQg
Kz0gMjsKQEAgLTYzNiw3ICs2MzgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxF
RGF0YShTaGFyCiAgICAgICAgICAgICAgICAgLy8gU2tpcCBhbnkgcmVtYWluaW5nIHBpeGVscyBp
biB0aGUgaW1hZ2UuCiAgICAgICAgICAgICAgICAgaWYgKChtX2Nvb3JkLngoKSA8IHNpemUoKS53
aWR0aCgpKQogICAgICAgICAgICAgICAgICAgICB8fCAobV9pc1RvcERvd24gPyAobV9jb29yZC55
KCkgPCAoc2l6ZSgpLmhlaWdodCgpIC0gMSkpIDogKG1fY29vcmQueSgpID4gMCkpKQotICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRIYXNBbHBoYSh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgICAgICBjYXNlIDI6IHsgIC8vIE1hZ2lj
IHRva2VuOiBEZWx0YQpAQCAtNjUwLDcgKzY1Miw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnBy
b2Nlc3NSTEVEYXRhKFNoYXIKICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGR4ID0gZGF0
YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDJdOwogICAgICAgICAgICAgICAgIGNvbnN0IHVp
bnQ4X3QgZHkgPSBkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgM107CiAgICAgICAgICAg
ICAgICAgaWYgKChkeCAhPSAwKSB8fCAoZHkgIT0gMCkpCi0gICAgICAgICAgICAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCgo
bV9jb29yZC54KCkgKyBkeCkgPiBzaXplKCkud2lkdGgoKSkgfHwKICAgICAgICAgICAgICAgICAg
ICAgcGFzdEVuZE9mSW1hZ2UoZHkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKQEAgLTc0Niw2ICs3NDgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9u
UkxFRGF0YShTCiAKICAgICAvLyBEZWNvZGUgYXMgbWFueSByb3dzIGFzIHdlIGNhbi4gIChGb3Ig
UkxFLCB3aGVyZSB3ZSBvbmx5IHdhbnQgdG8gZGVjb2RlCiAgICAgLy8gb25lIHJvdywgd2UndmUg
YWxyZWFkeSBjaGVja2VkIHRoYXQgdGhpcyBjb25kaXRpb24gaXMgdHJ1ZS4pCisgICAgUkdCQTMy
QnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKICAgICB3aGlsZSAo
IXBhc3RFbmRPZkltYWdlKDApKSB7CiAgICAgICAgIC8vIEJhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBl
bm91Z2ggZGF0YSBmb3IgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBpeGVscy4KICAgICAgICAgaWYg
KChkYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgcGFkZGVkTnVtQnl0ZXMpCkBAIC03
NjksNyArNzcyLDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoUwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2ViIHdpbGwgbm90IGJlIGRvaW5nIGEgbG90IG9m
IGludmVydGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvckluZGV4KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UkdCQSgwLCAwLCAwLCAwKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRIYXNBbHBo
YSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEo
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2Nvb3JkLm1vdmUoMSwgMCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CkBAIC04MDMsMTAgKzgwNiwxMCBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9u
UkxFRGF0YShTCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
bV9zZWVuTm9uWmVyb0FscGhhUGl4ZWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zZWVuWmVyb0FscGhhUGl4ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVC
dWZmZXJDYWNoZS5maXJzdCgpLnplcm9GaWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIuemVyb0ZpbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Vlblplcm9BbHBo
YVBpeGVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxwaGEgIT0g
MjU1KQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCku
c2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFz
QWxwaGEodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc2V0UkdC
QShnZXRDb21wb25lbnQocGl4ZWwsIDApLCBnZXRDb21wb25lbnQocGl4ZWwsIDEpLApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRklt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NTk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
MSw3ICszMTEsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAg
ICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRo
ZSBmcmFtZS4KICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZl
ci0+cmVjdCgpOwogICAgICAgICAgICAgaWYgKChmcmFtZUluZGV4ID09IDApCi0gICAgICAgICAg
ICAgICAgfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgc2l6ZSgp
KSkpIHsKKyAgICAgICAgICAgICAgICB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBv
aW50KCksIHNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0
IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAg
IC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KICAgICAgICAg
ICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdo
dCgpKSkgewpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNv
bXBsZXRlKHVuc2kKICAgICBpZiAoIW1fY3VycmVudEJ1ZmZlclNhd0FscGhhKSB7CiAgICAgICAg
IC8vIFRoZSB3aG9sZSBmcmFtZSB3YXMgbm9uLXRyYW5zcGFyZW50LCBzbyBpdCdzIHBvc3NpYmxl
IHRoYXQgdGhlIGVudGlyZQogICAgICAgICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJh
bnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFsc2UpLgotICAgICAgICBpZiAoYnVm
ZmVyLnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KDAsIDApLCBzaXplKCkpKSkKKyAg
ICAgICAgaWYgKGJ1ZmZlci5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXpl
KCkpKSkKICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIGVs
c2UgaWYgKGZyYW1lSW5kZXggPiAwKSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRo
aXMgZnJhbWUgZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDQ0NTk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gbV9iaXRtYXAud2lk
dGgoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgbV9iaXRtYXAuaGVpZ2h0KCkpOwog
ICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0gbV9iaXRtYXAuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mIHVpbnQzMl90
OworICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6
ZW9mKHVpbnQzMl90KTsKICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCBzdGFydEFk
ZHIgPSBtX2JpdG1hcC5nZXRBZGRyMzIoc3RhcnRYLCBzdGFydFkpOwogICAgICAgICAgICAgZm9y
IChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCiAgICAgICAg
ICAgICAgICAgbWVtY3B5KG1fYml0bWFwLmdldEFkZHIzMihzdGFydFgsIGRlc3RZKSwgc3RhcnRB
ZGRyLCByb3dCeXRlcyk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDU5NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDE3ICs0NTgsMTMgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBSZXNpemUgdG8gdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGltYWdlLgorICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1l
YnVmZmVyIGlmIG5lZWRlZC4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJh
bWVFbXB0eSkgewotICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhl
IGNvcnJlY3Qgd2lkdGgvaGVpZ2h0LiBUaGlzIHdpbGwKLSAgICAgICAgLy8gYWxzbyBpbml0aWFs
aXplIGl0IHRvIHRyYW5zcGFyZW50LgogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7CiAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRy
dWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBV
cGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBidWZmZXIu
c2V0SGFzQWxwaGEoZmFsc2UpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ1
OTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4LDE4ICszMTgsMTQgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBSZXNpemUgdG8gdGhlIHdpZHRo
IGFuZCBoZWlnaHQgb2YgdGhlIGltYWdlLgorICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVm
ZmVyIGlmIG5lZWRlZC4KICAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVF
bXB0eSkgewotICAgICAgICAvLyBMZXQncyByZXNpemUgb3VyIGJ1ZmZlciBub3cgdG8gdGhlIGNv
cnJlY3Qgd2lkdGgvaGVpZ2h0LgogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53
aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICAvLyBFcnJvciBhbGxvY2F0
aW5nIHRoZSBiaXRtYXAuIFdlIHNob3VsZCBub3QgY29udGludWUuCiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dyZXNzaXZlX3B0cihyZWFkZXIo
KS0+cG5nUHRyKCkpKS0+ZGVjb2RpbmdGYWlsZWQoKTsKICAgICAgICAgICAgIGxvbmdqbXAocmVh
ZGVyKCktPnBuZ1B0cigpLT5qbXBidWYsIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBs
ZXRlLgogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFs
KTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1hCTUltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1hCTUltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDQ0NTk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL1hCTUltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDMyICs3MCwz
NSBAQCBib29sIFhCTUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgCiAKIFJHQkEzMkJ1
ZmZlciogWEJNSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ewotICAgIC8vIEFsbG9jYXRlIGEgZnJhbWVidWZmZXIgaWYgbmVjZXNzYXJ5LiBOZXcgZnJhbWVi
dWZmZXJzIGhhdmUgdGhlaXIgc3RhdHVzCi0gICAgLy8gaW5pdGlhbGl6ZWQgdG8gUkdCQTMyQnVm
ZmVyOjpGcmFtZUVtcHR5LgorICAgIGlmIChpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlLnJlc2l6ZSgxKTsKIAotICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVm
ZmVyQ2FjaGVbMF07Ci0KICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgc2l6ZSBpZiB3ZSBkb24n
dCBoYXZlIGl0IHlldC4KICAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkp
CiAgICAgICAgIGRlY29kZVhCTSh0cnVlKTsKICAgICAKLSAgICAvLyBTaXplIHRoZSBmcmFtZWJ1
ZmZlciBvbmNlIHdlIGtub3cgdGhlIHJpZ2h0IHNpemUuCi0gICAgaWYgKEltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCkgJiYKLSAgICAgICAgZnJhbWUuc3RhdHVzKCkgPT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUVtcHR5KSB7Ci0gICAgICAgIGlmICghZnJhbWUuc2V0U2l6ZShzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgeworICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVm
ZmVyIGlmIG5lZWRlZC4KKyAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKKyAgICBpZiAoIWZhaWxlZCgpICYmIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKCkKKyAgICAgICAgJiYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1l
RW1wdHkpKSB7CisgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSkpIHsKICAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGZyYW1lLnNldFN0YXR1cyhSR0JBMzJC
dWZmZXI6OkZyYW1lUGFydGlhbCk7CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVm
ZmVyOjpGcmFtZVBhcnRpYWwpOworCisgICAgICAgIC8vIEZvciBYQk1zLCB0aGUgZnJhbWUgYWx3
YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCisgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQotICAgIAorICAgICAgICAKICAgICAvLyBL
ZWVwIHRyeWluZyB0byBkZWNvZGUgdW50aWwgd2UndmUgZ290IHRoZSBlbnRpcmUgaW1hZ2UuCi0g
ICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAg
ICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKQogICAg
ICAgICBkZWNvZGVYQk0oZmFsc2UpOwogCi0gICAgcmV0dXJuICZmcmFtZTsKKyAgICByZXR1cm4g
JmJ1ZmZlcjsKIH0KIAogYm9vbCBYQk1JbWFnZURlY29kZXI6OmRlY29kZUhlYWRlcigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31183</attachid>
            <date>2009-06-11 17:38:44 -0700</date>
            <delta_ts>2009-06-11 17:59:17 -0700</delta_ts>
            <desc>part seven</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>31402</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMDYtMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHNldmVu
CisgICAgICAgIFVwZGF0ZSBTa2lhJ3MgSW1hZ2VEZWNvZGVyLmggd2l0aCBhIGZldyBjaGFuZ2Vz
IGRlc2lnbmVkIHRvIHJlZHVjZSB0aGUKKyAgICAgICAgZGVsdGEgYmV0d2VlbiBzcGVjaWZpYyBp
bXBsZW1lbnRhdGlvbnMgb2YgSW1hZ2VEZWNvZGVyLmguICBVcGRhdGUKKyAgICAgICAgQ2Fpcm8n
cyBJbWFnZURlY29kZXIuaCB0byBzeW5jIHVwIHdpdGggdGhlIEFQSSBjaGFuZ2VzIGluIHRoZSBT
a2lhCisgICAgICAgIHZlcnNpb24gaW4gdGhlIGxhc3QgdHdvIGNoYWdlIHNldHMuICBVcGRhdGUg
Q2Fpcm8ncyBQTkcvSlBFRy9HSUYKKyAgICAgICAgZGVjb2RlcnMgdG8gdXNlIHRoZSBBUElzIGFz
IHdlbGwuICBBbGwgdGhlIENhaXJvIGltYWdlIGRlY29kZXIgY2hhbmdlcworICAgICAgICBhcmUg
ZGlyZWN0IGNvcGllcyBvZiB0aGUgU2tpYSB2ZXJzaW9ucyBleGNlcHQgSW1hZ2VEZWNvZGVyLmgs
IHdoaWNoIGlzCisgICAgICAgIG1vZGlmaWVkIGluIHRoZSBuZWNlc3Nhcnkgd2F5cyBmb3IgdGhl
IGRpZmZlcmVuY2VzIGJldHdlZW4gQ2Fpcm8gYW5kCisgICAgICAgIFNraWEuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBVc2UgbmV3IFJHQkEz
MkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIEFQSS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDogU3luYyB1cCB3aXRoIFNraWEgdmVyc2lvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEz
MkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjph
c05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFzQWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpkaXNwb3NhbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpnZXRBZGRyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDogU3luYyB1cCB3aXRoIFNraWEgdmVyc2lvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IFN5
bmMgdXAgd2l0aCBTa2lhIHZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOiBTeW5jIHVwIHdpdGggU2tpYSB2ZXJzaW9uLgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmg6IEFkZCB2YXJpb3Vz
IHR5cGVkZWZzIG9yIGhlbHBlciBmdW5jdGlvbnMgdG8gbWluaW1pemUgZGlmZmVyZW5jZXMgd2l0
aCBDYWlybyB2ZXJzaW9uLiAgUmVvcmRlciBmdW5jdGlvbnMgc2xpZ2h0bHkgdG8gbWF0Y2ggcmVv
cmRlcmluZyBvZiBDYWlybydzIG1faGFzQWxwaGEgdmFyaWFibGUsIHdoaWNoIEkgbW92ZWQgdG8g
aW5jcmVhc2UgcmVhZGFiaWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Oik6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlSb3dOVGltZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJC
dWZmZXI6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6ZGlzcG9z
YWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldERpc3Bvc2FsTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OndpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogQWRkICNpbmNsdWRlIG5lZWRlZCBieSBK
UEVHIGhlYWRlcnMgb24gc29tZSBwbGF0Zm9ybXMsIHBsdXMgY29tbWVudC4KKwogMjAwOS0wNi0w
MyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
U291cmNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkzLDExICsxOTMsNyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRl
RnJhbWVBCiAgICAgaWYgKCFzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25lZCBj
aGFyKilidWZmZXItPmJ5dGVzKCkuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lk
dGgoKSo0KTsKKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CiB9CiAKIGJv
b2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShy
ZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDIwICszMCwxOCBAQAogI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQ+IFJHQkEz
MkFycmF5OwotCiAgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0aGUg
ZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMiBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0
IGFsbAogICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uICBGcmFtZXMg
YXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlzIGJ1
ZmZlci4KICAgICBjbGFzcyBSR0JBMzJCdWZmZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51
bSBGcmFtZVN0YXR1cyB7IEZyYW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9
OwotCiAgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhvZCB7CiAgICAgICAgICAgICAvLyBJ
ZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFrZSBzdXJlIHlvdSBh
dWRpdCBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBzb21lIHVzZXJzIG1heSBjYXN0IHJh
dyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCkBAIC01MiwyMiArNTAsMzcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAg
Ly8gQ2xlYXIgZnJhbWUgdG8gdHJhbnNwYXJlbnQKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3Jp
dGVQcmV2aW91cywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRl
bnRzCiAgICAgICAgIH07CisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAg
ICAgICAgIFJHQkEzMkJ1ZmZlcigpCi0gICAgICAgICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkp
CisgICAgICAgICAgICA6IG1faGFzQWxwaGEoZmFsc2UpCisgICAgICAgICAgICAsIG1fc3RhdHVz
KEZyYW1lRW1wdHkpCiAgICAgICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgICAgICwg
bV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICAgICAgICAgLCBtX2hh
c0FscGhhKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0gCiAKLSAgICAgICAgdm9pZCBjbGVh
cigpIHsKLSAgICAgICAgICBtX2J5dGVzLmNsZWFyKCk7Ci0gICAgICAgICAgbV9zdGF0dXMgPSBG
cmFtZUVtcHR5OwotICAgICAgICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJz
IGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzCi0gICAgICAgICAgLy8gdGhpcyB0
byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCi0gICAgICAg
ICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVl
ZCB0byByZWFkIG90aGVyCi0gICAgICAgICAgLy8gbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUg
bGF0ZXIuCisgICAgICAgIC8vIFRoaXMgZXhpc3RzIGJlY2F1c2UgSW1hZ2VEZWNvZGVyIGtlZXBz
IGEgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4sIGFuZAorICAgICAgICAvLyBWZWN0b3IgcmVxdWlyZXMg
dGhpcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUkdCQTMyQnVmZmVyKGNvbnN0IFJHQkEzMkJ1ZmZl
ciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wZXJhdG9yPShvdGhlcik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
eXRlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OworICAgICAg
ICAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKCkKKyAgICAgICAgICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0
bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgICAgICAgICAgLy8gaW5pdEZy
YW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCisg
ICAgICAgICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgemVyb0ZpbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J5dGVzLmZpbGwoMCk7CisgICAgICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRo
ZSBpbWFnZSBkYXRhIGluIHxvdGhlcnwsIHNvIHRoZQpAQCAtNzgsMTEgKzkxLDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIG1f
Ynl0ZXMgPSBvdGhlci5tX2J5dGVzOwotICAgICAgICAgICAgbV9oYXNBbHBoYSA9IG90aGVyLm1f
aGFzQWxwaGE7CisgICAgICAgICAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXM7IH0KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzKCkgeyByZXR1cm4gbV9i
eXRlczsgfQorICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvcGllcyBbKHN0YXJ0WCwgc3RhcnRZ
KSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZSBzYW1lCisgICAgICAgIC8vIFgtY29vcmRpbmF0ZXMg
b24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZyBlbmRZLgorICAg
ICAgICAvLworICAgICAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNhbml0eS1j
aGVjayBpdHMgYXJndW1lbnRzISAgQ2FsbGVycworICAgICAgICAvLyBNVVNUIG5vdCBwYXNzIGlu
dmFsaWQgdmFsdWVzIG9yIHRoaXMgd2lsbCBjb3JydXB0IG1lbW9yeS4KKyAgICAgICAgdm9pZCBj
b3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhcnRZ
IDwgaGVpZ2h0KCkpOworICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOworICAg
ICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBp
eGVsRGF0YSk7CisgICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9
IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOworICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBz
dGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCisgICAgICAgICAgICAgICAgbWVtY3B5
KGdldEFkZHIoc3RhcnRYLCBlbmRZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscyBhcmUgd3JpdHRl
bi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgogICAgICAgICAvLyBzdWNjZXNzLCBmYWxzZSBpZiB0aGUg
bWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCkBAIC05MSwzMSArMTE4LDc3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBm
b3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZQogICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHNp
emUgd2FzIHRvbyBiaWcuLi4KICAgICAgICAgICAgIG1fYnl0ZXMucmVzaXplKHdpZHRoICogaGVp
Z2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKLSAg
ICAgICAgICAgIC8vIENsZWFyIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIG1fYnl0ZXMuZmlsbCgw
KTsKLSAgICAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICAgICAgLy8gWmVybyB0
aGUgaW1hZ2UuCisgICAgICAgICAgICB6ZXJvRmlsbCgpOwogCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAgICAgICAgLy8gdG8g
dGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBv
d25lZCBieQorICAgICAgICAvLyB0aGUgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0
YTo6Y2xlYXIoKS4KKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihtX2J5dGVzLmRhdGEoKSksCisgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FS
R0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgd2lkdGgoKSAqIHNpemVv
ZihQaXhlbERhdGEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25z
dCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAgICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9Ci0gICAgICAg
IGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9CiAKKyAgICAgICAg
dm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1faGFzQWxwaGEgPSBhbHBoYTsgfQogICAg
ICAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3JlY3QgPSByOyB9CiAgICAg
ICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHMpIHsgbV9zdGF0dXMgPSBzOyB9CiAgICAg
ICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1
cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1l
dGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9CiAKLSAgICAg
ICAgc3RhdGljIHZvaWQgc2V0UkdCQSh1bnNpZ25lZCYgcG9zLCB1bnNpZ25lZCByLCB1bnNpZ25l
ZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JB
KGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKKyAgICAgICAgeworICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBn
LCBiLCBhKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gSW5pdGlhbGl6
ZSB3aXRoIGFub3RoZXIgYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNyZWF0ZSBhIG5l
dyBjb3B5CisgICAgICAgIC8vIG9mIHRoZSBpbWFnZSBkYXRhLCBpdCBvbmx5IGluY3JlYXNlcyB0
aGUgcmVmY291bnQgb2YgdGhlIGV4aXN0aW5nIGJpdG1hcC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gTm9ybWFsIGNhbGxlcnMgc2hvdWxkIG5vdCBnZW5lcmFsbHkgYmUgdXNpbmcgdGhpcyBmdW5j
dGlvbi4gIElmIHlvdSB3YW50CisgICAgICAgIC8vIHRvIGNyZWF0ZSBhIGNvcHkgb24gd2hpY2gg
eW91IGNhbiBtb2RpZnkgdGhlIGltYWdlIGRhdGEgaW5kZXBlbmRlbnRseSwKKyAgICAgICAgLy8g
dXNlIGNvcHlCaXRtYXBEYXRhKCkgaW5zdGVhZC4KKyAgICAgICAgUkdCQTMyQnVmZmVyJiBvcGVy
YXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAg
ICAgICAgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7CisgICAgICAgICAgICBtX3NpemUgPSBv
dGhlci5tX3NpemU7CisgICAgICAgICAgICBzZXRIYXNBbHBoYShvdGhlci5oYXNBbHBoYSgpKTsK
KyAgICAgICAgICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICAgICAgICAgIHNldFN0YXR1
cyhvdGhlci5zdGF0dXMoKSk7CisgICAgICAgICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlv
bigpKTsKKyAgICAgICAgICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9k
KCkpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgaW5s
aW5lIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CisgICAgICAg
IGlubGluZSBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisK
KyAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9ieXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRo
KCkpICsgeDsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxE
YXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBh
KQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXZSBzdG9yZSB0aGlzIGRhdGEgcHJlLW11bHRp
cGxpZWQuCiAgICAgICAgICAgICBpZiAoYSA9PSAwKQotICAgICAgICAgICAgICAgIHBvcyA9IDA7
CisgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGEgPCAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGFQ
ZXJjZW50ID0gYSAvIDI1NS4wZjsKQEAgLTEyMywxOSArMTk2LDIxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICAgICAgZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnICog
YWxwaGFQZXJjZW50KTsKICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihiICogYWxwaGFQZXJjZW50KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcG9zID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICAg
ICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUkdCQTMyQXJyYXkgbV9ieXRl
czsKLSAgICAgICAgSW50UmVjdCBtX3JlY3Q7ICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmlnaW5h
bCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluIHRoZSBvdmVyYWxsIGJ1ZmZlci4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1
ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdob3NlIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBz
aXplLgorICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2J5dGVzOworICAgICAgICBJbnRTaXpl
IG1fc2l6ZTsgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJl
IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29k
ZXI6Om1fc2l6ZS4KKyAgICAgICAgYm9vbCBtX2hhc0FscGhhOyAgICAgIC8vIFdoZXRoZXIgb3Ig
bm90IGFueSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBidWZmZXIgaGF2ZSB0cmFuc3BhcmVuY3kuCisg
ICAgICAgIEludFJlY3QgbV9yZWN0OyAgICAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwg
c3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUgb3ZlcmFsbCBidWZmZXIuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBi
dWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3aG9zZSBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1h
Z2Ugc2l6ZS4KICAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90
IHRoaXMgZnJhbWUgaXMgY29tcGxldGVseSBmaW5pc2hlZCBkZWNvZGluZy4KLSAgICAgICAgdW5z
aWduZWQgbV9kdXJhdGlvbjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KLSAgICAgICAgRnJhbWVE
aXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBm
cmFtZSdzIGRhdGEgd2hlbiBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCi0gICAgICAgIGJv
b2wgbV9oYXNBbHBoYTsgLy8gV2hldGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhl
IGJ1ZmZlciBoYXZlIHRyYW5zcGFyZW5jeS4KKyAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsg
IC8vIFRoZSBhbmltYXRpb24gZGVsYXkuCisgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9k
aXNwb3NhbE1ldGhvZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoYXQgdG8g
ZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFt
ZS4KICAgICB9OwogCiAgICAgLy8gVGhlIEltYWdlRGVjb2RlciBjbGFzcyByZXByZXNlbnRzIGEg
YmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0IGRlY29kZXJzCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDEwICsz
MjEsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAg
ICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0
IGl0cyBmcmFtZS4KICAgICAgICAgICAgICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1
ZmZlcik7CiAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2
UmVjdC5ib3R0b20oKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCogY29uc3Qg
Y3VycmVudFJvdyA9Ci0gICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5ieXRlcygpLmRhdGEo
KSArICh5ICogc2l6ZSgpLndpZHRoKCkpOwogICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0LnJpZ2h0KCk7ICsreCkKLSAgICAgICAgICAgICAg
ICAgICAgICBidWZmZXItPnNldFJHQkEoKihjdXJyZW50Um93ICsgeCksIDAsIDAsIDAsIDApOwor
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsK
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAw
KSAmJiAocHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+
c2V0SGFzQWxwaGEodHJ1ZSk7CkBAIC0zNDEsNDcgKzMzOSw0MyBAQCBib29sIEdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiB9CiAKIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpoYXZl
RGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgICAvLyBQb2ludGVyIHRvIHNp
bmdsZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByb3dOdW1iZXIsICAvLyBUaGUgcm93IGlu
ZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0
Q291bnQsICAvLyBIb3cgbWFueSB0aW1lcyB0byByZXBlYXQgdGhlIHJvdworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJvd051bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRDb3VudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMp
CiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LgotICAgIFJHQkEz
MkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlm
ICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYgIWluaXRG
cmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIFRoZSBwaXhl
bCBkYXRhIGFuZCBjb29yZGluYXRlcyBzdXBwbGllZCB0byB1cyBhcmUgcmVsYXRpdmUgdG8gdGhl
IGZyYW1lJ3MKKyAgICAvLyBvcmlnaW4gd2l0aGluIHRoZSBlbnRpcmUgaW1hZ2Ugc2l6ZSwgaS5l
LgorICAgIC8vIChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZz
ZXQoKSkuCisgICAgaW50IHggPSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7CisgICAgY29uc3Qg
aW50IHkgPSBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXI7CiAKLSAgICAvLyBE
byBub3RoaW5nIGZvciBib2d1cyBkYXRhLgotICAgIGlmIChyb3dCdWZmZXIgPT0gMCB8fCBzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSArIHJvd051bWJlcikgPj0gc2l6
ZSgpLmhlaWdodCgpKQorICAgIC8vIFNhbml0eS1jaGVjayB0aGUgYXJndW1lbnRzLgorICAgIGlm
ICgocm93QnVmZmVyID09IDApIHx8ICh5ID49IHNpemUoKS5oZWlnaHQoKSkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIC8vIEdldCB0aGUgY29sb3JtYXAuCiAgICAgdW5zaWduZWQgY29sb3JNYXBT
aXplOwogICAgIHVuc2lnbmVkIGNoYXIqIGNvbG9yTWFwOwogICAgIG1fcmVhZGVyLT5nZXRDb2xv
ck1hcChjb2xvck1hcCwgY29sb3JNYXBTaXplKTsKICAgICBpZiAoIWNvbG9yTWFwKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBUaGUgYnVmZmVycyB0aGF0IHdlIGRyYXcgYXJlIHRoZSBlbnRp
cmUgaW1hZ2UncyB3aWR0aCBhbmQgaGVpZ2h0LCBzbyBhIGZpbmFsIG91dHB1dCBmcmFtZSBpcwot
ICAgIC8vIHdpZHRoICogaGVpZ2h0IFJHQkEzMiB2YWx1ZXMgaW4gc2l6ZS4KLSAgICAvLwotICAg
IC8vIEEgc2luZ2xlIEdJRiBmcmFtZSwgaG93ZXZlciwgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUg
ZW50aXJlIGltYWdlLCBpLmUuLCBpdCBjYW4gcmVwcmVzZW50IHNvbWUgc3ViLXJlY3RhbmdsZQot
ICAgIC8vIHdpdGhpbiB0aGUgb3ZlcmFsbCBpbWFnZS4gIFRoZSByb3dzIHdlIGFyZSBkZWNvZGlu
ZyBhcmUgd2l0aGluIHRoaXMKLSAgICAvLyBzdWItcmVjdGFuZ2xlLiAgVGhpcyBtZWFucyB0aGF0
IGlmIHRoZSBHSUYgZnJhbWUncyBzdWItcmVjdGFuZ2xlIGlzICh4LHksdyxoKSB0aGVuIHJvdyAw
IGlzIHJlYWxseSByb3cKLSAgICAvLyB5LCBhbmQgZWFjaCByb3cgZ29lcyBmcm9tIHggdG8geCt3
LgotICAgIHVuc2lnbmVkIGRzdFBvcyA9IChtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dO
dW1iZXIpICogc2l6ZSgpLndpZHRoKCkgKyBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7Ci0gICAg
dW5zaWduZWQqIGRzdCA9IGJ1ZmZlci5ieXRlcygpLmRhdGEoKSArIGRzdFBvczsKLSAgICB1bnNp
Z25lZCogZHN0RW5kID0gZHN0ICsgc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRlci0+ZnJhbWVYT2Zm
c2V0KCk7Ci0gICAgdW5zaWduZWQqIGN1cnJEc3QgPSBkc3Q7Ci0gICAgdW5zaWduZWQgY2hhciog
Y3VycmVudFJvd0J5dGUgPSByb3dCdWZmZXI7Ci0KLSAgICB3aGlsZSAoY3VycmVudFJvd0J5dGUg
IT0gcm93RW5kICYmIGN1cnJEc3QgPCBkc3RFbmQpIHsKLSAgICAgICAgaWYgKCghbV9yZWFkZXIt
PmlzVHJhbnNwYXJlbnQoKSB8fCAqY3VycmVudFJvd0J5dGUgIT0gbV9yZWFkZXItPnRyYW5zcGFy
ZW50UGl4ZWwoKSkgJiYgKmN1cnJlbnRSb3dCeXRlIDwgY29sb3JNYXBTaXplKSB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjb2xvckluZGV4ID0gKmN1cnJlbnRSb3dCeXRlICogMzsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHJlZCA9IGNvbG9yTWFwW2NvbG9ySW5kZXhdOwotICAgICAgICAgICAgdW5z
aWduZWQgZ3JlZW4gPSBjb2xvck1hcFtjb2xvckluZGV4ICsgMV07Ci0gICAgICAgICAgICB1bnNp
Z25lZCBibHVlID0gY29sb3JNYXBbY29sb3JJbmRleCArIDJdOwotICAgICAgICAgICAgUkdCQTMy
QnVmZmVyOjpzZXRSR0JBKCpjdXJyRHN0LCByZWQsIGdyZWVuLCBibHVlLCAyNTUpOworICAgIC8v
IEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KKyAgICBSR0JBMzJCdWZmZXImIGJ1
ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAgICBpZiAoKGJ1ZmZlci5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIo
ZnJhbWVJbmRleCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdyaXRlIG9uZSByb3cncyB3
b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQK
KyAgICAvLyAocm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgpLndpZHRoKCkgLSBtX3JlYWRl
ci0+ZnJhbWVYT2Zmc2V0KCkpLCBzbworICAgIC8vIHdlIG11c3QgZW5zdXJlIHdlIGRvbid0IHJ1
biBvZmYgdGhlIGVuZCBvZiBlaXRoZXIgdGhlIHNvdXJjZSBkYXRhIG9yIHRoZQorICAgIC8vIHJv
dydzIFgtY29vcmRpbmF0ZXMuCisgICAgZm9yICh1bnNpZ25lZCBjaGFyKiBzb3VyY2VBZGRyID0g
cm93QnVmZmVyOyAoc291cmNlQWRkciAhPSByb3dFbmQpICYmICh4IDwgc2l6ZSgpLndpZHRoKCkp
OyArK3NvdXJjZUFkZHIsICsreCkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJj
ZVZhbHVlID0gKnNvdXJjZUFkZHI7CisgICAgICAgIGlmICgoIW1fcmVhZGVyLT5pc1RyYW5zcGFy
ZW50KCkgfHwgKHNvdXJjZVZhbHVlICE9IG1fcmVhZGVyLT50cmFuc3BhcmVudFBpeGVsKCkpKSAm
JiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CisgICAgICAgICAgICBjb25zdCBzaXpl
X3QgY29sb3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsKKyAg
ICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xv
ck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAyXSwgMjU1KTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhID0gdHJ1
ZTsKICAgICAgICAgICAgIC8vIFdlIG1heSBvciBtYXkgbm90IG5lZWQgdG8gd3JpdGUgdHJhbnNw
YXJlbnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCkBAIC0zOTIsMjYgKzM4NiwxMyBAQCB2b2lkIEdJ
RkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAgICAgICAgICAgICAvLyBiZXlvbmQg
dGhlIGZpcnN0LCBvciB0aGUgaW5pdGlhbCBwYXNzZXMgd2lsbCAic2hvdyB0aHJvdWdoIiB0aGUK
ICAgICAgICAgICAgIC8vIGxhdGVyIG9uZXMuCiAgICAgICAgICAgICBpZiAod3JpdGVUcmFuc3Bh
cmVudFBpeGVscykKLSAgICAgICAgICAgICAgICBSR0JBMzJCdWZmZXI6OnNldFJHQkEoKmN1cnJE
c3QsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHksIDAs
IDAsIDAsIDApOwogICAgICAgICB9Ci0gICAgICAgIGN1cnJEc3QrKzsKLSAgICAgICAgY3VycmVu
dFJvd0J5dGUrKzsKICAgICB9CiAKLSAgICBpZiAocmVwZWF0Q291bnQgPiAxKSB7Ci0gICAgICAg
IC8vIENvcHkgdGhlIHJvdyB8cmVwZWF0Q291bnR8LTEgdGltZXMuCi0gICAgICAgIHVuc2lnbmVk
IG51bSA9IGN1cnJEc3QgLSBkc3Q7Ci0gICAgICAgIHVuc2lnbmVkIGRhdGFTaXplID0gbnVtICog
c2l6ZW9mKHVuc2lnbmVkKTsKLSAgICAgICAgdW5zaWduZWQgd2lkdGggPSBzaXplKCkud2lkdGgo
KTsKLSAgICAgICAgdW5zaWduZWQqIGVuZCA9IGJ1ZmZlci5ieXRlcygpLmRhdGEoKSArIHdpZHRo
ICogc2l6ZSgpLmhlaWdodCgpOwotICAgICAgICBjdXJyRHN0ID0gZHN0ICsgd2lkdGg7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCByZXBlYXRDb3VudDsgaSsrKSB7Ci0gICAgICAg
ICAgICBpZiAoY3VyckRzdCArIG51bSA+IGVuZCkgLy8gUHJvdGVjdCBhZ2FpbnN0IGEgYnVmZmVy
IG92ZXJydW4gZnJvbSBhIGJvZ3VzIHJlcGVhdENvdW50LgotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgbWVtY3B5KGN1cnJEc3QsIGRzdCwgZGF0YVNpemUpOwotICAgICAgICAg
ICAgY3VyckRzdCArPSB3aWR0aDsKLSAgICAgICAgfQotICAgIH0KKyAgICAvLyBUZWxsIHRoZSBm
cmFtZSB0byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVkIGJlLgorICAgIGlmIChyZXBlYXRDb3Vu
dCA+IDEpCisgICAgICAgIGJ1ZmZlci5jb3B5Um93TlRpbWVzKG1fcmVhZGVyLT5mcmFtZVhPZmZz
ZXQoKSwgeCwgeSwgc3RkOjptaW4oeSArIHN0YXRpY19jYXN0PGludD4ocmVwZWF0Q291bnQpLCBz
aXplKCkuaGVpZ2h0KCkpKTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVm
ZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAkocmV2aXNpb24gNDQ2MjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgi
CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRp
by5oPiAgLy8gTmVlZGVkIGJ5IGpwZWdsaWIuaCBmb3IgRklMRS4KIAogZXh0ZXJuICJDIiB7CiAj
aW5jbHVkZSAianBlZ2xpYi5oIgpAQCAtNDc1LDggKzQ3NSw2IEBAIGJvb2wgSlBFR0ltYWdlRGVj
b2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZv
ID0gbV9yZWFkZXItPmluZm8oKTsKICAgICBKU0FNUEFSUkFZIHNhbXBsZXMgPSBtX3JlYWRlci0+
c2FtcGxlcygpOwogCi0gICAgdW5zaWduZWQqIGRzdCA9IGJ1ZmZlci5ieXRlcygpLmRhdGEoKSAr
IGluZm8tPm91dHB1dF9zY2FubGluZSAqIHNpemUoKS53aWR0aCgpOwotICAgCiAgICAgd2hpbGUg
KGluZm8tPm91dHB1dF9zY2FubGluZSA8IGluZm8tPm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAg
LyogUmVxdWVzdCBvbmUgc2NhbmxpbmUuICBSZXR1cm5zIDAgb3IgMSBzY2FubGluZXMuICovCiAg
ICAgICAgIGlmIChqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpICE9IDEpCkBA
IC00ODYsNyArNDg0LDkgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMo
KQogICAgICAgICAgICAgdW5zaWduZWQgciA9ICpqMSsrOwogICAgICAgICAgICAgdW5zaWduZWQg
ZyA9ICpqMSsrOwogICAgICAgICAgICAgdW5zaWduZWQgYiA9ICpqMSsrOwotICAgICAgICAgICAg
UkdCQTMyQnVmZmVyOjpzZXRSR0JBKCpkc3QrKywgciwgZywgYiwgMHhGRik7CisgICAgICAgICAg
ICAvLyByZWFkX3NjYW5saW5lcyBoYXMgaW5jcmVhc2VkIHRoZSBzY2FubGluZSBjb3VudGVyLCBz
byB3ZQorICAgICAgICAgICAgLy8gYWN0dWFsbHkgbWVhbiB0aGUgcHJldmlvdXMgb25lLgorICAg
ICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgaW5mby0+b3V0cHV0X3NjYW5saW5lIC0gMSwgciwg
ZywgYiwgMHhGRik7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2
aXNpb24gNDQ2MjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsMTQgKzM4MCwxMyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAKICAgICAvLyBDb3B5IHRoZSBk
YXRhIGludG8gb3VyIGJ1ZmZlci4KICAgICBpbnQgd2lkdGggPSBzaXplKCkud2lkdGgoKTsKLSAg
ICB1bnNpZ25lZCogZHN0ID0gYnVmZmVyLmJ5dGVzKCkuZGF0YSgpICsgcm93SW5kZXggKiB3aWR0
aDsKICAgICBib29sIHNhd0FscGhhID0gZmFsc2U7CiAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKSB7CiAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICpyb3crKzsKICAgICAgICAgdW5z
aWduZWQgZ3JlZW4gPSAqcm93Kys7CiAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSAqcm93Kys7CiAg
ICAgICAgIHVuc2lnbmVkIGFscGhhID0gKGhhc0FscGhhID8gKnJvdysrIDogMjU1KTsKLSAgICAg
ICAgUkdCQTMyQnVmZmVyOjpzZXRSR0JBKCpkc3QrKywgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCByb3dJbmRleCwgcmVkLCBncmVlbiwgYmx1ZSwg
YWxwaGEpOwogICAgICAgICBpZiAoIXNhd0FscGhhICYmIGFscGhhIDwgMjU1KSB7CiAgICAgICAg
ICAgICBzYXdBbHBoYSA9IHRydWU7CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1
ZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lh
L0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyAr
NDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUkdCQTMyQnVmZmVyIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFtZVBh
cnRpYWwsIEZyYW1lQ29tcGxldGUgfTsKLQogICAgICAgICBlbnVtIEZyYW1lRGlzcG9zYWxNZXRo
b2QgewogICAgICAgICAgICAgLy8gSWYgeW91IGNoYW5nZSB0aGUgbnVtZXJpYyB2YWx1ZXMgb2Yg
dGhlc2UsIG1ha2Ugc3VyZSB5b3UgYXVkaXQgYWxsCiAgICAgICAgICAgICAvLyB1c2VycywgYXMg
c29tZSB1c2VycyBtYXkgY2FzdCByYXcgdmFsdWVzIHRvL2Zyb20gdGhlc2UgY29uc3RhbnRzLgpA
QCAtNTQsNiArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBEaXNwb3Nl
T3ZlcndyaXRlQmdjb2xvciwgICAvLyBDbGVhciBmcmFtZSB0byB0cmFuc3BhcmVudAogICAgICAg
ICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzLCAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlv
dXMgZnJhbWVidWZmZXIgY29udGVudHMKICAgICAgICAgfTsKKyAgICAgICAgdHlwZWRlZiB1aW50
MzJfdCBQaXhlbERhdGE7CiAKICAgICAgICAgUkdCQTMyQnVmZmVyKCkKICAgICAgICAgICAgIDog
bV9zdGF0dXMoRnJhbWVFbXB0eSkKQEAgLTY0LDM3ICs2NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBkb2Vzbid0IGNyZWF0ZSBhIG5ldyBj
b3B5IG9mIHRoZSBpbWFnZSBkYXRhLCBpdCBvbmx5CiAgICAgICAgIC8vIGluY3JlYXNlcyB0aGUg
cmVmIGNvdW50IG9mIHRoZSBleGlzdGluZyBiaXRtYXAuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFRoaXMgZXhpc3RzIGJlY2F1c2UgSW1hZ2VEZWNvZGVyIGtlZXBzIGEgVmVjdG9yPFJHQkEzMkJ1
ZmZlcj4sIGFuZAorICAgICAgICAvLyBWZWN0b3IgcmVxdWlyZXMgdGhpcyBjb25zdHJ1Y3Rvci4K
ICAgICAgICAgUkdCQTMyQnVmZmVyKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG9wZXJhdG9yPShvdGhlcik7CiAgICAgICAgIH0KIAotICAgICAgICB+
UkdCQTMyQnVmZmVyKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5pdGlh
bGl6ZSB3aXRoIGFub3RoZXIgYnVmZmVyLiAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNyZWF0ZSBh
IG5ldyBjb3B5Ci0gICAgICAgIC8vIG9mIHRoZSBpbWFnZSBkYXRhLCBpdCBvbmx5IGluY3JlYXNl
cyB0aGUgcmVmY291bnQgb2YgdGhlIGV4aXN0aW5nIGJpdG1hcC4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gTm9ybWFsIGNhbGxlcnMgc2hvdWxkIG5vdCBnZW5lcmFsbHkgYmUgdXNpbmcgdGhpcyBm
dW5jdGlvbi4gIElmIHlvdSB3YW50Ci0gICAgICAgIC8vIHRvIGNyZWF0ZSBhIGNvcHkgb24gd2hp
Y2ggeW91IGNhbiBtb2RpZnkgdGhlIGltYWdlIGRhdGEgaW5kZXBlbmRlbnRseSwKLSAgICAgICAg
Ly8gdXNlIGNvcHlCaXRtYXBEYXRhKCkgaW5zdGVhZC4KLSAgICAgICAgUkdCQTMyQnVmZmVyJiBv
cGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLQot
ICAgICAgICAgICAgbV9iaXRtYXAgPSBvdGhlci5tX2JpdG1hcDsKLSAgICAgICAgICAgIC8vIEtl
ZXAgdGhlIHBpeGVscyBsb2NrZWQgc2luY2Ugd2Ugd2lsbCBiZSB3cml0aW5nIGRpcmVjdGx5IGlu
dG8gdGhlCi0gICAgICAgICAgICAvLyBiaXRtYXAgdGhyb3VnaG91dCB0aGlzIG9iamVjdCdzIGxp
ZmV0aW1lLgotICAgICAgICAgICAgbV9iaXRtYXAubG9ja1BpeGVscygpOwotICAgICAgICAgICAg
c2V0UmVjdChvdGhlci5yZWN0KCkpOwotICAgICAgICAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKLSAgICAgICAgICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwotICAgICAg
ICAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQogICAgICAgICB2b2lkIGNsZWFyKCkKICAg
ICAgICAgewogICAgICAgICAgICAgbV9iaXRtYXAucmVzZXQoKTsKQEAgLTEyOSwxNCArMTA2LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gTVVTVCBub3QgcGFzcyBpbnZhbGlk
IHZhbHVlcyBvciB0aGlzIHdpbGwgY29ycnVwdCBtZW1vcnkuCiAgICAgICAgIHZvaWQgY29weVJv
d05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCBtX2JpdG1hcC53aWR0aCgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChlbmRYIDw9IG1fYml0bWFwLndpZHRoKCkpOwotICAgICAgICAgICAg
QVNTRVJUKHN0YXJ0WSA8IG1fYml0bWFwLmhlaWdodCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChl
bmRZIDw9IG1fYml0bWFwLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRl
cyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZih1aW50MzJfdCk7Ci0gICAgICAgICAgICBjb25z
dCB1aW50MzJfdCogY29uc3Qgc3RhcnRBZGRyID0gbV9iaXRtYXAuZ2V0QWRkcjMyKHN0YXJ0WCwg
c3RhcnRZKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChlbmRYIDw9IHdpZHRoKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8
IGhlaWdodCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKKyAgICAg
ICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhl
bERhdGEpOworICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBn
ZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsKICAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3Rh
cnRZICsgMTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweSht
X2JpdG1hcC5nZXRBZGRyMzIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOwor
ICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKSwgc3RhcnRBZGRy
LCByb3dCeXRlcyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZv
cmUgYW55IHBpeGVscyBhcmUgd3JpdHRlbi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgpAQCAtMTQ1LDcg
KzEyMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgewogICAgICAgICAgICAgLy8g
VGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgaXQgd2lsbCBsZWFrIG1l
bW9yeQogICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLgotICAgICAgICAgICAgQVNTRVJUKG1fYml0
bWFwLndpZHRoKCkgPT0gMCAmJiBtX2JpdG1hcC5oZWlnaHQoKSA9PSAwKTsKKyAgICAgICAgICAg
IEFTU0VSVCh3aWR0aCgpID09IDAgJiYgaGVpZ2h0KCkgPT0gMCk7CiAgICAgICAgICAgICBtX2Jp
dG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCB3aWR0aCwgaGVpZ2h0
KTsKICAgICAgICAgICAgIGlmICghbV9iaXRtYXAuYWxsb2NQaXhlbHMoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEFsbG9jYXRpb24gZmFpbHVyZSwgbWF5YmUgdGhlIGJpdG1hcCB3YXMgdG9vIGJp
Zy4KQEAgLTE2MiwzMiArMTM5LDY2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
VG8gYmUgdXNlZCBieSBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KCkuICBSZXR1cm5z
IGEgcG9pbnRlcgogICAgICAgICAvLyB0byB0aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0
YS4gIFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5CiAgICAgICAgIC8vIHRoZSBCaXRtYXBJ
bWFnZSBhbmQgZnJlZWQgaW4gRnJhbWVEYXRhOjpjbGVhcigpLgotICAgICAgICBOYXRpdmVJbWFn
ZVB0ciBhc05ld05hdGl2ZUltYWdlKCkKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRp
dmVJbWFnZSgpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZl
SW1hZ2VTa2lhKG1fYml0bWFwKTsKICAgICAgICAgfQogCisgICAgICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdCB7IHJldHVybiAhbV9iaXRtYXAuaXNPcGFxdWUoKTsgfQogICAgICAgICBjb25zdCBJ
bnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgICAgIEZyYW1lU3Rh
dHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVk
IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURp
c3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1l
dGhvZDsgfQotICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gIW1fYml0bWFw
LmlzT3BhcXVlKCk7IH0KIAorICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpIHsg
bV9iaXRtYXAuc2V0SXNPcGFxdWUoIWFscGhhKTsgfQogICAgICAgICB2b2lkIHNldFJlY3QoY29u
c3QgSW50UmVjdCYgcikgeyBtX3JlY3QgPSByOyB9CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZy
YW1lU3RhdHVzIHMpCiAgICAgICAgIHsKKyAgICAgICAgICAgIG1fc3RhdHVzID0gczsKICAgICAg
ICAgICAgIGlmIChzID09IEZyYW1lQ29tcGxldGUpCiAgICAgICAgICAgICAgICAgbV9iaXRtYXAu
c2V0RGF0YUNvbXBsZXRlKCk7ICAvLyBUZWxsIHRoZSBiaXRtYXAgaXQncyBkb25lLgotICAgICAg
ICAgICAgbV9zdGF0dXMgPSBzOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24o
dW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZv
aWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNw
b3NhbE1ldGhvZCA9IG1ldGhvZDsgfQotICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxw
aGEpIHsgbV9iaXRtYXAuc2V0SXNPcGFxdWUoIWFscGhhKTsgfQogCi0gICAgICAgIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIsIHVpbnQ4
X3QgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwgYSk7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIC8vIEluaXRpYWxpemUgd2l0aCBhbm90aGVyIGJ1ZmZlci4g
IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBjcmVhdGUgYSBuZXcgY29weQorICAgICAgICAvLyBvZiB0
aGUgaW1hZ2UgZGF0YSwgaXQgb25seSBpbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBleGlz
dGluZyBiaXRtYXAuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vcm1hbCBjYWxsZXJzIHNob3Vs
ZCBub3QgZ2VuZXJhbGx5IGJlIHVzaW5nIHRoaXMgZnVuY3Rpb24uICBJZiB5b3Ugd2FudAorICAg
ICAgICAvLyB0byBjcmVhdGUgYSBjb3B5IG9uIHdoaWNoIHlvdSBjYW4gbW9kaWZ5IHRoZSBpbWFn
ZSBkYXRhIGluZGVwZW5kZW50bHksCisgICAgICAgIC8vIHVzZSBjb3B5Qml0bWFwRGF0YSgpIGlu
c3RlYWQuCisgICAgICAgIFJHQkEzMkJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZl
ciYgb3RoZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQzMl90KiBjb25zdCBkZXN0ID0g
bV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOworICAgICAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVy
KQorICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAorICAgICAgICAgICAgbV9iaXRtYXAg
PSBvdGhlci5tX2JpdG1hcDsKKyAgICAgICAgICAgIC8vIEtlZXAgdGhlIHBpeGVscyBsb2NrZWQg
c2luY2Ugd2Ugd2lsbCBiZSB3cml0aW5nIGRpcmVjdGx5IGludG8gdGhlCisgICAgICAgICAgICAv
LyBiaXRtYXAgdGhyb3VnaG91dCB0aGlzIG9iamVjdCdzIGxpZmV0aW1lLgorICAgICAgICAgICAg
bV9iaXRtYXAubG9ja1BpeGVscygpOworICAgICAgICAgICAgc2V0UmVjdChvdGhlci5yZWN0KCkp
OworICAgICAgICAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKKyAgICAgICAgICAgIHNl
dER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgICAgICAgICAgc2V0RGlzcG9zYWxNZXRo
b2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmxpbmUgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9i
aXRtYXAud2lkdGgoKTsgfQorICAgICAgICBpbmxpbmUgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fYml0bWFwLmhlaWdodCgpOyB9CisKKyAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0
QWRkcihpbnQgeCwgaW50IHkpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2JpdG1hcC5nZXRBZGRyMzIoeCwgeSk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgdm9p
ZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgewogICAgICAgICAgICAgLy8gV2Ugc3RvcmUgdGhp
cyBkYXRhIHByZS1tdWx0aXBsaWVkLgogICAgICAgICAgICAgaWYgKGEgPT0gMCkKICAgICAgICAg
ICAgICAgICAqZGVzdCA9IDA7CkBAIC0yMDIsMTQgKzIxMywxNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgIHByaXZhdGU6CiAgICAgICAgIE5h
dGl2ZUltYWdlU2tpYSBtX2JpdG1hcDsKLSAgICAgICAgSW50UmVjdCBtX3JlY3Q7ICAgIC8vIFRo
ZSByZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluIHRoZSBvdmVyYWxs
IGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMg
anVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhh
biB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgorICAgICAgICBJbnRSZWN0IG1fcmVjdDsgICAgICAg
Ly8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4gdGhlIG92
ZXJhbGwgYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3YXMg
c21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVz
IG1fc3RhdHVzOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGZyYW1lIGlzIGNvbXBsZXRlbHkgZmlu
aXNoZWQgZGVjb2RpbmcuCi0gICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8vIFRoZSBhbmlt
YXRpb24gZGVsYXkuCi0gICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhv
ZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5n
IHRoZSBuZXh0IGZyYW1lLgorICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAgLy8gVGhlIGFu
aW1hdGlvbiBkZWxheS4KKyAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0
aG9kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRoIHRo
aXMgZnJhbWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgogICAgIH07
CiAKICAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNlIGNsYXNz
IGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5j
cHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2lu
Y2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ICAvLyBOZWVkZWQgYnkganBlZ2xp
Yi5oIGZvciBGSUxFLgogCiBleHRlcm4gIkMiIHsKICNpbmNsdWRlICJqcGVnbGliLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31185</attachid>
            <date>2009-06-11 17:59:17 -0700</date>
            <delta_ts>2009-06-11 18:04:52 -0700</delta_ts>
            <desc>part seven, v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>31430</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMDYtMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHNldmVu
CisgICAgICAgIFVwZGF0ZSBTa2lhJ3MgSW1hZ2VEZWNvZGVyLmggd2l0aCBhIGZldyBjaGFuZ2Vz
IGRlc2lnbmVkIHRvIHJlZHVjZSB0aGUKKyAgICAgICAgZGVsdGEgYmV0d2VlbiBzcGVjaWZpYyBp
bXBsZW1lbnRhdGlvbnMgb2YgSW1hZ2VEZWNvZGVyLmguICBVcGRhdGUKKyAgICAgICAgQ2Fpcm8n
cyBJbWFnZURlY29kZXIuaCB0byBzeW5jIHVwIHdpdGggdGhlIEFQSSBjaGFuZ2VzIGluIHRoZSBT
a2lhCisgICAgICAgIHZlcnNpb24gaW4gdGhlIGxhc3QgdHdvIGNoYWdlIHNldHMuICBVcGRhdGUg
Q2Fpcm8ncyBQTkcvSlBFRy9HSUYKKyAgICAgICAgZGVjb2RlcnMgdG8gdXNlIHRoZSBBUElzIGFz
IHdlbGwuICBBbGwgdGhlIENhaXJvIGltYWdlIGRlY29kZXIgY2hhbmdlcworICAgICAgICBhcmUg
ZGlyZWN0IGNvcGllcyBvZiB0aGUgU2tpYSB2ZXJzaW9ucyBleGNlcHQgSW1hZ2VEZWNvZGVyLmgs
IHdoaWNoIGlzCisgICAgICAgIG1vZGlmaWVkIGluIHRoZSBuZWNlc3Nhcnkgd2F5cyBmb3IgdGhl
IGRpZmZlcmVuY2VzIGJldHdlZW4gQ2Fpcm8gYW5kCisgICAgICAgIFNraWEuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBVc2UgbmV3IFJHQkEz
MkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIEFQSS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDogU3luYyB1cCB3aXRoIFNraWEgdmVyc2lvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEz
MkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjph
c05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFzQWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpkaXNwb3NhbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpnZXRBZGRyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDogU3luYyB1cCB3aXRoIFNraWEgdmVyc2lvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IFN5
bmMgdXAgd2l0aCBTa2lhIHZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOiBTeW5jIHVwIHdpdGggU2tpYSB2ZXJzaW9uLgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmg6IEFkZCB2YXJpb3Vz
IHR5cGVkZWZzIG9yIGhlbHBlciBmdW5jdGlvbnMgdG8gbWluaW1pemUgZGlmZmVyZW5jZXMgd2l0
aCBDYWlybyB2ZXJzaW9uLiAgUmVvcmRlciBmdW5jdGlvbnMgc2xpZ2h0bHkgdG8gbWF0Y2ggcmVv
cmRlcmluZyBvZiBDYWlybydzIG1faGFzQWxwaGEgdmFyaWFibGUsIHdoaWNoIEkgbW92ZWQgdG8g
aW5jcmVhc2UgcmVhZGFiaWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Oik6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlSb3dOVGltZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJC
dWZmZXI6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6ZGlzcG9z
YWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldERpc3Bvc2FsTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OndpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogQWRkICNpbmNsdWRlIG5lZWRlZCBieSBK
UEVHIGhlYWRlcnMgb24gc29tZSBwbGF0Zm9ybXMsIHBsdXMgY29tbWVudC4KKwogMjAwOS0wNi0w
MyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
U291cmNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkzLDExICsxOTMsNyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRl
RnJhbWVBCiAgICAgaWYgKCFzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25lZCBj
aGFyKilidWZmZXItPmJ5dGVzKCkuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lk
dGgoKSo0KTsKKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CiB9CiAKIGJv
b2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShy
ZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDIwICszMCwxOCBAQAogI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQ+IFJHQkEz
MkFycmF5OwotCiAgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0aGUg
ZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMiBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0
IGFsbAogICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uICBGcmFtZXMg
YXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlzIGJ1
ZmZlci4KICAgICBjbGFzcyBSR0JBMzJCdWZmZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51
bSBGcmFtZVN0YXR1cyB7IEZyYW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9
OwotCiAgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhvZCB7CiAgICAgICAgICAgICAvLyBJ
ZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFrZSBzdXJlIHlvdSBh
dWRpdCBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBzb21lIHVzZXJzIG1heSBjYXN0IHJh
dyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCkBAIC01MiwyMiArNTAsMzcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAg
Ly8gQ2xlYXIgZnJhbWUgdG8gdHJhbnNwYXJlbnQKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3Jp
dGVQcmV2aW91cywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRl
bnRzCiAgICAgICAgIH07CisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAg
ICAgICAgIFJHQkEzMkJ1ZmZlcigpCi0gICAgICAgICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkp
CisgICAgICAgICAgICA6IG1faGFzQWxwaGEoZmFsc2UpCisgICAgICAgICAgICAsIG1fc3RhdHVz
KEZyYW1lRW1wdHkpCiAgICAgICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgICAgICwg
bV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICAgICAgICAgLCBtX2hh
c0FscGhhKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0gCiAKLSAgICAgICAgdm9pZCBjbGVh
cigpIHsKLSAgICAgICAgICBtX2J5dGVzLmNsZWFyKCk7Ci0gICAgICAgICAgbV9zdGF0dXMgPSBG
cmFtZUVtcHR5OwotICAgICAgICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJz
IGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzCi0gICAgICAgICAgLy8gdGhpcyB0
byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCi0gICAgICAg
ICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVl
ZCB0byByZWFkIG90aGVyCi0gICAgICAgICAgLy8gbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUg
bGF0ZXIuCisgICAgICAgIC8vIFRoaXMgZXhpc3RzIGJlY2F1c2UgSW1hZ2VEZWNvZGVyIGtlZXBz
IGEgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4sIGFuZAorICAgICAgICAvLyBWZWN0b3IgcmVxdWlyZXMg
dGhpcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUkdCQTMyQnVmZmVyKGNvbnN0IFJHQkEzMkJ1ZmZl
ciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wZXJhdG9yPShvdGhlcik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
eXRlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OworICAgICAg
ICAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKCkKKyAgICAgICAgICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0
bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgICAgICAgICAgLy8gaW5pdEZy
YW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCisg
ICAgICAgICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgemVyb0ZpbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J5dGVzLmZpbGwoMCk7CisgICAgICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRo
ZSBpbWFnZSBkYXRhIGluIHxvdGhlcnwsIHNvIHRoZQpAQCAtNzgsMTEgKzkxLDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIG1f
Ynl0ZXMgPSBvdGhlci5tX2J5dGVzOwotICAgICAgICAgICAgbV9oYXNBbHBoYSA9IG90aGVyLm1f
aGFzQWxwaGE7CisgICAgICAgICAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXM7IH0KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzKCkgeyByZXR1cm4gbV9i
eXRlczsgfQorICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvcGllcyBbKHN0YXJ0WCwgc3RhcnRZ
KSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZSBzYW1lCisgICAgICAgIC8vIFgtY29vcmRpbmF0ZXMg
b24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZyBlbmRZLgorICAg
ICAgICAvLworICAgICAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNhbml0eS1j
aGVjayBpdHMgYXJndW1lbnRzISAgQ2FsbGVycworICAgICAgICAvLyBNVVNUIG5vdCBwYXNzIGlu
dmFsaWQgdmFsdWVzIG9yIHRoaXMgd2lsbCBjb3JydXB0IG1lbW9yeS4KKyAgICAgICAgdm9pZCBj
b3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhcnRZ
IDwgaGVpZ2h0KCkpOworICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOworICAg
ICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBp
eGVsRGF0YSk7CisgICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9
IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOworICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBz
dGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCisgICAgICAgICAgICAgICAgbWVtY3B5
KGdldEFkZHIoc3RhcnRYLCBlbmRZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscyBhcmUgd3JpdHRl
bi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgogICAgICAgICAvLyBzdWNjZXNzLCBmYWxzZSBpZiB0aGUg
bWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCkBAIC05MSwzMSArMTE4LDc3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBm
b3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZQogICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHNp
emUgd2FzIHRvbyBiaWcuLi4KICAgICAgICAgICAgIG1fYnl0ZXMucmVzaXplKHdpZHRoICogaGVp
Z2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKLSAg
ICAgICAgICAgIC8vIENsZWFyIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIG1fYnl0ZXMuZmlsbCgw
KTsKLSAgICAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICAgICAgLy8gWmVybyB0
aGUgaW1hZ2UuCisgICAgICAgICAgICB6ZXJvRmlsbCgpOwogCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAgICAgICAgLy8gdG8g
dGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBv
d25lZCBieQorICAgICAgICAvLyB0aGUgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0
YTo6Y2xlYXIoKS4KKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+KAorICAgICAgICAgICAgICAgICAgICBtX2J5
dGVzLmRhdGEoKSkpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwKKyAg
ICAgICAgICAgICAgICB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KICAg
ICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAg
ICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogICAg
ICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAg
ICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQWxwaGE7IH0KIAorICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEp
IHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9CiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRS
ZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0
dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXRE
aXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0
aG9kID0gbWV0aG9kOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkgeyBt
X2hhc0FscGhhID0gYWxwaGE7IH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBzZXRSR0JBKHVuc2ln
bmVkJiBwb3MsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICB7CisgICAgICAgICAg
ICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIsIGEpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICAvLyBJbml0aWFsaXplIHdpdGggYW5vdGhlciBidWZmZXIuICBUaGlz
IGZ1bmN0aW9uIGRvZXNuJ3QgY3JlYXRlIGEgbmV3IGNvcHkKKyAgICAgICAgLy8gb2YgdGhlIGlt
YWdlIGRhdGEsIGl0IG9ubHkgaW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZXhpc3Rpbmcg
Yml0bWFwLgorICAgICAgICAvLworICAgICAgICAvLyBOb3JtYWwgY2FsbGVycyBzaG91bGQgbm90
IGdlbmVyYWxseSBiZSB1c2luZyB0aGlzIGZ1bmN0aW9uLiAgSWYgeW91IHdhbnQKKyAgICAgICAg
Ly8gdG8gY3JlYXRlIGEgY29weSBvbiB3aGljaCB5b3UgY2FuIG1vZGlmeSB0aGUgaW1hZ2UgZGF0
YSBpbmRlcGVuZGVudGx5LAorICAgICAgICAvLyB1c2UgY29weUJpdG1hcERhdGEoKSBpbnN0ZWFk
LgorICAgICAgICBSR0JBMzJCdWZmZXImIG9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90
aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgICAgICBtX2J5dGVzID0gb3RoZXIubV9i
eXRlczsKKyAgICAgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgICAgIHNl
dEhhc0FscGhhKG90aGVyLmhhc0FscGhhKCkpOworICAgICAgICAgICAgc2V0UmVjdChvdGhlci5y
ZWN0KCkpOworICAgICAgICAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKKyAgICAgICAg
ICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgICAgICAgICAgc2V0RGlzcG9z
YWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICAgICAgaW5saW5lIGludCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBn
ZXRBZGRyKGludCB4LCBpbnQgeSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fYnl0ZXMuZGF0YSgpICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWdu
ZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewogICAgICAgICAgICAgLy8g
V2Ugc3RvcmUgdGhpcyBkYXRhIHByZS1tdWx0aXBsaWVkLgogICAgICAgICAgICAgaWYgKGEgPT0g
MCkKLSAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgICpkZXN0ID0gMDsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7CkBAIC0xMjMs
MTkgKzE5NiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgIGcg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZyAqIGFscGhhUGVyY2VudCk7CiAgICAgICAgICAgICAg
ICAgICAgIGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhhUGVyY2VudCk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBvcyA9IChhIDw8IDI0IHwgciA8PCAxNiB8
IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2
IHwgZyA8PCA4IHwgYik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJHQkEzMkFycmF5IG1fYnl0ZXM7Ci0gICAgICAgIEludFJlY3QgbV9yZWN0OyAg
ICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUg
b3ZlcmFsbCBidWZmZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
YWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBvcmlnaW5hbCByZWN0IHdhcyBzbWFs
bGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgVmVjdG9yPFBpeGVsRGF0
YT4gbV9ieXRlczsKKyAgICAgICAgSW50U2l6ZSBtX3NpemU7ICAgICAgIC8vIFRoZSBzaXplIG9m
IHRoZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHNhbWUgYXMgSW1hZ2VEZWNvZGVyOjptX3NpemUuCisgICAgICAgIGJvb2wgbV9o
YXNBbHBoYTsgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUg
YnVmZmVyIGhhdmUgdHJhbnNwYXJlbmN5LgorICAgICAgICBJbnRSZWN0IG1fcmVjdDsgICAgICAg
Ly8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4gdGhlIG92
ZXJhbGwgYnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxs
IGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3YXMg
c21hbGxlciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVz
IG1fc3RhdHVzOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGZyYW1lIGlzIGNvbXBsZXRlbHkgZmlu
aXNoZWQgZGVjb2RpbmcuCi0gICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8vIFRoZSBhbmlt
YXRpb24gZGVsYXkuCi0gICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhv
ZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5n
IHRoZSBuZXh0IGZyYW1lLgotICAgICAgICBib29sIG1faGFzQWxwaGE7IC8vIFdoZXRoZXIgb3Ig
bm90IGFueSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBidWZmZXIgaGF2ZSB0cmFuc3BhcmVuY3kuCisg
ICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247ICAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgorICAg
ICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hl
biBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCiAgICAgfTsKIAogICAgIC8vIFRoZSBJbWFn
ZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGltYWdl
IGZvcm1hdCBkZWNvZGVycwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDYyMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMSwxMCArMzIxLDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6
OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2
aW91cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCiAgICAgICAgICAgICAgIGJ1
ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkgewotICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIGNvbnN0IGN1cnJlbnRSb3cgPQotICAgICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCkgKyAoeSAqIHNpemUoKS53aWR0aCgpKTsKICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7IHggPCBwcmV2UmVjdC5y
aWdodCgpOyArK3gpCi0gICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKCooY3Vy
cmVudFJvdyArIHgpLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICBidWZmZXIt
PnNldFJHQkEoeCwgeSwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgaWYgKChwcmV2UmVjdC53aWR0aCgpID4gMCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkp
CiAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwpAQCAtMzQxLDQ3
ICszMzksNDMgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogfQog
CiB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsICAgLy8gUG9pbnRlciB0byBzaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZl
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJv
d0J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyKiByb3dFbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgcm93TnVtYmVyLCAgLy8gVGhlIHJvdyBpbmRleAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCAgLy8gSG93IG1hbnkgdGltZXMgdG8g
cmVwZWF0IHRoZSByb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCByb3dOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgcmVwZWF0Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZy
YW1lIGlmIG5lY2Vzc2FyeS4KLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJC
dWZmZXI6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAvLyBUaGUgcGl4ZWwgZGF0YSBhbmQgY29vcmRpbmF0ZXMgc3VwcGxp
ZWQgdG8gdXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSdzCisgICAgLy8gb3JpZ2luIHdpdGhp
biB0aGUgZW50aXJlIGltYWdlIHNpemUsIGkuZS4KKyAgICAvLyAobV9yZWFkZXItPmZyYW1lWE9m
ZnNldCgpLCBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkpLgorICAgIGludCB4ID0gbV9yZWFkZXIt
PmZyYW1lWE9mZnNldCgpOworICAgIGNvbnN0IGludCB5ID0gbV9yZWFkZXItPmZyYW1lWU9mZnNl
dCgpICsgcm93TnVtYmVyOwogCi0gICAgLy8gRG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KLSAg
ICBpZiAocm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZ
T2Zmc2V0KCkgKyByb3dOdW1iZXIpID49IHNpemUoKS5oZWlnaHQoKSkKKyAgICAvLyBTYW5pdHkt
Y2hlY2sgdGhlIGFyZ3VtZW50cy4KKyAgICBpZiAoKHJvd0J1ZmZlciA9PSAwKSB8fCAoeSA+PSBz
aXplKCkuaGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBHZXQgdGhlIGNvbG9y
bWFwLgogICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKICAgICB1bnNpZ25lZCBjaGFyKiBjb2xv
ck1hcDsKICAgICBtX3JlYWRlci0+Z2V0Q29sb3JNYXAoY29sb3JNYXAsIGNvbG9yTWFwU2l6ZSk7
CiAgICAgaWYgKCFjb2xvck1hcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhlIGJ1ZmZl
cnMgdGhhdCB3ZSBkcmF3IGFyZSB0aGUgZW50aXJlIGltYWdlJ3Mgd2lkdGggYW5kIGhlaWdodCwg
c28gYSBmaW5hbCBvdXRwdXQgZnJhbWUgaXMKLSAgICAvLyB3aWR0aCAqIGhlaWdodCBSR0JBMzIg
dmFsdWVzIGluIHNpemUuCi0gICAgLy8KLSAgICAvLyBBIHNpbmdsZSBHSUYgZnJhbWUsIGhvd2V2
ZXIsIGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlIGVudGlyZSBpbWFnZSwgaS5lLiwgaXQgY2FuIHJl
cHJlc2VudCBzb21lIHN1Yi1yZWN0YW5nbGUKLSAgICAvLyB3aXRoaW4gdGhlIG92ZXJhbGwgaW1h
Z2UuICBUaGUgcm93cyB3ZSBhcmUgZGVjb2RpbmcgYXJlIHdpdGhpbiB0aGlzCi0gICAgLy8gc3Vi
LXJlY3RhbmdsZS4gIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgR0lGIGZyYW1lJ3Mgc3ViLXJlY3Rh
bmdsZSBpcyAoeCx5LHcsaCkgdGhlbiByb3cgMCBpcyByZWFsbHkgcm93Ci0gICAgLy8geSwgYW5k
IGVhY2ggcm93IGdvZXMgZnJvbSB4IHRvIHgrdy4KLSAgICB1bnNpZ25lZCBkc3RQb3MgPSAobV9y
ZWFkZXItPmZyYW1lWU9mZnNldCgpICsgcm93TnVtYmVyKSAqIHNpemUoKS53aWR0aCgpICsgbV9y
ZWFkZXItPmZyYW1lWE9mZnNldCgpOwotICAgIHVuc2lnbmVkKiBkc3QgPSBidWZmZXIuYnl0ZXMo
KS5kYXRhKCkgKyBkc3RQb3M7Ci0gICAgdW5zaWduZWQqIGRzdEVuZCA9IGRzdCArIHNpemUoKS53
aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpOwotICAgIHVuc2lnbmVkKiBjdXJyRHN0
ID0gZHN0OwotICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnRSb3dCeXRlID0gcm93QnVmZmVyOwot
Ci0gICAgd2hpbGUgKGN1cnJlbnRSb3dCeXRlICE9IHJvd0VuZCAmJiBjdXJyRHN0IDwgZHN0RW5k
KSB7Ci0gICAgICAgIGlmICgoIW1fcmVhZGVyLT5pc1RyYW5zcGFyZW50KCkgfHwgKmN1cnJlbnRS
b3dCeXRlICE9IG1fcmVhZGVyLT50cmFuc3BhcmVudFBpeGVsKCkpICYmICpjdXJyZW50Um93Qnl0
ZSA8IGNvbG9yTWFwU2l6ZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY29sb3JJbmRleCA9ICpj
dXJyZW50Um93Qnl0ZSAqIDM7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBjb2xvck1hcFtj
b2xvckluZGV4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gY29sb3JNYXBbY29sb3JJ
bmRleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IGNvbG9yTWFwW2NvbG9ySW5k
ZXggKyAyXTsKLSAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgqY3VyckRzdCwgcmVk
LCBncmVlbiwgYmx1ZSwgMjU1KTsKKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNl
c3NhcnkuCisgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJh
bWVJbmRleF07CisgICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4g
IFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0CisgICAgLy8gKHJvd0VuZCAtIHJvd0J1ZmZlcikg
PT0gKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKSwgc28KKyAgICAv
LyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgZWl0aGVyIHRoZSBz
b3VyY2UgZGF0YSBvciB0aGUKKyAgICAvLyByb3cncyBYLWNvb3JkaW5hdGVzLgorICAgIGZvciAo
dW5zaWduZWQgY2hhciogc291cmNlQWRkciA9IHJvd0J1ZmZlcjsgKHNvdXJjZUFkZHIgIT0gcm93
RW5kKSAmJiAoeCA8IHNpemUoKS53aWR0aCgpKTsgKytzb3VyY2VBZGRyLCArK3gpIHsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICpzb3VyY2VBZGRyOworICAgICAg
ICBpZiAoKCFtX3JlYWRlci0+aXNUcmFuc3BhcmVudCgpIHx8IChzb3VyY2VWYWx1ZSAhPSBtX3Jl
YWRlci0+dHJhbnNwYXJlbnRQaXhlbCgpKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXpl
KSkgeworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KHNvdXJjZVZhbHVlKSAqIDM7CisgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5
LCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1h
cFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBt
X2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9IHRydWU7CiAgICAgICAgICAgICAvLyBXZSBtYXkgb3Ig
bWF5IG5vdCBuZWVkIHRvIHdyaXRlIHRyYW5zcGFyZW50IHBpeGVscyB0byB0aGUgYnVmZmVyLgpA
QCAtMzkyLDI2ICszODYsMTMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93
KHVucwogICAgICAgICAgICAgLy8gYmV5b25kIHRoZSBmaXJzdCwgb3IgdGhlIGluaXRpYWwgcGFz
c2VzIHdpbGwgInNob3cgdGhyb3VnaCIgdGhlCiAgICAgICAgICAgICAvLyBsYXRlciBvbmVzLgog
ICAgICAgICAgICAgaWYgKHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpCi0gICAgICAgICAgICAgICAg
UkdCQTMyQnVmZmVyOjpzZXRSR0JBKCpjdXJyRHN0LCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAg
ICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKICAgICAgICAgfQotICAgICAg
ICBjdXJyRHN0Kys7Ci0gICAgICAgIGN1cnJlbnRSb3dCeXRlKys7CiAgICAgfQogCi0gICAgaWYg
KHJlcGVhdENvdW50ID4gMSkgewotICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50
fC0xIHRpbWVzLgotICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAg
ICB1bnNpZ25lZCBkYXRhU2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7Ci0gICAgICAgIHVu
c2lnbmVkIHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgIHVuc2lnbmVkKiBlbmQgPSBi
dWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyB3aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAg
Y3VyckRzdCA9IGRzdCArIHdpZHRoOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
cmVwZWF0Q291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQp
IC8vIFByb3RlY3QgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRD
b3VudC4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1lbWNweShjdXJyRHN0
LCBkc3QsIGRhdGFTaXplKTsKLSAgICAgICAgICAgIGN1cnJEc3QgKz0gd2lkdGg7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYg
bmVlZCBiZS4KKyAgICBpZiAocmVwZWF0Q291bnQgPiAxKQorICAgICAgICBidWZmZXIuY29weVJv
d05UaW1lcyhtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIHgsIHksIHN0ZDo6bWluKHkgKyBzdGF0
aWNfY2FzdDxpbnQ+KHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSk7CiB9CiAKIHZvaWQg
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2ln
bmVkIGZyYW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbE1ldGhvZCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gIC8vIE5lZWRlZCBieSBqcGVnbGliLmgg
Zm9yIEZJTEUuCiAKIGV4dGVybiAiQyIgewogI2luY2x1ZGUgImpwZWdsaWIuaCIKQEAgLTQ3NSw4
ICs0NzUsNiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAg
anBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7CiAgICAgSlNB
TVBBUlJBWSBzYW1wbGVzID0gbV9yZWFkZXItPnNhbXBsZXMoKTsKIAotICAgIHVuc2lnbmVkKiBk
c3QgPSBidWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyBpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKiBzaXpl
KCkud2lkdGgoKTsKLSAgIAogICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZv
LT5vdXRwdXRfaGVpZ2h0KSB7CiAgICAgICAgIC8qIFJlcXVlc3Qgb25lIHNjYW5saW5lLiAgUmV0
dXJucyAwIG9yIDEgc2NhbmxpbmVzLiAqLwogICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5l
cyhpbmZvLCBzYW1wbGVzLCAxKSAhPSAxKQpAQCAtNDg2LDcgKzQ4NCw5IEBAIGJvb2wgSlBFR0lt
YWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHIgPSAq
ajErKzsKICAgICAgICAgICAgIHVuc2lnbmVkIGcgPSAqajErKzsKICAgICAgICAgICAgIHVuc2ln
bmVkIGIgPSAqajErKzsKLSAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgqZHN0Kyss
IHIsIGcsIGIsIDB4RkYpOworICAgICAgICAgICAgLy8gcmVhZF9zY2FubGluZXMgaGFzIGluY3Jl
YXNlZCB0aGUgc2NhbmxpbmUgY291bnRlciwgc28gd2UKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5
IG1lYW4gdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIGlu
Zm8tPm91dHB1dF9zY2FubGluZSAtIDEsIHIsIGcsIGIsIDB4RkYpOwogICAgICAgICB9CiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgwLDE0ICszODAsMTMgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZwogCiAgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCiAgICAgaW50
IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgdW5zaWduZWQqIGRzdCA9IGJ1ZmZlci5ieXRl
cygpLmRhdGEoKSArIHJvd0luZGV4ICogd2lkdGg7CiAgICAgYm9vbCBzYXdBbHBoYSA9IGZhbHNl
OwogICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewogICAgICAgICB1bnNpZ25l
ZCByZWQgPSAqcm93Kys7CiAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOwogICAgICAg
ICB1bnNpZ25lZCBibHVlID0gKnJvdysrOwogICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IChoYXNB
bHBoYSA/ICpyb3crKyA6IDI1NSk7Ci0gICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgqZHN0
KyssIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwg
cm93SW5kZXgsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgaWYgKCFzYXdBbHBo
YSAmJiBhbHBoYSA8IDI1NSkgewogICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOwogICAgICAg
ICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQ2
MjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFJHQkEzMkJ1ZmZlciB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIEZyYW1l
U3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07Ci0KICAg
ICAgICAgZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKICAgICAgICAgICAgIC8vIElmIHlvdSBj
aGFuZ2UgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1cmUgeW91IGF1ZGl0IGFs
bAogICAgICAgICAgICAgLy8gdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5IGNhc3QgcmF3IHZhbHVl
cyB0by9mcm9tIHRoZXNlIGNvbnN0YW50cy4KQEAgLTU0LDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAgLy8gQ2xlYXIg
ZnJhbWUgdG8gdHJhbnNwYXJlbnQKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCiAgICAg
ICAgIH07CisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgUGl4ZWxEYXRhOwogCiAgICAgICAgIFJH
QkEzMkJ1ZmZlcigpCiAgICAgICAgICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkpCkBAIC02NCwz
NyArNjQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFRoaXMgY29uc3Ry
dWN0b3IgZG9lc24ndCBjcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgaXQgb25s
eQogICAgICAgICAvLyBpbmNyZWFzZXMgdGhlIHJlZiBjb3VudCBvZiB0aGUgZXhpc3RpbmcgYml0
bWFwLgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGV4aXN0cyBiZWNhdXNlIEltYWdlRGVj
b2RlciBrZWVwcyBhIFZlY3RvcjxSR0JBMzJCdWZmZXI+LCBhbmQKKyAgICAgICAgLy8gVmVjdG9y
IHJlcXVpcmVzIHRoaXMgY29uc3RydWN0b3IuCiAgICAgICAgIFJHQkEzMkJ1ZmZlcihjb25zdCBS
R0JBMzJCdWZmZXImIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBvcGVyYXRvcj0ob3Ro
ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgflJHQkEzMkJ1ZmZlcigpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEluaXRpYWxpemUgd2l0aCBhbm90aGVyIGJ1ZmZlci4gIFRo
aXMgZnVuY3Rpb24gZG9lc24ndCBjcmVhdGUgYSBuZXcgY29weQotICAgICAgICAvLyBvZiB0aGUg
aW1hZ2UgZGF0YSwgaXQgb25seSBpbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBleGlzdGlu
ZyBiaXRtYXAuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vcm1hbCBjYWxsZXJzIHNob3VsZCBu
b3QgZ2VuZXJhbGx5IGJlIHVzaW5nIHRoaXMgZnVuY3Rpb24uICBJZiB5b3Ugd2FudAotICAgICAg
ICAvLyB0byBjcmVhdGUgYSBjb3B5IG9uIHdoaWNoIHlvdSBjYW4gbW9kaWZ5IHRoZSBpbWFnZSBk
YXRhIGluZGVwZW5kZW50bHksCi0gICAgICAgIC8vIHVzZSBjb3B5Qml0bWFwRGF0YSgpIGluc3Rl
YWQuCi0gICAgICAgIFJHQkEzMkJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYg
b3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAgICAgIG1fYml0bWFwID0gb3RoZXIu
bV9iaXRtYXA7Ci0gICAgICAgICAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdl
IHdpbGwgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQotICAgICAgICAgICAgLy8gYml0bWFw
IHRocm91Z2hvdXQgdGhpcyBvYmplY3QncyBsaWZldGltZS4KLSAgICAgICAgICAgIG1fYml0bWFw
LmxvY2tQaXhlbHMoKTsKLSAgICAgICAgICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKLSAgICAg
ICAgICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7Ci0gICAgICAgICAgICBzZXREdXJhdGlv
bihvdGhlci5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVy
LmRpc3Bvc2FsTWV0aG9kKCkpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9
Ci0KICAgICAgICAgdm9pZCBjbGVhcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYml0bWFw
LnJlc2V0KCk7CkBAIC0xMjksMTQgKzEwNiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIE1VU1Qgbm90IHBhc3MgaW52YWxpZCB2YWx1ZXMgb3IgdGhpcyB3aWxsIGNvcnJ1cHQg
bWVtb3J5LgogICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgs
IGludCBzdGFydFksIGludCBlbmRZKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3Rh
cnRYIDwgbV9iaXRtYXAud2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSBtX2Jp
dG1hcC53aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBtX2JpdG1hcC5oZWln
aHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWSA8PSBtX2JpdG1hcC5oZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0YXJ0WCkgKiBzaXplb2Yo
dWludDMyX3QpOwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHN0YXJ0QWRkciA9
IG1fYml0bWFwLmdldEFkZHIzMihzdGFydFgsIHN0YXJ0WSk7CisgICAgICAgICAgICBBU1NFUlQo
c3RhcnRYIDwgd2lkdGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsK
KyAgICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7CisgICAgICAgICAgICBBU1NF
UlQoZW5kWSA8PSBoZWlnaHQoKSk7CisgICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAo
ZW5kWCAtIHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIGNvbnN0IFBp
eGVsRGF0YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7CiAgICAg
ICAgICAgICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0
WSkKLSAgICAgICAgICAgICAgICBtZW1jcHkobV9iaXRtYXAuZ2V0QWRkcjMyKHN0YXJ0WCwgZGVz
dFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRk
cihzdGFydFgsIHN0YXJ0WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMgYXJlIHdyaXR0ZW4uIFdp
bGwgcmV0dXJuIHRydWUgb24KQEAgLTE0NSw3ICsxMjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKICAgICAgICAgICAgIC8vIG90aGVyd2lz
ZS4KLSAgICAgICAgICAgIEFTU0VSVChtX2JpdG1hcC53aWR0aCgpID09IDAgJiYgbV9iaXRtYXAu
aGVpZ2h0KCkgPT0gMCk7CisgICAgICAgICAgICBBU1NFUlQod2lkdGgoKSA9PSAwICYmIGhlaWdo
dCgpID09IDApOwogICAgICAgICAgICAgbV9iaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJH
Ql84ODg4X0NvbmZpZywgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBpZiAoIW1fYml0bWFw
LmFsbG9jUGl4ZWxzKCkpIHsKICAgICAgICAgICAgICAgICAvLyBBbGxvY2F0aW9uIGZhaWx1cmUs
IG1heWJlIHRoZSBiaXRtYXAgd2FzIHRvbyBiaWcuCkBAIC0xNjIsMzIgKzEzOSw2NiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6OmNy
ZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJucyBhIHBvaW50ZXIKICAgICAgICAgLy8gdG8gdGhl
IHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25l
ZCBieQogICAgICAgICAvLyB0aGUgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0YTo6
Y2xlYXIoKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpCisgICAg
ICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZUltYWdlU2tpYShtX2JpdG1hcCk7CiAgICAgICAg
IH0KIAorICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gIW1fYml0bWFwLmlz
T3BhcXVlKCk7IH0KICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBt
X3N0YXR1czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZHVyYXRpb247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBoYXNBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuICFtX2JpdG1hcC5pc09wYXF1ZSgpOyB9CiAKKyAgICAgICAgdm9p
ZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1fYml0bWFwLnNldElzT3BhcXVlKCFhbHBoYSk7
IH0KICAgICAgICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZWN0ID0gcjsg
fQogICAgICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzKQogICAgICAgICB7CisgICAg
ICAgICAgICBtX3N0YXR1cyA9IHM7CiAgICAgICAgICAgICBpZiAocyA9PSBGcmFtZUNvbXBsZXRl
KQogICAgICAgICAgICAgICAgIG1fYml0bWFwLnNldERhdGFDb21wbGV0ZSgpOyAgLy8gVGVsbCB0
aGUgYml0bWFwIGl0J3MgZG9uZS4KLSAgICAgICAgICAgIG1fc3RhdHVzID0gczsKICAgICAgICAg
fQogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRp
b24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlz
cG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KLSAgICAg
ICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1fYml0bWFwLnNldElzT3BhcXVlKCFh
bHBoYSk7IH0KIAotICAgICAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1aW50OF90IHIs
IHVpbnQ4X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpCisgICAgICAgIGlubGluZSB2b2lkIHNl
dFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1
bnNpZ25lZCBhKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSks
IHIsIGcsIGIsIGEpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBJbml0
aWFsaXplIHdpdGggYW5vdGhlciBidWZmZXIuICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY3JlYXRl
IGEgbmV3IGNvcHkKKyAgICAgICAgLy8gb2YgdGhlIGltYWdlIGRhdGEsIGl0IG9ubHkgaW5jcmVh
c2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZXhpc3RpbmcgYml0bWFwLgorICAgICAgICAvLworICAg
ICAgICAvLyBOb3JtYWwgY2FsbGVycyBzaG91bGQgbm90IGdlbmVyYWxseSBiZSB1c2luZyB0aGlz
IGZ1bmN0aW9uLiAgSWYgeW91IHdhbnQKKyAgICAgICAgLy8gdG8gY3JlYXRlIGEgY29weSBvbiB3
aGljaCB5b3UgY2FuIG1vZGlmeSB0aGUgaW1hZ2UgZGF0YSBpbmRlcGVuZGVudGx5LAorICAgICAg
ICAvLyB1c2UgY29weUJpdG1hcERhdGEoKSBpbnN0ZWFkLgorICAgICAgICBSR0JBMzJCdWZmZXIm
IG9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB1aW50MzJfdCogY29uc3QgZGVzdCA9IG1fYml0bWFwLmdldEFkZHIzMih4LCB5KTsKKyAg
ICAgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CiAKKyAgICAgICAgICAgIG1fYml0bWFwID0gb3RoZXIubV9iaXRtYXA7CisgICAgICAgICAg
ICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdlIHdpbGwgYmUgd3JpdGluZyBkaXJl
Y3RseSBpbnRvIHRoZQorICAgICAgICAgICAgLy8gYml0bWFwIHRocm91Z2hvdXQgdGhpcyBvYmpl
Y3QncyBsaWZldGltZS4KKyAgICAgICAgICAgIG1fYml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICAg
ICAgICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICAgICAgICAgIHNldFN0YXR1cyhvdGhl
ci5zdGF0dXMoKSk7CisgICAgICAgICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsK
KyAgICAgICAgICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGlu
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLndpZHRoKCk7IH0KKyAgICAgICAgaW5s
aW5lIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcC5oZWlnaHQoKTsgfQorCisg
ICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOworICAg
ICAgICB9CisKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEqIGRlc3QsIHVu
c2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIHsK
ICAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMgZGF0YSBwcmUtbXVsdGlwbGllZC4KICAgICAg
ICAgICAgIGlmIChhID09IDApCiAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwpAQCAtMjAyLDE0
ICsyMTMsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICBwcml2YXRlOgogICAgICAgICBOYXRpdmVJbWFnZVNraWEgbV9iaXRtYXA7Ci0gICAg
ICAgIEludFJlY3QgbV9yZWN0OyAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lm
aWVkIGZyYW1lIHdpdGhpbiB0aGUgb3ZlcmFsbCBidWZmZXIuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhj
ZXB0IGZvciBHSUYgZnJhbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBv
cmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KKyAg
ICAgICAgSW50UmVjdCBtX3JlY3Q7ICAgICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmlnaW5hbCBz
cGVjaWZpZWQgZnJhbWUgd2l0aGluIHRoZSBvdmVyYWxsIGJ1ZmZlci4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1
ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFn
ZSBzaXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5IGZpbmlzaGVkIGRlY29kaW5nLgotICAgICAgICB1bnNp
Z25lZCBtX2R1cmF0aW9uOyAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgotICAgICAgICBGcmFtZURp
c3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7IC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZy
YW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KKyAgICAgICAgdW5z
aWduZWQgbV9kdXJhdGlvbjsgIC8vIFRoZSBhbmltYXRpb24gZGVsYXkuCisgICAgICAgIEZyYW1l
RGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxp
emluZyB0aGUgbmV4dCBmcmFtZS4KICAgICB9OwogCiAgICAgLy8gVGhlIEltYWdlRGVjb2RlciBj
bGFzcyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0IGRl
Y29kZXJzCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0lt
YWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxz
dGRpby5oPiAgLy8gTmVlZGVkIGJ5IGpwZWdsaWIuaCBmb3IgRklMRS4KIAogZXh0ZXJuICJDIiB7
CiAjaW5jbHVkZSAianBlZ2xpYi5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31186</attachid>
            <date>2009-06-11 18:04:52 -0700</date>
            <delta_ts>2009-06-12 15:44:04 -0700</delta_ts>
            <desc>part seven, v3 (Landed r44631)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>31418</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDktMDYtMTEgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHNldmVu
CisgICAgICAgIFVwZGF0ZSBTa2lhJ3MgSW1hZ2VEZWNvZGVyLmggd2l0aCBhIGZldyBjaGFuZ2Vz
IGRlc2lnbmVkIHRvIHJlZHVjZSB0aGUKKyAgICAgICAgZGVsdGEgYmV0d2VlbiBzcGVjaWZpYyBp
bXBsZW1lbnRhdGlvbnMgb2YgSW1hZ2VEZWNvZGVyLmguICBVcGRhdGUKKyAgICAgICAgQ2Fpcm8n
cyBJbWFnZURlY29kZXIuaCB0byBzeW5jIHVwIHdpdGggdGhlIEFQSSBjaGFuZ2VzIGluIHRoZSBT
a2lhCisgICAgICAgIHZlcnNpb24gaW4gdGhlIGxhc3QgdHdvIGNoYWdlIHNldHMuICBVcGRhdGUg
Q2Fpcm8ncyBQTkcvSlBFRy9HSUYKKyAgICAgICAgZGVjb2RlcnMgdG8gdXNlIHRoZSBBUElzIGFz
IHdlbGwuICBBbGwgdGhlIENhaXJvIGltYWdlIGRlY29kZXIgY2hhbmdlcworICAgICAgICBhcmUg
ZGlyZWN0IGNvcGllcyBvZiB0aGUgU2tpYSB2ZXJzaW9ucyBleGNlcHQgSW1hZ2VEZWNvZGVyLmgs
IHdoaWNoIGlzCisgICAgICAgIG1vZGlmaWVkIGluIHRoZSBuZWNlc3Nhcnkgd2F5cyBmb3IgdGhl
IGRpZmZlcmVuY2VzIGJldHdlZW4gQ2Fpcm8gYW5kCisgICAgICAgIFNraWEuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOiBVc2UgbmV3IFJHQkEz
MkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIEFQSS4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDogU3luYyB1cCB3aXRoIFNraWEgdmVyc2lvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEz
MkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjph
c05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFzQWxw
aGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpkaXNwb3NhbE1ldGhvZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0RGlzcG9zYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpzZXRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6d2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpnZXRBZGRyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDogU3luYyB1cCB3aXRoIFNraWEgdmVyc2lvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6IFN5
bmMgdXAgd2l0aCBTa2lhIHZlcnNpb24uCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOiBTeW5jIHVwIHdpdGggU2tpYSB2ZXJzaW9uLgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmg6IEFkZCB2YXJpb3Vz
IHR5cGVkZWZzIG9yIGhlbHBlciBmdW5jdGlvbnMgdG8gbWluaW1pemUgZGlmZmVyZW5jZXMgd2l0
aCBDYWlybyB2ZXJzaW9uLiAgUmVvcmRlciBmdW5jdGlvbnMgc2xpZ2h0bHkgdG8gbWF0Y2ggcmVv
cmRlcmluZyBvZiBDYWlybydzIG1faGFzQWxwaGEgdmFyaWFibGUsIHdoaWNoIEkgbW92ZWQgdG8g
aW5jcmVhc2UgcmVhZGFiaWxpdHkuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Oik6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlSb3dOVGltZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJC
dWZmZXI6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6ZGlzcG9z
YWxNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldERpc3Bvc2FsTWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OndpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogQWRkICNpbmNsdWRlIG5lZWRlZCBieSBK
UEVHIGhlYWRlcnMgb24gc29tZSBwbGF0Zm9ybXMsIHBsdXMgY29tbWVudC4KKwogMjAwOS0wNi0w
MyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
U291cmNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkzLDExICsxOTMsNyBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRl
RnJhbWVBCiAgICAgaWYgKCFzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25lZCBj
aGFyKilidWZmZXItPmJ5dGVzKCkuZGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lkdGgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lk
dGgoKSo0KTsKKyAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CiB9CiAKIGJv
b2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShy
ZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDIwICszMCwxOCBAQAogI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQ+IFJHQkEz
MkFycmF5OwotCiAgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0aGUg
ZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMiBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0
IGFsbAogICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uICBGcmFtZXMg
YXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5IGJlaW5nIGhhbmRlZCB0aGlzIGJ1
ZmZlci4KICAgICBjbGFzcyBSR0JBMzJCdWZmZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51
bSBGcmFtZVN0YXR1cyB7IEZyYW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9
OwotCiAgICAgICAgIGVudW0gRnJhbWVEaXNwb3NhbE1ldGhvZCB7CiAgICAgICAgICAgICAvLyBJ
ZiB5b3UgY2hhbmdlIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFrZSBzdXJlIHlvdSBh
dWRpdCBhbGwKICAgICAgICAgICAgIC8vIHVzZXJzLCBhcyBzb21lIHVzZXJzIG1heSBjYXN0IHJh
dyB2YWx1ZXMgdG8vZnJvbSB0aGVzZSBjb25zdGFudHMuCkBAIC01MiwyMiArNTAsMzcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAg
Ly8gQ2xlYXIgZnJhbWUgdG8gdHJhbnNwYXJlbnQKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3Jp
dGVQcmV2aW91cywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRl
bnRzCiAgICAgICAgIH07CisgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAg
ICAgICAgIFJHQkEzMkJ1ZmZlcigpCi0gICAgICAgICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkp
CisgICAgICAgICAgICA6IG1faGFzQWxwaGEoZmFsc2UpCisgICAgICAgICAgICAsIG1fc3RhdHVz
KEZyYW1lRW1wdHkpCiAgICAgICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgICAgICwg
bV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICAgICAgICAgLCBtX2hh
c0FscGhhKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0gCiAKLSAgICAgICAgdm9pZCBjbGVh
cigpIHsKLSAgICAgICAgICBtX2J5dGVzLmNsZWFyKCk7Ci0gICAgICAgICAgbV9zdGF0dXMgPSBG
cmFtZUVtcHR5OwotICAgICAgICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJz
IGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzCi0gICAgICAgICAgLy8gdGhpcyB0
byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCi0gICAgICAg
ICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVl
ZCB0byByZWFkIG90aGVyCi0gICAgICAgICAgLy8gbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUg
bGF0ZXIuCisgICAgICAgIC8vIFRoaXMgZXhpc3RzIGJlY2F1c2UgSW1hZ2VEZWNvZGVyIGtlZXBz
IGEgVmVjdG9yPFJHQkEzMkJ1ZmZlcj4sIGFuZAorICAgICAgICAvLyBWZWN0b3IgcmVxdWlyZXMg
dGhpcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUkdCQTMyQnVmZmVyKGNvbnN0IFJHQkEzMkJ1ZmZl
ciYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9wZXJhdG9yPShvdGhlcik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
eXRlcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OworICAgICAg
ICAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKCkKKyAgICAgICAgICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0
bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgICAgICAgICAgLy8gaW5pdEZy
YW1lQnVmZmVyKCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCisg
ICAgICAgICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgemVyb0ZpbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J5dGVzLmZpbGwoMCk7CisgICAgICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRo
ZSBpbWFnZSBkYXRhIGluIHxvdGhlcnwsIHNvIHRoZQpAQCAtNzgsMTEgKzkxLDI1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIG1f
Ynl0ZXMgPSBvdGhlci5tX2J5dGVzOwotICAgICAgICAgICAgbV9oYXNBbHBoYSA9IG90aGVyLm1f
aGFzQWxwaGE7CisgICAgICAgICAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnN0IFJHQkEzMkFycmF5JiBieXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXM7IH0KLSAgICAgICAgUkdCQTMyQXJyYXkmIGJ5dGVzKCkgeyByZXR1cm4gbV9i
eXRlczsgfQorICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvcGllcyBbKHN0YXJ0WCwgc3RhcnRZ
KSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZSBzYW1lCisgICAgICAgIC8vIFgtY29vcmRpbmF0ZXMg
b24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZyBlbmRZLgorICAg
ICAgICAvLworICAgICAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNhbml0eS1j
aGVjayBpdHMgYXJndW1lbnRzISAgQ2FsbGVycworICAgICAgICAvLyBNVVNUIG5vdCBwYXNzIGlu
dmFsaWQgdmFsdWVzIG9yIHRoaXMgd2lsbCBjb3JydXB0IG1lbW9yeS4KKyAgICAgICAgdm9pZCBj
b3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhcnRZ
IDwgaGVpZ2h0KCkpOworICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOworICAg
ICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBp
eGVsRGF0YSk7CisgICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9
IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOworICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBz
dGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCisgICAgICAgICAgICAgICAgbWVtY3B5
KGdldEFkZHIoc3RhcnRYLCBlbmRZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscyBhcmUgd3JpdHRl
bi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgogICAgICAgICAvLyBzdWNjZXNzLCBmYWxzZSBpZiB0aGUg
bWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCkBAIC05MSwzMSArMTE4LDc3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBm
b3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZQogICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHNp
emUgd2FzIHRvbyBiaWcuLi4KICAgICAgICAgICAgIG1fYnl0ZXMucmVzaXplKHdpZHRoICogaGVp
Z2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CiAKLSAg
ICAgICAgICAgIC8vIENsZWFyIHRoZSBpbWFnZS4KLSAgICAgICAgICAgIG1fYnl0ZXMuZmlsbCgw
KTsKLSAgICAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICAgICAgLy8gWmVybyB0
aGUgaW1hZ2UuCisgICAgICAgICAgICB6ZXJvRmlsbCgpOwogCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAgICAgICAgLy8gdG8g
dGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBv
d25lZCBieQorICAgICAgICAvLyB0aGUgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0
YTo6Y2xlYXIoKS4KKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+KAorICAgICAgICAgICAgICAgICAgICBtX2J5
dGVzLmRhdGEoKSkpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwKKyAg
ICAgICAgICAgICAgICB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KICAg
ICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAg
ICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogICAg
ICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAg
ICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQWxwaGE7IH0KIAorICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEp
IHsgbV9oYXNBbHBoYSA9IGFscGhhOyB9CiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRS
ZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0
dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXRE
aXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0
aG9kID0gbWV0aG9kOyB9Ci0gICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkgeyBt
X2hhc0FscGhhID0gYWxwaGE7IH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBzZXRSR0JBKHVuc2ln
bmVkJiBwb3MsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICB7CisgICAgICAgICAg
ICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIsIGEpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICAvLyBJbml0aWFsaXplIHdpdGggYW5vdGhlciBidWZmZXIuICBUaGlz
IGZ1bmN0aW9uIGRvZXNuJ3QgY3JlYXRlIGEgbmV3IGNvcHkKKyAgICAgICAgLy8gb2YgdGhlIGlt
YWdlIGRhdGEsIGl0IG9ubHkgaW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZXhpc3Rpbmcg
Yml0bWFwLgorICAgICAgICAvLworICAgICAgICAvLyBOb3JtYWwgY2FsbGVycyBzaG91bGQgbm90
IGdlbmVyYWxseSBiZSB1c2luZyB0aGlzIGZ1bmN0aW9uLiAgSWYgeW91IHdhbnQKKyAgICAgICAg
Ly8gdG8gY3JlYXRlIGEgY29weSBvbiB3aGljaCB5b3UgY2FuIG1vZGlmeSB0aGUgaW1hZ2UgZGF0
YSBpbmRlcGVuZGVudGx5LAorICAgICAgICAvLyB1c2UgY29weUJpdG1hcERhdGEoKSBpbnN0ZWFk
LgorICAgICAgICBSR0JBMzJCdWZmZXImIG9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90
aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgICAgICAgICBtX2J5dGVzID0gb3RoZXIubV9i
eXRlczsKKyAgICAgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgICAgIHNl
dEhhc0FscGhhKG90aGVyLmhhc0FscGhhKCkpOworICAgICAgICAgICAgc2V0UmVjdChvdGhlci5y
ZWN0KCkpOworICAgICAgICAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKKyAgICAgICAg
ICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgICAgICAgICAgc2V0RGlzcG9z
YWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLndpZHRoKCk7IH0KKyAgICAgICAgaW5saW5lIGludCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBn
ZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYnl0
ZXMuZGF0YSgpICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgIH0KKworICAgICAgICBpbmxp
bmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywg
dW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2Ugc3Rv
cmUgdGhpcyBkYXRhIHByZS1tdWx0aXBsaWVkLgogICAgICAgICAgICAgaWYgKGEgPT0gMCkKLSAg
ICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7CkBAIC0xMjMsMTkgKzE5
NiwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgIGcgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZyAqIGFscGhhUGVyY2VudCk7CiAgICAgICAgICAgICAgICAgICAg
IGIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYiAqIGFscGhhUGVyY2VudCk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHBvcyA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwg
OCB8IGIpOworICAgICAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8
PCA4IHwgYik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFJHQkEzMkFycmF5IG1fYnl0ZXM7Ci0gICAgICAgIEludFJlY3QgbV9yZWN0OyAgICAvLyBU
aGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUgb3ZlcmFs
bCBidWZmZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlz
IGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRo
YW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9i
eXRlczsKKyAgICAgICAgSW50U2l6ZSBtX3NpemU7ICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBi
dWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHNhbWUgYXMgSW1hZ2VEZWNvZGVyOjptX3NpemUuCisgICAgICAgIGJvb2wgbV9oYXNBbHBo
YTsgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhbnkgb2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVy
IGhhdmUgdHJhbnNwYXJlbmN5LgorICAgICAgICBJbnRSZWN0IG1fcmVjdDsgICAgICAgLy8gVGhl
IHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFtZSB3aXRoaW4gdGhlIG92ZXJhbGwg
YnVmZmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGFsd2F5
cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hvc2Ugb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxl
ciB0aGFuIHRoZSBvdmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3Rh
dHVzOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGlzIGZyYW1lIGlzIGNvbXBsZXRlbHkgZmluaXNoZWQg
ZGVjb2RpbmcuCi0gICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8vIFRoZSBhbmltYXRpb24g
ZGVsYXkuCi0gICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsgLy8g
V2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBu
ZXh0IGZyYW1lLgotICAgICAgICBib29sIG1faGFzQWxwaGE7IC8vIFdoZXRoZXIgb3Igbm90IGFu
eSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBidWZmZXIgaGF2ZSB0cmFuc3BhcmVuY3kuCisgICAgICAg
IHVuc2lnbmVkIG1fZHVyYXRpb247ICAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgorICAgICAgICBG
cmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hlbiBpbml0
aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCiAgICAgfTsKIAogICAgIC8vIFRoZSBJbWFnZURlY29k
ZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGltYWdlIGZvcm1h
dCBkZWNvZGVycwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyMSwxMCArMzIxLDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBi
dWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCiAgICAgICAgICAgICAgIGJ1ZmZlci0+
Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpOwogICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
cHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkgewotICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQqIGNvbnN0IGN1cnJlbnRSb3cgPQotICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCkgKyAoeSAqIHNpemUoKS53aWR0aCgpKTsKICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7IHggPCBwcmV2UmVjdC5yaWdodCgp
OyArK3gpCi0gICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKCooY3VycmVudFJv
dyArIHgpLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJH
QkEoeCwgeSwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYg
KChwcmV2UmVjdC53aWR0aCgpID4gMCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkpCiAgICAg
ICAgICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwpAQCAtMzQxLDQ3ICszMzks
NDMgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogfQogCiB2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3dCdWZm
ZXIsICAgLy8gUG9pbnRlciB0byBzaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZlcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBy
b3dFbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgcm93
TnVtYmVyLCAgLy8gVGhlIHJvdyBpbmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCAgLy8gSG93IG1hbnkgdGltZXMgdG8gcmVwZWF0
IHRoZSByb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
b3dOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
cmVwZWF0Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3
cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlm
IG5lY2Vzc2FyeS4KLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtmcmFtZUluZGV4XTsKLSAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6
OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAvLyBUaGUgcGl4ZWwgZGF0YSBhbmQgY29vcmRpbmF0ZXMgc3VwcGxpZWQgdG8g
dXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSdzCisgICAgLy8gb3JpZ2luIHdpdGhpbiB0aGUg
ZW50aXJlIGltYWdlIHNpemUsIGkuZS4KKyAgICAvLyAobV9yZWFkZXItPmZyYW1lWE9mZnNldCgp
LCBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkpLgorICAgIGludCB4ID0gbV9yZWFkZXItPmZyYW1l
WE9mZnNldCgpOworICAgIGNvbnN0IGludCB5ID0gbV9yZWFkZXItPmZyYW1lWU9mZnNldCgpICsg
cm93TnVtYmVyOwogCi0gICAgLy8gRG8gbm90aGluZyBmb3IgYm9ndXMgZGF0YS4KLSAgICBpZiAo
cm93QnVmZmVyID09IDAgfHwgc3RhdGljX2Nhc3Q8aW50PihtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0
KCkgKyByb3dOdW1iZXIpID49IHNpemUoKS5oZWlnaHQoKSkKKyAgICAvLyBTYW5pdHktY2hlY2sg
dGhlIGFyZ3VtZW50cy4KKyAgICBpZiAoKHJvd0J1ZmZlciA9PSAwKSB8fCAoeSA+PSBzaXplKCku
aGVpZ2h0KCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBHZXQgdGhlIGNvbG9ybWFwLgog
ICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKICAgICB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsK
ICAgICBtX3JlYWRlci0+Z2V0Q29sb3JNYXAoY29sb3JNYXAsIGNvbG9yTWFwU2l6ZSk7CiAgICAg
aWYgKCFjb2xvck1hcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhlIGJ1ZmZlcnMgdGhh
dCB3ZSBkcmF3IGFyZSB0aGUgZW50aXJlIGltYWdlJ3Mgd2lkdGggYW5kIGhlaWdodCwgc28gYSBm
aW5hbCBvdXRwdXQgZnJhbWUgaXMKLSAgICAvLyB3aWR0aCAqIGhlaWdodCBSR0JBMzIgdmFsdWVz
IGluIHNpemUuCi0gICAgLy8KLSAgICAvLyBBIHNpbmdsZSBHSUYgZnJhbWUsIGhvd2V2ZXIsIGNh
biBiZSBzbWFsbGVyIHRoYW4gdGhlIGVudGlyZSBpbWFnZSwgaS5lLiwgaXQgY2FuIHJlcHJlc2Vu
dCBzb21lIHN1Yi1yZWN0YW5nbGUKLSAgICAvLyB3aXRoaW4gdGhlIG92ZXJhbGwgaW1hZ2UuICBU
aGUgcm93cyB3ZSBhcmUgZGVjb2RpbmcgYXJlIHdpdGhpbiB0aGlzCi0gICAgLy8gc3ViLXJlY3Rh
bmdsZS4gIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgR0lGIGZyYW1lJ3Mgc3ViLXJlY3RhbmdsZSBp
cyAoeCx5LHcsaCkgdGhlbiByb3cgMCBpcyByZWFsbHkgcm93Ci0gICAgLy8geSwgYW5kIGVhY2gg
cm93IGdvZXMgZnJvbSB4IHRvIHgrdy4KLSAgICB1bnNpZ25lZCBkc3RQb3MgPSAobV9yZWFkZXIt
PmZyYW1lWU9mZnNldCgpICsgcm93TnVtYmVyKSAqIHNpemUoKS53aWR0aCgpICsgbV9yZWFkZXIt
PmZyYW1lWE9mZnNldCgpOwotICAgIHVuc2lnbmVkKiBkc3QgPSBidWZmZXIuYnl0ZXMoKS5kYXRh
KCkgKyBkc3RQb3M7Ci0gICAgdW5zaWduZWQqIGRzdEVuZCA9IGRzdCArIHNpemUoKS53aWR0aCgp
IC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpOwotICAgIHVuc2lnbmVkKiBjdXJyRHN0ID0gZHN0
OwotICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnRSb3dCeXRlID0gcm93QnVmZmVyOwotCi0gICAg
d2hpbGUgKGN1cnJlbnRSb3dCeXRlICE9IHJvd0VuZCAmJiBjdXJyRHN0IDwgZHN0RW5kKSB7Ci0g
ICAgICAgIGlmICgoIW1fcmVhZGVyLT5pc1RyYW5zcGFyZW50KCkgfHwgKmN1cnJlbnRSb3dCeXRl
ICE9IG1fcmVhZGVyLT50cmFuc3BhcmVudFBpeGVsKCkpICYmICpjdXJyZW50Um93Qnl0ZSA8IGNv
bG9yTWFwU2l6ZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY29sb3JJbmRleCA9ICpjdXJyZW50
Um93Qnl0ZSAqIDM7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBjb2xvck1hcFtjb2xvcklu
ZGV4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gY29sb3JNYXBbY29sb3JJbmRleCAr
IDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IGNvbG9yTWFwW2NvbG9ySW5kZXggKyAy
XTsKLSAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgqY3VyckRzdCwgcmVkLCBncmVl
biwgYmx1ZSwgMjU1KTsKKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3Nhcnku
CisgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRl
eF07CisgICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5
KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIFRoZXJl
IGlzIG5vIGd1YXJhbnRlZSB0aGF0CisgICAgLy8gKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNp
emUoKS53aWR0aCgpIC0gbV9yZWFkZXItPmZyYW1lWE9mZnNldCgpKSwgc28KKyAgICAvLyB3ZSBt
dXN0IGVuc3VyZSB3ZSBkb24ndCBydW4gb2ZmIHRoZSBlbmQgb2YgZWl0aGVyIHRoZSBzb3VyY2Ug
ZGF0YSBvciB0aGUKKyAgICAvLyByb3cncyBYLWNvb3JkaW5hdGVzLgorICAgIGZvciAodW5zaWdu
ZWQgY2hhciogc291cmNlQWRkciA9IHJvd0J1ZmZlcjsgKHNvdXJjZUFkZHIgIT0gcm93RW5kKSAm
JiAoeCA8IHNpemUoKS53aWR0aCgpKTsgKytzb3VyY2VBZGRyLCArK3gpIHsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICpzb3VyY2VBZGRyOworICAgICAgICBpZiAo
KCFtX3JlYWRlci0+aXNUcmFuc3BhcmVudCgpIHx8IChzb3VyY2VWYWx1ZSAhPSBtX3JlYWRlci0+
dHJhbnNwYXJlbnRQaXhlbCgpKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXplKSkgewor
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHNvdXJjZVZhbHVlKSAqIDM7CisgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4LCB5LCBjb2xv
ck1hcFtjb2xvckluZGV4XSwgY29sb3JNYXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xv
ckluZGV4ICsgMl0sIDI1NSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2N1cnJl
bnRCdWZmZXJTYXdBbHBoYSA9IHRydWU7CiAgICAgICAgICAgICAvLyBXZSBtYXkgb3IgbWF5IG5v
dCBuZWVkIHRvIHdyaXRlIHRyYW5zcGFyZW50IHBpeGVscyB0byB0aGUgYnVmZmVyLgpAQCAtMzky
LDI2ICszODYsMTMgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVucwog
ICAgICAgICAgICAgLy8gYmV5b25kIHRoZSBmaXJzdCwgb3IgdGhlIGluaXRpYWwgcGFzc2VzIHdp
bGwgInNob3cgdGhyb3VnaCIgdGhlCiAgICAgICAgICAgICAvLyBsYXRlciBvbmVzLgogICAgICAg
ICAgICAgaWYgKHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpCi0gICAgICAgICAgICAgICAgUkdCQTMy
QnVmZmVyOjpzZXRSR0JBKCpjdXJyRHN0LCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBi
dWZmZXIuc2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKICAgICAgICAgfQotICAgICAgICBjdXJy
RHN0Kys7Ci0gICAgICAgIGN1cnJlbnRSb3dCeXRlKys7CiAgICAgfQogCi0gICAgaWYgKHJlcGVh
dENvdW50ID4gMSkgewotICAgICAgICAvLyBDb3B5IHRoZSByb3cgfHJlcGVhdENvdW50fC0xIHRp
bWVzLgotICAgICAgICB1bnNpZ25lZCBudW0gPSBjdXJyRHN0IC0gZHN0OwotICAgICAgICB1bnNp
Z25lZCBkYXRhU2l6ZSA9IG51bSAqIHNpemVvZih1bnNpZ25lZCk7Ci0gICAgICAgIHVuc2lnbmVk
IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgIHVuc2lnbmVkKiBlbmQgPSBidWZmZXIu
Ynl0ZXMoKS5kYXRhKCkgKyB3aWR0aCAqIHNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgY3VyckRz
dCA9IGRzdCArIHdpZHRoOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVwZWF0
Q291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGN1cnJEc3QgKyBudW0gPiBlbmQpIC8vIFBy
b3RlY3QgYWdhaW5zdCBhIGJ1ZmZlciBvdmVycnVuIGZyb20gYSBib2d1cyByZXBlYXRDb3VudC4K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1lbWNweShjdXJyRHN0LCBkc3Qs
IGRhdGFTaXplKTsKLSAgICAgICAgICAgIGN1cnJEc3QgKz0gd2lkdGg7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVlZCBi
ZS4KKyAgICBpZiAocmVwZWF0Q291bnQgPiAxKQorICAgICAgICBidWZmZXIuY29weVJvd05UaW1l
cyhtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIHgsIHksIHN0ZDo6bWluKHkgKyBzdGF0aWNfY2Fz
dDxpbnQ+KHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSk7CiB9CiAKIHZvaWQgR0lGSW1h
Z2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZy
YW1lRHVyYXRpb24sIFJHQkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1l
dGhvZCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gIC8vIE5lZWRlZCBieSBqcGVnbGliLmggZm9yIEZJ
TEUuCiAKIGV4dGVybiAiQyIgewogI2luY2x1ZGUgImpwZWdsaWIuaCIKQEAgLTQ3NSw4ICs0NzUs
NiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAganBlZ19k
ZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7CiAgICAgSlNBTVBBUlJB
WSBzYW1wbGVzID0gbV9yZWFkZXItPnNhbXBsZXMoKTsKIAotICAgIHVuc2lnbmVkKiBkc3QgPSBi
dWZmZXIuYnl0ZXMoKS5kYXRhKCkgKyBpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKiBzaXplKCkud2lk
dGgoKTsKLSAgIAogICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZvLT5vdXRw
dXRfaGVpZ2h0KSB7CiAgICAgICAgIC8qIFJlcXVlc3Qgb25lIHNjYW5saW5lLiAgUmV0dXJucyAw
IG9yIDEgc2NhbmxpbmVzLiAqLwogICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhpbmZv
LCBzYW1wbGVzLCAxKSAhPSAxKQpAQCAtNDg2LDcgKzQ4NCw5IEBAIGJvb2wgSlBFR0ltYWdlRGVj
b2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHIgPSAqajErKzsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGcgPSAqajErKzsKICAgICAgICAgICAgIHVuc2lnbmVkIGIg
PSAqajErKzsKLSAgICAgICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgqZHN0KyssIHIsIGcs
IGIsIDB4RkYpOworICAgICAgICAgICAgLy8gcmVhZF9zY2FubGluZXMgaGFzIGluY3JlYXNlZCB0
aGUgc2NhbmxpbmUgY291bnRlciwgc28gd2UKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IG1lYW4g
dGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIGluZm8tPm91
dHB1dF9zY2FubGluZSAtIDEsIHIsIGcsIGIsIDB4RkYpOwogICAgICAgICB9CiAgICAgfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NjIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgwLDE0ICszODAsMTMgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNp
ZwogCiAgICAgLy8gQ29weSB0aGUgZGF0YSBpbnRvIG91ciBidWZmZXIuCiAgICAgaW50IHdpZHRo
ID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgdW5zaWduZWQqIGRzdCA9IGJ1ZmZlci5ieXRlcygpLmRh
dGEoKSArIHJvd0luZGV4ICogd2lkdGg7CiAgICAgYm9vbCBzYXdBbHBoYSA9IGZhbHNlOwogICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewogICAgICAgICB1bnNpZ25lZCByZWQg
PSAqcm93Kys7CiAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKnJvdysrOwogICAgICAgICB1bnNp
Z25lZCBibHVlID0gKnJvdysrOwogICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IChoYXNBbHBoYSA/
ICpyb3crKyA6IDI1NSk7Ci0gICAgICAgIFJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSgqZHN0KyssIHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgcm93SW5k
ZXgsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICAgICAgaWYgKCFzYXdBbHBoYSAmJiBh
bHBoYSA8IDI1NSkgewogICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOwogICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQ2MjApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFJHQkEzMkJ1ZmZlciB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIEZyYW1lU3RhdHVz
IHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07Ci0KICAgICAgICAg
ZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKICAgICAgICAgICAgIC8vIElmIHlvdSBjaGFuZ2Ug
dGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZXNlLCBtYWtlIHN1cmUgeW91IGF1ZGl0IGFsbAogICAg
ICAgICAgICAgLy8gdXNlcnMsIGFzIHNvbWUgdXNlcnMgbWF5IGNhc3QgcmF3IHZhbHVlcyB0by9m
cm9tIHRoZXNlIGNvbnN0YW50cy4KQEAgLTU0LDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IsICAgLy8gQ2xlYXIgZnJhbWUg
dG8gdHJhbnNwYXJlbnQKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cywgIC8v
IENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCiAgICAgICAgIH07
CisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgUGl4ZWxEYXRhOwogCiAgICAgICAgIFJHQkEzMkJ1
ZmZlcigpCiAgICAgICAgICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkpCkBAIC02NCwzNyArNjQs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
ZG9lc24ndCBjcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgaXQgb25seQogICAg
ICAgICAvLyBpbmNyZWFzZXMgdGhlIHJlZiBjb3VudCBvZiB0aGUgZXhpc3RpbmcgYml0bWFwLgor
ICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGV4aXN0cyBiZWNhdXNlIEltYWdlRGVjb2RlciBr
ZWVwcyBhIFZlY3RvcjxSR0JBMzJCdWZmZXI+LCBhbmQKKyAgICAgICAgLy8gVmVjdG9yIHJlcXVp
cmVzIHRoaXMgY29uc3RydWN0b3IuCiAgICAgICAgIFJHQkEzMkJ1ZmZlcihjb25zdCBSR0JBMzJC
dWZmZXImIG90aGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBvcGVyYXRvcj0ob3RoZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgflJHQkEzMkJ1ZmZlcigpCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIEluaXRpYWxpemUgd2l0aCBhbm90aGVyIGJ1ZmZlci4gIFRoaXMgZnVu
Y3Rpb24gZG9lc24ndCBjcmVhdGUgYSBuZXcgY29weQotICAgICAgICAvLyBvZiB0aGUgaW1hZ2Ug
ZGF0YSwgaXQgb25seSBpbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBleGlzdGluZyBiaXRt
YXAuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vcm1hbCBjYWxsZXJzIHNob3VsZCBub3QgZ2Vu
ZXJhbGx5IGJlIHVzaW5nIHRoaXMgZnVuY3Rpb24uICBJZiB5b3Ugd2FudAotICAgICAgICAvLyB0
byBjcmVhdGUgYSBjb3B5IG9uIHdoaWNoIHlvdSBjYW4gbW9kaWZ5IHRoZSBpbWFnZSBkYXRhIGlu
ZGVwZW5kZW50bHksCi0gICAgICAgIC8vIHVzZSBjb3B5Qml0bWFwRGF0YSgpIGluc3RlYWQuCi0g
ICAgICAgIFJHQkEzMkJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICAgICAgICAgIG1fYml0bWFwID0gb3RoZXIubV9iaXRt
YXA7Ci0gICAgICAgICAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdlIHdpbGwg
YmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQotICAgICAgICAgICAgLy8gYml0bWFwIHRocm91
Z2hvdXQgdGhpcyBvYmplY3QncyBsaWZldGltZS4KLSAgICAgICAgICAgIG1fYml0bWFwLmxvY2tQ
aXhlbHMoKTsKLSAgICAgICAgICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKLSAgICAgICAgICAg
IHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7Ci0gICAgICAgICAgICBzZXREdXJhdGlvbihvdGhl
ci5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bv
c2FsTWV0aG9kKCkpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KICAg
ICAgICAgdm9pZCBjbGVhcigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYml0bWFwLnJlc2V0
KCk7CkBAIC0xMjksMTQgKzEwNiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8v
IE1VU1Qgbm90IHBhc3MgaW52YWxpZCB2YWx1ZXMgb3IgdGhpcyB3aWxsIGNvcnJ1cHQgbWVtb3J5
LgogICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBz
dGFydFksIGludCBlbmRZKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRYIDwg
bV9iaXRtYXAud2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSBtX2JpdG1hcC53
aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBtX2JpdG1hcC5oZWlnaHQoKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWSA8PSBtX2JpdG1hcC5oZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0YXJ0WCkgKiBzaXplb2YodWludDMy
X3QpOwotICAgICAgICAgICAgY29uc3QgdWludDMyX3QqIGNvbnN0IHN0YXJ0QWRkciA9IG1fYml0
bWFwLmdldEFkZHIzMihzdGFydFgsIHN0YXJ0WSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhcnRY
IDwgd2lkdGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7CisgICAgICAgICAgICBBU1NFUlQoZW5k
WSA8PSBoZWlnaHQoKSk7CisgICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAt
IHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKKyAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0
YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7CiAgICAgICAgICAg
ICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAg
ICAgICAgICAgICAgICBtZW1jcHkobV9iaXRtYXAuZ2V0QWRkcjMyKHN0YXJ0WCwgZGVzdFkpLCBz
dGFydEFkZHIsIHJvd0J5dGVzKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFy
dFgsIHN0YXJ0WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMgYXJlIHdyaXR0ZW4uIFdpbGwgcmV0
dXJuIHRydWUgb24KQEAgLTE0NSw3ICsxMjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKICAgICAgICAgICAgIC8vIG90aGVyd2lzZS4KLSAg
ICAgICAgICAgIEFTU0VSVChtX2JpdG1hcC53aWR0aCgpID09IDAgJiYgbV9iaXRtYXAuaGVpZ2h0
KCkgPT0gMCk7CisgICAgICAgICAgICBBU1NFUlQod2lkdGgoKSA9PSAwICYmIGhlaWdodCgpID09
IDApOwogICAgICAgICAgICAgbV9iaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZywgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBpZiAoIW1fYml0bWFwLmFsbG9j
UGl4ZWxzKCkpIHsKICAgICAgICAgICAgICAgICAvLyBBbGxvY2F0aW9uIGZhaWx1cmUsIG1heWJl
IHRoZSBiaXRtYXAgd2FzIHRvbyBiaWcuCkBAIC0xNjIsMzIgKzEzOSw2NiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZy
YW1lQXRJbmRleCgpLiAgUmV0dXJucyBhIHBvaW50ZXIKICAgICAgICAgLy8gdG8gdGhlIHVuZGVy
bHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieQog
ICAgICAgICAvLyB0aGUgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0YTo6Y2xlYXIo
KS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpCisgICAgICAgIE5h
dGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gbmV3IE5hdGl2ZUltYWdlU2tpYShtX2JpdG1hcCk7CiAgICAgICAgIH0KIAor
ICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gIW1fYml0bWFwLmlzT3BhcXVl
KCk7IH0KICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1
czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KLSAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNv
bnN0IHsgcmV0dXJuICFtX2JpdG1hcC5pc09wYXF1ZSgpOyB9CiAKKyAgICAgICAgdm9pZCBzZXRI
YXNBbHBoYShib29sIGFscGhhKSB7IG1fYml0bWFwLnNldElzT3BhcXVlKCFhbHBoYSk7IH0KICAg
ICAgICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZWN0ID0gcjsgfQogICAg
ICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzKQogICAgICAgICB7CisgICAgICAgICAg
ICBtX3N0YXR1cyA9IHM7CiAgICAgICAgICAgICBpZiAocyA9PSBGcmFtZUNvbXBsZXRlKQogICAg
ICAgICAgICAgICAgIG1fYml0bWFwLnNldERhdGFDb21wbGV0ZSgpOyAgLy8gVGVsbCB0aGUgYml0
bWFwIGl0J3MgZG9uZS4KLSAgICAgICAgICAgIG1fc3RhdHVzID0gczsKICAgICAgICAgfQogICAg
ICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBk
dXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxN
ZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KLSAgICAgICAgdm9p
ZCBzZXRIYXNBbHBoYShib29sIGFscGhhKSB7IG1fYml0bWFwLnNldElzT3BhcXVlKCFhbHBoYSk7
IH0KIAotICAgICAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1aW50OF90IHIsIHVpbnQ4
X3QgZywgdWludDhfdCBiLCB1aW50OF90IGEpCisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEo
aW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25l
ZCBhKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcs
IGIsIGEpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBJbml0aWFsaXpl
IHdpdGggYW5vdGhlciBidWZmZXIuICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgY3JlYXRlIGEgbmV3
IGNvcHkKKyAgICAgICAgLy8gb2YgdGhlIGltYWdlIGRhdGEsIGl0IG9ubHkgaW5jcmVhc2VzIHRo
ZSByZWZjb3VudCBvZiB0aGUgZXhpc3RpbmcgYml0bWFwLgorICAgICAgICAvLworICAgICAgICAv
LyBOb3JtYWwgY2FsbGVycyBzaG91bGQgbm90IGdlbmVyYWxseSBiZSB1c2luZyB0aGlzIGZ1bmN0
aW9uLiAgSWYgeW91IHdhbnQKKyAgICAgICAgLy8gdG8gY3JlYXRlIGEgY29weSBvbiB3aGljaCB5
b3UgY2FuIG1vZGlmeSB0aGUgaW1hZ2UgZGF0YSBpbmRlcGVuZGVudGx5LAorICAgICAgICAvLyB1
c2UgY29weUJpdG1hcERhdGEoKSBpbnN0ZWFkLgorICAgICAgICBSR0JBMzJCdWZmZXImIG9wZXJh
dG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICB1
aW50MzJfdCogY29uc3QgZGVzdCA9IG1fYml0bWFwLmdldEFkZHIzMih4LCB5KTsKKyAgICAgICAg
ICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAK
KyAgICAgICAgICAgIG1fYml0bWFwID0gb3RoZXIubV9iaXRtYXA7CisgICAgICAgICAgICAvLyBL
ZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdlIHdpbGwgYmUgd3JpdGluZyBkaXJlY3RseSBp
bnRvIHRoZQorICAgICAgICAgICAgLy8gYml0bWFwIHRocm91Z2hvdXQgdGhpcyBvYmplY3QncyBs
aWZldGltZS4KKyAgICAgICAgICAgIG1fYml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICAgICAgICAg
IHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICAgICAgICAgIHNldFN0YXR1cyhvdGhlci5zdGF0
dXMoKSk7CisgICAgICAgICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKKyAgICAg
ICAgICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOworICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgaW5saW5lIGludCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLndpZHRoKCk7IH0KKyAgICAgICAgaW5saW5lIGlu
dCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcC5oZWlnaHQoKTsgfQorCisgICAgICAg
IGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOworICAgICAgICB9CisKKyAg
ICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIHsKICAgICAgICAgICAg
IC8vIFdlIHN0b3JlIHRoaXMgZGF0YSBwcmUtbXVsdGlwbGllZC4KICAgICAgICAgICAgIGlmIChh
ID09IDApCiAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwpAQCAtMjAyLDE0ICsyMTMsMTQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICBwcml2
YXRlOgogICAgICAgICBOYXRpdmVJbWFnZVNraWEgbV9iaXRtYXA7Ci0gICAgICAgIEludFJlY3Qg
bV9yZWN0OyAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdp
dGhpbiB0aGUgb3ZlcmFsbCBidWZmZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0IGZvciBHSUYg
ZnJhbWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9zZSBvcmlnaW5hbCByZWN0
IHdhcyBzbWFsbGVyIHRoYW4gdGhlIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KKyAgICAgICAgSW50UmVj
dCBtX3JlY3Q7ICAgICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJh
bWUgd2l0aGluIHRoZSBvdmVyYWxsIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQg
Zm9yIEdJRiBmcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9y
aWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgogICAg
ICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBvciBub3QgdGhpcyBmcmFtZSBp
cyBjb21wbGV0ZWx5IGZpbmlzaGVkIGRlY29kaW5nLgotICAgICAgICB1bnNpZ25lZCBtX2R1cmF0
aW9uOyAvLyBUaGUgYW5pbWF0aW9uIGRlbGF5LgotICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9k
IG1fZGlzcG9zYWxNZXRob2Q7IC8vIFdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3
aGVuIGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KKyAgICAgICAgdW5zaWduZWQgbV9kdXJh
dGlvbjsgIC8vIFRoZSBhbmltYXRpb24gZGVsYXkuCisgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRo
b2QgbV9kaXNwb3NhbE1ldGhvZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdo
YXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuIGluaXRpYWxpemluZyB0aGUgbmV4
dCBmcmFtZS4KICAgICB9OwogCiAgICAgLy8gVGhlIEltYWdlRGVjb2RlciBjbGFzcyByZXByZXNl
bnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1hZ2UgZm9ybWF0IGRlY29kZXJzCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQ
RUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDYyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpQRUdJbWFn
ZURlY29kZXIuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAgLy8g
TmVlZGVkIGJ5IGpwZWdsaWIuaCBmb3IgRklMRS4KIAogZXh0ZXJuICJDIiB7CiAjaW5jbHVkZSAi
anBlZ2xpYi5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31217</attachid>
            <date>2009-06-12 15:44:04 -0700</date>
            <delta_ts>2009-06-13 11:22:48 -0700</delta_ts>
            <desc>part eight</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>273336</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDYzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMDktMDYtMTIgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IGVpZ2h0
CisgICAgICAgIFJlcGxhY2UgcGxhY2Vob2xkZXIgQ2Fpcm8gQk1QLCBJQ08sIFhCTSBkZWNvZGVy
cyB3aXRoIHJlYWwgb25lcy4gIFJlbW92ZQorICAgICAgICBhbGwgdGhlIGRlY29kZXJzIGZyb20g
c2tpYS8gc2luY2UgdGhleSBhcmUgbm93IGp1c3QgbWlycm9ycyBvZiB0aGUgQ2Fpcm8KKyAgICAg
ICAgb25lcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlY29kZXIpOiBQYXNzIEludFNpemUoKSB0byBJQ09JbWFn
ZURlY29kZXIoKSBzbyBpdCB3aWxsIGFsd2F5cyBkZWNvZGUgdGhlIGxhcmdlc3QgaWNvbi4gIEVu
YWJsZSBYQk0gZGVjb2Rpbmcgb24gV2luZG93cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VTb3VyY2VXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWNvZGVyKTog
UGFzcyBJbnRTaXplKCkgdG8gSUNPSW1hZ2VEZWNvZGVyKCkgc28gaXQgd2lsbCBhbHdheXMgZGVj
b2RlIHRoZSBsYXJnZXN0IGljb24uCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlRGVjb2Rlci5jcHA6IFJlcGxhY2VkIHdpdGggV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlRGVjb2Rlci5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oOiBSZXBsYWNlZCB3aXRoIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZURlY29kZXIuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VS
ZWFkZXIuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZVJlYWRlci5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvQk1QSW1hZ2VSZWFkZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9p
Y28vSUNPSW1hZ2VEZWNvZGVyLmNwcDogUmVwbGFjZWQgd2l0aCBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3NraWEvSUNPSW1hZ2VEZWNvZGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmg6IFJlcGxhY2VkIHdpdGggV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0lDT0ltYWdlRGVjb2Rlci5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VEZWNvZGVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdl
RGVjb2Rlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvQk1QSW1hZ2VSZWFkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvQk1QSW1hZ2VSZWFkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVjb2Rlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdl
UmVhZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0dJRkltYWdlUmVhZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9JQ09JbWFnZURlY29kZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSUNPSW1hZ2VEZWNvZGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQRUdJ
bWFnZURlY29kZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL1BOR0ltYWdlRGVjb2Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9QTkdJbWFnZURlY29kZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1hCTUltYWdlRGVjb2Rlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29k
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJN
SW1hZ2VEZWNvZGVyLmNwcDogUmVwbGFjZWQgd2l0aCBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmg6IFJlcGxhY2VkIHdpdGggV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1hCTUltYWdlRGVjb2Rlci5oLgorCiAyMDA5LTA2
LTExICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDQ2MzApCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODYyLDYgKzE4NjIsOCBAQCB3
ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlRGVjb2Rlci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZVJlYWRlci5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlUmVhZGVyLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNl
cy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9u
IDQ0NjMwKQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAg
LTg5MSw3ICs4OTEsOCBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVl
CiAgICAgPC9zZXQ+CiAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
Qk1QIj4KLSAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rl
ci5jcHAKKyAgICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIu
Y3BwCisgICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3Bw
CiAgICAgPC9zZXQ+CiAKICAgICA8c2V0IGFwcGVuZD0iMSIgdmFyPSJXRUJDT1JFX1NPVVJDRVNf
SUNPIj4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDQ2MzApCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC02NTc4LDYgKzY1NzgsNjIgQEAKIAkJCQkJCQkvPg0KIAkJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQogCQkJCQk8L0ZpbGU+DQorCQkJCQk8RmlsZQ0KKwkJCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccGxhdGZvcm1caW1hZ2UtZGVjb2RlcnNcYm1wXEJNUEltYWdlUmVhZGVyLmNwcCIN
CisJCQkJCQk+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJ
CQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJLz4N
CisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0K
KwkJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCisJCQkJCQkJPg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCINCisJCQkJCQkJLz4NCisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiIN
CisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQkJCT4NCisJCQkJCQkJPFRv
b2wNCisJCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCS8+DQorCQkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTwvRmlsZT4NCisJCQkJCTxGaWxlDQorCQkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxpbWFnZS1kZWNvZGVyc1xibXBcQk1QSW1hZ2VSZWFk
ZXIuaCINCisJCQkJCQk+DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9
IkRlYnVnfFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJ
Pg0KKwkJCQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJ
CQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24NCisJCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQorCQkJCQkJCT4NCisJCQkJCQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZD
Q3VzdG9tQnVpbGRUb29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFs
fFdpbjMyIg0KKwkJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCQkJPg0KKwkJ
CQkJCQk8VG9vbA0KKwkJCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJCQkJCS8+
DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTwvRmlsZT4NCiAJCQkJPC9GaWx0
ZXI+DQogCQkJCTxGaWx0ZXINCiAJCQkJCU5hbWU9ImljbyINCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAJKHJldmlz
aW9uIDQ0NjMxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJj
ZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEwIEBACiAjaW5jbHVkZSAi
SUNPSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1
ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAKLSNpZiAhUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVyKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgZGF0YSkKQEAgLTc4LDEzICs3NSwxMSBAQCBJbWFnZURlY29kZXIqIGNyZWF0ZURlY29k
ZXIoY29uc3QgVmVjdG9yCiAgICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2Vk
IGJ5IDItYnl0ZSAyLgogICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAw
MCIsIDQpIHx8CiAgICAgICAgICFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwg
NCkpCi0gICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIHJldHVy
biBuZXcgSUNPSW1hZ2VEZWNvZGVyKEludFNpemUoKSk7CiAKLSNpZiAhUExBVEZPUk0oV0lOKQog
ICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCiAgICAgaWYgKGxlbmd0aCA+PSA4
ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApCiAgICAgICAgIHJldHVy
biBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7Ci0jZW5kaWYKIAogICAgIC8vIEdpdmUgdXAuIFdlIGRv
bid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgogICAgIHJldHVybiAwOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU291cmNlU2tpYS5jcHAJ
KHJldmlzaW9uIDQ0NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U291cmNlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5o
IgogI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgotI2luY2x1ZGUgIklDT0ltYWdlRGVjb2Rl
ci5oIgogCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9JbWFnZVNvdXJjZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0ltYWdlU291cmNlV3guY3BwCShyZXZpc2lvbiA0NDYzMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDcgKzgwLDcgQEAgSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVyKGNvbnN0IFNo
YXJlZAogICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUg
Mi4KICAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAiLCA0KSB8fAog
ICAgICAgICAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQpKQotICAgICAg
ICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcigpOworICAgICAgICByZXR1cm4gbmV3IElDT0lt
YWdlRGVjb2RlcihJbnRTaXplKCkpOwogICAgCiAgICAgLy8gWEJNcyByZXF1aXJlIDggYnl0ZXMg
b2YgaW5mby4KICAgICBpZiAobGVuZ3RoID49IDggJiYgc3RybmNtcChjb250ZW50cywgIiNkZWZp
bmUgIiwgOCkgPT0gMCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ2MzApCShmcm9t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZURlY29kZXIuY3Bw
OjQ0NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBOdW1iZXIgb2YgYml0cyBpbiAuQk1QIHVzZWQgdG8gc3RvcmUgdGhl
IGZpbGUgaGVhZGVyIChkb2Vzbid0IG1hdGNoCisvLyAic2l6ZW9mKEJNUEltYWdlRGVjb2Rlcjo6
Qml0bWFwRmlsZUhlYWRlcikiIHNpbmNlIHdlIG9taXQgc29tZSBmaWVsZHMgYW5kCisvLyBkb24n
dCBwYWNrKS4KK3N0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRmlsZUhlYWRlciA9IDE0OworCit2
b2lkIEJNUEltYWdlRGVjb2Rlcjo6ZGVjb2RlSW1hZ2UoU2hhcmVkQnVmZmVyKiBkYXRhKQorewor
ICAgIC8vIFJlYWQgYW5kIHByb2Nlc3MgZmlsZSBoZWFkZXIuCisgICAgaWYgKChtX2RlY29kZWRP
ZmZzZXQgPCBzaXplT2ZGaWxlSGVhZGVyKSAmJiAhcHJvY2Vzc0ZpbGVIZWFkZXIoZGF0YSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIERlY29kZSBCTVAuCisgICAgZGVjb2RlQk1QKGRhdGEp
OworfQorCitib29sIEJNUEltYWdlRGVjb2Rlcjo6cHJvY2Vzc0ZpbGVIZWFkZXIoU2hhcmVkQnVm
ZmVyKiBkYXRhKQoreworICAgIC8vIFJlYWQgZmlsZSBoZWFkZXIuCisgICAgQVNTRVJUKCFtX2Rl
Y29kZWRPZmZzZXQpOworICAgIGlmIChkYXRhLT5zaXplKCkgPCBzaXplT2ZGaWxlSGVhZGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgdWludDE2X3QgZmlsZVR5cGUgPQorICAg
ICAgICAoZGF0YS0+ZGF0YSgpWzBdIDw8IDgpIHwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZGF0YS0+
ZGF0YSgpWzFdKTsKKyAgICBtX2ltZ0RhdGFPZmZzZXQgPSByZWFkVWludDMyKGRhdGEsIDEwKTsK
KyAgICBtX2RlY29kZWRPZmZzZXQgPSBtX2hlYWRlck9mZnNldCA9IHNpemVPZkZpbGVIZWFkZXI7
CisKKyAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGJpdG1hcCBmaWxldHlwZSB3ZSB1bmRlcnN0YW5k
LgorICAgIGVudW0geworICAgICAgICBCTUFQID0gJ0JNJywKKyAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBhZGRpdGlvbmFsIE9TLzIgMi54IGhlYWRlciB2YWx1ZXMgKHNlZQorICAgICAgICAvLyBo
dHRwOi8vd3d3LmZpbGVmb3JtYXQuaW5mby9mb3JtYXQvb3MyYm1wL2VnZmYuaHRtICkgYXJlbid0
IHdpZGVseQorICAgICAgICAvLyBkZWNvZGVkLCBhbmQgYXJlIHVubGlrZWx5IHRvIGJlIGluIG11
Y2ggdXNlLgorICAgICAgICAvKgorICAgICAgICBJQ09OID0gJ0lDJywKKyAgICAgICAgUE9JTlRF
UiA9ICdQVCcsCisgICAgICAgIENPTE9SSUNPTiA9ICdDSScsCisgICAgICAgIENPTE9SUE9JTlRF
UiA9ICdDUCcsCisgICAgICAgIEJJVE1BUEFSUkFZID0gJ0JBJywKKyAgICAgICAgKi8KKyAgICB9
OworICAgIGlmIChmaWxlVHlwZSAhPSBCTUFQKQorICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisK
KyAgICByZXR1cm4gIW1fZmFpbGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gNDQ2MzApCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9CTVBJbWFnZURlY29kZXIuaDo0NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCTVBJbWFnZURlY29kZXJfaAorI2RlZmlu
ZSBCTVBJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiQk1QSW1hZ2VSZWFkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBCTVAgaW1h
Z2UgZm9ybWF0LgorICAgIGNsYXNzIEJNUEltYWdlRGVjb2RlciA6IHB1YmxpYyBCTVBJbWFnZVJl
YWRlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IHsgcmV0dXJuICJibXAiOyB9CisKKyAgICAgICAgLy8gQk1QSW1hZ2VSZWFk
ZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIGRlY29kZUltYWdlKFNoYXJlZEJ1ZmZlciopOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBmaWxlIGhlYWRlciBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAgUmV0dXJucyB0cnVlIGlmCisgICAgICAgIC8vIHRoZSBm
aWxlIGhlYWRlciBjb3VsZCBiZSBkZWNvZGVkLgorICAgICAgICBib29sIHByb2Nlc3NGaWxlSGVh
ZGVyKFNoYXJlZEJ1ZmZlciopOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA0NDYzMCkJKGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVyLmNwcDo0NDYzMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
OCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQk1QSW1hZ2VSZWFkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitCTVBJbWFnZVJlYWRlcjo6Qk1QSW1hZ2VSZWFkZXIoKQorICAgIDogbV9kZWNvZGVkT2Zmc2V0
KDApCisgICAgLCBtX2hlYWRlck9mZnNldCgwKQorICAgICwgbV9pbWdEYXRhT2Zmc2V0KDApCisg
ICAgLCBtX2FuZE1hc2tTdGF0ZShOb25lKQorICAgICwgbV9pc09TMjF4KGZhbHNlKQorICAgICwg
bV9pc09TMjJ4KGZhbHNlKQorICAgICwgbV9pc1RvcERvd24oZmFsc2UpCisgICAgLCBtX25lZWRU
b1Byb2Nlc3NCaXRtYXNrcyhmYWxzZSkKKyAgICAsIG1fbmVlZFRvUHJvY2Vzc0NvbG9yVGFibGUo
ZmFsc2UpCisgICAgLCBtX3RhYmxlU2l6ZUluQnl0ZXMoMCkKKyAgICAsIG1fc2Vlbk5vblplcm9B
bHBoYVBpeGVsKGZhbHNlKQorICAgICwgbV9zZWVuWmVyb0FscGhhUGl4ZWwoZmFsc2UpCit7Cisg
ICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKworICAgIC8vIENsdWUtaW4gZGVjb2Rl
Qk1QKCkgdGhhdCB3ZSBuZWVkIHRvIGRldGVjdCB0aGUgY29ycmVjdCBpbmZvIGhlYWRlciBzaXpl
LgorICAgIG1lbXNldCgmbV9pbmZvSGVhZGVyLCAwLCBzaXplb2YobV9pbmZvSGVhZGVyKSk7Cit9
CisKK3ZvaWQgQk1QSW1hZ2VSZWFkZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKKworICAgIC8vIE5PVEU6IFRoaXMgZnVuY3Rpb24gaW50ZW50aW9uYWxs
eSB1c2VzIGZyYW1lQnVmZmVyQXRJbmRleCgpIGluc3RlYWQgb2YKKyAgICAvLyBjaGVja2luZyBt
X2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKSBkaXJlY3RseSwgc28gdGhhdCBpdCB3aWxsIGRvIHRo
ZQorICAgIC8vIHJpZ2h0IHRoaW5nIGZvciBJQ09JbWFnZURlY29kZXIsIHdoaWNoIG5lZWRzIHRv
IG92ZXJyaWRlIHRoaXMgYWNjZXNzb3IKKyAgICAvLyB0byBzdXBwb3J0IElDT3Mgd2hpY2ggY29u
dGFpbiBQTkdzLgorCisgICAgLy8gUmV0dXJuIHF1aWNrbHkgd2hlbiB3ZSBjYW4ndCBkbyBhbnkg
bW9yZSB3b3JrLgorICAgIGlmIChtX2ZhaWxlZCB8fCBkYXRhLT5pc0VtcHR5KCkKKyAgICAgICAg
fHwgKGZyYW1lQnVmZmVyQXRJbmRleCgwKS0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFt
ZUNvbXBsZXRlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRGVjb2RlIGFzIG11Y2ggYXMg
d2UgY2FuLiAgVGhpcyBhc3N1bWVzIHxkYXRhfCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZworICAg
IC8vIG9mIHRoZSBpbWFnZSBkYXRhLCByYXRoZXIgdGhhbiBjb250YWluaW5nIGp1c3QgdGhlIGxh
dGVzdCBjaHVuay4KKyAgICBkZWNvZGVJbWFnZShkYXRhKTsKKyAgICBpZiAobV9mYWlsZWQpIHsK
KyAgICAgICAgLy8gSGFuZGxlIGZhaWx1cmUgYmVmb3JlIGdldHRpbmcgdGhlIGZyYW1lYnVmZmVy
IGJlbG93LgorICAgICAgICBtX2NvbG9yVGFibGUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGdvdCBhbGwgdGhlIGRhdGEgYnV0IGNvdWxkbid0IGZpbmlz
aCBkZWNvZGluZywgZmFpbC4KKyAgICBjb25zdCBib29sIGZpbmlzaGVkID0KKyAgICAgICAgKGZy
YW1lQnVmZmVyQXRJbmRleCgwKS0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBs
ZXRlKTsKKyAgICBpZiAoYWxsRGF0YVJlY2VpdmVkICYmICFmaW5pc2hlZCkKKyAgICAgICAgbV9m
YWlsZWQgPSB0cnVlOworCisgICAgLy8gUmVsZWFzZSB0aGUgY29sb3IgdGFibGUgd2hlbiB3ZSBu
byBsb25nZXIgbmVlZCBpdC4KKyAgICBpZiAoZmluaXNoZWQgfHwgbV9mYWlsZWQpCisgICAgICAg
IG1fY29sb3JUYWJsZS5jbGVhcigpOworfQorCitSR0JBMzJCdWZmZXIqIEJNUEltYWdlUmVhZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIHJldHVybiBpbmRleCA/
IDAgOiAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Cit9CisKK3ZvaWQgQk1QSW1hZ2VSZWFk
ZXI6OmRlY29kZUJNUChTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgLy8gQ2FsY3VsYXRlIHNp
emUgb2YgaW5mbyBoZWFkZXIuCisgICAgaWYgKCFtX2luZm9IZWFkZXIuYmlTaXplICYmICFnZXRJ
bmZvSGVhZGVyU2l6ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUmVhZCBhbmQg
cHJvY2VzcyBpbmZvIGhlYWRlci4KKyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA8IChtX2hlYWRl
ck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKQorICAgICAgICAmJiAhcHJvY2Vzc0luZm9I
ZWFkZXIoZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJlYWQgYW5kIHByb2Nlc3Mg
dGhlIGJpdG1hc2tzLCBpZiBuZWVkZWQuCisgICAgaWYgKG1fbmVlZFRvUHJvY2Vzc0JpdG1hc2tz
ICYmICFwcm9jZXNzQml0bWFza3MoZGF0YSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJl
YWQgYW5kIHByb2Nlc3MgdGhlIGNvbG9yIHRhYmxlLCBpZiBuZWVkZWQuCisgICAgaWYgKG1fbmVl
ZFRvUHJvY2Vzc0NvbG9yVGFibGUgJiYgIXByb2Nlc3NDb2xvclRhYmxlKGRhdGEpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQu
CisgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsK
KyAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgewor
ICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0
KCkpKSB7CisgICAgICAgICAgICAvLyBVbmFibGUgdG8gYWxsb2NhdGUuCisgICAgICAgICAgICBt
X2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
YnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CisgICAgICAgIC8v
IHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFn
LCBzbyB3ZSBmb3JjZQorICAgICAgICAvLyBpdCBiYWNrIHRvIGZhbHNlIGhlcmUuICBXZSdsbCBz
ZXQgaXQgdHJ1ZSBiZWxvdyBpbiBhbGwgY2FzZXMgd2hlcmUKKyAgICAgICAgLy8gdGhlc2UgMHMg
Y291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgorICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEo
ZmFsc2UpOworCisgICAgICAgIC8vIEZvciBCTVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRo
ZSBlbnRpcmUgaW1hZ2UuCisgICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgc2l6ZSgpKSk7CisKKyAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKKyAgICAgICAgICAgIG1f
Y29vcmQuc2V0WShzaXplKCkuaGVpZ2h0KCkgLSAxKTsKKyAgICB9CisKKyAgICAvLyBEZWNvZGUg
dGhlIGRhdGEuCisgICAgaWYgKChtX2FuZE1hc2tTdGF0ZSAhPSBEZWNvZGluZykgJiYgIXBhc3RF
bmRPZkltYWdlKDApKSB7CisgICAgICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24g
PT0gUkxFNCkKKyAgICAgICAgICAgIHx8IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBS
TEU4KQorICAgICAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTI0
KSkgeworICAgICAgICAgICAgaWYgKCFwcm9jZXNzUkxFRGF0YShkYXRhKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoIXByb2Nlc3NOb25STEVEYXRhKGRhdGEs
IGZhbHNlLCAwKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUg
aW1hZ2UgaGFzIGFuIEFORCBtYXNrIGFuZCB0aGVyZSB3YXMgbm8gYWxwaGEgZGF0YSwgcHJvY2Vz
cyB0aGUKKyAgICAvLyBtYXNrLgorICAgIGlmICgobV9hbmRNYXNrU3RhdGUgPT0gTm90WWV0RGVj
b2RlZCkgJiYgIWJ1ZmZlci5oYXNBbHBoYSgpKSB7CisgICAgICAgIC8vIFJlc2V0IGRlY29kaW5n
IGNvb3JkaW5hdGVzIHRvIHN0YXJ0IG9mIGltYWdlLgorICAgICAgICBtX2Nvb3JkLnNldFgoMCk7
CisgICAgICAgIG1fY29vcmQuc2V0WShtX2lzVG9wRG93biA/IDAgOiAoc2l6ZSgpLmhlaWdodCgp
IC0gMSkpOworCisgICAgICAgIC8vIFRoZSBBTkQgbWFzayBpcyBzdG9yZWQgYXMgMS1iaXQgZGF0
YS4KKyAgICAgICAgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPSAxOworCisgICAgICAgIG1fYW5k
TWFza1N0YXRlID0gRGVjb2Rpbmc7CisgICAgfQorICAgIGlmICgobV9hbmRNYXNrU3RhdGUgPT0g
RGVjb2RpbmcpICYmICFwcm9jZXNzTm9uUkxFRGF0YShkYXRhLCBmYWxzZSwgMCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIERvbmUhCisgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpOworfQorCitib29sIEJNUEltYWdlUmVhZGVyOjpnZXRJbmZvSGVh
ZGVyU2l6ZShTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgLy8gR2V0IHNpemUgb2YgaW5mbyBo
ZWFkZXIuCisgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBtX2hlYWRlck9mZnNldCk7Cisg
ICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPiBkYXRhLT5zaXplKCkpCisgICAgICAgIHx8ICgoZGF0
YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IDQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9pbmZvSGVhZGVyLmJpU2l6ZSA9IHJlYWRVaW50MzIoZGF0YSwgMCk7CisgICAgLy8g
RG9uJ3QgaW5jcmVtZW50IG1fZGVjb2RlZE9mZnNldCBoZXJlLCBpdCBqdXN0IG1ha2VzIHRoZSBj
b2RlIGluCisgICAgLy8gcHJvY2Vzc0luZm9IZWFkZXIoKSBtb3JlIGNvbmZ1c2luZy4KKworICAg
IC8vIERvbid0IGFsbG93IHRoZSBoZWFkZXIgdG8gb3ZlcmZsb3cgKHdoaWNoIHdvdWxkIGJlIGhh
cm1sZXNzIGhlcmUsIGJ1dAorICAgIC8vIHByb2JsZW1hdGljIG9yIGF0IGxlYXN0IGNvbmZ1c2lu
ZyBpbiBvdGhlciBwbGFjZXMpLCBvciB0byBvdmVycnVuIHRoZQorICAgIC8vIGltYWdlIGRhdGEu
CisgICAgaWYgKCgobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSA8IG1faGVh
ZGVyT2Zmc2V0KQorICAgICAgICB8fCAobV9pbWdEYXRhT2Zmc2V0CisgICAgICAgICAgICAmJiAo
bV9pbWdEYXRhT2Zmc2V0IDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkp
KSkgeworICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGhlYWRlciBzaXplIHdlIHVuZGVyc3RhbmQ6
CisgICAgLy8gT1MvMiAxLng6IDEyCisgICAgaWYgKG1faW5mb0hlYWRlci5iaVNpemUgPT0gMTIp
CisgICAgICAgIG1faXNPUzIxeCA9IHRydWU7CisgICAgLy8gV2luZG93cyBWMzogNDAKKyAgICBl
bHNlIGlmICgobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSA0MCkgfHwgaXNXaW5kb3dzVjRQbHVzKCkp
CisgICAgICAgIDsKKyAgICAvLyBPUy8yIDIueDogYW55IG11bHRpcGxlIG9mIDQgYmV0d2VlbiAx
NiBhbmQgNjQsIGluY2x1c2l2ZSwgb3IgNDIgb3IgNDYKKyAgICBlbHNlIGlmICgobV9pbmZvSGVh
ZGVyLmJpU2l6ZSA+PSAxNikgJiYgKG1faW5mb0hlYWRlci5iaVNpemUgPD0gNjQpCisgICAgICAg
ICAgICAgJiYgKCgobV9pbmZvSGVhZGVyLmJpU2l6ZSAmIDMpID09IDApIHx8IChtX2luZm9IZWFk
ZXIuYmlTaXplID09IDQyKQorICAgICAgICAgICAgICAgICB8fCAobV9pbmZvSGVhZGVyLmJpU2l6
ZSA9PSA0NikpKQorICAgICAgICBtX2lzT1MyMnggPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAg
bV9mYWlsZWQgPSB0cnVlOworCisgICAgcmV0dXJuICFtX2ZhaWxlZDsKK30KKworYm9vbCBCTVBJ
bWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAg
IC8vIFJlYWQgaW5mbyBoZWFkZXIuCisgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBtX2hl
YWRlck9mZnNldCk7CisgICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPiBkYXRhLT5zaXplKCkpCisg
ICAgICAgIHx8ICgoZGF0YS0+c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IG1faW5mb0hlYWRl
ci5iaVNpemUpCisgICAgICAgIHx8ICFyZWFkSW5mb0hlYWRlcihkYXRhKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fZGVjb2RlZE9mZnNldCArPSBtX2luZm9IZWFkZXIuYmlTaXplOwor
CisgICAgLy8gU2FuaXR5LWNoZWNrIGhlYWRlciB2YWx1ZXMuCisgICAgaWYgKCFpc0luZm9IZWFk
ZXJWYWxpZCgpKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIE1ha2Ugb3VyIHNpemUgYXZhaWxhYmxlIHRvIHRoZSBjYWxs
ZXIuCisgICAgaWYgKCFzZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIu
YmlIZWlnaHQpKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNl
dCBiaUNsclVzZWQgdG8gMCB0byBtZWFuICJhbGwKKyAgICAvLyBjb2xvcnMiLCBzbyBzZXQgaXQg
dG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbG9ycyBmb3IgdGhpcyBiaXQgZGVwdGguCisgICAg
Ly8gQWxzbyBkbyB0aGlzIGZvciBiaXRtYXBzIHRoYXQgcHV0IHRvbyBsYXJnZSBhIHZhbHVlIGhl
cmUuCisgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50IDwgMTYpIHsKKyAgICAgIGNvbnN0
IHVpbnQzMl90IG1heENvbG9ycyA9CisgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEp
IDw8IG1faW5mb0hlYWRlci5iaUJpdENvdW50OworICAgICAgaWYgKChtX2luZm9IZWFkZXIuYmlD
bHJVc2VkID09IDApCisgICAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaUNsclVzZWQgPiBtYXhD
b2xvcnMpKQorICAgICAgICBtX2luZm9IZWFkZXIuYmlDbHJVc2VkID0gbWF4Q29sb3JzOworICAg
IH0KKworICAgIC8vIEZvciBhbnkgYml0bWFwcyB0aGF0IHNldCB0aGVpciBCaXRDb3VudCB0byB0
aGUgd3JvbmcgdmFsdWUsIHJlc2V0IHRoZQorICAgIC8vIGNvdW50cyBub3cgdGhhdCB3ZSd2ZSBj
YWxjdWxhdGVkIHRoZSBudW1iZXIgb2YgbmVjZXNzYXJ5IGNvbG9ycywgc2luY2UKKyAgICAvLyBv
dGhlciBjb2RlIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5nIGNvcnJlY3QuCisgICAgaWYgKG1f
aW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTgpCisgICAgICAgIG1faW5mb0hlYWRlci5i
aUJpdENvdW50ID0gODsKKyAgICBlbHNlIGlmIChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9
PSBSTEU0KQorICAgICAgICBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9IDQ7CisKKyAgICAvLyBU
ZWxsIGNhbGxlciB3aGF0IHN0aWxsIG5lZWRzIHRvIGJlIHByb2Nlc3NlZC4KKyAgICBpZiAobV9p
bmZvSGVhZGVyLmJpQml0Q291bnQgPj0gMTYpCisgICAgICAgIG1fbmVlZFRvUHJvY2Vzc0JpdG1h
c2tzID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA+IDApCisg
ICAgICAgIG1fbmVlZFRvUHJvY2Vzc0NvbG9yVGFibGUgPSB0cnVlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgQk1QSW1hZ2VSZWFkZXI6OnJlYWRJbmZvSGVhZGVyKFNoYXJlZEJ1ZmZl
ciogZGF0YSkKK3sKKyAgICAvLyBQcmUtaW5pdGlhbGl6ZSBzb21lIGZpZWxkcyB0aGF0IG5vdCBh
bGwgaGVhZGVycyBzZXQuCisgICAgbV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBSR0I7Cisg
ICAgbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9IDA7CisKKyAgICBpZiAobV9pc09TMjF4KSB7Cisg
ICAgICAgIG1faW5mb0hlYWRlci5iaVdpZHRoID0gcmVhZFVpbnQxNihkYXRhLCA0KTsKKyAgICAg
ICAgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0ID0gcmVhZFVpbnQxNihkYXRhLCA2KTsKKyAgICAgICAg
QVNTRVJUKG1fYW5kTWFza1N0YXRlID09IE5vbmUpOyAgLy8gSUNPIGlzIGEgV2luZG93cyBmb3Jt
YXQsIG5vdCBPUy8yIQorICAgICAgICBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9IHJlYWRVaW50
MTYoZGF0YSwgMTApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtX2luZm9I
ZWFkZXIuYmlXaWR0aCA9IHJlYWRVaW50MzIoZGF0YSwgNCk7CisgICAgbV9pbmZvSGVhZGVyLmJp
SGVpZ2h0ID0gcmVhZFVpbnQzMihkYXRhLCA4KTsKKyAgICBpZiAobV9hbmRNYXNrU3RhdGUgIT0g
Tm9uZSkKKyAgICAgICAgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0IC89IDI7CisgICAgbV9pbmZvSGVh
ZGVyLmJpQml0Q291bnQgPSByZWFkVWludDE2KGRhdGEsIDE0KTsKKworICAgIC8vIFJlYWQgY29t
cHJlc3Npb24gdHlwZSwgaWYgcHJlc2VudC4KKyAgICBpZiAobV9pbmZvSGVhZGVyLmJpU2l6ZSA+
PSAyMCkgeworICAgICAgICB1aW50MzJfdCBiaUNvbXByZXNzaW9uID0gcmVhZFVpbnQzMihkYXRh
LCAxNik7CisKKyAgICAgICAgLy8gRGV0ZWN0IE9TLzIgMi54LXNwZWNpZmljIGNvbXByZXNzaW9u
IHR5cGVzLgorICAgICAgICBpZiAoKGJpQ29tcHJlc3Npb24gPT0gMykgJiYgKG1faW5mb0hlYWRl
ci5iaUJpdENvdW50ID09IDEpKSB7CisgICAgICAgICAgICBtX2luZm9IZWFkZXIuYmlDb21wcmVz
c2lvbiA9IEhVRkZNQU4xRDsKKyAgICAgICAgICAgIG1faXNPUzIyeCA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoKGJpQ29tcHJlc3Npb24gPT0gNCkgJiYgKG1faW5mb0hlYWRlci5iaUJpdENv
dW50ID09IDI0KSkgeworICAgICAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBS
TEUyNDsKKyAgICAgICAgICAgIG1faXNPUzIyeCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAo
YmlDb21wcmVzc2lvbiA+IDUpIHsKKyAgICAgICAgICAgIC8vIFNvbWUgdHlwZSB3ZSBkb24ndCB1
bmRlcnN0YW5kLgorICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faW5mb0hlYWRlci5iaUNv
bXByZXNzaW9uID0gc3RhdGljX2Nhc3Q8Q29tcHJlc3Npb25UeXBlPihiaUNvbXByZXNzaW9uKTsK
KyAgICB9CisKKyAgICAvLyBSZWFkIGNvbG9ycyB1c2VkLCBpZiBwcmVzZW50LgorICAgIGlmICht
X2luZm9IZWFkZXIuYmlTaXplID49IDM2KQorICAgICAgICBtX2luZm9IZWFkZXIuYmlDbHJVc2Vk
ID0gcmVhZFVpbnQzMihkYXRhLCAzMik7CisKKyAgICAvLyBXaW5kb3dzIFY0KyBjYW4gc2FmZWx5
IHJlYWQgdGhlIGZvdXIgYml0bWFza3MgZnJvbSA0MC01NiBieXRlcyBpbiwgc28gZG8KKyAgICAv
LyB0aGF0IGhlcmUuICBJZiB0aGUgYml0IGRlcHRoIGlzIGxlc3MgdGhhbiAxNiwgdGhlc2UgdmFs
dWVzIHdpbGwgYmUKKyAgICAvLyBpZ25vcmVkIGJ5IHRoZSBpbWFnZSBkYXRhIGRlY29kZXJzLiAg
SWYgdGhlIGJpdCBkZXB0aCBpcyBhdCBsZWFzdCAxNiBidXQKKyAgICAvLyB0aGUgY29tcHJlc3Np
b24gZm9ybWF0IGlzbid0IEJJVEZJRUxEUywgdGhlc2UgdmFsdWVzIHdpbGwgYmUgaWdub3JlZCBh
bmQKKyAgICAvLyBvdmVyd3JpdHRlbiogaW4gcHJvY2Vzc0JpdG1hc2tzKCkuCisgICAgLy8gTk9U
RTogV2UgYWxsb3cgYWxwaGEgaGVyZS4gIE1pY3Jvc29mdCBkb2Vzbid0IHJlYWxseSBkb2N1bWVu
dCB0aGlzIHdlbGwsCisgICAgLy8gYnV0IHNvbWUgQk1QcyBhcHBlYXIgdG8gdXNlIGl0LgorICAg
IC8vCisgICAgLy8gRm9yIG5vbi1XaW5kb3dzIFY0KywgbV9iaXRNYXNrc1tdIGV0LiBhbCB3aWxs
IGJlIGluaXRpYWxpemVkIGxhdGVyCisgICAgLy8gZHVyaW5nIHByb2Nlc3NCaXRtYXNrcygpLgor
ICAgIC8vCisgICAgLy8gKkV4Y2VwdCB0aGUgYWxwaGEgY2hhbm5lbC4gIEJpemFycmVseSwgc29t
ZSBSR0IgYml0bWFwcyBleHBlY3QgZGVjb2RlcnMKKyAgICAvLyB0byBwYXkgYXR0ZW50aW9uIHRv
IHRoZSBhbHBoYSBtYXNrIGhlcmUsIHNvIHRoZXJlJ3MgYSBzcGVjaWFsIGNhc2UgaW4KKyAgICAv
LyBwcm9jZXNzQml0bWFza3MoKSB0aGF0IGRvZXNuJ3QgYWx3YXlzIG92ZXJ3cml0ZSB0aGF0IHZh
bHVlLgorICAgIGlmIChpc1dpbmRvd3NWNFBsdXMoKSkgeworICAgICAgICBtX2JpdE1hc2tzWzBd
ID0gcmVhZFVpbnQzMihkYXRhLCA0MCk7CisgICAgICAgIG1fYml0TWFza3NbMV0gPSByZWFkVWlu
dDMyKGRhdGEsIDQ0KTsKKyAgICAgICAgbV9iaXRNYXNrc1syXSA9IHJlYWRVaW50MzIoZGF0YSwg
NDgpOworICAgICAgICBtX2JpdE1hc2tzWzNdID0gcmVhZFVpbnQzMihkYXRhLCA1Mik7CisgICAg
fQorCisgICAgLy8gRGV0ZWN0IHRvcC1kb3duIEJNUHMuCisgICAgaWYgKG1faW5mb0hlYWRlci5i
aUhlaWdodCA8IDApIHsKKyAgICAgICAgbV9pc1RvcERvd24gPSB0cnVlOworICAgICAgICBtX2lu
Zm9IZWFkZXIuYmlIZWlnaHQgPSAtbV9pbmZvSGVhZGVyLmJpSGVpZ2h0OworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEJNUEltYWdlUmVhZGVyOjppc0luZm9IZWFkZXJWYWxp
ZCgpIGNvbnN0Cit7CisgICAgLy8gTm9uLXBvc2l0aXZlIHdpZHRocy9oZWlnaHRzIGFyZSBpbnZh
bGlkLiAgKFdlJ3ZlIGFscmVhZHkgZmxpcHBlZCB0aGUKKyAgICAvLyBzaWduIG9mIHRoZSBoZWln
aHQgZm9yIHRvcC1kb3duIGJpdG1hcHMuKQorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGgg
PD0gMCkgfHwgKG1faW5mb0hlYWRlci5iaUhlaWdodCA9PSAwKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gT25seSBXaW5kb3dzIFYzKyBoYXMgdG9wLWRvd24gYml0bWFwcy4KKyAg
ICBpZiAobV9pc1RvcERvd24gJiYgKG1faXNPUzIxeCB8fCBtX2lzT1MyMngpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPbmx5IGJpdCBkZXB0aHMgb2YgMSwgNCwgOCwgb3IgMjQg
YXJlIHVuaXZlcnNhbGx5IHN1cHBvcnRlZC4KKyAgICBpZiAoKG1faW5mb0hlYWRlci5iaUJpdENv
dW50ICE9IDEpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSA0KQorICAgICAgICAmJiAo
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gOCkKKyAgICAgICAgJiYgKG1faW5mb0hlYWRlci5i
aUJpdENvdW50ICE9IDI0KSkgeworICAgICAgICAvLyBXaW5kb3dzIFYzKyBhZGRpdGlvbmFsbHkg
c3VwcG9ydHMgYml0IGRlcHRocyBvZiAwIChmb3IgZW1iZWRkZWQKKyAgICAgICAgLy8gSlBFRy9Q
TkcgaW1hZ2VzKSwgMTYsIGFuZCAzMi4KKyAgICAgICAgaWYgKG1faXNPUzIxeCB8fCBtX2lzT1My
MngpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgobV9pbmZvSGVhZGVy
LmJpQml0Q291bnQgIT0gMCkKKyAgICAgICAgICAgICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3Vu
dCAhPSAxNikKKyAgICAgICAgICAgICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAzMikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRWFjaCBjb21wcmVz
c2lvbiB0eXBlIGlzIG9ubHkgdmFsaWQgd2l0aCBjZXJ0YWluIGJpdCBkZXB0aHMgKGV4Y2VwdCBS
R0IsCisgICAgLy8gd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBhbnkgYml0IGRlcHRoKS4gIEFsc28s
IHNvbWUgZm9ybWF0cyBkbyBub3QKKyAgICAvLyBzb21lIGNvbXByZXNzaW9uIHR5cGVzLgorICAg
IHN3aXRjaCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24pIHsKKyAgICBjYXNlIFJHQjoKKyAg
ICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09IDApCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSTEU4OgorICAgICAgICAvLyBT
dXBwb3NlZGx5IHRoZXJlIGFyZSB1bmRvY3VtZW50ZWQgZm9ybWF0cyBsaWtlICJCaXRDb3VudCA9
IDEsCisgICAgICAgIC8vIENvbXByZXNzaW9uID0gUkxFNCIgKHdoaWNoIG1lYW5zICI0IGJpdCwg
YnV0IHdpdGggYSAyLWNvbG9yIHRhYmxlIiksCisgICAgICAgIC8vIHNvIGFsc28gYWxsb3cgdGhl
IHBhbGV0dGVkIFJMRSBjb21wcmVzc2lvbiB0eXBlcyB0byBoYXZlIHRvbyBsb3cgYQorICAgICAg
ICAvLyBiaXQgY291bnQ7IHdlJ2xsIGNvcnJlY3QgdGhpcyBsYXRlci4KKyAgICAgICAgaWYgKG1f
aW5mb0hlYWRlci5iaUJpdENvdW50ID09IDAgfHwgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiA4
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
UkxFNDoKKyAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIFJMRTguCisgICAgICAgIGlmIChtX2lu
Zm9IZWFkZXIuYmlCaXRDb3VudCA9PSAwIHx8IG1faW5mb0hlYWRlci5iaUJpdENvdW50ID4gNCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEJJ
VEZJRUxEUzoKKyAgICAgICAgLy8gT25seSB2YWxpZCBmb3IgV2luZG93cyBWMysuCisgICAgICAg
IGlmIChtX2lzT1MyMXggfHwgbV9pc09TMjJ4KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDE2KSAmJiAobV9pbmZvSGVh
ZGVyLmJpQml0Q291bnQgIT0gMzIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgSlBFRzoKKyAgICBjYXNlIFBORzoKKyAgICAgICAgLy8gT25s
eSB2YWxpZCBmb3IgV2luZG93cyBWMysuCisgICAgICAgIGlmIChtX2lzT1MyMXggfHwgbV9pc09T
MjJ4KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9pbmZvSGVhZGVy
LmJpQml0Q291bnQgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIEhVRkZNQU4xRDoKKyAgICAgICAgLy8gT25seSB2YWxpZCBmb3IgT1Mv
MiAyLnguCisgICAgICAgIGlmICghbV9pc09TMjJ4KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJMRTI0OgorICAgICAg
ICAvLyBPbmx5IHZhbGlkIGZvciBPUy8yIDIueC4KKyAgICAgICAgaWYgKCFtX2lzT1MyMngpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRD
b3VudCAhPSAyNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU29tZSB0eXBlIHdlIGRvbid0IHVuZGVyc3Rh
bmQuICBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGluCisgICAgICAgIC8vIHJlYWRJbmZv
SGVhZGVyKCkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gVG9wLWRvd24gYml0bWFwcyBjYW5ub3QgYmUgY29tcHJl
c3NlZDsgdGhleSBtdXN0IGJlIFJHQiBvciBCSVRGSUVMRFMuCisgICAgaWYgKG1faXNUb3BEb3du
ICYmIChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBSR0IpCisgICAgICAgICYmIChtX2lu
Zm9IZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBCSVRGSUVMRFMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBSZWplY3QgdGhlIGZvbGxvd2luZyB2YWxpZCBiaXRtYXAgdHlwZXMgdGhh
dCB3ZSBkb24ndCBjdXJyZW50bHkgYm90aGVyCisgICAgLy8gZGVjb2RpbmcuICBGZXcgb3RoZXIg
cGVvcGxlIGRlY29kZSB0aGVzZSBlaXRoZXIsIHRoZXkncmUgdW5saWtlbHkgdG8gYmUKKyAgICAv
LyBpbiBtdWNoIHVzZS4KKyAgICAvLyBUT0RPKHBrYXN0aW5nKTogQ29uc2lkZXIgc3VwcG9ydGlu
ZyB0aGVzZSBzb21lZGF5LgorICAgIC8vICAgKiBCaXRtYXBzIGxhcmdlciB0aGFuIDJeMTYgcGl4
ZWxzIGluIGVpdGhlciBkaW1lbnNpb24gKFdpbmRvd3MKKyAgICAvLyAgICAgcHJvYmFibHkgZG9l
c24ndCBkcmF3IHRoZXNlIHdlbGwgYW55d2F5LCBhbmQgdGhlIGRlY29kZWQgZGF0YSB3b3VsZAor
ICAgIC8vICAgICB0YWtlIGEgbG90IG9mIG1lbW9yeSkuCisgICAgaWYgKChtX2luZm9IZWFkZXIu
YmlXaWR0aCA+PSAoMSA8PCAxNikpCisgICAgICAgIHx8IChtX2luZm9IZWFkZXIuYmlIZWlnaHQg
Pj0gKDEgPDwgMTYpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vICAgKiBXaW5kb3dz
IFYzKyBKUEVHLWluLUJNUCBhbmQgUE5HLWluLUJNUCBiaXRtYXBzIChzdXBwb3NlZGx5IG5vdCBm
b3VuZAorICAgIC8vICAgICBpbiB0aGUgd2lsZCwgb25seSB1c2VkIHRvIHNlbmQgZGF0YSB0byBw
cmludGVycz8pLgorICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gSlBFRykK
KyAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFBORykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAvLyAgICogT1MvMiAyLnggSHVmZm1hbi1lbmNvZGVkIG1vbm9j
aHJvbWUgYml0bWFwcyAoc2VlCisgICAgLy8gICAgICBodHRwOi8vd3d3LmZpbGVmb3JtYXQuaW5m
by9taXJyb3IvZWdmZi9jaDA5XzA1Lmh0bSAsIHJlOiAiRzMxRCIKKyAgICAvLyAgICAgIGFsZ29y
aXRobSkuCisgICAgaWYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IEhVRkZNQU4xRCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQk1Q
SW1hZ2VSZWFkZXI6OnByb2Nlc3NCaXRtYXNrcyhTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAg
Ly8gQ3JlYXRlIG1fYml0TWFza3NbXSB2YWx1ZXMuCisgICAgaWYgKG1faW5mb0hlYWRlci5iaUNv
bXByZXNzaW9uICE9IEJJVEZJRUxEUykgeworICAgICAgICAvLyBUaGUgZm9ybWF0IGRvZXNuJ3Qg
YWN0dWFsbHkgdXNlIGJpdG1hc2tzLiAgVG8gc2ltcGxpZnkgdGhlIGRlY29kZQorICAgICAgICAv
LyBsb2dpYyBsYXRlciwgY3JlYXRlIGJpdG1hc2tzIGZvciB0aGUgUkdCIGRhdGEuICBGb3IgV2lu
ZG93cyBWNCssCisgICAgICAgIC8vIHRoaXMgb3ZlcndyaXRlcyB0aGUgbWFza3Mgd2UgcmVhZCBm
cm9tIHRoZSBoZWFkZXIsIHdoaWNoIGFyZQorICAgICAgICAvLyBzdXBwb3NlZCB0byBiZSBpZ25v
cmVkIGluIG5vbi1CSVRGSUVMRFMgY2FzZXMuCisgICAgICAgIC8vIDE2IGJpdHM6ICAgIE1TQiA8
LSAgICAgICAgICAgICAgICAgICAgIHhSUlJSUkdHIEdHR0JCQkJCIC0+IExTQgorICAgICAgICAv
LyAyNC8zMiBiaXRzOiBNU0IgPC0gW0FBQUFBQUFBXSBSUlJSUlJSUiBHR0dHR0dHRyBCQkJCQkJC
QiAtPiBMU0IKKyAgICAgICAgY29uc3QgaW50IG51bUJpdHMgPSAobV9pbmZvSGVhZGVyLmJpQml0
Q291bnQgPT0gMTYpID8gNSA6IDg7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDI7ICsr
aSkgeworICAgICAgICAgICAgbV9iaXRNYXNrc1tpXSA9CisgICAgICAgICAgICAgICAgKChzdGF0
aWNfY2FzdDx1aW50MzJfdD4oMSkgPDwgKG51bUJpdHMgKiAoMyAtIGkpKSkgLSAxKSBeCisgICAg
ICAgICAgICAgICAgKChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSkgPDwgKG51bUJpdHMgKiAoMiAt
IGkpKSkgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvciBXaW5kb3dzIFY0KyAzMi1i
aXQgUkdCLCBkb24ndCBvdmVyd3JpdGUgdGhlIGFscGhhIG1hc2sgZnJvbSB0aGUKKyAgICAgICAg
Ly8gaGVhZGVyIChzZWUgbm90ZSBpbiByZWFkSW5mb0hlYWRlcigpKS4KKyAgICAgICAgaWYgKG1f
aW5mb0hlYWRlci5iaUJpdENvdW50IDwgMzIpCisgICAgICAgICAgICBtX2JpdE1hc2tzWzNdID0g
MDsKKyAgICAgICAgZWxzZSBpZiAoIWlzV2luZG93c1Y0UGx1cygpKQorICAgICAgICAgICAgbV9i
aXRNYXNrc1szXSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigweGZmMDAwMDAwKTsKKyAgICB9IGVs
c2UgaWYgKCFpc1dpbmRvd3NWNFBsdXMoKSkgeworICAgICAgICAvLyBGb3IgV2luZG93cyBWNCsg
QklURklFTERTIG1vZGUgYml0bWFwcywgdGhpcyB3YXMgYWxyZWFkeSBkb25lIHdoZW4KKyAgICAg
ICAgLy8gd2UgcmVhZCB0aGUgaW5mbyBoZWFkZXIuCisKKyAgICAgICAgLy8gRmFpbCBpZiB3ZSBk
b24ndCBoYXZlIGVub3VnaCBmaWxlIHNwYWNlIGZvciB0aGUgYml0bWFza3MuCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgU0laRU9GX0JJVE1BU0tTID0gMTI7CisgICAgICAgIGlmICgoKG1faGVh
ZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSArIFNJWkVPRl9CSVRNQVNLUykgPCAobV9o
ZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplKSkKKyAgICAgICAgICAgIHx8IChtX2lt
Z0RhdGFPZmZzZXQgJiYgKG1faW1nRGF0YU9mZnNldCA8IChtX2hlYWRlck9mZnNldCArIG1faW5m
b0hlYWRlci5iaVNpemUgKyBTSVpFT0ZfQklUTUFTS1MpKSkpIHsKKyAgICAgICAgICAgIG1fZmFp
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFJlYWQgYml0bWFza3MuCisgICAgICAgIGlmICgoZGF0YS0+c2l6ZSgpIC0gbV9kZWNv
ZGVkT2Zmc2V0KSA8IFNJWkVPRl9CSVRNQVNLUykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgbV9iaXRNYXNrc1swXSA9IHJlYWRVaW50MzIoZGF0YSwgMCk7CisgICAgICAgIG1f
Yml0TWFza3NbMV0gPSByZWFkVWludDMyKGRhdGEsIDQpOworICAgICAgICBtX2JpdE1hc2tzWzJd
ID0gcmVhZFVpbnQzMihkYXRhLCA4KTsKKyAgICAgICAgLy8gTm8gYWxwaGEgaW4gYW55dGhpbmcg
b3RoZXIgdGhhbiBXaW5kb3dzIFY0Ky4KKyAgICAgICAgbV9iaXRNYXNrc1szXSA9IDA7CisKKyAg
ICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IFNJWkVPRl9CSVRNQVNLUzsKKyAgICB9CisKKyAgICAv
LyBXZSd2ZSBub3cgZGVjb2RlZCBhbGwgdGhlIG5vbi1pbWFnZSBkYXRhIHdlIGNhcmUgYWJvdXQu
ICBTa2lwIGFueXRoaW5nCisgICAgLy8gZWxzZSBiZWZvcmUgdGhlIGFjdHVhbCByYXN0ZXIgZGF0
YS4KKyAgICBpZiAobV9pbWdEYXRhT2Zmc2V0KQorICAgICAgICBtX2RlY29kZWRPZmZzZXQgPSBt
X2ltZ0RhdGFPZmZzZXQ7CisgICAgbV9uZWVkVG9Qcm9jZXNzQml0bWFza3MgPSBmYWxzZTsKKwor
ICAgIC8vIENoZWNrIG1hc2tzIGFuZCBzZXQgc2hpZnQgdmFsdWVzLgorICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIC8vIFRyaW0gdGhlIG1hc2sgdG8gdGhlIGFsbG93
ZWQgYml0IGRlcHRoLiAgU29tZSBXaW5kb3dzIFY0KyBCTVBzCisgICAgICAgIC8vIHNwZWNpZnkg
YSBib2d1cyBhbHBoYSBjaGFubmVsIGluIGJpdHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgcGl4
ZWwKKyAgICAgICAgLy8gZGF0YSAoZm9yIGV4YW1wbGUsIGJpdHMgMjUtMzEgaW4gYSAyNC1iaXQg
UkdCIGZvcm1hdCkuCisgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA8IDMyKQor
ICAgICAgICAgICAgbV9iaXRNYXNrc1tpXSAmPSAoKHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8
PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCkgLSAxKTsKKworICAgICAgICAvLyBGb3IgZW1wdHkg
bWFza3MgKGNvbW1vbiBvbiB0aGUgYWxwaGEgY2hhbm5lbCwgZXNwZWNpYWxseSBhZnRlciB0aGUK
KyAgICAgICAgLy8gdHJpbW1pbmcgYWJvdmUpLCBxdWlja2x5IGNsZWFyIHRoZSBzaGlmdHMgYW5k
IGNvbnRpbnVlLCB0byBhdm9pZCBhbgorICAgICAgICAvLyBpbmZpbml0ZSBsb29wIGluIHRoZSBj
b3VudGluZyBjb2RlIGJlbG93LgorICAgICAgICB1aW50MzJfdCB0ZW1wTWFzayA9IG1fYml0TWFz
a3NbaV07CisgICAgICAgIGlmICghdGVtcE1hc2spIHsKKyAgICAgICAgICAgIG1fYml0U2hpZnRz
UmlnaHRbaV0gPSBtX2JpdFNoaWZ0c0xlZnRbaV0gPSAwOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgYml0bWFzayBkb2VzIG5vdCBvdmVy
bGFwIGFueSBvdGhlciBiaXRtYXNrcy4KKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyAr
K2opIHsKKyAgICAgICAgICAgIGlmICh0ZW1wTWFzayAmIG1fYml0TWFza3Nbal0pIHsKKyAgICAg
ICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ291bnQgb2Zmc2V0IGlu
dG8gcGl4ZWwgZGF0YS4KKyAgICAgICAgZm9yIChtX2JpdFNoaWZ0c1JpZ2h0W2ldID0gMDsgISh0
ZW1wTWFzayAmIDEpOyB0ZW1wTWFzayA+Pj0gMSkKKyAgICAgICAgICAgICsrbV9iaXRTaGlmdHNS
aWdodFtpXTsKKworICAgICAgICAvLyBDb3VudCBzaXplIG9mIG1hc2suCisgICAgICAgIGZvciAo
bV9iaXRTaGlmdHNMZWZ0W2ldID0gODsgdGVtcE1hc2sgJiAxOyB0ZW1wTWFzayA+Pj0gMSkKKyAg
ICAgICAgICAgIC0tbV9iaXRTaGlmdHNMZWZ0W2ldOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSBi
aXRtYXNrIGlzIGNvbnRpZ3VvdXMuCisgICAgICAgIGlmICh0ZW1wTWFzaykgeworICAgICAgICAg
ICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2luY2UgUkdCQUJ1ZmZlciB0b3BzIG91dCBhdCA4IGJpdHMgcGVyIGNo
YW5uZWwsIGFkanVzdCB0aGUgc2hpZnQKKyAgICAgICAgLy8gYW1vdW50cyB0byB1c2UgdGhlIG1v
c3Qgc2lnbmlmaWNhbnQgOCBiaXRzIG9mIHRoZSBjaGFubmVsLgorICAgICAgICBpZiAobV9iaXRT
aGlmdHNMZWZ0W2ldIDwgMCkgeworICAgICAgICAgICAgbV9iaXRTaGlmdHNSaWdodFtpXSAtPSBt
X2JpdFNoaWZ0c0xlZnRbaV07CisgICAgICAgICAgICBtX2JpdFNoaWZ0c0xlZnRbaV0gPSAwOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQk1QSW1hZ2VS
ZWFkZXI6OnByb2Nlc3NDb2xvclRhYmxlKFNoYXJlZEJ1ZmZlciogZGF0YSkKK3sKKyAgICBtX3Rh
YmxlU2l6ZUluQnl0ZXMgPSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkICogKG1faXNPUzIxeCA/IDMg
OiA0KTsKKworICAgIC8vIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZmlsZSBzcGFjZSBm
b3IgdGhlIGNvbG9yIHRhYmxlLgorICAgIGlmICgoKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVh
ZGVyLmJpU2l6ZSArIG1fdGFibGVTaXplSW5CeXRlcykgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2lu
Zm9IZWFkZXIuYmlTaXplKSkKKyAgICAgICAgfHwgKG1faW1nRGF0YU9mZnNldCAmJiAobV9pbWdE
YXRhT2Zmc2V0IDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSArIG1fdGFi
bGVTaXplSW5CeXRlcykpKSkgeworICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZWFkIGNvbG9yIHRhYmxlLgorICAgIGlmICgo
bV9kZWNvZGVkT2Zmc2V0ID4gZGF0YS0+c2l6ZSgpKQorICAgICAgICB8fCAoKGRhdGEtPnNpemUo
KSAtIG1fZGVjb2RlZE9mZnNldCkgPCBtX3RhYmxlU2l6ZUluQnl0ZXMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgbV9jb2xvclRhYmxlLnJlc2l6ZShtX2luZm9IZWFkZXIuYmlDbHJVc2Vk
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5mb0hlYWRlci5iaUNsclVzZWQ7ICsr
aSkgeworICAgICAgICBtX2NvbG9yVGFibGVbaV0ucmdiQmx1ZSA9IGRhdGEtPmRhdGEoKVttX2Rl
Y29kZWRPZmZzZXQrK107CisgICAgICAgIG1fY29sb3JUYWJsZVtpXS5yZ2JHcmVlbiA9IGRhdGEt
PmRhdGEoKVttX2RlY29kZWRPZmZzZXQrK107CisgICAgICAgIG1fY29sb3JUYWJsZVtpXS5yZ2JS
ZWQgPSBkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0KytdOworICAgICAgICAvLyBTa2lwIHBh
ZGRpbmcgYnl0ZSAobm90IHByZXNlbnQgb24gT1MvMiAxLngpLgorICAgICAgICBpZiAoIW1faXNP
UzIxeCkKKyAgICAgICAgICAgICsrbV9kZWNvZGVkT2Zmc2V0OworICAgIH0KKworICAgIC8vIFdl
J3ZlIG5vdyBkZWNvZGVkIGFsbCB0aGUgbm9uLWltYWdlIGRhdGEgd2UgY2FyZSBhYm91dC4gIFNr
aXAgYW55dGhpbmcKKyAgICAvLyBlbHNlIGJlZm9yZSB0aGUgYWN0dWFsIHJhc3RlciBkYXRhLgor
ICAgIGlmIChtX2ltZ0RhdGFPZmZzZXQpCisgICAgICAgIG1fZGVjb2RlZE9mZnNldCA9IG1faW1n
RGF0YU9mZnNldDsKKyAgICBtX25lZWRUb1Byb2Nlc3NDb2xvclRhYmxlID0gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIGlmIChtX2RlY29kZWRPZmZzZXQgPiBkYXRhLT5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFJMRSBkZWNvZGluZyBpcyBw
b29ybHkgc3BlY2lmaWVkLiAgVHdvIG1haW4gcHJvYmxlbXM6CisgICAgLy8gKDEpIEFyZSBFT0wg
bWFya2VycyBuZWNlc3Nhcnk/ICBXaGF0IGhhcHBlbnMgd2hlbiB3ZSBoYXZlIHRvbyBtYW55Cisg
ICAgLy8gICAgIHBpeGVscyBmb3Igb25lIHJvdz8KKyAgICAvLyAgICAgaHR0cDovL3d3dy5maWxl
Zm9ybWF0LmluZm8vZm9ybWF0L2JtcC9lZ2ZmLmh0bSBzYXlzIGV4dHJhIHBpeGVscworICAgIC8v
ICAgICBzaG91bGQgd3JhcCB0byB0aGUgbmV4dCBsaW5lLiAgUmVhbCBCTVBzIEkndmUgZW5jb3Vu
dGVyZWQgc2VlbSB0bworICAgIC8vICAgICBpbnN0ZWFkIGV4cGVjdCBleHRyYSBwaXhlbHMgdG8g
YmUgaWdub3JlZCB1bnRpbCB0aGUgRU9MIG1hcmtlciBpcworICAgIC8vICAgICBzZWVuLCBhbHRo
b3VnaCB0aGlzIGhhcyBvbmx5IGhhcHBlbmVkIGluIGEgZmV3IGNhc2VzIGFuZCBJIHN1c3BlY3QK
KyAgICAvLyAgICAgdGhvc2UgQk1QcyBtYXkgYmUgaW52YWxpZC4gIFNvIHdlIG9ubHkgY2hhbmdl
IGxpbmVzIG9uIEVPTCAob3IgRGVsdGEKKyAgICAvLyAgICAgd2l0aCBkeSA+IDApLCBhbmQgZmFp
bCBpbiBtb3N0IGNhc2VzIHdoZW4gcGl4ZWxzIGV4dGVuZCBwYXN0IHRoZSBlbmQKKyAgICAvLyAg
ICAgb2YgdGhlIGxpbmUuCisgICAgLy8gKDIpIFdoZW4gRGVsdGEsIEVPTCwgb3IgRU9GIGFyZSBz
ZWVuLCB3aGF0IGhhcHBlbnMgdG8gdGhlICJza2lwcGVkIgorICAgIC8vICAgICBwaXhlbHM/Cisg
ICAgLy8gICAgIGh0dHA6Ly93d3cuZGF1Ym5ldC5jb20vZm9ybWF0cy9CTVAuaHRtbCBzYXlzIHRo
ZXNlIHNob3VsZCBiZSBmaWxsZWQKKyAgICAvLyAgICAgd2l0aCBjb2xvciAwLiAgSG93ZXZlciwg
dGhlICJkbyBub3RoaW5nIiBhbmQgImRvbid0IGNhcmUiIGNvbW1lbnRzCisgICAgLy8gICAgIG9m
IG90aGVyIHJlZmVyZW5jZXMgc3VnZ2VzdCBsZWF2aW5nIHRoZXNlIGFsb25lLCBpLmUuIGxldHRp
bmcgdGhlbQorICAgIC8vICAgICBiZSB0cmFuc3BhcmVudCB0byB0aGUgYmFja2dyb3VuZCBiZWhp
bmQgdGhlIGltYWdlLiAgVGhpcyBzZWVtcyB0bworICAgIC8vICAgICBtYXRjaCBob3cgTVNQQUlO
VCB0cmVhdHMgQk1Qcywgc28gd2UgZG8gdGhhdC4gIE5vdGUgdGhhdCB3aGVuIHdlCisgICAgLy8g
ICAgIGFjdHVhbGx5IHNraXAgcGl4ZWxzIGZvciBhIGNhc2UgbGlrZSB0aGlzLCB3ZSBuZWVkIHRv
IG5vdGUgb24gdGhlCisgICAgLy8gICAgIGZyYW1lYnVmZmVyIHRoYXQgd2UgaGF2ZSBhbHBoYS4K
KworICAgIC8vIEltcG9zc2libGUgdG8gZGVjb2RlIHJvdy1hdC1hLXRpbWUsIHNvIGp1c3QgZG8g
dGhpbmdzIGFzIGEgc3RyZWFtIG9mCisgICAgLy8gYnl0ZXMuCisgICAgUkdCQTMyQnVmZmVyJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAvLyBFdmVyeSBlbnRyeSB0YWtlcyBhdCBsZWFzdCB0d28gYnl0ZXM7IGJhaWwgaWYg
dGhlcmUgaXNuJ3QgZW5vdWdoCisgICAgICAgIC8vIGRhdGEuCisgICAgICAgIGlmICgoZGF0YS0+
c2l6ZSgpIC0gbV9kZWNvZGVkT2Zmc2V0KSA8IDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgLy8gRm9yIGV2ZXJ5IGVudHJ5IGV4Y2VwdCBFT0YsIHdlJ2QgYmV0dGVyIG5v
dCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZgorICAgICAgICAvLyB0aGUgaW1hZ2UuCisgICAgICAg
IGNvbnN0IHVpbnQ4X3QgY291bnQgPSBkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0XTsKKyAg
ICAgICAgY29uc3QgdWludDhfdCBjb2RlID0gZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCAr
IDFdOworICAgICAgICBpZiAoKChjb3VudCAhPSAwKSB8fCAoY29kZSAhPSAxKSkgJiYgcGFzdEVu
ZE9mSW1hZ2UoMCkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERlY29kZS4KKyAgICAgICAg
aWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAg
ICAgY2FzZSAwOiAgLy8gTWFnaWMgdG9rZW46IEVPTAorICAgICAgICAgICAgICAgIC8vIFNraXAg
YW55IHJlbWFpbmluZyBwaXhlbHMgaW4gdGhpcyByb3cuCisgICAgICAgICAgICAgICAgaWYgKG1f
Y29vcmQueCgpIDwgc2l6ZSgpLndpZHRoKCkpCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5z
ZXRIYXNBbHBoYSh0cnVlKTsKKyAgICAgICAgICAgICAgICBtb3ZlQnVmZmVyVG9OZXh0Um93KCk7
CisKKyAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQgKz0gMjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxOiAgLy8gTWFnaWMgdG9rZW46IEVPRgorICAg
ICAgICAgICAgICAgIC8vIFNraXAgYW55IHJlbWFpbmluZyBwaXhlbHMgaW4gdGhlIGltYWdlLgor
ICAgICAgICAgICAgICAgIGlmICgobV9jb29yZC54KCkgPCBzaXplKCkud2lkdGgoKSkKKyAgICAg
ICAgICAgICAgICAgICAgfHwgKG1faXNUb3BEb3duID8gKG1fY29vcmQueSgpIDwgKHNpemUoKS5o
ZWlnaHQoKSAtIDEpKSA6IChtX2Nvb3JkLnkoKSA+IDApKSkKKyAgICAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICAgICAgICBjYXNlIDI6IHsgIC8vIE1hZ2ljIHRva2VuOiBEZWx0YQorICAgICAgICAg
ICAgICAgIC8vIFRoZSBuZXh0IHR3byBieXRlcyBzcGVjaWZ5IGR4IGFuZCBkeS4gIEJhaWwgaWYg
dGhlcmUgaXNuJ3QKKyAgICAgICAgICAgICAgICAvLyBlbm91Z2ggZGF0YS4KKyAgICAgICAgICAg
ICAgICBpZiAoKGRhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCA0KQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAvLyBGYWlsIGlmIHRo
aXMgdGFrZXMgdXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZXNpcmVkIHJvdyBvcgorICAgICAgICAg
ICAgICAgIC8vIHBhc3QgdGhlIGVuZCBvZiB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgY29u
c3QgdWludDhfdCBkeCA9IGRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAyXTsKKyAgICAg
ICAgICAgICAgICBjb25zdCB1aW50OF90IGR5ID0gZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNl
dCArIDNdOworICAgICAgICAgICAgICAgIGlmICgoZHggIT0gMCkgfHwgKGR5ICE9IDApKQorICAg
ICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCgobV9jb29yZC54KCkgKyBkeCkgPiBzaXplKCkud2lkdGgoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgcGFzdEVuZE9mSW1hZ2UoZHkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
ZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNraXAgaW50ZXJ2ZW5pbmcgcGl4ZWxz
LgorICAgICAgICAgICAgICAgIG1fY29vcmQubW92ZShkeCwgbV9pc1RvcERvd24gPyBkeSA6IC1k
eSk7CisKKyAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQgKz0gNDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDogIC8vIEFi
c29sdXRlIG1vZGUKKyAgICAgICAgICAgICAgICAvLyB8Y29kZXwgcGl4ZWxzIHNwZWNpZmllZCBh
cyBpbiBCSV9SR0IsIHplcm8tcGFkZGVkIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICAvLyB0
byBhIG11bHRpcGxlIG9mIDE2IGJpdHMuCisgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBwcm9j
ZXNzTm9uUkxFRGF0YSgpIGV4cGVjdHMgbV9kZWNvZGVkT2Zmc2V0IHRvCisgICAgICAgICAgICAg
ICAgLy8gcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGl4ZWwgZGF0YSwgYnVtcCBpdCBw
YXN0CisgICAgICAgICAgICAgICAgLy8gdGhlIGVzY2FwZSBieXRlcyBhbmQgdGhlbiByZXNldCBp
ZiBkZWNvZGluZyBmYWlsZWQuCisgICAgICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IDI7
CisgICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzTm9uUkxFRGF0YShkYXRhLCB0cnVlLCBjb2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQgLT0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgIC8vIEVuY29kZWQg
bW9kZQorICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2xvciBkYXRhIGlzIHJlcGVhdGVk
IGZvciB8Y291bnR8IHRvdGFsIHBpeGVscy4KKyAgICAgICAgICAgIC8vIFN0cmFuZ2VseSwgc29t
ZSBCTVBzIHNlZW0gdG8gc3BlY2lmeSBleGNlc3NpdmVseSBsYXJnZSBjb3VudHMKKyAgICAgICAg
ICAgIC8vIGhlcmU7IGlnbm9yZSBwaXhlbHMgcGFzdCB0aGUgZW5kIG9mIHRoZSByb3cuCisgICAg
ICAgICAgICBjb25zdCBpbnQgZW5kWCA9IHN0ZDo6bWluKG1fY29vcmQueCgpICsgY291bnQsIHNp
emUoKS53aWR0aCgpKTsKKworICAgICAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUNvbXByZXNz
aW9uID09IFJMRTI0KSB7CisgICAgICAgICAgICAgICAgLy8gQmFpbCBpZiB0aGVyZSBpc24ndCBl
bm91Z2ggZGF0YS4KKyAgICAgICAgICAgICAgICBpZiAoKGRhdGEtPnNpemUoKSAtIG1fZGVjb2Rl
ZE9mZnNldCkgPCA0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgICAgICAvLyBPbmUgQkdSIHRyaXBsZSB0aGF0IHdlIGNvcHkgfGNvdW50fCB0aW1lcy4K
KyAgICAgICAgICAgICAgICBmaWxsUkdCQShlbmRYLCBkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zm
c2V0ICsgM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZGF0YSgpW21fZGVjb2Rl
ZE9mZnNldCArIDJdLCBjb2RlLCAweGZmKTsKKyAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZz
ZXQgKz0gNDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUkxFOCBo
YXMgb25lIGNvbG9yIGluZGV4IHRoYXQgZ2V0cyByZXBlYXRlZDsgUkxFNCBoYXMgdHdvCisgICAg
ICAgICAgICAgICAgLy8gY29sb3IgaW5kZXhlcyBpbiB0aGUgdXBwZXIgYW5kIGxvd2VyIDQgYml0
cyBvZiB0aGUgYnl0ZSwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBhcmUgYWx0ZXJuYXRlZC4K
KyAgICAgICAgICAgICAgICBzaXplX3QgY29sb3JJbmRleGVzWzJdID0ge2NvZGUsIGNvZGV9Owor
ICAgICAgICAgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEU0KSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbG9ySW5kZXhlc1swXSA9IChjb2xvckluZGV4ZXNbMF0g
Pj4gNCkgJiAweGY7CisgICAgICAgICAgICAgICAgICAgIGNvbG9ySW5kZXhlc1sxXSAmPSAweGY7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoY29sb3JJbmRleGVzWzBd
ID49IG1faW5mb0hlYWRlci5iaUNsclVzZWQpCisgICAgICAgICAgICAgICAgICAgIHx8IChjb2xv
ckluZGV4ZXNbMV0gPj0gbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IHdoaWNoID0gMDsg
bV9jb29yZC54KCkgPCBlbmRYOyApIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0SShjb2xvcklu
ZGV4ZXNbd2hpY2hdKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggPSAhd2hpY2g7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IDI7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQk1QSW1hZ2VSZWFkZXI6
OnByb2Nlc3NOb25STEVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBpblJMRSwgaW50IG51
bVBpeGVscykKK3sKKyAgICBpZiAobV9kZWNvZGVkT2Zmc2V0ID4gZGF0YS0+c2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWluUkxFKQorICAgICAgICBudW1QaXhlbHMg
PSBzaXplKCkud2lkdGgoKTsKKworICAgIC8vIEZhaWwgaWYgd2UncmUgYmVpbmcgYXNrZWQgdG8g
ZGVjb2RlIG1vcmUgcGl4ZWxzIHRoYW4gcmVtYWluIGluIHRoZSByb3cuCisgICAgY29uc3QgaW50
IGVuZFggPSBtX2Nvb3JkLngoKSArIG51bVBpeGVsczsKKyAgICBpZiAoZW5kWCA+IHNpemUoKS53
aWR0aCgpKSB7CisgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIC8vIERldGVybWluZSBob3cgbWFueSBieXRlcyBvZiBkYXRhIHRoZSBy
ZXF1ZXN0ZWQgbnVtYmVyIG9mIHBpeGVscworICAgIC8vIHJlcXVpcmVzLgorICAgIGNvbnN0IHNp
emVfdCBwaXhlbHNQZXJCeXRlID0gOCAvIG1faW5mb0hlYWRlci5iaUJpdENvdW50OworICAgIGNv
bnN0IHNpemVfdCBieXRlc1BlclBpeGVsID0gbV9pbmZvSGVhZGVyLmJpQml0Q291bnQgLyA4Owor
ICAgIGNvbnN0IHNpemVfdCB1bnBhZGRlZE51bUJ5dGVzID0gKG1faW5mb0hlYWRlci5iaUJpdENv
dW50IDwgMTYpCisgICAgICAgID8gKChudW1QaXhlbHMgKyBwaXhlbHNQZXJCeXRlIC0gMSkgLyBw
aXhlbHNQZXJCeXRlKQorICAgICAgICA6IChudW1QaXhlbHMgKiBieXRlc1BlclBpeGVsKTsKKyAg
ICAvLyBSTEUgcnVucyBhcmUgemVyby1wYWRkZWQgYXQgdGhlIGVuZCB0byBhIG11bHRpcGxlIG9m
IDE2IGJpdHMuICBOb24tUkxFCisgICAgLy8gZGF0YSBpcyBpbiByb3dzIGFuZCBpcyB6ZXJvLXBh
ZGRlZCB0byBhIG11bHRpcGxlIG9mIDMyIGJpdHMuCisgICAgY29uc3Qgc2l6ZV90IGFsaWduQml0
cyA9IGluUkxFID8gMSA6IDM7CisgICAgY29uc3Qgc2l6ZV90IHBhZGRlZE51bUJ5dGVzID0gKHVu
cGFkZGVkTnVtQnl0ZXMgKyBhbGlnbkJpdHMpICYgfmFsaWduQml0czsKKworICAgIC8vIERlY29k
ZSBhcyBtYW55IHJvd3MgYXMgd2UgY2FuLiAgKEZvciBSTEUsIHdoZXJlIHdlIG9ubHkgd2FudCB0
byBkZWNvZGUKKyAgICAvLyBvbmUgcm93LCB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGlz
IGNvbmRpdGlvbiBpcyB0cnVlLikKKyAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVC
dWZmZXJDYWNoZS5maXJzdCgpOworICAgIHdoaWxlICghcGFzdEVuZE9mSW1hZ2UoMCkpIHsKKyAg
ICAgICAgLy8gQmFpbCBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhIGZvciB0aGUgZGVzaXJl
ZCBudW1iZXIgb2YgcGl4ZWxzLgorICAgICAgICBpZiAoKGRhdGEtPnNpemUoKSAtIG1fZGVjb2Rl
ZE9mZnNldCkgPCBwYWRkZWROdW1CeXRlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPCAxNikgeworICAgICAgICAgICAg
Ly8gUGFsZXR0ZWQgZGF0YS4gIFBpeGVscyBhcmUgc3RvcmVkIGxpdHRsZS1lbmRpYW4gd2l0aGlu
IGJ5dGVzLgorICAgICAgICAgICAgLy8gRGVjb2RlIHBpeGVscyBvbmUgYnl0ZSBhdCBhIHRpbWUs
IGxlZnQgdG8gcmlnaHQgKHNvLCBzdGFydGluZyBhdAorICAgICAgICAgICAgLy8gdGhlIG1vc3Qg
c2lnbmlmaWNhbnQgYml0cyBpbiB0aGUgYnl0ZSkuCisgICAgICAgICAgICBjb25zdCB1aW50OF90
IG1hc2sgPSAoMSA8PCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCkgLSAxOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgYnl0ZSA9IDA7IGJ5dGUgPCB1bnBhZGRlZE51bUJ5dGVzOyArK2J5dGUpIHsK
KyAgICAgICAgICAgICAgICB1aW50OF90IHBpeGVsRGF0YSA9IGRhdGEtPmRhdGEoKVttX2RlY29k
ZWRPZmZzZXQgKyBieXRlXTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBwaXhlbCA9IDA7
IChwaXhlbCA8IHBpeGVsc1BlckJ5dGUpICYmIChtX2Nvb3JkLngoKSA8IGVuZFgpOyArK3BpeGVs
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIChwaXhlbERhdGEgPj4gKDggLSBtX2luZm9IZWFkZXIuYmlCaXRD
b3VudCkpICYgbWFzazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYW5kTWFza1N0YXRlID09
IERlY29kaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIG5vIHdheSB0
byBhY2N1cmF0ZWx5IHJlcHJlc2VudCBhbiBBTkQgKyBYT1IKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG9wZXJhdGlvbiBhcyBhbiBSR0JBIGltYWdlLCBzbyB3aGVyZSB0aGUgQU5EIHZhbHVl
cworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIDEsIHdlIHNpbXBseSBzZXQgdGhlIGZy
YW1lYnVmZmVyIHBpeGVscyB0byBmdWxseQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJh
bnNwYXJlbnQsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbW9zdCBJQ09zIG9uIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gd2ViIHdpbGwgbm90IGJlIGRvaW5nIGEgbG90IG9mIGludmVy
dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvckluZGV4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0UkdCQSgwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nvb3JkLm1vdmUo
MSwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY29sb3JJbmRleCA+PSBtX2luZm9IZWFkZXIuYmlDbHJVc2VkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEkoY29sb3JJbmRleCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxEYXRhIDw8PSBtX2luZm9IZWFkZXIuYmlCaXRD
b3VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBSR0IgZGF0YS4gIERlY29kZSBwaXhlbHMgb25lIGF0IGEgdGltZSwg
bGVmdCB0byByaWdodC4KKyAgICAgICAgICAgIHdoaWxlIChtX2Nvb3JkLngoKSA8IGVuZFgpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBwaXhlbCA9IHJlYWRDdXJyZW50UGl4ZWwo
ZGF0YSwgYnl0ZXNQZXJQaXhlbCk7CisKKyAgICAgICAgICAgICAgICAvLyBTb21lIEJNUHMgc3Bl
Y2lmeSBhbiBhbHBoYSBjaGFubmVsIGJ1dCBkb24ndCBhY3R1YWxseSB1c2UgaXQKKyAgICAgICAg
ICAgICAgICAvLyAoaXQgY29udGFpbnMgYWxsIDBzKS4gIFRvIGF2b2lkIGRpc3BsYXlpbmcgdGhl
c2UgaW1hZ2VzIGFzCisgICAgICAgICAgICAgICAgLy8gZnVsbHktdHJhbnNwYXJlbnQsIGRlY29k
ZSBhcyBpZiBpbWFnZXMgYXJlIGZ1bGx5IG9wYXF1ZQorICAgICAgICAgICAgICAgIC8vIHVudGls
IHdlIGFjdHVhbGx5IHNlZSBhIG5vbi16ZXJvIGFscGhhIHZhbHVlOyBhdCB0aGF0IHBvaW50LAor
ICAgICAgICAgICAgICAgIC8vIHJlc2V0IGFueSBwcmV2aW91c2x5LWRlY29kZWQgcGl4ZWxzIHRv
IGZ1bGx5IHRyYW5zcGFyZW50IGFuZAorICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIGRlY29k
aW5nIGJhc2VkIG9uIHRoZSByZWFsIGFscGhhIGNoYW5uZWwgdmFsdWVzLgorICAgICAgICAgICAg
ICAgIC8vIEFzIGFuIG9wdGltaXphdGlvbiwgYXZvaWQgc2V0dGluZyAiaGFzQWxwaGEiIHRvIHRy
dWUgZm9yCisgICAgICAgICAgICAgICAgLy8gaW1hZ2VzIHdoZXJlIGFsbCBhbHBoYSB2YWx1ZXMg
YXJlIDI1NTsgb3BhcXVlIGltYWdlcyBhcmUKKyAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgdG8g
ZHJhdy4KKyAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSBnZXRBbHBoYShwaXhlbCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFtX3NlZW5Ob25aZXJvQWxwaGFQaXhlbCAmJiAoYWxwaGEgPT0gMCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zZWVuWmVyb0FscGhhUGl4ZWwgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBhbHBoYSA9IDI1NTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBtX3NlZW5Ob25aZXJvQWxwaGFQaXhlbCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX3NlZW5aZXJvQWxwaGFQaXhlbCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLnplcm9GaWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3NlZW5aZXJvQWxwaGFQaXhlbCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGFscGhhICE9IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNB
bHBoYSh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzZXRSR0JB
KGdldENvbXBvbmVudChwaXhlbCwgMCksIGdldENvbXBvbmVudChwaXhlbCwgMSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnQocGl4ZWwsIDIpLCBhbHBoYSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTdWNjZXNzLCBrZWVwIGdvaW5nLgorICAg
ICAgICBtX2RlY29kZWRPZmZzZXQgKz0gcGFkZGVkTnVtQnl0ZXM7CisgICAgICAgIGlmIChpblJM
RSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBtb3ZlQnVmZmVyVG9OZXh0Um93
KCk7CisgICAgfQorCisgICAgLy8gRmluaXNoZWQgZGVjb2Rpbmcgd2hvbGUgaW1hZ2UuCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQk1QSW1hZ2VSZWFkZXI6Om1vdmVCdWZmZXJUb05leHRS
b3coKQoreworICAgIG1fY29vcmQubW92ZSgtbV9jb29yZC54KCksIG1faXNUb3BEb3duID8gMSA6
IC0xKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCShyZXZpc2lv
biA0NDYzMCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUElt
YWdlUmVhZGVyLmg6NDQ2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI1IEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQk1QSW1hZ2VSZWFkZXJfaAorI2RlZmluZSBCTVBJbWFnZVJlYWRlcl9oCisK
KyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIGEgQk1QIGltYWdlLiAg
SXQgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBCTVAgYW5kIElDTworICAgIC8vIGRlY29kZXJz
LCB3aGljaCB3cmFwIGl0IGluIHRoZSBhcHByb3ByaWF0ZSBjb2RlIHRvIHJlYWQgZmlsZSBoZWFk
ZXJzLCBldGMuCisgICAgY2xhc3MgQk1QSW1hZ2VSZWFkZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJNUEltYWdlUmVhZGVyKCk7CisKKyAgICAgICAgLy8g
RG9lcyB0aGUgYWN0dWFsIGRlY29kaW5nLiAgfGRhdGF8IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBmaWxlLAorICAgICAgICAvLyBidXQgbWF5IGJlIGluY29tcGxldGUuCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqIGRhdGEpID0gMDsKKworICAg
ICAgICAvLyBJbWFnZURlY29kZXIKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVk
QnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgUkdC
QTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgZW51bSBBbmRNYXNrU3RhdGUgeworICAgICAgICAgICAgTm9uZSwKKyAg
ICAgICAgICAgIE5vdFlldERlY29kZWQsCisgICAgICAgICAgICBEZWNvZGluZywKKyAgICAgICAg
fTsKKworICAgICAgICAvLyBEZWNvZGVzIGEgc2luZ2xlIEJNUCwgc3RhcnRpbmcgd2l0aCBhbiBp
bmZvIGhlYWRlci4KKyAgICAgICAgdm9pZCBkZWNvZGVCTVAoU2hhcmVkQnVmZmVyKiBkYXRhKTsK
KworICAgICAgICAvLyBSZWFkIGEgdmFsdWUgZnJvbSB8ZGF0YVttX2RlY29kZWRPZmZzZXQgKyBh
ZGRpdGlvbmFsT2Zmc2V0XXwsIGNvbnZlcnRpbmcKKyAgICAgICAgLy8gZnJvbSBsaXR0bGUgdG8g
bmF0aXZlIGVuZGlhbm5lc3MuCisgICAgICAgIGlubGluZSB1aW50MTZfdCByZWFkVWludDE2KFNo
YXJlZEJ1ZmZlciogZGF0YSwgaW50IGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHVpbnQxNl90IHJlc3VsdDsKKyAgICAgICAgICAgIG1lbWNweSgmcmVzdWx0
LCAmZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXRdLCAyKTsK
KyAgICAgICAgI2lmIFBMQVRGT1JNKEJJR19FTkRJQU4pCisgICAgICAgICAgICByZXN1bHQgPSAo
KHJlc3VsdCAmIDB4ZmYpIDw8IDgpIHwgKChyZXN1bHQgJiAweGZmMDApID4+IDgpOworICAgICAg
ICAjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAg
ICBpbmxpbmUgdWludDMyX3QgcmVhZFVpbnQzMihTaGFyZWRCdWZmZXIqIGRhdGEsIGludCBhZGRp
dGlvbmFsT2Zmc2V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCByZXN1
bHQ7CisgICAgICAgICAgICBtZW1jcHkoJnJlc3VsdCwgJmRhdGEtPmRhdGEoKVttX2RlY29kZWRP
ZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0XSwgNCk7CisgICAgICAgICNpZiBQTEFURk9STShCSUdf
RU5ESUFOKQorICAgICAgICAgICAgcmVzdWx0ID0gKChyZXN1bHQgJiAweGZmKSA8PCAyNCkgfCAo
KHJlc3VsdCAmIDB4ZmYwMCkgPDwgOCkgfAorICAgICAgICAgICAgICAgICgocmVzdWx0ICYgMHhm
ZjAwMDApID4+IDgpIHwgKChyZXN1bHQgJiAweGZmMDAwMDAwKSA+PiAyNCk7CisgICAgICAgICNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEFuIGluZGV4IGludG8gfG1fZGF0YXwgcmVwcmVzZW50aW5nIGhvdyBtdWNoIHdlJ3ZlIGFscmVh
ZHkgZGVjb2RlZC4KKyAgICAgICAgc2l6ZV90IG1fZGVjb2RlZE9mZnNldDsKKworICAgICAgICAv
LyBUaGUgZmlsZSBvZmZzZXQgYXQgd2hpY2ggdGhlIEJNUCBpbmZvIGhlYWRlciBzdGFydHMuCisg
ICAgICAgIHNpemVfdCBtX2hlYWRlck9mZnNldDsKKworICAgICAgICAvLyBUaGUgZmlsZSBvZmZz
ZXQgYXQgd2hpY2ggdGhlIGFjdHVhbCBpbWFnZSBiaXRzIHN0YXJ0LiAgV2hlbiBkZWNvZGluZyBJ
Q08KKyAgICAgICAgLy8gZmlsZXMsIHRoaXMgaXMgc2V0IHRvIDAsIHNpbmNlIGl0J3Mgbm90IHN0
b3JlZCBhbnl3aGVyZSBpbiBhIGhlYWRlcjsgdGhlCisgICAgICAgIC8vIHJlYWRlciBmdW5jdGlv
bnMgZXhwZWN0IHRoZSBpbWFnZSBkYXRhIHRvIHN0YXJ0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZQor
ICAgICAgICAvLyBoZWFkZXIgYW5kIChpZiBuZWNlc3NhcnkpIGNvbG9yIHRhYmxlLgorICAgICAg
ICBzaXplX3QgbV9pbWdEYXRhT2Zmc2V0OworCisgICAgICAgIC8vIElDT3Mgc3RvcmUgYSAxYnBw
ICJtYXNrIiBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFpbiBiaXRtYXAgaW1hZ2UgZGF0YQorICAg
ICAgICAvLyAoYW5kLCBjb25mdXNpbmdseSwgYWRkIGl0cyBoZWlnaHQgdG8gdGhlIGJpSGVpZ2h0
IHZhbHVlIGluIHRoZSBpbmZvCisgICAgICAgIC8vIGhlYWRlciwgdGh1cyBkb3VibGluZyBpdCku
ICBUaGlzIHZhcmlhYmxlIHRyYWNrcyB3aGV0aGVyIHdlIGhhdmUgc3VjaCBhCisgICAgICAgIC8v
IG1hc2sgYW5kIGlmIHdlJ3ZlIHN0YXJ0ZWQgZGVjb2RpbmcgaXQgeWV0LgorICAgICAgICBBbmRN
YXNrU3RhdGUgbV9hbmRNYXNrU3RhdGU7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBUaGUg
dmFyaW91cyBCTVAgY29tcHJlc3Npb24gdHlwZXMuICBXZSBkb24ndCBjdXJyZW50bHkgZGVjb2Rl
IGFsbCB0aGVzZS4KKyAgICAgICAgZW51bSBDb21wcmVzc2lvblR5cGUgeworICAgICAgICAgICAg
Ly8gVW5pdmVyc2FsIHR5cGVzCisgICAgICAgICAgICBSR0IgPSAwLAorICAgICAgICAgICAgUkxF
OCA9IDEsCisgICAgICAgICAgICBSTEU0ID0gMiwKKyAgICAgICAgICAgIC8vIFdpbmRvd3MgVjMr
IG9ubHkKKyAgICAgICAgICAgIEJJVEZJRUxEUyA9IDMsCisgICAgICAgICAgICBKUEVHID0gNCwK
KyAgICAgICAgICAgIFBORyA9IDUsCisgICAgICAgICAgICAvLyBPUy8yIDIueC1vbmx5CisgICAg
ICAgICAgICBIVUZGTUFOMUQsICAvLyBTdG9yZWQgaW4gZmlsZSBhcyAzCisgICAgICAgICAgICBS
TEUyNCwgICAgICAvLyBTdG9yZWQgaW4gZmlsZSBhcyA0CisgICAgICAgIH07CisKKyAgICAgICAg
Ly8gVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBXaW5kb3dzIEJJVE1BUElORk9IRUFERVIgYW5kIFJH
QlRSSVBMRSBzdHJ1Y3RzLAorICAgICAgICAvLyBidXQgd2l0aCB1bm5lY2Vzc2FyeSBlbnRyaWVz
IHJlbW92ZWQuCisgICAgICAgIHN0cnVjdCBCaXRtYXBJbmZvSGVhZGVyIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IGJpU2l6ZTsKKyAgICAgICAgICAgIGludDMyX3QgYmlXaWR0aDsKKyAgICAgICAg
ICAgIGludDMyX3QgYmlIZWlnaHQ7CisgICAgICAgICAgICB1aW50MTZfdCBiaUJpdENvdW50Owor
ICAgICAgICAgICAgQ29tcHJlc3Npb25UeXBlIGJpQ29tcHJlc3Npb247CisgICAgICAgICAgICB1
aW50MzJfdCBiaUNsclVzZWQ7CisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCBSR0JUcmlwbGUg
eworICAgICAgICAgICAgdWludDhfdCByZ2JCbHVlOworICAgICAgICAgICAgdWludDhfdCByZ2JH
cmVlbjsKKyAgICAgICAgICAgIHVpbnQ4X3QgcmdiUmVkOworICAgICAgICB9OworCisgICAgICAg
IC8vIERldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIEJNUCBpbmZvIGhlYWRlci4gIFJldHVybnMg
dHJ1ZSBpZiB0aGUgc2l6ZSBpcworICAgICAgICAvLyB2YWxpZC4KKyAgICAgICAgYm9vbCBnZXRJ
bmZvSGVhZGVyU2l6ZShTaGFyZWRCdWZmZXIqIGRhdGEpOworCisgICAgICAgIC8vIFByb2Nlc3Nl
cyB0aGUgQk1QIGluZm8gaGVhZGVyLiAgUmV0dXJucyB0cnVlIGlmIHRoZSBpbmZvIGhlYWRlciBj
b3VsZCBiZQorICAgICAgICAvLyBkZWNvZGVkLgorICAgICAgICBib29sIHByb2Nlc3NJbmZvSGVh
ZGVyKFNoYXJlZEJ1ZmZlciogZGF0YSk7CisKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZv
ciBwcm9jZXNzSW5mb0hlYWRlcigpIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCByZWFkaW5nIG9mCisg
ICAgICAgIC8vIGhlYWRlciB2YWx1ZXMgZnJvbSB0aGUgYnl0ZSBzdHJlYW0uICBSZXR1cm5zIGZh
bHNlIG9uIGVycm9yLgorICAgICAgICBib29sIHJlYWRJbmZvSGVhZGVyKFNoYXJlZEJ1ZmZlciog
ZGF0YSk7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaXMgYSBXaW5kb3dzIFY0
KyBCTVAuCisgICAgICAgIGlubGluZSBib29sIGlzV2luZG93c1Y0UGx1cygpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdpbmRvd3MgVjQgaW5mbyBoZWFkZXIgaXMgMTA4IGJ5dGVz
LiAgVjUgaXMgMTI0IGJ5dGVzLgorICAgICAgICAgICAgcmV0dXJuIChtX2luZm9IZWFkZXIuYmlT
aXplID09IDEwOCkgfHwgKG1faW5mb0hlYWRlci5iaVNpemUgPT0gMTI0KTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFJldHVybnMgZmFsc2UgaWYgY29uc2lzdGVuY3kgZXJyb3JzIGFyZSBmb3Vu
ZCBpbiB0aGUgaW5mbyBoZWFkZXIuCisgICAgICAgIGJvb2wgaXNJbmZvSGVhZGVyVmFsaWQoKSBj
b25zdDsKKworICAgICAgICAvLyBGb3IgQklfQklURklFTERTIGltYWdlcywgaW5pdGlhbGl6ZXMg
dGhlIG1fYml0TWFza3NbXSBhbmQgbV9iaXRPZmZzZXRzW10KKyAgICAgICAgLy8gYXJyYXlzLiAg
cHJvY2Vzc0luZm9IZWFkZXIoKSB3aWxsIGluaXRpYWxpemUgdGhlc2UgZm9yIG90aGVyIGNvbXBy
ZXNzaW9uCisgICAgICAgIC8vIHR5cGVzIHdoZXJlIG5lZWRlZC4KKyAgICAgICAgYm9vbCBwcm9j
ZXNzQml0bWFza3MoU2hhcmVkQnVmZmVyKiBkYXRhKTsKKworICAgICAgICAvLyBGb3IgcGFsZXR0
ZWQgaW1hZ2VzLCBhbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIHRoZSBtX2NvbG9yVGFibGVbXSBh
cnJheS4KKyAgICAgICAgYm9vbCBwcm9jZXNzQ29sb3JUYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEp
OworCisgICAgICAgIC8vIFByb2Nlc3NlcyBhbiBSTEUtZW5jb2RlZCBpbWFnZS4gIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZW50aXJlIGltYWdlIHdhcworICAgICAgICAvLyBkZWNvZGVkLgorICAgICAg
ICBib29sIHByb2Nlc3NSTEVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSk7CisKKyAgICAgICAgLy8g
UHJvY2Vzc2VzIGEgc2V0IG9mIG5vbi1STEUtY29tcHJlc3NlZCBwaXhlbHMuICBUd28gY2FzZXM6
CisgICAgICAgIC8vICAgKiBpblJMRSA9IHRydWU6IHRoZSBkYXRhIGlzIGluc2lkZSBhbiBSTEUt
ZW5jb2RlZCBiaXRtYXAuICBUcmllcyB0bworICAgICAgICAvLyAgICAgcHJvY2VzcyB8bnVtUGl4
ZWxzfCBwaXhlbHMgb24gdGhlIGN1cnJlbnQgcm93OyByZXR1cm5zIHRydWUgb24KKyAgICAgICAg
Ly8gICAgIHN1Y2Nlc3MuCisgICAgICAgIC8vICAgKiBpblJMRSA9IGZhbHNlOiB0aGUgZGF0YSBp
cyBpbnNpZGUgYSBub24tUkxFLWVuY29kZWQgYml0bWFwLgorICAgICAgICAvLyAgICAgfG51bVBp
eGVsc3wgaXMgaWdub3JlZC4gIEV4cGVjdHMgfG1fY29vcmR8IHRvIHBvaW50IGF0IHRoZSBiZWdp
bm5pbmcKKyAgICAgICAgLy8gICAgIG9mIHRoZSBuZXh0IHJvdyB0byBiZSBkZWNvZGVkLiAgVHJp
ZXMgdG8gcHJvY2VzcyBhcyBtYW55IGNvbXBsZXRlCisgICAgICAgIC8vICAgICByb3dzIGFzIHBv
c3NpYmxlLiAgUmV0dXJucyB0cnVlIGlmIHRoZSB3aG9sZSBpbWFnZSB3YXMgZGVjb2RlZC4KKyAg
ICAgICAgYm9vbCBwcm9jZXNzTm9uUkxFRGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgaW5S
TEUsIGludCBudW1QaXhlbHMpOworCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3Vy
cmVudCB5LWNvb3JkaW5hdGUgcGx1cyB8bnVtUm93c3wgd291bGQgYmUgcGFzdAorICAgICAgICAv
LyB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gIEhlcmUgInBsdXMiIG1lYW5zICJ0b3dhcmQgdGhlIGVu
ZCBvZiB0aGUgaW1hZ2UiLAorICAgICAgICAvLyBzbyBkb3dud2FyZHMgZm9yIG1faXNUb3BEb3du
IGltYWdlcyBhbmQgdXB3YXJkcyBvdGhlcndpc2UuCisgICAgICAgIGlubGluZSBib29sIHBhc3RF
bmRPZkltYWdlKGludCBudW1Sb3dzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9p
c1RvcERvd24KKyAgICAgICAgICAgICAgICA/ICgobV9jb29yZC55KCkgKyBudW1Sb3dzKSA+PSBz
aXplKCkuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgOiAoKG1fY29vcmQueSgpIC0gbnVtUm93
cykgPCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBpeGVsIGRhdGEg
Zm9yIHRoZSBjdXJyZW50IFggY29vcmRpbmF0ZSBpbiBhIHVpbnQzMl90LgorICAgICAgICAvLyBB
c3N1bWVzIG1fZGVjb2RlZE9mZnNldCBoYXMgYmVlbiBzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0
aGUgY3VycmVudAorICAgICAgICAvLyByb3cuCisgICAgICAgIC8vIE5PVEU6IE9ubHkgYXMgbWFu
eSBieXRlcyBvZiB0aGUgcmV0dXJuIHZhbHVlIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCB0aGUKKyAg
ICAgICAgLy8gcGl4ZWwgZGF0YSB3aWxsIGFjdHVhbGx5IGJlIHNldC4KKyAgICAgICAgaW5saW5l
IHVpbnQzMl90IHJlYWRDdXJyZW50UGl4ZWwoU2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQgYnl0ZXNQ
ZXJQaXhlbCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGFkZGl0aW9u
YWxPZmZzZXQgPSBtX2Nvb3JkLngoKSAqIGJ5dGVzUGVyUGl4ZWw7CisgICAgICAgICAgICBzd2l0
Y2ggKGJ5dGVzUGVyUGl4ZWwpIHsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVhZFVpbnQxNihkYXRhLCBhZGRpdGlvbmFsT2Zmc2V0KTsKKworICAgICAgICAg
ICAgY2FzZSAzOiB7CisgICAgICAgICAgICAgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgdGhhdCB3
ZSBuZXZlciBzZXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZgorICAgICAgICAgICAgICAg
IC8vIHRoZSByZXR1cm4gdmFsdWUgaGVyZSBpbiBsaXR0bGUtZW5kaWFuIG1vZGUsIHRoZSBjYWxs
ZXIgd29uJ3QKKyAgICAgICAgICAgICAgICAvLyByZWFkIGl0LgorICAgICAgICAgICAgICAgIHVp
bnQzMl90IHBpeGVsOworICAgICAgICAgICAgICAgIG1lbWNweSgmcGl4ZWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICZkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgYWRkaXRpb25hbE9m
ZnNldF0sIDMpOworICAgICAgICAjaWYgUExBVEZPUk0oQklHX0VORElBTikKKyAgICAgICAgICAg
ICAgICBwaXhlbCA9ICgocGl4ZWwgJiAweGZmMDApIDw8IDgpIHwgKChwaXhlbCAmIDB4ZmYwMDAw
KSA+PiA4KSB8CisgICAgICAgICAgICAgICAgICAgICgocGl4ZWwgJiAweGZmMDAwMDAwKSA+PiAy
NCk7CisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIHJldHVybiBwaXhlbDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFkVWludDMyKGRhdGEsIGFkZGl0aW9uYWxPZmZzZXQpOworCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmV0dXJu
cyB0aGUgdmFsdWUgb2YgdGhlIGRlc2lyZWQgY29tcG9uZW50ICgwLCAxLCAyLCAzID09IFIsIEcs
IEIsIEEpIGluCisgICAgICAgIC8vIHRoZSBnaXZlbiBwaXhlbCBkYXRhLgorICAgICAgICBpbmxp
bmUgdW5zaWduZWQgZ2V0Q29tcG9uZW50KHVpbnQzMl90IHBpeGVsLCBpbnQgY29tcG9uZW50KSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKChwaXhlbCAmIG1fYml0TWFza3Nb
Y29tcG9uZW50XSkgPj4gbV9iaXRTaGlmdHNSaWdodFtjb21wb25lbnRdKQorICAgICAgICAgICAg
ICAgIDw8IG1fYml0U2hpZnRzTGVmdFtjb21wb25lbnRdOworICAgICAgICB9CisKKyAgICAgICAg
aW5saW5lIHVuc2lnbmVkIGdldEFscGhhKHVpbnQzMl90IHBpeGVsKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICAvLyBGb3IgaW1hZ2VzIHdpdGhvdXQgYWxwaGEsIHJldHVybiBhbHBoYSBv
ZiAweGZmLgorICAgICAgICAgICAgaWYgKG1fYml0TWFza3NbM10gPT0gMCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMHhmZjsKKworICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudChwaXhl
bCwgMyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHBpeGVsIHRv
IHRoZSBjb2xvciBnaXZlbiBieSB8Y29sb3JJbmRleHwuICBUaGlzIGFsc28KKyAgICAgICAgLy8g
aW5jcmVtZW50cyB0aGUgcmVsZXZhbnQgbG9jYWwgdmFyaWFibGVzIHRvIG1vdmUgdGhlIGN1cnJl
bnQgcGl4ZWwgcmlnaHQKKyAgICAgICAgLy8gYnkgb25lLgorICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRJKHNpemVfdCBjb2xvckluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBzZXRSR0JBKG1f
Y29sb3JUYWJsZVtjb2xvckluZGV4XS5yZ2JSZWQsIG1fY29sb3JUYWJsZVtjb2xvckluZGV4XS5y
Z2JHcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgbV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJn
YkJsdWUsIDB4ZmYpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTGlrZSBzZXRJKCksIGJ1dCB3
aXRoIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudCB2YWx1ZXMgc3BlY2lmaWVkLgorICAgICAgICBp
bmxpbmUgdm9pZCBzZXRSR0JBKHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVk
IGJsdWUsIHVuc2lnbmVkIGFscGhhKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuZmlyc3QoKS5zZXRSR0JBKG1fY29vcmQueCgpLCBtX2Nvb3JkLnkoKSwgcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICAgICAgbV9jb29yZC5tb3ZlKDEsIDApOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gRmlsbHMgcGl4ZWxzIGZyb20gdGhlIGN1cnJlbnQgWC1jb29y
ZGluYXRlIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywKKyAgICAgICAgLy8gfGVuZENvb3JkfCB3
aXRoIHRoZSBjb2xvciBnaXZlbiBieSB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzLiAgVGhpcyBh
bHNvCisgICAgICAgIC8vIGluY3JlbWVudHMgdGhlIHJlbGV2YW50IGxvY2FsIHZhcmlhYmxlcyB0
byBtb3ZlIHRoZSBjdXJyZW50IHBpeGVsIHJpZ2h0CisgICAgICAgIC8vIHRvIHxlbmRDb29yZHwu
CisgICAgICAgIGlubGluZSB2b2lkIGZpbGxSR0JBKGludCBlbmRDb29yZCwgdW5zaWduZWQgcmVk
LCB1bnNpZ25lZCBncmVlbiwgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgYWxwaGEpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHdoaWxlIChtX2Nvb3JkLngoKSA8IGVuZENvb3JkKQorICAgICAgICAg
ICAgICAgIHNldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmVzZXRzIHRoZSByZWxldmFudCBsb2NhbCB2YXJpYWJsZXMgdG8gc3RhcnQgZHJh
d2luZyBhdCB0aGUgbGVmdCBlZGdlIG9mCisgICAgICAgIC8vIHRoZSAibmV4dCIgcm93LCB3aGVy
ZSAibmV4dCIgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGN1cnJlbnQgcm93IGRlcGVuZGluZworICAg
ICAgICAvLyBvbiB0aGUgdmFsdWUgb2YgfG1faXNUb3BEb3dufC4KKyAgICAgICAgdm9pZCBtb3Zl
QnVmZmVyVG9OZXh0Um93KCk7CisKKyAgICAgICAgLy8gVGhlIEJNUCBpbmZvIGhlYWRlci4KKyAg
ICAgICAgQml0bWFwSW5mb0hlYWRlciBtX2luZm9IZWFkZXI7CisKKyAgICAgICAgLy8gVHJ1ZSBp
ZiB0aGlzIGlzIGFuIE9TLzIgMS54IChha2EgV2luZG93cyAyLngpIEJNUC4gIFRoZSBzdHJ1Y3Qg
bGF5b3V0cworICAgICAgICAvLyBmb3IgdGhpcyB0eXBlIG9mIEJNUCBhcmUgc2xpZ2h0bHkgZGlm
ZmVyZW50IGZyb20gdGhlIGxhdGVyLCBtb3JlIGNvbW1vbgorICAgICAgICAvLyBmb3JtYXRzLgor
ICAgICAgICBib29sIG1faXNPUzIxeDsKKworICAgICAgICAvLyBUcnVlIGlmIHRoaXMgaXMgYW4g
T1MvMiAyLnggQk1QLiAgVGhlIG1lYW5pbmdzIG9mIGNvbXByZXNzaW9uIHR5cGVzIDMKKyAgICAg
ICAgLy8gYW5kIDQgZm9yIHRoaXMgdHlwZSBvZiBCTVAgZGlmZmVyIGZyb20gV2luZG93cyBWMysg
Qk1Qcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGZhbHNlbHkgbmVnYXRp
dmUgaW4gc29tZSBjYXNlcywgYnV0IG9ubHkgb25lcyB3aGVyZSB0aGUgd2F5CisgICAgICAgIC8v
IHdlIG1pc2ludGVycHJldCB0aGUgZGF0YSBpcyBpcnJlbGV2YW50LgorICAgICAgICBib29sIG1f
aXNPUzIyeDsKKworICAgICAgICAvLyBUcnVlIGlmIHRoZSBCTVAgaXMgbm90IHZlcnRpY2FsbHkg
ZmxpcHBlZCwgdGhhdCBpcywgdGhlIGZpcnN0IGxpbmUgb2YKKyAgICAgICAgLy8gcmFzdGVyIGRh
dGEgaW4gdGhlIGZpbGUgaXMgdGhlIHRvcCBsaW5lIG9mIHRoZSBpbWFnZS4KKyAgICAgICAgYm9v
bCBtX2lzVG9wRG93bjsKKworICAgICAgICAvLyBUaGVzZSBmbGFncyBnZXQgc2V0IHRvIGZhbHNl
IGFzIHdlIGZpbmlzaCBlYWNoIHByb2Nlc3Npbmcgc3RhZ2UuCisgICAgICAgIGJvb2wgbV9uZWVk
VG9Qcm9jZXNzQml0bWFza3M7CisgICAgICAgIGJvb2wgbV9uZWVkVG9Qcm9jZXNzQ29sb3JUYWJs
ZTsKKworICAgICAgICAvLyBNYXNrcy9vZmZzZXRzIGZvciB0aGUgY29sb3IgdmFsdWVzIGZvciBu
b24tcGFsZXR0ZSBmb3JtYXRzLiAgVGhlc2UgYXJlCisgICAgICAgIC8vIGJpdHdpc2UsIHdpdGgg
YXJyYXkgZW50cmllcyAwLCAxLCAyLCAzIGNvcnJlc3BvbmRpbmcgdG8gUiwgRywgQiwgQS4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJpZ2h0L2xlZnQgc2hpZnQgdmFsdWVzIGFyZSBtZWFu
dCB0byBiZSBhcHBsaWVkIGFmdGVyIHRoZSBtYXNrcy4KKyAgICAgICAgLy8gV2UgbmVlZCB0byBy
aWdodCBzaGlmdCB0byBjb21wZW5zYXRlIGZvciB0aGUgYml0ZmllbGRzJyBvZmZzZXRzIGludG8g
dGhlCisgICAgICAgIC8vIDMyIGJpdHMgb2YgcGl4ZWwgZGF0YSwgYW5kIGxlZnQgc2hpZnQgdG8g
c2NhbGUgdGhlIGNvbG9yIHZhbHVlcyB1cCBmb3IKKyAgICAgICAgLy8gZmllbGRzIHdpdGggbGVz
cyB0aGFuIDggYml0cyBvZiBwcmVjaXNpb24uICBTYWRseSwgd2UgY2FuJ3QganVzdCBjb21iaW5l
CisgICAgICAgIC8vIHRoZXNlIGludG8gb25lIHNoaWZ0IHZhbHVlIGJlY2F1c2UgdGhlIG5ldCBz
aGlmdCBhbW91bnQgY291bGQgZ28gZWl0aGVyCisgICAgICAgIC8vIGRpcmVjdGlvbi4gIChJZiBv
bmx5ICI8PCAteCIgd2VyZSBlcXVpdmFsZW50IHRvICI+PiB4Ii4uLikKKyAgICAgICAgdWludDMy
X3QgbV9iaXRNYXNrc1s0XTsKKyAgICAgICAgaW50IG1fYml0U2hpZnRzUmlnaHRbNF07CisgICAg
ICAgIGludCBtX2JpdFNoaWZ0c0xlZnRbNF07CisKKyAgICAgICAgLy8gVGhlIGNvbG9yIHBhbGV0
dGUsIGZvciBwYWxldHRlZCBmb3JtYXRzLgorICAgICAgICBzaXplX3QgbV90YWJsZVNpemVJbkJ5
dGVzOworICAgICAgICBWZWN0b3I8UkdCVHJpcGxlPiBtX2NvbG9yVGFibGU7CisKKyAgICAgICAg
Ly8gVGhlIGNvb3JkaW5hdGUgdG8gd2hpY2ggd2UndmUgZGVjb2RlZCB0aGUgaW1hZ2UuCisgICAg
ICAgIEludFBvaW50IG1fY29vcmQ7CisKKyAgICAgICAgLy8gVmFyaWFibGVzIHRoYXQgdHJhY2sg
d2hldGhlciB3ZSd2ZSBzZWVuIHBpeGVscyB3aXRoIGFscGhhIHZhbHVlcyAhPSAwCisgICAgICAg
IC8vIGFuZCA9PSAwLCByZXNwZWN0aXZlbHkuICBTZWUgY29tbWVudHMgaW4gcHJvY2Vzc05vblJM
RURhdGEoKSBvbiBob3cKKyAgICAgICAgLy8gdGhlc2UgYXJlIHVzZWQuCisgICAgICAgIGJvb2wg
bV9zZWVuTm9uWmVyb0FscGhhUGl4ZWw7CisgICAgICAgIGJvb2wgbV9zZWVuWmVyb0FscGhhUGl4
ZWw7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ2MzApCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9JQ09JbWFnZURlY29kZXIuY3BwOjQ0NjMwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSUNPSW1hZ2VEZWNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTnVtYmVy
IG9mIGJpdHMgaW4gLklDTy8uQ1VSIHVzZWQgdG8gc3RvcmUgdGhlIGRpcmVjdG9yeSBhbmQgaXRz
IGVudHJpZXMsCisvLyByZXNwZWN0aXZlbHkgKGRvZXNuJ3QgbWF0Y2ggc2l6ZW9mIHZhbHVlcyBm
b3IgbWVtYmVyIHN0cnVjdHMgc2luY2Ugd2Ugb21pdAorLy8gc29tZSBmaWVsZHMpLgorc3RhdGlj
IGNvbnN0IHNpemVfdCBzaXplT2ZEaXJlY3RvcnkgPSA2Oworc3RhdGljIGNvbnN0IHNpemVfdCBz
aXplT2ZEaXJFbnRyeSA9IDE2OworCit2b2lkIElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlSW1hZ2Uo
U2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIC8vIFJlYWQgYW5kIHByb2Nlc3MgZGlyZWN0b3J5
LgorICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0IDwgc2l6ZU9mRGlyZWN0b3J5KSAmJiAhcHJvY2Vz
c0RpcmVjdG9yeShkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUmVhZCBhbmQgcHJv
Y2VzcyBkaXJlY3RvcnkgZW50cmllcy4KKyAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA8IChzaXpl
T2ZEaXJlY3RvcnkgKyAobV9kaXJlY3RvcnkuaWRDb3VudCAqIHNpemVPZkRpckVudHJ5KSkpCisg
ICAgICAgICYmICFwcm9jZXNzRGlyZWN0b3J5RW50cmllcyhkYXRhKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ2hlY2sgaWYgdGhpcyBlbnRyeSBpcyBhIFBORzsgd2UgbmVlZCA0IGJ5dGVz
IHRvIGNoZWNrIHRoZSBtYWdpYyBudW1iZXIuCisgICAgaWYgKG1faW1hZ2VUeXBlID09IFVua25v
d24pIHsKKyAgICAgICAgaWYgKGRhdGEtPnNpemUoKSA8IChtX2RpckVudHJ5LmR3SW1hZ2VPZmZz
ZXQgKyA0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9pbWFnZVR5cGUgPQorICAg
ICAgICAgICAgc3RybmNtcCgmZGF0YS0+ZGF0YSgpW21fZGlyRW50cnkuZHdJbWFnZU9mZnNldF0s
ICJceDg5UE5HIiwgNCkgPworICAgICAgICAgICAgQk1QIDogUE5HOworICAgIH0KKworICAgIC8v
IERlY29kZSBzZWxlY3RlZCBlbnRyeS4KKyAgICBpZiAobV9pbWFnZVR5cGUgPT0gUE5HKQorICAg
ICAgICBkZWNvZGVQTkcoZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBkb24ndCB0cnkgdG8gbGltaXQgdGhlIGJ5dGVzIHdlIGdpdmUgdG8gdGhlIGRlY29kZXIgdG8K
KyAgICAgICAgLy8ganVzdCB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIGljb24gZGlyZWN0b3J5
LiAgSWYgdGhlIHNpemUgZ2l2ZW4gaW4KKyAgICAgICAgLy8gdGhlIGRpcmVjdG9yeSBpcyBpbnN1
ZmZpY2llbnQgdG8gZGVjb2RlIHRoZSB3aG9sZSBpbWFnZSwgdGhlIGltYWdlIGlzCisgICAgICAg
IC8vIGNvcnJ1cHQgYW55d2F5LCBzbyB3aGF0ZXZlciB3ZSBkbyBtYXkgYmUgd3JvbmcuICBUaGUg
ZWFzaWVzdCBjaG9pY2UKKyAgICAgICAgLy8gKHdoaWNoIHdlIGRvIGhlcmUpIGlzIHRvIHNpbXBs
eSBhZ2dyZXNzaXZlbHkgY29uc3VtZSBieXRlcyB1bnRpbCB3ZQorICAgICAgICAvLyBydW4gb3V0
IG9mIGJ5dGVzLCBmaW5pc2ggZGVjb2RpbmcsIG9yIGhpdCBhIHNlcXVlbmNlIHRoYXQgbWFrZXMg
dGhlCisgICAgICAgIC8vIGRlY29kZXIgZmFpbC4KKyAgICAgICAgZGVjb2RlQk1QKGRhdGEpOwor
ICAgIH0KK30KKworUkdCQTMyQnVmZmVyKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIChtX2ltYWdlVHlwZSA9PSBQTkcpID8g
bV9wbmdEZWNvZGVyLmZyYW1lQnVmZmVyQXRJbmRleCgwKSA6CisgICAgICAgIEJNUEltYWdlUmVh
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Cit9CisKK2Jvb2wgSUNPSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIHJldHVybiAobV9pbWFnZVR5cGUgPT0gUE5H
KSA/IG1fcG5nRGVjb2Rlci5pc1NpemVBdmFpbGFibGUoKSA6CisgICAgICAgIEJNUEltYWdlUmVh
ZGVyOjppc1NpemVBdmFpbGFibGUoKTsKK30KKworSW50U2l6ZSBJQ09JbWFnZURlY29kZXI6OnNp
emUoKSBjb25zdAoreworICAgIHJldHVybiAobV9pbWFnZVR5cGUgPT0gUE5HKSA/IG1fcG5nRGVj
b2Rlci5zaXplKCkgOiBCTVBJbWFnZVJlYWRlcjo6c2l6ZSgpOworfQorCitib29sIElDT0ltYWdl
RGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeShTaGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgLy8g
UmVhZCBkaXJlY3RvcnkuCisgICAgQVNTRVJUKCFtX2RlY29kZWRPZmZzZXQpOworICAgIGlmIChk
YXRhLT5zaXplKCkgPCBzaXplT2ZEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjb25zdCB1aW50MTZfdCBmaWxlVHlwZSA9IHJlYWRVaW50MTYoZGF0YSwgMik7CisgICAgbV9k
aXJlY3RvcnkuaWRDb3VudCA9IHJlYWRVaW50MTYoZGF0YSwgNCk7CisgICAgbV9kZWNvZGVkT2Zm
c2V0ID0gc2l6ZU9mRGlyZWN0b3J5OworCisgICAgLy8gU2VlIGlmIHRoaXMgaXMgYW4gaWNvbiBm
aWxldHlwZSB3ZSB1bmRlcnN0YW5kLCBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYXQKKyAgICAvLyBs
ZWFzdCBvbmUgZW50cnkgaW4gdGhlIGRpcmVjdG9yeS4KKyAgICBlbnVtIHsKKyAgICAgICAgSUNP
TiA9IDEsCisgICAgICAgIENVUlNPUiA9IDIsCisgICAgfTsKKyAgICBpZiAoKChmaWxlVHlwZSAh
PSBJQ09OKSAmJiAoZmlsZVR5cGUgIT0gQ1VSU09SKSkgfHwKKyAgICAgICAgICAgIChtX2RpcmVj
dG9yeS5pZENvdW50ID09IDApKQorICAgICAgICBtX2ZhaWxlZCA9IHRydWU7CisKKyAgICByZXR1
cm4gIW1fZmFpbGVkOworfQorCitib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9y
eUVudHJpZXMoU2hhcmVkQnVmZmVyKiBkYXRhKQoreworICAgIC8vIFJlYWQgZGlyZWN0b3J5IGVu
dHJpZXMuCisgICAgQVNTRVJUKG1fZGVjb2RlZE9mZnNldCA9PSBzaXplT2ZEaXJlY3RvcnkpOwor
ICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gZGF0YS0+c2l6ZSgpKSB8fCAoZGF0YS0+c2l6ZSgp
IC0gbV9kZWNvZGVkT2Zmc2V0KSA8CisgICAgICAgICAgICAobV9kaXJlY3RvcnkuaWRDb3VudCAq
IHNpemVPZkRpckVudHJ5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9kaXJlY3RvcnkuaWRDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IEljb25E
aXJlY3RvcnlFbnRyeSBkaXJFbnRyeSA9IHJlYWREaXJlY3RvcnlFbnRyeShkYXRhKTsKKyAgICAg
ICAgaWYgKChpID09IDApIHx8IGlzQmV0dGVyRW50cnkoZGlyRW50cnkpKQorICAgICAgICAgICAg
bV9kaXJFbnRyeSA9IGRpckVudHJ5OworICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3Bl
Y2lmaWVkIGltYWdlIG9mZnNldCBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeQorICAg
IC8vIGVudHJpZXMsIGFuZCB0aGF0IHRoZSBvZmZzZXQgaXNuJ3Qgc28gbGFyZ2UgdGhhdCBpdCBv
dmVyZmxvd3Mgd2hlbiB3ZSBhZGQKKyAgICAvLyA0IGJ5dGVzIHRvIGl0ICh3aGljaCB3ZSBkbyBp
biBkZWNvZGVJbWFnZSgpIHdoaWxlIGVuc3VyaW5nIGl0J3Mgc2FmZSB0bworICAgIC8vIGV4YW1p
bmUgdGhlIGZpcnN0IDQgYnl0ZXMgb2YgdGhlIGltYWdlIGRhdGEpLgorICAgIGlmICgobV9kaXJF
bnRyeS5kd0ltYWdlT2Zmc2V0IDwgbV9kZWNvZGVkT2Zmc2V0KSB8fAorICAgICAgICAgICAgKCht
X2RpckVudHJ5LmR3SW1hZ2VPZmZzZXQgKyA0KSA8IG1fZGlyRW50cnkuZHdJbWFnZU9mZnNldCkp
IHsKKyAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBSZWFkeSB0byBkZWNvZGUgdGhlIGltYWdlIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0
LgorICAgIG1fZGVjb2RlZE9mZnNldCA9IG1faGVhZGVyT2Zmc2V0ID0gbV9kaXJFbnRyeS5kd0lt
YWdlT2Zmc2V0OworICAgIHJldHVybiB0cnVlOworfQorCitJQ09JbWFnZURlY29kZXI6Okljb25E
aXJlY3RvcnlFbnRyeSBJQ09JbWFnZURlY29kZXI6OnJlYWREaXJlY3RvcnlFbnRyeSgKKyAgICBT
aGFyZWRCdWZmZXIqIGRhdGEpCit7CisgICAgLy8gUmVhZCBpY29uIGRhdGEuCisgICAgSWNvbkRp
cmVjdG9yeUVudHJ5IGVudHJ5OworICAgIGVudHJ5LmJXaWR0aCA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KGRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXRdKTsKKyAgICBpZiAoZW50cnkuYldpZHRo
ID09IDApCisgICAgICAgIGVudHJ5LmJXaWR0aCA9IDI1NjsKKyAgICBlbnRyeS5iSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDFdKTsK
KyAgICBpZiAoZW50cnkuYkhlaWdodCA9PSAwKQorICAgICAgICBlbnRyeS5iSGVpZ2h0ID0gMjU2
OworICAgIGVudHJ5LndCaXRDb3VudCA9IHJlYWRVaW50MTYoZGF0YSwgNik7CisgICAgZW50cnku
ZHdJbWFnZU9mZnNldCA9IHJlYWRVaW50MzIoZGF0YSwgMTIpOworCisgICAgLy8gU29tZSBpY29u
cyBkb24ndCBoYXZlIGEgYml0IGRlcHRoLCBvbmx5IGEgY29sb3IgY291bnQuICBDb252ZXJ0IHRo
ZQorICAgIC8vIGNvbG9yIGNvdW50IHRvIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeSBiaXQgZGVwdGgu
ICBJdCBkb2Vzbid0IG1hdHRlciBpZgorICAgIC8vIHRoaXMgaXNuJ3QgcXVpdGUgd2hhdCB0aGUg
Yml0bWFwIGluZm8gaGVhZGVyIHNheXMgbGF0ZXIsIGFzIHdlIG9ubHkgdXNlCisgICAgLy8gdGhp
cyB2YWx1ZSB0byBkZXRlcm1pbmUgd2hpY2ggaWNvbiBlbnRyeSBpcyBiZXN0LgorICAgIGlmICgh
ZW50cnkud0JpdENvdW50KSB7CisgICAgICAgIHVpbnQ4X3QgY29sb3JDb3VudCA9IGRhdGEtPmRh
dGEoKVttX2RlY29kZWRPZmZzZXQgKyAyXTsKKyAgICAgICAgaWYgKGNvbG9yQ291bnQpIHsKKyAg
ICAgICAgICAgIGZvciAoLS1jb2xvckNvdW50OyBjb2xvckNvdW50OyBjb2xvckNvdW50ID4+PSAx
KQorICAgICAgICAgICAgICAgICsrZW50cnkud0JpdENvdW50OworICAgICAgICB9CisgICAgfQor
CisgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IHNpemVPZkRpckVudHJ5OworICAgIHJldHVybiBlbnRy
eTsKK30KKworYm9vbCBJQ09JbWFnZURlY29kZXI6OmlzQmV0dGVyRW50cnkoY29uc3QgSWNvbkRp
cmVjdG9yeUVudHJ5JiBlbnRyeSkgY29uc3QKK3sKKyAgICBjb25zdCBJbnRTaXplIGVudHJ5U2l6
ZShlbnRyeS5iV2lkdGgsIGVudHJ5LmJIZWlnaHQpOworICAgIGNvbnN0IEludFNpemUgZGlyRW50
cnlTaXplKG1fZGlyRW50cnkuYldpZHRoLCBtX2RpckVudHJ5LmJIZWlnaHQpOworICAgIGNvbnN0
IGludCBlbnRyeUFyZWEgPSBlbnRyeS5iV2lkdGggKiBlbnRyeS5iSGVpZ2h0OworICAgIGNvbnN0
IGludCBkaXJFbnRyeUFyZWEgPSBtX2RpckVudHJ5LmJXaWR0aCAqIG1fZGlyRW50cnkuYkhlaWdo
dDsKKworICAgIGlmICgoZW50cnlTaXplICE9IGRpckVudHJ5U2l6ZSkgJiYgIW1fcHJlZmVycmVk
SWNvblNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEFuIGljb24gb2YgZXhhY3RseSB0aGUg
cHJlZmVycmVkIHNpemUgaXMgYmVzdC4KKyAgICAgICAgaWYgKGVudHJ5U2l6ZSA9PSBtX3ByZWZl
cnJlZEljb25TaXplKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChkaXJF
bnRyeVNpemUgPT0gbV9wcmVmZXJyZWRJY29uU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBUaGUgaWNvbiBjbG9zZXN0IHRvIHRoZSBwcmVmZXJyZWQgYXJlYSB3
aXRob3V0IGJlaW5nIHNtYWxsZXIgaXMKKyAgICAgICAgLy8gYmV0dGVyLgorICAgICAgICBpZiAo
ZW50cnlBcmVhICE9IGRpckVudHJ5QXJlYSkgeworICAgICAgICAgICAgcmV0dXJuIChlbnRyeUFy
ZWEgPCBkaXJFbnRyeUFyZWEpCisgICAgICAgICAgICAgICAgJiYgKGVudHJ5QXJlYSA+PSAobV9w
cmVmZXJyZWRJY29uU2l6ZS53aWR0aCgpICogbV9wcmVmZXJyZWRJY29uU2l6ZS5oZWlnaHQoKSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGFyZ2VyIGljb25zIGFyZSBiZXR0ZXIuCisg
ICAgaWYgKGVudHJ5QXJlYSAhPSBkaXJFbnRyeUFyZWEpCisgICAgICAgIHJldHVybiAoZW50cnlB
cmVhID4gZGlyRW50cnlBcmVhKTsKKworICAgIC8vIEhpZ2hlciBiaXQtZGVwdGggaWNvbnMgYXJl
IGJldHRlci4KKyAgICByZXR1cm4gKGVudHJ5LndCaXRDb3VudCA+IG1fZGlyRW50cnkud0JpdENv
dW50KTsKK30KKwordm9pZCBJQ09JbWFnZURlY29kZXI6OmRlY29kZVBORyhTaGFyZWRCdWZmZXIq
IGRhdGEpCit7CisgICAgLy8gQ29weSBvdXQgUE5HIGRhdGEgdG8gYSBzZXBhcmF0ZSB2ZWN0b3Ig
YW5kIGluc3RhbnRpYXRlIFBORyBkZWNvZGVyLgorICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8g
c2F2ZSB0aGlzIGNvcHksIGlmIEkgY291bGQgZmlndXJlIG91dCBob3cgdG8ganVzdAorICAgIC8v
IG9mZnNldCB0aGUgcGVyY2VpdmVkIHN0YXJ0IG9mIHxkYXRhfCBieSB8bV9kaXJFbnRyeS5kd0lt
YWdlT2Zmc2V0fCB3aGVuCisgICAgLy8gcGFzc2luZyBpdCB0byBzZXREYXRhKCkuLi4KKyAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBwbmdEYXRhKAorICAgICAgICBTaGFyZWRCdWZmZXI6OmNyZWF0
ZSgmZGF0YS0+ZGF0YSgpW21fZGlyRW50cnkuZHdJbWFnZU9mZnNldF0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEtPnNpemUoKSAtIG1fZGlyRW50cnkuZHdJbWFnZU9mZnNldCkp
OworICAgIG1fcG5nRGVjb2Rlci5zZXREYXRhKHBuZ0RhdGEuZ2V0KCksIHRydWUpOworCisgICAg
Ly8gRGVjb2RlIFBORyBhcyBhIHNpZGUgZWZmZWN0IG9mIGFza2luZyBmb3IgdGhlIGZyYW1lLiAg
U3RyYW5nZWx5LCBpdCdzCisgICAgLy8gc2VlbWluZ2x5IHVuc2FmZSB0byBjYWxsIGRlY29kZSgp
IG9yIGlzU2l6ZUF2YWlsYWJsZSgpIGJlZm9yZSBjYWxsaW5nCisgICAgLy8gdGhpcywgYXMgdGhp
cyBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGVubGFyZ2VzIHRoZSBmcmFtZWJ1ZmZlciB0bwor
ICAgIC8vIG5vbnplcm8gc2l6ZSwgYW5kIGJlZm9yZSB0aGlzIGhhcHBlbnMgYW55IGRlY29kZWQg
aW1hZ2UgZGF0YSBpcyBzaWxlbnRseQorICAgIC8vIHRocm93biBhd2F5IGFuZCBuZXZlciBkZWNv
ZGVkIGFnYWluICghKS4KKyAgICBtX3BuZ0RlY29kZXIuZnJhbWVCdWZmZXJBdEluZGV4KDApOwor
ICAgIG1fZmFpbGVkID0gbV9wbmdEZWNvZGVyLmZhaWxlZCgpOworCisgICAgLy8gU2FuaXR5LWNo
ZWNrIHRoYXQgdGhlIHNpemUgaXMgd2hhdCB3ZSBleHBlY3RlZC4KKyAgICBpZiAoaXNTaXplQXZh
aWxhYmxlKCkgJiYgKChzaXplKCkud2lkdGgoKSAhPSBtX2RpckVudHJ5LmJXaWR0aCkgfHwKKyAg
ICAgICAgICAgIChzaXplKCkuaGVpZ2h0KCkgIT0gbV9kaXJFbnRyeS5iSGVpZ2h0KSkpCisgICAg
ICAgIG1fZmFpbGVkID0gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0
NjMwKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSUNPSW1hZ2VE
ZWNvZGVyLmg6NDQ2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIElDT0ltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIElDT0ltYWdlRGVjb2Rlcl9oCisK
KyNpbmNsdWRlICJCTVBJbWFnZVJlYWRlci5oIgorI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhl
IElDTyBhbmQgQ1VSIGltYWdlIGZvcm1hdHMuCisgICAgY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDog
cHVibGljIEJNUEltYWdlUmVhZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIFNlZSBjb21t
ZW50cyBvbiB8bV9wcmVmZXJyZWRJY29uU2l6ZXwgYmVsb3cuCisgICAgICAgIElDT0ltYWdlRGVj
b2Rlcihjb25zdCBJbnRTaXplJiBwcmVmZXJyZWRJY29uU2l6ZSkKKyAgICAgICAgICAgIDogbV9w
cmVmZXJyZWRJY29uU2l6ZShwcmVmZXJyZWRJY29uU2l6ZSkKKyAgICAgICAgICAgICwgbV9pbWFn
ZVR5cGUoVW5rbm93bikKKyAgICAgICAgeworICAgICAgICAgICAgbV9hbmRNYXNrU3RhdGUgPSBO
b3RZZXREZWNvZGVkOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiaWNvIjsgfQorCisgICAgICAgIC8vIEJNUElt
YWdlUmVhZGVyCisgICAgICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIq
IGRhdGEpOworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCk7CisKKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRTaXpl
IHNpemUoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGVudW0gSW1hZ2VUeXBlIHsK
KyAgICAgICAgICAgIFVua25vd24sCisgICAgICAgICAgICBCTVAsCisgICAgICAgICAgICBQTkcs
CisgICAgICAgIH07CisKKyAgICAgICAgLy8gVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBXaW5kb3dz
IElDT05ESVIgYW5kIElDT05ESVJFTlRSWSBzdHJ1Y3RzLCBidXQKKyAgICAgICAgLy8gd2l0aCB1
bm5lY2Vzc2FyeSBlbnRyaWVzIHJlbW92ZWQuCisgICAgICAgIHN0cnVjdCBJY29uRGlyZWN0b3J5
IHsKKyAgICAgICAgICAgIHVpbnQxNl90IGlkQ291bnQ7CisgICAgICAgIH07CisgICAgICAgIHN0
cnVjdCBJY29uRGlyZWN0b3J5RW50cnkgeworICAgICAgICAgICAgdWludDE2X3QgYldpZHRoOyAg
IC8vIDE2IGJpdHMgc28gd2UgY2FuIHJlcHJlc2VudCAyNTYgYXMgMjU2LCBub3QgMAorICAgICAg
ICAgICAgdWludDE2X3QgYkhlaWdodDsgIC8vICIKKyAgICAgICAgICAgIHVpbnQxNl90IHdCaXRD
b3VudDsKKyAgICAgICAgICAgIHVpbnQzMl90IGR3SW1hZ2VPZmZzZXQ7CisgICAgICAgIH07CisK
KyAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBJQ09ORElSIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IGRhdGEuICBSZXR1cm5zIHRydWUgaWYgdGhlCisgICAgICAgIC8vIGRpcmVjdG9yeSBjb3VsZCBi
ZSBkZWNvZGVkLgorICAgICAgICBib29sIHByb2Nlc3NEaXJlY3RvcnkoU2hhcmVkQnVmZmVyKik7
CisKKyAgICAgICAgLy8gUHJvY2Vzc2VzIHRoZSBJQ09ORElSRU5UUlkgcmVjb3JkcyBhZnRlciB0
aGUgZGlyZWN0b3J5LiAgS2VlcHMgdGhlCisgICAgICAgIC8vICJiZXN0IiBlbnRyeSBhcyB0aGUg
b25lIHdlJ2xsIGRlY29kZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50cmllcyBjb3VsZAorICAg
ICAgICAvLyBiZSBkZWNvZGVkLgorICAgICAgICBib29sIHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVz
KFNoYXJlZEJ1ZmZlciopOworCisgICAgICAgIC8vIFJlYWRzIGFuZCByZXR1cm5zIGEgZGlyZWN0
b3J5IGVudHJ5IGZyb20gdGhlIGN1cnJlbnQgb2Zmc2V0IGludG8gfGRhdGF8LgorICAgICAgICBJ
Y29uRGlyZWN0b3J5RW50cnkgcmVhZERpcmVjdG9yeUVudHJ5KFNoYXJlZEJ1ZmZlciopOworCisg
ICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB8ZW50cnl8IGlzIGEgcHJlZmVyYWJsZSBpY29uIGVu
dHJ5IHRvIG1fZGlyRW50cnkuCisgICAgICAgIC8vIExhcmdlciBzaXplcywgb3IgZ3JlYXRlciBi
aXRkZXB0aHMgYXQgdGhlIHNhbWUgc2l6ZSwgYXJlIHByZWZlcmFibGUuCisgICAgICAgIGJvb2wg
aXNCZXR0ZXJFbnRyeShjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmKSBjb25zdDsKKworICAgICAg
ICAvLyBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgdG8gYmUgZGVjb2RlZCBpcyBhIFBORyByYXRoZXIg
dGhhbiBhIEJNUC4KKyAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgUE5HSW1hZ2VEZWNvZGVyLCBk
ZWNvZGVzIHRoZSBpbWFnZSwgYW5kIGNvcGllcyB0aGUKKyAgICAgICAgLy8gcmVzdWx0cyBsb2Nh
bGx5LgorICAgICAgICB2b2lkIGRlY29kZVBORyhTaGFyZWRCdWZmZXIqKTsKKworICAgICAgICAv
LyBUaGUgZW50cnkgc2l6ZSB3ZSBzaG91bGQgcHJlZmVyLiAgSWYgdGhpcyBpcyBlbXB0eSwgd2Ug
Y2hvb3NlIHRoZQorICAgICAgICAvLyBsYXJnZXN0IGF2YWlsYWJsZSBzaXplLiAgSWYgbm8gZW50
cmllcyBvZiB0aGUgZGVzaXJlZCBzaXplIGFyZQorICAgICAgICAvLyBhdmFpbGFibGUsIHdlIHBp
Y2sgdGhlIG5leHQgbGFyZ2VyIHNpemUuCisgICAgICAgIEludFNpemUgbV9wcmVmZXJyZWRJY29u
U2l6ZTsKKworICAgICAgICAvLyBUaGUgaGVhZGVycyBmb3IgdGhlIElDTy4KKyAgICAgICAgSWNv
bkRpcmVjdG9yeSBtX2RpcmVjdG9yeTsKKyAgICAgICAgSWNvbkRpcmVjdG9yeUVudHJ5IG1fZGly
RW50cnk7CisKKyAgICAgICAgLy8gVGhlIFBORyBkZWNvZGVyLCBpZiB3ZSBuZWVkIHRvIHVzZSBv
bmUuCisgICAgICAgIFBOR0ltYWdlRGVjb2RlciBtX3BuZ0RlY29kZXI7CisKKyAgICAgICAgLy8g
V2hhdCBraW5kIG9mIGltYWdlIGRhdGEgaXMgc3RvcmVkIGF0IHRoZSBlbnRyeSB3ZSdyZSBkZWNv
ZGluZy4KKyAgICAgICAgSW1hZ2VUeXBlIG1faW1hZ2VUeXBlOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvQk1QSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24g
NDQ2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VE
ZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCTVBJbWFnZURlY29kZXIuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBOdW1iZXIgb2YgYml0cyBpbiAuQk1QIHVzZWQgdG8gc3RvcmUgdGhl
IGZpbGUgaGVhZGVyIChkb2Vzbid0IG1hdGNoCi0vLyAic2l6ZW9mKEJNUEltYWdlRGVjb2Rlcjo6
Qml0bWFwRmlsZUhlYWRlcikiIHNpbmNlIHdlIG9taXQgc29tZSBmaWVsZHMgYW5kCi0vLyBkb24n
dCBwYWNrKS4KLXN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRmlsZUhlYWRlciA9IDE0OwotCi12
b2lkIEJNUEltYWdlRGVjb2Rlcjo6ZGVjb2RlSW1hZ2UoU2hhcmVkQnVmZmVyKiBkYXRhKQotewot
ICAgIC8vIFJlYWQgYW5kIHByb2Nlc3MgZmlsZSBoZWFkZXIuCi0gICAgaWYgKChtX2RlY29kZWRP
ZmZzZXQgPCBzaXplT2ZGaWxlSGVhZGVyKSAmJiAhcHJvY2Vzc0ZpbGVIZWFkZXIoZGF0YSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIERlY29kZSBCTVAuCi0gICAgZGVjb2RlQk1QKGRhdGEp
OwotfQotCi1ib29sIEJNUEltYWdlRGVjb2Rlcjo6cHJvY2Vzc0ZpbGVIZWFkZXIoU2hhcmVkQnVm
ZmVyKiBkYXRhKQotewotICAgIC8vIFJlYWQgZmlsZSBoZWFkZXIuCi0gICAgQVNTRVJUKCFtX2Rl
Y29kZWRPZmZzZXQpOwotICAgIGlmIChkYXRhLT5zaXplKCkgPCBzaXplT2ZGaWxlSGVhZGVyKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgdWludDE2X3QgZmlsZVR5cGUgPQotICAg
ICAgICAoZGF0YS0+ZGF0YSgpWzBdIDw8IDgpIHwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZGF0YS0+
ZGF0YSgpWzFdKTsKLSAgICBtX2ltZ0RhdGFPZmZzZXQgPSByZWFkVWludDMyKGRhdGEsIDEwKTsK
LSAgICBtX2RlY29kZWRPZmZzZXQgPSBtX2hlYWRlck9mZnNldCA9IHNpemVPZkZpbGVIZWFkZXI7
Ci0KLSAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGJpdG1hcCBmaWxldHlwZSB3ZSB1bmRlcnN0YW5k
LgotICAgIGVudW0gewotICAgICAgICBCTUFQID0gJ0JNJywKLSAgICAgICAgLy8gVGhlIGZvbGxv
d2luZyBhZGRpdGlvbmFsIE9TLzIgMi54IGhlYWRlciB2YWx1ZXMgKHNlZQotICAgICAgICAvLyBo
dHRwOi8vd3d3LmZpbGVmb3JtYXQuaW5mby9mb3JtYXQvb3MyYm1wL2VnZmYuaHRtICkgYXJlbid0
IHdpZGVseQotICAgICAgICAvLyBkZWNvZGVkLCBhbmQgYXJlIHVubGlrZWx5IHRvIGJlIGluIG11
Y2ggdXNlLgotICAgICAgICAvKgotICAgICAgICBJQ09OID0gJ0lDJywKLSAgICAgICAgUE9JTlRF
UiA9ICdQVCcsCi0gICAgICAgIENPTE9SSUNPTiA9ICdDSScsCi0gICAgICAgIENPTE9SUE9JTlRF
UiA9ICdDUCcsCi0gICAgICAgIEJJVE1BUEFSUkFZID0gJ0JBJywKLSAgICAgICAgKi8KLSAgICB9
OwotICAgIGlmIChmaWxlVHlwZSAhPSBCTUFQKQotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0K
LSAgICByZXR1cm4gIW1fZmFpbGVkOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvQk1QSW1hZ2VEZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUElt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9CTVBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgQk1QSW1hZ2VEZWNvZGVyX2gKLSNkZWZpbmUgQk1QSW1h
Z2VEZWNvZGVyX2gKLQotI2luY2x1ZGUgIkJNUEltYWdlUmVhZGVyLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgQk1QIGltYWdlIGZvcm1h
dC4KLSAgICBjbGFzcyBCTVBJbWFnZURlY29kZXIgOiBwdWJsaWMgQk1QSW1hZ2VSZWFkZXIgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCB7IHJldHVybiAiYm1wIjsgfQotCi0gICAgICAgIC8vIEJNUEltYWdlUmVhZGVyCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqKTsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIC8vIFByb2Nlc3NlcyB0aGUgZmlsZSBoZWFkZXIgYXQgdGhlIGJlZ2lubmlu
ZyBvZiB0aGUgZGF0YS4gIFJldHVybnMgdHJ1ZSBpZgotICAgICAgICAvLyB0aGUgZmlsZSBoZWFk
ZXIgY291bGQgYmUgZGVjb2RlZC4KLSAgICAgICAgYm9vbCBwcm9jZXNzRmlsZUhlYWRlcihTaGFy
ZWRCdWZmZXIqKTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0JNUEltYWdlUmVhZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
Qk1QSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA0NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsODM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJN
UEltYWdlUmVhZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQk1QSW1hZ2VSZWFkZXI6
OkJNUEltYWdlUmVhZGVyKCkKLSAgICA6IG1fZGVjb2RlZE9mZnNldCgwKQotICAgICwgbV9oZWFk
ZXJPZmZzZXQoMCkKLSAgICAsIG1faW1nRGF0YU9mZnNldCgwKQotICAgICwgbV9hbmRNYXNrU3Rh
dGUoTm9uZSkKLSAgICAsIG1faXNPUzIxeChmYWxzZSkKLSAgICAsIG1faXNPUzIyeChmYWxzZSkK
LSAgICAsIG1faXNUb3BEb3duKGZhbHNlKQotICAgICwgbV9uZWVkVG9Qcm9jZXNzQml0bWFza3Mo
ZmFsc2UpCi0gICAgLCBtX25lZWRUb1Byb2Nlc3NDb2xvclRhYmxlKGZhbHNlKQotICAgICwgbV90
YWJsZVNpemVJbkJ5dGVzKDApCi0gICAgLCBtX3NlZW5Ob25aZXJvQWxwaGFQaXhlbChmYWxzZSkK
LSAgICAsIG1fc2Vlblplcm9BbHBoYVBpeGVsKGZhbHNlKQotewotICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5yZXNpemUoMSk7Ci0KLSAgICAvLyBDbHVlLWluIGRlY29kZUJNUCgpIHRoYXQgd2UgbmVl
ZCB0byBkZXRlY3QgdGhlIGNvcnJlY3QgaW5mbyBoZWFkZXIgc2l6ZS4KLSAgICBtZW1zZXQoJm1f
aW5mb0hlYWRlciwgMCwgc2l6ZW9mKG1faW5mb0hlYWRlcikpOwotfQotCi12b2lkIEJNUEltYWdl
UmVhZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
Ci17Ci0gICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0K
LSAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGludGVudGlvbmFsbHkgdXNlcyBmcmFtZUJ1ZmZl
ckF0SW5kZXgoKSBpbnN0ZWFkIG9mCi0gICAgLy8gY2hlY2tpbmcgbV9mcmFtZUJ1ZmZlckNhY2hl
LmZpcnN0KCkgZGlyZWN0bHksIHNvIHRoYXQgaXQgd2lsbCBkbyB0aGUKLSAgICAvLyByaWdodCB0
aGluZyBmb3IgSUNPSW1hZ2VEZWNvZGVyLCB3aGljaCBuZWVkcyB0byBvdmVycmlkZSB0aGlzIGFj
Y2Vzc29yCi0gICAgLy8gdG8gc3VwcG9ydCBJQ09zIHdoaWNoIGNvbnRhaW4gUE5Hcy4KLQotICAg
IC8vIFJldHVybiBxdWlja2x5IHdoZW4gd2UgY2FuJ3QgZG8gYW55IG1vcmUgd29yay4KLSAgICBp
ZiAobV9mYWlsZWQgfHwgZGF0YS0+aXNFbXB0eSgpCi0gICAgICAgIHx8IChmcmFtZUJ1ZmZlckF0
SW5kZXgoMCktPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIERlY29kZSBhcyBtdWNoIGFzIHdlIGNhbi4gIFRoaXMgYXNz
dW1lcyB8ZGF0YXwgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcKLSAgICAvLyBvZiB0aGUgaW1hZ2Ug
ZGF0YSwgcmF0aGVyIHRoYW4gY29udGFpbmluZyBqdXN0IHRoZSBsYXRlc3QgY2h1bmsuCi0gICAg
ZGVjb2RlSW1hZ2UoZGF0YSk7Ci0gICAgaWYgKG1fZmFpbGVkKSB7Ci0gICAgICAgIC8vIEhhbmRs
ZSBmYWlsdXJlIGJlZm9yZSBnZXR0aW5nIHRoZSBmcmFtZWJ1ZmZlciBiZWxvdy4KLSAgICAgICAg
bV9jb2xvclRhYmxlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJ
ZiB3ZSBnb3QgYWxsIHRoZSBkYXRhIGJ1dCBjb3VsZG4ndCBmaW5pc2ggZGVjb2RpbmcsIGZhaWwu
Ci0gICAgY29uc3QgYm9vbCBmaW5pc2hlZCA9Ci0gICAgICAgIChmcmFtZUJ1ZmZlckF0SW5kZXgo
MCktPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7Ci0gICAgaWYgKGFs
bERhdGFSZWNlaXZlZCAmJiAhZmluaXNoZWQpCi0gICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLQot
ICAgIC8vIFJlbGVhc2UgdGhlIGNvbG9yIHRhYmxlIHdoZW4gd2Ugbm8gbG9uZ2VyIG5lZWQgaXQu
Ci0gICAgaWYgKGZpbmlzaGVkIHx8IG1fZmFpbGVkKQotICAgICAgICBtX2NvbG9yVGFibGUuY2xl
YXIoKTsKLX0KLQotUkdCQTMyQnVmZmVyKiBCTVBJbWFnZVJlYWRlcjo6ZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICByZXR1cm4gaW5kZXggPyAwIDogJm1fZnJhbWVCdWZm
ZXJDYWNoZS5maXJzdCgpOwotfQotCi12b2lkIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoU2hh
cmVkQnVmZmVyKiBkYXRhKQotewotICAgIC8vIENhbGN1bGF0ZSBzaXplIG9mIGluZm8gaGVhZGVy
LgotICAgIGlmICghbV9pbmZvSGVhZGVyLmJpU2l6ZSAmJiAhZ2V0SW5mb0hlYWRlclNpemUoZGF0
YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlYWQgYW5kIHByb2Nlc3MgaW5mbyBoZWFk
ZXIuCi0gICAgaWYgKChtX2RlY29kZWRPZmZzZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9I
ZWFkZXIuYmlTaXplKSkKLSAgICAgICAgJiYgIXByb2Nlc3NJbmZvSGVhZGVyKGRhdGEpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBSZWFkIGFuZCBwcm9jZXNzIHRoZSBiaXRtYXNrcywgaWYg
bmVlZGVkLgotICAgIGlmIChtX25lZWRUb1Byb2Nlc3NCaXRtYXNrcyAmJiAhcHJvY2Vzc0JpdG1h
c2tzKGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBSZWFkIGFuZCBwcm9jZXNzIHRo
ZSBjb2xvciB0YWJsZSwgaWYgbmVlZGVkLgotICAgIGlmIChtX25lZWRUb1Byb2Nlc3NDb2xvclRh
YmxlICYmICFwcm9jZXNzQ29sb3JUYWJsZShkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgotICAgIFJHQkEzMkJ1ZmZl
ciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Ci0gICAgaWYgKGJ1ZmZlci5z
dGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZm
ZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkgewotICAgICAgICAg
ICAgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgotICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMo
UkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOwotICAgICAgICAvLyBzZXRTaXplKCkgY2FsbHMg
ZXJhc2VBUkdCKCksIHdoaWNoIHJlc2V0cyB0aGUgYWxwaGEgZmxhZywgc28gd2UgZm9yY2UKLSAg
ICAgICAgLy8gaXQgYmFjayB0byBmYWxzZSBoZXJlLiAgV2UnbGwgc2V0IGl0IHRydWUgYmVsb3cg
aW4gYWxsIGNhc2VzIHdoZXJlCi0gICAgICAgIC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNo
b3cgdGhyb3VnaC4KLSAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKLQotICAgICAg
ICAvLyBGb3IgQk1QcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgot
ICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwotCi0g
ICAgICAgIGlmICghbV9pc1RvcERvd24pCi0gICAgICAgICAgICBtX2Nvb3JkLnNldFkoc2l6ZSgp
LmhlaWdodCgpIC0gMSk7Ci0gICAgfQotCi0gICAgLy8gRGVjb2RlIHRoZSBkYXRhLgotICAgIGlm
ICgobV9hbmRNYXNrU3RhdGUgIT0gRGVjb2RpbmcpICYmICFwYXN0RW5kT2ZJbWFnZSgwKSkgewot
ICAgICAgICBpZiAoKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IFJMRTQpCi0gICAgICAg
ICAgICB8fCAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFOCkKLSAgICAgICAgICAg
IHx8IChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEUyNCkpIHsKLSAgICAgICAgICAg
IGlmICghcHJvY2Vzc1JMRURhdGEoZGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9IGVsc2UgaWYgKCFwcm9jZXNzTm9uUkxFRGF0YShkYXRhLCBmYWxzZSwgMCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGltYWdlIGhhcyBhbiBBTkQg
bWFzayBhbmQgdGhlcmUgd2FzIG5vIGFscGhhIGRhdGEsIHByb2Nlc3MgdGhlCi0gICAgLy8gbWFz
ay4KLSAgICBpZiAoKG1fYW5kTWFza1N0YXRlID09IE5vdFlldERlY29kZWQpICYmICFidWZmZXIu
aGFzQWxwaGEoKSkgewotICAgICAgICAvLyBSZXNldCBkZWNvZGluZyBjb29yZGluYXRlcyB0byBz
dGFydCBvZiBpbWFnZS4KLSAgICAgICAgbV9jb29yZC5zZXRYKDApOwotICAgICAgICBtX2Nvb3Jk
LnNldFkobV9pc1RvcERvd24gPyAwIDogKHNpemUoKS5oZWlnaHQoKSAtIDEpKTsKLQotICAgICAg
ICAvLyBUaGUgQU5EIG1hc2sgaXMgc3RvcmVkIGFzIDEtYml0IGRhdGEuCi0gICAgICAgIG1faW5m
b0hlYWRlci5iaUJpdENvdW50ID0gMTsKLQotICAgICAgICBtX2FuZE1hc2tTdGF0ZSA9IERlY29k
aW5nOwotICAgIH0KLSAgICBpZiAoKG1fYW5kTWFza1N0YXRlID09IERlY29kaW5nKSAmJiAhcHJv
Y2Vzc05vblJMRURhdGEoZGF0YSwgZmFsc2UsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBEb25lIQotICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRl
KTsKLX0KLQotYm9vbCBCTVBJbWFnZVJlYWRlcjo6Z2V0SW5mb0hlYWRlclNpemUoU2hhcmVkQnVm
ZmVyKiBkYXRhKQotewotICAgIC8vIEdldCBzaXplIG9mIGluZm8gaGVhZGVyLgotICAgIEFTU0VS
VChtX2RlY29kZWRPZmZzZXQgPT0gbV9oZWFkZXJPZmZzZXQpOwotICAgIGlmICgobV9kZWNvZGVk
T2Zmc2V0ID4gZGF0YS0+c2l6ZSgpKQotICAgICAgICB8fCAoKGRhdGEtPnNpemUoKSAtIG1fZGVj
b2RlZE9mZnNldCkgPCA0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1faW5mb0hlYWRl
ci5iaVNpemUgPSByZWFkVWludDMyKGRhdGEsIDApOwotICAgIC8vIERvbid0IGluY3JlbWVudCBt
X2RlY29kZWRPZmZzZXQgaGVyZSwgaXQganVzdCBtYWtlcyB0aGUgY29kZSBpbgotICAgIC8vIHBy
b2Nlc3NJbmZvSGVhZGVyKCkgbW9yZSBjb25mdXNpbmcuCi0KLSAgICAvLyBEb24ndCBhbGxvdyB0
aGUgaGVhZGVyIHRvIG92ZXJmbG93ICh3aGljaCB3b3VsZCBiZSBoYXJtbGVzcyBoZXJlLCBidXQK
LSAgICAvLyBwcm9ibGVtYXRpYyBvciBhdCBsZWFzdCBjb25mdXNpbmcgaW4gb3RoZXIgcGxhY2Vz
KSwgb3IgdG8gb3ZlcnJ1biB0aGUKLSAgICAvLyBpbWFnZSBkYXRhLgotICAgIGlmICgoKG1faGVh
ZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkgPCBtX2hlYWRlck9mZnNldCkKLSAgICAg
ICAgfHwgKG1faW1nRGF0YU9mZnNldAotICAgICAgICAgICAgJiYgKG1faW1nRGF0YU9mZnNldCA8
IChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUpKSkpIHsKLSAgICAgICAgbV9m
YWlsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU2Vl
IGlmIHRoaXMgaXMgYSBoZWFkZXIgc2l6ZSB3ZSB1bmRlcnN0YW5kOgotICAgIC8vIE9TLzIgMS54
OiAxMgotICAgIGlmIChtX2luZm9IZWFkZXIuYmlTaXplID09IDEyKQotICAgICAgICBtX2lzT1My
MXggPSB0cnVlOwotICAgIC8vIFdpbmRvd3MgVjM6IDQwCi0gICAgZWxzZSBpZiAoKG1faW5mb0hl
YWRlci5iaVNpemUgPT0gNDApIHx8IGlzV2luZG93c1Y0UGx1cygpKQotICAgICAgICA7Ci0gICAg
Ly8gT1MvMiAyLng6IGFueSBtdWx0aXBsZSBvZiA0IGJldHdlZW4gMTYgYW5kIDY0LCBpbmNsdXNp
dmUsIG9yIDQyIG9yIDQ2Ci0gICAgZWxzZSBpZiAoKG1faW5mb0hlYWRlci5iaVNpemUgPj0gMTYp
ICYmIChtX2luZm9IZWFkZXIuYmlTaXplIDw9IDY0KQotICAgICAgICAgICAgICYmICgoKG1faW5m
b0hlYWRlci5iaVNpemUgJiAzKSA9PSAwKSB8fCAobV9pbmZvSGVhZGVyLmJpU2l6ZSA9PSA0MikK
LSAgICAgICAgICAgICAgICAgfHwgKG1faW5mb0hlYWRlci5iaVNpemUgPT0gNDYpKSkKLSAgICAg
ICAgbV9pc09TMjJ4ID0gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsK
LQotICAgIHJldHVybiAhbV9mYWlsZWQ7Ci19Ci0KLWJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nl
c3NJbmZvSGVhZGVyKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICAvLyBSZWFkIGluZm8gaGVh
ZGVyLgotICAgIEFTU0VSVChtX2RlY29kZWRPZmZzZXQgPT0gbV9oZWFkZXJPZmZzZXQpOwotICAg
IGlmICgobV9kZWNvZGVkT2Zmc2V0ID4gZGF0YS0+c2l6ZSgpKQotICAgICAgICB8fCAoKGRhdGEt
PnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCBtX2luZm9IZWFkZXIuYmlTaXplKQotICAgICAg
ICB8fCAhcmVhZEluZm9IZWFkZXIoZGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X2RlY29kZWRPZmZzZXQgKz0gbV9pbmZvSGVhZGVyLmJpU2l6ZTsKLQotICAgIC8vIFNhbml0eS1j
aGVjayBoZWFkZXIgdmFsdWVzLgotICAgIGlmICghaXNJbmZvSGVhZGVyVmFsaWQoKSkgewotICAg
ICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIG91ciBzaXplIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLgotICAgIGlmICghc2V0
U2l6ZShtX2luZm9IZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkgewotICAg
ICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBGb3IgcGFsZXR0ZWQgaW1hZ2VzLCBiaXRtYXBzIGNhbiBzZXQgYmlDbHJVc2VkIHRvIDAg
dG8gbWVhbiAiYWxsCi0gICAgLy8gY29sb3JzIiwgc28gc2V0IGl0IHRvIHRoZSBtYXhpbXVtIG51
bWJlciBvZiBjb2xvcnMgZm9yIHRoaXMgYml0IGRlcHRoLgotICAgIC8vIEFsc28gZG8gdGhpcyBm
b3IgYml0bWFwcyB0aGF0IHB1dCB0b28gbGFyZ2UgYSB2YWx1ZSBoZXJlLgotICAgIGlmIChtX2lu
Zm9IZWFkZXIuYmlCaXRDb3VudCA8IDE2KSB7Ci0gICAgICBjb25zdCB1aW50MzJfdCBtYXhDb2xv
cnMgPQotICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PigxKSA8PCBtX2luZm9IZWFkZXIu
YmlCaXRDb3VudDsKLSAgICAgIGlmICgobV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9PSAwKQotICAg
ICAgICAgIHx8IChtX2luZm9IZWFkZXIuYmlDbHJVc2VkID4gbWF4Q29sb3JzKSkKLSAgICAgICAg
bV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9IG1heENvbG9yczsKLSAgICB9Ci0KLSAgICAvLyBGb3Ig
YW55IGJpdG1hcHMgdGhhdCBzZXQgdGhlaXIgQml0Q291bnQgdG8gdGhlIHdyb25nIHZhbHVlLCBy
ZXNldCB0aGUKLSAgICAvLyBjb3VudHMgbm93IHRoYXQgd2UndmUgY2FsY3VsYXRlZCB0aGUgbnVt
YmVyIG9mIG5lY2Vzc2FyeSBjb2xvcnMsIHNpbmNlCi0gICAgLy8gb3RoZXIgY29kZSByZWxpZXMg
b24gdGhpcyB2YWx1ZSBiZWluZyBjb3JyZWN0LgotICAgIGlmIChtX2luZm9IZWFkZXIuYmlDb21w
cmVzc2lvbiA9PSBSTEU4KQotICAgICAgICBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9IDg7Ci0g
ICAgZWxzZSBpZiAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFNCkKLSAgICAgICAg
bV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPSA0OwotCi0gICAgLy8gVGVsbCBjYWxsZXIgd2hhdCBz
dGlsbCBuZWVkcyB0byBiZSBwcm9jZXNzZWQuCi0gICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENv
dW50ID49IDE2KQotICAgICAgICBtX25lZWRUb1Byb2Nlc3NCaXRtYXNrcyA9IHRydWU7Ci0gICAg
ZWxzZSBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPiAwKQotICAgICAgICBtX25lZWRUb1By
b2Nlc3NDb2xvclRhYmxlID0gdHJ1ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJN
UEltYWdlUmVhZGVyOjpyZWFkSW5mb0hlYWRlcihTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAg
Ly8gUHJlLWluaXRpYWxpemUgc29tZSBmaWVsZHMgdGhhdCBub3QgYWxsIGhlYWRlcnMgc2V0Lgot
ICAgIG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID0gUkdCOwotICAgIG1faW5mb0hlYWRlci5i
aUNsclVzZWQgPSAwOwotCi0gICAgaWYgKG1faXNPUzIxeCkgewotICAgICAgICBtX2luZm9IZWFk
ZXIuYmlXaWR0aCA9IHJlYWRVaW50MTYoZGF0YSwgNCk7Ci0gICAgICAgIG1faW5mb0hlYWRlci5i
aUhlaWdodCA9IHJlYWRVaW50MTYoZGF0YSwgNik7Ci0gICAgICAgIEFTU0VSVChtX2FuZE1hc2tT
dGF0ZSA9PSBOb25lKTsgIC8vIElDTyBpcyBhIFdpbmRvd3MgZm9ybWF0LCBub3QgT1MvMiEKLSAg
ICAgICAgbV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPSByZWFkVWludDE2KGRhdGEsIDEwKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgbV9pbmZvSGVhZGVyLmJpV2lkdGggPSBy
ZWFkVWludDMyKGRhdGEsIDQpOwotICAgIG1faW5mb0hlYWRlci5iaUhlaWdodCA9IHJlYWRVaW50
MzIoZGF0YSwgOCk7Ci0gICAgaWYgKG1fYW5kTWFza1N0YXRlICE9IE5vbmUpCi0gICAgICAgIG1f
aW5mb0hlYWRlci5iaUhlaWdodCAvPSAyOwotICAgIG1faW5mb0hlYWRlci5iaUJpdENvdW50ID0g
cmVhZFVpbnQxNihkYXRhLCAxNCk7Ci0KLSAgICAvLyBSZWFkIGNvbXByZXNzaW9uIHR5cGUsIGlm
IHByZXNlbnQuCi0gICAgaWYgKG1faW5mb0hlYWRlci5iaVNpemUgPj0gMjApIHsKLSAgICAgICAg
dWludDMyX3QgYmlDb21wcmVzc2lvbiA9IHJlYWRVaW50MzIoZGF0YSwgMTYpOwotCi0gICAgICAg
IC8vIERldGVjdCBPUy8yIDIueC1zcGVjaWZpYyBjb21wcmVzc2lvbiB0eXBlcy4KLSAgICAgICAg
aWYgKChiaUNvbXByZXNzaW9uID09IDMpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9PSAx
KSkgewotICAgICAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBIVUZGTUFOMUQ7
Ci0gICAgICAgICAgICBtX2lzT1MyMnggPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKChiaUNv
bXByZXNzaW9uID09IDQpICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA9PSAyNCkpIHsKLSAg
ICAgICAgICAgIG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID0gUkxFMjQ7Ci0gICAgICAgICAg
ICBtX2lzT1MyMnggPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGJpQ29tcHJlc3Npb24gPiA1
KSB7Ci0gICAgICAgICAgICAvLyBTb21lIHR5cGUgd2UgZG9uJ3QgdW5kZXJzdGFuZC4KLSAgICAg
ICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9IHN0YXRp
Y19jYXN0PENvbXByZXNzaW9uVHlwZT4oYmlDb21wcmVzc2lvbik7Ci0gICAgfQotCi0gICAgLy8g
UmVhZCBjb2xvcnMgdXNlZCwgaWYgcHJlc2VudC4KLSAgICBpZiAobV9pbmZvSGVhZGVyLmJpU2l6
ZSA+PSAzNikKLSAgICAgICAgbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCA9IHJlYWRVaW50MzIoZGF0
YSwgMzIpOwotCi0gICAgLy8gV2luZG93cyBWNCsgY2FuIHNhZmVseSByZWFkIHRoZSBmb3VyIGJp
dG1hc2tzIGZyb20gNDAtNTYgYnl0ZXMgaW4sIHNvIGRvCi0gICAgLy8gdGhhdCBoZXJlLiAgSWYg
dGhlIGJpdCBkZXB0aCBpcyBsZXNzIHRoYW4gMTYsIHRoZXNlIHZhbHVlcyB3aWxsIGJlCi0gICAg
Ly8gaWdub3JlZCBieSB0aGUgaW1hZ2UgZGF0YSBkZWNvZGVycy4gIElmIHRoZSBiaXQgZGVwdGgg
aXMgYXQgbGVhc3QgMTYgYnV0Ci0gICAgLy8gdGhlIGNvbXByZXNzaW9uIGZvcm1hdCBpc24ndCBC
SVRGSUVMRFMsIHRoZXNlIHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQgYW5kCi0gICAgLy8gb3Zlcndy
aXR0ZW4qIGluIHByb2Nlc3NCaXRtYXNrcygpLgotICAgIC8vIE5PVEU6IFdlIGFsbG93IGFscGhh
IGhlcmUuICBNaWNyb3NvZnQgZG9lc24ndCByZWFsbHkgZG9jdW1lbnQgdGhpcyB3ZWxsLAotICAg
IC8vIGJ1dCBzb21lIEJNUHMgYXBwZWFyIHRvIHVzZSBpdC4KLSAgICAvLwotICAgIC8vIEZvciBu
b24tV2luZG93cyBWNCssIG1fYml0TWFza3NbXSBldC4gYWwgd2lsbCBiZSBpbml0aWFsaXplZCBs
YXRlcgotICAgIC8vIGR1cmluZyBwcm9jZXNzQml0bWFza3MoKS4KLSAgICAvLwotICAgIC8vICpF
eGNlcHQgdGhlIGFscGhhIGNoYW5uZWwuICBCaXphcnJlbHksIHNvbWUgUkdCIGJpdG1hcHMgZXhw
ZWN0IGRlY29kZXJzCi0gICAgLy8gdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgYWxwaGEgbWFzayBo
ZXJlLCBzbyB0aGVyZSdzIGEgc3BlY2lhbCBjYXNlIGluCi0gICAgLy8gcHJvY2Vzc0JpdG1hc2tz
KCkgdGhhdCBkb2Vzbid0IGFsd2F5cyBvdmVyd3JpdGUgdGhhdCB2YWx1ZS4KLSAgICBpZiAoaXNX
aW5kb3dzVjRQbHVzKCkpIHsKLSAgICAgICAgbV9iaXRNYXNrc1swXSA9IHJlYWRVaW50MzIoZGF0
YSwgNDApOwotICAgICAgICBtX2JpdE1hc2tzWzFdID0gcmVhZFVpbnQzMihkYXRhLCA0NCk7Ci0g
ICAgICAgIG1fYml0TWFza3NbMl0gPSByZWFkVWludDMyKGRhdGEsIDQ4KTsKLSAgICAgICAgbV9i
aXRNYXNrc1szXSA9IHJlYWRVaW50MzIoZGF0YSwgNTIpOwotICAgIH0KLQotICAgIC8vIERldGVj
dCB0b3AtZG93biBCTVBzLgotICAgIGlmIChtX2luZm9IZWFkZXIuYmlIZWlnaHQgPCAwKSB7Ci0g
ICAgICAgIG1faXNUb3BEb3duID0gdHJ1ZTsKLSAgICAgICAgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0
ID0gLW1faW5mb0hlYWRlci5iaUhlaWdodDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBCTVBJbWFnZVJlYWRlcjo6aXNJbmZvSGVhZGVyVmFsaWQoKSBjb25zdAotewotICAg
IC8vIE5vbi1wb3NpdGl2ZSB3aWR0aHMvaGVpZ2h0cyBhcmUgaW52YWxpZC4gIChXZSd2ZSBhbHJl
YWR5IGZsaXBwZWQgdGhlCi0gICAgLy8gc2lnbiBvZiB0aGUgaGVpZ2h0IGZvciB0b3AtZG93biBi
aXRtYXBzLikKLSAgICBpZiAoKG1faW5mb0hlYWRlci5iaVdpZHRoIDw9IDApIHx8IChtX2luZm9I
ZWFkZXIuYmlIZWlnaHQgPT0gMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9u
bHkgV2luZG93cyBWMysgaGFzIHRvcC1kb3duIGJpdG1hcHMuCi0gICAgaWYgKG1faXNUb3BEb3du
ICYmIChtX2lzT1MyMXggfHwgbV9pc09TMjJ4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgLy8gT25seSBiaXQgZGVwdGhzIG9mIDEsIDQsIDgsIG9yIDI0IGFyZSB1bml2ZXJzYWxseSBz
dXBwb3J0ZWQuCi0gICAgaWYgKChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxKSAmJiAobV9p
bmZvSGVhZGVyLmJpQml0Q291bnQgIT0gNCkKLSAgICAgICAgJiYgKG1faW5mb0hlYWRlci5iaUJp
dENvdW50ICE9IDgpCi0gICAgICAgICYmIChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCAhPSAyNCkp
IHsKLSAgICAgICAgLy8gV2luZG93cyBWMysgYWRkaXRpb25hbGx5IHN1cHBvcnRzIGJpdCBkZXB0
aHMgb2YgMCAoZm9yIGVtYmVkZGVkCi0gICAgICAgIC8vIEpQRUcvUE5HIGltYWdlcyksIDE2LCBh
bmQgMzIuCi0gICAgICAgIGlmIChtX2lzT1MyMXggfHwgbV9pc09TMjJ4KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDAp
Ci0gICAgICAgICAgICAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMTYpCi0gICAgICAg
ICAgICAmJiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMzIpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEVhY2ggY29tcHJlc3Npb24gdHlwZSBpcyBvbmx5
IHZhbGlkIHdpdGggY2VydGFpbiBiaXQgZGVwdGhzIChleGNlcHQgUkdCLAotICAgIC8vIHdoaWNo
IGNhbiBiZSB1c2VkIHdpdGggYW55IGJpdCBkZXB0aCkuICBBbHNvLCBzb21lIGZvcm1hdHMgZG8g
bm90Ci0gICAgLy8gc29tZSBjb21wcmVzc2lvbiB0eXBlcy4KLSAgICBzd2l0Y2ggKG1faW5mb0hl
YWRlci5iaUNvbXByZXNzaW9uKSB7Ci0gICAgY2FzZSBSR0I6Ci0gICAgICAgIGlmIChtX2luZm9I
ZWFkZXIuYmlCaXRDb3VudCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgUkxFODoKLSAgICAgICAgLy8gU3VwcG9zZWRseSB0aGVyZSBh
cmUgdW5kb2N1bWVudGVkIGZvcm1hdHMgbGlrZSAiQml0Q291bnQgPSAxLAotICAgICAgICAvLyBD
b21wcmVzc2lvbiA9IFJMRTQiICh3aGljaCBtZWFucyAiNCBiaXQsIGJ1dCB3aXRoIGEgMi1jb2xv
ciB0YWJsZSIpLAotICAgICAgICAvLyBzbyBhbHNvIGFsbG93IHRoZSBwYWxldHRlZCBSTEUgY29t
cHJlc3Npb24gdHlwZXMgdG8gaGF2ZSB0b28gbG93IGEKLSAgICAgICAgLy8gYml0IGNvdW50OyB3
ZSdsbCBjb3JyZWN0IHRoaXMgbGF0ZXIuCi0gICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRD
b3VudCA9PSAwIHx8IG1faW5mb0hlYWRlci5iaUJpdENvdW50ID4gOCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJMRTQ6Ci0gICAgICAgIC8v
IFNlZSBjb21tZW50cyBpbiBSTEU4LgotICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291
bnQgPT0gMCB8fCBtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA+IDQpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBCSVRGSUVMRFM6Ci0gICAgICAg
IC8vIE9ubHkgdmFsaWQgZm9yIFdpbmRvd3MgVjMrLgotICAgICAgICBpZiAobV9pc09TMjF4IHx8
IG1faXNPUzIyeCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKChtX2lu
Zm9IZWFkZXIuYmlCaXRDb3VudCAhPSAxNikgJiYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9
IDMyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEpQRUc6Ci0gICAgY2FzZSBQTkc6Ci0gICAgICAgIC8vIE9ubHkgdmFsaWQgZm9yIFdpbmRv
d3MgVjMrLgotICAgICAgICBpZiAobV9pc09TMjF4IHx8IG1faXNPUzIyeCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1faW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDAp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBI
VUZGTUFOMUQ6Ci0gICAgICAgIC8vIE9ubHkgdmFsaWQgZm9yIE9TLzIgMi54LgotICAgICAgICBp
ZiAoIW1faXNPUzIyeCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1f
aW5mb0hlYWRlci5iaUJpdENvdW50ICE9IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSTEUyNDoKLSAgICAgICAgLy8gT25seSB2YWxpZCBm
b3IgT1MvMiAyLnguCi0gICAgICAgIGlmICghbV9pc09TMjJ4KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgIT0gMjQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIAotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIC8vIFNvbWUgdHlwZSB3ZSBkb24ndCB1bmRlcnN0YW5kLiAgVGhpcyBzaG91bGQg
aGF2ZSBiZWVuIGNhdWdodCBpbgotICAgICAgICAvLyByZWFkSW5mb0hlYWRlcigpLgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIC8vIFRvcC1kb3duIGJpdG1hcHMgY2Fubm90IGJlIGNvbXByZXNzZWQ7IHRoZXkgbXVzdCBi
ZSBSR0Igb3IgQklURklFTERTLgotICAgIGlmIChtX2lzVG9wRG93biAmJiAobV9pbmZvSGVhZGVy
LmJpQ29tcHJlc3Npb24gIT0gUkdCKQotICAgICAgICAmJiAobV9pbmZvSGVhZGVyLmJpQ29tcHJl
c3Npb24gIT0gQklURklFTERTKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gUmVq
ZWN0IHRoZSBmb2xsb3dpbmcgdmFsaWQgYml0bWFwIHR5cGVzIHRoYXQgd2UgZG9uJ3QgY3VycmVu
dGx5IGJvdGhlcgotICAgIC8vIGRlY29kaW5nLiAgRmV3IG90aGVyIHBlb3BsZSBkZWNvZGUgdGhl
c2UgZWl0aGVyLCB0aGV5J3JlIHVubGlrZWx5IHRvIGJlCi0gICAgLy8gaW4gbXVjaCB1c2UuCi0g
ICAgLy8gVE9ETyhwa2FzdGluZyk6IENvbnNpZGVyIHN1cHBvcnRpbmcgdGhlc2Ugc29tZWRheS4K
LSAgICAvLyAgICogQml0bWFwcyBsYXJnZXIgdGhhbiAyXjE2IHBpeGVscyBpbiBlaXRoZXIgZGlt
ZW5zaW9uIChXaW5kb3dzCi0gICAgLy8gICAgIHByb2JhYmx5IGRvZXNuJ3QgZHJhdyB0aGVzZSB3
ZWxsIGFueXdheSwgYW5kIHRoZSBkZWNvZGVkIGRhdGEgd291bGQKLSAgICAvLyAgICAgdGFrZSBh
IGxvdCBvZiBtZW1vcnkpLgotICAgIGlmICgobV9pbmZvSGVhZGVyLmJpV2lkdGggPj0gKDEgPDwg
MTYpKQotICAgICAgICB8fCAobV9pbmZvSGVhZGVyLmJpSGVpZ2h0ID49ICgxIDw8IDE2KSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyAgICogV2luZG93cyBWMysgSlBFRy1pbi1CTVAg
YW5kIFBORy1pbi1CTVAgYml0bWFwcyAoc3VwcG9zZWRseSBub3QgZm91bmQKLSAgICAvLyAgICAg
aW4gdGhlIHdpbGQsIG9ubHkgdXNlZCB0byBzZW5kIGRhdGEgdG8gcHJpbnRlcnM/KS4KLSAgICBp
ZiAoKG1faW5mb0hlYWRlci5iaUNvbXByZXNzaW9uID09IEpQRUcpCi0gICAgICAgIHx8IChtX2lu
Zm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBQTkcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgLy8gICAqIE9TLzIgMi54IEh1ZmZtYW4tZW5jb2RlZCBtb25vY2hyb21lIGJpdG1hcHMgKHNl
ZQotICAgIC8vICAgICAgaHR0cDovL3d3dy5maWxlZm9ybWF0LmluZm8vbWlycm9yL2VnZmYvY2gw
OV8wNS5odG0gLCByZTogIkczMUQiCi0gICAgLy8gICAgICBhbGdvcml0aG0pLgotICAgIGlmICht
X2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBIVUZGTUFOMUQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJNUEltYWdlUmVhZGVyOjpwcm9j
ZXNzQml0bWFza3MoU2hhcmVkQnVmZmVyKiBkYXRhKQotewotICAgIC8vIENyZWF0ZSBtX2JpdE1h
c2tzW10gdmFsdWVzLgotICAgIGlmIChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiAhPSBCSVRG
SUVMRFMpIHsKLSAgICAgICAgLy8gVGhlIGZvcm1hdCBkb2Vzbid0IGFjdHVhbGx5IHVzZSBiaXRt
YXNrcy4gIFRvIHNpbXBsaWZ5IHRoZSBkZWNvZGUKLSAgICAgICAgLy8gbG9naWMgbGF0ZXIsIGNy
ZWF0ZSBiaXRtYXNrcyBmb3IgdGhlIFJHQiBkYXRhLiAgRm9yIFdpbmRvd3MgVjQrLAotICAgICAg
ICAvLyB0aGlzIG92ZXJ3cml0ZXMgdGhlIG1hc2tzIHdlIHJlYWQgZnJvbSB0aGUgaGVhZGVyLCB3
aGljaCBhcmUKLSAgICAgICAgLy8gc3VwcG9zZWQgdG8gYmUgaWdub3JlZCBpbiBub24tQklURklF
TERTIGNhc2VzLgotICAgICAgICAvLyAxNiBiaXRzOiAgICBNU0IgPC0gICAgICAgICAgICAgICAg
ICAgICB4UlJSUlJHRyBHR0dCQkJCQiAtPiBMU0IKLSAgICAgICAgLy8gMjQvMzIgYml0czogTVNC
IDwtIFtBQUFBQUFBQV0gUlJSUlJSUlIgR0dHR0dHR0cgQkJCQkJCQkIgLT4gTFNCCi0gICAgICAg
IGNvbnN0IGludCBudW1CaXRzID0gKG1faW5mb0hlYWRlci5iaUJpdENvdW50ID09IDE2KSA/IDUg
OiA4OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSAyOyArK2kpIHsKLSAgICAgICAgICAg
IG1fYml0TWFza3NbaV0gPQotICAgICAgICAgICAgICAgICgoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KDEpIDw8IChudW1CaXRzICogKDMgLSBpKSkpIC0gMSkgXgotICAgICAgICAgICAgICAgICgoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KDEpIDw8IChudW1CaXRzICogKDIgLSBpKSkpIC0gMSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGb3IgV2luZG93cyBWNCsgMzItYml0IFJHQiwgZG9uJ3Qgb3Zl
cndyaXRlIHRoZSBhbHBoYSBtYXNrIGZyb20gdGhlCi0gICAgICAgIC8vIGhlYWRlciAoc2VlIG5v
dGUgaW4gcmVhZEluZm9IZWFkZXIoKSkuCi0gICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlCaXRD
b3VudCA8IDMyKQotICAgICAgICAgICAgbV9iaXRNYXNrc1szXSA9IDA7Ci0gICAgICAgIGVsc2Ug
aWYgKCFpc1dpbmRvd3NWNFBsdXMoKSkKLSAgICAgICAgICAgIG1fYml0TWFza3NbM10gPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oMHhmZjAwMDAwMCk7Ci0gICAgfSBlbHNlIGlmICghaXNXaW5kb3dz
VjRQbHVzKCkpIHsKLSAgICAgICAgLy8gRm9yIFdpbmRvd3MgVjQrIEJJVEZJRUxEUyBtb2RlIGJp
dG1hcHMsIHRoaXMgd2FzIGFscmVhZHkgZG9uZSB3aGVuCi0gICAgICAgIC8vIHdlIHJlYWQgdGhl
IGluZm8gaGVhZGVyLgotCi0gICAgICAgIC8vIEZhaWwgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2gg
ZmlsZSBzcGFjZSBmb3IgdGhlIGJpdG1hc2tzLgotICAgICAgICBzdGF0aWMgY29uc3QgaW50IFNJ
WkVPRl9CSVRNQVNLUyA9IDEyOwotICAgICAgICBpZiAoKChtX2hlYWRlck9mZnNldCArIG1faW5m
b0hlYWRlci5iaVNpemUgKyBTSVpFT0ZfQklUTUFTS1MpIDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9p
bmZvSGVhZGVyLmJpU2l6ZSkpCi0gICAgICAgICAgICB8fCAobV9pbWdEYXRhT2Zmc2V0ICYmICht
X2ltZ0RhdGFPZmZzZXQgPCAobV9oZWFkZXJPZmZzZXQgKyBtX2luZm9IZWFkZXIuYmlTaXplICsg
U0laRU9GX0JJVE1BU0tTKSkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZWFkIGJpdG1h
c2tzLgotICAgICAgICBpZiAoKGRhdGEtPnNpemUoKSAtIG1fZGVjb2RlZE9mZnNldCkgPCBTSVpF
T0ZfQklUTUFTS1MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fYml0TWFz
a3NbMF0gPSByZWFkVWludDMyKGRhdGEsIDApOwotICAgICAgICBtX2JpdE1hc2tzWzFdID0gcmVh
ZFVpbnQzMihkYXRhLCA0KTsKLSAgICAgICAgbV9iaXRNYXNrc1syXSA9IHJlYWRVaW50MzIoZGF0
YSwgOCk7Ci0gICAgICAgIC8vIE5vIGFscGhhIGluIGFueXRoaW5nIG90aGVyIHRoYW4gV2luZG93
cyBWNCsuCi0gICAgICAgIG1fYml0TWFza3NbM10gPSAwOwotCi0gICAgICAgIG1fZGVjb2RlZE9m
ZnNldCArPSBTSVpFT0ZfQklUTUFTS1M7Ci0gICAgfQotCi0gICAgLy8gV2UndmUgbm93IGRlY29k
ZWQgYWxsIHRoZSBub24taW1hZ2UgZGF0YSB3ZSBjYXJlIGFib3V0LiAgU2tpcCBhbnl0aGluZwot
ICAgIC8vIGVsc2UgYmVmb3JlIHRoZSBhY3R1YWwgcmFzdGVyIGRhdGEuCi0gICAgaWYgKG1faW1n
RGF0YU9mZnNldCkKLSAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ID0gbV9pbWdEYXRhT2Zmc2V0Owot
ICAgIG1fbmVlZFRvUHJvY2Vzc0JpdG1hc2tzID0gZmFsc2U7Ci0KLSAgICAvLyBDaGVjayBtYXNr
cyBhbmQgc2V0IHNoaWZ0IHZhbHVlcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkg
ewotICAgICAgICAvLyBUcmltIHRoZSBtYXNrIHRvIHRoZSBhbGxvd2VkIGJpdCBkZXB0aC4gIFNv
bWUgV2luZG93cyBWNCsgQk1QcwotICAgICAgICAvLyBzcGVjaWZ5IGEgYm9ndXMgYWxwaGEgY2hh
bm5lbCBpbiBiaXRzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIHBpeGVsCi0gICAgICAgIC8vIGRh
dGEgKGZvciBleGFtcGxlLCBiaXRzIDI1LTMxIGluIGEgMjQtYml0IFJHQiBmb3JtYXQpLgotICAg
ICAgICBpZiAobV9pbmZvSGVhZGVyLmJpQml0Q291bnQgPCAzMikKLSAgICAgICAgICAgIG1fYml0
TWFza3NbaV0gJj0gKChzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSkgPDwgbV9pbmZvSGVhZGVyLmJp
Qml0Q291bnQpIC0gMSk7Ci0KLSAgICAgICAgLy8gRm9yIGVtcHR5IG1hc2tzIChjb21tb24gb24g
dGhlIGFscGhhIGNoYW5uZWwsIGVzcGVjaWFsbHkgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIHRyaW1t
aW5nIGFib3ZlKSwgcXVpY2tseSBjbGVhciB0aGUgc2hpZnRzIGFuZCBjb250aW51ZSwgdG8gYXZv
aWQgYW4KLSAgICAgICAgLy8gaW5maW5pdGUgbG9vcCBpbiB0aGUgY291bnRpbmcgY29kZSBiZWxv
dy4KLSAgICAgICAgdWludDMyX3QgdGVtcE1hc2sgPSBtX2JpdE1hc2tzW2ldOwotICAgICAgICBp
ZiAoIXRlbXBNYXNrKSB7Ci0gICAgICAgICAgICBtX2JpdFNoaWZ0c1JpZ2h0W2ldID0gbV9iaXRT
aGlmdHNMZWZ0W2ldID0gMDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIGJpdG1hc2sgZG9lcyBub3Qgb3ZlcmxhcCBhbnkgb3RoZXIgYml0
bWFza3MuCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgKytqKSB7Ci0gICAgICAgICAg
ICBpZiAodGVtcE1hc2sgJiBtX2JpdE1hc2tzW2pdKSB7Ci0gICAgICAgICAgICAgICAgbV9mYWls
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vIENvdW50IG9mZnNldCBpbnRvIHBpeGVsIGRhdGEuCi0g
ICAgICAgIGZvciAobV9iaXRTaGlmdHNSaWdodFtpXSA9IDA7ICEodGVtcE1hc2sgJiAxKTsgdGVt
cE1hc2sgPj49IDEpCi0gICAgICAgICAgICArK21fYml0U2hpZnRzUmlnaHRbaV07Ci0KLSAgICAg
ICAgLy8gQ291bnQgc2l6ZSBvZiBtYXNrLgotICAgICAgICBmb3IgKG1fYml0U2hpZnRzTGVmdFtp
XSA9IDg7IHRlbXBNYXNrICYgMTsgdGVtcE1hc2sgPj49IDEpCi0gICAgICAgICAgICAtLW1fYml0
U2hpZnRzTGVmdFtpXTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgYml0bWFzayBpcyBjb250aWd1
b3VzLgotICAgICAgICBpZiAodGVtcE1hc2spIHsKLSAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNp
bmNlIFJHQkFCdWZmZXIgdG9wcyBvdXQgYXQgOCBiaXRzIHBlciBjaGFubmVsLCBhZGp1c3QgdGhl
IHNoaWZ0Ci0gICAgICAgIC8vIGFtb3VudHMgdG8gdXNlIHRoZSBtb3N0IHNpZ25pZmljYW50IDgg
Yml0cyBvZiB0aGUgY2hhbm5lbC4KLSAgICAgICAgaWYgKG1fYml0U2hpZnRzTGVmdFtpXSA8IDAp
IHsKLSAgICAgICAgICAgIG1fYml0U2hpZnRzUmlnaHRbaV0gLT0gbV9iaXRTaGlmdHNMZWZ0W2ld
OwotICAgICAgICAgICAgbV9iaXRTaGlmdHNMZWZ0W2ldID0gMDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzQ29s
b3JUYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEpCi17Ci0gICAgbV90YWJsZVNpemVJbkJ5dGVzID0g
bV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCAqIChtX2lzT1MyMXggPyAzIDogNCk7Ci0KLSAgICAvLyBG
YWlsIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIGZpbGUgc3BhY2UgZm9yIHRoZSBjb2xvciB0YWJs
ZS4KLSAgICBpZiAoKChtX2hlYWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUgKyBtX3Rh
YmxlU2l6ZUluQnl0ZXMpIDwgKG1faGVhZGVyT2Zmc2V0ICsgbV9pbmZvSGVhZGVyLmJpU2l6ZSkp
Ci0gICAgICAgIHx8IChtX2ltZ0RhdGFPZmZzZXQgJiYgKG1faW1nRGF0YU9mZnNldCA8IChtX2hl
YWRlck9mZnNldCArIG1faW5mb0hlYWRlci5iaVNpemUgKyBtX3RhYmxlU2l6ZUluQnl0ZXMpKSkp
IHsKLSAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gUmVhZCBjb2xvciB0YWJsZS4KLSAgICBpZiAoKG1fZGVjb2RlZE9mZnNldCA+
IGRhdGEtPnNpemUoKSkKLSAgICAgICAgfHwgKChkYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZz
ZXQpIDwgbV90YWJsZVNpemVJbkJ5dGVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
Y29sb3JUYWJsZS5yZXNpemUobV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2luZm9IZWFkZXIuYmlDbHJVc2VkOyArK2kpIHsKLSAgICAgICAgbV9j
b2xvclRhYmxlW2ldLnJnYkJsdWUgPSBkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0KytdOwot
ICAgICAgICBtX2NvbG9yVGFibGVbaV0ucmdiR3JlZW4gPSBkYXRhLT5kYXRhKClbbV9kZWNvZGVk
T2Zmc2V0KytdOwotICAgICAgICBtX2NvbG9yVGFibGVbaV0ucmdiUmVkID0gZGF0YS0+ZGF0YSgp
W21fZGVjb2RlZE9mZnNldCsrXTsKLSAgICAgICAgLy8gU2tpcCBwYWRkaW5nIGJ5dGUgKG5vdCBw
cmVzZW50IG9uIE9TLzIgMS54KS4KLSAgICAgICAgaWYgKCFtX2lzT1MyMXgpCi0gICAgICAgICAg
ICArK21fZGVjb2RlZE9mZnNldDsKLSAgICB9Ci0KLSAgICAvLyBXZSd2ZSBub3cgZGVjb2RlZCBh
bGwgdGhlIG5vbi1pbWFnZSBkYXRhIHdlIGNhcmUgYWJvdXQuICBTa2lwIGFueXRoaW5nCi0gICAg
Ly8gZWxzZSBiZWZvcmUgdGhlIGFjdHVhbCByYXN0ZXIgZGF0YS4KLSAgICBpZiAobV9pbWdEYXRh
T2Zmc2V0KQotICAgICAgICBtX2RlY29kZWRPZmZzZXQgPSBtX2ltZ0RhdGFPZmZzZXQ7Ci0gICAg
bV9uZWVkVG9Qcm9jZXNzQ29sb3JUYWJsZSA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRhKFNoYXJlZEJ1ZmZlciogZGF0
YSkKLXsKLSAgICBpZiAobV9kZWNvZGVkT2Zmc2V0ID4gZGF0YS0+c2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBSTEUgZGVjb2RpbmcgaXMgcG9vcmx5IHNwZWNpZmllZC4g
IFR3byBtYWluIHByb2JsZW1zOgotICAgIC8vICgxKSBBcmUgRU9MIG1hcmtlcnMgbmVjZXNzYXJ5
PyAgV2hhdCBoYXBwZW5zIHdoZW4gd2UgaGF2ZSB0b28gbWFueQotICAgIC8vICAgICBwaXhlbHMg
Zm9yIG9uZSByb3c/Ci0gICAgLy8gICAgIGh0dHA6Ly93d3cuZmlsZWZvcm1hdC5pbmZvL2Zvcm1h
dC9ibXAvZWdmZi5odG0gc2F5cyBleHRyYSBwaXhlbHMKLSAgICAvLyAgICAgc2hvdWxkIHdyYXAg
dG8gdGhlIG5leHQgbGluZS4gIFJlYWwgQk1QcyBJJ3ZlIGVuY291bnRlcmVkIHNlZW0gdG8KLSAg
ICAvLyAgICAgaW5zdGVhZCBleHBlY3QgZXh0cmEgcGl4ZWxzIHRvIGJlIGlnbm9yZWQgdW50aWwg
dGhlIEVPTCBtYXJrZXIgaXMKLSAgICAvLyAgICAgc2VlbiwgYWx0aG91Z2ggdGhpcyBoYXMgb25s
eSBoYXBwZW5lZCBpbiBhIGZldyBjYXNlcyBhbmQgSSBzdXNwZWN0Ci0gICAgLy8gICAgIHRob3Nl
IEJNUHMgbWF5IGJlIGludmFsaWQuICBTbyB3ZSBvbmx5IGNoYW5nZSBsaW5lcyBvbiBFT0wgKG9y
IERlbHRhCi0gICAgLy8gICAgIHdpdGggZHkgPiAwKSwgYW5kIGZhaWwgaW4gbW9zdCBjYXNlcyB3
aGVuIHBpeGVscyBleHRlbmQgcGFzdCB0aGUgZW5kCi0gICAgLy8gICAgIG9mIHRoZSBsaW5lLgot
ICAgIC8vICgyKSBXaGVuIERlbHRhLCBFT0wsIG9yIEVPRiBhcmUgc2Vlbiwgd2hhdCBoYXBwZW5z
IHRvIHRoZSAic2tpcHBlZCIKLSAgICAvLyAgICAgcGl4ZWxzPwotICAgIC8vICAgICBodHRwOi8v
d3d3LmRhdWJuZXQuY29tL2Zvcm1hdHMvQk1QLmh0bWwgc2F5cyB0aGVzZSBzaG91bGQgYmUgZmls
bGVkCi0gICAgLy8gICAgIHdpdGggY29sb3IgMC4gIEhvd2V2ZXIsIHRoZSAiZG8gbm90aGluZyIg
YW5kICJkb24ndCBjYXJlIiBjb21tZW50cwotICAgIC8vICAgICBvZiBvdGhlciByZWZlcmVuY2Vz
IHN1Z2dlc3QgbGVhdmluZyB0aGVzZSBhbG9uZSwgaS5lLiBsZXR0aW5nIHRoZW0KLSAgICAvLyAg
ICAgYmUgdHJhbnNwYXJlbnQgdG8gdGhlIGJhY2tncm91bmQgYmVoaW5kIHRoZSBpbWFnZS4gIFRo
aXMgc2VlbXMgdG8KLSAgICAvLyAgICAgbWF0Y2ggaG93IE1TUEFJTlQgdHJlYXRzIEJNUHMsIHNv
IHdlIGRvIHRoYXQuICBOb3RlIHRoYXQgd2hlbiB3ZQotICAgIC8vICAgICBhY3R1YWxseSBza2lw
IHBpeGVscyBmb3IgYSBjYXNlIGxpa2UgdGhpcywgd2UgbmVlZCB0byBub3RlIG9uIHRoZQotICAg
IC8vICAgICBmcmFtZWJ1ZmZlciB0aGF0IHdlIGhhdmUgYWxwaGEuCi0KLSAgICAvLyBJbXBvc3Np
YmxlIHRvIGRlY29kZSByb3ctYXQtYS10aW1lLCBzbyBqdXN0IGRvIHRoaW5ncyBhcyBhIHN0cmVh
bSBvZgotICAgIC8vIGJ5dGVzLgotICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlLmZpcnN0KCk7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgLy8gRXZlcnkg
ZW50cnkgdGFrZXMgYXQgbGVhc3QgdHdvIGJ5dGVzOyBiYWlsIGlmIHRoZXJlIGlzbid0IGVub3Vn
aAotICAgICAgICAvLyBkYXRhLgotICAgICAgICBpZiAoKGRhdGEtPnNpemUoKSAtIG1fZGVjb2Rl
ZE9mZnNldCkgPCAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIEZv
ciBldmVyeSBlbnRyeSBleGNlcHQgRU9GLCB3ZSdkIGJldHRlciBub3QgaGF2ZSByZWFjaGVkIHRo
ZSBlbmQgb2YKLSAgICAgICAgLy8gdGhlIGltYWdlLgotICAgICAgICBjb25zdCB1aW50OF90IGNv
dW50ID0gZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldF07Ci0gICAgICAgIGNvbnN0IHVpbnQ4
X3QgY29kZSA9IGRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAxXTsKLSAgICAgICAgaWYg
KCgoY291bnQgIT0gMCkgfHwgKGNvZGUgIT0gMSkpICYmIHBhc3RFbmRPZkltYWdlKDApKSB7Ci0g
ICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBEZWNvZGUuCi0gICAgICAgIGlmIChjb3VudCA9PSAwKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgMDogIC8vIE1h
Z2ljIHRva2VuOiBFT0wKLSAgICAgICAgICAgICAgICAvLyBTa2lwIGFueSByZW1haW5pbmcgcGl4
ZWxzIGluIHRoaXMgcm93LgotICAgICAgICAgICAgICAgIGlmIChtX2Nvb3JkLngoKSA8IHNpemUo
KS53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgbW92ZUJ1ZmZlclRvTmV4dFJvdygpOwotCi0gICAgICAgICAgICAg
ICAgbV9kZWNvZGVkT2Zmc2V0ICs9IDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgIGNhc2UgMTogIC8vIE1hZ2ljIHRva2VuOiBFT0YKLSAgICAgICAgICAgICAgICAvLyBT
a2lwIGFueSByZW1haW5pbmcgcGl4ZWxzIGluIHRoZSBpbWFnZS4KLSAgICAgICAgICAgICAgICBp
ZiAoKG1fY29vcmQueCgpIDwgc2l6ZSgpLndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgIHx8
IChtX2lzVG9wRG93biA/IChtX2Nvb3JkLnkoKSA8IChzaXplKCkuaGVpZ2h0KCkgLSAxKSkgOiAo
bV9jb29yZC55KCkgPiAwKSkpCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBo
YSh0cnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgY2Fz
ZSAyOiB7ICAvLyBNYWdpYyB0b2tlbjogRGVsdGEKLSAgICAgICAgICAgICAgICAvLyBUaGUgbmV4
dCB0d28gYnl0ZXMgc3BlY2lmeSBkeCBhbmQgZHkuICBCYWlsIGlmIHRoZXJlIGlzbid0Ci0gICAg
ICAgICAgICAgICAgLy8gZW5vdWdoIGRhdGEuCi0gICAgICAgICAgICAgICAgaWYgKChkYXRhLT5z
aXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgNCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgLy8gRmFpbCBpZiB0aGlzIHRha2VzIHVzIHBhc3Qg
dGhlIGVuZCBvZiB0aGUgZGVzaXJlZCByb3cgb3IKLSAgICAgICAgICAgICAgICAvLyBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGltYWdlLgotICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgZHggPSBk
YXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgMl07Ci0gICAgICAgICAgICAgICAgY29uc3Qg
dWludDhfdCBkeSA9IGRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAzXTsKLSAgICAgICAg
ICAgICAgICBpZiAoKGR4ICE9IDApIHx8IChkeSAhPSAwKSkKLSAgICAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICAgICAgICAgIGlmICgoKG1fY29vcmQu
eCgpICsgZHgpID4gc2l6ZSgpLndpZHRoKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHBhc3RF
bmRPZkltYWdlKGR5KSkgewotICAgICAgICAgICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTa2lwIGludGVydmVuaW5nIHBpeGVscy4KLSAgICAgICAgICAgICAg
ICBtX2Nvb3JkLm1vdmUoZHgsIG1faXNUb3BEb3duID8gZHkgOiAtZHkpOwotCi0gICAgICAgICAg
ICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IDQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6ICAvLyBBYnNvbHV0ZSBtb2RlCi0gICAg
ICAgICAgICAgICAgLy8gfGNvZGV8IHBpeGVscyBzcGVjaWZpZWQgYXMgaW4gQklfUkdCLCB6ZXJv
LXBhZGRlZCBhdCB0aGUgZW5kCi0gICAgICAgICAgICAgICAgLy8gdG8gYSBtdWx0aXBsZSBvZiAx
NiBiaXRzLgotICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgcHJvY2Vzc05vblJMRURhdGEoKSBl
eHBlY3RzIG1fZGVjb2RlZE9mZnNldCB0bwotICAgICAgICAgICAgICAgIC8vIHBvaW50IHRvIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIHBpeGVsIGRhdGEsIGJ1bXAgaXQgcGFzdAotICAgICAgICAgICAg
ICAgIC8vIHRoZSBlc2NhcGUgYnl0ZXMgYW5kIHRoZW4gcmVzZXQgaWYgZGVjb2RpbmcgZmFpbGVk
LgotICAgICAgICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArPSAyOwotICAgICAgICAgICAgICAg
IGlmICghcHJvY2Vzc05vblJMRURhdGEoZGF0YSwgdHJ1ZSwgY29kZSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0IC09IDI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAvLyBFbmNvZGVkIG1vZGUKLSAgICAgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgY29sb3IgZGF0YSBpcyByZXBlYXRlZCBmb3IgfGNvdW50fCB0b3Rh
bCBwaXhlbHMuCi0gICAgICAgICAgICAvLyBTdHJhbmdlbHksIHNvbWUgQk1QcyBzZWVtIHRvIHNw
ZWNpZnkgZXhjZXNzaXZlbHkgbGFyZ2UgY291bnRzCi0gICAgICAgICAgICAvLyBoZXJlOyBpZ25v
cmUgcGl4ZWxzIHBhc3QgdGhlIGVuZCBvZiB0aGUgcm93LgotICAgICAgICAgICAgY29uc3QgaW50
IGVuZFggPSBzdGQ6Om1pbihtX2Nvb3JkLngoKSArIGNvdW50LCBzaXplKCkud2lkdGgoKSk7Ci0K
LSAgICAgICAgICAgIGlmIChtX2luZm9IZWFkZXIuYmlDb21wcmVzc2lvbiA9PSBSTEUyNCkgewot
ICAgICAgICAgICAgICAgIC8vIEJhaWwgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIGRhdGEuCi0gICAg
ICAgICAgICAgICAgaWYgKChkYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgNCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgLy8gT25l
IEJHUiB0cmlwbGUgdGhhdCB3ZSBjb3B5IHxjb3VudHwgdGltZXMuCi0gICAgICAgICAgICAgICAg
ZmlsbFJHQkEoZW5kWCwgZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9mZnNldCArIDNdLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyAyXSwgY29k
ZSwgMHhmZik7Ci0gICAgICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IDQ7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFJMRTggaGFzIG9uZSBjb2xvciBpbmRl
eCB0aGF0IGdldHMgcmVwZWF0ZWQ7IFJMRTQgaGFzIHR3bwotICAgICAgICAgICAgICAgIC8vIGNv
bG9yIGluZGV4ZXMgaW4gdGhlIHVwcGVyIGFuZCBsb3dlciA0IGJpdHMgb2YgdGhlIGJ5dGUsCi0g
ICAgICAgICAgICAgICAgLy8gd2hpY2ggYXJlIGFsdGVybmF0ZWQuCi0gICAgICAgICAgICAgICAg
c2l6ZV90IGNvbG9ySW5kZXhlc1syXSA9IHtjb2RlLCBjb2RlfTsKLSAgICAgICAgICAgICAgICBp
ZiAobV9pbmZvSGVhZGVyLmJpQ29tcHJlc3Npb24gPT0gUkxFNCkgewotICAgICAgICAgICAgICAg
ICAgICBjb2xvckluZGV4ZXNbMF0gPSAoY29sb3JJbmRleGVzWzBdID4+IDQpICYgMHhmOwotICAg
ICAgICAgICAgICAgICAgICBjb2xvckluZGV4ZXNbMV0gJj0gMHhmOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoKGNvbG9ySW5kZXhlc1swXSA+PSBtX2luZm9IZWFkZXIu
YmlDbHJVc2VkKQotICAgICAgICAgICAgICAgICAgICB8fCAoY29sb3JJbmRleGVzWzFdID49IG1f
aW5mb0hlYWRlci5iaUNsclVzZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBmb3IgKGludCB3aGljaCA9IDA7IG1fY29vcmQueCgpIDwgZW5k
WDsgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldEkoY29sb3JJbmRleGVzW3doaWNoXSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHdoaWNoID0gIXdoaWNoOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArPSAyOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotfQotCi1ib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0
YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgaW5STEUsIGludCBudW1QaXhlbHMpCi17Ci0gICAg
aWYgKG1fZGVjb2RlZE9mZnNldCA+IGRhdGEtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFpblJMRSkKLSAgICAgICAgbnVtUGl4ZWxzID0gc2l6ZSgpLndpZHRoKCk7
Ci0KLSAgICAvLyBGYWlsIGlmIHdlJ3JlIGJlaW5nIGFza2VkIHRvIGRlY29kZSBtb3JlIHBpeGVs
cyB0aGFuIHJlbWFpbiBpbiB0aGUgcm93LgotICAgIGNvbnN0IGludCBlbmRYID0gbV9jb29yZC54
KCkgKyBudW1QaXhlbHM7Ci0gICAgaWYgKGVuZFggPiBzaXplKCkud2lkdGgoKSkgewotICAgICAg
ICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBEZXRlcm1pbmUgaG93IG1hbnkgYnl0ZXMgb2YgZGF0YSB0aGUgcmVxdWVzdGVkIG51bWJlciBv
ZiBwaXhlbHMKLSAgICAvLyByZXF1aXJlcy4KLSAgICBjb25zdCBzaXplX3QgcGl4ZWxzUGVyQnl0
ZSA9IDggLyBtX2luZm9IZWFkZXIuYmlCaXRDb3VudDsKLSAgICBjb25zdCBzaXplX3QgYnl0ZXNQ
ZXJQaXhlbCA9IG1faW5mb0hlYWRlci5iaUJpdENvdW50IC8gODsKLSAgICBjb25zdCBzaXplX3Qg
dW5wYWRkZWROdW1CeXRlcyA9IChtX2luZm9IZWFkZXIuYmlCaXRDb3VudCA8IDE2KQotICAgICAg
ICA/ICgobnVtUGl4ZWxzICsgcGl4ZWxzUGVyQnl0ZSAtIDEpIC8gcGl4ZWxzUGVyQnl0ZSkKLSAg
ICAgICAgOiAobnVtUGl4ZWxzICogYnl0ZXNQZXJQaXhlbCk7Ci0gICAgLy8gUkxFIHJ1bnMgYXJl
IHplcm8tcGFkZGVkIGF0IHRoZSBlbmQgdG8gYSBtdWx0aXBsZSBvZiAxNiBiaXRzLiAgTm9uLVJM
RQotICAgIC8vIGRhdGEgaXMgaW4gcm93cyBhbmQgaXMgemVyby1wYWRkZWQgdG8gYSBtdWx0aXBs
ZSBvZiAzMiBiaXRzLgotICAgIGNvbnN0IHNpemVfdCBhbGlnbkJpdHMgPSBpblJMRSA/IDEgOiAz
OwotICAgIGNvbnN0IHNpemVfdCBwYWRkZWROdW1CeXRlcyA9ICh1bnBhZGRlZE51bUJ5dGVzICsg
YWxpZ25CaXRzKSAmIH5hbGlnbkJpdHM7Ci0KLSAgICAvLyBEZWNvZGUgYXMgbWFueSByb3dzIGFz
IHdlIGNhbi4gIChGb3IgUkxFLCB3aGVyZSB3ZSBvbmx5IHdhbnQgdG8gZGVjb2RlCi0gICAgLy8g
b25lIHJvdywgd2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhpcyBjb25kaXRpb24gaXMgdHJ1
ZS4pCi0gICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3Qo
KTsKLSAgICB3aGlsZSAoIXBhc3RFbmRPZkltYWdlKDApKSB7Ci0gICAgICAgIC8vIEJhaWwgaWYg
d2UgZG9uJ3QgaGF2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBpeGVs
cy4KLSAgICAgICAgaWYgKChkYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZzZXQpIDwgcGFkZGVk
TnVtQnl0ZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1faW5m
b0hlYWRlci5iaUJpdENvdW50IDwgMTYpIHsKLSAgICAgICAgICAgIC8vIFBhbGV0dGVkIGRhdGEu
ICBQaXhlbHMgYXJlIHN0b3JlZCBsaXR0bGUtZW5kaWFuIHdpdGhpbiBieXRlcy4KLSAgICAgICAg
ICAgIC8vIERlY29kZSBwaXhlbHMgb25lIGJ5dGUgYXQgYSB0aW1lLCBsZWZ0IHRvIHJpZ2h0IChz
bywgc3RhcnRpbmcgYXQKLSAgICAgICAgICAgIC8vIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMg
aW4gdGhlIGJ5dGUpLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXNrID0gKDEgPDwgbV9p
bmZvSGVhZGVyLmJpQml0Q291bnQpIC0gMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGJ5dGUg
PSAwOyBieXRlIDwgdW5wYWRkZWROdW1CeXRlczsgKytieXRlKSB7Ci0gICAgICAgICAgICAgICAg
dWludDhfdCBwaXhlbERhdGEgPSBkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgYnl0ZV07
Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgcGl4ZWwgPSAwOyAocGl4ZWwgPCBwaXhlbHNQ
ZXJCeXRlKSAmJiAobV9jb29yZC54KCkgPCBlbmRYKTsgKytwaXhlbCkgewotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzaXplX3QgY29sb3JJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAocGl4ZWxEYXRhID4+ICg4IC0gbV9pbmZvSGVhZGVyLmJpQml0Q291bnQpKSAmIG1hc2s7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX2FuZE1hc2tTdGF0ZSA9PSBEZWNvZGluZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8gYWNjdXJhdGVseSByZXBy
ZXNlbnQgYW4gQU5EICsgWE9SCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24g
YXMgYW4gUkdCQSBpbWFnZSwgc28gd2hlcmUgdGhlIEFORCB2YWx1ZXMKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFyZSAxLCB3ZSBzaW1wbHkgc2V0IHRoZSBmcmFtZWJ1ZmZlciBwaXhlbHMg
dG8gZnVsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50LCBvbiB0aGUg
YXNzdW1wdGlvbiB0aGF0IG1vc3QgSUNPcyBvbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdlYiB3aWxsIG5vdCBiZSBkb2luZyBhIGxvdCBvZiBpbnZlcnRpbmcuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29sb3JJbmRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldFJHQkEoMCwgMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyLnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb29yZC5tb3ZlKDEsIDApOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9ySW5k
ZXggPj0gbV9pbmZvSGVhZGVyLmJpQ2xyVXNlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzZXRJKGNvbG9ySW5kZXgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHBpeGVsRGF0YSA8PD0gbV9pbmZvSGVhZGVyLmJpQml0Q291bnQ7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
UkdCIGRhdGEuICBEZWNvZGUgcGl4ZWxzIG9uZSBhdCBhIHRpbWUsIGxlZnQgdG8gcmlnaHQuCi0g
ICAgICAgICAgICB3aGlsZSAobV9jb29yZC54KCkgPCBlbmRYKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgdWludDMyX3QgcGl4ZWwgPSByZWFkQ3VycmVudFBpeGVsKGRhdGEsIGJ5dGVzUGVyUGl4
ZWwpOwotCi0gICAgICAgICAgICAgICAgLy8gU29tZSBCTVBzIHNwZWNpZnkgYW4gYWxwaGEgY2hh
bm5lbCBidXQgZG9uJ3QgYWN0dWFsbHkgdXNlIGl0Ci0gICAgICAgICAgICAgICAgLy8gKGl0IGNv
bnRhaW5zIGFsbCAwcykuICBUbyBhdm9pZCBkaXNwbGF5aW5nIHRoZXNlIGltYWdlcyBhcwotICAg
ICAgICAgICAgICAgIC8vIGZ1bGx5LXRyYW5zcGFyZW50LCBkZWNvZGUgYXMgaWYgaW1hZ2VzIGFy
ZSBmdWxseSBvcGFxdWUKLSAgICAgICAgICAgICAgICAvLyB1bnRpbCB3ZSBhY3R1YWxseSBzZWUg
YSBub24temVybyBhbHBoYSB2YWx1ZTsgYXQgdGhhdCBwb2ludCwKLSAgICAgICAgICAgICAgICAv
LyByZXNldCBhbnkgcHJldmlvdXNseS1kZWNvZGVkIHBpeGVscyB0byBmdWxseSB0cmFuc3BhcmVu
dCBhbmQKLSAgICAgICAgICAgICAgICAvLyBjb250aW51ZSBkZWNvZGluZyBiYXNlZCBvbiB0aGUg
cmVhbCBhbHBoYSBjaGFubmVsIHZhbHVlcy4KLSAgICAgICAgICAgICAgICAvLyBBcyBhbiBvcHRp
bWl6YXRpb24sIGF2b2lkIHNldHRpbmcgImhhc0FscGhhIiB0byB0cnVlIGZvcgotICAgICAgICAg
ICAgICAgIC8vIGltYWdlcyB3aGVyZSBhbGwgYWxwaGEgdmFsdWVzIGFyZSAyNTU7IG9wYXF1ZSBp
bWFnZXMgYXJlCi0gICAgICAgICAgICAgICAgLy8gZmFzdGVyIHRvIGRyYXcuCi0gICAgICAgICAg
ICAgICAgaW50IGFscGhhID0gZ2V0QWxwaGEocGl4ZWwpOwotICAgICAgICAgICAgICAgIGlmICgh
bV9zZWVuTm9uWmVyb0FscGhhUGl4ZWwgJiYgKGFscGhhID09IDApKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc2Vlblplcm9BbHBoYVBpeGVsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YWxwaGEgPSAyNTU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9zZWVuTm9uWmVyb0FscGhhUGl4ZWwgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9zZWVuWmVyb0FscGhhUGl4ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ci56ZXJvRmlsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWVuWmVyb0FscGhhUGl4
ZWwgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbHBoYSAhPSAyNTUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc2V0UkdCQShnZXRDb21wb25lbnQocGl4
ZWwsIDApLCBnZXRDb21wb25lbnQocGl4ZWwsIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0Q29tcG9uZW50KHBpeGVsLCAyKSwgYWxwaGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU3VjY2Vzcywga2VlcCBnb2luZy4KLSAgICAgICAgbV9kZWNvZGVkT2Zm
c2V0ICs9IHBhZGRlZE51bUJ5dGVzOwotICAgICAgICBpZiAoaW5STEUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgbW92ZUJ1ZmZlclRvTmV4dFJvdygpOwotICAgIH0KLQotICAg
IC8vIEZpbmlzaGVkIGRlY29kaW5nIHdob2xlIGltYWdlLgotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEJNUEltYWdlUmVhZGVyOjptb3ZlQnVmZmVyVG9OZXh0Um93KCkKLXsKLSAgICBtX2Nv
b3JkLm1vdmUoLW1fY29vcmQueCgpLCBtX2lzVG9wRG93biA/IDEgOiAtMSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9CTVBJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA0NDYzMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9CTVBJbWFnZVJlYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAy
MDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQk1QSW1hZ2VSZWFk
ZXJfaAotI2RlZmluZSBCTVBJbWFnZVJlYWRlcl9oCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNp
bmNsdWRlICJJbWFnZURlY29kZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgLy8g
VGhpcyBjbGFzcyBkZWNvZGVzIGEgQk1QIGltYWdlLiAgSXQgaXMgdXNlZCBhcyBhIGJhc2UgZm9y
IHRoZSBCTVAgYW5kIElDTwotICAgIC8vIGRlY29kZXJzLCB3aGljaCB3cmFwIGl0IGluIHRoZSBh
cHByb3ByaWF0ZSBjb2RlIHRvIHJlYWQgZmlsZSBoZWFkZXJzLCBldGMuCi0gICAgY2xhc3MgQk1Q
SW1hZ2VSZWFkZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IEJNUEltYWdlUmVhZGVyKCk7Ci0KLSAgICAgICAgLy8gRG9lcyB0aGUgYWN0dWFsIGRlY29kaW5n
LiAgfGRhdGF8IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLAotICAgICAgICAv
LyBidXQgbWF5IGJlIGluY29tcGxldGUuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNvZGVJbWFn
ZShTaGFyZWRCdWZmZXIqIGRhdGEpID0gMDsKLQotICAgICAgICAvLyBJbWFnZURlY29kZXIKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERh
dGFSZWNlaXZlZCk7Ci0gICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgZW51bSBBbmRN
YXNrU3RhdGUgewotICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgIE5vdFlldERlY29kZWQs
Ci0gICAgICAgICAgICBEZWNvZGluZywKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBEZWNvZGVz
IGEgc2luZ2xlIEJNUCwgc3RhcnRpbmcgd2l0aCBhbiBpbmZvIGhlYWRlci4KLSAgICAgICAgdm9p
ZCBkZWNvZGVCTVAoU2hhcmVkQnVmZmVyKiBkYXRhKTsKLQotICAgICAgICAvLyBSZWFkIGEgdmFs
dWUgZnJvbSB8ZGF0YVttX2RlY29kZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0XXwsIGNvbnZl
cnRpbmcKLSAgICAgICAgLy8gZnJvbSBsaXR0bGUgdG8gbmF0aXZlIGVuZGlhbm5lc3MuCi0gICAg
ICAgIGlubGluZSB1aW50MTZfdCByZWFkVWludDE2KFNoYXJlZEJ1ZmZlciogZGF0YSwgaW50IGFk
ZGl0aW9uYWxPZmZzZXQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVpbnQxNl90IHJl
c3VsdDsKLSAgICAgICAgICAgIG1lbWNweSgmcmVzdWx0LCAmZGF0YS0+ZGF0YSgpW21fZGVjb2Rl
ZE9mZnNldCArIGFkZGl0aW9uYWxPZmZzZXRdLCAyKTsKLSAgICAgICAgI2lmIFBMQVRGT1JNKEJJ
R19FTkRJQU4pCi0gICAgICAgICAgICByZXN1bHQgPSAoKHJlc3VsdCAmIDB4ZmYpIDw8IDgpIHwg
KChyZXN1bHQgJiAweGZmMDApID4+IDgpOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdWludDMyX3QgcmVhZFVp
bnQzMihTaGFyZWRCdWZmZXIqIGRhdGEsIGludCBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICB1aW50MzJfdCByZXN1bHQ7Ci0gICAgICAgICAgICBtZW1jcHko
JnJlc3VsdCwgJmRhdGEtPmRhdGEoKVttX2RlY29kZWRPZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0
XSwgNCk7Ci0gICAgICAgICNpZiBQTEFURk9STShCSUdfRU5ESUFOKQotICAgICAgICAgICAgcmVz
dWx0ID0gKChyZXN1bHQgJiAweGZmKSA8PCAyNCkgfCAoKHJlc3VsdCAmIDB4ZmYwMCkgPDwgOCkg
fAotICAgICAgICAgICAgICAgICgocmVzdWx0ICYgMHhmZjAwMDApID4+IDgpIHwgKChyZXN1bHQg
JiAweGZmMDAwMDAwKSA+PiAyNCk7Ci0gICAgICAgICNlbmRpZgotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFuIGluZGV4IGludG8gfG1fZGF0YXwg
cmVwcmVzZW50aW5nIGhvdyBtdWNoIHdlJ3ZlIGFscmVhZHkgZGVjb2RlZC4KLSAgICAgICAgc2l6
ZV90IG1fZGVjb2RlZE9mZnNldDsKLQotICAgICAgICAvLyBUaGUgZmlsZSBvZmZzZXQgYXQgd2hp
Y2ggdGhlIEJNUCBpbmZvIGhlYWRlciBzdGFydHMuCi0gICAgICAgIHNpemVfdCBtX2hlYWRlck9m
ZnNldDsKLQotICAgICAgICAvLyBUaGUgZmlsZSBvZmZzZXQgYXQgd2hpY2ggdGhlIGFjdHVhbCBp
bWFnZSBiaXRzIHN0YXJ0LiAgV2hlbiBkZWNvZGluZyBJQ08KLSAgICAgICAgLy8gZmlsZXMsIHRo
aXMgaXMgc2V0IHRvIDAsIHNpbmNlIGl0J3Mgbm90IHN0b3JlZCBhbnl3aGVyZSBpbiBhIGhlYWRl
cjsgdGhlCi0gICAgICAgIC8vIHJlYWRlciBmdW5jdGlvbnMgZXhwZWN0IHRoZSBpbWFnZSBkYXRh
IHRvIHN0YXJ0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZQotICAgICAgICAvLyBoZWFkZXIgYW5kIChp
ZiBuZWNlc3NhcnkpIGNvbG9yIHRhYmxlLgotICAgICAgICBzaXplX3QgbV9pbWdEYXRhT2Zmc2V0
OwotCi0gICAgICAgIC8vIElDT3Mgc3RvcmUgYSAxYnBwICJtYXNrIiBpbW1lZGlhdGVseSBhZnRl
ciB0aGUgbWFpbiBiaXRtYXAgaW1hZ2UgZGF0YQotICAgICAgICAvLyAoYW5kLCBjb25mdXNpbmds
eSwgYWRkIGl0cyBoZWlnaHQgdG8gdGhlIGJpSGVpZ2h0IHZhbHVlIGluIHRoZSBpbmZvCi0gICAg
ICAgIC8vIGhlYWRlciwgdGh1cyBkb3VibGluZyBpdCkuICBUaGlzIHZhcmlhYmxlIHRyYWNrcyB3
aGV0aGVyIHdlIGhhdmUgc3VjaCBhCi0gICAgICAgIC8vIG1hc2sgYW5kIGlmIHdlJ3ZlIHN0YXJ0
ZWQgZGVjb2RpbmcgaXQgeWV0LgotICAgICAgICBBbmRNYXNrU3RhdGUgbV9hbmRNYXNrU3RhdGU7
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICAvLyBUaGUgdmFyaW91cyBCTVAgY29tcHJlc3Npb24g
dHlwZXMuICBXZSBkb24ndCBjdXJyZW50bHkgZGVjb2RlIGFsbCB0aGVzZS4KLSAgICAgICAgZW51
bSBDb21wcmVzc2lvblR5cGUgewotICAgICAgICAgICAgLy8gVW5pdmVyc2FsIHR5cGVzCi0gICAg
ICAgICAgICBSR0IgPSAwLAotICAgICAgICAgICAgUkxFOCA9IDEsCi0gICAgICAgICAgICBSTEU0
ID0gMiwKLSAgICAgICAgICAgIC8vIFdpbmRvd3MgVjMrIG9ubHkKLSAgICAgICAgICAgIEJJVEZJ
RUxEUyA9IDMsCi0gICAgICAgICAgICBKUEVHID0gNCwKLSAgICAgICAgICAgIFBORyA9IDUsCi0g
ICAgICAgICAgICAvLyBPUy8yIDIueC1vbmx5Ci0gICAgICAgICAgICBIVUZGTUFOMUQsICAvLyBT
dG9yZWQgaW4gZmlsZSBhcyAzCi0gICAgICAgICAgICBSTEUyNCwgICAgICAvLyBTdG9yZWQgaW4g
ZmlsZSBhcyA0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gVGhlc2UgYXJlIGJhc2VkIG9uIHRo
ZSBXaW5kb3dzIEJJVE1BUElORk9IRUFERVIgYW5kIFJHQlRSSVBMRSBzdHJ1Y3RzLAotICAgICAg
ICAvLyBidXQgd2l0aCB1bm5lY2Vzc2FyeSBlbnRyaWVzIHJlbW92ZWQuCi0gICAgICAgIHN0cnVj
dCBCaXRtYXBJbmZvSGVhZGVyIHsKLSAgICAgICAgICAgIHVpbnQzMl90IGJpU2l6ZTsKLSAgICAg
ICAgICAgIGludDMyX3QgYmlXaWR0aDsKLSAgICAgICAgICAgIGludDMyX3QgYmlIZWlnaHQ7Ci0g
ICAgICAgICAgICB1aW50MTZfdCBiaUJpdENvdW50OwotICAgICAgICAgICAgQ29tcHJlc3Npb25U
eXBlIGJpQ29tcHJlc3Npb247Ci0gICAgICAgICAgICB1aW50MzJfdCBiaUNsclVzZWQ7Ci0gICAg
ICAgIH07Ci0gICAgICAgIHN0cnVjdCBSR0JUcmlwbGUgewotICAgICAgICAgICAgdWludDhfdCBy
Z2JCbHVlOwotICAgICAgICAgICAgdWludDhfdCByZ2JHcmVlbjsKLSAgICAgICAgICAgIHVpbnQ4
X3QgcmdiUmVkOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIERldGVybWluZXMgdGhlIHNpemUg
b2YgdGhlIEJNUCBpbmZvIGhlYWRlci4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBpcwotICAg
ICAgICAvLyB2YWxpZC4KLSAgICAgICAgYm9vbCBnZXRJbmZvSGVhZGVyU2l6ZShTaGFyZWRCdWZm
ZXIqIGRhdGEpOwotCi0gICAgICAgIC8vIFByb2Nlc3NlcyB0aGUgQk1QIGluZm8gaGVhZGVyLiAg
UmV0dXJucyB0cnVlIGlmIHRoZSBpbmZvIGhlYWRlciBjb3VsZCBiZQotICAgICAgICAvLyBkZWNv
ZGVkLgotICAgICAgICBib29sIHByb2Nlc3NJbmZvSGVhZGVyKFNoYXJlZEJ1ZmZlciogZGF0YSk7
Ci0KLSAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBwcm9jZXNzSW5mb0hlYWRlcigpIHdo
aWNoIGRvZXMgdGhlIGFjdHVhbCByZWFkaW5nIG9mCi0gICAgICAgIC8vIGhlYWRlciB2YWx1ZXMg
ZnJvbSB0aGUgYnl0ZSBzdHJlYW0uICBSZXR1cm5zIGZhbHNlIG9uIGVycm9yLgotICAgICAgICBi
b29sIHJlYWRJbmZvSGVhZGVyKFNoYXJlZEJ1ZmZlciogZGF0YSk7Ci0KLSAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgaXMgYSBXaW5kb3dzIFY0KyBCTVAuCi0gICAgICAgIGlubGluZSBi
b29sIGlzV2luZG93c1Y0UGx1cygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdp
bmRvd3MgVjQgaW5mbyBoZWFkZXIgaXMgMTA4IGJ5dGVzLiAgVjUgaXMgMTI0IGJ5dGVzLgotICAg
ICAgICAgICAgcmV0dXJuIChtX2luZm9IZWFkZXIuYmlTaXplID09IDEwOCkgfHwgKG1faW5mb0hl
YWRlci5iaVNpemUgPT0gMTI0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybnMgZmFs
c2UgaWYgY29uc2lzdGVuY3kgZXJyb3JzIGFyZSBmb3VuZCBpbiB0aGUgaW5mbyBoZWFkZXIuCi0g
ICAgICAgIGJvb2wgaXNJbmZvSGVhZGVyVmFsaWQoKSBjb25zdDsKLQotICAgICAgICAvLyBGb3Ig
QklfQklURklFTERTIGltYWdlcywgaW5pdGlhbGl6ZXMgdGhlIG1fYml0TWFza3NbXSBhbmQgbV9i
aXRPZmZzZXRzW10KLSAgICAgICAgLy8gYXJyYXlzLiAgcHJvY2Vzc0luZm9IZWFkZXIoKSB3aWxs
IGluaXRpYWxpemUgdGhlc2UgZm9yIG90aGVyIGNvbXByZXNzaW9uCi0gICAgICAgIC8vIHR5cGVz
IHdoZXJlIG5lZWRlZC4KLSAgICAgICAgYm9vbCBwcm9jZXNzQml0bWFza3MoU2hhcmVkQnVmZmVy
KiBkYXRhKTsKLQotICAgICAgICAvLyBGb3IgcGFsZXR0ZWQgaW1hZ2VzLCBhbGxvY2F0ZXMgYW5k
IGluaXRpYWxpemVzIHRoZSBtX2NvbG9yVGFibGVbXSBhcnJheS4KLSAgICAgICAgYm9vbCBwcm9j
ZXNzQ29sb3JUYWJsZShTaGFyZWRCdWZmZXIqIGRhdGEpOwotCi0gICAgICAgIC8vIFByb2Nlc3Nl
cyBhbiBSTEUtZW5jb2RlZCBpbWFnZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXJlIGltYWdl
IHdhcwotICAgICAgICAvLyBkZWNvZGVkLgotICAgICAgICBib29sIHByb2Nlc3NSTEVEYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSk7Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2VzIGEgc2V0IG9mIG5vbi1S
TEUtY29tcHJlc3NlZCBwaXhlbHMuICBUd28gY2FzZXM6Ci0gICAgICAgIC8vICAgKiBpblJMRSA9
IHRydWU6IHRoZSBkYXRhIGlzIGluc2lkZSBhbiBSTEUtZW5jb2RlZCBiaXRtYXAuICBUcmllcyB0
bwotICAgICAgICAvLyAgICAgcHJvY2VzcyB8bnVtUGl4ZWxzfCBwaXhlbHMgb24gdGhlIGN1cnJl
bnQgcm93OyByZXR1cm5zIHRydWUgb24KLSAgICAgICAgLy8gICAgIHN1Y2Nlc3MuCi0gICAgICAg
IC8vICAgKiBpblJMRSA9IGZhbHNlOiB0aGUgZGF0YSBpcyBpbnNpZGUgYSBub24tUkxFLWVuY29k
ZWQgYml0bWFwLgotICAgICAgICAvLyAgICAgfG51bVBpeGVsc3wgaXMgaWdub3JlZC4gIEV4cGVj
dHMgfG1fY29vcmR8IHRvIHBvaW50IGF0IHRoZSBiZWdpbm5pbmcKLSAgICAgICAgLy8gICAgIG9m
IHRoZSBuZXh0IHJvdyB0byBiZSBkZWNvZGVkLiAgVHJpZXMgdG8gcHJvY2VzcyBhcyBtYW55IGNv
bXBsZXRlCi0gICAgICAgIC8vICAgICByb3dzIGFzIHBvc3NpYmxlLiAgUmV0dXJucyB0cnVlIGlm
IHRoZSB3aG9sZSBpbWFnZSB3YXMgZGVjb2RlZC4KLSAgICAgICAgYm9vbCBwcm9jZXNzTm9uUkxF
RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgaW5STEUsIGludCBudW1QaXhlbHMpOwotCi0g
ICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCB5LWNvb3JkaW5hdGUgcGx1cyB8
bnVtUm93c3wgd291bGQgYmUgcGFzdAotICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBpbWFnZS4g
IEhlcmUgInBsdXMiIG1lYW5zICJ0b3dhcmQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UiLAotICAgICAg
ICAvLyBzbyBkb3dud2FyZHMgZm9yIG1faXNUb3BEb3duIGltYWdlcyBhbmQgdXB3YXJkcyBvdGhl
cndpc2UuCi0gICAgICAgIGlubGluZSBib29sIHBhc3RFbmRPZkltYWdlKGludCBudW1Sb3dzKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9pc1RvcERvd24KLSAgICAgICAgICAgICAg
ICA/ICgobV9jb29yZC55KCkgKyBudW1Sb3dzKSA+PSBzaXplKCkuaGVpZ2h0KCkpCi0gICAgICAg
ICAgICAgICAgOiAoKG1fY29vcmQueSgpIC0gbnVtUm93cykgPCAwKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFJldHVybnMgdGhlIHBpeGVsIGRhdGEgZm9yIHRoZSBjdXJyZW50IFggY29vcmRp
bmF0ZSBpbiBhIHVpbnQzMl90LgotICAgICAgICAvLyBBc3N1bWVzIG1fZGVjb2RlZE9mZnNldCBo
YXMgYmVlbiBzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudAotICAgICAgICAvLyBy
b3cuCi0gICAgICAgIC8vIE5PVEU6IE9ubHkgYXMgbWFueSBieXRlcyBvZiB0aGUgcmV0dXJuIHZh
bHVlIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCB0aGUKLSAgICAgICAgLy8gcGl4ZWwgZGF0YSB3aWxs
IGFjdHVhbGx5IGJlIHNldC4KLSAgICAgICAgaW5saW5lIHVpbnQzMl90IHJlYWRDdXJyZW50UGl4
ZWwoU2hhcmVkQnVmZmVyKiBkYXRhLCBpbnQgYnl0ZXNQZXJQaXhlbCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgaW50IGFkZGl0aW9uYWxPZmZzZXQgPSBtX2Nvb3JkLngoKSAq
IGJ5dGVzUGVyUGl4ZWw7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJ5dGVzUGVyUGl4ZWwpIHsKLSAg
ICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFVpbnQxNihkYXRh
LCBhZGRpdGlvbmFsT2Zmc2V0KTsKLQotICAgICAgICAgICAgY2FzZSAzOiB7Ci0gICAgICAgICAg
ICAgICAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgdGhhdCB3ZSBuZXZlciBzZXQgdGhlIG1vc3Qgc2ln
bmlmaWNhbnQgYnl0ZSBvZgotICAgICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgaGVy
ZSBpbiBsaXR0bGUtZW5kaWFuIG1vZGUsIHRoZSBjYWxsZXIgd29uJ3QKLSAgICAgICAgICAgICAg
ICAvLyByZWFkIGl0LgotICAgICAgICAgICAgICAgIHVpbnQzMl90IHBpeGVsOwotICAgICAgICAg
ICAgICAgIG1lbWNweSgmcGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICZkYXRhLT5kYXRh
KClbbV9kZWNvZGVkT2Zmc2V0ICsgYWRkaXRpb25hbE9mZnNldF0sIDMpOwotICAgICAgICAjaWYg
UExBVEZPUk0oQklHX0VORElBTikKLSAgICAgICAgICAgICAgICBwaXhlbCA9ICgocGl4ZWwgJiAw
eGZmMDApIDw8IDgpIHwgKChwaXhlbCAmIDB4ZmYwMDAwKSA+PiA4KSB8Ci0gICAgICAgICAgICAg
ICAgICAgICgocGl4ZWwgJiAweGZmMDAwMDAwKSA+PiAyNCk7Ci0gICAgICAgICNlbmRpZgotICAg
ICAgICAgICAgICAgIHJldHVybiBwaXhlbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Y2FzZSA0OgotICAgICAgICAgICAgICAgIHJldHVybiByZWFkVWludDMyKGRhdGEsIGFkZGl0aW9u
YWxPZmZzZXQpOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGRlc2ly
ZWQgY29tcG9uZW50ICgwLCAxLCAyLCAzID09IFIsIEcsIEIsIEEpIGluCi0gICAgICAgIC8vIHRo
ZSBnaXZlbiBwaXhlbCBkYXRhLgotICAgICAgICBpbmxpbmUgdW5zaWduZWQgZ2V0Q29tcG9uZW50
KHVpbnQzMl90IHBpeGVsLCBpbnQgY29tcG9uZW50KSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKChwaXhlbCAmIG1fYml0TWFza3NbY29tcG9uZW50XSkgPj4gbV9iaXRTaGlm
dHNSaWdodFtjb21wb25lbnRdKQotICAgICAgICAgICAgICAgIDw8IG1fYml0U2hpZnRzTGVmdFtj
b21wb25lbnRdOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHVuc2lnbmVkIGdldEFscGhh
KHVpbnQzMl90IHBpeGVsKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGb3IgaW1h
Z2VzIHdpdGhvdXQgYWxwaGEsIHJldHVybiBhbHBoYSBvZiAweGZmLgotICAgICAgICAgICAgaWYg
KG1fYml0TWFza3NbM10gPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMHhmZjsKLQotICAg
ICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudChwaXhlbCwgMyk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTZXRzIHRoZSBjdXJyZW50IHBpeGVsIHRvIHRoZSBjb2xvciBnaXZlbiBieSB8Y29s
b3JJbmRleHwuICBUaGlzIGFsc28KLSAgICAgICAgLy8gaW5jcmVtZW50cyB0aGUgcmVsZXZhbnQg
bG9jYWwgdmFyaWFibGVzIHRvIG1vdmUgdGhlIGN1cnJlbnQgcGl4ZWwgcmlnaHQKLSAgICAgICAg
Ly8gYnkgb25lLgotICAgICAgICBpbmxpbmUgdm9pZCBzZXRJKHNpemVfdCBjb2xvckluZGV4KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKG1fY29sb3JUYWJsZVtjb2xvckluZGV4XS5y
Z2JSZWQsIG1fY29sb3JUYWJsZVtjb2xvckluZGV4XS5yZ2JHcmVlbiwKLSAgICAgICAgICAgICAg
ICAgICAgbV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYkJsdWUsIDB4ZmYpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gTGlrZSBzZXRJKCksIGJ1dCB3aXRoIHRoZSBpbmRpdmlkdWFsIGNvbXBv
bmVudCB2YWx1ZXMgc3BlY2lmaWVkLgotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKHVuc2ln
bmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIGFscGhhKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRSR0JB
KG1fY29vcmQueCgpLCBtX2Nvb3JkLnkoKSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
ICAgICAgICAgbV9jb29yZC5tb3ZlKDEsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmls
bHMgcGl4ZWxzIGZyb20gdGhlIGN1cnJlbnQgWC1jb29yZGluYXRlIHVwIHRvLCBidXQgbm90IGlu
Y2x1ZGluZywKLSAgICAgICAgLy8gfGVuZENvb3JkfCB3aXRoIHRoZSBjb2xvciBnaXZlbiBieSB0
aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzLiAgVGhpcyBhbHNvCi0gICAgICAgIC8vIGluY3JlbWVu
dHMgdGhlIHJlbGV2YW50IGxvY2FsIHZhcmlhYmxlcyB0byBtb3ZlIHRoZSBjdXJyZW50IHBpeGVs
IHJpZ2h0Ci0gICAgICAgIC8vIHRvIHxlbmRDb29yZHwuCi0gICAgICAgIGlubGluZSB2b2lkIGZp
bGxSR0JBKGludCBlbmRDb29yZCwgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwgdW5zaWdu
ZWQgYmx1ZSwgdW5zaWduZWQgYWxwaGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICht
X2Nvb3JkLngoKSA8IGVuZENvb3JkKQotICAgICAgICAgICAgICAgIHNldFJHQkEocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzZXRzIHRoZSByZWxl
dmFudCBsb2NhbCB2YXJpYWJsZXMgdG8gc3RhcnQgZHJhd2luZyBhdCB0aGUgbGVmdCBlZGdlIG9m
Ci0gICAgICAgIC8vIHRoZSAibmV4dCIgcm93LCB3aGVyZSAibmV4dCIgaXMgYWJvdmUgb3IgYmVs
b3cgdGhlIGN1cnJlbnQgcm93IGRlcGVuZGluZwotICAgICAgICAvLyBvbiB0aGUgdmFsdWUgb2Yg
fG1faXNUb3BEb3dufC4KLSAgICAgICAgdm9pZCBtb3ZlQnVmZmVyVG9OZXh0Um93KCk7Ci0KLSAg
ICAgICAgLy8gVGhlIEJNUCBpbmZvIGhlYWRlci4KLSAgICAgICAgQml0bWFwSW5mb0hlYWRlciBt
X2luZm9IZWFkZXI7Ci0KLSAgICAgICAgLy8gVHJ1ZSBpZiB0aGlzIGlzIGFuIE9TLzIgMS54IChh
a2EgV2luZG93cyAyLngpIEJNUC4gIFRoZSBzdHJ1Y3QgbGF5b3V0cwotICAgICAgICAvLyBmb3Ig
dGhpcyB0eXBlIG9mIEJNUCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIGxhdGVyLCBt
b3JlIGNvbW1vbgotICAgICAgICAvLyBmb3JtYXRzLgotICAgICAgICBib29sIG1faXNPUzIxeDsK
LQotICAgICAgICAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gT1MvMiAyLnggQk1QLiAgVGhlIG1lYW5p
bmdzIG9mIGNvbXByZXNzaW9uIHR5cGVzIDMKLSAgICAgICAgLy8gYW5kIDQgZm9yIHRoaXMgdHlw
ZSBvZiBCTVAgZGlmZmVyIGZyb20gV2luZG93cyBWMysgQk1Qcy4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gVGhpcyB3aWxsIGJlIGZhbHNlbHkgbmVnYXRpdmUgaW4gc29tZSBjYXNlcywgYnV0IG9u
bHkgb25lcyB3aGVyZSB0aGUgd2F5Ci0gICAgICAgIC8vIHdlIG1pc2ludGVycHJldCB0aGUgZGF0
YSBpcyBpcnJlbGV2YW50LgotICAgICAgICBib29sIG1faXNPUzIyeDsKLQotICAgICAgICAvLyBU
cnVlIGlmIHRoZSBCTVAgaXMgbm90IHZlcnRpY2FsbHkgZmxpcHBlZCwgdGhhdCBpcywgdGhlIGZp
cnN0IGxpbmUgb2YKLSAgICAgICAgLy8gcmFzdGVyIGRhdGEgaW4gdGhlIGZpbGUgaXMgdGhlIHRv
cCBsaW5lIG9mIHRoZSBpbWFnZS4KLSAgICAgICAgYm9vbCBtX2lzVG9wRG93bjsKLQotICAgICAg
ICAvLyBUaGVzZSBmbGFncyBnZXQgc2V0IHRvIGZhbHNlIGFzIHdlIGZpbmlzaCBlYWNoIHByb2Nl
c3Npbmcgc3RhZ2UuCi0gICAgICAgIGJvb2wgbV9uZWVkVG9Qcm9jZXNzQml0bWFza3M7Ci0gICAg
ICAgIGJvb2wgbV9uZWVkVG9Qcm9jZXNzQ29sb3JUYWJsZTsKLQotICAgICAgICAvLyBNYXNrcy9v
ZmZzZXRzIGZvciB0aGUgY29sb3IgdmFsdWVzIGZvciBub24tcGFsZXR0ZSBmb3JtYXRzLiAgVGhl
c2UgYXJlCi0gICAgICAgIC8vIGJpdHdpc2UsIHdpdGggYXJyYXkgZW50cmllcyAwLCAxLCAyLCAz
IGNvcnJlc3BvbmRpbmcgdG8gUiwgRywgQiwgQS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhl
IHJpZ2h0L2xlZnQgc2hpZnQgdmFsdWVzIGFyZSBtZWFudCB0byBiZSBhcHBsaWVkIGFmdGVyIHRo
ZSBtYXNrcy4KLSAgICAgICAgLy8gV2UgbmVlZCB0byByaWdodCBzaGlmdCB0byBjb21wZW5zYXRl
IGZvciB0aGUgYml0ZmllbGRzJyBvZmZzZXRzIGludG8gdGhlCi0gICAgICAgIC8vIDMyIGJpdHMg
b2YgcGl4ZWwgZGF0YSwgYW5kIGxlZnQgc2hpZnQgdG8gc2NhbGUgdGhlIGNvbG9yIHZhbHVlcyB1
cCBmb3IKLSAgICAgICAgLy8gZmllbGRzIHdpdGggbGVzcyB0aGFuIDggYml0cyBvZiBwcmVjaXNp
b24uICBTYWRseSwgd2UgY2FuJ3QganVzdCBjb21iaW5lCi0gICAgICAgIC8vIHRoZXNlIGludG8g
b25lIHNoaWZ0IHZhbHVlIGJlY2F1c2UgdGhlIG5ldCBzaGlmdCBhbW91bnQgY291bGQgZ28gZWl0
aGVyCi0gICAgICAgIC8vIGRpcmVjdGlvbi4gIChJZiBvbmx5ICI8PCAteCIgd2VyZSBlcXVpdmFs
ZW50IHRvICI+PiB4Ii4uLikKLSAgICAgICAgdWludDMyX3QgbV9iaXRNYXNrc1s0XTsKLSAgICAg
ICAgaW50IG1fYml0U2hpZnRzUmlnaHRbNF07Ci0gICAgICAgIGludCBtX2JpdFNoaWZ0c0xlZnRb
NF07Ci0KLSAgICAgICAgLy8gVGhlIGNvbG9yIHBhbGV0dGUsIGZvciBwYWxldHRlZCBmb3JtYXRz
LgotICAgICAgICBzaXplX3QgbV90YWJsZVNpemVJbkJ5dGVzOwotICAgICAgICBWZWN0b3I8UkdC
VHJpcGxlPiBtX2NvbG9yVGFibGU7Ci0KLSAgICAgICAgLy8gVGhlIGNvb3JkaW5hdGUgdG8gd2hp
Y2ggd2UndmUgZGVjb2RlZCB0aGUgaW1hZ2UuCi0gICAgICAgIEludFBvaW50IG1fY29vcmQ7Ci0K
LSAgICAgICAgLy8gVmFyaWFibGVzIHRoYXQgdHJhY2sgd2hldGhlciB3ZSd2ZSBzZWVuIHBpeGVs
cyB3aXRoIGFscGhhIHZhbHVlcyAhPSAwCi0gICAgICAgIC8vIGFuZCA9PSAwLCByZXNwZWN0aXZl
bHkuICBTZWUgY29tbWVudHMgaW4gcHJvY2Vzc05vblJMRURhdGEoKSBvbiBob3cKLSAgICAgICAg
Ly8gdGhlc2UgYXJlIHVzZWQuCi0gICAgICAgIGJvb2wgbV9zZWVuTm9uWmVyb0FscGhhUGl4ZWw7
Ci0gICAgICAgIGJvb2wgbV9zZWVuWmVyb0FscGhhUGl4ZWw7Ci0gICAgfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0
NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSwgSW5jLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiR0lG
SW1hZ2VSZWFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHSUZJbWFnZURl
Y29kZXJQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBHSUZJbWFnZURlY29kZXJQcml2YXRlKEdJRklt
YWdlRGVjb2RlciogZGVjb2RlciA9IDApCi0gICAgICAgIDogbV9yZWFkZXIoZGVjb2RlcikKLSAg
ICAgICAgLCBtX3JlYWRPZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgfkdJRkltYWdlRGVj
b2RlclByaXZhdGUoKQotICAgIHsKLSAgICAgICAgbV9yZWFkZXIuY2xvc2UoKTsKLSAgICB9Ci0K
LSAgICBib29sIGRlY29kZShTaGFyZWRCdWZmZXIqIGRhdGEsIAotICAgICAgICAgICAgICAgIEdJ
RkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnkgPSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxR
dWVyeSwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGFsdEZyYW1lID0gLTEpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9yZWFkZXIucmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopZGF0
YS0+ZGF0YSgpICsgbV9yZWFkT2Zmc2V0LCBkYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGFsdEZyYW1lKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBmcmFtZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWFkZXIuaW1hZ2VzX2NvdW50OyB9Ci0gICAgaW50IHJlcGV0aXRp
b25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmxvb3BfY291bnQ7IH0KLQotICAgIHZv
aWQgc2V0UmVhZE9mZnNldCh1bnNpZ25lZCBvKSB7IG1fcmVhZE9mZnNldCA9IG87IH0KLQotICAg
IGJvb2wgaXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyLmZyYW1lX3JlYWRl
ci0+aXNfdHJhbnNwYXJlbnQ7IH0KLQotICAgIHZvaWQgZ2V0Q29sb3JNYXAodW5zaWduZWQgY2hh
ciomIG1hcCwgdW5zaWduZWQmIHNpemUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9yZWFk
ZXIuZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkKSB7Ci0gICAgICAgICAg
ICBtYXAgPSBtX3JlYWRlci5mcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwOwotICAgICAgICAg
ICAgc2l6ZSA9ICh1bnNpZ25lZCltX3JlYWRlci5mcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFw
X3NpemU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYXAgPSBtX3JlYWRlci5nbG9i
YWxfY29sb3JtYXA7Ci0gICAgICAgICAgICBzaXplID0gbV9yZWFkZXIuZ2xvYmFsX2NvbG9ybWFw
X3NpemU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBmcmFtZVhPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX3JlYWRlci5mcmFtZV9yZWFkZXItPnhfb2Zmc2V0OyB9Ci0gICAgdW5z
aWduZWQgZnJhbWVZT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkZXIuZnJhbWVfcmVhZGVy
LT55X29mZnNldDsgfQotICAgIHVuc2lnbmVkIGZyYW1lV2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3JlYWRlci5mcmFtZV9yZWFkZXItPndpZHRoOyB9Ci0gICAgdW5zaWduZWQgZnJhbWVIZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5mcmFtZV9yZWFkZXItPmhlaWdodDsgfQotCi0gICAg
aW50IHRyYW5zcGFyZW50UGl4ZWwoKSBjb25zdCB7IHJldHVybiBtX3JlYWRlci5mcmFtZV9yZWFk
ZXItPnRwaXhlbDsgfQotCi0gICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3JlYWRlci5mcmFtZV9yZWFkZXItPmRlbGF5X3RpbWU7IH0KLQotcHJpdmF0ZToKLSAgICBHSUZJ
bWFnZVJlYWRlciBtX3JlYWRlcjsKLSAgICB1bnNpZ25lZCBtX3JlYWRPZmZzZXQ7Ci19OwotCi1H
SUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2RlcigpCi0gICAgOiBtX2ZyYW1lQ291bnRWYWxp
ZCh0cnVlKQotICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbkxvb3BPbmNlKQotICAg
ICwgbV9yZWFkZXIoMCkKLXsKLX0KLQotR0lGSW1hZ2VEZWNvZGVyOjp+R0lGSW1hZ2VEZWNvZGVy
KCkKLXsKLSAgICBkZWxldGUgbV9yZWFkZXI7Ci19Ci0KLS8vIFRha2UgdGhlIGRhdGEgYW5kIHN0
b3JlIGl0Lgotdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRh
LCBib29sIGFsbERhdGFSZWNlaXZlZCkKLXsKLSAgICBpZiAobV9mYWlsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIENhY2hlIG91ciBuZXcgZGF0YS4KLSAgICBJbWFnZURlY29kZXI6OnNl
dERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAgIC8vIE91ciBmcmFtZSBjb3VudCBp
cyBub3cgdW5rbm93bi4KLSAgICBtX2ZyYW1lQ291bnRWYWxpZCA9IGZhbHNlOwotCi0gICAgLy8g
Q3JlYXRlIHRoZSBHSUYgcmVhZGVyLgotICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQot
ICAgICAgICBtX3JlYWRlciA9IG5ldyBHSUZJbWFnZURlY29kZXJQcml2YXRlKHRoaXMpOwotfQot
Ci0vLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVk
IHlldC4KLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAotewot
ICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUg
R0lGIHJlYWRlciBub3cuCi0gICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
ICYmIG1fcmVhZGVyKSB7Ci0gICAgICAgIGlmIChtX2ZhaWxlZCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAvLyBUaGUgZGVjb2RlciB3aWxsIGdvIGFoZWFkIGFuZCBhZ2dy
ZXNzaXZlbHkgY29uc3VtZSBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBmaXJzdAotICAgICAgICAv
LyBzaXplIGlzIGVuY291bnRlcmVkLgotICAgICAgICBkZWNvZGUoR0lGU2l6ZVF1ZXJ5LCAwKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKLX0K
LQotLy8gVGhlIHRvdGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIFdpbGwgc2Nh
biB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGFuc3dlcgotLy8gKHdpdGhvdXQgbmVjZXNzYXJpbHkg
ZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCi1pbnQgR0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KCkKLXsKLSAgICAvLyBJZiB0aGUgZGVjb2RlciBoYWQgYW4gZWFybGll
ciBlcnJvciwgd2Ugd2lsbCBqdXN0IHJldHVybiB3aGF0IHdlIGhhZCBkZWNvZGVkCi0gICAgLy8g
c28gZmFyLgotICAgIGlmICghbV9mcmFtZUNvdW50VmFsaWQpIHsKLSAgICAgICAgLy8gRklYTUU6
IFNjYW5uaW5nIGFsbCB0aGUgZGF0YSBoYXMgTyhuXjIpIGJlaGF2aW9yIGlmIHRoZSBkYXRhIHdl
cmUgdG8gY29tZSBpbiByZWFsbHkKLSAgICAgICAgLy8gc2xvd2x5LiAgTWlnaHQgYmUgaW50ZXJl
c3RpbmcgdG8gdHJ5IHRvIGNsb25lIG91ciBleGlzdGluZyByZWFkIHNlc3Npb24gdG8gcHJlc2Vy
dmUKLSAgICAgICAgLy8gc3RhdGUsIGJ1dCBmb3Igbm93IHdlIGp1c3QgY3Jhd2wgYWxsIHRoZSBk
YXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm8gd29yc2UgdGhhbiB3aGF0Ci0gICAgICAgIC8vIElt
YWdlSU8gZG9lcyBvbiBNYWMgcmlnaHQgbm93IChpdCBhbHNvIGNyYXdscyBhbGwgdGhlIGRhdGEg
YWdhaW4pLgotICAgICAgICBHSUZJbWFnZURlY29kZXJQcml2YXRlIHJlYWRlcjsKLSAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBtYXkgZmFpbCwgYnV0IHdlIHdhbnQgdG8ga2VlcCBhbnkgcGFydGlh
bCBkYXRhIGl0IG1heQotICAgICAgICAvLyBoYXZlIGRlY29kZWQsIHNvIGRvbid0IG1hcmsgaXQg
aXMgaW52YWxpZC4gSWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3cKLSAgICAgICAgLy8gb3Igc29tZSBz
ZXJpb3VzIGVycm9yLCBtX2ZhaWxlZCB3aWxsIGhhdmUgZ290dGVuIHNldCBmb3IgdXMuCi0gICAg
ICAgIHJlYWRlci5kZWNvZGUobV9kYXRhLmdldCgpLCBHSUZGcmFtZUNvdW50UXVlcnkpOwotICAg
ICAgICBtX2ZyYW1lQ291bnRWYWxpZCA9IHRydWU7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5yZXNpemUocmVhZGVyLmZyYW1lQ291bnQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZnJh
bWVCdWZmZXJDYWNoZS5zaXplKCk7Ci19Ci0KLS8vIFRoZSBudW1iZXIgb2YgcmVwZXRpdGlvbnMg
dG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCi1pbnQgR0lGSW1hZ2VEZWNvZGVyOjpy
ZXBldGl0aW9uQ291bnQoKSBjb25zdAotewotICAgIC8vIFRoaXMgdmFsdWUgY2FuIGFycml2ZSBh
dCBhbnkgcG9pbnQgaW4gdGhlIGltYWdlIGRhdGEgc3RyZWFtLiAgTW9zdCBHSUZzCi0gICAgLy8g
aW4gdGhlIHdpbGQgZGVjbGFyZSBpdCBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHNv
IGl0IHVzdWFsbHkgaXMKLSAgICAvLyBzZXQgYnkgdGhlIHRpbWUgd2UndmUgZGVjb2RlZCB0aGUg
c2l6ZSwgYnV0IChkZXBlbmRpbmcgb24gdGhlIEdJRiBhbmQgdGhlCi0gICAgLy8gcGFja2V0cyBz
ZW50IGJhY2sgYnkgdGhlIHdlYnNlcnZlcikgbm90IGFsd2F5cy4gIE91ciBjYWxsZXIgaXMKLSAg
ICAvLyByZXNwb25zaWJsZSBmb3Igd2FpdGluZyB1bnRpbCBpbWFnZSBkZWNvZGluZyBoYXMgZmlu
aXNoZWQgdG8gYXNrIHRoaXMgaWYKLSAgICAvLyBpdCBuZWVkcyBhbiBhdXRob3JpdGF0aXZlIGFu
c3dlci4gIEluIHRoZSBtZWFudGltZSwgd2Ugc2hvdWxkIGRlZmF1bHQgdG8KLSAgICAvLyAibG9v
cCBvbmNlIi4KLSAgICBpZiAobV9yZWFkZXIpIHsKLSAgICAgICAgLy8gQWRkZWQgd3JpbmtsZTog
SW1hZ2VTb3VyY2U6OmNsZWFyKCkgbWF5IGRlc3Ryb3kgdGhlIHJlYWRlciwgbWFraW5nCi0gICAg
ICAgIC8vIHRoZSByZXN1bHQgZnJvbSB0aGUgcmVhZGVyIF9sZXNzXyBhdXRob3JpdGF0aXZlIG9u
IGZ1dHVyZSBjYWxscy4gIFRvCi0gICAgICAgIC8vIGRldGVjdCB0aGlzLCB0aGUgcmVhZGVyIHJl
dHVybnMgY0xvb3BDb3VudE5vdFNlZW4gKC0yKSBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIGNBbmlt
YXRpb25Mb29wT25jZSAoLTEpIHdoZW4gaXRzIGN1cnJlbnQgaW5jYXJuYXRpb24gaGFzbid0IGFj
dHVhbGx5Ci0gICAgICAgIC8vIHNlZW4gYSBsb29wIGNvdW50IHlldDsgaW4gdGhpcyBjYXNlIHdl
IHJldHVybiBvdXIgcHJldmlvdXNseS1jYWNoZWQKLSAgICAgICAgLy8gdmFsdWUuCi0gICAgICAg
IGNvbnN0IGludCByZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+cmVwZXRpdGlvbkNvdW50KCk7
Ci0gICAgICAgIGlmIChyZXBldGl0aW9uQ291bnQgIT0gY0xvb3BDb3VudE5vdFNlZW4pCi0gICAg
ICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IHJlcGV0aXRpb25Db3VudDsKLSAgICB9Ci0gICAg
cmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50OwotfQotCi1SR0JBMzJCdWZmZXIqIEdJRkltYWdlRGVj
b2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXgg
Pj0gc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUNvdW50KCkpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwot
ICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUgJiYg
bV9yZWFkZXIpCi0gICAgICAgIGRlY29kZShHSUZGdWxsUXVlcnksIGluZGV4ICsgMSk7IC8vIERl
Y29kZSB0aGlzIGZyYW1lLgotICAgIHJldHVybiAmZnJhbWU7Ci19Ci0KLXZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCi17
Ci0gICAgLy8gSW4gc29tZSBjYXNlcywgbGlrZSBpZiB0aGUgZGVjb2RlciB3YXMgZGVzdHJveWVk
IHdoaWxlIGFuaW1hdGluZywgd2UKLSAgICAvLyBjYW4gYmUgYXNrZWQgdG8gY2xlYXIgbW9yZSBm
cmFtZXMgdGhhbiB3ZSBjdXJyZW50bHkgaGF2ZS4KLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvLgotCi0gICAgLy8g
VGhlICItMSIgaGVyZSBpcyB0cmlja3kuICBJdCBkb2VzIG5vdCBtZWFuIHRoYXQgfGNsZWFyQmVm
b3JlRnJhbWV8IGlzIHRoZQotICAgIC8vIGxhc3QgZnJhbWUgd2Ugd2lzaCB0byBwcmVzZXJ2ZSwg
YnV0IHJhdGhlciB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gY2xlYXIKLSAgICAvLyB0aGUgdmVyeSBs
YXN0IGZyYW1lIGluIHRoZSBjYWNoZTogaXQncyBlbXB0eSAoc28gY2xlYXJpbmcgaXQgaXMKLSAg
ICAvLyBwb2ludGxlc3MpLCBpdCdzIHBhcnRpYWwgKHNvIHdlIGRvbid0IHdhbnQgdG8gY2xlYXIg
aXQgYW55d2F5KSwgb3IgdGhlCi0gICAgLy8gY2FjaGUgY291bGQgYmUgZW5sYXJnZWQgd2l0aCBh
IGZ1dHVyZSBzZXREYXRhKCkgY2FsbCBhbmQgaXQgY291bGQgYmUKLSAgICAvLyBuZWVkZWQgdG8g
Y29uc3RydWN0IHRoZSBuZXh0IGZyYW1lIChzZWUgY29tbWVudHMgYmVsb3cpLiAgQ2FsbGVycyBj
YW4KLSAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0cnVlLCAuLi4pIHRvIGNv
bXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCi0gICAgLy8gdGhpcyBjYXNlLgotICAgIGNsZWFy
QmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBtX2ZyYW1lQnVmZmVyQ2Fj
aGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPFJHQkEzMkJ1ZmZlcj46Oml0ZXJhdG9y
IGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNsZWFyQmVmb3JlRnJhbWUpOwotCi0g
ICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0OgotICAgIC8vICAgKiBX
ZSBkb24ndCBjbGVhciB8ZW5kfAotICAgIC8vICAgKiBXZSBkb24ndCBjbGVhciB0aGUgZnJhbWUg
d2UncmUgY3VycmVudGx5IGRlY29kaW5nCi0gICAgLy8gICAqIFdlIGRvbid0IGNsZWFyIGFueSBm
cmFtZSBmcm9tIHdoaWNoIGEgZnV0dXJlIGluaXRGcmFtZUJ1ZmZlcigpIGNhbGwKLSAgICAvLyAg
ICAgd2lsbCBjb3B5IGJpdG1hcCBkYXRhCi0gICAgLy8gQWxsIG90aGVyIGZyYW1lcyBjYW4gYmUg
Y2xlYXJlZC4gIEJlY2F1c2Ugb2YgdGhlIGNvbnN0cmFpbnRzIG9uIHdoZW4KLSAgICAvLyBJbWFn
ZVNvdXJjZTo6Y2xlYXIoKSBjYW4gYmUgY2FsbGVkIChzZWUgSW1hZ2VTb3VyY2UuaCksIHdlJ3Jl
IGd1YXJhbnRlZWQKLSAgICAvLyBub3QgdG8gaGF2ZSBub24tZW1wdHkgZnJhbWVzIGFmdGVyIHRo
ZSBmcmFtZSB3ZSdyZSBjdXJyZW50bHkgZGVjb2RpbmcuCi0gICAgLy8gU28sIHNjYW4gYmFja3dh
cmRzIGZyb20gfGVuZHwgYXMgZm9sbG93czoKLSAgICAvLyAgICogSWYgdGhlIGZyYW1lIGlzIGVt
cHR5LCB3ZSdyZSBzdGlsbCBwYXN0IGFueSBmcmFtZXMgd2UgY2FyZSBhYm91dC4KLSAgICAvLyAg
ICogSWYgdGhlIGZyYW1lIGlzIGNvbXBsZXRlLCBidXQgaXMgRGlzcG9zZU92ZXJ3cml0ZVByZXZp
b3VzLCB3ZSdsbAotICAgIC8vICAgICBza2lwIG92ZXIgaXQgaW4gZnV0dXJlIGluaXRGcmFtZUJ1
ZmZlcigpIGNhbGxzLiAgV2UgY2FuIGNsZWFyIGl0Ci0gICAgLy8gICAgIHVubGVzcyBpdCdzIHxl
bmR8LCBhbmQga2VlcCBzY2FubmluZy4gIEZvciBhbnkgb3RoZXIgZGlzcG9zYWwgbWV0aG9kLAot
ICAgIC8vICAgICBzdG9wIHNjYW5uaW5nLCBhcyB3ZSd2ZSBmb3VuZCB0aGUgZnJhbWUgaW5pdEZy
YW1lQnVmZmVyKCkgd2lsbCBuZWVkCi0gICAgLy8gICAgIG5leHQuCi0gICAgLy8gICAqIElmIHRo
ZSBmcmFtZSBpcyBwYXJ0aWFsLCB3ZSdyZSBkZWNvZGluZyBpdCwgc28gZG9uJ3QgY2xlYXIgaXQ7
IGlmIGl0Ci0gICAgLy8gICAgIGhhcyBhIGRpc3Bvc2FsIG1ldGhvZCBvdGhlciB0aGFuIERpc3Bv
c2VPdmVyd3JpdGVQcmV2aW91cywgc3RvcAotICAgIC8vICAgICBzY2FubmluZywgYXMgd2UnbGwg
b25seSBuZWVkIHRoaXMgZnJhbWUgd2hlbiBkZWNvZGluZyB0aGUgbmV4dCBvbmUuCi0gICAgVmVj
dG9yPFJHQkEzMkJ1ZmZlcj46Oml0ZXJhdG9yIGkoZW5kKTsKLSAgICBmb3IgKDsgKGkgIT0gbV9m
cmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6OkRp
c3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkpIHsKLSAgICAgICAgaWYgKChpLT5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCi0gICAgICAg
ICAgICBpLT5jbGVhcigpOwotICAgIH0KLQotICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3Qg
ZnJhbWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgotICAgIGZvciAo
VmVjdG9yPFJHQkEzMkJ1ZmZlcj46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2lu
KCkpOyBqICE9IGk7ICsraikgewotICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gUkdCQTMy
QnVmZmVyOjpGcmFtZVBhcnRpYWwpOwotICAgICAgICBpZiAoai0+c3RhdHVzKCkgIT0gUkdCQTMy
QnVmZmVyOjpGcmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXIoKTsKLSAgICB9Ci19Ci0K
LS8vIEZlZWQgZGF0YSB0byB0aGUgR0lGIHJlYWRlci4KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoR0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKSBjb25zdAotewotICAg
IGlmIChtX2ZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFk
ZXItPmRlY29kZShtX2RhdGEuZ2V0KCksIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7Ci0gICAgCi0gICAg
aWYgKG1fZmFpbGVkKSB7Ci0gICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKLSAgICAgICAgbV9yZWFk
ZXIgPSAwOwotICAgIH0KLX0KLQotLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCi1i
b29sIEdJRkltYWdlRGVjb2Rlcjo6c2l6ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0KQotewotICAgIHJldHVybiBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQot
Ci12b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0
KQotewotICAgIG1fcmVhZGVyLT5zZXRSZWFkT2Zmc2V0KG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNM
ZWZ0KTsKLX0KLQotYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZUluZGV4KQotewotICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3Vy
IGJ1ZmZlci4KLSAgICBJbnRSZWN0IGZyYW1lUmVjdChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCks
IG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBtX3JlYWRl
ci0+ZnJhbWVXaWR0aCgpLCBtX3JlYWRlci0+ZnJhbWVIZWlnaHQoKSk7Ci0KLSAgICAvLyBNYWtl
IHN1cmUgdGhlIGZyYW1lUmVjdCBkb2Vzbid0IGV4dGVuZCBwYXN0IHRoZSBib3R0b20tcmlnaHQg
b2YgdGhlIGJ1ZmZlci4KLSAgICBpZiAoZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgo
KSkKLSAgICAgICAgZnJhbWVSZWN0LnNldFdpZHRoKHNpemUoKS53aWR0aCgpIC0gbV9yZWFkZXIt
PmZyYW1lWE9mZnNldCgpKTsKLSAgICBpZiAoZnJhbWVSZWN0LmJvdHRvbSgpID4gc2l6ZSgpLmhl
aWdodCgpKQotICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1f
cmVhZGVyLT5mcmFtZVlPZmZzZXQoKSk7Ci0KLSAgICBSR0JBMzJCdWZmZXIqIGNvbnN0IGJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgYnVmZmVyLT5zZXRSZWN0
KGZyYW1lUmVjdCk7Ci0gICAgCi0gICAgaWYgKGZyYW1lSW5kZXggPT0gMCkgewotICAgICAgICAv
LyBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHBy
ZXZpb3VzIGRhdGEuCi0gICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0aCgp
LCBzaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBUaGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlv
dXMgZnJhbWUncwotICAgICAgICAvLyBkaXNwb3NhbCBtZXRob2QuCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIEZyYW1lcyB0aGF0IHVzZSB0aGUgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzIG1ldGhv
ZCBhcmUgZWZmZWN0aXZlbHkKLSAgICAgICAgLy8gbm8tb3BzIGluIHRlcm1zIG9mIGNoYW5naW5n
IHRoZSBzdGFydGluZyBzdGF0ZSBvZiBhIGZyYW1lIGNvbXBhcmVkIHRvCi0gICAgICAgIC8vIHRo
ZSBzdGFydGluZyBzdGF0ZSBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHNvIHNraXAgb3ZlciB0aGVt
LiAgKElmIHRoZQotICAgICAgICAvLyBmaXJzdCBmcmFtZSBzcGVjaWZpZXMgdGhpcyBtZXRob2Qs
IGl0IHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZQotICAgICAgICAvLyBEaXNwb3NlT3ZlcndyaXRlQmdj
b2xvciBiZWxvdyBhbmQgcmVzZXQgdG8gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLikKLSAgICAg
ICAgY29uc3QgUkdCQTMyQnVmZmVyKiBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVst
LWZyYW1lSW5kZXhdOwotICAgICAgICBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2Qg
cHJldk1ldGhvZCA9Ci0gICAgICAgICAgICBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwot
ICAgICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQotICAgICAgICAgICAgICAgJiYgKHByZXZN
ZXRob2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7Ci0gICAg
ICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwot
ICAgICAgICAgICAgcHJldk1ldGhvZCA9IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHByZXZCdWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVDb21wbGV0ZSk7Ci0KLSAgICAgICAgaWYgKChwcmV2TWV0aG9kID09IFJHQkEz
MkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZCkgfHwKLSAgICAgICAgICAgICAgICAocHJldk1l
dGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSkgewotICAgICAgICAgICAgLy8gUHJl
c2VydmUgdGhlIGxhc3QgZnJhbWUgYXMgdGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1l
LgotICAgICAgICAgICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91
cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAotICAgICAgICAgICAgLy8gYWZmZWN0aW5n
IHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgICAgICBj
b25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnJlY3QoKTsKLSAgICAgICAgICAg
IGlmICgoZnJhbWVJbmRleCA9PSAwKQotICAgICAgICAgICAgICAgIHx8IHByZXZSZWN0LmNvbnRh
aW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBD
bGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xl
Ci0gICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5
IGltYWdlLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZmFpbGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xl
IHByZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KLSAgICAgICAgICAg
ICAgYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcik7Ci0gICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5ib3R0b20oKTsgKyt5KSB7Ci0g
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3Qu
cmlnaHQoKTsgKyt4KQotICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5
LCAwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoKHByZXZS
ZWN0LndpZHRoKCkgPiAwKSAmJiAocHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkKLSAgICAgICAgICAg
ICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29t
cGxldGUuCi0gICAgYnVmZmVyLT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwp
OwotCi0gICAgLy8gUmVzZXQgdGhlIGFscGhhIHBpeGVsIHRyYWNrZXIgZm9yIHRoaXMgZnJhbWUu
Ci0gICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1l
SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciogcm93QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIqIHJvd0VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCByb3dOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgcmVwZWF0Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQotewotICAgIC8vIFRoZSBwaXhlbCBkYXRh
IGFuZCBjb29yZGluYXRlcyBzdXBwbGllZCB0byB1cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGZyYW1l
J3MKLSAgICAvLyBvcmlnaW4gd2l0aGluIHRoZSBlbnRpcmUgaW1hZ2Ugc2l6ZSwgaS5lLgotICAg
IC8vIChtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCksIG1fcmVhZGVyLT5mcmFtZVlPZmZzZXQoKSku
Ci0gICAgaW50IHggPSBtX3JlYWRlci0+ZnJhbWVYT2Zmc2V0KCk7Ci0gICAgY29uc3QgaW50IHkg
PSBtX3JlYWRlci0+ZnJhbWVZT2Zmc2V0KCkgKyByb3dOdW1iZXI7Ci0KLSAgICAvLyBTYW5pdHkt
Y2hlY2sgdGhlIGFyZ3VtZW50cy4KLSAgICBpZiAoKHJvd0J1ZmZlciA9PSAwKSB8fCAoeSA+PSBz
aXplKCkuaGVpZ2h0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIGNvbG9y
bWFwLgotICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKLSAgICB1bnNpZ25lZCBjaGFyKiBjb2xv
ck1hcDsKLSAgICBtX3JlYWRlci0+Z2V0Q29sb3JNYXAoY29sb3JNYXAsIGNvbG9yTWFwU2l6ZSk7
Ci0gICAgaWYgKCFjb2xvck1hcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LgotICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9m
cmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRh
dGEgaW50byB0aGUgZnJhbWUuICBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdAotICAgIC8vIChy
b3dFbmQgLSByb3dCdWZmZXIpID09IChzaXplKCkud2lkdGgoKSAtIG1fcmVhZGVyLT5mcmFtZVhP
ZmZzZXQoKSksIHNvCi0gICAgLy8gd2UgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUg
ZW5kIG9mIGVpdGhlciB0aGUgc291cmNlIGRhdGEgb3IgdGhlCi0gICAgLy8gcm93J3MgWC1jb29y
ZGluYXRlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGNoYXIqIHNvdXJjZUFkZHIgPSByb3dCdWZmZXI7
IChzb3VyY2VBZGRyICE9IHJvd0VuZCkgJiYgKHggPCBzaXplKCkud2lkdGgoKSk7ICsrc291cmNl
QWRkciwgKyt4KSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAq
c291cmNlQWRkcjsKLSAgICAgICAgaWYgKCghbV9yZWFkZXItPmlzVHJhbnNwYXJlbnQoKSB8fCAo
c291cmNlVmFsdWUgIT0gbV9yZWFkZXItPnRyYW5zcGFyZW50UGl4ZWwoKSkpICYmIChzb3VyY2VW
YWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKLSAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvcklu
ZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3VyY2VWYWx1ZSkgKiAzOwotICAgICAgICAgICAg
YnVmZmVyLnNldFJHQkEoeCwgeSwgY29sb3JNYXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9y
SW5kZXggKyAxXSwgY29sb3JNYXBbY29sb3JJbmRleCArIDJdLCAyNTUpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEgPSB0cnVlOwotICAgICAg
ICAgICAgLy8gV2UgbWF5IG9yIG1heSBub3QgbmVlZCB0byB3cml0ZSB0cmFuc3BhcmVudCBwaXhl
bHMgdG8gdGhlIGJ1ZmZlci4KLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIGNvbXBvc2l0aW5nIGFn
YWluc3QgYSBwcmV2aW91cyBpbWFnZSwgaXQncyB3cm9uZywgYW5kIGlmCi0gICAgICAgICAgICAv
LyB3ZSdyZSB3cml0aW5nIGF0b3AgYSBjbGVhcmVkLCBmdWxseSB0cmFuc3BhcmVudCBidWZmZXIs
IGl0J3MKLSAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5OyBidXQgaWYgd2UncmUgZGVjb2Rpbmcg
YW4gaW50ZXJsYWNlZCBnaWYgYW5kCi0gICAgICAgICAgICAvLyBkaXNwbGF5aW5nIGl0ICJIYWVi
ZXJsaSItc3R5bGUsIHdlIG11c3Qgd3JpdGUgdGhlc2UgZm9yIHBhc3NlcwotICAgICAgICAgICAg
Ly8gYmV5b25kIHRoZSBmaXJzdCwgb3IgdGhlIGluaXRpYWwgcGFzc2VzIHdpbGwgInNob3cgdGhy
b3VnaCIgdGhlCi0gICAgICAgICAgICAvLyBsYXRlciBvbmVzLgotICAgICAgICAgICAgaWYgKHdy
aXRlVHJhbnNwYXJlbnRQaXhlbHMpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwg
eSwgMCwgMCwgMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUZWxsIHRoZSBmcmFt
ZSB0byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVkIGJlLgotICAgIGlmIChyZXBlYXRDb3VudCA+
IDEpCi0gICAgICAgIGJ1ZmZlci5jb3B5Um93TlRpbWVzKG1fcmVhZGVyLT5mcmFtZVhPZmZzZXQo
KSwgeCwgeSwgc3RkOjptaW4oeSArIHN0YXRpY19jYXN0PGludD4ocmVwZWF0Q291bnQpLCBzaXpl
KCkuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUo
dW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVy
OjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQotewotICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4gIFNvbWUgR0lGcyBpbnNlcnQgZG8tbm90aGluZyBm
cmFtZXMsCi0gICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBuZXZlciByZWFjaCBoYXZlRGVjb2RlZFJv
dygpIGJlZm9yZSBnZXR0aW5nIGhlcmUuCi0gICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6
RnJhbWVDb21wbGV0ZSk7Ci0gICAgYnVmZmVyLnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24pOwot
ICAgIGJ1ZmZlci5zZXREaXNwb3NhbE1ldGhvZChkaXNwb3NhbE1ldGhvZCk7Ci0KLSAgICBpZiAo
IW1fY3VycmVudEJ1ZmZlclNhd0FscGhhKSB7Ci0gICAgICAgIC8vIFRoZSB3aG9sZSBmcmFtZSB3
YXMgbm9uLXRyYW5zcGFyZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGVudGlyZQotICAg
ICAgICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4g
c2V0SGFzQWxwaGEoZmFsc2UpLgotICAgICAgICBpZiAoYnVmZmVyLnJlY3QoKS5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpKQotICAgICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCA+IDApIHsKLSAgICAgICAg
ICAgIC8vIFRyaWNreSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkg
aWYgZXZlcnl3aGVyZQotICAgICAgICAgICAgLy8gb3V0c2lkZSBpdHMgcmVjdCBkb2Vzbid0IGhh
dmUgYWxwaGEuICBUbyBrbm93IHdoZXRoZXIgdGhpcyBpcwotICAgICAgICAgICAgLy8gdHJ1ZSwg
d2UgY2hlY2sgdGhlIHN0YXJ0IHN0YXRlIG9mIHRoZSBmcmFtZSAtLSBpZiBpdCBkb2Vzbid0IGhh
dmUKLSAgICAgICAgICAgIC8vIGFscGhhLCB3ZSdyZSBzYWZlLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIEZpcnN0IHNraXAgb3ZlciBwcmlvciBEaXNwb3NlT3ZlcndyaXRlUHJldmlv
dXMgZnJhbWVzIChzaW5jZSB0aGV5Ci0gICAgICAgICAgICAvLyBkb24ndCBhZmZlY3QgdGhlIHN0
YXJ0IHN0YXRlIG9mIHRoaXMgZnJhbWUpIHRoZSBzYW1lIHdheSB3ZSBkbyBpbgotICAgICAgICAg
ICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkuCi0gICAgICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIq
IHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAg
ICAgICB3aGlsZSAoKGZyYW1lSW5kZXggPiAwKQotICAgICAgICAgICAgICAgICAgICYmIChwcmV2
QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0
ZVByZXZpb3VzKSkKLSAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJD
YWNoZVstLWZyYW1lSW5kZXhdOwotCi0gICAgICAgICAgICAvLyBOb3csIGlmIHdlJ3JlIGF0IGEg
RGlzcG9zZU5vdFNwZWNpZmllZCBvciBEaXNwb3NlS2VlcCBmcmFtZSwgdGhlbgotICAgICAgICAg
ICAgLy8gd2UgY2FuIHNheSB3ZSBoYXZlIG5vIGFscGhhIGlmIHRoYXQgZnJhbWUgaGFkIG5vIGFs
cGhhLiAgQnV0Ci0gICAgICAgICAgICAvLyBzaW5jZSBpbiBpbml0RnJhbWVCdWZmZXIoKSB3ZSBh
bHJlYWR5IGNvcGllZCB0aGF0IGZyYW1lJ3MgYWxwaGEKLSAgICAgICAgICAgIC8vIHN0YXRlIGlu
dG8gdGhlIGN1cnJlbnQgZnJhbWUncywgd2UgbmVlZCBkbyBub3RoaW5nIGF0IGFsbCBoZXJlLgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyBjYXNlIGlz
IGEgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgZnJhbWUuICBJZgotICAgICAgICAgICAgLy8gaXQg
aGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3QgaXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZy
YW1lJ3MKLSAgICAgICAgICAgIC8vIHJlY3QsIHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFz
IG5vIGFscGhhLgotICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgp
ID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpCi0gICAgICAgICAgICAg
ICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250YWlucyhw
cmV2QnVmZmVyLT5yZWN0KCkpKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShm
YWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpnaWZD
b21wbGV0ZSgpCi17Ci0gICAgaWYgKG1fcmVhZGVyKQotICAgICAgICBtX3JlcGV0aXRpb25Db3Vu
dCA9IG1fcmVhZGVyLT5yZXBldGl0aW9uQ291bnQoKTsKLSAgICBkZWxldGUgbV9yZWFkZXI7Ci0g
ICAgbV9yZWFkZXIgPSAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlRGVj
b2Rlci5oCShyZXZpc2lvbiA0NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSwgSW5jLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEdJRkltYWdlRGVjb2Rlcl9oCi0jZGVmaW5lIEdJRkltYWdlRGVjb2Rl
cl9oCi0KLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0gICAgY2xhc3MgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZTsKLQotICAgIC8vIFRoaXMgY2xhc3Mg
ZGVjb2RlcyB0aGUgR0lGIGltYWdlIGZvcm1hdC4KLSAgICBjbGFzcyBHSUZJbWFnZURlY29kZXIg
OiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEdJRkltYWdlRGVj
b2RlcigpOwotICAgICAgICB+R0lGSW1hZ2VEZWNvZGVyKCk7Ci0KLSAgICAgICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiZ2lmIjsgfQotCi0gICAg
ICAgIC8vIFRha2UgdGhlIGRhdGEgYW5kIHN0b3JlIGl0LgotICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKLQotICAg
ICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNv
ZGVkIHlldC4KLSAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Owot
Ci0gICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBX
aWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBhbnN3ZXIKLSAgICAgICAgLy8gKHdpdGhv
dXQgbmVjZXNzYXJpbHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCi0g
ICAgICAgIHZpcnR1YWwgaW50IGZyYW1lQ291bnQoKTsKLQotICAgICAgICAvLyBUaGUgbnVtYmVy
IG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgotICAgICAg
ICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFs
IFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVG
cmFtZSk7Ci0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpIHsgcmV0dXJuIDA7IH0KLQotICAgICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lG
RnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwotCi0gICAgICAg
IHZvaWQgZGVjb2RlKEdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkgY29uc3Q7Ci0KLSAg
ICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCi0gICAgICAgIGJvb2wgc2l6
ZU5vd0F2YWlsYWJsZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKLSAgICAgICAg
dm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpOwotICAgICAgICB2b2lkIGhh
dmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZl
ciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNw
YXJlbnRQaXhlbHMpOwotICAgICAgICB2b2lkIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKLSAgICAgICAgdm9pZCBnaWZDb21wbGV0ZSgpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgLy8gQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIGZyYW1lIGJ1
ZmZlciB3aXRoIHRoZSBnaXZlbiBpbmRleCwgYmFzZWQgb24gdGhlCi0gICAgICAgIC8vIHByZXZp
b3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0aG9kLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gT24g
ZmFpbHVyZSwKLSAgICAgICAgLy8gdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdlIGFzIGZhaWxlZC4K
LSAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCk7Ci0KLSAg
ICAgICAgYm9vbCBtX2ZyYW1lQ291bnRWYWxpZDsKLSAgICAgICAgYm9vbCBtX2N1cnJlbnRCdWZm
ZXJTYXdBbHBoYTsKLSAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7Ci0gICAg
ICAgIG11dGFibGUgR0lGSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9yZWFkZXI7Ci0gICAgfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2
aXNpb24gNDQ2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvR0lG
SW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0OSArMCwwIEBACi0vKiAtKi0g
TW9kZTogQzsgdGFiLXdpZHRoOiAyOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zm
c2V0OiAyIC0qLSAqLwotLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVy
c2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
Ci0gKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoK
LSAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgYmFzaXMsCi0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhl
Ci0gKiBMaWNlbnNlLgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNv
ZGUuCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlz
Ci0gKiBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqIFBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgKLSAq
IHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBDb250
cmlidXRvcihzKToKLSAqICAgQ2hyaXMgU2FhcmkgPHNhYXJpQG5ldHNjYXBlLmNvbT4KLSAqICAg
QXBwbGUgQ29tcHV0ZXIKLSAqICAgR29vZ2xlLCBJbmMuCi0gKgotICogQWx0ZXJuYXRpdmVseSwg
dGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YK
LSAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxh
dGVyICh0aGUgIkdQTCIpLCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNl
IHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5z
dGVhZAotICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3Vy
IHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIg
dGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRp
Y2F0ZSB5b3VyCi0gKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBh
bmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMg
cmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAq
IHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRo
ZSBHUEwgb3IgdGhlIExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiog
Ki8KLQotLyoKLVRoZSBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQoYykgaXMgdGhlIGNvcHly
aWdodCBwcm9wZXJ0eSBvZiBDb21wdVNlcnZlCi1JbmNvcnBvcmF0ZWQuIE9ubHkgQ29tcHVTZXJ2
ZSBJbmNvcnBvcmF0ZWQgaXMgYXV0aG9yaXplZCB0byBkZWZpbmUsIHJlZGVmaW5lLAotZW5oYW5j
ZSwgYWx0ZXIsIG1vZGlmeSBvciBjaGFuZ2UgaW4gYW55IHdheSB0aGUgZGVmaW5pdGlvbiBvZiB0
aGUgZm9ybWF0LgotCi1Db21wdVNlcnZlIEluY29ycG9yYXRlZCBoZXJlYnkgZ3JhbnRzIGEgbGlt
aXRlZCwgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlCi1saWNlbnNlIGZvciB0aGUgdXNlIG9m
IHRoZSBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQoc20pIGluIGNvbXB1dGVyCi1zb2Z0d2Fy
ZTsgY29tcHV0ZXIgc29mdHdhcmUgdXRpbGl6aW5nIEdJRihzbSkgbXVzdCBhY2tub3dsZWRnZSBv
d25lcnNoaXAgb2YgdGhlCi1HcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQgYW5kIGl0cyBTZXJ2
aWNlIE1hcmsgYnkgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQsIGluCi1Vc2VyIGFuZCBUZWNobmlj
YWwgRG9jdW1lbnRhdGlvbi4gQ29tcHV0ZXIgc29mdHdhcmUgdXRpbGl6aW5nIEdJRiwgd2hpY2gg
aXMKLWRpc3RyaWJ1dGVkIG9yIG1heSBiZSBkaXN0cmlidXRlZCB3aXRob3V0IFVzZXIgb3IgVGVj
aG5pY2FsIERvY3VtZW50YXRpb24gbXVzdAotZGlzcGxheSB0byB0aGUgc2NyZWVuIG9yIHByaW50
ZXIgYSBtZXNzYWdlIGFja25vd2xlZGdpbmcgb3duZXJzaGlwIG9mIHRoZQotR3JhcGhpY3MgSW50
ZXJjaGFuZ2UgRm9ybWF0IGFuZCB0aGUgU2VydmljZSBNYXJrIGJ5IENvbXB1U2VydmUgSW5jb3Jw
b3JhdGVkOyBpbgotdGhpcyBjYXNlLCB0aGUgYWNrbm93bGVkZ2VtZW50IG1heSBiZSBkaXNwbGF5
ZWQgaW4gYW4gb3BlbmluZyBzY3JlZW4gb3IgbGVhZGluZwotYmFubmVyLCBvciBhIGNsb3Npbmcg
c2NyZWVuIG9yIHRyYWlsaW5nIGJhbm5lci4gQSBtZXNzYWdlIHN1Y2ggYXMgdGhlIGZvbGxvd2lu
ZwotbWF5IGJlIHVzZWQ6Ci0KLSAgICAiVGhlIEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdChj
KSBpcyB0aGUgQ29weXJpZ2h0IHByb3BlcnR5IG9mCi0gICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0
ZWQuIEdJRihzbSkgaXMgYSBTZXJ2aWNlIE1hcmsgcHJvcGVydHkgb2YKLSAgICBDb21wdVNlcnZl
IEluY29ycG9yYXRlZC4iCi0KLUZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFj
dCA6Ci0KLSAgICBDb21wdVNlcnZlIEluY29ycG9yYXRlZAotICAgIEdyYXBoaWNzIFRlY2hub2xv
Z3kgRGVwYXJ0bWVudAotICAgIDUwMDAgQXJsaW5ndG9uIENlbnRlciBCb3VsZXZhcmQKLSAgICBD
b2x1bWJ1cywgT2hpbyAgNDMyMjAKLSAgICBVLiBTLiBBLgotCi1Db21wdVNlcnZlIEluY29ycG9y
YXRlZCBtYWludGFpbnMgYSBtYWlsaW5nIGxpc3Qgd2l0aCBhbGwgdGhvc2UgaW5kaXZpZHVhbHMg
YW5kCi1vcmdhbml6YXRpb25zIHdobyB3aXNoIHRvIHJlY2VpdmUgY29waWVzIG9mIHRoaXMgZG9j
dW1lbnQgd2hlbiBpdCBpcyBjb3JyZWN0ZWQKLW9yIHJldmlzZWQuIFRoaXMgc2VydmljZSBpcyBv
ZmZlcmVkIGZyZWUgb2YgY2hhcmdlOyBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoIHlvdXIKLW1haWxp
bmcgYWRkcmVzcy4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHSUZJbWFn
ZVJlYWRlci5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAiR0lGSW1hZ2VEZWNv
ZGVyLmgiCi0KLXVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKLQotLy8gRGVmaW5lIHRo
ZSBNb3ppbGxhIG1hY3JvIHNldHVwIHNvIHRoYXQgd2UgY2FuIGxlYXZlIHRoZSBtYWNyb3MgYWxv
bmUuCi0jZGVmaW5lIFBSX0JFR0lOX01BQ1JPICBkbyB7Ci0jZGVmaW5lIFBSX0VORF9NQUNSTyAg
ICB9IHdoaWxlICgwKQotCi0vKgotICogR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBsZWFzdCAnbicg
Ynl0ZXMgYXZhaWxhYmxlIGZyb20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycKLSAqCi0gKiBO
b3RlLCB0aGUgaG9sZCB3aWxsIG5ldmVyIG5lZWQgdG8gYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVz
IHRvIGdhdGhlciB1cCBpbiB0aGUgaG9sZCwKLSAqIGFzIGVhY2ggR0lGIGJsb2NrIChleGNlcHQg
Y29sb3JtYXBzKSBjYW4gbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzLgotICogQ29sb3Jt
YXBzIGFyZSBkaXJlY3RseSBjb3BpZWQgaW4gdGhlIHJlc3AuIGdsb2JhbF9jb2xvcm1hcCBvciBk
eW5hbWljYWxseSBhbGxvY2F0ZWQgbG9jYWxfY29sb3JtYXAuCi0gKiBTbyBhIGZpeGVkIGJ1ZmZl
ciBpbiBHSUZJbWFnZVJlYWRlciBpcyBnb29kIGVub3VnaC4KLSAqIFRoaXMgYnVmZmVyIGlzIG9u
bHkgbmVlZGVkIHRvIGNvcHkgbGVmdC1vdmVyIGRhdGEgZnJvbSBvbmUgR2lmV3JpdGUgY2FsbCB0
byB0aGUgbmV4dAotICovCi0jZGVmaW5lIEdFVE4obixzKSAgICAgICAgICAgICAgICAgICAgXAot
ICBQUl9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBieXRlc190b19jb25z
dW1lID0gKG4pOyAgICAgIFwKLSAgICBzdGF0ZSA9IChzKTsgICAgICAgICAgICAgICAgIFwKLSAg
UFJfRU5EX01BQ1JPCi0KLS8qIEdldCBhIDE2LWJpdCB2YWx1ZSBzdG9yZWQgaW4gbGl0dGxlLWVu
ZGlhbiBmb3JtYXQgKi8KLSNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVswXSkK
LQotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vIFNlbmQgdGhlIGRhdGEgdG8gdGhlIGRpc3Bs
YXkgZnJvbnQtZW5kLgotdm9pZCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCi17Ci0gIEdJ
RkZyYW1lUmVhZGVyKiBncyA9IGZyYW1lX3JlYWRlcjsKLQotICBpbnQgZHJvd19zdGFydCwgZHJv
d19lbmQ7Ci0KLSAgZHJvd19zdGFydCA9IGRyb3dfZW5kID0gZ3MtPmlyb3c7Ci0KLSAgLyoKLSAg
ICogSGFlYmVybGktaW5zcGlyZWQgaGFjayBmb3IgaW50ZXJsYWNlZCBHSUZzOiBSZXBsaWNhdGUg
bGluZXMgd2hpbGUKLSAgICogZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJs
aW5kIiBlZmZlY3QgYXMgdGhlIGltYWdlIGlzCi0gICAqIGxvYWRlZC4gQWRqdXN0IHBpeGVsIHZl
cnRpY2FsIHBvc2l0aW9ucyB0byBhdm9pZCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUKLSAgICogaW1h
Z2UgY3Jhd2xpbmcgdXAgdGhlIHNjcmVlbiBhcyBzdWNjZXNzaXZlIHBhc3NlcyBhcmUgZHJhd24u
Ci0gICAqLwotICBpZiAoZ3MtPnByb2dyZXNzaXZlX2Rpc3BsYXkgJiYgZ3MtPmludGVybGFjZWQg
JiYgZ3MtPmlwYXNzIDwgNCkgewotICAgIHVuc2lnbmVkIHJvd19kdXAgPSAwLCByb3dfc2hpZnQg
PSAwOwotCi0gICAgc3dpdGNoIChncy0+aXBhc3MpIHsKLSAgICBjYXNlIDE6Ci0gICAgICByb3df
ZHVwID0gNzsKLSAgICAgIHJvd19zaGlmdCA9IDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6
Ci0gICAgICByb3dfZHVwID0gMzsKLSAgICAgIHJvd19zaGlmdCA9IDE7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIDM6Ci0gICAgICByb3dfZHVwID0gMTsKLSAgICAgIHJvd19zaGlmdCA9IDA7Ci0g
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZHJv
d19zdGFydCAtPSByb3dfc2hpZnQ7Ci0gICAgZHJvd19lbmQgPSBkcm93X3N0YXJ0ICsgcm93X2R1
cDsKLQotICAgIC8qIEV4dGVuZCBpZiBib3R0b20gZWRnZSBpc24ndCBjb3ZlcmVkIGJlY2F1c2Ug
b2YgdGhlIHNoaWZ0IHVwd2FyZC4gKi8KLSAgICBpZiAoKChncy0+aGVpZ2h0IC0gMSkgLSBkcm93
X2VuZCkgPD0gcm93X3NoaWZ0KQotICAgICAgZHJvd19lbmQgPSBncy0+aGVpZ2h0IC0gMTsKLQot
ICAgIC8qIENsYW1wIGZpcnN0IGFuZCBsYXN0IHJvd3MgdG8gdXBwZXIgYW5kIGxvd2VyIGVkZ2Ug
b2YgaW1hZ2UuICovCi0gICAgaWYgKGRyb3dfc3RhcnQgPCAwKQotICAgICAgZHJvd19zdGFydCA9
IDA7Ci0gICAgaWYgKCh1bnNpZ25lZClkcm93X2VuZCA+PSBncy0+aGVpZ2h0KQotICAgICAgZHJv
d19lbmQgPSBncy0+aGVpZ2h0IC0gMTsKLSAgfQotCi0gIC8qIFByb3RlY3QgYWdhaW5zdCB0b28g
bXVjaCBpbWFnZSBkYXRhICovCi0gIGlmICgodW5zaWduZWQpZHJvd19zdGFydCA+PSBncy0+aGVp
Z2h0KQotICAgIHJldHVybjsKLQotICAvLyBDQUxMQkFDSzogTGV0IHRoZSBjbGllbnQga25vdyB3
ZSBoYXZlIGRlY29kZWQgYSByb3cuCi0gIGlmIChjbGllbnRwdHIgJiYgZnJhbWVfcmVhZGVyKQot
ICAgIGNsaWVudHB0ci0+aGF2ZURlY29kZWRSb3coaW1hZ2VzX2NvdW50IC0gMSwgZnJhbWVfcmVh
ZGVyLT5yb3didWYsIGZyYW1lX3JlYWRlci0+cm93ZW5kLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHJvd19zdGFydCwgZHJvd19lbmQgLSBkcm93X3N0YXJ0ICsgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdzLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ICYmIGdzLT5pbnRl
cmxhY2VkICYmIGdzLT5pcGFzcyA+IDEpOwotCi0gIGdzLT5yb3dwID0gZ3MtPnJvd2J1ZjsKLQot
ICBpZiAoIWdzLT5pbnRlcmxhY2VkKQotICAgIGdzLT5pcm93Kys7Ci0gIGVsc2UgewotICAgIGRv
IHsKLSAgICAgIHN3aXRjaCAoZ3MtPmlwYXNzKQotICAgICAgewotICAgICAgICBjYXNlIDE6Ci0g
ICAgICAgICAgZ3MtPmlyb3cgKz0gODsKLSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhl
aWdodCkgewotICAgICAgICAgICAgZ3MtPmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9
IDQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgMjoKLSAg
ICAgICAgICBncy0+aXJvdyArPSA4OwotICAgICAgICAgIGlmIChncy0+aXJvdyA+PSBncy0+aGVp
Z2h0KSB7Ci0gICAgICAgICAgICBncy0+aXBhc3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0g
MjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgIGdzLT5pcm93ICs9IDQ7Ci0gICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWln
aHQpIHsKLSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3MtPmlyb3cgPSAx
OwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIDQ6Ci0gICAg
ICAgICAgZ3MtPmlyb3cgKz0gMjsKLSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdo
dCl7Ci0gICAgICAgICAgICBncy0+aXBhc3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0gMDsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChncy0+aXJvdyA+IChncy0+aGVpZ2h0
IC0gMSkpOwotICB9Ci19Ci0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vKiBQZXJmb3JtIExl
bXBlbC1aaXYtV2VsY2ggZGVjb2RpbmcgKi8KLWludCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnEpCi17Ci0gIEdJRkZyYW1lUmVhZGVyKiBncyA9IGZyYW1lX3Jl
YWRlcjsKLSAgaWYgKCFncykKLSAgICByZXR1cm4gMDsKLQotICBpbnQgY29kZTsKLSAgaW50IGlu
Y29kZTsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqY2g7Ci0gIAotICAvKiBDb3B5IGFsbCB0aGUg
ZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMgaW50byBsb2NhbHMgc28gdGhlIGNvbXBpbGVyCi0gICAq
IHdvbid0IHdvcnJ5IGFib3V0IHRoZW0gYmVpbmcgYWxpYXNlZC4gIFRoZSBsb2NhbHMgd2lsbCBi
ZSBob21lZAotICAgKiBiYWNrIGludG8gdGhlIEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdl
IGV4aXQuCi0gICAqLwotICBpbnQgYXZhaWwgICAgICAgPSBncy0+YXZhaWw7Ci0gIGludCBiaXRz
ICAgICAgICA9IGdzLT5iaXRzOwotICBpbnQgY250ICAgICAgICAgPSBjb3VudDsKLSAgaW50IGNv
ZGVzaXplICAgID0gZ3MtPmNvZGVzaXplOwotICBpbnQgY29kZW1hc2sgICAgPSBncy0+Y29kZW1h
c2s7Ci0gIGludCBvbGRjb2RlICAgICA9IGdzLT5vbGRjb2RlOwotICBpbnQgY2xlYXJfY29kZSAg
PSBncy0+Y2xlYXJfY29kZTsKLSAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXIgPSBncy0+Zmlyc3Rj
aGFyOwotICBpbnQgZGF0dW0gICAgID0gZ3MtPmRhdHVtOwotCi0gIGlmICghZ3MtPnByZWZpeCkg
ewotICAgIGdzLT5wcmVmaXggPSBuZXcgdW5zaWduZWQgc2hvcnRbTUFYX0JJVFNdOwotICAgIG1l
bXNldChncy0+cHJlZml4LCAwLCBNQVhfQklUUyAqIHNpemVvZihzaG9ydCkpOwotICB9Ci0KLSAg
dW5zaWduZWQgc2hvcnQgKnByZWZpeCAgPSBncy0+cHJlZml4OwotICB1bnNpZ25lZCBjaGFyICpz
dGFja3AgICA9IGdzLT5zdGFja3A7Ci0gIHVuc2lnbmVkIGNoYXIgKnN1ZmZpeCAgID0gZ3MtPnN1
ZmZpeDsKLSAgdW5zaWduZWQgY2hhciAqc3RhY2sgICAgPSBncy0+c3RhY2s7Ci0gIHVuc2lnbmVk
IGNoYXIgKnJvd3AgICAgID0gZ3MtPnJvd3A7Ci0gIHVuc2lnbmVkIGNoYXIgKnJvd2VuZCAgID0g
Z3MtPnJvd2VuZDsKLSAgdW5zaWduZWQgcm93c19yZW1haW5pbmcgPSBncy0+cm93c19yZW1haW5p
bmc7Ci0KLSAgaWYgKHJvd3AgPT0gcm93ZW5kKQotICAgIHJldHVybiAwOwotCi0jZGVmaW5lIE9V
VFBVVF9ST1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgUFJfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBvdXRwdXRfcm93KCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcm93c19yZW1haW5pbmct
LTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgcm93cCA9IGZyYW1lX3JlYWRlci0+cm93cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghcm93c19yZW1haW5pbmcpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byBF
TkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBQUl9FTkRfTUFDUk8KLQotICBmb3IgKGNoID0gcTsgY250LS0gPiAwOyBjaCsrKQot
ICB7Ci0gICAgLyogRmVlZCB0aGUgbmV4dCBieXRlIGludG8gdGhlIGRlY29kZXIncyAzMi1iaXQg
aW5wdXQgYnVmZmVyLiAqLwotICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJpdHM7Ci0gICAg
Yml0cyArPSA4OwotCi0gICAgLyogQ2hlY2sgZm9yIHVuZGVyZmxvdyBvZiBkZWNvZGVyJ3MgMzIt
Yml0IGlucHV0IGJ1ZmZlci4gKi8KLSAgICB3aGlsZSAoYml0cyA+PSBjb2Rlc2l6ZSkKLSAgICB7
Ci0gICAgICAvKiBHZXQgdGhlIGxlYWRpbmcgdmFyaWFibGUtbGVuZ3RoIHN5bWJvbCBmcm9tIHRo
ZSBkYXRhIHN0cmVhbSAqLwotICAgICAgY29kZSA9IGRhdHVtICYgY29kZW1hc2s7Ci0gICAgICBk
YXR1bSA+Pj0gY29kZXNpemU7Ci0gICAgICBiaXRzIC09IGNvZGVzaXplOwotCi0gICAgICAvKiBS
ZXNldCB0aGUgZGljdGlvbmFyeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUsIGlmIHJlcXVlc3RlZCAq
LwotICAgICAgaWYgKGNvZGUgPT0gY2xlYXJfY29kZSkgewotICAgICAgICBjb2Rlc2l6ZSA9IGdz
LT5kYXRhc2l6ZSArIDE7Ci0gICAgICAgIGNvZGVtYXNrID0gKDEgPDwgY29kZXNpemUpIC0gMTsK
LSAgICAgICAgYXZhaWwgPSBjbGVhcl9jb2RlICsgMjsKLSAgICAgICAgb2xkY29kZSA9IC0xOwot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLyogQ2hlY2sgZm9yIGV4cGxpY2l0
IGVuZC1vZi1zdHJlYW0gY29kZSAqLwotICAgICAgaWYgKGNvZGUgPT0gKGNsZWFyX2NvZGUgKyAx
KSkgewotICAgICAgICAvKiBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBh
bGwgaW1hZ2UgZGF0YSAqLwotICAgICAgICBpZiAocm93c19yZW1haW5pbmcgIT0gMCkKLSAgICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgfQotCi0gICAgICBpZiAo
b2xkY29kZSA9PSAtMSkgewotICAgICAgICAqcm93cCsrID0gc3VmZml4W2NvZGVdOwotICAgICAg
ICBpZiAocm93cCA9PSByb3dlbmQpCi0gICAgICAgICAgT1VUUFVUX1JPVzsKLQotICAgICAgICBm
aXJzdGNoYXIgPSBvbGRjb2RlID0gY29kZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0K
LSAgICAgIGluY29kZSA9IGNvZGU7Ci0gICAgICBpZiAoY29kZSA+PSBhdmFpbCkgewotICAgICAg
ICAqc3RhY2twKysgPSBmaXJzdGNoYXI7Ci0gICAgICAgIGNvZGUgPSBvbGRjb2RlOwotCi0gICAg
ICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICB9Ci0KLSAgICAgIHdoaWxlIChjb2RlID49IGNsZWFyX2NvZGUpCi0gICAgICB7Ci0g
ICAgICAgIGlmIChjb2RlID49IE1BWF9CSVRTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQotICAg
ICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5
IGhvbGRzIGNoYXJhY3RlcnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKLSAgICAgICAgLy8g
YWxsb3dpbmcgY29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBt
YWxmb3JtZWQKLSAgICAgICAgLy8gZGF0YS4gQXMgbG9uZyBhcyBjb2RlIDwgTUFYX0JJVFMsIHRo
ZSBvbmx5IHJpc2sgaXMgYSBnYXJibGVkIGltYWdlLAotICAgICAgICAvLyB3aGljaCBpcyBubyB3
b3JzZSB0aGFuIHJlZnVzaW5nIHRvIGRpc3BsYXkgaXQuCi0gICAgICAgICpzdGFja3ArKyA9IHN1
ZmZpeFtjb2RlXTsKLSAgICAgICAgY29kZSA9IHByZWZpeFtjb2RlXTsKLQotICAgICAgICBpZiAo
c3RhY2twID09IHN0YWNrICsgTUFYX0JJVFMpCi0gICAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
fQotCi0gICAgICAqc3RhY2twKysgPSBmaXJzdGNoYXIgPSBzdWZmaXhbY29kZV07Ci0KLSAgICAg
IC8qIERlZmluZSBhIG5ldyBjb2Rld29yZCBpbiB0aGUgZGljdGlvbmFyeS4gKi8KLSAgICAgIGlm
IChhdmFpbCA8IDQwOTYpIHsKLSAgICAgICAgcHJlZml4W2F2YWlsXSA9IG9sZGNvZGU7Ci0gICAg
ICAgIHN1ZmZpeFthdmFpbF0gPSBmaXJzdGNoYXI7Ci0gICAgICAgIGF2YWlsKys7Ci0KLSAgICAg
ICAgLyogSWYgd2UndmUgdXNlZCB1cCBhbGwgdGhlIGNvZGV3b3JkcyBvZiBhIGdpdmVuIGxlbmd0
aAotICAgICAgICAgKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGNvZGV3b3JkcyBieSBvbmUgYml0
LCBidXQgZG9uJ3QKLSAgICAgICAgICogZXhjZWVkIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjb2Rl
d29yZCBzaXplIG9mIDEyIGJpdHMuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKChhdmFpbCAm
IGNvZGVtYXNrKSA9PSAwKSAmJiAoYXZhaWwgPCA0MDk2KSkgewotICAgICAgICAgIGNvZGVzaXpl
Kys7Ci0gICAgICAgICAgY29kZW1hc2sgKz0gYXZhaWw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIG9sZGNvZGUgPSBpbmNvZGU7Ci0KLSAgICAgICAgLyogQ29weSB0aGUgZGVjb2RlZCBkYXRh
IG91dCB0byB0aGUgc2NhbmxpbmUgYnVmZmVyLiAqLwotICAgICAgZG8gewotICAgICAgICAqcm93
cCsrID0gKi0tc3RhY2twOwotICAgICAgICBpZiAocm93cCA9PSByb3dlbmQpIHsKLSAgICAgICAg
ICBPVVRQVVRfUk9XOwotICAgICAgICB9Ci0gICAgICB9IHdoaWxlIChzdGFja3AgPiBzdGFjayk7
Ci0gICAgfQotICB9Ci0KLSAgRU5EOgotCi0gIC8qIEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0
aGUgR0lGIGRlY29kZXIgc3RhdGUgdmFyaWFibGVzICovCi0gIGdzLT5hdmFpbCA9IGF2YWlsOwot
ICBncy0+Yml0cyA9IGJpdHM7Ci0gIGdzLT5jb2Rlc2l6ZSA9IGNvZGVzaXplOwotICBncy0+Y29k
ZW1hc2sgPSBjb2RlbWFzazsKLSAgY291bnQgPSBjbnQ7Ci0gIGdzLT5vbGRjb2RlID0gb2xkY29k
ZTsKLSAgZ3MtPmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKLSAgZ3MtPmRhdHVtID0gZGF0dW07Ci0g
IGdzLT5zdGFja3AgPSBzdGFja3A7Ci0gIGdzLT5yb3dwID0gcm93cDsKLSAgZ3MtPnJvd3NfcmVt
YWluaW5nID0gcm93c19yZW1haW5pbmc7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLQotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8qCi0gKiBwcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3Ry
ZWFtIGZvciB0aGUgZ2lmIGRlY29kZXIKLSAqLwotCi1ib29sIEdJRkltYWdlUmVhZGVyOjpyZWFk
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCAKLSAgICAgICAgICAgICAg
ICAgICAgIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKQotewotICBpZiAoIWxlbikgewotICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNp
bmNlIHRoZSBsYXN0IGNhbGwsIGp1c3QgaWdub3JlIHRoaXMgY2FsbC4KLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSBidWY7Ci0KLSAgLy8gQWRkIHdo
YXQgd2UgaGF2ZSBzbyBmYXIgdG8gdGhlIGJsb2NrCi0gIC8vIElmIHByZXZpb3VzIGNhbGwgdG8g
bWUgbGVmdCBzb21ldGhpbmcgaW4gdGhlIGhvbGQgZmlyc3QgY29tcGxldGUgY3VycmVudCBibG9j
awotICAvLyBPciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3JtYXBzLCBmaXJzdCBjb21wbGV0
ZSB0aGUgY29sb3JtYXAKLSAgdW5zaWduZWQgY2hhciogcCA9IDA7Ci0gIGlmIChzdGF0ZSA9PSBn
aWZfZ2xvYmFsX2NvbG9ybWFwKQotICAgIHAgPSBnbG9iYWxfY29sb3JtYXA7Ci0gIGVsc2UgaWYg
KHN0YXRlID09IGdpZl9pbWFnZV9jb2xvcm1hcCkKLSAgICBwID0gZnJhbWVfcmVhZGVyID8gZnJh
bWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gIGVsc2UgaWYgKGJ5dGVzX2luX2hvbGQp
Ci0gICAgcCA9IGhvbGQ7Ci0gIGVsc2UKLSAgICBwID0gMDsKLQotICBpZiAocCB8fCAoc3RhdGUg
PT0gZ2lmX2dsb2JhbF9jb2xvcm1hcCkgfHwgKHN0YXRlID09IGdpZl9pbWFnZV9jb2xvcm1hcCkp
IHsKLSAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvZmFyIHRvIHRoZSBibG9jawotICAgIHVuc2ln
bmVkIGwgPSBsZW4gPCBieXRlc190b19jb25zdW1lID8gbGVuIDogYnl0ZXNfdG9fY29uc3VtZTsK
LSAgICBpZiAocCkKLSAgICAgICAgbWVtY3B5KHAgKyBieXRlc19pbl9ob2xkLCBidWYsIGwpOwot
Ci0gICAgaWYgKGwgPCBieXRlc190b19jb25zdW1lKSB7Ci0gICAgICAvLyBOb3QgZW5vdWdoIGlu
ICdidWYnIHRvIGNvbXBsZXRlIGN1cnJlbnQgYmxvY2ssIGdldCBtb3JlCi0gICAgICBieXRlc19p
bl9ob2xkICs9IGw7Ci0gICAgICBieXRlc190b19jb25zdW1lIC09IGw7Ci0gICAgICBpZiAoY2xp
ZW50cHRyKQotICAgICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIFJlc2V0IGhvbGQgYnVmZmVyIGNvdW50Ci0gICAgYnl0
ZXNfaW5faG9sZCA9IDA7Ci0gICAgLy8gUG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2NrIGluIGhv
bGQgKG9yIGluIGNvbG9ybWFwKQotICAgIHEgPSBwOwotICB9Ci0KLSAgLy8gSW52YXJpYW50Ogot
ICAvLyAgICAncScgaXMgc3RhcnQgb2YgY3VycmVudCB0byBiZSBwcm9jZXNzZWQgYmxvY2sgKGhv
bGQsIGNvbG9ybWFwIG9yIGJ1ZikKLSAgLy8gICAgJ2J5dGVzX3RvX2NvbnN1bWUnIGlzIG51bWJl
ciBvZiBieXRlcyB0byBjb25zdW1lIGZyb20gJ2J1ZicKLSAgLy8gICAgJ2J1ZicgcG9pbnRzIHRv
IHRoZSBieXRlcyB0byBiZSBjb25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgLy8gICAg
J2xlbicgaXMgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gaW5wdXQgYnVmZmVyIGZyb20gcG9zaXRp
b24gJ2J1ZicuCi0gIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYn
IHdpbGwgYmUgbW92ZWQgJ2J5dGVzX3RvX2NvbnN1bWUnCi0gIC8vICAgIHRvIHBvaW50IHRvIG5l
eHQgYnVmZmVyLCAnbGVuJyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KLSAgLy8gICAgU28gdGhh
dCBuZXh0IHJvdW5kIGluIGZvciBsb29wLCBxIGdldHMgcG9pbnRlZCB0byB0aGUgbmV4dCBidWZm
ZXIuCi0KLSAgZm9yICg7bGVuID49IGJ5dGVzX3RvX2NvbnN1bWU7IHE9YnVmKSB7Ci0gICAgLy8g
RWF0IHRoZSBjdXJyZW50IGJsb2NrIGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVwcyBwb2ludGVkIGF0
IGN1cnJlbnQgYmxvY2sKLSAgICBidWYgKz0gYnl0ZXNfdG9fY29uc3VtZTsKLSAgICBsZW4gLT0g
Ynl0ZXNfdG9fY29uc3VtZTsKLQotICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgewotICAgIGNhc2Ug
Z2lmX2x6dzoKLSAgICAgIGlmIChkb19sencocSkgPCAwKSB7Ci0gICAgICAgIHN0YXRlID0gZ2lm
X2Vycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIEdFVE4oMSwgZ2lmX3N1Yl9i
bG9jayk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2x6d19zdGFydDoKLSAgICB7Ci0g
ICAgICAvKiBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2RlciAqLwotICAgICAgaW50IGRhdGFz
aXplID0gKnE7Ci0gICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhh
biB0aGUgZGF0YXNpemUsIHdlIG5lZWQgdG8gZW5zdXJlCi0gICAgICAvLyB0aGF0IG91ciBkYXRh
c2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgot
ICAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3Rs
eSBhdCA0MDk1LgotICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykgewotICAgICAg
ICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpbnQg
Y2xlYXJfY29kZSA9IDEgPDwgZGF0YXNpemU7Ci0gICAgICBpZiAoY2xlYXJfY29kZSA+PSBNQVhf
QklUUykgewotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5k
YXRhc2l6ZSA9IGRhdGFzaXplOwotICAgICAgICBmcmFtZV9yZWFkZXItPmNsZWFyX2NvZGUgPSBj
bGVhcl9jb2RlOwotICAgICAgICBmcmFtZV9yZWFkZXItPmF2YWlsID0gZnJhbWVfcmVhZGVyLT5j
bGVhcl9jb2RlICsgMjsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5vbGRjb2RlID0gLTE7Ci0gICAg
ICAgIGZyYW1lX3JlYWRlci0+Y29kZXNpemUgPSBmcmFtZV9yZWFkZXItPmRhdGFzaXplICsgMTsK
LSAgICAgICAgZnJhbWVfcmVhZGVyLT5jb2RlbWFzayA9ICgxIDw8IGZyYW1lX3JlYWRlci0+Y29k
ZXNpemUpIC0gMTsKLQotICAgICAgICBmcmFtZV9yZWFkZXItPmRhdHVtID0gZnJhbWVfcmVhZGVy
LT5iaXRzID0gMDsKLQotICAgICAgICAvKiBpbml0IHRoZSB0YWJsZXMgKi8KLSAgICAgICAgaWYg
KCFmcmFtZV9yZWFkZXItPnN1ZmZpeCkKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnN1ZmZpeCA9
IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsKLSAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIHdo
b2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCi0g
ICAgICAgIG1lbXNldChmcmFtZV9yZWFkZXItPnN1ZmZpeCwgMCwgTUFYX0JJVFMpOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lX3JlYWRlci0+Y2xlYXJfY29kZTsgaSsrKQotICAg
ICAgICAgIGZyYW1lX3JlYWRlci0+c3VmZml4W2ldID0gaTsKLQotICAgICAgICBpZiAoIWZyYW1l
X3JlYWRlci0+c3RhY2spCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdGFjayA9IG5ldyB1bnNp
Z25lZCBjaGFyW01BWF9CSVRTXTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5zdGFja3AgPSBmcmFt
ZV9yZWFkZXItPnN0YWNrOwotICAgICAgfQotCi0gICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2sp
OwotICAgIH0KLSAgICBicmVhazsKLQotICAgIC8qIEFsbCBHSUYgZmlsZXMgYmVnaW4gd2l0aCAi
R0lGODdhIiBvciAiR0lGODlhIiAqLwotICAgIGNhc2UgZ2lmX3R5cGU6Ci0gICAgewotICAgICAg
aWYgKCFzdHJuY21wKChjaGFyKilxLCAiR0lGODlhIiwgNikpIHsKLSAgICAgICAgdmVyc2lvbiA9
IDg5OwotICAgICAgfSBlbHNlIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg3YSIsIDYpKSB7
Ci0gICAgICAgIHZlcnNpb24gPSA4NzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRlID0g
Z2lmX2Vycm9yOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIEdFVE4oNywgZ2lmX2ds
b2JhbF9oZWFkZXIpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2dsb2JhbF9o
ZWFkZXI6Ci0gICAgewotICAgICAgLyogVGhpcyBpcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBvZiB0
aGUgInNjcmVlbiIgb3IKLSAgICAgICAqIGZyYW1lIGludG8gd2hpY2ggaW1hZ2VzIGFyZSByZW5k
ZXJlZC4gIFRoZQotICAgICAgICogaW5kaXZpZHVhbCBpbWFnZXMgY2FuIGJlIHNtYWxsZXIgdGhh
biB0aGUKLSAgICAgICAqIHNjcmVlbiBzaXplIGFuZCBsb2NhdGVkIHdpdGggYW4gb3JpZ2luIGFu
eXdoZXJlCi0gICAgICAgKiB3aXRoaW4gdGhlIHNjcmVlbi4KLSAgICAgICAqLwotCi0gICAgICBz
Y3JlZW5fd2lkdGggPSBHRVRJTlQxNihxKTsKLSAgICAgIHNjcmVlbl9oZWlnaHQgPSBHRVRJTlQx
NihxICsgMik7Ci0KLSAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4g
b2Ygb3VyIHNpemUuCi0gICAgICBpZiAoY2xpZW50cHRyICYmICFjbGllbnRwdHItPnNpemVOb3dB
dmFpbGFibGUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgCi0gICAgICBzY3JlZW5fYmdjb2xvciA9IHFbNV07Ci0gICAgICBnbG9iYWxf
Y29sb3JtYXBfc2l6ZSA9IDI8PChxWzRdJjB4MDcpOwotCi0gICAgICBpZiAoKHFbNF0gJiAweDgw
KSAmJiBnbG9iYWxfY29sb3JtYXBfc2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLwotICAgICAg
ICAvLyBHZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXpl
ID0gMypnbG9iYWxfY29sb3JtYXBfc2l6ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIE1hbGxvYyB0
aGUgY29sb3IgbWFwLCBidXQgb25seSBpZiB3ZSdyZSBub3QganVzdCBjb3VudGluZyBmcmFtZXMu
Ci0gICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVy
eSkKLSAgICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsK
LQotICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0
dGVybiB0byBnZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAgICAgICAgIEdFVE4oc2l6ZSwgZ2lm
X2dsb2JhbF9jb2xvcm1hcCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gZ2lmX2ltYWdl
X3N0YXJ0LgotICAgICAgICBpZiAoZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgICAgICAgbWVtY3B5
KGdsb2JhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7Ci0gICAg
ICAgIGxlbiAtPSBzaXplOwotICAgICAgfQotCi0gICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFy
dCk7Ci0KLSAgICAgIC8vIHFbNl0gPSBQaXhlbCBBc3BlY3QgUmF0aW8KLSAgICAgIC8vICAgTm90
IHVzZWQKLSAgICAgIC8vICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KSgocVs2XSArIDE1KSAvIDY0
LjApOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2dsb2JhbF9jb2xvcm1hcDoK
LSAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBnbG9iYWxfY29sb3Jt
YXAKLSAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICBicmVhazsKLQotICAgIGNh
c2UgZ2lmX2ltYWdlX3N0YXJ0OgotICAgIHsKLSAgICAgIGlmICgqcSA9PSAnOycpIHsgLyogdGVy
bWluYXRvciAqLwotICAgICAgICBzdGF0ZSA9IGdpZl9kb25lOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLQotICAgICAgaWYgKCpxID09ICchJykgeyAvKiBleHRlbnNpb24gKi8KLSAgICAgICAg
R0VUTigyLCBnaWZfZXh0ZW5zaW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAg
IC8qIElmIHdlIGdldCBhbnl0aGluZyBvdGhlciB0aGFuICcsJyAoaW1hZ2Ugc2VwYXJhdG9yKSwg
JyEnCi0gICAgICAgKiAoZXh0ZW5zaW9uKSwgb3IgJzsnICh0cmFpbGVyKSwgdGhlcmUgaXMgZXh0
cmFuZW91cyBkYXRhCi0gICAgICAgKiBiZXR3ZWVuIGJsb2Nrcy4gVGhlIEdJRjg3YSBzcGVjIHRl
bGxzIHVzIHRvIGtlZXAgcmVhZGluZwotICAgICAgICogdW50aWwgd2UgZmluZCBhbiBpbWFnZSBz
ZXBhcmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCi0gICAgICAgKiBhIGZpbGUgaXMgY29ycnVw
dC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuICovCi0gICAgICBpZiAoKnEgIT0gJywn
KSB7Ci0gICAgICAgIGlmIChpbWFnZXNfZGVjb2RlZCA+IDApIHsKLSAgICAgICAgICAvKiBUaGUg
ZmlsZSBpcyBjb3JydXB0LCBidXQgb25lIG9yIG1vcmUgaW1hZ2VzIGhhdmUKLSAgICAgICAgICAg
KiBiZWVuIGRlY29kZWQgY29ycmVjdGx5LiBJbiB0aGlzIGNhc2UsIHdlIHByb2NlZWQKLSAgICAg
ICAgICAgKiBhcyBpZiB0aGUgZmlsZSB3ZXJlIGNvcnJlY3RseSB0ZXJtaW5hdGVkIGFuZCBzZXQK
LSAgICAgICAgICAgKiB0aGUgc3RhdGUgdG8gZ2lmX2RvbmUsIHNvIHRoZSBHSUYgd2lsbCBkaXNw
bGF5LgotICAgICAgICAgICAqLwotICAgICAgICAgIHN0YXRlID0gZ2lmX2RvbmU7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgLyogTm8gaW1hZ2VzIGRlY29kZWQsIHRoZXJlIGlzIG5vdGhp
bmcgdG8gZGlzcGxheS4gKi8KLSAgICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIH0gZWxzZQotICAgICAgICBHRVROKDksIGdpZl9pbWFn
ZV9oZWFkZXIpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2V4dGVuc2lvbjoK
LSAgICB7Ci0gICAgICBpbnQgbGVuID0gY291bnQgPSBxWzFdOwotICAgICAgZ3N0YXRlIGVzID0g
Z2lmX3NraXBfYmxvY2s7Ci0KLSAgICAgIHN3aXRjaCAoKnEpCi0gICAgICB7Ci0gICAgICBjYXNl
IDB4Zjk6Ci0gICAgICAgIGVzID0gZ2lmX2NvbnRyb2xfZXh0ZW5zaW9uOwotICAgICAgICBicmVh
azsKLQotICAgICAgY2FzZSAweDAxOgotICAgICAgICAvLyBpZ25vcmluZyBwbGFpbiB0ZXh0IGV4
dGVuc2lvbgotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAweGZmOgotICAgICAgICBlcyA9
IGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb247Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl
IDB4ZmU6Ci0gICAgICAgIGVzID0gZ2lmX2NvbnN1bWVfY29tbWVudDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0KLSAgICAgIGlmIChsZW4pCi0gICAgICAgIEdFVE4obGVuLCBlcyk7Ci0gICAg
ICBlbHNlCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgICBjYXNlIGdpZl9jb25zdW1lX2Jsb2NrOgotICAgICAgaWYgKCEqcSkKLSAgICAg
ICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwotICAgICAgZWxzZQotICAgICAgICBHRVROKCpx
LCBnaWZfc2tpcF9ibG9jayk7Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9za2lwX2Jsb2Nr
OgotICAgICAgR0VUTigxLCBnaWZfY29uc3VtZV9ibG9jayk7Ci0gICAgICBicmVhazsKLQotICAg
IGNhc2UgZ2lmX2NvbnRyb2xfZXh0ZW5zaW9uOgotICAgIHsKLSAgICAgIGlmIChxdWVyeSAhPSBH
SUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkgewotICAgICAgICAgIGlmICghZnJh
bWVfcmVhZGVyKQotICAgICAgICAgICAgZnJhbWVfcmVhZGVyID0gbmV3IEdJRkZyYW1lUmVhZGVy
KCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgaWYgKCpx
ICYgMHgxKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT50cGl4ZWwgPSBxWzNdOwotICAgICAg
ICAgIGZyYW1lX3JlYWRlci0+aXNfdHJhbnNwYXJlbnQgPSB0cnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXNfdHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAg
ICAgICAvLyBpZ25vcmluZyBnZnggY29udHJvbCBleHRlbnNpb24KLSAgICAgICAgfQotICAgICAg
ICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2Fs
TWV0aG9kIGVudW0KLSAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQot
ICAgICAgICBmcmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9IChXZWJDb3JlOjpSR0JBMzJC
dWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRob2QpKCgoKnEpID4+IDIpICYgMHg3KTsKLSAgICAgICAg
Ly8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1
ZSAzCi0gICAgICAgIC8vIExldCdzIGNob29zZSAzICh0aGUgbW9yZSBwb3B1bGFyKQotICAgICAg
ICBpZiAoZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPT0gNCkKLSAgICAgICAgICBmcmFt
ZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6RGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzOwotICAgICAgICBmcmFtZV9yZWFkZXItPmRlbGF5X3RpbWUgPSBH
RVRJTlQxNihxICsgMSkgKiAxMDsKLSAgICAgIH0KLSAgICAgIEdFVE4oMSwgZ2lmX2NvbnN1bWVf
YmxvY2spOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbW1lbnRfZXh0ZW5z
aW9uOgotICAgIHsKLSAgICAgIGlmICgqcSkKLSAgICAgICAgR0VUTigqcSwgZ2lmX2NvbnN1bWVf
Y29tbWVudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9jb25zdW1lX2NvbW1lbnQ6Ci0gICAg
ICBHRVROKDEsIGdpZl9jb21tZW50X2V4dGVuc2lvbik7Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNl
IGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb246Ci0gICAgICAvKiBDaGVjayBmb3IgbmV0c2NhcGUg
YXBwbGljYXRpb24gZXh0ZW5zaW9uICovCi0gICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJO
RVRTQ0FQRTIuMCIsIDExKSB8fAotICAgICAgICAhc3RybmNtcCgoY2hhciopcSwgIkFOSU1FWFRT
MS4wIiwgMTEpKQotICAgICAgICBHRVROKDEsIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2sp
OwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9jb25zdW1lX2Jsb2NrKTsKLSAgICBi
cmVhazsKLQotICAgIC8qIE5ldHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246IGFuaW1hdGlv
biBsb29waW5nICovCi0gICAgY2FzZSBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrOgotICAg
ICAgaWYgKCpxKQotICAgICAgICBHRVROKCpxLCBnaWZfY29uc3VtZV9uZXRzY2FwZV9leHRlbnNp
b24pOwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7Ci0gICAg
YnJlYWs7Ci0KLSAgICAvKiBQYXJzZSBuZXRzY2FwZS1zcGVjaWZpYyBhcHBsaWNhdGlvbiBleHRl
bnNpb25zICovCi0gICAgY2FzZSBnaWZfY29uc3VtZV9uZXRzY2FwZV9leHRlbnNpb246Ci0gICAg
ewotICAgICAgaW50IG5ldHNjYXBlX2V4dGVuc2lvbiA9IHFbMF0gJiA3OwotCi0gICAgICAvKiBM
b29wIGVudGlyZSBhbmltYXRpb24gc3BlY2lmaWVkICMgb2YgdGltZXMuICBPbmx5IHJlYWQgdGhl
Ci0gICAgICAgICBsb29wIGNvdW50IGR1cmluZyB0aGUgZmlyc3QgaXRlcmF0aW9uLiAqLwotICAg
ICAgaWYgKG5ldHNjYXBlX2V4dGVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIGxvb3BfY291bnQgPSBH
RVRJTlQxNihxICsgMSk7Ci0KLSAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9u
X2Jsb2NrKTsKLSAgICAgIH0KLSAgICAgIC8qIFdhaXQgZm9yIHNwZWNpZmllZCAjIG9mIGJ5dGVz
IHRvIGVudGVyIGJ1ZmZlciAqLwotICAgICAgZWxzZSBpZiAobmV0c2NhcGVfZXh0ZW5zaW9uID09
IDIpIHsKLSAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgdGhpcyBleHRlbnNpb24gZG9lc24ndCBl
eGlzdCAoaXNuJ3QgdXNlZCBhdCBhbGwpIAotICAgICAgICAvLyBhbmQgZG9lc24ndCBkbyBhbnl0
aGluZywgYXMgb3VyIHN0cmVhbWluZy9idWZmZXJpbmcgdGFrZXMgY2FyZSBvZiBpdCBhbGwuLi4K
LSAgICAgICAgLy8gU2VlOiBodHRwOi8vc2VtbWl4LnBsL2NvbG9yL2V4Z3JhZi9lZWcyNC5odG0K
LSAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsKLSAgICAgIH0g
ZWxzZQotICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsgLy8gMCwzLTcgYXJlIHlldCB0byBiZSBk
ZWZpbmVkIG5ldHNjYXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXh0ZW5z
aW9uIGNvZGVzCi0KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgZ2lmX2ltYWdlX2hl
YWRlcjoKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBoZWlnaHQsIHdpZHRoLCB4X29mZnNldCwgeV9v
ZmZzZXQ7Ci0gICAgICAKLSAgICAgIC8qIEdldCBpbWFnZSBvZmZzZXRzLCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIHNjcmVlbiBvcmlnaW4gKi8KLSAgICAgIHhfb2Zmc2V0ID0gR0VUSU5UMTYocSk7Ci0g
ICAgICB5X29mZnNldCA9IEdFVElOVDE2KHEgKyAyKTsKLQotICAgICAgLyogR2V0IGltYWdlIHdp
ZHRoIGFuZCBoZWlnaHQuICovCi0gICAgICB3aWR0aCAgPSBHRVRJTlQxNihxICsgNCk7Ci0gICAg
ICBoZWlnaHQgPSBHRVRJTlQxNihxICsgNik7Ci0KLSAgICAgIC8qIFdvcmsgYXJvdW5kIGJyb2tl
biBHSUYgZmlsZXMgd2hlcmUgdGhlIGxvZ2ljYWwgc2NyZWVuCi0gICAgICAgKiBzaXplIGhhcyB3
ZWlyZCB3aWR0aCBvciBoZWlnaHQuICBXZSBhc3N1bWUgdGhhdCBHSUY4N2EKLSAgICAgICAqIGZp
bGVzIGRvbid0IGNvbnRhaW4gYW5pbWF0aW9ucy4KLSAgICAgICAqLwotICAgICAgaWYgKChpbWFn
ZXNfZGVjb2RlZCA9PSAwKSAmJgotICAgICAgICAgICgoc2NyZWVuX2hlaWdodCA8IGhlaWdodCkg
fHwgKHNjcmVlbl93aWR0aCA8IHdpZHRoKSB8fAotICAgICAgICAgICAodmVyc2lvbiA9PSA4Nykp
KQotICAgICAgewotICAgICAgICBzY3JlZW5faGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBzY3Jl
ZW5fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgeF9vZmZzZXQgPSAwOwotICAgICAgICB5X29mZnNl
dCA9IDA7Ci0KLSAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBv
ZiBvdXIgc2l6ZS4KLSAgICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xpZW50cHRyLT5zaXplTm93
QXZhaWxhYmxlKHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCkpCi0gICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotCi0gICAgICAvKiBXb3JrIGFyb3VuZCBtb3JlIGJyb2tlbiBHSUYg
ZmlsZXMgdGhhdCBoYXZlIHplcm8gaW1hZ2UKLSAgICAgICAgIHdpZHRoIG9yIGhlaWdodCAqLwot
ICAgICAgaWYgKCFoZWlnaHQgfHwgIXdpZHRoKSB7Ci0gICAgICAgIGhlaWdodCA9IHNjcmVlbl9o
ZWlnaHQ7Ci0gICAgICAgIHdpZHRoID0gc2NyZWVuX3dpZHRoOwotICAgICAgICBpZiAoIWhlaWdo
dCB8fCAhd2lkdGgpIHsKLSAgICAgICAgICBzdGF0ZSA9IGdpZl9lcnJvcjsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0RnJhbWUgPT0gaW1hZ2VzX2RlY29kZWQpIHsK
LSAgICAgICAgLy8gVGhlIGRlY29kZXIgbmVlZHMgdG8gc3RvcC4gIEhhbmQgYmFjayB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KLSAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkg
KHRoZSBhbW91bnQgd2UgY29uc3VtZWQgdG8gcmVhZCB0aGUgaGVhZGVyKS4KLSAgICAgICAgaWYg
KGNsaWVudHB0cikKLSAgICAgICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQobGVuICsg
OSk7Ci0gICAgICAgIEdFVE4oOSwgZ2lmX2ltYWdlX2hlYWRlcik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgICAgCi0gICAgICBpbWFnZXNfY291bnQgPSBpbWFnZXNfZGVjb2Rl
ZCArIDE7Ci0KLSAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVy
eSAmJiAhZnJhbWVfcmVhZGVyKQotICAgICAgICBmcmFtZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVS
ZWFkZXIoKTsKLQotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICBmcmFtZV9yZWFk
ZXItPnhfb2Zmc2V0ID0geF9vZmZzZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+eV9vZmZzZXQg
PSB5X29mZnNldDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ICAgIGZyYW1lX3JlYWRlci0+d2lkdGggPSB3aWR0aDsKLQotICAgICAgICAvKiBUaGlzIGNhc2Ug
d2lsbCBuZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLwotICAgICAg
ICAvKiBiZWluZyBkZWNvZGVkLiBJZiBhbnkgb2YgdGhlIGxhdGVyIGltYWdlcyBhcmUgbGFyZ2Vy
ICAgICAqLwotICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFs
bG9jYXRlIGJ1ZmZlcnMuICAgICAqLwotICAgICAgICBpZiAoc2NyZWVuX3dpZHRoIDwgd2lkdGgp
IHsKLSAgICAgICAgICAvKiBYWFggRGV2aWFudCEgKi8KLQotICAgICAgICAgIGRlbGV0ZSBbXWZy
YW1lX3JlYWRlci0+cm93YnVmOwotICAgICAgICAgIHNjcmVlbl93aWR0aCA9IHdpZHRoOwotICAg
ICAgICAgIGZyYW1lX3JlYWRlci0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbc2NyZWVuX3dp
ZHRoXTsKLSAgICAgICAgfSBlbHNlIGlmICghZnJhbWVfcmVhZGVyLT5yb3didWYpIHsKLSAgICAg
ICAgICBmcmFtZV9yZWFkZXItPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0
aF07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKSB7Ci0g
ICAgICAgICAgc3RhdGUgPSBnaWZfb29tOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KQotICAgICAgICAgIHNjcmVlbl9oZWln
aHQgPSBoZWlnaHQ7Ci0KLSAgICAgICAgaWYgKHFbOF0gJiAweDQwKSB7Ci0gICAgICAgICAgZnJh
bWVfcmVhZGVyLT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlw
YXNzID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmludGVy
bGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlwYXNzID0gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChpbWFnZXNfZGVjb2RlZCA9PSAwKSB7Ci0gICAgICAgICAgZnJh
bWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAvKiBPdmVybGF5aW5nIGludGVybGFjZWQsIHRyYW5zcGFyZW50IEdJRnMgb3Zl
cgotICAgICAgICAgICAgIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRp
c3BsYXkgaGFjawotICAgICAgICAgICAgIHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBp
bWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgIGF2b2lkIGphZ2dpZXMgYXQgdGhlIHRyYW5z
cGFyZW5jeSBlZGdlcy4gIFdlIGFyZQotICAgICAgICAgICAgIHVucHJlcGFyZWQgdG8gZGVhbCB3
aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkgc3VjaAotICAgICAgICAgICAgIGltYWdlcyBwcm9n
cmVzc2l2ZWx5ICovCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5
ID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9tIGxhc3Qg
aW1hZ2UgKi8KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5pcm93ID0gMDsKLSAgICAgICAgZnJhbWVf
cmVhZGVyLT5yb3dzX3JlbWFpbmluZyA9IGZyYW1lX3JlYWRlci0+aGVpZ2h0OwotICAgICAgICBm
cmFtZV9yZWFkZXItPnJvd2VuZCA9IGZyYW1lX3JlYWRlci0+cm93YnVmICsgZnJhbWVfcmVhZGVy
LT53aWR0aDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3dwID0gZnJhbWVfcmVhZGVyLT5yb3di
dWY7Ci0KLSAgICAgICAgLyogYml0cyBwZXIgcGl4ZWwgaXMgcVs4XSYweDA3ICovCi0gICAgICB9
Ci0gICAgICAKLSAgICAgIGlmIChxWzhdICYgMHg4MCkgLyogaGFzIGEgbG9jYWwgY29sb3JtYXA/
ICovCi0gICAgICB7Ci0gICAgICAgIGludCBudW1fY29sb3JzID0gMiA8PCAocVs4XSAmIDB4Nyk7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzKm51bV9jb2xvcnM7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgKm1hcCA9IGZyYW1lX3JlYWRlciA/IGZyYW1lX3JlYWRlci0+bG9jYWxfY29s
b3JtYXAgOiAwOwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyICYmICghbWFwIHx8IChudW1fY29s
b3JzID4gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplKSkpIHsKLSAgICAgICAgICBk
ZWxldGUgW11tYXA7Ci0gICAgICAgICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07Ci0g
ICAgICAgICAgaWYgKCFtYXApIHsKLSAgICAgICAgICAgIHN0YXRlID0gZ2lmX29vbTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIFN3aXRj
aCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIgaXQgbG9hZHMgKi8KLSAgICAgICAgaWYg
KGZyYW1lX3JlYWRlcikgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXAg
PSBtYXA7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplID0gbnVt
X2NvbG9yczsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmlu
ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAg
ICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBpbWFnZSBjb2xvcm1hcAotICAg
ICAgICAgIEdFVE4oc2l6ZSwgZ2lmX2ltYWdlX2NvbG9ybWFwKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRv
IGdpZl9sendfc3RhcnQKLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikKLSAgICAgICAgICBtZW1j
cHkoZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVm
ICs9IHNpemU7Ci0gICAgICAgIGxlbiAtPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChmcmFtZV9y
ZWFkZXIpIHsKLSAgICAgICAgLyogU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlICov
Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IGZhbHNl
OwotICAgICAgfQotICAgICAgR0VUTigxLCBnaWZfbHp3X3N0YXJ0KTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgICBjYXNlIGdpZl9pbWFnZV9jb2xvcm1hcDoKLSAgICAgIC8vIEV2ZXJ5dGhpbmcg
aXMgYWxyZWFkeSBjb3BpZWQgaW50byBsb2NhbF9jb2xvcm1hcAotICAgICAgR0VUTigxLCBnaWZf
bHp3X3N0YXJ0KTsKLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX3N1Yl9ibG9jazoKLSAgICB7
Ci0gICAgICBpZiAoKGNvdW50ID0gKnEpICE9IDApCi0gICAgICAvKiBTdGlsbCB3b3JraW5nIG9u
IHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2sgKi8KLSAgICAgIHsK
LSAgICAgICAgLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBH
SUYgZGF0YSAqLwotICAgICAgICAvKiBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBs
aWNpdCB0ZXJtaW5hdG9yLiAgICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIgJiYgZnJhbWVf
cmVhZGVyLT5yb3dzX3JlbWFpbmluZyA9PSAwKSB7Ci0gICAgICAgICAgLyogVGhpcyBpcyBhbiBp
bGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4gKi8KLSAgICAgICAgICBHRVROKDEs
IGdpZl9zdWJfYmxvY2spOwotICAgICAgICB9Ci0gICAgICAgIEdFVE4oY291bnQsIGdpZl9sencp
OwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9y
ZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4gKi8KLSAgICAgIHsKLSAgICAgICAgaW1hZ2VzX2Rl
Y29kZWQrKzsKLQotICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0
ZS4KLSAgICAgICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgY2xp
ZW50cHRyLT5mcmFtZUNvbXBsZXRlKGltYWdlc19kZWNvZGVkIC0gMSwgZnJhbWVfcmVhZGVyLT5k
ZWxheV90aW1lLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfcmVh
ZGVyLT5kaXNwb3NhbF9tZXRob2QpOwotCi0gICAgICAgIC8qIENsZWFyIHN0YXRlIGZyb20gdGhp
cyBpbWFnZSAqLwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgICAgICBmcmFt
ZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGZyYW1lX3JlYWRlci0+aXNfdHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7
Ci0KLSAgICBjYXNlIGdpZl9kb25lOgotICAgICAgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdl
IGNhbiBzdG9wLgotICAgICAgaWYgKGNsaWVudHB0cikKLSAgICAgICAgY2xpZW50cHRyLT5naWZD
b21wbGV0ZSgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBIYW5kbGUgb3V0IG9mIG1l
bW9yeSBlcnJvcnMKLSAgICBjYXNlIGdpZl9vb206Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBIYW5kbGUgZ2VuZXJhbCBlcnJvcnMKLSAgICBjYXNlIGdpZl9lcnJvcjoKLSAgICAgIC8v
IG5zR0lGRGVjb2RlcjI6OkVuZEdJRihncy0+Y2xpZW50cHRyLCBncy0+bG9vcF9jb3VudCk7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4K
LSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29weSB0aGUg
bGVmdG92ZXIgaW50byBncy0+aG9sZAotICBieXRlc19pbl9ob2xkID0gbGVuOwotICBpZiAobGVu
KSB7Ci0gICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICB1bnNp
Z25lZCBjaGFyKiBwOwotICAgIGlmIChzdGF0ZSA9PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKQotICAg
ICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgICBlbHNlIGlmIChzdGF0ZSA9PSBnaWZfaW1hZ2Vf
Y29sb3JtYXApCi0gICAgICBwID0gZnJhbWVfcmVhZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9j
b2xvcm1hcCA6IDA7Ci0gICAgZWxzZQotICAgICAgcCA9IGhvbGQ7Ci0gICAgaWYgKHApCi0gICAg
ICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbGVuOwotICB9
Ci0KLSAgaWYgKGNsaWVudHB0cikKLSAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwot
ICByZXR1cm4gdHJ1ZTsKLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA0NDYzMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9HSUZJbWFnZVJlYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDIxNSArMCwwIEBACi0vKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA0
OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLSAqLwotLyogKioq
KiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgotICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4w
L0xHUEwgMi4xCi0gKgotICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0
byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCi0gKiAxLjEgKHRoZSAiTGljZW5z
ZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgK
LSAqIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
LSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICoKLSAqIFNvZnR3YXJlIGRpc3RyaWJ1
dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMs
Ci0gKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLiBTZWUgdGhlIExpY2Vuc2UKLSAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCi0gKiBMaWNlbnNlLgotICoKLSAq
IFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlLgot
ICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotICog
TmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Ci0gKiB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0
b3Iocyk6Ci0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBt
YXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKLSAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgotICogdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAo
dGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwg
b3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAotICogb2YgdGhvc2UgYWJvdmUuIElm
IHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkK
LSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCi0gKiBkZWNpc2lvbiBieSBk
ZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5v
dGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUg
TEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKLSAqIHRoZSB0
ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCi0gKgotICog
KioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KLQotI2lmbmRlZiBHSUZJbWFnZVJlYWRl
cl9oCi0jZGVmaW5lIEdJRkltYWdlUmVhZGVyX2gKLQotLy8gRGVmaW5lIG91cnNlbHZlcyBhcyB0
aGUgY2xpZW50UHRyLiAgTW96aWxsYSBqdXN0IGhhY2tlZCB0aGVpciBDKysgY2FsbGJhY2sgY2xh
c3MgaW50byB0aGlzIG9sZCBDIGRlY29kZXIsCi0vLyBzbyB3ZSB3aWxsIHRvby4KLSNpbmNsdWRl
ICJHSUZJbWFnZURlY29kZXIuaCIKLQotI2RlZmluZSBNQVhfTFpXX0JJVFMgICAgICAgICAgMTIK
LSNkZWZpbmUgTUFYX0JJVFMgICAgICAgICAgICA0MDk3IC8qIDJeTUFYX0xaV19CSVRTKzEgKi8K
LSNkZWZpbmUgTUFYX0NPTE9SUyAgICAgICAgICAgMjU2Ci0jZGVmaW5lIE1BWF9IT0xEX1NJWkUg
ICAgICAgIDI1NgotCi1jb25zdCBpbnQgY0xvb3BDb3VudE5vdFNlZW4gPSAtMjsKLQotLyogZ2lm
Mi5oICAKLSAgIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBHSUY4Ny84OWEgZGVjb2Rlci4gCi0qLwot
Ly8gTGlzdCBvZiBwb3NzaWJsZSBwYXJzaW5nIHN0YXRlcwotdHlwZWRlZiBlbnVtIHsKLSAgICBn
aWZfdHlwZSwKLSAgICBnaWZfZ2xvYmFsX2hlYWRlciwKLSAgICBnaWZfZ2xvYmFsX2NvbG9ybWFw
LAotICAgIGdpZl9pbWFnZV9zdGFydCwgICAgICAgICAgICAKLSAgICBnaWZfaW1hZ2VfaGVhZGVy
LAotICAgIGdpZl9pbWFnZV9jb2xvcm1hcCwKLSAgICBnaWZfaW1hZ2VfYm9keSwKLSAgICBnaWZf
bHp3X3N0YXJ0LAotICAgIGdpZl9sencsCi0gICAgZ2lmX3N1Yl9ibG9jaywKLSAgICBnaWZfZXh0
ZW5zaW9uLAotICAgIGdpZl9jb250cm9sX2V4dGVuc2lvbiwKLSAgICBnaWZfY29uc3VtZV9ibG9j
aywKLSAgICBnaWZfc2tpcF9ibG9jaywKLSAgICBnaWZfZG9uZSwKLSAgICBnaWZfb29tLAotICAg
IGdpZl9lcnJvciwKLSAgICBnaWZfY29tbWVudF9leHRlbnNpb24sCi0gICAgZ2lmX2FwcGxpY2F0
aW9uX2V4dGVuc2lvbiwKLSAgICBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrLAotICAgIGdp
Zl9jb25zdW1lX25ldHNjYXBlX2V4dGVuc2lvbiwKLSAgICBnaWZfY29uc3VtZV9jb21tZW50Ci19
IGdzdGF0ZTsKLQotc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKLSAgICAvKiBMWlcgZGVjb2RlciBz
dGF0ZSBtYWNoaW5lICovCi0gICAgdW5zaWduZWQgY2hhciAqc3RhY2twOyAgICAgICAgICAgICAg
LyogQ3VycmVudCBzdGFjayBwb2ludGVyICovCi0gICAgaW50IGRhdGFzaXplOwotICAgIGludCBj
b2Rlc2l6ZTsKLSAgICBpbnQgY29kZW1hc2s7Ci0gICAgaW50IGNsZWFyX2NvZGU7ICAgICAgICAg
ICAgIC8qIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJlc2V0ICovCi0gICAg
aW50IGF2YWlsOyAgICAgICAgICAgICAgICAgIC8qIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNs
b3QgaW4gZGljdGlvbmFyeSAqLwotICAgIGludCBvbGRjb2RlOwotICAgIHVuc2lnbmVkIGNoYXIg
Zmlyc3RjaGFyOwotICAgIGludCBiaXRzOyAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Yg
dW5yZWFkIGJpdHMgaW4gImRhdHVtIiAqLwotICAgIGludCBkYXR1bTsgICAgICAgICAgICAgICAg
LyogMzItYml0IGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogT3V0cHV0IHN0YXRlIG1hY2hpbmUg
Ki8KLSAgICBpbnQgaXBhc3M7ICAgICAgICAgICAgICAgICAgLyogSW50ZXJsYWNlIHBhc3M7IFJh
bmdlcyAxLTQgaWYgaW50ZXJsYWNlZC4gKi8KLSAgICB1bnNpZ25lZCBpbnQgcm93c19yZW1haW5p
bmc7ICAgICAgICAvKiBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQgKi8KLSAgICB1bnNpZ25l
ZCBpbnQgaXJvdzsgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCByb3csIHN0YXJ0
aW5nIGF0IHplcm8gKi8KLSAgICB1bnNpZ25lZCBjaGFyICpyb3didWY7ICAgICAgICAgICAgICAv
KiBTaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGNoYXIg
KnJvd2VuZDsgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gZW5kIG9mIHJvd2J1ZiAqLwotICAg
IHVuc2lnbmVkIGNoYXIgKnJvd3A7ICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgb3V0cHV0IHBv
aW50ZXIgKi8KLQotICAgIC8qIFBhcmFtZXRlcnMgZm9yIGltYWdlIGZyYW1lIGN1cnJlbnRseSBi
ZWluZyBkZWNvZGVkICovCi0gICAgdW5zaWduZWQgaW50IHhfb2Zmc2V0LCB5X29mZnNldDsgICAg
LyogV2l0aCByZXNwZWN0IHRvICJzY3JlZW4iIG9yaWdpbiAqLwotICAgIHVuc2lnbmVkIGludCBo
ZWlnaHQsIHdpZHRoOwotICAgIGludCB0cGl4ZWw7ICAgICAgICAgICAgICAgICAvKiBJbmRleCBv
ZiB0cmFuc3BhcmVudCBwaXhlbCAqLwotICAgIFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6RnJhbWVE
aXNwb3NhbE1ldGhvZCBkaXNwb3NhbF9tZXRob2Q7ICAgLyogUmVzdG9yZSB0byBiYWNrZ3JvdW5k
LCBsZWF2ZSBpbiBwbGFjZSwgZXRjLiovCi0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxfY29sb3Jt
YXA7ICAgIC8qIFBlci1pbWFnZSBjb2xvcm1hcCAqLwotICAgIGludCBsb2NhbF9jb2xvcm1hcF9z
aXplOyAgICAvKiBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LiAqLwotICAgIAotICAgIGJv
b2wgaXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA6IDE7Ci0gICAgYm9vbCBwcm9ncmVzc2l2ZV9k
aXNwbGF5IDogMTsgICAgLyogSWYgVFJVRSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2sgKi8K
LSAgICBib29sIGludGVybGFjZWQgOiAxOyAgICAgICAgICAgICAvKiBUUlVFLCBpZiBzY2FubGlu
ZXMgYXJyaXZlIGludGVybGFjZWQgb3JkZXIgKi8KLSAgICBib29sIGlzX3RyYW5zcGFyZW50IDog
MTsgICAgICAgICAvKiBUUlVFLCBpZiB0cGl4ZWwgaXMgdmFsaWQgKi8KLQotICAgIHVuc2lnbmVk
IGRlbGF5X3RpbWU7ICAgICAgICAvKiBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgaW1hZ2UgaW4gYSBtdWx0
aS1pbWFnZSBHSUYgKi8KLQotCi0gICAgdW5zaWduZWQgc2hvcnQqICBwcmVmaXg7ICAgICAgICAg
IC8qIExaVyBkZWNvZGluZyB0YWJsZXMgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiAgIHN1ZmZpeDsg
ICAgICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLwotICAgIHVuc2lnbmVkIGNoYXIqICAg
c3RhY2s7ICAgICAgICAgICAvKiBCYXNlIG9mIExaVyBkZWNvZGVyIHN0YWNrICovCi0KLQotICAg
IEdJRkZyYW1lUmVhZGVyKCkgewotICAgICAgICBzdGFja3AgPSAwOwotICAgICAgICBkYXRhc2l6
ZSA9IGNvZGVzaXplID0gY29kZW1hc2sgPSBjbGVhcl9jb2RlID0gYXZhaWwgPSBvbGRjb2RlID0g
MDsKLSAgICAgICAgZmlyc3RjaGFyID0gMDsKLSAgICAgICAgYml0cyA9IGRhdHVtID0gMDsKLSAg
ICAgICAgaXBhc3MgPSAwOwotICAgICAgICByb3dzX3JlbWFpbmluZyA9IGlyb3cgPSAwOwotICAg
ICAgICByb3didWYgPSByb3dlbmQgPSByb3dwID0gMDsKLQotICAgICAgICB4X29mZnNldCA9IHlf
b2Zmc2V0ID0gd2lkdGggPSBoZWlnaHQgPSAwOwotICAgICAgICB0cGl4ZWwgPSAwOwotICAgICAg
ICBkaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OkRpc3Bvc2VOb3RTcGVj
aWZpZWQ7Ci0KLSAgICAgICAgbG9jYWxfY29sb3JtYXAgPSAwOwotICAgICAgICBsb2NhbF9jb2xv
cm1hcF9zaXplID0gMDsKLSAgICAgICAgaXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IHByb2dy
ZXNzaXZlX2Rpc3BsYXkgPSBpc190cmFuc3BhcmVudCA9IGludGVybGFjZWQgPSBmYWxzZTsKLQot
ICAgICAgICBkZWxheV90aW1lID0gMDsKLQotICAgICAgICBwcmVmaXggPSAwOwotICAgICAgICBz
dWZmaXggPSBzdGFjayA9IDA7Ci0gICAgfQotICAgIAotICAgIH5HSUZGcmFtZVJlYWRlcigpIHsK
LSAgICAgICAgZGVsZXRlIFtdcm93YnVmOwotICAgICAgICBkZWxldGUgW11sb2NhbF9jb2xvcm1h
cDsKLSAgICAgICAgZGVsZXRlIFtdcHJlZml4OwotICAgICAgICBkZWxldGUgW11zdWZmaXg7Ci0g
ICAgICAgIGRlbGV0ZSBbXXN0YWNrOwotICAgIH0KLX07Ci0KLXN0cnVjdCBHSUZJbWFnZVJlYWRl
ciB7Ci0gICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnRwdHI7Ci0gICAgLyogUGFy
c2luZyBzdGF0ZSBtYWNoaW5lICovCi0gICAgZ3N0YXRlIHN0YXRlOyAgICAgICAgICAgICAgICAg
ICAgICAvKiBDdXJyZW50IGRlY29kZXIgbWFzdGVyIHN0YXRlICovCi0gICAgdW5zaWduZWQgYnl0
ZXNfdG9fY29uc3VtZTsgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYWNjdW11bGF0ZSAq
LwotICAgIHVuc2lnbmVkIGJ5dGVzX2luX2hvbGQ7ICAgICAgICAgICAgLyogYnl0ZXMgYWNjdW11
bGF0ZWQgc28gZmFyKi8KLSAgICB1bnNpZ25lZCBjaGFyIGhvbGRbTUFYX0hPTERfU0laRV07IC8q
IEFjY3VtdWxhdGlvbiBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiBnbG9iYWxfY29sb3Jt
YXA7ICAgIC8qICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9j
YWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yICAqLwotICAgIAotICAgICAv
KiBHbG9iYWwgKG11bHRpLWltYWdlKSBzdGF0ZSAqLwotICAgIGludCBzY3JlZW5fYmdjb2xvcjsg
ICAgICAgICAvKiBMb2dpY2FsIHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yICovCi0gICAgaW50IHZl
cnNpb247ICAgICAgICAgICAgICAgIC8qIEVpdGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9yIEdJ
Rjg3ICovCi0gICAgdW5zaWduZWQgc2NyZWVuX3dpZHRoOyAgICAgICAvKiBMb2dpY2FsIHNjcmVl
biB3aWR0aCAmIGhlaWdodCAqLwotICAgIHVuc2lnbmVkIHNjcmVlbl9oZWlnaHQ7Ci0gICAgaW50
IGdsb2JhbF9jb2xvcm1hcF9zaXplOyAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5
LiAqLwotICAgIHVuc2lnbmVkIGltYWdlc19kZWNvZGVkOyAgICAvKiBDb3VudHMgY29tcGxldGVk
IGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcyAqLwotICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAg
ICAgICAvKiBDb3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBs
ZXRlIGZyYW1lcykgKi8KLSAgICBpbnQgbG9vcF9jb3VudDsgICAgICAgICAgICAgLyogTmV0c2Nh
cGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVu
ZGVycy4gKi8KLSAgICAKLSAgICAvLyBOb3QgcmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQg
dG8gbG9jYXRlIGhlcmUuCi0gICAgaW50IGNvdW50OyAgICAgICAgICAgICAgICAgIC8qIFJlbWFp
bmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jayAqLwotICAgIAotICAgIEdJRkZyYW1lUmVhZGVyKiBm
cmFtZV9yZWFkZXI7Ci0KLSAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXIqIGNsaWVudCA9IDApIHsKLSAgICAgICAgY2xpZW50cHRyID0gY2xpZW50OwotICAgICAgICBz
dGF0ZSA9IGdpZl90eXBlOwotICAgICAgICBieXRlc190b19jb25zdW1lID0gNjsKLSAgICAgICAg
Ynl0ZXNfaW5faG9sZCA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRlciA9IDA7Ci0gICAgICAgIGds
b2JhbF9jb2xvcm1hcCA9IDA7Ci0KLSAgICAgICAgc2NyZWVuX2JnY29sb3IgPSB2ZXJzaW9uID0g
MDsKLSAgICAgICAgc2NyZWVuX3dpZHRoID0gc2NyZWVuX2hlaWdodCA9IDA7Ci0gICAgICAgIGds
b2JhbF9jb2xvcm1hcF9zaXplID0gaW1hZ2VzX2RlY29kZWQgPSBpbWFnZXNfY291bnQgPSAwOwot
ICAgICAgICBsb29wX2NvdW50ID0gY0xvb3BDb3VudE5vdFNlZW47Ci0gICAgICAgIGNvdW50ID0g
MDsKLSAgICB9Ci0KLSAgICB+R0lGSW1hZ2VSZWFkZXIoKSB7Ci0gICAgICAgIGNsb3NlKCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjbG9zZSgpIHsKLSAgICAgICAgZGVsZXRlIFtdZ2xvYmFsX2NvbG9y
bWFwOwotICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSAwOwotICAgICAgICBkZWxldGUgZnJhbWVf
cmVhZGVyOwotICAgICAgICBmcmFtZV9yZWFkZXIgPSAwOwotICAgIH0KLQotICAgIGJvb2wgcmVh
ZChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCB1bnNpZ25lZCBpbnQgbnVtYnl0ZXMsIAotICAg
ICAgICAgICAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0gV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1l
ID0gLTEpOwotCi1wcml2YXRlOgotICAgIHZvaWQgb3V0cHV0X3JvdygpOwotICAgIGludCBkb19s
encoY29uc3QgdW5zaWduZWQgY2hhciAqcSk7Ci19OwotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JQ09JbWFnZURlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JQ09JbWFnZURlY29k
ZXIuY3BwCShyZXZpc2lvbiA0NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJQ09JbWFnZURlY29k
ZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBOdW1iZXIgb2YgYml0cyBpbiAuSUNP
Ly5DVVIgdXNlZCB0byBzdG9yZSB0aGUgZGlyZWN0b3J5IGFuZCBpdHMgZW50cmllcywKLS8vIHJl
c3BlY3RpdmVseSAoZG9lc24ndCBtYXRjaCBzaXplb2YgdmFsdWVzIGZvciBtZW1iZXIgc3RydWN0
cyBzaW5jZSB3ZSBvbWl0Ci0vLyBzb21lIGZpZWxkcykuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IHNp
emVPZkRpcmVjdG9yeSA9IDY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IHNpemVPZkRpckVudHJ5ID0g
MTY7Ci0KLXZvaWQgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqIGRh
dGEpCi17Ci0gICAgLy8gUmVhZCBhbmQgcHJvY2VzcyBkaXJlY3RvcnkuCi0gICAgaWYgKChtX2Rl
Y29kZWRPZmZzZXQgPCBzaXplT2ZEaXJlY3RvcnkpICYmICFwcm9jZXNzRGlyZWN0b3J5KGRhdGEp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBSZWFkIGFuZCBwcm9jZXNzIGRpcmVjdG9yeSBl
bnRyaWVzLgotICAgIGlmICgobV9kZWNvZGVkT2Zmc2V0IDwgKHNpemVPZkRpcmVjdG9yeSArICht
X2RpcmVjdG9yeS5pZENvdW50ICogc2l6ZU9mRGlyRW50cnkpKSkKLSAgICAgICAgJiYgIXByb2Nl
c3NEaXJlY3RvcnlFbnRyaWVzKGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDaGVj
ayBpZiB0aGlzIGVudHJ5IGlzIGEgUE5HOyB3ZSBuZWVkIDQgYnl0ZXMgdG8gY2hlY2sgdGhlIG1h
Z2ljIG51bWJlci4KLSAgICBpZiAobV9pbWFnZVR5cGUgPT0gVW5rbm93bikgewotICAgICAgICBp
ZiAoZGF0YS0+c2l6ZSgpIDwgKG1fZGlyRW50cnkuZHdJbWFnZU9mZnNldCArIDQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX2ltYWdlVHlwZSA9Ci0gICAgICAgICAgICBzdHJuY21w
KCZkYXRhLT5kYXRhKClbbV9kaXJFbnRyeS5kd0ltYWdlT2Zmc2V0XSwgIlx4ODlQTkciLCA0KSA/
Ci0gICAgICAgICAgICBCTVAgOiBQTkc7Ci0gICAgfQotCi0gICAgLy8gRGVjb2RlIHNlbGVjdGVk
IGVudHJ5LgotICAgIGlmIChtX2ltYWdlVHlwZSA9PSBQTkcpCi0gICAgICAgIGRlY29kZVBORyhk
YXRhKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHRyeSB0byBs
aW1pdCB0aGUgYnl0ZXMgd2UgZ2l2ZSB0byB0aGUgZGVjb2RlciB0bwotICAgICAgICAvLyBqdXN0
IHRoZSBzaXplIHNwZWNpZmllZCBpbiB0aGUgaWNvbiBkaXJlY3RvcnkuICBJZiB0aGUgc2l6ZSBn
aXZlbiBpbgotICAgICAgICAvLyB0aGUgZGlyZWN0b3J5IGlzIGluc3VmZmljaWVudCB0byBkZWNv
ZGUgdGhlIHdob2xlIGltYWdlLCB0aGUgaW1hZ2UgaXMKLSAgICAgICAgLy8gY29ycnVwdCBhbnl3
YXksIHNvIHdoYXRldmVyIHdlIGRvIG1heSBiZSB3cm9uZy4gIFRoZSBlYXNpZXN0IGNob2ljZQot
ICAgICAgICAvLyAod2hpY2ggd2UgZG8gaGVyZSkgaXMgdG8gc2ltcGx5IGFnZ3Jlc3NpdmVseSBj
b25zdW1lIGJ5dGVzIHVudGlsIHdlCi0gICAgICAgIC8vIHJ1biBvdXQgb2YgYnl0ZXMsIGZpbmlz
aCBkZWNvZGluZywgb3IgaGl0IGEgc2VxdWVuY2UgdGhhdCBtYWtlcyB0aGUKLSAgICAgICAgLy8g
ZGVjb2RlciBmYWlsLgotICAgICAgICBkZWNvZGVCTVAoZGF0YSk7Ci0gICAgfQotfQotCi1SR0JB
MzJCdWZmZXIqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKLXsKLSAgICByZXR1cm4gKG1faW1hZ2VUeXBlID09IFBORykgPyBtX3BuZ0RlY29kZXIuZnJh
bWVCdWZmZXJBdEluZGV4KDApIDoKLSAgICAgICAgQk1QSW1hZ2VSZWFkZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCgwKTsKLX0KLQotYm9vbCBJQ09JbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX2ltYWdlVHlwZSA9PSBQTkcpID8gbV9wbmdEZWNvZGVy
LmlzU2l6ZUF2YWlsYWJsZSgpIDoKLSAgICAgICAgQk1QSW1hZ2VSZWFkZXI6OmlzU2l6ZUF2YWls
YWJsZSgpOwotfQotCi1JbnRTaXplIElDT0ltYWdlRGVjb2Rlcjo6c2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIChtX2ltYWdlVHlwZSA9PSBQTkcpID8gbV9wbmdEZWNvZGVyLnNpemUoKSA6IEJN
UEltYWdlUmVhZGVyOjpzaXplKCk7Ci19Ci0KLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNz
RGlyZWN0b3J5KFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICAvLyBSZWFkIGRpcmVjdG9yeS4K
LSAgICBBU1NFUlQoIW1fZGVjb2RlZE9mZnNldCk7Ci0gICAgaWYgKGRhdGEtPnNpemUoKSA8IHNp
emVPZkRpcmVjdG9yeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IHVpbnQxNl90
IGZpbGVUeXBlID0gcmVhZFVpbnQxNihkYXRhLCAyKTsKLSAgICBtX2RpcmVjdG9yeS5pZENvdW50
ID0gcmVhZFVpbnQxNihkYXRhLCA0KTsKLSAgICBtX2RlY29kZWRPZmZzZXQgPSBzaXplT2ZEaXJl
Y3Rvcnk7Ci0KLSAgICAvLyBTZWUgaWYgdGhpcyBpcyBhbiBpY29uIGZpbGV0eXBlIHdlIHVuZGVy
c3RhbmQsIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhdAotICAgIC8vIGxlYXN0IG9uZSBlbnRyeSBp
biB0aGUgZGlyZWN0b3J5LgotICAgIGVudW0gewotICAgICAgICBJQ09OID0gMSwKLSAgICAgICAg
Q1VSU09SID0gMiwKLSAgICB9OwotICAgIGlmICgoKGZpbGVUeXBlICE9IElDT04pICYmIChmaWxl
VHlwZSAhPSBDVVJTT1IpKSB8fAotICAgICAgICAgICAgKG1fZGlyZWN0b3J5LmlkQ291bnQgPT0g
MCkpCi0gICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsKLQotICAgIHJldHVybiAhbV9mYWlsZWQ7Ci19
Ci0KLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5RW50cmllcyhTaGFyZWRC
dWZmZXIqIGRhdGEpCi17Ci0gICAgLy8gUmVhZCBkaXJlY3RvcnkgZW50cmllcy4KLSAgICBBU1NF
UlQobV9kZWNvZGVkT2Zmc2V0ID09IHNpemVPZkRpcmVjdG9yeSk7Ci0gICAgaWYgKChtX2RlY29k
ZWRPZmZzZXQgPiBkYXRhLT5zaXplKCkpIHx8IChkYXRhLT5zaXplKCkgLSBtX2RlY29kZWRPZmZz
ZXQpIDwKLSAgICAgICAgICAgIChtX2RpcmVjdG9yeS5pZENvdW50ICogc2l6ZU9mRGlyRW50cnkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RpcmVj
dG9yeS5pZENvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5IGRp
ckVudHJ5ID0gcmVhZERpcmVjdG9yeUVudHJ5KGRhdGEpOwotICAgICAgICBpZiAoKGkgPT0gMCkg
fHwgaXNCZXR0ZXJFbnRyeShkaXJFbnRyeSkpCi0gICAgICAgICAgICBtX2RpckVudHJ5ID0gZGly
RW50cnk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgaW1hZ2Ugb2Zm
c2V0IGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5Ci0gICAgLy8gZW50cmllcywgYW5k
IHRoYXQgdGhlIG9mZnNldCBpc24ndCBzbyBsYXJnZSB0aGF0IGl0IG92ZXJmbG93cyB3aGVuIHdl
IGFkZAotICAgIC8vIDQgYnl0ZXMgdG8gaXQgKHdoaWNoIHdlIGRvIGluIGRlY29kZUltYWdlKCkg
d2hpbGUgZW5zdXJpbmcgaXQncyBzYWZlIHRvCi0gICAgLy8gZXhhbWluZSB0aGUgZmlyc3QgNCBi
eXRlcyBvZiB0aGUgaW1hZ2UgZGF0YSkuCi0gICAgaWYgKChtX2RpckVudHJ5LmR3SW1hZ2VPZmZz
ZXQgPCBtX2RlY29kZWRPZmZzZXQpIHx8Ci0gICAgICAgICAgICAoKG1fZGlyRW50cnkuZHdJbWFn
ZU9mZnNldCArIDQpIDwgbV9kaXJFbnRyeS5kd0ltYWdlT2Zmc2V0KSkgewotICAgICAgbV9mYWls
ZWQgPSB0cnVlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlYWR5IHRv
IGRlY29kZSB0aGUgaW1hZ2UgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQuCi0gICAgbV9kZWNvZGVk
T2Zmc2V0ID0gbV9oZWFkZXJPZmZzZXQgPSBtX2RpckVudHJ5LmR3SW1hZ2VPZmZzZXQ7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLUlDT0ltYWdlRGVjb2Rlcjo6SWNvbkRpcmVjdG9yeUVudHJ5IElD
T0ltYWdlRGVjb2Rlcjo6cmVhZERpcmVjdG9yeUVudHJ5KAotICAgIFNoYXJlZEJ1ZmZlciogZGF0
YSkKLXsKLSAgICAvLyBSZWFkIGljb24gZGF0YS4KLSAgICBJY29uRGlyZWN0b3J5RW50cnkgZW50
cnk7Ci0gICAgZW50cnkuYldpZHRoID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZGF0YS0+ZGF0YSgp
W21fZGVjb2RlZE9mZnNldF0pOwotICAgIGlmIChlbnRyeS5iV2lkdGggPT0gMCkKLSAgICAgICAg
ZW50cnkuYldpZHRoID0gMjU2OwotICAgIGVudHJ5LmJIZWlnaHQgPSBzdGF0aWNfY2FzdDx1aW50
OF90PihkYXRhLT5kYXRhKClbbV9kZWNvZGVkT2Zmc2V0ICsgMV0pOwotICAgIGlmIChlbnRyeS5i
SGVpZ2h0ID09IDApCi0gICAgICAgIGVudHJ5LmJIZWlnaHQgPSAyNTY7Ci0gICAgZW50cnkud0Jp
dENvdW50ID0gcmVhZFVpbnQxNihkYXRhLCA2KTsKLSAgICBlbnRyeS5kd0ltYWdlT2Zmc2V0ID0g
cmVhZFVpbnQzMihkYXRhLCAxMik7Ci0KLSAgICAvLyBTb21lIGljb25zIGRvbid0IGhhdmUgYSBi
aXQgZGVwdGgsIG9ubHkgYSBjb2xvciBjb3VudC4gIENvbnZlcnQgdGhlCi0gICAgLy8gY29sb3Ig
Y291bnQgdG8gdGhlIG1pbmltdW0gbmVjZXNzYXJ5IGJpdCBkZXB0aC4gIEl0IGRvZXNuJ3QgbWF0
dGVyIGlmCi0gICAgLy8gdGhpcyBpc24ndCBxdWl0ZSB3aGF0IHRoZSBiaXRtYXAgaW5mbyBoZWFk
ZXIgc2F5cyBsYXRlciwgYXMgd2Ugb25seSB1c2UKLSAgICAvLyB0aGlzIHZhbHVlIHRvIGRldGVy
bWluZSB3aGljaCBpY29uIGVudHJ5IGlzIGJlc3QuCi0gICAgaWYgKCFlbnRyeS53Qml0Q291bnQp
IHsKLSAgICAgICAgdWludDhfdCBjb2xvckNvdW50ID0gZGF0YS0+ZGF0YSgpW21fZGVjb2RlZE9m
ZnNldCArIDJdOwotICAgICAgICBpZiAoY29sb3JDb3VudCkgewotICAgICAgICAgICAgZm9yICgt
LWNvbG9yQ291bnQ7IGNvbG9yQ291bnQ7IGNvbG9yQ291bnQgPj49IDEpCi0gICAgICAgICAgICAg
ICAgKytlbnRyeS53Qml0Q291bnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2RlY29kZWRP
ZmZzZXQgKz0gc2l6ZU9mRGlyRW50cnk7Ci0gICAgcmV0dXJuIGVudHJ5OwotfQotCi1ib29sIElD
T0ltYWdlRGVjb2Rlcjo6aXNCZXR0ZXJFbnRyeShjb25zdCBJY29uRGlyZWN0b3J5RW50cnkmIGVu
dHJ5KSBjb25zdAotewotICAgIGNvbnN0IEludFNpemUgZW50cnlTaXplKGVudHJ5LmJXaWR0aCwg
ZW50cnkuYkhlaWdodCk7Ci0gICAgY29uc3QgSW50U2l6ZSBkaXJFbnRyeVNpemUobV9kaXJFbnRy
eS5iV2lkdGgsIG1fZGlyRW50cnkuYkhlaWdodCk7Ci0gICAgY29uc3QgaW50IGVudHJ5QXJlYSA9
IGVudHJ5LmJXaWR0aCAqIGVudHJ5LmJIZWlnaHQ7Ci0gICAgY29uc3QgaW50IGRpckVudHJ5QXJl
YSA9IG1fZGlyRW50cnkuYldpZHRoICogbV9kaXJFbnRyeS5iSGVpZ2h0OwotCi0gICAgaWYgKChl
bnRyeVNpemUgIT0gZGlyRW50cnlTaXplKSAmJiAhbV9wcmVmZXJyZWRJY29uU2l6ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gQW4gaWNvbiBvZiBleGFjdGx5IHRoZSBwcmVmZXJyZWQgc2l6ZSBp
cyBiZXN0LgotICAgICAgICBpZiAoZW50cnlTaXplID09IG1fcHJlZmVycmVkSWNvblNpemUpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGRpckVudHJ5U2l6ZSA9PSBtX3By
ZWZlcnJlZEljb25TaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8v
IFRoZSBpY29uIGNsb3Nlc3QgdG8gdGhlIHByZWZlcnJlZCBhcmVhIHdpdGhvdXQgYmVpbmcgc21h
bGxlciBpcwotICAgICAgICAvLyBiZXR0ZXIuCi0gICAgICAgIGlmIChlbnRyeUFyZWEgIT0gZGly
RW50cnlBcmVhKSB7Ci0gICAgICAgICAgICByZXR1cm4gKGVudHJ5QXJlYSA8IGRpckVudHJ5QXJl
YSkKLSAgICAgICAgICAgICAgICAmJiAoZW50cnlBcmVhID49IChtX3ByZWZlcnJlZEljb25TaXpl
LndpZHRoKCkgKiBtX3ByZWZlcnJlZEljb25TaXplLmhlaWdodCgpKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBMYXJnZXIgaWNvbnMgYXJlIGJldHRlci4KLSAgICBpZiAoZW50cnlBcmVh
ICE9IGRpckVudHJ5QXJlYSkKLSAgICAgICAgcmV0dXJuIChlbnRyeUFyZWEgPiBkaXJFbnRyeUFy
ZWEpOwotCi0gICAgLy8gSGlnaGVyIGJpdC1kZXB0aCBpY29ucyBhcmUgYmV0dGVyLgotICAgIHJl
dHVybiAoZW50cnkud0JpdENvdW50ID4gbV9kaXJFbnRyeS53Qml0Q291bnQpOwotfQotCi12b2lk
IElDT0ltYWdlRGVjb2Rlcjo6ZGVjb2RlUE5HKFNoYXJlZEJ1ZmZlciogZGF0YSkKLXsKLSAgICAv
LyBDb3B5IG91dCBQTkcgZGF0YSB0byBhIHNlcGFyYXRlIHZlY3RvciBhbmQgaW5zdGFudGlhdGUg
UE5HIGRlY29kZXIuCi0gICAgLy8gSXQgd291bGQgYmUgbmljZSB0byBzYXZlIHRoaXMgY29weSwg
aWYgSSBjb3VsZCBmaWd1cmUgb3V0IGhvdyB0byBqdXN0Ci0gICAgLy8gb2Zmc2V0IHRoZSBwZXJj
ZWl2ZWQgc3RhcnQgb2YgfGRhdGF8IGJ5IHxtX2RpckVudHJ5LmR3SW1hZ2VPZmZzZXR8IHdoZW4K
LSAgICAvLyBwYXNzaW5nIGl0IHRvIHNldERhdGEoKS4uLgotICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IHBuZ0RhdGEoCi0gICAgICAgIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCZkYXRhLT5kYXRhKClb
bV9kaXJFbnRyeS5kd0ltYWdlT2Zmc2V0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YS0+c2l6ZSgpIC0gbV9kaXJFbnRyeS5kd0ltYWdlT2Zmc2V0KSk7Ci0gICAgbV9wbmdEZWNv
ZGVyLnNldERhdGEocG5nRGF0YS5nZXQoKSwgdHJ1ZSk7Ci0KLSAgICAvLyBEZWNvZGUgUE5HIGFz
IGEgc2lkZSBlZmZlY3Qgb2YgYXNraW5nIGZvciB0aGUgZnJhbWUuICBTdHJhbmdlbHksIGl0J3MK
LSAgICAvLyBzZWVtaW5nbHkgdW5zYWZlIHRvIGNhbGwgZGVjb2RlKCkgb3IgaXNTaXplQXZhaWxh
YmxlKCkgYmVmb3JlIGNhbGxpbmcKLSAgICAvLyB0aGlzLCBhcyB0aGlzIGlzIHRoZSBvbmx5IGZ1
bmN0aW9uIHRoYXQgZW5sYXJnZXMgdGhlIGZyYW1lYnVmZmVyIHRvCi0gICAgLy8gbm9uemVybyBz
aXplLCBhbmQgYmVmb3JlIHRoaXMgaGFwcGVucyBhbnkgZGVjb2RlZCBpbWFnZSBkYXRhIGlzIHNp
bGVudGx5Ci0gICAgLy8gdGhyb3duIGF3YXkgYW5kIG5ldmVyIGRlY29kZWQgYWdhaW4gKCEpLgot
ICAgIG1fcG5nRGVjb2Rlci5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Ci0gICAgbV9mYWlsZWQgPSBt
X3BuZ0RlY29kZXIuZmFpbGVkKCk7Ci0KLSAgICAvLyBTYW5pdHktY2hlY2sgdGhhdCB0aGUgc2l6
ZSBpcyB3aGF0IHdlIGV4cGVjdGVkLgotICAgIGlmIChpc1NpemVBdmFpbGFibGUoKSAmJiAoKHNp
emUoKS53aWR0aCgpICE9IG1fZGlyRW50cnkuYldpZHRoKSB8fAotICAgICAgICAgICAgKHNpemUo
KS5oZWlnaHQoKSAhPSBtX2RpckVudHJ5LmJIZWlnaHQpKSkKLSAgICAgICAgbV9mYWlsZWQgPSB0
cnVlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
SUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9za2lhL0lDT0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDYzMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JQ09JbWFnZURlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAw
OSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElDT0ltYWdlRGVjb2Rl
cl9oCi0jZGVmaW5lIElDT0ltYWdlRGVjb2Rlcl9oCi0KLSNpbmNsdWRlICJCTVBJbWFnZVJlYWRl
ci5oIgotI2luY2x1ZGUgIlBOR0ltYWdlRGVjb2Rlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIElDTyBhbmQgQ1VSIGltYWdlIGZvcm1h
dHMuCi0gICAgY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEJNUEltYWdlUmVhZGVyIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIFNlZSBjb21tZW50cyBvbiB8bV9wcmVmZXJyZWRJY29u
U2l6ZXwgYmVsb3cuCi0gICAgICAgIElDT0ltYWdlRGVjb2Rlcihjb25zdCBJbnRTaXplJiBwcmVm
ZXJyZWRJY29uU2l6ZSkKLSAgICAgICAgICAgIDogbV9wcmVmZXJyZWRJY29uU2l6ZShwcmVmZXJy
ZWRJY29uU2l6ZSkKLSAgICAgICAgICAgICwgbV9pbWFnZVR5cGUoVW5rbm93bikKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9hbmRNYXNrU3RhdGUgPSBOb3RZZXREZWNvZGVkOwotICAgICAgICB9
Ci0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJl
dHVybiAiaWNvIjsgfQotCi0gICAgICAgIC8vIEJNUEltYWdlUmVhZGVyCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBkZWNvZGVJbWFnZShTaGFyZWRCdWZmZXIqIGRhdGEpOwotICAgICAgICB2aXJ0dWFs
IFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0KLSAgICAg
ICAgLy8gSW1hZ2VEZWNvZGVyCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUo
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIGVudW0gSW1hZ2VUeXBlIHsKLSAgICAgICAgICAgIFVua25vd24sCi0g
ICAgICAgICAgICBCTVAsCi0gICAgICAgICAgICBQTkcsCi0gICAgICAgIH07Ci0KLSAgICAgICAg
Ly8gVGhlc2UgYXJlIGJhc2VkIG9uIHRoZSBXaW5kb3dzIElDT05ESVIgYW5kIElDT05ESVJFTlRS
WSBzdHJ1Y3RzLCBidXQKLSAgICAgICAgLy8gd2l0aCB1bm5lY2Vzc2FyeSBlbnRyaWVzIHJlbW92
ZWQuCi0gICAgICAgIHN0cnVjdCBJY29uRGlyZWN0b3J5IHsKLSAgICAgICAgICAgIHVpbnQxNl90
IGlkQ291bnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIHN0cnVjdCBJY29uRGlyZWN0b3J5RW50cnkg
ewotICAgICAgICAgICAgdWludDE2X3QgYldpZHRoOyAgIC8vIDE2IGJpdHMgc28gd2UgY2FuIHJl
cHJlc2VudCAyNTYgYXMgMjU2LCBub3QgMAotICAgICAgICAgICAgdWludDE2X3QgYkhlaWdodDsg
IC8vICIKLSAgICAgICAgICAgIHVpbnQxNl90IHdCaXRDb3VudDsKLSAgICAgICAgICAgIHVpbnQz
Ml90IGR3SW1hZ2VPZmZzZXQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2VzIHRo
ZSBJQ09ORElSIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEuICBSZXR1cm5zIHRydWUgaWYg
dGhlCi0gICAgICAgIC8vIGRpcmVjdG9yeSBjb3VsZCBiZSBkZWNvZGVkLgotICAgICAgICBib29s
IHByb2Nlc3NEaXJlY3RvcnkoU2hhcmVkQnVmZmVyKik7Ci0KLSAgICAgICAgLy8gUHJvY2Vzc2Vz
IHRoZSBJQ09ORElSRU5UUlkgcmVjb3JkcyBhZnRlciB0aGUgZGlyZWN0b3J5LiAgS2VlcHMgdGhl
Ci0gICAgICAgIC8vICJiZXN0IiBlbnRyeSBhcyB0aGUgb25lIHdlJ2xsIGRlY29kZS4gIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZW50cmllcyBjb3VsZAotICAgICAgICAvLyBiZSBkZWNvZGVkLgotICAg
ICAgICBib29sIHByb2Nlc3NEaXJlY3RvcnlFbnRyaWVzKFNoYXJlZEJ1ZmZlciopOwotCi0gICAg
ICAgIC8vIFJlYWRzIGFuZCByZXR1cm5zIGEgZGlyZWN0b3J5IGVudHJ5IGZyb20gdGhlIGN1cnJl
bnQgb2Zmc2V0IGludG8gfGRhdGF8LgotICAgICAgICBJY29uRGlyZWN0b3J5RW50cnkgcmVhZERp
cmVjdG9yeUVudHJ5KFNoYXJlZEJ1ZmZlciopOwotCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB8ZW50cnl8IGlzIGEgcHJlZmVyYWJsZSBpY29uIGVudHJ5IHRvIG1fZGlyRW50cnkuCi0gICAg
ICAgIC8vIExhcmdlciBzaXplcywgb3IgZ3JlYXRlciBiaXRkZXB0aHMgYXQgdGhlIHNhbWUgc2l6
ZSwgYXJlIHByZWZlcmFibGUuCi0gICAgICAgIGJvb2wgaXNCZXR0ZXJFbnRyeShjb25zdCBJY29u
RGlyZWN0b3J5RW50cnkmKSBjb25zdDsKLQotICAgICAgICAvLyBDYWxsZWQgd2hlbiB0aGUgaW1h
Z2UgdG8gYmUgZGVjb2RlZCBpcyBhIFBORyByYXRoZXIgdGhhbiBhIEJNUC4KLSAgICAgICAgLy8g
SW5zdGFudGlhdGVzIGEgUE5HSW1hZ2VEZWNvZGVyLCBkZWNvZGVzIHRoZSBpbWFnZSwgYW5kIGNv
cGllcyB0aGUKLSAgICAgICAgLy8gcmVzdWx0cyBsb2NhbGx5LgotICAgICAgICB2b2lkIGRlY29k
ZVBORyhTaGFyZWRCdWZmZXIqKTsKLQotICAgICAgICAvLyBUaGUgZW50cnkgc2l6ZSB3ZSBzaG91
bGQgcHJlZmVyLiAgSWYgdGhpcyBpcyBlbXB0eSwgd2UgY2hvb3NlIHRoZQotICAgICAgICAvLyBs
YXJnZXN0IGF2YWlsYWJsZSBzaXplLiAgSWYgbm8gZW50cmllcyBvZiB0aGUgZGVzaXJlZCBzaXpl
IGFyZQotICAgICAgICAvLyBhdmFpbGFibGUsIHdlIHBpY2sgdGhlIG5leHQgbGFyZ2VyIHNpemUu
Ci0gICAgICAgIEludFNpemUgbV9wcmVmZXJyZWRJY29uU2l6ZTsKLQotICAgICAgICAvLyBUaGUg
aGVhZGVycyBmb3IgdGhlIElDTy4KLSAgICAgICAgSWNvbkRpcmVjdG9yeSBtX2RpcmVjdG9yeTsK
LSAgICAgICAgSWNvbkRpcmVjdG9yeUVudHJ5IG1fZGlyRW50cnk7Ci0KLSAgICAgICAgLy8gVGhl
IFBORyBkZWNvZGVyLCBpZiB3ZSBuZWVkIHRvIHVzZSBvbmUuCi0gICAgICAgIFBOR0ltYWdlRGVj
b2RlciBtX3BuZ0RlY29kZXI7Ci0KLSAgICAgICAgLy8gV2hhdCBraW5kIG9mIGltYWdlIGRhdGEg
aXMgc3RvcmVkIGF0IHRoZSBlbnRyeSB3ZSdyZSBkZWNvZGluZy4KLSAgICAgICAgSW1hZ2VUeXBl
IG1faW1hZ2VUeXBlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSlBFR0ltYWdlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDYzMSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSwgSW5jLgot
ICoKLSAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtNiBtb3ppbGxhLm9yZwotICoK
LSAqIE90aGVyIGNvbnRyaWJ1dG9yczoKLSAqICAgU3R1YXJ0IFBhcm1lbnRlciA8c3R1YXJ0QG1v
emlsbGEuY29tPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNv
bnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKLSAqIG9mIGVp
dGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKLSAq
IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZz
Zi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKLSAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRo
ZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKLSAqIGFwcGxpY2FibGUgaW5z
dGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCi0g
KiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhv
c2UgdHdvCi0gKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93
IG90aGVycyB0byB1c2UgeW91cgotICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExH
UEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKLSAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMg
YWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCi0gKiBvdGhlciBwcm92
aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJl
LgotICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBp
ZW50IG1heSB1c2UgeW91cgotICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRo
ZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkpQRUdJbWFnZURlY29kZXIuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPiAgLy8gTmVlZGVkIGJ5IGpwZWdsaWIuaCBmb3IgRklMRS4KLQotZXh0ZXJu
ICJDIiB7Ci0jaW5jbHVkZSAianBlZ2xpYi5oIgotfQotCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IGRlY29kZXJfZXJyb3JfbWdyIHsKLSAgICBz
dHJ1Y3QganBlZ19lcnJvcl9tZ3IgcHViOyAgLyogInB1YmxpYyIgZmllbGRzIGZvciBJSkcgbGli
cmFyeSovCi0gICAgam1wX2J1ZiBzZXRqbXBfYnVmZmVyOyAgICAgIC8qIEZvciBoYW5kbGluZyBj
YXRhc3Ryb3BpYyBlcnJvcnMgKi8KLX07Ci0KLWVudW0ganN0YXRlIHsKLSAgICBKUEVHX0hFQURF
UiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWRpbmcgSkZJRiBoZWFkZXJzICovCi0g
ICAgSlBFR19TVEFSVF9ERUNPTVBSRVNTLAotICAgIEpQRUdfREVDT01QUkVTU19QUk9HUkVTU0lW
RSwgICAgICAgICAgLyogT3V0cHV0IHByb2dyZXNzaXZlIHBpeGVscyAqLwotICAgIEpQRUdfREVD
T01QUkVTU19TRVFVRU5USUFMLCAgICAgICAgICAgLyogT3V0cHV0IHNlcXVlbnRpYWwgcGl4ZWxz
ICovCi0gICAgSlBFR19ET05FLAotICAgIEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSLCAgICAg
ICAgICAvKiBTb21lIGltYWdlIGZpbGVzIGhhdmUgYSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBub24tSlBFRyB0cmFpbGVyICovCi0gICAgSlBFR19FUlJP
UiAgICAKLX07Ci0KLXZvaWQgaW5pdF9zb3VyY2Uoal9kZWNvbXByZXNzX3B0ciBqZCk7Ci1ib29s
ZWFuIGZpbGxfaW5wdXRfYnVmZmVyKGpfZGVjb21wcmVzc19wdHIgamQpOwotdm9pZCBza2lwX2lu
cHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwgbG9uZyBudW1fYnl0ZXMpOwotdm9pZCB0ZXJt
X3NvdXJjZShqX2RlY29tcHJlc3NfcHRyIGpkKTsKLXZvaWQgZXJyb3JfZXhpdChqX2NvbW1vbl9w
dHIgY2luZm8pOwotCi0vKgotICogIEltcGxlbWVudGF0aW9uIG9mIGEgSlBFRyBzcmMgb2JqZWN0
IHRoYXQgdW5kZXJzdGFuZHMgb3VyIHN0YXRlIG1hY2hpbmUKLSAqLwotc3RydWN0IGRlY29kZXJf
c291cmNlX21nciB7Ci0gIC8qIHB1YmxpYyBmaWVsZHM7IG11c3QgYmUgZmlyc3QgaW4gdGhpcyBz
dHJ1Y3QhICovCi0gIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgcHViOwotCi0gIEpQRUdJbWFnZVJl
YWRlciAqZGVjb2RlcjsKLX07Ci0KLWNsYXNzIEpQRUdJbWFnZVJlYWRlcgotewotcHVibGljOgot
ICAgIEpQRUdJbWFnZVJlYWRlcihKUEVHSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKQotICAgICAgICA6
IG1fZGVjb2RlcihkZWNvZGVyKQotICAgICAgICAsIG1fYnVmZmVyTGVuZ3RoKDApCi0gICAgICAg
ICwgbV9ieXRlc1RvU2tpcCgwKQotICAgICAgICAsIG1fc3RhdGUoSlBFR19IRUFERVIpCi0gICAg
ICAgICwgbV9zYW1wbGVzKDApCi0gICAgewotICAgICAgICBtZW1zZXQoJm1faW5mbywgMCwgc2l6
ZW9mKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKTsKLSAKLSAgICAgICAgLyogV2Ugc2V0IHVwIHRo
ZSBub3JtYWwgSlBFRyBlcnJvciByb3V0aW5lcywgdGhlbiBvdmVycmlkZSBlcnJvcl9leGl0LiAq
LwotICAgICAgICBtX2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJm1fZXJyLnB1Yik7Ci0gICAg
ICAgIG1fZXJyLnB1Yi5lcnJvcl9leGl0ID0gZXJyb3JfZXhpdDsKLQotICAgICAgICAvKiBBbGxv
Y2F0ZSBhbmQgaW5pdGlhbGl6ZSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0ICovCi0gICAgICAg
IGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJm1faW5mbyk7Ci0gIAotICAgICAgICBkZWNvZGVyX3Nv
dXJjZV9tZ3IqIHNyYyA9IDA7Ci0gICAgICAgIGlmICghbV9pbmZvLnNyYykgewotICAgICAgICAg
ICAgc3JjID0gKGRlY29kZXJfc291cmNlX21nciopZmFzdENhbGxvYyhzaXplb2YoZGVjb2Rlcl9z
b3VyY2VfbWdyKSwgMSk7Ci0gICAgICAgICAgICBpZiAoIXNyYykgewotICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBKUEVHX0VSUk9SOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1faW5mby5zcmMgPSAoanBlZ19zb3VyY2VfbWdy
KilzcmM7Ci0KLSAgICAgICAgLyogU2V0IHVwIGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KLSAgICAg
ICAgc3JjLT5wdWIuaW5pdF9zb3VyY2UgPSBpbml0X3NvdXJjZTsKLSAgICAgICAgc3JjLT5wdWIu
ZmlsbF9pbnB1dF9idWZmZXIgPSBmaWxsX2lucHV0X2J1ZmZlcjsKLSAgICAgICAgc3JjLT5wdWIu
c2tpcF9pbnB1dF9kYXRhID0gc2tpcF9pbnB1dF9kYXRhOwotICAgICAgICBzcmMtPnB1Yi5yZXN5
bmNfdG9fcmVzdGFydCA9IGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQ7Ci0gICAgICAgIHNyYy0+cHVi
LnRlcm1fc291cmNlID0gdGVybV9zb3VyY2U7Ci0gICAgICAgIHNyYy0+ZGVjb2RlciA9IHRoaXM7
Ci0gICAgfQotCi0gICAgfkpQRUdJbWFnZVJlYWRlcigpCi0gICAgewotICAgICAgICBjbG9zZSgp
OwotICAgIH0KLQotICAgIHZvaWQgY2xvc2UoKSB7Ci0gICAgICAgIGRlY29kZXJfc291cmNlX21n
ciogc3JjID0gKGRlY29kZXJfc291cmNlX21nciopbV9pbmZvLnNyYzsKLSAgICAgICAgaWYgKHNy
YykKLSAgICAgICAgICAgIGZhc3RGcmVlKHNyYyk7Ci0gICAgICAgIG1faW5mby5zcmMgPSAwOwot
Ci0gICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZtX2luZm8pOwotICAgIH0KLQotICAg
IHZvaWQgc2tpcEJ5dGVzKGxvbmcgbnVtX2J5dGVzKSB7Ci0gICAgICAgIGRlY29kZXJfc291cmNl
X21nciogc3JjID0gKGRlY29kZXJfc291cmNlX21nciopbV9pbmZvLnNyYzsKLSAgICAgICAgbG9u
ZyBieXRlc1RvU2tpcCA9IHN0ZDo6bWluKG51bV9ieXRlcywgKGxvbmcpc3JjLT5wdWIuYnl0ZXNf
aW5fYnVmZmVyKTsKLSAgICAgICAgc3JjLT5wdWIuYnl0ZXNfaW5fYnVmZmVyIC09IChzaXplX3Qp
Ynl0ZXNUb1NraXA7Ci0gICAgICAgIHNyYy0+cHViLm5leHRfaW5wdXRfYnl0ZSArPSBieXRlc1Rv
U2tpcDsKLSAgICAKLSAgICAgICAgaWYgKG51bV9ieXRlcyA+IGJ5dGVzVG9Ta2lwKQotICAgICAg
ICAgICAgbV9ieXRlc1RvU2tpcCA9IChzaXplX3QpKG51bV9ieXRlcyAtIGJ5dGVzVG9Ta2lwKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ieXRlc1RvU2tpcCA9IDA7Ci0gICAgfQotCi0g
ICAgYm9vbCBkZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5KSB7
Ci0gICAgICAgIG1fZGVjb2RpbmdTaXplT25seSA9IHNpemVPbmx5OwotICAgICAgICAKLSAgICAg
ICAgdW5zaWduZWQgbmV3Qnl0ZUNvdW50ID0gZGF0YS5zaXplKCkgLSBtX2J1ZmZlckxlbmd0aDsK
LSAgICAgICAgdW5zaWduZWQgcmVhZE9mZnNldCA9IG1fYnVmZmVyTGVuZ3RoIC0gbV9pbmZvLnNy
Yy0+Ynl0ZXNfaW5fYnVmZmVyOwotCi0gICAgICAgIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZl
ciArPSBuZXdCeXRlQ291bnQ7Ci0gICAgICAgIG1faW5mby5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9
IChKT0NURVQqKShkYXRhLmRhdGEoKSkgKyByZWFkT2Zmc2V0OwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgd2Ugc3RpbGwgaGF2ZSBieXRlcyB0byBza2lwLCB0cnkgdG8gc2tpcCB0aG9zZSBub3cu
Ci0gICAgICAgIGlmIChtX2J5dGVzVG9Ta2lwKQotICAgICAgICAgICAgc2tpcEJ5dGVzKG1fYnl0
ZXNUb1NraXApOwotCi0gICAgICAgIG1fYnVmZmVyTGVuZ3RoID0gZGF0YS5zaXplKCk7Ci0gICAg
ICAgIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3aXNl
IGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4KLSAgICAgICAgaWYgKHNldGptcChtX2Vyci5zZXRqbXBf
YnVmZmVyKSkgewotICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJ
TEVSOwotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBK
UEVHX0hFQURFUjoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBSZWFkIGZpbGUg
cGFyYW1ldGVycyB3aXRoIGpwZWdfcmVhZF9oZWFkZXIoKSAqLwotICAgICAgICAgICAgICAgIGlm
IChqcGVnX3JlYWRfaGVhZGVyKCZtX2luZm8sIHRydWUpID09IEpQRUdfU1VTUEVOREVEKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNpb24gKi8KLQotICAg
ICAgICAgICAgICAgIC8qIGxldCBsaWJqcGVnIHRha2UgY2FyZSBvZiBncmF5LT5SR0IgYW5kIFlD
YkNyLT5SR0IgY29udmVyc2lvbnMgKi8KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1faW5mby5q
cGVnX2NvbG9yX3NwYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkNTX0dSQVlTQ0FM
RToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQ1NfUkdCOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIEpDU19ZQ2JDcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5mby5vdXRfY29s
b3Jfc3BhY2UgPSBKQ1NfUkdCOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSkNTX0NNWUs6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SkNTX1lDQ0s6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvKgotICAg
ICAgICAgICAgICAgICAqIERvbid0IGFsbG9jYXRlIGEgZ2lhbnQgYW5kIHN1cGVyZmx1b3VzIG1l
bW9yeSBidWZmZXIKLSAgICAgICAgICAgICAgICAgKiB3aGVuIHRoZSBpbWFnZSBpcyBhIHNlcXVl
bnRpYWwgSlBFRy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtX2luZm8u
YnVmZmVyZWRfaW1hZ2UgPSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucygmbV9pbmZvKTsKLQotICAg
ICAgICAgICAgICAgIC8qIFVzZWQgdG8gc2V0IHVwIGltYWdlIHNpemUgc28gYXJyYXlzIGNhbiBi
ZSBhbGxvY2F0ZWQgKi8KLSAgICAgICAgICAgICAgICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lv
bnMoJm1faW5mbyk7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIE1h
a2UgYSBvbmUtcm93LWhpZ2ggc2FtcGxlIGFycmF5IHRoYXQgd2lsbCBnbyBhd2F5Ci0gICAgICAg
ICAgICAgICAgICogd2hlbiBkb25lIHdpdGggaW1hZ2UuIEFsd2F5cyBtYWtlIGl0IGJpZyBlbm91
Z2ggdG8KLSAgICAgICAgICAgICAgICAgKiBob2xkIGFuIFJHQiByb3cuICBTaW5jZSB0aGlzIHVz
ZXMgdGhlIElKRyBtZW1vcnkKLSAgICAgICAgICAgICAgICAgKiBtYW5hZ2VyLCBpdCBtdXN0IGJl
IGFsbG9jYXRlZCBiZWZvcmUgdGhlIGNhbGwgdG8KLSAgICAgICAgICAgICAgICAgKiBqcGVnX3N0
YXJ0X2NvbXByZXNzKCkuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaW50
IHJvd19zdHJpZGUgPSBtX2luZm8ub3V0cHV0X3dpZHRoICogNDsgLy8gUkdCQSBidWZmZXIKLQot
Ci0gICAgICAgICAgICAgICAgbV9zYW1wbGVzID0gKCptX2luZm8ubWVtLT5hbGxvY19zYXJyYXkp
KChqX2NvbW1vbl9wdHIpICZtX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSlBPT0xfSU1BR0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm93X3N0cmlkZSwgMSk7Ci0KLSAgICAgICAgICAgICAgICBtX3N0YXRlID0g
SlBFR19TVEFSVF9ERUNPTVBSRVNTOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuIGZpbGwg
aW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCi0gICAgICAgICAg
ICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8u
aW1hZ2VfaGVpZ2h0KSkgewotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19FUlJP
UjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChtX2RlY29kaW5nU2l6ZU9ubHkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY2FuIHN0b3AgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gUmVk
dWNlIG91ciBidWZmZXIgbGVuZ3RoIGFuZCBhdmFpbGFibGUgZGF0YS4KLSAgICAgICAgICAgICAg
ICAgICAgbV9idWZmZXJMZW5ndGggLT0gbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOwotICAg
ICAgICAgICAgICAgICAgICBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgSlBFR19TVEFSVF9ERUNPTVBSRVNTOgotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8qIFNldCBwYXJhbWV0ZXJzIGZvciBkZWNvbXByZXNzaW9u
ICovCi0gICAgICAgICAgICAgICAgLyogRklYTUUgLS0gU2hvdWxkIHJlc2V0IGRjdF9tZXRob2Qg
YW5kIGRpdGhlciBtb2RlCi0gICAgICAgICAgICAgICAgICogZm9yIGZpbmFsIHBhc3Mgb2YgcHJv
Z3Jlc3NpdmUgSlBFRwotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG1faW5m
by5kY3RfbWV0aG9kID0gIEpEQ1RfSVNMT1c7Ci0gICAgICAgICAgICAgICAgbV9pbmZvLmRpdGhl
cl9tb2RlID0gSkRJVEhFUl9GUzsKLSAgICAgICAgICAgICAgICBtX2luZm8uZG9fZmFuY3lfdXBz
YW1wbGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgbV9pbmZvLmVuYWJsZV8ycGFzc19xdWFu
dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIG1faW5mby5kb19ibG9ja19zbW9vdGhpbmcgPSB0
cnVlOwotCi0gICAgICAgICAgICAgICAgLyogU3RhcnQgZGVjb21wcmVzc29yICovCi0gICAgICAg
ICAgICAgICAgaWYgKCFqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJm1faW5mbykpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwotCi0gICAgICAgICAg
ICAgICAgLyogSWYgdGhpcyBpcyBhIHByb2dyZXNzaXZlIEpQRUcgLi4uICovCi0gICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IChtX2luZm8uYnVmZmVyZWRfaW1hZ2UpID8gSlBFR19ERUNPTVBSRVNT
X1BST0dSRVNTSVZFIDogSlBFR19ERUNPTVBSRVNTX1NFUVVFTlRJQUw7Ci0gICAgICAgICAgICB9
Ci0gICAgCi0gICAgICAgICAgICBjYXNlIEpQRUdfREVDT01QUkVTU19TRVFVRU5USUFMOgotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlID09IEpQRUdfREVDT01QUkVT
U19TRVFVRU5USUFMKSB7Ci0gICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2RlY29k
ZXItPm91dHB1dFNjYW5saW5lcygpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7IC8qIEkvTyBzdXNwZW5zaW9uICovCi0gICAgICAKLSAgICAgICAgICAgICAgICAgICAgLyog
SWYgd2UndmUgY29tcGxldGVkIGltYWdlIG91dHB1dCAuLi4gKi8KLSAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0KG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gbV9pbmZvLm91dHB1dF9oZWlnaHQp
OwotICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19ET05FOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBKUEVHX0RFQ09NUFJFU1Nf
UFJPR1JFU1NJVkU6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUg
PT0gSlBFR19ERUNPTVBSRVNTX1BST0dSRVNTSVZFKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBzdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1cyA9IGpwZWdfY29uc3VtZV9pbnB1dCgmbV9pbmZvKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSB3aGlsZSAoKHN0YXR1cyAhPSBKUEVHX1NVU1BFTkRFRCkgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHN0YXR1cyAhPSBKUEVHX1JFQUNIRURfRU9JKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
aW5mby5vdXRwdXRfc2NhbmxpbmUgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzY2FuID0gbV9pbmZvLmlucHV0X3NjYW5fbnVtYmVyOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyogaWYgd2UgaGF2ZW4ndCBkaXNwbGF5ZWQgYW55dGhpbmcgeWV0IChvdXRw
dXRfc2Nhbl9udW1iZXI9PTApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdlIGhh
dmUgZW5vdWdoIGRhdGEgZm9yIGEgY29tcGxldGUgc2NhbiwgZm9yY2Ugb3V0cHV0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxhc3QgZnVsbCBzY2FuICovCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKChtX2luZm8ub3V0cHV0X3NjYW5fbnVtYmVyID09IDApICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY2FuID4gMSkgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXR1cyAhPSBKUEVHX1JFQUNIRURfRU9JKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nhbi0tOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFqcGVnX3N0YXJ0X291dHB1dCgmbV9pbmZvLCBzY2FuKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8qIEkvTyBzdXNwZW5zaW9u
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChtX2luZm8ub3V0cHV0X3NjYW5saW5lID09IDB4ZmZmZmZmKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5mby5vdXRwdXRfc2NhbmxpbmUgPSAwOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+b3V0cHV0U2NhbmxpbmVzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWFuYWdlIHRvIHJlYWQgYW55
IGxpbmVzIC0gZmxhZyBzbyB3ZSBkb24ndCBjYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpwZWdfc3RhcnRfb3V0cHV0KCkgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIHNj
YW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91dHB1dF9zY2Fu
bGluZSA9IDB4ZmZmZmZmOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OyAvKiBJL08gc3VzcGVuc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmZvLm91dHB1dF9zY2FubGluZSA9PSBtX2luZm8u
b3V0cHV0X2hlaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghanBlZ19m
aW5pc2hfb3V0cHV0KCZtX2luZm8pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLyogSS9PIHN1c3BlbnNpb24gKi8KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChqcGVnX2lucHV0X2NvbXBsZXRlKCZtX2luZm8pICYmCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtX2luZm8uaW5wdXRfc2Nhbl9udW1iZXIgPT0gbV9pbmZvLm91
dHB1dF9zY2FuX251bWJlcikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmZvLm91dHB1dF9zY2FubGluZSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19ET05FOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBKUEVHX0RPTkU6Ci0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLyogRmluaXNoIGRlY29tcHJlc3Npb24gKi8KLSAgICAg
ICAgICAgICAgICBpZiAoIWpwZWdfZmluaXNoX2RlY29tcHJlc3MoJm1faW5mbykpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvKiBJL08gc3VzcGVuc2lvbiAqLwotCi0gICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19UUkFJTEVSOwotCi0gICAgICAg
ICAgICAgICAgLyogd2UncmUgZG9uZSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEpQRUdfU0lOS19OT05fSlBF
R19UUkFJTEVSOgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIEpQ
RUdfRVJST1I6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvKCkg
eyByZXR1cm4gJm1faW5mbzsgfQotICAgIEpTQU1QQVJSQVkgc2FtcGxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fc2FtcGxlczsgfQotICAgIEpQRUdJbWFnZURlY29kZXIqIGRlY29kZXIoKSB7IHJldHVy
biBtX2RlY29kZXI7IH0KLQotcHJpdmF0ZToKLSAgICBKUEVHSW1hZ2VEZWNvZGVyKiBtX2RlY29k
ZXI7Ci0gICAgdW5zaWduZWQgbV9idWZmZXJMZW5ndGg7Ci0gICAgaW50IG1fYnl0ZXNUb1NraXA7
Ci0gICAgYm9vbCBtX2RlY29kaW5nU2l6ZU9ubHk7Ci0gICAgYm9vbCBtX2luaXRpYWxpemVkOwot
Ci0gICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCBtX2luZm87Ci0gICAgZGVjb2Rlcl9lcnJvcl9t
Z3IgbV9lcnI7Ci0gICAganN0YXRlIG1fc3RhdGU7Ci0KLSAgICBKU0FNUEFSUkFZIG1fc2FtcGxl
czsKLX07Ci0KLS8qIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlcnJvciBtZXRob2QgaW4gdGhlIElK
RyBKUEVHIGRlY29kZXIgY29kZS4gKi8KLXZvaWQgZXJyb3JfZXhpdChqX2NvbW1vbl9wdHIgY2lu
Zm8pCi17Ci0gICAgLyogUmV0dXJuIGNvbnRyb2wgdG8gdGhlIHNldGptcCBwb2ludC4gKi8KLSAg
ICBkZWNvZGVyX2Vycm9yX21nciAqZXJyID0gKGRlY29kZXJfZXJyb3JfbWdyICopIGNpbmZvLT5l
cnI7Ci0gICAgbG9uZ2ptcChlcnItPnNldGptcF9idWZmZXIsIC0xKTsKLX0KLQotdm9pZCBpbml0
X3NvdXJjZShqX2RlY29tcHJlc3NfcHRyIGpkKQotewotfQotCi12b2lkIHNraXBfaW5wdXRfZGF0
YShqX2RlY29tcHJlc3NfcHRyIGpkLCBsb25nIG51bV9ieXRlcykKLXsKLSAgICBkZWNvZGVyX3Nv
dXJjZV9tZ3IgKnNyYyA9IChkZWNvZGVyX3NvdXJjZV9tZ3IgKilqZC0+c3JjOwotICAgIHNyYy0+
ZGVjb2Rlci0+c2tpcEJ5dGVzKG51bV9ieXRlcyk7Ci19Ci0KLWJvb2xlYW4gZmlsbF9pbnB1dF9i
dWZmZXIoal9kZWNvbXByZXNzX3B0ciBqZCkKLXsKLSAgICAvLyBPdXIgZGVjb2RlIHN0ZXAgYWx3
YXlzIHNldHMgdGhpbmdzIHVwIHByb3Blcmx5LCBzbyBpZiB0aGlzIG1ldGhvZCBpcyBldmVyCi0g
ICAgLy8gY2FsbGVkLCB0aGVuIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4gIEEg
cmV0dXJuIHZhbHVlIG9mIEZBTFNFIGluZGljYXRlcwotICAgIC8vIHRoYXQgd2UgaGF2ZSBubyBk
YXRhIHRvIHN1cHBseSB5ZXQuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHRlcm1fc291
cmNlIChqX2RlY29tcHJlc3NfcHRyIGpkKQotewotICAgIGRlY29kZXJfc291cmNlX21nciAqc3Jj
ID0gKGRlY29kZXJfc291cmNlX21nciAqKWpkLT5zcmM7Ci0gICAgc3JjLT5kZWNvZGVyLT5kZWNv
ZGVyKCktPmpwZWdDb21wbGV0ZSgpOwotfQotCi1KUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VE
ZWNvZGVyKCkKLTogbV9yZWFkZXIoMCkKLXt9Ci0KLUpQRUdJbWFnZURlY29kZXI6On5KUEVHSW1h
Z2VEZWNvZGVyKCkKLXsKLSAgICBkZWxldGUgbV9yZWFkZXI7Ci19Ci0KLS8vIFRha2UgdGhlIGRh
dGEgYW5kIHN0b3JlIGl0Lgotdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKG1fZmFpbGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWNoZSBvdXIgbmV3IGRhdGEuCi0gICAgSW1hZ2VE
ZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICAvLyBDcmVhdGUg
dGhlIEpQRUcgcmVhZGVyLgotICAgIGlmICghbV9yZWFkZXIgJiYgIW1fZmFpbGVkKQotICAgICAg
ICBtX3JlYWRlciA9IG5ldyBKUEVHSW1hZ2VSZWFkZXIodGhpcyk7Ci19Ci0KLS8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LgotYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAotewotICAgIC8vIElmIHdl
IGhhdmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgSlBFRyByZWFkZXIg
bm93LgotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBtX3JlYWRl
cikgewotICAgICAgICBpZiAobV9mYWlsZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgLy8gVGhlIGRlY29kZXIgd2lsbCBnbyBhaGVhZCBhbmQgYWdncmVzc2l2ZWx5IGNv
bnN1bWUgZXZlcnl0aGluZyB1cCB1bnRpbCB0aGUKLSAgICAgICAgLy8gc2l6ZSBpcyBlbmNvdW50
ZXJlZC4KLSAgICAgICAgZGVjb2RlKHRydWUpOwotICAgIH0KLQotICAgIHJldHVybiBJbWFnZURl
Y29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwotfQotCi1SR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURl
Y29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0
eSgpKQotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotCi0gICAgUkdCQTMy
QnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoZnJhbWUuc3Rh
dHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQotICAgICAg
ICAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KLSAgICAgICAgZGVjb2RlKCk7Ci0gICAgcmV0dXJuICZm
cmFtZTsKLX0KLQotLy8gRmVlZCBkYXRhIHRvIHRoZSBKUEVHIHJlYWRlci4KLXZvaWQgSlBFR0lt
YWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9ubHkpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZmFp
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZhaWxlZCA9ICFtX3JlYWRlci0+ZGVjb2Rl
KG1fZGF0YS0+YnVmZmVyKCksIHNpemVPbmx5KTsKLQotICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1f
ZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1
cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKLSAgICAgICAgZGVsZXRlIG1f
cmVhZGVyOwotICAgICAgICBtX3JlYWRlciA9IDA7Ci0gICAgfQotfQotCi1ib29sIEpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCi17Ci0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNo
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEluaXRpYWxpemUg
dGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53
aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmZmVyLnNl
dFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGJ1ZmZlci5zZXRI
YXNBbHBoYShmYWxzZSk7Ci0KLSAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlz
IGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgc2l6ZSgpKSk7Ci0gICAgfQotCi0gICAganBlZ19kZWNvbXByZXNzX3N0cnVj
dCogaW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7Ci0gICAgSlNBTVBBUlJBWSBzYW1wbGVzID0gbV9y
ZWFkZXItPnNhbXBsZXMoKTsKLQotICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBp
bmZvLT5vdXRwdXRfaGVpZ2h0KSB7Ci0gICAgICAgIC8qIFJlcXVlc3Qgb25lIHNjYW5saW5lLiAg
UmV0dXJucyAwIG9yIDEgc2NhbmxpbmVzLiAqLwotICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5s
aW5lcyhpbmZvLCBzYW1wbGVzLCAxKSAhPSAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBKU0FNUExFICpqMSA9IHNhbXBsZXNbMF07Ci0gICAgICAgIGZvciAodW5zaWduZWQg
eCA9IDA7IHggPCBpbmZvLT5vdXRwdXRfd2lkdGg7ICsreCkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgciA9ICpqMSsrOwotICAgICAgICAgICAgdW5zaWduZWQgZyA9ICpqMSsrOwotICAgICAgICAg
ICAgdW5zaWduZWQgYiA9ICpqMSsrOwotICAgICAgICAgICAgLy8gcmVhZF9zY2FubGluZXMgaGFz
IGluY3JlYXNlZCB0aGUgc2NhbmxpbmUgY291bnRlciwgc28gd2UKLSAgICAgICAgICAgIC8vIGFj
dHVhbGx5IG1lYW4gdGhlIHByZXZpb3VzIG9uZS4KLSAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JB
KHgsIGluZm8tPm91dHB1dF9zY2FubGluZSAtIDEsIHIsIGcsIGIsIDB4RkYpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6
anBlZ0NvbXBsZXRlKCkKLXsKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSGFuZCBiYWNrIGFuIGFwcHJvcHJpYXRlbHkgc2l6
ZWQgYnVmZmVyLCBldmVuIGlmIHRoZSBpbWFnZSBlbmRlZCB1cCBiZWluZyBlbXB0eS4KLSAgICBS
R0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBidWZmZXIu
c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7Ci19Ci0KLX0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0pQRUdJbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gNDQ2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJ
bmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgSlBFR0ltYWdlRGVjb2Rlcl9oCi0jZGVmaW5lIEpQRUdJbWFn
ZURlY29kZXJfaAotCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGNsYXNzIEpQRUdJbWFnZVJlYWRlcjsKLQotICAgIC8vIFRoaXMgY2xhc3Mg
ZGVjb2RlcyB0aGUgSlBFRyBpbWFnZSBmb3JtYXQuCi0gICAgY2xhc3MgSlBFR0ltYWdlRGVjb2Rl
ciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgSlBFR0ltYWdl
RGVjb2RlcigpOwotICAgICAgICB+SlBFR0ltYWdlRGVjb2RlcigpOwotCi0gICAgICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImpwZyI7IH0KLQot
ICAgICAgICAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLSAgICAgICAgdmlydHVhbCB2
b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0K
LSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4g
ZGVjb2RlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25z
dDsKLQotICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBz
aXplT25seSA9IGZhbHNlKSBjb25zdDsKLQotICAgICAgICBKUEVHSW1hZ2VSZWFkZXIqIHJlYWRl
cigpIHsgcmV0dXJuIG1fcmVhZGVyOyB9Ci0KLSAgICAgICAgYm9vbCBvdXRwdXRTY2FubGluZXMo
KTsKLSAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IGZyaWVuZCBjbGFzcyBKUEVHSW1hZ2VSZWFkZXI7Ci0gICAgICAgIG11dGFibGUgSlBFR0ltYWdl
UmVhZGVyKiBtX3JlYWRlcjsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1BOR0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQ0NjMwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUsIEluYy4K
LSAqCi0gKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAyMDAxIG1vemlsbGEub3JnCi0gKgot
ICogT3RoZXIgY29udHJpYnV0b3JzOgotICogICBTdHVhcnQgUGFybWVudGVyIDxzdHVhcnRAbW96
aWxsYS5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29u
dGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgZWl0
aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAotICog
aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNm
Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAotICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQotICogYXBwbGljYWJsZSBpbnN0
ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKLSAq
IHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9z
ZSB0d28KLSAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cg
b3RoZXJzIHRvIHVzZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQ
TCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQotICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBh
Ym92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKLSAqIG90aGVyIHByb3Zp
c2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUu
Ci0gKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGll
bnQgbWF5IHVzZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhl
IExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUE5HSW1hZ2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAicG5nLmgiCi0jaW5jbHVkZSAi
YXNzZXJ0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gR2FtbWEgY29uc3RhbnRzLgot
Y29uc3QgZG91YmxlIGNNYXhHYW1tYSA9IDIxNDc0LjgzOwotY29uc3QgZG91YmxlIGNEZWZhdWx0
R2FtbWEgPSAyLjI7Ci1jb25zdCBkb3VibGUgY0ludmVyc2VHYW1tYSA9IDAuNDU0NTU7Ci0KLS8v
IFByb3RlY3QgYWdhaW5zdCBsYXJnZSBQTkdzLiBTZWUgTW96aWxsYSdzIGJ1ZyAjMjUxMzgxIGZv
ciBtb3JlIGluZm8uCi1jb25zdCB1bnNpZ25lZCBsb25nIGNNYXhQTkdTaXplID0gMTAwMDAwMFVM
OwotCi0vLyBDYWxsZWQgaWYgdGhlIGRlY29kaW5nIG9mIHRoZSBpbWFnZSBmYWlscy4KLXN0YXRp
YyB2b2lkIFBOR0FQSSBkZWNvZGluZ0ZhaWxlZChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29u
c3RfY2hhcnAgZXJyb3JfbXNnKTsKLQotLy8gQ2FsbGJhY2tzIGdpdmVuIHRvIHRoZSByZWFkIHN0
cnVjdC4gIFRoZSBmaXJzdCBpcyBmb3Igd2FybmluZ3MgKHdlIHdhbnQgdG8gdHJlYXQgYSBwYXJ0
aWN1bGFyIHdhcm5pbmcKLS8vIGFzIGFuIGVycm9yLCB3aGljaCBpcyB3aHkgd2UgaGF2ZSB0byBy
ZWdpc3RlciB0aGlzIGNhbGxiYWNrLgotc3RhdGljIHZvaWQgUE5HQVBJIGRlY29kaW5nV2Fybmlu
Zyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29uc3RfY2hhcnAgd2FybmluZ19tc2cpOwotCi0v
LyBDYWxsZWQgd2hlbiB3ZSBoYXZlIG9idGFpbmVkIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24gKGlu
Y2x1ZGluZyB0aGUgc2l6ZSkuCi1zdGF0aWMgdm9pZCBQTkdBUEkgaGVhZGVyQXZhaWxhYmxlKHBu
Z19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0cik7Ci0KLS8vIENhbGxlZCB3aGVu
IGEgcm93IGlzIHJlYWR5Lgotc3RhdGljIHZvaWQgUE5HQVBJIHJvd0F2YWlsYWJsZShwbmdfc3Ry
dWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgbmV3X3JvdywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG5nX3VpbnRfMzIgcm93X251bSwgaW50IHBhc3MpOwotCi0vLyBDYWxsZWQgd2hl
biB3ZSBoYXZlIGNvbXBsZXRlbHkgZmluaXNoZWQgZGVjb2RpbmcgdGhlIGltYWdlLgotc3RhdGlj
IHZvaWQgUE5HQVBJIHBuZ0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBp
bmZvX3B0cik7Ci0KLWNsYXNzIFBOR0ltYWdlUmVhZGVyCi17Ci1wdWJsaWM6Ci0gICAgUE5HSW1h
Z2VSZWFkZXIoUE5HSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKQotICAgICAgICA6IG1fcmVhZE9mZnNl
dCgwKQotICAgICAgICAsIG1fZGVjb2RpbmdTaXplT25seShmYWxzZSkKLSAgICAgICAgLCBtX2lu
dGVybGFjZUJ1ZmZlcigwKQotICAgICAgICAsIG1faGFzQWxwaGEoMCkKLSAgICB7Ci0gICAgICAg
IG1fcG5nID0gcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdChQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIDAs
IGRlY29kaW5nRmFpbGVkLCBkZWNvZGluZ1dhcm5pbmcpOwotICAgICAgICBtX2luZm8gPSBwbmdf
Y3JlYXRlX2luZm9fc3RydWN0KG1fcG5nKTsKLSAgICAgICAgcG5nX3NldF9wcm9ncmVzc2l2ZV9y
ZWFkX2ZuKG1fcG5nLCBkZWNvZGVyLCBoZWFkZXJBdmFpbGFibGUsIHJvd0F2YWlsYWJsZSwgcG5n
Q29tcGxldGUpOwotICAgIH0KLQotICAgIH5QTkdJbWFnZVJlYWRlcigpCi0gICAgewotICAgICAg
ICBjbG9zZSgpOwotICAgIH0KLQotICAgIHZvaWQgY2xvc2UoKSB7Ci0gICAgICAgIGlmIChtX3Bu
ZyAmJiBtX2luZm8pCi0gICAgICAgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmbV9wbmcs
ICZtX2luZm8sIDApOyAgLy8gV2lsbCB6ZXJvIHRoZSBwb2ludGVycy4KLSAgICAgICAgZGVsZXRl
IFtdbV9pbnRlcmxhY2VCdWZmZXI7Ci0gICAgICAgIG1faW50ZXJsYWNlQnVmZmVyID0gMDsKLSAg
ICAgICAgbV9yZWFkT2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgc2l6ZU9ubHkpCi0gICAgewotICAgICAgICBtX2RlY29k
aW5nU2l6ZU9ubHkgPSBzaXplT25seTsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBz
ZXRqbXAgaGVyZS4gT3RoZXJ3aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4KLSAgICAgICAgaWYg
KHNldGptcChtX3BuZy0+am1wYnVmKSkgewotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdvIGFoZWFkIGFuZCBhc3N1bWUg
d2UgY29uc3VtZWQgYWxsIHRoZSBkYXRhLiAgSWYgd2UgY29uc3VtZSBsZXNzLCB0aGUKLSAgICAg
ICAgLy8gY2FsbGJhY2sgd2lsbCBhZGp1c3Qgb3VyIHJlYWQgb2Zmc2V0IGFjY29yZGluZ2x5LiAg
RG8gbm90IGF0dGVtcHQgdG8gYWRqdXN0IHRoZQotICAgICAgICAvLyBvZmZzZXQgYWZ0ZXIgcG5n
X3Byb2Nlc3NfZGF0YSByZXR1cm5zLgotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX3JlYWRP
ZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZyA9IGRhdGEuc2l6ZSgpIC0gbV9yZWFk
T2Zmc2V0OwotICAgICAgICBtX3JlYWRPZmZzZXQgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgcG5n
X3Byb2Nlc3NfZGF0YShtX3BuZywgbV9pbmZvLCAocG5nX2J5dGVwKShkYXRhLmRhdGEoKSkgKyBv
ZmZzZXQsIHJlbWFpbmluZyk7Ci0gICAgfQotCi0gICAgYm9vbCBkZWNvZGluZ1NpemVPbmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9kZWNvZGluZ1NpemVPbmx5OyB9Ci0gICAgcG5nX3N0cnVjdHAgcG5n
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9wbmc7IH0KLSAgICBwbmdfaW5mb3AgaW5mb1B0cigpIGNv
bnN0IHsgcmV0dXJuIG1faW5mbzsgfQotICAgIHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIoKSBj
b25zdCB7IHJldHVybiBtX2ludGVybGFjZUJ1ZmZlcjsgfQotICAgIGJvb2wgaGFzQWxwaGEoKSBj
b25zdCB7IHJldHVybiBtX2hhc0FscGhhOyB9Ci0KLSAgICB2b2lkIHNldFJlYWRPZmZzZXQodW5z
aWduZWQgb2Zmc2V0KSB7IG1fcmVhZE9mZnNldCA9IG9mZnNldDsgfQotICAgIHZvaWQgc2V0SGFz
QWxwaGEoYm9vbCBiKSB7IG1faGFzQWxwaGEgPSBiOyB9Ci0KLSAgICB2b2lkIGNyZWF0ZUludGVy
bGFjZUJ1ZmZlcihpbnQgc2l6ZSkgewotICAgICAgICBtX2ludGVybGFjZUJ1ZmZlciA9IG5ldyBw
bmdfYnl0ZVtzaXplXTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgbV9yZWFkT2Zm
c2V0OwotICAgIGJvb2wgbV9kZWNvZGluZ1NpemVPbmx5OwotICAgIHBuZ19zdHJ1Y3RwIG1fcG5n
OwotICAgIHBuZ19pbmZvcCBtX2luZm87Ci0gICAgcG5nX2J5dGVwIG1faW50ZXJsYWNlQnVmZmVy
OwotICAgIGJvb2wgbV9oYXNBbHBoYTsKLX07Ci0KLVBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VE
ZWNvZGVyKCkKLSAgICA6IG1fcmVhZGVyKDApCi17Ci19Ci0KLVBOR0ltYWdlRGVjb2Rlcjo6flBO
R0ltYWdlRGVjb2RlcigpCi17Ci0gICAgZGVsZXRlIG1fcmVhZGVyOwotfQotCi0vLyBUYWtlIHRo
ZSBkYXRhIGFuZCBzdG9yZSBpdC4KLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJl
ZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCi17Ci0gICAgaWYgKG1fZmFpbGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDYWNoZSBvdXIgbmV3IGRhdGEuCi0gICAgSW1h
Z2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAgICAvLyBDcmVh
dGUgdGhlIFBORyByZWFkZXIuCi0gICAgaWYgKCFtX3JlYWRlciAmJiAhbV9mYWlsZWQpCi0gICAg
ICAgIG1fcmVhZGVyID0gbmV3IFBOR0ltYWdlUmVhZGVyKHRoaXMpOwotfQotCi0vLyBXaGV0aGVy
IG9yIG5vdCB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KLWJvb2wg
UE5HSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAotewotICAgIC8vIElmIHdl
IGhhdmUgcGVuZGluZyBkYXRhIHRvIGRlY29kZSwgc2VuZCBpdCB0byB0aGUgUE5HIHJlYWRlciBu
b3cuCi0gICAgaWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIG1fcmVhZGVy
KSB7Ci0gICAgICAgIGlmIChtX2ZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAvLyBUaGUgZGVjb2RlciB3aWxsIGdvIGFoZWFkIGFuZCBhZ2dyZXNzaXZlbHkgY29u
c3VtZSBldmVyeXRoaW5nIHVwIHVudGlsIHRoZQotICAgICAgICAvLyBzaXplIGlzIGVuY291bnRl
cmVkLgotICAgICAgICBkZWNvZGUodHJ1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7Ci19Ci0KLVJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHko
KSkKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKLQotICAgIFJHQkEzMkJ1
ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1
cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKLSAgICAgICAg
Ly8gRGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgICAgIGRlY29kZSgpOwotICAgIHJldHVybiAmZnJh
bWU7Ci19Ci0KLS8vIEZlZWQgZGF0YSB0byB0aGUgUE5HIHJlYWRlci4KLXZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpkZWNvZGUoYm9vbCBzaXplT25seSkgY29uc3QKLXsKLSAgICBpZiAobV9mYWlsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIo
KSwgc2l6ZU9ubHkpOwotICAgIAotICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKLSAgICAgICAgZGVsZXRlIG1fcmVhZGVyOwotICAg
ICAgICBtX3JlYWRlciA9IDA7Ci0gICAgfQotfQotCi12b2lkIGRlY29kaW5nRmFpbGVkKHBuZ19z
dHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwIGVycm9yTXNnKQotewotICAgIHN0YXRpY19jYXN0
PFBOR0ltYWdlRGVjb2Rlcio+KHBuZ19nZXRfcHJvZ3Jlc3NpdmVfcHRyKHBuZykpLT5kZWNvZGlu
Z0ZhaWxlZCgpOwotICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwotfQotCi12b2lkIGRlY29k
aW5nV2FybmluZyhwbmdfc3RydWN0cCBwbmcsIHBuZ19jb25zdF9jaGFycCB3YXJuaW5nTXNnKQot
ewotICAvLyBNb3ppbGxhIGRpZCB0aGlzLCBzbyB3ZSB3aWxsIHRvby4KLSAgLy8gQ29udmVydCBh
IHRSTlMgd2FybmluZyB0byBiZSBhbiBlcnJvciAoZG9jdW1lbnRlZCBpbiBidWd6aWxsYS5tb3pp
bGxhLm9yZyBidWcgIzI1MTM4MSkKLSAgaWYgKCFzdHJuY21wKHdhcm5pbmdNc2csICJNaXNzaW5n
IFBMVEUgYmVmb3JlIHRSTlMiLCAyNCkpCi0gICAgICBwbmdfZXJyb3IocG5nLCB3YXJuaW5nTXNn
KTsKLX0KLQotdm9pZCBoZWFkZXJBdmFpbGFibGUocG5nX3N0cnVjdHAgcG5nLCBwbmdfaW5mb3Ag
aW5mbykKLXsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0X3Byb2dy
ZXNzaXZlX3B0cihwbmcpKS0+aGVhZGVyQXZhaWxhYmxlKCk7Ci19Ci0KLXZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpkZWNvZGluZ0ZhaWxlZCgpCi17Ci0gICAgbV9mYWlsZWQgPSB0cnVlOwotfQotCi12
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKLXsKLSAgICBwbmdfc3RydWN0
cCBwbmcgPSByZWFkZXIoKS0+cG5nUHRyKCk7Ci0gICAgcG5nX2luZm9wIGluZm8gPSByZWFkZXIo
KS0+aW5mb1B0cigpOwotICAgIHBuZ191aW50XzMyIHdpZHRoID0gcG5nLT53aWR0aDsKLSAgICBw
bmdfdWludF8zMiBoZWlnaHQgPSBwbmctPmhlaWdodDsKLSAgICAKLSAgICAvLyBQcm90ZWN0IGFn
YWluc3QgbGFyZ2UgaW1hZ2VzLgotICAgIGlmIChwbmctPndpZHRoID4gY01heFBOR1NpemUgfHwg
cG5nLT5oZWlnaHQgPiBjTWF4UE5HU2l6ZSkgewotICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0g
ICAgICAgIGxvbmdqbXAocG5nLT5qbXBidWYsIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIg
aXMgYXZhaWxhYmxlLgotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSkg
ewotICAgICAgICBpZiAoIXNldFNpemUod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIC8v
IFNpemUgdW5yZWFzb25hYmxlLCBiYWlsIG91dC4KLSAgICAgICAgICAgIGxvbmdqbXAocG5nLT5q
bXBidWYsIDEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aW50IGJpdERlcHRoLCBjb2xvclR5cGUsIGludGVybGFjZVR5cGUsIGNvbXByZXNzaW9uVHlwZSwg
ZmlsdGVyVHlwZSwgY2hhbm5lbHM7Ci0gICAgcG5nX2dldF9JSERSKHBuZywgaW5mbywgJndpZHRo
LCAmaGVpZ2h0LCAmYml0RGVwdGgsICZjb2xvclR5cGUsCi0gICAgICAgICAgICAgICAgICZpbnRl
cmxhY2VUeXBlLCAmY29tcHJlc3Npb25UeXBlLCAmZmlsdGVyVHlwZSk7Ci0KLSAgICAvLyBUaGUg
b3B0aW9ucyB3ZSBzZXQgaGVyZSBtYXRjaCB3aGF0IE1vemlsbGEgZG9lcy4KLQotICAgIC8vIEV4
cGFuZCB0byBlbnN1cmUgd2UgdXNlIDI0LWJpdCBmb3IgUkdCIGFuZCAzMi1iaXQgZm9yIFJHQkEu
Ci0gICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFIHx8Ci0gICAgICAg
IChjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSAmJiBiaXREZXB0aCA8IDgpKQotICAg
ICAgICBwbmdfc2V0X2V4cGFuZChwbmcpOwotICAgIAotICAgIHBuZ19ieXRlcCB0cm5zID0gMDsK
LSAgICBpbnQgdHJuc0NvdW50ID0gMDsKLSAgICBpZiAocG5nX2dldF92YWxpZChwbmcsIGluZm8s
IFBOR19JTkZPX3RSTlMpKSB7Ci0gICAgICAgIHBuZ19nZXRfdFJOUyhwbmcsIGluZm8sICZ0cm5z
LCAmdHJuc0NvdW50LCAwKTsKLSAgICAgICAgcG5nX3NldF9leHBhbmQocG5nKTsKLSAgICB9Ci0K
LSAgICBpZiAoYml0RGVwdGggPT0gMTYpCi0gICAgICAgIHBuZ19zZXRfc3RyaXBfMTYocG5nKTsK
LQotICAgIGlmIChjb2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWSB8fAotICAgICAgICBj
b2xvclR5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQSkKLSAgICAgICAgcG5nX3NldF9n
cmF5X3RvX3JnYihwbmcpOwotCi0gICAgLy8gRGVhbCB3aXRoIGdhbW1hIGFuZCBrZWVwIGl0IHVu
ZGVyIG91ciBjb250cm9sLgotICAgIGRvdWJsZSBnYW1tYTsKLSAgICBpZiAocG5nX2dldF9nQU1B
KHBuZywgaW5mbywgJmdhbW1hKSkgewotICAgICAgICBpZiAoKGdhbW1hIDw9IDAuMCkgfHwgKGdh
bW1hID4gY01heEdhbW1hKSkgewotICAgICAgICAgICAgZ2FtbWEgPSBjSW52ZXJzZUdhbW1hOwot
ICAgICAgICAgICAgcG5nX3NldF9nQU1BKHBuZywgaW5mbywgZ2FtbWEpOwotICAgICAgICB9Ci0g
ICAgICAgIHBuZ19zZXRfZ2FtbWEocG5nLCBjRGVmYXVsdEdhbW1hLCBnYW1tYSk7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICAgICAgcG5nX3NldF9nYW1tYShwbmcsIGNEZWZhdWx0R2FtbWEsIGNJbnZl
cnNlR2FtbWEpOwotCi0gICAgLy8gVGVsbCBsaWJwbmcgdG8gc2VuZCB1cyByb3dzIGZvciBpbnRl
cmxhY2VkIHBuZ3MuCi0gICAgaWYgKGludGVybGFjZVR5cGUgPT0gUE5HX0lOVEVSTEFDRV9BREFN
NykKLSAgICAgICAgcG5nX3NldF9pbnRlcmxhY2VfaGFuZGxpbmcocG5nKTsKLQotICAgIC8vIFVw
ZGF0ZSBvdXIgaW5mbyBub3cKLSAgICBwbmdfcmVhZF91cGRhdGVfaW5mbyhwbmcsIGluZm8pOwot
ICAgIGNoYW5uZWxzID0gcG5nX2dldF9jaGFubmVscyhwbmcsIGluZm8pOwotICAgIGFzc2VydChj
aGFubmVscyA9PSAzIHx8IGNoYW5uZWxzID09IDQpOwotCi0gICAgcmVhZGVyKCktPnNldEhhc0Fs
cGhhKGNoYW5uZWxzID09IDQpOwotCi0gICAgaWYgKHJlYWRlcigpLT5kZWNvZGluZ1NpemVPbmx5
KCkpIHsKLSAgICAgICAgLy8gSWYgd2Ugb25seSBuZWVkZWQgdGhlIHNpemUsIGhhbHQgdGhlIHJl
YWRlci4gICAgIAotICAgICAgICByZWFkZXIoKS0+c2V0UmVhZE9mZnNldChtX2RhdGEtPnNpemUo
KSAtIHBuZy0+YnVmZmVyX3NpemUpOwotICAgICAgICBwbmctPmJ1ZmZlcl9zaXplID0gMDsKLSAg
ICB9Ci19Ci0KLXZvaWQgcm93QXZhaWxhYmxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2J5dGVwIHJv
d0J1ZmZlciwKLSAgICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIHJvd0luZGV4LCBpbnQgaW50
ZXJsYWNlUGFzcykKLXsKLSAgICBzdGF0aWNfY2FzdDxQTkdJbWFnZURlY29kZXIqPihwbmdfZ2V0
X3Byb2dyZXNzaXZlX3B0cihwbmcpKS0+cm93QXZhaWxhYmxlKHJvd0J1ZmZlciwgcm93SW5kZXgs
IGludGVybGFjZVBhc3MpOwotfQotCi12b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxl
KHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsIGludCBpbnRlcmxh
Y2VQYXNzKQotewotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQu
Ci0gICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAg
aWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKLSAgICAg
ICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkg
ewotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9n
cmVzc2l2ZV9wdHIocmVhZGVyKCktPnBuZ1B0cigpKSktPmRlY29kaW5nRmFpbGVkKCk7Ci0gICAg
ICAgICAgICBsb25nam1wKHJlYWRlcigpLT5wbmdQdHIoKS0+am1wYnVmLCAxKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1
ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKLSAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsK
LQotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgotICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUo
KSkpOwotCi0gICAgICAgIGlmIChyZWFkZXIoKS0+cG5nUHRyKCktPmludGVybGFjZWQpCi0gICAg
ICAgICAgICByZWFkZXIoKS0+Y3JlYXRlSW50ZXJsYWNlQnVmZmVyKChyZWFkZXIoKS0+aGFzQWxw
aGEoKSA/IDQgOiAzKSAqIHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKTsKLSAgICB9
Ci0KLSAgICBpZiAocm93QnVmZmVyID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAgLyogbGli
cG5nIGNvbW1lbnRzIChwYXN0ZWQgaW4gaGVyZSB0byBleHBsYWluIHdoYXQgZm9sbG93cykKLSAg
ICAqCi0gICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZXZlcnkgcm93IGluIHRoZSBp
bWFnZS4gIElmIHRoZQotICAgICogaW1hZ2UgaXMgaW50ZXJsYWNpbmcsIGFuZCB5b3UgdHVybmVk
IG9uIHRoZSBpbnRlcmxhY2UgaGFuZGxlciwKLSAgICAqIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBj
YWxsZWQgZm9yIGV2ZXJ5IHJvdyBpbiBldmVyeSBwYXNzLgotICAgICogU29tZSBvZiB0aGVzZSBy
b3dzIHdpbGwgbm90IGJlIGNoYW5nZWQgZnJvbSB0aGUgcHJldmlvdXMgcGFzcy4KLSAgICAqIFdo
ZW4gdGhlIHJvdyBpcyBub3QgY2hhbmdlZCwgdGhlIG5ld19yb3cgdmFyaWFibGUgd2lsbCBiZSBO
VUxMLgotICAgICogVGhlIHJvd3MgYW5kIHBhc3NlcyBhcmUgY2FsbGVkIGluIG9yZGVyLCBzbyB5
b3UgZG9uJ3QgcmVhbGx5Ci0gICAgKiBuZWVkIHRoZSByb3dfbnVtIGFuZCBwYXNzLCBidXQgSSdt
IHN1cHBseWluZyB0aGVtIGJlY2F1c2UgaXQKLSAgICAqIG1heSBtYWtlIHlvdXIgbGlmZSBlYXNp
ZXIuCi0gICAgKgotICAgICogRm9yIHRoZSBub24tTlVMTCByb3dzIG9mIGludGVybGFjZWQgaW1h
Z2VzLCB5b3UgbXVzdCBjYWxsCi0gICAgKiBwbmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3coKSBw
YXNzaW5nIGluIHRoZSByb3cgYW5kIHRoZQotICAgICogb2xkIHJvdy4gIFlvdSBjYW4gY2FsbCB0
aGlzIGZ1bmN0aW9uIGZvciBOVUxMIHJvd3MgKGl0IHdpbGwKLSAgICAqIGp1c3QgcmV0dXJuKSBh
bmQgZm9yIG5vbi1pbnRlcmxhY2VkIGltYWdlcyAoaXQganVzdCBkb2VzIHRoZQotICAgICogbWVt
Y3B5IGZvciB5b3UpIGlmIGl0IHdpbGwgbWFrZSB0aGUgY29kZSBlYXNpZXIuICBUaHVzLCB5b3UK
LSAgICAqIGNhbiBqdXN0IGRvIHRoaXMgZm9yIGFsbCBjYXNlczoKLSAgICAqCi0gICAgKiAgICBw
bmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3cocG5nX3B0ciwgb2xkX3JvdywgbmV3X3Jvdyk7Ci0g
ICAgKgotICAgICogd2hlcmUgb2xkX3JvdyBpcyB3aGF0IHdhcyBkaXNwbGF5ZWQgZm9yIHByZXZp
b3VzIHJvd3MuICBOb3RlCi0gICAgKiB0aGF0IHRoZSBmaXJzdCBwYXNzIChwYXNzID09IDAgcmVh
bGx5KSB3aWxsIGNvbXBsZXRlbHkgY292ZXIKLSAgICAqIHRoZSBvbGQgcm93LCBzbyB0aGUgcm93
cyBkbyBub3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZC4gIEFmdGVyCi0gICAgKiB0aGUgZmlyc3Qg
cGFzcyAoYW5kIG9ubHkgZm9yIGludGVybGFjZWQgaW1hZ2VzKSwgeW91IHdpbGwgaGF2ZQotICAg
ICogdG8gcGFzcyB0aGUgY3VycmVudCByb3csIGFuZCB0aGUgZnVuY3Rpb24gd2lsbCBjb21iaW5l
IHRoZQotICAgICogb2xkIHJvdyBhbmQgdGhlIG5ldyByb3cuCi0gICAgKi8KLSAgICAKLSAgICBw
bmdfc3RydWN0cCBwbmcgPSByZWFkZXIoKS0+cG5nUHRyKCk7Ci0gICAgYm9vbCBoYXNBbHBoYSA9
IHJlYWRlcigpLT5oYXNBbHBoYSgpOwotICAgIHVuc2lnbmVkIGNvbG9yQ2hhbm5lbHMgPSBoYXNB
bHBoYSA/IDQgOiAzOwotICAgIHBuZ19ieXRlcCByb3c7Ci0gICAgcG5nX2J5dGVwIGludGVybGFj
ZUJ1ZmZlciA9IHJlYWRlcigpLT5pbnRlcmxhY2VCdWZmZXIoKTsKLSAgICBpZiAoaW50ZXJsYWNl
QnVmZmVyKSB7Ci0gICAgICAgIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChyb3dJbmRleCAqIGNv
bG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIHBuZ19wcm9ncmVzc2l2ZV9j
b21iaW5lX3JvdyhwbmcsIHJvdywgcm93QnVmZmVyKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAg
ICByb3cgPSByb3dCdWZmZXI7Ci0KLSAgICAvLyBDb3B5IHRoZSBkYXRhIGludG8gb3VyIGJ1ZmZl
ci4KLSAgICBpbnQgd2lkdGggPSBzaXplKCkud2lkdGgoKTsKLSAgICBib29sIHNhd0FscGhhID0g
ZmFsc2U7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHJlZCA9ICpyb3crKzsKLSAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSAqcm93Kys7Ci0g
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSAqcm93Kys7Ci0gICAgICAgIHVuc2lnbmVkIGFscGhhID0g
KGhhc0FscGhhID8gKnJvdysrIDogMjU1KTsKLSAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgcm93
SW5kZXgsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgaWYgKCFzYXdBbHBoYSAm
JiBhbHBoYSA8IDI1NSkgewotICAgICAgICAgICAgc2F3QWxwaGEgPSB0cnVlOwotICAgICAgICAg
ICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IHBuZ0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luZm9wIGluZm8pCi17Ci0gICAgc3Rh
dGljX2Nhc3Q8UE5HSW1hZ2VEZWNvZGVyKj4ocG5nX2dldF9wcm9ncmVzc2l2ZV9wdHIocG5nKSkt
PnBuZ0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSgp
Ci17Ci0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEhhbmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZl
biBpZiB0aGUgaW1hZ2UgZW5kZWQgdXAgYmVpbmcgZW1wdHkuCi0gICAgUkdCQTMyQnVmZmVyJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhSR0JB
MzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvUE5HSW1hZ2VEZWNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL1BO
R0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDYzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBOR0ltYWdlRGVjb2Rlcl9oCi0jZGVmaW5lIFBOR0lt
YWdlRGVjb2Rlcl9oCi0KLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0gICAgY2xhc3MgUE5HSW1hZ2VSZWFkZXI7Ci0KLSAgICAvLyBUaGlzIGNsYXNz
IGRlY29kZXMgdGhlIFBORyBpbWFnZSBmb3JtYXQuCi0gICAgY2xhc3MgUE5HSW1hZ2VEZWNvZGVy
IDogcHVibGljIEltYWdlRGVjb2RlciB7Ci0gICAgcHVibGljOgotICAgICAgICBQTkdJbWFnZURl
Y29kZXIoKTsKLSAgICAgICAgflBOR0ltYWdlRGVjb2RlcigpOwotCi0gICAgICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gInBuZyI7IH0KLQotICAg
ICAgICAvLyBUYWtlIHRoZSBkYXRhIGFuZCBzdG9yZSBpdC4KLSAgICAgICAgdmlydHVhbCB2b2lk
IHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7Ci0KLSAg
ICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVj
b2RlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBjb25zdDsK
LQotICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCk7Ci0KLSAgICAgICAgdm9pZCBkZWNvZGUoYm9vbCBzaXplT25seSA9IGZhbHNlKSBj
b25zdDsKLQotICAgICAgICBQTkdJbWFnZVJlYWRlciogcmVhZGVyKCkgeyByZXR1cm4gbV9yZWFk
ZXI7IH0KLQotICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSBsaWJwbmcKLSAgICAgICAgdm9pZCBk
ZWNvZGluZ0ZhaWxlZCgpOwotICAgICAgICB2b2lkIGhlYWRlckF2YWlsYWJsZSgpOwotICAgICAg
ICB2b2lkIHJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJv
d0luZGV4LCBpbnQgaW50ZXJsYWNlUGFzcyk7Ci0gICAgICAgIHZvaWQgcG5nQ29tcGxldGUoKTsK
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUE5HSW1hZ2VSZWFkZXIqIG1fcmVhZGVy
OwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gNDQ2MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyODIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiWEJNSW1hZ2VE
ZWNvZGVyLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotWEJNSW1hZ2VEZWNvZGVyOjpYQk1JbWFnZURlY29kZXIoKQotICAgIDogbV9kZWNvZGVPZmZz
ZXQoMCkKLSAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKGZhbHNlKQotICAgICwgbV9kZWNvZGVkSGVh
ZGVyKGZhbHNlKQotICAgICwgbV9kYXRhVHlwZShVbmtub3duKQotICAgICwgbV9iaXRzRGVjb2Rl
ZCgwKQotewotfQotCi12b2lkIFhCTUltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIq
IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQotewotICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0
YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+JiBidWYg
PSBtX2RhdGEtPmJ1ZmZlcigpOwotICAgIGlmIChidWYuc2l6ZSgpID4gbV94Ym1TdHJpbmcuc2l6
ZSgpKQotICAgICAgICBtX3hibVN0cmluZy5hcHBlbmQoJmJ1ZlttX3hibVN0cmluZy5zaXplKCld
LCBidWYuc2l6ZSgpIC0gbV94Ym1TdHJpbmcuc2l6ZSgpKTsKLQotICAgIG1fYWxsRGF0YVJlY2Vp
dmVkID0gYWxsRGF0YVJlY2VpdmVkOwotfQotCi1ib29sIFhCTUltYWdlRGVjb2Rlcjo6aXNTaXpl
QXZhaWxhYmxlKCkgY29uc3QKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgZWl0aGVyIChh
KSBub3QgYmUgY29uc3QsIG9yIChiKSBub3QgYmUgZXhwZWN0ZWQgdG8KLSAgICAvLyBkbyBhbnl0
aGluZyB0aGF0IGNoYW5nZXMgbV9zaXplQXZhaWxhYmxlLiBUaGUgcG5nIGFuZCBqcGVnIGRlY29k
ZXJzCi0gICAgLy8gZ2V0IGFyb3VuZCB0aGlzIHdpdGggY2FsbGJhY2tzIGZyb20gZXh0ZXJuYWwg
bGlicmFyaWVzLgotICAgIC8vCi0gICAgLy8gRklYTUU6IEZpbmQgb3V0IGlmIHdlIGNhbiBwYXRj
aCB3ZWJraXQgdG8gdGFrZSBjYXJlIG9mIHRoaXMuCi0gICAgaWYgKCFJbWFnZURlY29kZXI6Omlz
U2l6ZUF2YWlsYWJsZSgpICYmICFtX2ZhaWxlZCkKLSAgICAgICAgY29uc3RfY2FzdDxYQk1JbWFn
ZURlY29kZXIqPih0aGlzKS0+ZGVjb2RlWEJNKHRydWUpOwotCi0gICAgcmV0dXJuICFtX2ZhaWxl
ZCAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwotfQotCi1SR0JBMzJCdWZmZXIq
IFhCTUltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKLXsKLSAg
ICBpZiAoaW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7Ci0K
LSAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgc2l6ZSBpZiB3ZSBkb24ndCBoYXZlIGl0IHlldC4K
LSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCi0gICAgICAgIGRlY29k
ZVhCTSh0cnVlKTsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBu
ZWVkZWQuCi0gICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07
Ci0gICAgaWYgKCFmYWlsZWQoKSAmJiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCi0g
ICAgICAgICYmIChidWZmZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSkg
ewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6
RnJhbWVQYXJ0aWFsKTsKLQotICAgICAgICAvLyBGb3IgWEJNcywgdGhlIGZyYW1lIGFsd2F5cyBm
aWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0UmVjdChJbnRSZWN0KElu
dFBvaW50KCksIHNpemUoKSkpOwotICAgIH0KLSAgICAgICAgCi0gICAgLy8gS2VlcCB0cnlpbmcg
dG8gZGVjb2RlIHVudGlsIHdlJ3ZlIGdvdCB0aGUgZW50aXJlIGltYWdlLgotICAgIGlmIChidWZm
ZXIuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpCi0gICAgICAgIGRlY29k
ZVhCTShmYWxzZSk7Ci0KLSAgICByZXR1cm4gJmJ1ZmZlcjsKLX0KLQotYm9vbCBYQk1JbWFnZURl
Y29kZXI6OmRlY29kZUhlYWRlcigpCi17Ci0gICAgQVNTRVJUKG1fZGVjb2RlT2Zmc2V0IDw9IG1f
eGJtU3RyaW5nLnNpemUoKSk7Ci0gICAgQVNTRVJUKCFtX2RlY29kZWRIZWFkZXIpOwotCi0gICAg
Y29uc3QgY2hhciogaW5wdXQgPSBtX3hibVN0cmluZy5jX3N0cigpOwotCi0gICAgLy8gQXQgbGVh
c3QgMiAiI2RlZmluZSA8c3RyaW5nPiA8dW5zaWduZWQ+IiBzZXF1ZW5jZXMgYXJlIHJlcXVpcmVk
LiBUaGVzZQotICAgIC8vIHNwZWNpZnkgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGltYWdl
LgotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUoKSkgewotICAgICAgICBpbnQgY291bnQ7Ci0gICAgICAgIGlmIChzc2NhbmYoJmlu
cHV0W21fZGVjb2RlT2Zmc2V0XSwgIiNkZWZpbmUgJSpzICVpICNkZWZpbmUgJSpzICVpJW4iLAot
ICAgICAgICAgICAgICAgICAgICZ3aWR0aCwgJmhlaWdodCwgJmNvdW50KSAhPSAyKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5l
ZWQgdG8gZm9sbG93IHNvbWUgcnVsZXMuCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgd2lkdGgg
PiBtYXhEaW1lbnNpb24gfHwgaGVpZ2h0IDwgMCB8fCBoZWlnaHQgPiBtYXhEaW1lbnNpb24pIHsK
LSAgICAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucywgZGVjb2Rpbmcgc2hvdWxkIG5vdCBjb250
aW51ZS4KLSAgICAgICAgICAgIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKSB7Ci0g
ICAgICAgICAgICBzZXRGYWlsZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBtX2RlY29kZU9mZnNldCArPSBjb3VudDsKLSAgICAgICAgQVNTRVJUKG1f
ZGVjb2RlT2Zmc2V0IDw9IG1feGJtU3RyaW5nLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpOwotCi0gICAgLy8gTm93IHdlJ3JlIGxv
b2tpbmcgZm9yIHNvbWV0aGluZyB0aGF0IHRlbGxzIHVzIHRoYXQgd2UndmUgc2VlbiBhbGwgb2Yg
dGhlCi0gICAgLy8gIiNkZWZpbmUgPHN0cmluZz4gPHVuc2lnbmVkPiIgc2VxdWVuY2VzIHRoYXQg
d2UncmUgZ29pbmcgdG8uIE1vemlsbGEKLSAgICAvLyBqdXN0IGxvb2tzIGZvciAiIGNoYXIgIiBv
ciAiIHNob3J0ICIuIFdlJ2xsIGRvIHRoZSBzYW1lLgotICAgIGlmIChtX2RhdGFUeXBlID09IFVu
a25vd24pIHsKLSAgICAgICAgY29uc3QgY2hhciogeDExaGludCA9ICIgY2hhciAiOwotICAgICAg
ICBjb25zdCBjaGFyKiB4MTFIaW50TG9jYXRpb24gPSBzdHJzdHIoJmlucHV0W21fZGVjb2RlT2Zm
c2V0XSwgeDExaGludCk7Ci0gICAgICAgIGlmICh4MTFIaW50TG9jYXRpb24pIHsKLSAgICAgICAg
ICAgIG1fZGF0YVR5cGUgPSBYMTE7Ci0gICAgICAgICAgICBtX2RlY29kZU9mZnNldCArPSAoKHgx
MUhpbnRMb2NhdGlvbiAtICZpbnB1dFttX2RlY29kZU9mZnNldF0pICsgc3RybGVuKHgxMWhpbnQp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHgxMGhpbnQgPSAi
IHNob3J0ICI7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB4MTBIaW50TG9jYXRpb24gPSBzdHJz
dHIoJmlucHV0W21fZGVjb2RlT2Zmc2V0XSwgeDEwaGludCk7Ci0gICAgICAgICAgICBpZiAoeDEw
SGludExvY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhVHlwZSA9IFgxMDsKLSAgICAg
ICAgICAgICAgICBtX2RlY29kZU9mZnNldCArPSAoKHgxMEhpbnRMb2NhdGlvbiAtICZpbnB1dFtt
X2RlY29kZU9mZnNldF0pICsgc3RybGVuKHgxMGhpbnQpKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQo
bV9kZWNvZGVPZmZzZXQgPD0gbV94Ym1TdHJpbmcuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBG
aW5kIHRoZSBzdGFydCBvZiB0aGUgZGF0YS4gQWdhaW4sIHdlIGRvIHdoYXQgbW96aWxsYSBkb2Vz
IGFuZCBqdXN0Ci0gICAgLy8gbG9vayBmb3IgYSAneycgaW4gdGhlIGlucHV0LgotICAgIGNvbnN0
IGNoYXIqIGZvdW5kID0gc3RyY2hyKCZpbnB1dFttX2RlY29kZU9mZnNldF0sICd7Jyk7Ci0gICAg
aWYgKCFmb3VuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWR2YW5jZSB0byBj
aGFyYWN0ZXIgYWZ0ZXIgdGhlICd7JwotICAgIG1fZGVjb2RlT2Zmc2V0ICs9ICgoZm91bmQgLSAm
aW5wdXRbbV9kZWNvZGVPZmZzZXRdKSArIDEpOwotICAgIEFTU0VSVChtX2RlY29kZU9mZnNldCA8
PSBtX3hibVN0cmluZy5zaXplKCkpOwotICAgIG1fZGVjb2RlZEhlYWRlciA9IHRydWU7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlIGRhdGEgaW4gYW4gWEJNIGZpbGUgaXMgcHJvdmlk
ZWQgYXMgYW4gYXJyYXkgb2YgZWl0aGVyICJjaGFyIiBvciAic2hvcnQiCi0vLyB2YWx1ZXMuIFRo
ZXNlIHZhbHVlcyBhcmUgZGVjb2RlZCBvbmUgYXQgYSB0aW1lIHVzaW5nIHN0cnRvdWwoKSBhbmQg
dGhlIGJpdHMKLS8vIGFyZSB1c2VkIHRvIHNldCB0aGUgYWxwaGEgdmFsdWUgZm9yIHRoZSBpbWFn
ZS4KLS8vCi0vLyBUaGUgdmFsdWUgZm9yIHRoZSBjb2xvciBpcyBhbHdheXMgc2V0IHRvIFJHQigw
LDAsMCksIHRoZSBhbHBoYSB2YWx1ZSB0YWtlcwotLy8gY2FyZSBvZiB3aGV0aGVyIG9yIG5vdCB0
aGUgcGl4ZWwgc2hvd3MgdXAuCi0vLwotLy8gU2luY2UgdGhlIGRhdGEgbWF5IGFycml2ZSBpbiBj
aHVua3MsIGFuZCBtYW55IHByZWZpeGVzIG9mIHZhbGlkIG51bWJlcnMgYXJlCi0vLyB0aGVtc2Vs
dmVzIHZhbGlkIG51bWJlcnMsIHRoaXMgY29kZSBuZWVkcyB0byBjaGVjayB0byBtYWtlIHN1cmUg
dGhhdCB0aGUKLS8vIHZhbHVlIGlzIG5vdCB0cnVuY2F0ZWQuIFRoaXMgaXMgZG9uZSBieSBjb25z
dW1pbmcgc3BhY2UgYWZ0ZXIgdGhlIHZhbHVlCi0vLyByZWFkIHVudGlsIGEgJywnIG9yIGEgJ30n
IG9jY3Vycy4gSW4gYSB2YWxpZCBYQk0sIG9uZSBvZiB0aGVzZSBjaGFyYWN0ZXJzCi0vLyB3aWxs
IG9jY3VyIGFmdGVyIGVhY2ggdmFsdWUuCi0vLwotLy8gVGhlIGNoZWNrcyBhZnRlciBzdHJ0b3Vs
IGFyZSBiYXNlZCBvbiBNb3ppbGxhJ3MgbnNYQk1EZWNvZGVyLmNwcC4KLWJvb2wgWEJNSW1hZ2VE
ZWNvZGVyOjpkZWNvZGVEYXR1bSh1aW50MTZfdCogcmVzdWx0KQotewotICAgIGNvbnN0IGNoYXIq
IGlucHV0ID0gbV94Ym1TdHJpbmcuY19zdHIoKTsKLSAgICBjaGFyKiBlbmRQdHI7Ci0gICAgY29u
c3QgdWludDE2X3QgdmFsdWUgPSBzdHJ0b3VsKCZpbnB1dFttX2RlY29kZU9mZnNldF0sICZlbmRQ
dHIsIDApOwotCi0gICAgLy8gRW5kIG9mIGlucHV0IG9yIGNvdWxkbid0IGRlY29kZSBhbnl0aGlu
ZywgY2FuJ3QgZ28gYW55IGZ1cnRoZXIuCi0gICAgaWYgKGVuZFB0ciA9PSAmaW5wdXRbbV9kZWNv
ZGVPZmZzZXRdIHx8ICEqZW5kUHRyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBQ
b3NzaWJseSBhIGhleCB2YWx1ZSB0cnVuY2F0ZWQgYXQgIjB4Ii4gTmVlZCBtb3JlIGRhdGEuCi0g
ICAgaWYgKHZhbHVlID09IDAgJiYgKCplbmRQdHIgPT0gJ3gnIHx8ICplbmRQdHIgPT0gJ1gnKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2tpcCB3aGl0ZXNwYWNlCi0gICAgd2hp
bGUgKCplbmRQdHIgJiYgaXNzcGFjZSgqZW5kUHRyKSkKLSAgICAgICAgKytlbmRQdHI7Ci0KLSAg
ICAvLyBPdXQgb2YgaW5wdXQsIGRvbid0IGtub3cgd2hhdCBjb21lcyBuZXh0LgotICAgIGlmICgh
KmVuZFB0cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgdGhlIG5leHQgbm9u
LXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIG5vdCBvbmUgb2YgdGhlc2UsIGl0J3MgYW4gZXJyb3Iu
Ci0gICAgLy8gRXZlcnkgdmFsaWQgZW50cnkgaW4gdGhlIGRhdGEgYXJyYXkgbmVlZHMgdG8gYmUg
Zm9sbG93ZWQgYnkgJywnIG9yICd9Jy4KLSAgICBpZiAoKmVuZFB0ciAhPSAnLCcgJiYgKmVuZFB0
ciAhPSAnfScpIHsKLSAgICAgICAgc2V0RmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSB2YWx1ZS4KLSAgICAqcmVz
dWx0ID0gdmFsdWU7Ci0KLSAgICAvLyBTa2lwIG92ZXIgdGhlIGRlY29kZWQgdmFsdWUgcGx1cyB0
aGUgZGVsaW1pdGVyICgnLCcgb3IgJ30nKS4KLSAgICBtX2RlY29kZU9mZnNldCArPSAoKGVuZFB0
ciAtICZpbnB1dFttX2RlY29kZU9mZnNldF0pICsgMSk7Ci0gICAgQVNTRVJUKG1fZGVjb2RlT2Zm
c2V0IDw9IG1feGJtU3RyaW5nLnNpemUoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBYQk1JbWFnZURlY29kZXI6OmRlY29kZURhdGEoKQotewotICAgIEFTU0VSVChtX2RlY29kZU9m
ZnNldCA8PSBtX3hibVN0cmluZy5zaXplKCkpOwotICAgIEFTU0VSVChtX2RlY29kZWRIZWFkZXIg
JiYgIW1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpOwotCi0gICAgUkdCQTMyQnVmZmVyJiBm
cmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLQotICAgIEFTU0VSVChmcmFtZS5zdGF0dXMo
KSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7Ci0KLSAgICBjb25zdCBpbnQgYml0c1Bl
clJvdyA9IHNpemUoKS53aWR0aCgpOwotCi0gICAgQVNTRVJUKG1fZGF0YVR5cGUgIT0gVW5rbm93
bik7Ci0KLSAgICB3aGlsZSAobV9iaXRzRGVjb2RlZCA8IChzaXplKCkud2lkdGgoKSAqIHNpemUo
KS5oZWlnaHQoKSkpIHsKLSAgICAgICAgdWludDE2X3QgdmFsdWU7Ci0gICAgICAgIGlmICghZGVj
b2RlRGF0dW0oJnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
bnQgeCA9IG1fYml0c0RlY29kZWQgJSBiaXRzUGVyUm93OwotICAgICAgICBjb25zdCBpbnQgeSA9
IG1fYml0c0RlY29kZWQgLyBiaXRzUGVyUm93OwotCi0gICAgICAgIC8vIEhvdyBtYW55IGJpdHMg
d2lsbCBiZSB3cml0dGVuPwotICAgICAgICBjb25zdCBpbnQgYml0cyA9IHN0ZDo6bWluKGJpdHNQ
ZXJSb3cgLSB4LCAobV9kYXRhVHlwZSA9PSBYMTEpID8gOCA6IDE2KTsKLQotICAgICAgICAvLyBP
bmx5IHRoZSBhbHBoYSBjaGFubmVsIG1hdHRlcnMgaGVyZSwgc28gdGhlIGNvbG9yIHZhbHVlcyBh
cmUgYWx3YXlzCi0gICAgICAgIC8vIHNldCB0byAwLgotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGJpdHM7ICsraSkKLSAgICAgICAgICAgIGZyYW1lLnNldFJHQkEoeCsrLCB5LCAwLCAwLCAw
LCB2YWx1ZSAmICgxIDw8IGkpID8gMjU1IDogMCk7Ci0KLSAgICAgICAgbV9iaXRzRGVjb2RlZCAr
PSBiaXRzOwotICAgIH0KLQotICAgIGZyYW1lLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIERlY29kZSBhcyBtdWNoIGFz
IHdlIGNhbiBvZiB0aGUgWEJNIGZpbGUuCi12b2lkIFhCTUltYWdlRGVjb2Rlcjo6ZGVjb2RlWEJN
KGJvb2wgc2l6ZU9ubHkpCi17Ci0gICAgaWYgKGZhaWxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBib29sIGRlY29kZVJlc3VsdCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2RlY29kZWRIZWFk
ZXIpCi0gICAgICAgIGRlY29kZVJlc3VsdCA9IGRlY29kZUhlYWRlcigpOwotCi0gICAgaWYgKG1f
ZGVjb2RlZEhlYWRlciAmJiAhc2l6ZU9ubHkpCi0gICAgICAgIGRlY29kZVJlc3VsdCA9IGRlY29k
ZURhdGEoKTsKLQotICAgIC8vIFRoZSBoZWFkZXIgb3IgdGhlIGRhdGEgY291bGQgbm90IGJlIGRl
Y29kZWQsIGJ1dCB0aGVyZSBpcyBubyBtb3JlCi0gICAgLy8gZGF0YTogZGVjb2RpbmcgaGFzIGZh
aWxlZC4KLSAgICBpZiAoIWRlY29kZVJlc3VsdCAmJiBtX2FsbERhdGFSZWNlaXZlZCkKLSAgICAg
ICAgc2V0RmFpbGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9YQk1JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDQ0NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9za2lhL1hCTUltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBYQk1JbWFnZURlY29kZXJfaAotI2RlZmluZSBYQk1JbWFnZURlY29k
ZXJfaAotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIFhCTSBp
bWFnZSBmb3JtYXQuCi0gICAgY2xhc3MgWEJNSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVj
b2RlciB7Ci0gICAgcHVibGljOgotICAgICAgICBYQk1JbWFnZURlY29kZXIoKTsKLSAgICAgICAg
dmlydHVhbCB+WEJNSW1hZ2VEZWNvZGVyKCkge30KLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJ4Ym0iOyB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZl
ZCk7Ci0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBi
ZWVuIGRlY29kZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFJlc3RyaWN0cyBpbWFn
ZSBzaXplIHRvIHNvbWV0aGluZyAicmVhc29uYWJsZSIuCi0gICAgICAgIC8vIFRoaXMgcHJvdGVj
dHMgYWdhaW5zIHJpZGljdWxvdXNseSBsYXJnZSBYQk1zIGFuZCBwcmV2ZW50cyBiYWQgdGhpbmdz
Ci0gICAgICAgIC8vIGxpa2Ugb3ZlcmZsb3cgb2YgbV9iaXRzRGVjb2RlZC4KLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhEaW1lbnNpb24gPSA2NTUzNTsKLQotICAgICAgICAvLyBJbiBYMTAs
IGFuIGFycmF5IG9mIHR5cGUgInNob3J0IiBpcyB1c2VkIHRvIGRlY2xhcmUgdGhlIGltYWdlIGJp
dHMsCi0gICAgICAgIC8vIGJ1dCBpbiBYMTEsIHRoZSB0eXBlIGlzICJjaGFyIi4KLSAgICAgICAg
ZW51bSBEYXRhVHlwZSB7Ci0gICAgICAgICAgICBVbmtub3duLAotICAgICAgICAgICAgWDEwLAot
ICAgICAgICAgICAgWDExLAotICAgICAgICB9OwotCi0gICAgICAgIGJvb2wgZGVjb2RlSGVhZGVy
KCk7Ci0gICAgICAgIGJvb2wgZGVjb2RlRGF0dW0odWludDE2X3QqIHJlc3VsdCk7Ci0gICAgICAg
IGJvb2wgZGVjb2RlRGF0YSgpOwotICAgICAgICB2b2lkIGRlY29kZVhCTShib29sIHNpemVPbmx5
KTsKLQotICAgICAgICBzdGQ6OnN0cmluZyBtX3hibVN0cmluZzsgIC8vIE51bGwtdGVybWluYXRl
ZCBjb3B5IG9mIHRoZSBYQk0gZGF0YS4KLSAgICAgICAgc2l6ZV90IG1fZGVjb2RlT2Zmc2V0OyAg
ICAvLyBUaGUgY3VycmVudCBvZmZzZXQgaW4gbV94Ym1TdHJpbmcgZm9yIGRlY29kaW5nLgotICAg
ICAgICBib29sIG1fYWxsRGF0YVJlY2VpdmVkOwotICAgICAgICBib29sIG1fZGVjb2RlZEhlYWRl
cjsKLSAgICAgICAgZW51bSBEYXRhVHlwZSBtX2RhdGFUeXBlOwotICAgICAgICBpbnQgbV9iaXRz
RGVjb2RlZDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1J
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA0NDYzMCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL1hCTUltYWdlRGVjb2Rlci5jcHA6NDQ2MzApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJYQk1JbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitYQk1JbWFnZURlY29kZXI6OlhCTUltYWdlRGVjb2RlcigpCisg
ICAgOiBtX2RlY29kZU9mZnNldCgwKQorICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCisg
ICAgLCBtX2RlY29kZWRIZWFkZXIoZmFsc2UpCisgICAgLCBtX2RhdGFUeXBlKFVua25vd24pCisg
ICAgLCBtX2JpdHNEZWNvZGVkKDApCit7Cit9CisKK3ZvaWQgWEJNSW1hZ2VEZWNvZGVyOjpzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgSW1h
Z2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGJ1ZiA9IG1fZGF0YS0+YnVmZmVyKCk7CisgICAgaWYgKGJ1Zi5zaXplKCkg
PiBtX3hibVN0cmluZy5zaXplKCkpCisgICAgICAgIG1feGJtU3RyaW5nLmFwcGVuZCgmYnVmW21f
eGJtU3RyaW5nLnNpemUoKV0sIGJ1Zi5zaXplKCkgLSBtX3hibVN0cmluZy5zaXplKCkpOworCisg
ICAgbV9hbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7Cit9CisKK2Jvb2wgWEJNSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSBjb25zdAoreworICAgIC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBlaXRoZXIgKGEpIG5vdCBiZSBjb25zdCwgb3IgKGIpIG5vdCBiZSBleHBlY3RlZCB0
bworICAgIC8vIGRvIGFueXRoaW5nIHRoYXQgY2hhbmdlcyBtX3NpemVBdmFpbGFibGUuIFRoZSBw
bmcgYW5kIGpwZWcgZGVjb2RlcnMKKyAgICAvLyBnZXQgYXJvdW5kIHRoaXMgd2l0aCBjYWxsYmFj
a3MgZnJvbSBleHRlcm5hbCBsaWJyYXJpZXMuCisgICAgLy8KKyAgICAvLyBGSVhNRTogRmluZCBv
dXQgaWYgd2UgY2FuIHBhdGNoIHdlYmtpdCB0byB0YWtlIGNhcmUgb2YgdGhpcy4KKyAgICBpZiAo
IUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgIW1fZmFpbGVkKQorICAgICAgICBj
b25zdF9jYXN0PFhCTUltYWdlRGVjb2Rlcio+KHRoaXMpLT5kZWNvZGVYQk0odHJ1ZSk7CisKKyAg
ICByZXR1cm4gIW1fZmFpbGVkICYmIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7Cit9
CisKK1JHQkEzMkJ1ZmZlciogWEJNSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90IGluZGV4KQoreworICAgIGlmIChpbmRleCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNh
Y2hlLnJlc2l6ZSgxKTsKKworICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBzaXplIGlmIHdlIGRv
bid0IGhhdmUgaXQgeWV0LgorICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KSkKKyAgICAgICAgZGVjb2RlWEJNKHRydWUpOworICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhl
IGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KKyAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoIWZhaWxlZCgpICYmIEltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCkKKyAgICAgICAgJiYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lRW1wdHkpKSB7CisgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgICAgIG1fZmFpbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlci5zZXRTdGF0
dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworCisgICAgICAgIC8vIEZvciBYQk1zLCB0
aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCisgICAgICAgIGJ1ZmZlci5z
ZXRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CisgICAgfQorICAgICAgICAKKyAg
ICAvLyBLZWVwIHRyeWluZyB0byBkZWNvZGUgdW50aWwgd2UndmUgZ290IHRoZSBlbnRpcmUgaW1h
Z2UuCisgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlh
bCkKKyAgICAgICAgZGVjb2RlWEJNKGZhbHNlKTsKKworICAgIHJldHVybiAmYnVmZmVyOworfQor
Citib29sIFhCTUltYWdlRGVjb2Rlcjo6ZGVjb2RlSGVhZGVyKCkKK3sKKyAgICBBU1NFUlQobV9k
ZWNvZGVPZmZzZXQgPD0gbV94Ym1TdHJpbmcuc2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fZGVjb2Rl
ZEhlYWRlcik7CisKKyAgICBjb25zdCBjaGFyKiBpbnB1dCA9IG1feGJtU3RyaW5nLmNfc3RyKCk7
CisKKyAgICAvLyBBdCBsZWFzdCAyICIjZGVmaW5lIDxzdHJpbmc+IDx1bnNpZ25lZD4iIHNlcXVl
bmNlcyBhcmUgcmVxdWlyZWQuIFRoZXNlCisgICAgLy8gc3BlY2lmeSB0aGUgd2lkdGggYW5kIGhl
aWdodCBvZiB0aGUgaW1hZ2UuCisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgaWYgKCFJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIGludCBjb3VudDsKKyAgICAg
ICAgaWYgKHNzY2FuZigmaW5wdXRbbV9kZWNvZGVPZmZzZXRdLCAiI2RlZmluZSAlKnMgJWkgI2Rl
ZmluZSAlKnMgJWklbiIsCisgICAgICAgICAgICAgICAgICAgJndpZHRoLCAmaGVpZ2h0LCAmY291
bnQpICE9IDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gVGhlIHdp
ZHRoIGFuZCBoZWlnaHQgbmVlZCB0byBmb2xsb3cgc29tZSBydWxlcy4KKyAgICAgICAgaWYgKHdp
ZHRoIDwgMCB8fCB3aWR0aCA+IG1heERpbWVuc2lvbiB8fCBoZWlnaHQgPCAwIHx8IGhlaWdodCA+
IG1heERpbWVuc2lvbikgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zLCBkZWNvZGlu
ZyBzaG91bGQgbm90IGNvbnRpbnVlLgorICAgICAgICAgICAgc2V0RmFpbGVkKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXNldFNpemUod2lk
dGgsIGhlaWdodCkpIHsKKyAgICAgICAgICAgIHNldEZhaWxlZCgpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fZGVjb2RlT2Zmc2V0ICs9IGNvdW50Owor
ICAgICAgICBBU1NFUlQobV9kZWNvZGVPZmZzZXQgPD0gbV94Ym1TdHJpbmcuc2l6ZSgpKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSk7CisKKyAg
ICAvLyBOb3cgd2UncmUgbG9va2luZyBmb3Igc29tZXRoaW5nIHRoYXQgdGVsbHMgdXMgdGhhdCB3
ZSd2ZSBzZWVuIGFsbCBvZiB0aGUKKyAgICAvLyAiI2RlZmluZSA8c3RyaW5nPiA8dW5zaWduZWQ+
IiBzZXF1ZW5jZXMgdGhhdCB3ZSdyZSBnb2luZyB0by4gTW96aWxsYQorICAgIC8vIGp1c3QgbG9v
a3MgZm9yICIgY2hhciAiIG9yICIgc2hvcnQgIi4gV2UnbGwgZG8gdGhlIHNhbWUuCisgICAgaWYg
KG1fZGF0YVR5cGUgPT0gVW5rbm93bikgeworICAgICAgICBjb25zdCBjaGFyKiB4MTFoaW50ID0g
IiBjaGFyICI7CisgICAgICAgIGNvbnN0IGNoYXIqIHgxMUhpbnRMb2NhdGlvbiA9IHN0cnN0cigm
aW5wdXRbbV9kZWNvZGVPZmZzZXRdLCB4MTFoaW50KTsKKyAgICAgICAgaWYgKHgxMUhpbnRMb2Nh
dGlvbikgeworICAgICAgICAgICAgbV9kYXRhVHlwZSA9IFgxMTsKKyAgICAgICAgICAgIG1fZGVj
b2RlT2Zmc2V0ICs9ICgoeDExSGludExvY2F0aW9uIC0gJmlucHV0W21fZGVjb2RlT2Zmc2V0XSkg
KyBzdHJsZW4oeDExaGludCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3Qg
Y2hhciogeDEwaGludCA9ICIgc2hvcnQgIjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHgxMEhp
bnRMb2NhdGlvbiA9IHN0cnN0cigmaW5wdXRbbV9kZWNvZGVPZmZzZXRdLCB4MTBoaW50KTsKKyAg
ICAgICAgICAgIGlmICh4MTBIaW50TG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICBtX2RhdGFU
eXBlID0gWDEwOworICAgICAgICAgICAgICAgIG1fZGVjb2RlT2Zmc2V0ICs9ICgoeDEwSGludExv
Y2F0aW9uIC0gJmlucHV0W21fZGVjb2RlT2Zmc2V0XSkgKyBzdHJsZW4oeDEwaGludCkpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChtX2RlY29kZU9mZnNldCA8PSBtX3hibVN0cmluZy5zaXplKCkpOwor
ICAgIH0KKworICAgIC8vIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBkYXRhLiBBZ2Fpbiwgd2UgZG8g
d2hhdCBtb3ppbGxhIGRvZXMgYW5kIGp1c3QKKyAgICAvLyBsb29rIGZvciBhICd7JyBpbiB0aGUg
aW5wdXQuCisgICAgY29uc3QgY2hhciogZm91bmQgPSBzdHJjaHIoJmlucHV0W21fZGVjb2RlT2Zm
c2V0XSwgJ3snKTsKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBBZHZhbmNlIHRvIGNoYXJhY3RlciBhZnRlciB0aGUgJ3snCisgICAgbV9kZWNvZGVPZmZz
ZXQgKz0gKChmb3VuZCAtICZpbnB1dFttX2RlY29kZU9mZnNldF0pICsgMSk7CisgICAgQVNTRVJU
KG1fZGVjb2RlT2Zmc2V0IDw9IG1feGJtU3RyaW5nLnNpemUoKSk7CisgICAgbV9kZWNvZGVkSGVh
ZGVyID0gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBUaGUgZGF0YSBpbiBhbiBY
Qk0gZmlsZSBpcyBwcm92aWRlZCBhcyBhbiBhcnJheSBvZiBlaXRoZXIgImNoYXIiIG9yICJzaG9y
dCIKKy8vIHZhbHVlcy4gVGhlc2UgdmFsdWVzIGFyZSBkZWNvZGVkIG9uZSBhdCBhIHRpbWUgdXNp
bmcgc3RydG91bCgpIGFuZCB0aGUgYml0cworLy8gYXJlIHVzZWQgdG8gc2V0IHRoZSBhbHBoYSB2
YWx1ZSBmb3IgdGhlIGltYWdlLgorLy8KKy8vIFRoZSB2YWx1ZSBmb3IgdGhlIGNvbG9yIGlzIGFs
d2F5cyBzZXQgdG8gUkdCKDAsMCwwKSwgdGhlIGFscGhhIHZhbHVlIHRha2VzCisvLyBjYXJlIG9m
IHdoZXRoZXIgb3Igbm90IHRoZSBwaXhlbCBzaG93cyB1cC4KKy8vCisvLyBTaW5jZSB0aGUgZGF0
YSBtYXkgYXJyaXZlIGluIGNodW5rcywgYW5kIG1hbnkgcHJlZml4ZXMgb2YgdmFsaWQgbnVtYmVy
cyBhcmUKKy8vIHRoZW1zZWx2ZXMgdmFsaWQgbnVtYmVycywgdGhpcyBjb2RlIG5lZWRzIHRvIGNo
ZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorLy8gdmFsdWUgaXMgbm90IHRydW5jYXRlZC4gVGhp
cyBpcyBkb25lIGJ5IGNvbnN1bWluZyBzcGFjZSBhZnRlciB0aGUgdmFsdWUKKy8vIHJlYWQgdW50
aWwgYSAnLCcgb3IgYSAnfScgb2NjdXJzLiBJbiBhIHZhbGlkIFhCTSwgb25lIG9mIHRoZXNlIGNo
YXJhY3RlcnMKKy8vIHdpbGwgb2NjdXIgYWZ0ZXIgZWFjaCB2YWx1ZS4KKy8vCisvLyBUaGUgY2hl
Y2tzIGFmdGVyIHN0cnRvdWwgYXJlIGJhc2VkIG9uIE1vemlsbGEncyBuc1hCTURlY29kZXIuY3Bw
LgorYm9vbCBYQk1JbWFnZURlY29kZXI6OmRlY29kZURhdHVtKHVpbnQxNl90KiByZXN1bHQpCit7
CisgICAgY29uc3QgY2hhciogaW5wdXQgPSBtX3hibVN0cmluZy5jX3N0cigpOworICAgIGNoYXIq
IGVuZFB0cjsKKyAgICBjb25zdCB1aW50MTZfdCB2YWx1ZSA9IHN0cnRvdWwoJmlucHV0W21fZGVj
b2RlT2Zmc2V0XSwgJmVuZFB0ciwgMCk7CisKKyAgICAvLyBFbmQgb2YgaW5wdXQgb3IgY291bGRu
J3QgZGVjb2RlIGFueXRoaW5nLCBjYW4ndCBnbyBhbnkgZnVydGhlci4KKyAgICBpZiAoZW5kUHRy
ID09ICZpbnB1dFttX2RlY29kZU9mZnNldF0gfHwgISplbmRQdHIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFBvc3NpYmx5IGEgaGV4IHZhbHVlIHRydW5jYXRlZCBhdCAiMHgiLiBO
ZWVkIG1vcmUgZGF0YS4KKyAgICBpZiAodmFsdWUgPT0gMCAmJiAoKmVuZFB0ciA9PSAneCcgfHwg
KmVuZFB0ciA9PSAnWCcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTa2lwIHdo
aXRlc3BhY2UKKyAgICB3aGlsZSAoKmVuZFB0ciAmJiBpc3NwYWNlKCplbmRQdHIpKQorICAgICAg
ICArK2VuZFB0cjsKKworICAgIC8vIE91dCBvZiBpbnB1dCwgZG9uJ3Qga25vdyB3aGF0IGNvbWVz
IG5leHQuCisgICAgaWYgKCEqZW5kUHRyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBJZiB0aGUgbmV4dCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgbm90IG9uZSBvZiB0aGVz
ZSwgaXQncyBhbiBlcnJvci4KKyAgICAvLyBFdmVyeSB2YWxpZCBlbnRyeSBpbiB0aGUgZGF0YSBh
cnJheSBuZWVkcyB0byBiZSBmb2xsb3dlZCBieSAnLCcgb3IgJ30nLgorICAgIGlmICgqZW5kUHRy
ICE9ICcsJyAmJiAqZW5kUHRyICE9ICd9JykgeworICAgICAgICBzZXRGYWlsZWQoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBh
IHZhbHVlLgorICAgICpyZXN1bHQgPSB2YWx1ZTsKKworICAgIC8vIFNraXAgb3ZlciB0aGUgZGVj
b2RlZCB2YWx1ZSBwbHVzIHRoZSBkZWxpbWl0ZXIgKCcsJyBvciAnfScpLgorICAgIG1fZGVjb2Rl
T2Zmc2V0ICs9ICgoZW5kUHRyIC0gJmlucHV0W21fZGVjb2RlT2Zmc2V0XSkgKyAxKTsKKyAgICBB
U1NFUlQobV9kZWNvZGVPZmZzZXQgPD0gbV94Ym1TdHJpbmcuc2l6ZSgpKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFhCTUltYWdlRGVjb2Rlcjo6ZGVjb2RlRGF0YSgpCit7CisgICAg
QVNTRVJUKG1fZGVjb2RlT2Zmc2V0IDw9IG1feGJtU3RyaW5nLnNpemUoKSk7CisgICAgQVNTRVJU
KG1fZGVjb2RlZEhlYWRlciAmJiAhbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSk7CisKKyAg
ICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworCisgICAgQVNT
RVJUKGZyYW1lLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKworICAg
IGNvbnN0IGludCBiaXRzUGVyUm93ID0gc2l6ZSgpLndpZHRoKCk7CisKKyAgICBBU1NFUlQobV9k
YXRhVHlwZSAhPSBVbmtub3duKTsKKworICAgIHdoaWxlIChtX2JpdHNEZWNvZGVkIDwgKHNpemUo
KS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICB1aW50MTZfdCB2YWx1ZTsK
KyAgICAgICAgaWYgKCFkZWNvZGVEYXR1bSgmdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGludCB4ID0gbV9iaXRzRGVjb2RlZCAlIGJpdHNQZXJSb3c7CisgICAg
ICAgIGNvbnN0IGludCB5ID0gbV9iaXRzRGVjb2RlZCAvIGJpdHNQZXJSb3c7CisKKyAgICAgICAg
Ly8gSG93IG1hbnkgYml0cyB3aWxsIGJlIHdyaXR0ZW4/CisgICAgICAgIGNvbnN0IGludCBiaXRz
ID0gc3RkOjptaW4oYml0c1BlclJvdyAtIHgsIChtX2RhdGFUeXBlID09IFgxMSkgPyA4IDogMTYp
OworCisgICAgICAgIC8vIE9ubHkgdGhlIGFscGhhIGNoYW5uZWwgbWF0dGVycyBoZXJlLCBzbyB0
aGUgY29sb3IgdmFsdWVzIGFyZSBhbHdheXMKKyAgICAgICAgLy8gc2V0IHRvIDAuCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYml0czsgKytpKQorICAgICAgICAgICAgZnJhbWUuc2V0UkdC
QSh4KyssIHksIDAsIDAsIDAsIHZhbHVlICYgKDEgPDwgaSkgPyAyNTUgOiAwKTsKKworICAgICAg
ICBtX2JpdHNEZWNvZGVkICs9IGJpdHM7CisgICAgfQorCisgICAgZnJhbWUuc2V0U3RhdHVzKFJH
QkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
RGVjb2RlIGFzIG11Y2ggYXMgd2UgY2FuIG9mIHRoZSBYQk0gZmlsZS4KK3ZvaWQgWEJNSW1hZ2VE
ZWNvZGVyOjpkZWNvZGVYQk0oYm9vbCBzaXplT25seSkKK3sKKyAgICBpZiAoZmFpbGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgZGVjb2RlUmVzdWx0ID0gZmFsc2U7CisKKyAgICBp
ZiAoIW1fZGVjb2RlZEhlYWRlcikKKyAgICAgICAgZGVjb2RlUmVzdWx0ID0gZGVjb2RlSGVhZGVy
KCk7CisKKyAgICBpZiAobV9kZWNvZGVkSGVhZGVyICYmICFzaXplT25seSkKKyAgICAgICAgZGVj
b2RlUmVzdWx0ID0gZGVjb2RlRGF0YSgpOworCisgICAgLy8gVGhlIGhlYWRlciBvciB0aGUgZGF0
YSBjb3VsZCBub3QgYmUgZGVjb2RlZCwgYnV0IHRoZXJlIGlzIG5vIG1vcmUKKyAgICAvLyBkYXRh
OiBkZWNvZGluZyBoYXMgZmFpbGVkLgorICAgIGlmICghZGVjb2RlUmVzdWx0ICYmIG1fYWxsRGF0
YVJlY2VpdmVkKQorICAgICAgICBzZXRGYWlsZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94
Ym0vWEJNSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NjMwKQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3NraWEvWEJNSW1hZ2VEZWNvZGVyLmg6NDQ2MzApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgWEJNSW1hZ2VEZWNvZGVy
X2gKKyNkZWZpbmUgWEJNSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNs
dWRlICJJbWFnZURlY29kZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gVGhp
cyBjbGFzcyBkZWNvZGVzIHRoZSBYQk0gaW1hZ2UgZm9ybWF0LgorICAgIGNsYXNzIFhCTUltYWdl
RGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgWEJN
SW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIHZpcnR1YWwgflhCTUltYWdlRGVjb2RlcigpIHt9CisK
KyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVy
biAieGJtIjsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0
aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4KKyAgICAgICAgdmlydHVh
bCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1
ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICAvLyBSZXN0cmljdHMgaW1hZ2Ugc2l6ZSB0byBzb21ldGhpbmcgInJlYXNvbmFibGUi
LgorICAgICAgICAvLyBUaGlzIHByb3RlY3RzIGFnYWlucyByaWRpY3Vsb3VzbHkgbGFyZ2UgWEJN
cyBhbmQgcHJldmVudHMgYmFkIHRoaW5ncworICAgICAgICAvLyBsaWtlIG92ZXJmbG93IG9mIG1f
Yml0c0RlY29kZWQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4RGltZW5zaW9uID0gNjU1
MzU7CisKKyAgICAgICAgLy8gSW4gWDEwLCBhbiBhcnJheSBvZiB0eXBlICJzaG9ydCIgaXMgdXNl
ZCB0byBkZWNsYXJlIHRoZSBpbWFnZSBiaXRzLAorICAgICAgICAvLyBidXQgaW4gWDExLCB0aGUg
dHlwZSBpcyAiY2hhciIuCisgICAgICAgIGVudW0gRGF0YVR5cGUgeworICAgICAgICAgICAgVW5r
bm93biwKKyAgICAgICAgICAgIFgxMCwKKyAgICAgICAgICAgIFgxMSwKKyAgICAgICAgfTsKKwor
ICAgICAgICBib29sIGRlY29kZUhlYWRlcigpOworICAgICAgICBib29sIGRlY29kZURhdHVtKHVp
bnQxNl90KiByZXN1bHQpOworICAgICAgICBib29sIGRlY29kZURhdGEoKTsKKyAgICAgICAgdm9p
ZCBkZWNvZGVYQk0oYm9vbCBzaXplT25seSk7CisKKyAgICAgICAgc3RkOjpzdHJpbmcgbV94Ym1T
dHJpbmc7ICAvLyBOdWxsLXRlcm1pbmF0ZWQgY29weSBvZiB0aGUgWEJNIGRhdGEuCisgICAgICAg
IHNpemVfdCBtX2RlY29kZU9mZnNldDsgICAgLy8gVGhlIGN1cnJlbnQgb2Zmc2V0IGluIG1feGJt
U3RyaW5nIGZvciBkZWNvZGluZy4KKyAgICAgICAgYm9vbCBtX2FsbERhdGFSZWNlaXZlZDsKKyAg
ICAgICAgYm9vbCBtX2RlY29kZWRIZWFkZXI7CisgICAgICAgIGVudW0gRGF0YVR5cGUgbV9kYXRh
VHlwZTsKKyAgICAgICAgaW50IG1fYml0c0RlY29kZWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYK
</data>
<flag name="review"
          id="15922"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31234</attachid>
            <date>2009-06-13 06:54:17 -0700</date>
            <delta_ts>2009-06-13 08:05:18 -0700</delta_ts>
            <desc>Free ImageDecoder.h from any knowledge about graphics libraries</desc>
            <filename>0001-2009-06-13-Holger-Hans-Peter-Freyther-zecke-selfish..patch</filename>
            <type>text/plain</type>
            <size>3806</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA3YWRkMzNhNTE4NzFhNWFkNTVlMjZmODA3YmQwYmUzMzJmYjdhOTljIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFNhdCwgMTMgSnVuIDIwMDkgMTU6NDY6MjkgKzAyMDAKU3ViamVjdDog
W1BBVENIXSAyMDA5LTA2LTEzICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNl
bGZpc2gub3JnPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgd2VyZSBkZXNpZ25lZCB0byB3b3JrIG9uIGJ1ZmZlcnMg
YW5kCiAgICAgICAgc2hvdWxkIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IGFueSBncmFwaGljcyBs
aWJyYXJ5LiBUaGlzIG1ha2VzCiAgICAgICAgdGhlIGRlY29kZXJzIHBvcnRhYmxlIGFnYWluLgoK
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwOgog
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysrKysr
KysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcCAg
IHwgICAgNiArKysrKy0KIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmggICAgIHwgICAxNyAtLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxNyBp
bnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVkMzFlYTkuLjdhOTljNzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMDktMDYtMTMgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2Vs
ZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgd2VyZSBkZXNpZ25lZCB0byB3b3JrIG9uIGJ1ZmZl
cnMgYW5kCisgICAgICAgIHNob3VsZCBub3Qga25vdyBhbnl0aGluZyBhYm91dCBhbnkgZ3JhcGhp
Y3MgbGlicmFyeS4gVGhpcyBtYWtlcworICAgICAgICB0aGUgZGVjb2RlcnMgcG9ydGFibGUgYWdh
aW4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorCiAy
MDA5LTA2LTEyICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3Jn
PgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgUXQuIEFmdGVyIHJlY2VudCBJbWFnZURlb2NkZXIu
aCBjaGFuZ2VzLiBJIHdhbnQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwCmluZGV4IGRlMTZkZWEuLmNjMzhiZDEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNw
cApAQCAtMTg4LDcgKzE4OCwxMSBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRl
RnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoIXNpemUoKS5oZWlnaHQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7
CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKCh1bnNpZ25l
ZCBjaGFyKilidWZmZXItPmJ5dGVzKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLmhlaWdodCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCku
d2lkdGgoKSo0KTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChzaXplX3QgaW5kZXgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCA0NjBlZDcyLi4xZmU0MzgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTM0LDEwICszNCw2IEBACiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIFBMQVRG
T1JNKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0aGUgZGVj
b2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMiBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0IGFs
bApAQCAtMTI5LDE5ICsxMjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0jaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgICAgIC8v
IFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJu
cyBhIHBvaW50ZXIKLSAgICAgICAgLy8gdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRh
dGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieQotICAgICAgICAvLyB0aGUgQml0bWFw
SW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0YTo6Y2xlYXIoKS4KLSAgICAgICAgTmF0aXZlSW1h
Z2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+
KAotICAgICAgICAgICAgICAgICAgICBtX2J5dGVzLmRhdGEoKSkpLCBDQUlST19GT1JNQVRfQVJH
QjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwKLSAgICAgICAgICAgICAgICB3aWR0aCgpICogc2l6ZW9m
KFBpeGVsRGF0YSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAgICBib29sIGhhc0FscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQogICAgICAgICBjb25zdCBJbnRSZWN0JiBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0tIAoxLjYuMy4xCgo=
</data>
<flag name="review"
          id="15933"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31237</attachid>
            <date>2009-06-13 08:05:18 -0700</date>
            <delta_ts>2009-06-13 11:22:48 -0700</delta_ts>
            <desc>Free ImageDecoder.h from any knowledge about graphics libraries (2nd attempt)</desc>
            <filename>0001-2009-06-13-Holger-Hans-Peter-Freyther-zecke-selfish..patch</filename>
            <type>text/plain</type>
            <size>4182</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA2N2Y1OGIwNTkwYzZkMDJkOTM0NzAyZjViZTgzZDQxNmFhMTY4OGZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFNhdCwgMTMgSnVuIDIwMDkgMTU6NDY6MjkgKzAyMDAKU3ViamVjdDog
W1BBVENIXSAyMDA5LTA2LTEzICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNl
bGZpc2gub3JnPgoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgd2VyZSBkZXNpZ25lZCB0byB3b3JrIG9uIGJ1ZmZlcnMg
YW5kCiAgICAgICAgc2hvdWxkIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IGFueSBncmFwaGljcyBs
aWJyYXJ5LiBUaGlzIG1ha2VzCiAgICAgICAgdGhlIGRlY29kZXJzIHBvcnRhYmxlIGFnYWluLgoK
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8uY3BwOgog
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgotLS0KIFdlYkNvcmUv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArKysrKysr
KysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcCAg
IHwgICAgNiArKysrKy0KIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmggICAgIHwgICAxOSArKy0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDE5
IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQzMWVhOS4uN2E5OWM3OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAwOS0wNi0xMyAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNrZUBz
ZWxmaXNoLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycyB3ZXJlIGRlc2lnbmVkIHRvIHdvcmsgb24gYnVm
ZmVycyBhbmQKKyAgICAgICAgc2hvdWxkIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IGFueSBncmFw
aGljcyBsaWJyYXJ5LiBUaGlzIG1ha2VzCisgICAgICAgIHRoZSBkZWNvZGVycyBwb3J0YWJsZSBh
Z2Fpbi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fp
cm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRl
eCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisK
IDIwMDktMDYtMTIgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5v
cmc+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBRdC4gQWZ0ZXIgcmVjZW50IEltYWdlRGVvY2Rl
ci5oIGNoYW5nZXMuIEkgd2FudApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VTb3VyY2VDYWlyby5jcHAKaW5kZXggZGUxNmRlYS4uY2FhYWU4OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZVNvdXJjZUNhaXJvLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlU291cmNlQ2Fpcm8u
Y3BwCkBAIC0xODgsNyArMTg4LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVh
dGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmICghc2l6ZSgpLmhlaWdodCgpKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2Uo
KTsKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEocmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYnVmZmVyLT5ieXRlcygpLmRhdGEoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9B
UkdCMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emUoKS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplKCkuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJHQkEzMkJ1ZmZlcjo6UGl4ZWxE
YXRhKSk7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKaW5kZXggNDYwZWQ3Mi4uYzc4ODg1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShD
QUlSTykKLSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIC8vIFRoZSBSR0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQg
aW1hZ2UgZGF0YSBpbiBSR0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwKQEAg
LTk3LDYgKzkzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgc2V0SGFzQWxw
aGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgICAgIH0KIAorICAgICAgICBWZWN0b3I8UGl4ZWxE
YXRhPiYgYnl0ZXMoKSB7IHJldHVybiBtX2J5dGVzOyB9CisKICAgICAgICAgLy8gVGhpcyBmdW5j
dGlvbiBjb3BpZXMgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUgc2Ft
ZQogICAgICAgICAvLyBYLWNvb3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8g
YnV0IG5vdCBpbmNsdWRpbmcgZW5kWS4KICAgICAgICAgLy8KQEAgLTEyOSwxOSArMTI3LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IAotI2lmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICAvLyBUbyBiZSB1c2VkIGJ5IEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoKS4gIFJldHVybnMgYSBwb2ludGVyCi0gICAgICAgIC8v
IHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLiAgVGhpcyBwb2ludGVyIHdpbGwg
YmUgb3duZWQgYnkKLSAgICAgICAgLy8gdGhlIEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbiBGcmFt
ZURhdGE6OmNsZWFyKCkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPigKLSAgICAgICAgICAgICAgICAgICAg
bV9ieXRlcy5kYXRhKCkpKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCks
Ci0gICAgICAgICAgICAgICAgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKTsKLSAgICAgICAg
fQotI2VuZGlmCi0KICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
QWxwaGE7IH0KICAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0
YXR1czsgfQotLSAKMS42LjMuMQoK
</data>
<flag name="review"
          id="15936"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31241</attachid>
            <date>2009-06-13 11:22:48 -0700</date>
            <delta_ts>2009-06-13 11:56:11 -0700</delta_ts>
            <desc>part nine (Landed r44652)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14635</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMDYtMTMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IG5pbmUK
KyAgICAgICAgRmFjdG9yIENhaXJvLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG91dCBvZiBJbWFn
ZURlY29kZXIuaCBpbnRvCisgICAgICAgIEltYWdlRGVjb2RlckNhaXJvLmNwcC4gIEFkZCBzb21l
IGNvbW1lbnRzIHRvIGZ1bmN0aW9ucyBkZWNsYXJlZAorICAgICAgICBpbiBJbWFnZURlY29kZXIu
aC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Onplcm9GaWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVm
ZmVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRp
dmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Omhhc0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0SGFzQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmhlaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmdldEFkZHIpOgorCiAyMDA5LTA2LTEz
ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDQ2NDkpCisrKyBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODY0LDYgKzE4NjQsNyBAQCB3ZWJjb3JlZ3Rr
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlUmVhZGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8v
SW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDQ2NDkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MjUyLDYgKzYyNTIsMzggQEAKIAkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsdGVyDQorCQkJ
CQlOYW1lPSJjYWlybyINCisJCQkJCT4NCisJCQkJCTxGaWxlDQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxpbWFnZS1kZWNvZGVyc1xjYWlyb1xJbWFnZURlY29kZXJDYWlyby5jcHAi
DQorCQkJCQkJPg0KKwkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQkJCT4NCisJ
CQkJCQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCS8+
DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24N
CisJCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiDQorCQkJCQkJCT4NCisJCQkJCQkJPFRvb2wNCisJCQkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQorCQkJCQkJCS8+DQorCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2luMzIi
DQorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJCQk+DQorCQkJCQkJCTxU
b29sDQorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQkvPg0KKwkJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8L0ZpbGU+DQorCQkJCTwvRmlsdGVyPg0KKwkJ
CQk8RmlsdGVyDQogCQkJCQlOYW1lPSJnaWYiDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gNDQ2NDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShDQUlSTykK
LSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IC8vIFRoZSBSR0JBMzJCdWZmZXIgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2Ug
ZGF0YSBpbiBSR0JBMzIgZm9ybWF0LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwKQEAgLTU1LDE0
ICs1MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH07CiAgICAgICAgIHR5cGVk
ZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCi0gICAgICAgIFJHQkEzMkJ1ZmZlcigpCi0gICAgICAg
ICAgICA6IG1faGFzQWxwaGEoZmFsc2UpCi0gICAgICAgICAgICAsIG1fc3RhdHVzKEZyYW1lRW1w
dHkpCi0gICAgICAgICAgICAsIG1fZHVyYXRpb24oMCkKLSAgICAgICAgICAgICwgbV9kaXNwb3Nh
bE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICAgICB7Ci0gICAgICAgIH0gCisgICAg
ICAgIFJHQkEzMkJ1ZmZlcigpOwogCisgICAgICAgIC8vIEZvciBiYWNrZW5kcyB3aGljaCByZWZj
b3VudCB0aGVpciBkYXRhLCB0aGlzIGNvbnN0cnVjdG9yIGRvZXNuJ3QgbmVlZAorICAgICAgICAv
LyB0byBjcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0
aGUgcmVmIGNvdW50LgorICAgICAgICAvLwogICAgICAgICAvLyBUaGlzIGV4aXN0cyBiZWNhdXNl
IEltYWdlRGVjb2RlciBrZWVwcyBhIFZlY3RvcjxSR0JBMzJCdWZmZXI+LCBhbmQKICAgICAgICAg
Ly8gVmVjdG9yIHJlcXVpcmVzIHRoaXMgY29uc3RydWN0b3IuCiAgICAgICAgIFJHQkEzMkJ1ZmZl
cihjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQpAQCAtNzAsMzggKzYzLDIwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG9wZXJhdG9yPShvdGhlcik7CiAgICAgICAgIH0KIAot
ICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9ieXRlcy5jbGVh
cigpOwotICAgICAgICAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwotICAgICAgICAgICAgLy8g
Tk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNh
Y2hlKCkKLSAgICAgICAgICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEs
IGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQotICAgICAgICAgICAgLy8gaW5pdEZyYW1lQnVmZmVy
KCkgYW5kIGZyYW1lQ29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCi0gICAgICAgICAg
ICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgemVyb0ZpbGwoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2J5dGVz
LmZpbGwoMCk7Ci0gICAgICAgICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSBpbWFnZSBk
YXRhIGluIHxvdGhlcnwsIHNvIHRoZQotICAgICAgICAvLyB0d28gaW1hZ2VzIGNhbiBiZSBtb2Rp
ZmllZCBpbmRlcGVuZGVudGx5LgotICAgICAgICB2b2lkIGNvcHlCaXRtYXBEYXRhKGNvbnN0IFJH
QkEzMkJ1ZmZlciYgb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzID09ICZv
dGhlcikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIG1fYnl0ZXMgPSBv
dGhlci5tX2J5dGVzOwotICAgICAgICAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvcGllcyBbKHN0YXJ0WCwg
c3RhcnRZKSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZSBzYW1lCi0gICAgICAgIC8vIFgtY29vcmRp
bmF0ZXMgb24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZyBlbmRZ
LgotICAgICAgICAvLwotICAgICAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNh
bml0eS1jaGVjayBpdHMgYXJndW1lbnRzISAgQ2FsbGVycwotICAgICAgICAvLyBNVVNUIG5vdCBw
YXNzIGludmFsaWQgdmFsdWVzIG9yIHRoaXMgd2lsbCBjb3JydXB0IG1lbW9yeS4KKyAgICAgICAg
Ly8gRGVsZXRlcyB0aGUgcGl4ZWwgZGF0YSBlbnRpcmVseTsgdXNlZCBieSBJbWFnZURlY29kZXIg
dG8gc2F2ZSBtZW1vcnkKKyAgICAgICAgLy8gd2hlbiB3ZSBubyBsb25nZXIgbmVlZCB0byBkaXNw
bGF5IGEgZnJhbWUgYW5kIG9ubHkgbmVlZCBpdHMgbWV0YWRhdGEuCisgICAgICAgIHZvaWQgY2xl
YXIoKTsKKworICAgICAgICAvLyBaZXJvZXMgdGhlIHBpeGVsIGRhdGEgaW4gdGhlIGJ1ZmZlciwg
c2V0dGluZyBpdCB0byBmdWxseS10cmFuc3BhcmVudC4KKyAgICAgICAgdm9pZCB6ZXJvRmlsbCgp
OworCisgICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSBpbiB8
b3RoZXJ8LCBzbyB0aGUgdHdvIGltYWdlcworICAgICAgICAvLyBjYW4gYmUgbW9kaWZpZWQgaW5k
ZXBlbmRlbnRseS4KKyAgICAgICAgdm9pZCBjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZm
ZXImIG90aGVyKTsKKworICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFy
dFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUKKyAgICAgICAgLy8gc2FtZSBYLWNv
b3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcK
KyAgICAgICAgLy8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgs
IGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOwpAQCAtMTE0LDQxICs4OSwyNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBlbmRZKSwg
c3RhcnRBZGRyLCByb3dCeXRlcyk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBNdXN0IGJlIGNh
bGxlZCBiZWZvcmUgYW55IHBpeGVscyBhcmUgd3JpdHRlbi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgot
ICAgICAgICAvLyBzdWNjZXNzLCBmYWxzZSBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMu
Ci0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2Nh
dGlvbiBmYWlsdXJlIGlmIHRoZQotICAgICAgICAgICAgLy8gcmVxdWVzdGVkIHNpemUgd2FzIHRv
byBiaWcuLi4KLSAgICAgICAgICAgIG1fYnl0ZXMucmVzaXplKHdpZHRoICogaGVpZ2h0KTsKLSAg
ICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAgICAgICAg
IC8vIFplcm8gdGhlIGltYWdlLgotICAgICAgICAgICAgemVyb0ZpbGwoKTsKLQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gQWxsb2NhdGVzIHNwYWNlIGZv
ciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGl4ZWxzCisgICAg
ICAgIC8vIGFyZSB3cml0dGVuLiBXaWxsIHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlm
IHRoZSBtZW1vcnkKKyAgICAgICAgLy8gYWxsb2NhdGlvbiBmYWlscy4gIENhbGxpbmcgdGhpcyBt
dWx0aXBsZSB0aW1lcyBpcyB1bmRlZmluZWQgYW5kIG1heQorICAgICAgICAvLyBsZWFrIG1lbW9y
eS4KKyAgICAgICAgYm9vbCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSNpZiBQ
TEFURk9STShDQUlSTykKICAgICAgICAgLy8gVG8gYmUgdXNlZCBieSBJbWFnZVNvdXJjZTo6Y3Jl
YXRlRnJhbWVBdEluZGV4KCkuICBSZXR1cm5zIGEgcG9pbnRlcgogICAgICAgICAvLyB0byB0aGUg
dW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4gIFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVk
IGJ5CiAgICAgICAgIC8vIHRoZSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4gRnJhbWVEYXRhOjpj
bGVhcigpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKAotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4oCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZXMu
ZGF0YSgpKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLAotICAgICAg
ICAgICAgICAgIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7Ci0gICAgICAgIH0KLSNlbmRp
ZgorICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3Q7CiAKLSAg
ICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KKyAgICAg
ICAgYm9vbCBoYXNBbHBoYSgpOwogICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2Fs
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogCi0gICAgICAgIHZv
aWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkgeyBtX2hhc0FscGhhID0gYWxwaGE7IH0KKyAgICAg
ICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKICAgICAgICAgdm9pZCBzZXRSZWN0KGNv
bnN0IEludFJlY3QmIHIpIHsgbV9yZWN0ID0gcjsgfQogICAgICAgICB2b2lkIHNldFN0YXR1cyhG
cmFtZVN0YXR1cyBzKSB7IG1fc3RhdHVzID0gczsgfQogICAgICAgICB2b2lkIHNldER1cmF0aW9u
KHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQpAQCAtMTYwLDM0
ICsxMTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICAvLyBJbml0aWFsaXplIHdpdGggYW5vdGhlciBidWZmZXIuICBUaGlzIGZ1bmN0
aW9uIGRvZXNuJ3QgY3JlYXRlIGEgbmV3IGNvcHkKLSAgICAgICAgLy8gb2YgdGhlIGltYWdlIGRh
dGEsIGl0IG9ubHkgaW5jcmVhc2VzIHRoZSByZWZjb3VudCBvZiB0aGUgZXhpc3RpbmcgYml0bWFw
LgotICAgICAgICAvLwotICAgICAgICAvLyBOb3JtYWwgY2FsbGVycyBzaG91bGQgbm90IGdlbmVy
YWxseSBiZSB1c2luZyB0aGlzIGZ1bmN0aW9uLiAgSWYgeW91IHdhbnQKLSAgICAgICAgLy8gdG8g
Y3JlYXRlIGEgY29weSBvbiB3aGljaCB5b3UgY2FuIG1vZGlmeSB0aGUgaW1hZ2UgZGF0YSBpbmRl
cGVuZGVudGx5LAotICAgICAgICAvLyB1c2UgY29weUJpdG1hcERhdGEoKSBpbnN0ZWFkLgotICAg
ICAgICBSR0JBMzJCdWZmZXImIG9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgICAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsK
LSAgICAgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICAgICAgICAgIHNldEhhc0Fs
cGhhKG90aGVyLmhhc0FscGhhKCkpOwotICAgICAgICAgICAgc2V0UmVjdChvdGhlci5yZWN0KCkp
OwotICAgICAgICAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKLSAgICAgICAgICAgIHNl
dER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwotICAgICAgICAgICAgc2V0RGlzcG9zYWxNZXRo
b2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgICAgIH0KKyAgICAgICAgUkdCQTMyQnVmZmVyJiBvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVm
ZmVyJiBvdGhlcik7CiAKLSAgICAgICAgaW5saW5lIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZS53aWR0aCgpOyB9Ci0gICAgICAgIGlubGluZSBpbnQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CisgICAgICAgIGlubGluZSBpbnQgd2lkdGgoKSBjb25z
dDsKKyAgICAgICAgaW5saW5lIGludCBoZWlnaHQoKSBjb25zdDsKIAotICAgICAgICBpbmxpbmUg
UGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fYnl0ZXMuZGF0YSgpICsgKHkgKiB3aWR0aCgpKSArIHg7Ci0gICAgICAgIH0KKyAg
ICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpOwogCiAgICAgICAg
IGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25l
ZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7CkBAIC0yMDUsMTAgKzE0MSwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorI2lm
IFBMQVRGT1JNKENBSVJPKQogICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2J5dGVzOwogICAg
ICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRo
aXMgc2hvdWxkIGJlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBh
cyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KICAgICAgICAgYm9vbCBtX2hhc0FscGhhOyAgICAgIC8v
IFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBidWZmZXIgaGF2ZSB0cmFu
c3BhcmVuY3kuCisjZW5kaWYKICAgICAgICAgSW50UmVjdCBtX3JlY3Q7ICAgICAgIC8vIFRoZSBy
ZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluIHRoZSBvdmVyYWxsIGJ1
ZmZlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMg
anVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIg
dGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlRGVjb2RlckNhaXJvLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUkdC
QTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIoKQorICAgIDogbV9oYXNBbHBoYShmYWxzZSkKKyAgICAs
IG1fc3RhdHVzKEZyYW1lRW1wdHkpCisgICAgLCBtX2R1cmF0aW9uKDApCisgICAgLCBtX2Rpc3Bv
c2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCit7Cit9IAorCit2b2lkIFJHQkEzMkJ1ZmZl
cjo6Y2xlYXIoKQoreworICAgIG1fYnl0ZXMuY2xlYXIoKTsKKyAgICBtX3N0YXR1cyA9IEZyYW1l
RW1wdHk7CisgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xl
YXJGcmFtZUJ1ZmZlckNhY2hlKCkKKyAgICAvLyBjYWxscyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1h
cCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UKKyAgICAvLyBpbml0RnJhbWVCdWZmZXIo
KSBhbmQgZnJhbWVDb21wbGV0ZSgpIG1heSBzdGlsbCBuZWVkIHRvIHJlYWQKKyAgICAvLyBvdGhl
ciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KK30KKwordm9pZCBSR0JBMzJCdWZm
ZXI6Onplcm9GaWxsKCkKK3sKKyAgICBtX2J5dGVzLmZpbGwoMCk7CisgICAgbV9oYXNBbHBoYSA9
IHRydWU7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JB
MzJCdWZmZXImIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7CisgICAgc2V0SGFzQWxwaGEob3Ro
ZXIubV9oYXNBbHBoYSk7Cit9CisKK2Jvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCB3aWR0
aCwgaW50IGhlaWdodCkKK3sKKyAgICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sg
Zm9yIGFsbG9jYXRpb24gZmFpbHVyZSBpZiB0aGUKKyAgICAvLyByZXF1ZXN0ZWQgc2l6ZSB3YXMg
dG9vIGJpZy4uLgorICAgIG1fYnl0ZXMucmVzaXplKHdpZHRoICogaGVpZ2h0KTsKKyAgICBtX3Np
emUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgLy8gWmVybyB0aGUgaW1hZ2UuCisg
ICAgemVyb0ZpbGwoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitOYXRpdmVJbWFnZVB0ciBS
R0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPigKKyAgICAgICAgICAgIG1f
Ynl0ZXMuZGF0YSgpKSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLAor
ICAgICAgICB3aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOworfQorCitib29sIFJHQkEzMkJ1
ZmZlcjo6aGFzQWxwaGEoKSBjb25zdCB7CisgICAgcmV0dXJuIG1faGFzQWxwaGE7Cit9CisKK3Zv
aWQgUkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYShib29sIGFscGhhKSB7CisgICAgbV9oYXNBbHBo
YSA9IGFscGhhOworfQorCitSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNv
bnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAg
ICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICBt
X3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEob3RoZXIuaGFzQWxwaGEoKSk7
CisgICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOworICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMo
KSk7CisgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CisgICAgc2V0RGlzcG9zYWxN
ZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitp
bnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zaXplLndpZHRo
KCk7Cit9CisKK2ludCBSR0JBMzJCdWZmZXI6OmhlaWdodCgpIGNvbnN0IHsKKyAgICByZXR1cm4g
bV9zaXplLmhlaWdodCgpOworfQorCitpbmxpbmUgUGl4ZWxEYXRhKiBSR0JBMzJCdWZmZXI6Omdl
dEFkZHIoaW50IHgsIGludCB5KQoreworICAgIHJldHVybiBtX2J5dGVzLmRhdGEoKSArICh5ICog
d2lkdGgoKSkgKyB4OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31245</attachid>
            <date>2009-06-13 16:06:19 -0700</date>
            <delta_ts>2009-06-13 19:20:15 -0700</delta_ts>
            <desc>part ten (Landed r44661)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22911</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDktMDYtMTMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IHRlbgor
ICAgICAgICBNYWtlIFNraWEgdXNlIHRoZSByb290IGRpcmVjdG9yeSBJbWFnZURlY29kZXIuaCBh
bmQgZmFjdG9yIG91dCBtb3N0CisgICAgICAgIFNraWEtc3BlY2lmaWMgYml0cyBpbnRvIHNraWEv
SW1hZ2VEZWNvZGVyU2tpYS5jcHAuICBBbHNvIGZpeCBhIHBhaXIgb2YKKyAgICAgICAgc3R5bGUg
dmlvbGF0aW9ucyBpbiBJbWFnZURlY29kZXJDYWlyby5jcHAuICBUaGlzIGlzIHRoZSBsYXN0IHBh
dGNoIGZvcgorICAgICAgICB0aGlzIGJ1ZywgZXZlcnl0aGluZyBiZXlvbmQgdGhpcyBpcyBhbiBl
bmhhbmNlbWVudCByYXRoZXIgdGhhbgorICAgICAgICB1bmZvcmtpbmcuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldEhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXR1cyk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdC
QTMyQnVmZmVyOjp6ZXJvRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNv
cHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1
ZmZlcjo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6b3BlcmF0
b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6d2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpoZWlnaHQpOgorCiAyMDA5LTA2LTEzICBWaWN0b3IgV2Fu
ZyA8dmljdG9yd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlk
ZWwuICBMYW5kZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQ2NTkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCwxMSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKKyNpZiBQTEFURk9STShTS0lBKQorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tp
YS5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0aGUgZGVjb2Rl
ZCBpbWFnZSBkYXRhIGluIFJHQkEzMiBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0IGFsbApA
QCAtNDksNyArNTQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgRGlzcG9z
ZU92ZXJ3cml0ZUJnY29sb3IsICAgLy8gQ2xlYXIgZnJhbWUgdG8gdHJhbnNwYXJlbnQKICAgICAg
ICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cywgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZp
b3VzIGZyYW1lYnVmZmVyIGNvbnRlbnRzCiAgICAgICAgIH07CisjaWYgUExBVEZPUk0oU0tJQSkK
KyAgICAgICAgdHlwZWRlZiB1aW50MzJfdCBQaXhlbERhdGE7CisjZWxzZQogICAgICAgICB0eXBl
ZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKKyNlbmRpZgogCiAgICAgICAgIFJHQkEzMkJ1ZmZlcigp
OwogCkBAIC0xMDgsNyArMTE3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZv
aWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSk7CiAgICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJ
bnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KLSAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVT
dGF0dXMgcykgeyBtX3N0YXR1cyA9IHM7IH0KKyAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVT
dGF0dXMgcyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsg
bV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2Qo
RnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsg
fQogCkBAIC0xMjcsNiArMTM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAj
aWYgUExBVEZPUk0oQ0FJUk8pCiAgICAgICAgICAgICByZXR1cm4gbV9ieXRlcy5kYXRhKCkgKyAo
eSAqIHdpZHRoKCkpICsgeDsKKyNlbGlmIFBMQVRGT1JNKFNLSUEpCisgICAgICAgICAgICByZXR1
cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOwogI2VuZGlmCiAgICAgICAgIH0KIApAQCAtMTUx
LDYgKzE2Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgSW50U2l6ZSBtX3NpemU7
ICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgSW1hZ2VEZWNvZGVyOjptX3Np
emUuCiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhbnkg
b2YgdGhlIHBpeGVscyBpbiB0aGUgYnVmZmVyIGhhdmUgdHJhbnNwYXJlbmN5LgorI2VsaWYgUExB
VEZPUk0oU0tJQSkKKyAgICAgICAgTmF0aXZlSW1hZ2VTa2lhIG1fYml0bWFwOwogI2VuZGlmCiAg
ICAgICAgIEludFJlY3QgbV9yZWN0OyAgICAgICAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwg
c3BlY2lmaWVkIGZyYW1lIHdpdGhpbiB0aGUgb3ZlcmFsbCBidWZmZXIuCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBi
dWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAko
cmV2aXNpb24gNDQ2NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJv
L0ltYWdlRGVjb2RlckNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTQgKzg0LDIxIEBA
IE5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmUKICAgICAgICAgd2lkdGgo
KSAqIHNpemVvZihQaXhlbERhdGEpKTsKIH0KIAotYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhh
KCkgY29uc3QgeworYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QKK3sKICAgICBy
ZXR1cm4gbV9oYXNBbHBoYTsKIH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJv
b2wgYWxwaGEpIHsKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYShib29sIGFscGhhKQor
ewogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0
dXMgcykKK3sKKyAgICBtX3N0YXR1cyA9IHM7Cit9CisKIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVm
ZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKIHsKICAgICBpZiAodGhp
cyA9PSAmb3RoZXIpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEv
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9za2lhL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA0NDY1OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBHb29nbGUsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbWFnZURlY29kZXJfaAotI2RlZmluZSBJ
bWFnZURlY29kZXJfaAotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkltYWdlU291
cmNlLmgiCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLSNpbmNsdWRlICJTa0JpdG1hcC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAv
LyBUaGUgUkdCQTMyQnVmZmVyIG9iamVjdCByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRh
dGEgaW4gUkdCQTMyIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCi0gICAgLy8gZGVj
b2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4gIEZyYW1lcyBhcmUgdGhlbiBpbnN0YW50
aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgotICAgIGNsYXNz
IFJHQkEzMkJ1ZmZlciB7Ci0gICAgcHVibGljOgotICAgICAgICBlbnVtIEZyYW1lU3RhdHVzIHsg
RnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07Ci0gICAgICAgIGVudW0g
RnJhbWVEaXNwb3NhbE1ldGhvZCB7Ci0gICAgICAgICAgICAvLyBJZiB5b3UgY2hhbmdlIHRoZSBu
dW1lcmljIHZhbHVlcyBvZiB0aGVzZSwgbWFrZSBzdXJlIHlvdSBhdWRpdCBhbGwKLSAgICAgICAg
ICAgIC8vIHVzZXJzLCBhcyBzb21lIHVzZXJzIG1heSBjYXN0IHJhdyB2YWx1ZXMgdG8vZnJvbSB0
aGVzZSBjb25zdGFudHMuCi0gICAgICAgICAgICBEaXNwb3NlTm90U3BlY2lmaWVkLCAgICAgICAv
LyBMZWF2ZSBmcmFtZSBpbiBmcmFtZWJ1ZmZlcgotICAgICAgICAgICAgRGlzcG9zZUtlZXAsICAg
ICAgICAgICAgICAgLy8gTGVhdmUgZnJhbWUgaW4gZnJhbWVidWZmZXIKLSAgICAgICAgICAgIERp
c3Bvc2VPdmVyd3JpdGVCZ2NvbG9yLCAgIC8vIENsZWFyIGZyYW1lIHRvIHRyYW5zcGFyZW50Ci0g
ICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsICAvLyBDbGVhciBmcmFtZSB0byBw
cmV2aW91cyBmcmFtZWJ1ZmZlciBjb250ZW50cwotICAgICAgICB9OwotICAgICAgICB0eXBlZGVm
IHVpbnQzMl90IFBpeGVsRGF0YTsKLQotICAgICAgICBSR0JBMzJCdWZmZXIoKQotICAgICAgICAg
ICAgOiBtX3N0YXR1cyhGcmFtZUVtcHR5KQotICAgICAgICAgICAgLCBtX2R1cmF0aW9uKDApCi0g
ICAgICAgICAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBkb2Vzbid0IGNy
ZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhLCBpdCBvbmx5Ci0gICAgICAgIC8vIGlu
Y3JlYXNlcyB0aGUgcmVmIGNvdW50IG9mIHRoZSBleGlzdGluZyBiaXRtYXAuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIFRoaXMgZXhpc3RzIGJlY2F1c2UgSW1hZ2VEZWNvZGVyIGtlZXBzIGEgVmVj
dG9yPFJHQkEzMkJ1ZmZlcj4sIGFuZAotICAgICAgICAvLyBWZWN0b3IgcmVxdWlyZXMgdGhpcyBj
b25zdHJ1Y3Rvci4KLSAgICAgICAgUkdCQTMyQnVmZmVyKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3Ro
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9wZXJhdG9yPShvdGhlcik7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9iaXRtYXAu
cmVzZXQoKTsKLSAgICAgICAgICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKLSAgICAgICAgICAg
IC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZm
ZXJDYWNoZSgpCi0gICAgICAgICAgICAvLyBjYWxscyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBk
YXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UKLSAgICAgICAgICAgIC8vIGluaXRGcmFtZUJ1
ZmZlcigpIGFuZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAotICAgICAg
ICAgICAgLy8gb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCi0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHplcm9GaWxsKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9i
aXRtYXAuZXJhc2VBUkdCKDAsIDAsIDAsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhp
cyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIGltYWdlIGRhdGEgaW4gfG90aGVy
fCwgc28gdGhlCi0gICAgICAgIC8vIHR3byBpbWFnZXMgY2FuIGJlIG1vZGlmaWVkIGluZGVwZW5k
ZW50bHkuCi0gICAgICAgIHZvaWQgY29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBv
dGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgbV9iaXRtYXAucmVzZXQoKTsKLSAgICAg
ICAgICAgIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgb3RoZXJCaXRtYXAgPSBvdGhlci5tX2JpdG1h
cDsKLSAgICAgICAgICAgIG90aGVyQml0bWFwLmNvcHlUbygmbV9iaXRtYXAsIG90aGVyQml0bWFw
LmNvbmZpZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gY29waWVz
IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlIHNhbWUKLSAgICAgICAg
Ly8gWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5j
bHVkaW5nIGVuZFkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5PVEU6IFRoaXMgZnVuY3Rpb24g
ZG9lcyBub3Qgc2FuaXR5LWNoZWNrIGl0cyBhcmd1bWVudHMhICBDYWxsZXJzCi0gICAgICAgIC8v
IE1VU1Qgbm90IHBhc3MgaW52YWxpZCB2YWx1ZXMgb3IgdGhpcyB3aWxsIGNvcnJ1cHQgbWVtb3J5
LgotICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBz
dGFydFksIGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRYIDwg
d2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWSA8
PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0
YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0YSog
Y29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAgICBm
b3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAgICAg
ICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCByb3dC
eXRlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55
IHBpeGVscyBhcmUgd3JpdHRlbi4gV2lsbCByZXR1cm4gdHJ1ZSBvbgotICAgICAgICAvLyBzdWNj
ZXNzLCBmYWxzZSBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCi0gICAgICAgIGJvb2wg
c2V0U2l6ZShpbnQgbmV3X3dpZHRoLCBpbnQgbmV3X2hlaWdodCkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgaXQgd2ls
bCBsZWFrIG1lbW9yeQotICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLgotICAgICAgICAgICAgQVNT
RVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsKLSAgICAgICAgICAgIG1fYml0bWFw
LnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG5ld193aWR0aCwgbmV3X2hl
aWdodCk7Ci0gICAgICAgICAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBBbGxvY2F0aW9uIGZhaWx1cmUsIG1heWJlIHRoZSBiaXRtYXAgd2FzIHRv
byBiaWcuCi0gICAgICAgICAgICAgICAgc2V0U3RhdHVzKEZyYW1lQ29tcGxldGUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
WmVybyB0aGUgaW1hZ2UuCi0gICAgICAgICAgICB6ZXJvRmlsbCgpOwotCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VT
b3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJucyBhIHBvaW50ZXIKLSAgICAgICAg
Ly8gdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuICBUaGlzIHBvaW50ZXIgd2ls
bCBiZSBvd25lZCBieQotICAgICAgICAvLyB0aGUgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZy
YW1lRGF0YTo6Y2xlYXIoKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFn
ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlSW1hZ2VT
a2lhKG1fYml0bWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25z
dCB7IHJldHVybiAhbV9iaXRtYXAuaXNPcGFxdWUoKTsgfQotICAgICAgICBjb25zdCBJbnRSZWN0
JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgICAgIEZyYW1lU3RhdHVzIHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9Ci0gICAgICAgIHVuc2lnbmVkIGR1cmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgICAgICBGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsg
fQotCi0gICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkgeyBtX2JpdG1hcC5zZXRJ
c09wYXF1ZSghYWxwaGEpOyB9Ci0gICAgICAgIHZvaWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiBy
KSB7IG1fcmVjdCA9IHI7IH0KLSAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgcykK
LSAgICAgICAgewotICAgICAgICAgICAgbV9zdGF0dXMgPSBzOwotICAgICAgICAgICAgaWYgKHMg
PT0gRnJhbWVDb21wbGV0ZSkKLSAgICAgICAgICAgICAgICBtX2JpdG1hcC5zZXREYXRhQ29tcGxl
dGUoKTsgIC8vIFRlbGwgdGhlIGJpdG1hcCBpdCdzIGRvbmUuCi0gICAgICAgIH0KLSAgICAgICAg
dm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRp
b247IH0KLSAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9k
IG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9Ci0KLSAgICAgICAgaW5saW5l
IHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2ln
bmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRk
cih4LCB5KSwgciwgZywgYiwgYSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IC8vIEluaXRpYWxpemUgd2l0aCBhbm90aGVyIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gZG9lc24n
dCBjcmVhdGUgYSBuZXcgY29weQotICAgICAgICAvLyBvZiB0aGUgaW1hZ2UgZGF0YSwgaXQgb25s
eSBpbmNyZWFzZXMgdGhlIHJlZmNvdW50IG9mIHRoZSBleGlzdGluZyBiaXRtYXAuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIE5vcm1hbCBjYWxsZXJzIHNob3VsZCBub3QgZ2VuZXJhbGx5IGJlIHVz
aW5nIHRoaXMgZnVuY3Rpb24uICBJZiB5b3Ugd2FudAotICAgICAgICAvLyB0byBjcmVhdGUgYSBj
b3B5IG9uIHdoaWNoIHlvdSBjYW4gbW9kaWZ5IHRoZSBpbWFnZSBkYXRhIGluZGVwZW5kZW50bHks
Ci0gICAgICAgIC8vIHVzZSBjb3B5Qml0bWFwRGF0YSgpIGluc3RlYWQuCi0gICAgICAgIFJHQkEz
MkJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7Ci0KLSAgICAgICAgICAgIG1fYml0bWFwID0gb3RoZXIubV9iaXRtYXA7Ci0gICAgICAg
ICAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdlIHdpbGwgYmUgd3JpdGluZyBk
aXJlY3RseSBpbnRvIHRoZQotICAgICAgICAgICAgLy8gYml0bWFwIHRocm91Z2hvdXQgdGhpcyBv
YmplY3QncyBsaWZldGltZS4KLSAgICAgICAgICAgIG1fYml0bWFwLmxvY2tQaXhlbHMoKTsKLSAg
ICAgICAgICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhv
dGhlci5zdGF0dXMoKSk7Ci0gICAgICAgICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigp
KTsKLSAgICAgICAgICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkp
OwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5l
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwLndpZHRoKCk7IH0KLSAgICAgICAg
aW5saW5lIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcC5oZWlnaHQoKTsgfQot
Ci0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2ln
bmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMgZGF0YSBwcmUtbXVsdGlwbGllZC4KLSAgICAgICAg
ICAgIGlmIChhID09IDApCi0gICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgYWxwaGFQZXJjZW50ID0gYSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgZyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnICogYWxwaGFQZXJjZW50KTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihiICogYWxwaGFQZXJj
ZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAy
NCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIE5hdGl2ZUltYWdlU2tpYSBtX2JpdG1hcDsKLSAgICAgICAgSW50UmVjdCBtX3JlY3Q7
ICAgICAgIC8vIFRoZSByZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGlu
IHRoZSBvdmVyYWxsIGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBm
cmFtZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdob3NlIG9yaWdpbmFsIHJl
Y3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFsbCBpbWFnZSBzaXplLgotICAgICAgICBGcmFt
ZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBvciBub3QgdGhpcyBmcmFtZSBpcyBjb21wbGV0
ZWx5IGZpbmlzaGVkIGRlY29kaW5nLgotICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOyAgLy8g
VGhlIGFuaW1hdGlvbiBkZWxheS4KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bv
c2FsTWV0aG9kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3
aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1lLgot
ICAgIH07Ci0KLSAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBiYXNl
IGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQgZGVjb2RlcnMKLSAgICAvLyAoZS5nLiwg
R0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNvZGUg
aW50byBSR0JBMzIgZm9ybWF0Ci0gICAgLy8gYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMgdGhl
IFJHQkEzMiBmcmFtZSBjYWNoZS4KLSAgICBjbGFzcyBJbWFnZURlY29kZXIgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgSW1hZ2VEZWNvZGVyKCkKLSAgICAgICAgICAgIDogbV9mYWlsZWQoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkge30KLQotICAgICAgICAvLyBU
aGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRl
Y29kZWQgaW1hZ2Ugb2YgdGhpcyB0eXBlLgotICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKLQotICAgICAgICAvLyBBbGwgc3BlY2lmaWMgZGVjb2Rl
ciBwbHVnaW5zIG11c3QgZG8gc29tZXRoaW5nIHdpdGggdGhlIGRhdGEgdGhleSBhcmUgZ2l2ZW4u
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpIHsgbV9kYXRhID0gZGF0YTsgfQotCi0gICAgICAgIC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0LiBUaGlzIGRl
ZmF1bHQKLSAgICAgICAgLy8gaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRydWUgaWYgdGhl
IHNpemUgaGFzIGJlZW4gc2V0IGFuZCB3ZSBoYXZlIG5vdAotICAgICAgICAvLyBzZWVuIGEgZmFp
bHVyZS4gRGVjb2RlcnMgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyB0byBsYXppbHkgZGVjb2Rl
Ci0gICAgICAgIC8vIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBzaXplLgotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBtX3NpemVBdmFpbGFibGU7IAotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVxdWVzdHMgdGhlIHNpemUuCi0gICAgICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgLy8gUmVxdWVzdGluZyB0aGUgc2l6
ZSBvZiBhbiBpbnZhbGlkIGJpdG1hcCBpcyBtZWFuaW5nbGVzcy4KLSAgICAgICAgICAgIEFTU0VS
VCghbV9mYWlsZWQpOwotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1hZ2UuICBDbGFz
c2VzIHRoYXQgc3VwcG9ydCBtdWx0aXBsZSBmcmFtZXMKLSAgICAgICAgLy8gd2lsbCBzY2FuIHRo
ZSBpbWFnZSBkYXRhIGZvciB0aGUgYW5zd2VyIGlmIHRoZXkgbmVlZCB0byAod2l0aG91dCBuZWNl
c3NhcmlseQotICAgICAgICAvLyBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZnJhbWVz
KS4KLSAgICAgICAgdmlydHVhbCBpbnQgZnJhbWVDb3VudCgpIHsgcmV0dXJuIDE7IH0KLQotICAg
ICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1h
dGlvbiBsb29wLgotICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7
IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQotCi0gICAgICAgIC8vIENhbGxlZCB0byBvYnRhaW4g
dGhlIFJHQkEzMkJ1ZmZlciBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVuZGVyaW5nLiAgVGhl
Ci0gICAgICAgIC8vIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFzIG11Y2ggb2YgdGhlIGZy
YW1lIGFzIGl0IGNhbiBiZWZvcmUgaGFuZGluZwotICAgICAgICAvLyBiYWNrIHRoZSBidWZmZXIu
Ci0gICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KSA9IDA7Ci0KLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVuZGVybHlpbmcg
aW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEgdHJhbnNwYXJlbmN5LgotICAgICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAg
ICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9Ci0gICAgICAgIHZv
aWQgc2V0RmFpbGVkKCkgeyBtX2ZhaWxlZCA9IHRydWU7IH0KLQotICAgICAgICAvLyBXaXBlIG91
dCBmcmFtZXMgaW4gdGhlIGZyYW1lIGJ1ZmZlciBjYWNoZSBiZWZvcmUgfGNsZWFyQmVmb3JlRnJh
bWV8LAotICAgICAgICAvLyBhc3N1bWluZyB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgYnJlYWtp
bmcgZGVjb2RpbmcuICBEaWZmZXJlbnQgZGVjb2RlcnMKLSAgICAgICAgLy8gcGxhY2UgZGlmZmVy
ZW50IHJlc3RyaWN0aW9ucyBvbiB3aGF0IGZyYW1lcyBhcmUgc2FmZSB0byBkZXN0cm95LCBzbyB0
aGlzCi0gICAgICAgIC8vIGlzIGxlZnQgdG8gdGhlbSB0byBpbXBsZW1lbnQuCi0gICAgICAgIC8v
IEZvciBjb252ZW5pZW5jZSdzIHNha2UsIHdlIHByb3ZpZGUgYSBkZWZhdWx0IChlbXB0eSkgaW1w
bGVtZW50YXRpb24sCi0gICAgICAgIC8vIHNpbmNlIGluIHByYWN0aWNlIG9ubHkgR0lGcyB3aWxs
IGV2ZXIgdXNlIHRoaXMuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2Fj
aGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpIHsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICAvLyBDYWxsZWQgYnkgdGhlIGltYWdlIGRlY29kZXJzIHRvIHNldCB0aGVpciBkZWNvZGVkIHNp
emUsIHRoaXMgYWxzbyBjaGVjawotICAgICAgICAvLyB0aGUgc2l6ZSBmb3IgdmFsaWRpdHkuIEl0
IHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHNpemUgd2FzIHNldCwgb3IgZmFsc2UKLSAgICAgICAg
Ly8gaWYgdGhlcmUgaXMgYW4gZXJyb3IuIE9uIGVycm9yLCB0aGUgbV9mYWlsZWQgZmxhZyB3aWxs
IGJlIHNldCBhbmQgdGhlCi0gICAgICAgIC8vIGNhbGxlciBzaG91bGQgaW1tZWRpYXRlbHkgc3Rv
cCBkZWNvZGluZy4KLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBo
ZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc2l6ZSA9IElu
dFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVl
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCi0gICAgICAgIFZlY3Rv
cjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAgICAgICAgbXV0YWJsZSBib29s
IG1fZmFpbGVkOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNv
bXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCi0gICAg
ICAgIC8vIGFuZCByZXR1cm4gaXQgYXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4K
LSAgICAgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyB3aWR0aCAqIGhlaWdodCBtdXN0IG5v
dCBleGNlZWQgKDIgXiAyOSkgLSAxLCBzbyB0aGF0IHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBv
dmVyZmxvdyB3aGVuIHdlIG11bHRpcGx5IGJ5IDQuCi0gICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWxfc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4od2lkdGgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oaGVpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0b3RhbF9z
aXplID4gKCgxIDw8IDI5KSAtIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgSW50U2l6ZSBtX3Np
emU7Ci0gICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNr
aWEuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKKyAgICA6IG1fc3RhdHVzKEZyYW1lRW1w
dHkpCisgICAgLCBtX2R1cmF0aW9uKDApCisgICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VO
b3RTcGVjaWZpZWQpCit7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit7CisgICAg
bV9iaXRtYXAucmVzZXQoKTsKKyAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CisgICAgLy8gTk9U
RTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KCkKKyAgICAvLyBjYWxscyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIg
ZnVuY3Rpb25zIGxpa2UKKyAgICAvLyBpbml0RnJhbWVCdWZmZXIoKSBhbmQgZnJhbWVDb21wbGV0
ZSgpIG1heSBzdGlsbCBuZWVkIHRvIHJlYWQKKyAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2Yg
dGhpcyBmcmFtZSBsYXRlci4KK30KKwordm9pZCBSR0JBMzJCdWZmZXI6Onplcm9GaWxsKCkKK3sK
KyAgICBtX2JpdG1hcC5lcmFzZUFSR0IoMCwgMCwgMCwgMCk7Cit9CisKK3ZvaWQgUkdCQTMyQnVm
ZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIGlm
ICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iaXRtYXAucmVzZXQo
KTsKKyAgICBjb25zdCBOYXRpdmVJbWFnZVNraWEmIG90aGVyQml0bWFwID0gb3RoZXIubV9iaXRt
YXA7CisgICAgb3RoZXJCaXRtYXAuY29weVRvKCZtX2JpdG1hcCwgb3RoZXJCaXRtYXAuY29uZmln
KCkpOworfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3X3dpZHRoLCBpbnQg
bmV3X2hlaWdodCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBvbmNlLCBpdCB3aWxsIGxlYWsgbWVtb3J5CisgICAgLy8gb3RoZXJ3aXNlLgorICAgIEFTU0VS
VCh3aWR0aCgpID09IDAgJiYgaGVpZ2h0KCkgPT0gMCk7CisgICAgbV9iaXRtYXAuc2V0Q29uZmln
KFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgbmV3X3dpZHRoLCBuZXdfaGVpZ2h0KTsKKyAg
ICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpIHsKKyAgICAgICAgLy8gQWxsb2NhdGlvbiBm
YWlsdXJlLCBtYXliZSB0aGUgYml0bWFwIHdhcyB0b28gYmlnLgorICAgICAgICBzZXRTdGF0dXMo
RnJhbWVDb21wbGV0ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBa
ZXJvIHRoZSBpbWFnZS4KKyAgICB6ZXJvRmlsbCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K05hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG5ldyBOYXRpdmVJbWFnZVNraWEobV9iaXRtYXApOworfQorCitib29sIFJH
QkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9iaXRtYXAuaXNP
cGFxdWUoKTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEp
Cit7CisgICAgbV9iaXRtYXAuc2V0SXNPcGFxdWUoIWFscGhhKTsKK30KKwordm9pZCBSR0JBMzJC
dWZmZXI6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzKQoreworICAgIG1fc3RhdHVzID0gczsKKyAg
ICBpZiAocyA9PSBGcmFtZUNvbXBsZXRlKQorICAgICAgICBtX2JpdG1hcC5zZXREYXRhQ29tcGxl
dGUoKTsgIC8vIFRlbGwgdGhlIGJpdG1hcCBpdCdzIGRvbmUuCit9CisKK1JHQkEzMkJ1ZmZlciYg
UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fYml0
bWFwID0gb3RoZXIubV9iaXRtYXA7CisgICAgLy8gS2VlcCB0aGUgcGl4ZWxzIGxvY2tlZCBzaW5j
ZSB3ZSB3aWxsIGJlIHdyaXRpbmcgZGlyZWN0bHkgaW50byB0aGUKKyAgICAvLyBiaXRtYXAgdGhy
b3VnaG91dCB0aGlzIG9iamVjdCdzIGxpZmV0aW1lLgorICAgIG1fYml0bWFwLmxvY2tQaXhlbHMo
KTsKKyAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CisgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKKyAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKKyAgICBzZXREaXNwb3Nh
bE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisK
K2ludCBSR0JBMzJCdWZmZXI6OndpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRtYXAu
d2lkdGgoKTsKK30KKworaW50IFJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9iaXRtYXAuaGVpZ2h0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31247</attachid>
            <date>2009-06-13 18:59:42 -0700</date>
            <delta_ts>2009-06-13 20:14:31 -0700</delta_ts>
            <desc>Do not silently cause crashes...</desc>
            <filename>0002-2009-06-13-Holger-Hans-Peter-Freyther-zecke-selfish..patch</filename>
            <type>text/plain</type>
            <size>1979</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA3N2ZmODY1M2RjNzYzMzEwZjVmMzM5MTY2M2U4Y2JmNDcyMzg5YWQxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFN1biwgMTQgSnVuIDIwMDkgMDM6NTU6NDIgKzAyMDAKU3ViamVjdDog
W1BBVENIIDIvMl0gMjAwOS0wNi0xMyAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAg
ICAgIEZvciBub24tc2tpYSBhbmQgbm9uLWNhaXJvIHRoaXMgbWV0aG9kIHdvdWxkIGdlbmVyYXRl
IGEgY29tcGlsZQogICAgICAgIHRpbWUgd2FybmluZyB0aGF0IG5vdGhpbmcgaXMgcmV0dXJuZWQu
IFVzZSBhbiBBU1NFUlRfTk9UX1JFQUNIRUQKICAgICAgICBhbmQgYSByZXR1cm4gbnVsbCBoZXJl
LgoKICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgogICAg
ICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmdldEFkZHIpOgotLS0KIFdlYkNvcmUvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIHwgICAgMyArKysKIDIg
ZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQ4M2RjZjUu
LmY4MDJlMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0yLDYgKzIsMTcgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KIAorICAgICAgICBGb3Igbm9uLXNraWEgYW5kIG5vbi1jYWlybyB0aGlzIG1ldGhvZCB3
b3VsZCBnZW5lcmF0ZSBhIGNvbXBpbGUKKyAgICAgICAgdGltZSB3YXJuaW5nIHRoYXQgbm90aGlu
ZyBpcyByZXR1cm5lZC4gVXNlIGFuIEFTU0VSVF9OT1RfUkVBQ0hFRAorICAgICAgICBhbmQgYSBy
ZXR1cm4gbnVsbCBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmdldEFkZHIpOgor
CisyMDA5LTA2LTEzICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIHd4
IGFuZCBjYWlybyB1c2UgdGhlIFdlYkNvcmUgaW1hZ2UtZGVjb2RlcnMgYW5kIG1vc3Qgb2YKICAg
ICAgICAgdGhlIGltcGxlbWVudGF0aW9uLCBzcGVjaWFsbHkgdGhlIG1hZ2ljIHRvIGRldGVybWlu
ZSB0aGUgZmlsZQogICAgICAgICBmb3JtYXQsIHNob3VsZCBiZSBzaGFyZWQuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAwMDk3OTgxLi43
OGZhOWUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgKQEAgLTEzOCw2ICsxMzgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9ieXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbGlmIFBMQVRG
T1JNKFNLSUEpCiAgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkpOwor
I2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0
dXJuIDA7CiAjZW5kaWYKICAgICAgICAgfQogCi0tIAoxLjYuMy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31250</attachid>
            <date>2009-06-13 20:14:31 -0700</date>
            <delta_ts>2009-06-13 23:21:44 -0700</delta_ts>
            <desc>part eleven</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>9793</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMDktMDYtMTMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IGVsZXZl
bgorICAgICAgICBXcml0ZSBhIHd4IGltcGxlbWVudGF0aW9uIHNvIHRoZSB3eCBwb3J0IGNhbiBj
b21waWxlLiAgRm9yIG5vdyB0aGlzIGlzCisgICAgICAgIG1vc3RseSBhIGNvcHkgb2YgdGhlIENh
aXJvIHBvcnQsIGJ1dCBpbiB0aGUgZnV0dXJlIGl0IGNhbiBiZSBjaGFuZ2VkIHRvCisgICAgICAg
IHVzZSBhIHd4Qml0bWFwIGFzIHRoZSBzdG9yYWdlIHR5cGUgZXZlcnl3aGVyZSAoanVzdCBhcyBD
YWlybyBjYW4KKyAgICAgICAgcHJvYmFibHkgYmUgY2hhbmdlZCkuCisgICAgICAgIAorICAgICAg
ICBBbHNvIEFTU0VSVCBmb3IgYW55IG90aGVyIHBvcnRzIHdobyBjYWxsIGdldEFkZHIoKSAoSSBk
b24ndCB0aGluayB0aGVyZQorICAgICAgICBhcmUgYW55LCBhbmQgYmVzaWRlcywgdGhleSBwcm9i
YWJseSB3b24ndCBsaW5rLCBidXQgdGhpcyBkb2Vzbid0IGh1cnQpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
cjo6Z2V0QWRkcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3g6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVm
ZmVyOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNl
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEpOgorICAgICAgICAo
V2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OmhlaWdodCk6CisKIDIwMDktMDYtMTMgIFBldGVyIEthc3RpbmcgIDxw
a2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNvdXJjZVd4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlU291cmNlV3guY3Bw
CShyZXZpc2lvbiA0NDY1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VT
b3VyY2VXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw1NiArMTg1LDcgQEAgTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQQogICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZl
ci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGJ1ZmZlci0+cmVjdCgpOwotICAgIHVu
c2lnbmVkIGNoYXIqIGJ5dGVzID0gKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlci0+Ynl0ZXMoKS5kYXRh
KCk7Ci0gICAgbG9uZyBjb2xvclNpemUgPSBidWZmZXItPmJ5dGVzKCkuc2l6ZSgpOwotICAgIAot
ICAgIHR5cGVkZWYgd3hQaXhlbERhdGE8d3hCaXRtYXAsIHd4QWxwaGFQaXhlbEZvcm1hdD4gUGl4
ZWxEYXRhOwotCi0gICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgaW50IGhlaWdo
dCA9IHNpemUoKS5oZWlnaHQoKTsKLQotICAgIHd4Qml0bWFwKiBibXAgPSBuZXcgd3hCaXRtYXAo
d2lkdGgsIGhlaWdodCwgMzIpOwotICAgIFBpeGVsRGF0YSBkYXRhKCpibXApOwotICAgIAotICAg
IGludCByb3dDb3VudGVyID0gMDsKLSAgICBsb25nIHBpeGVsQ291bnRlciA9IDA7Ci0gICAgCi0g
ICAgUGl4ZWxEYXRhOjpJdGVyYXRvciBwKGRhdGEpOwotICAgIAotICAgIFBpeGVsRGF0YTo6SXRl
cmF0b3Igcm93U3RhcnQgPSBwOyAKLSAgICAKLSAgICAvLyBOQjogSXQgYXBwZWFycyB0aGF0IHRo
ZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdCQSBmb3JtYXQuCi0gICAgLy8g
VGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5IG9uIGJvdGggcHBjIGFuZCBpbnRlbCwgbWVhbmluZyB0
aGUgaXNzdWUgaXMKLSAgICAvLyBsaWtlbHkgbm90IGFuIGlzc3VlIG9mIGJ5dGUgb3JkZXIgZ2V0
dGluZyBtaXhlZCB1cCBvbiBkaWZmZXJlbnQgYXJjaHMuIAotICAgIGZvciAobG9uZyBpID0gMDsg
aSA8IGJ1ZmZlci0+Ynl0ZXMoKS5zaXplKCkqNDsgaSs9NCkgewotICAgICAgICBwLlJlZCgpID0g
Ynl0ZXNbaSsyXTsKLSAgICAgICAgcC5HcmVlbigpID0gYnl0ZXNbaSsxXTsKLSAgICAgICAgcC5C
bHVlKCkgPSBieXRlc1tpKzBdOwotICAgICAgICBwLkFscGhhKCkgPSBieXRlc1tpKzNdOwotICAg
ICAgICAKLSAgICAgICAgcCsrOwotCi0gICAgICAgIHBpeGVsQ291bnRlcisrOwotICAgICAgICBp
ZiAoIChwaXhlbENvdW50ZXIgJSB3aWR0aCApID09IDAgKSB7Ci0gICAgICAgICAgICByb3dDb3Vu
dGVyKys7Ci0gICAgICAgICAgICBwID0gcm93U3RhcnQ7Ci0gICAgICAgICAgICBwLk1vdmVUbyhk
YXRhLCAwLCByb3dDb3VudGVyKTsKLSAgICAgICAgfQotCi0gICAgfQotI2lmICF3eENIRUNLX1ZF
UlNJT04oMiw5LDApCi0gICAgYm1wLT5Vc2VBbHBoYSgpOwotI2VuZGlmCi0gICAgQVNTRVJUKGJt
cC0+SXNPaygpKTsKLQotI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJpdG1h
cCA9ICBuZXcgd3hHcmFwaGljc0JpdG1hcCh3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRS
ZW5kZXJlcigpLT5DcmVhdGVCaXRtYXAoKmJtcCkpOwotICAgIGRlbGV0ZSBibXA7Ci0gICAgcmV0
dXJuIGJpdG1hcDsKLSNlbHNlCi0gICAgcmV0dXJuIGJtcDsKLSNlbmRpZgorICAgIHJldHVybiBi
dWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKIH0KIAogZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1l
RHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNDQ2NjEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzQsMTAgKzEzNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgaW5s
aW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSNpZiBQTEFU
Rk9STShDQUlSTykKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oV1gpCiAgICAgICAg
ICAgICByZXR1cm4gbV9ieXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkpICsgeDsKICNlbGlmIFBM
QVRGT1JNKFNLSUEpCiAgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAuZ2V0QWRkcjMyKHgsIHkp
OworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIDA7CiAjZW5kaWYKICAgICAgICAgfQogCkBAIC0xNTcsNyArMTYwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiBQTEFURk9STShD
QUlSTykKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oV1gpCiAgICAgICAgIFZlY3Rv
cjxQaXhlbERhdGE+IG1fYnl0ZXM7CiAgICAgICAgIEludFNpemUgbV9zaXplOyAgICAgICAvLyBU
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgVGhpcyBzaG91bGQgYmUgdGhlCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIEltYWdlRGVjb2Rlcjo6bV9zaXplLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29k
ZXJXeC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3d4L0ltYWdlRGVjb2Rlcld4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURl
Y29kZXIuaCIKKworLy8gRklYTUU6IEFyZSBhbGwgdGhlc2UgbmVlZGVkPworI2luY2x1ZGUgPHd4
L2RlZnMuaD4KKyNpbmNsdWRlIDx3eC9iaXRtYXAuaD4KKyNpZiBVU0UoV1hHQykKKyNpbmNsdWRl
IDx3eC9ncmFwaGljcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8d3gvaW1hZ2UuaD4KKyNpbmNsdWRl
IDx3eC9yYXdibXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSR0JBMzJCdWZmZXI6OlJH
QkEzMkJ1ZmZlcigpCisgICAgOiBtX2hhc0FscGhhKGZhbHNlKQorICAgICwgbV9zdGF0dXMoRnJh
bWVFbXB0eSkKKyAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlz
cG9zZU5vdFNwZWNpZmllZCkKK3sKK30gCisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit7
CisgICAgbV9ieXRlcy5jbGVhcigpOworICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKKyAgICAv
LyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVy
Q2FjaGUoKQorICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBv
dGhlciBmdW5jdGlvbnMgbGlrZQorICAgIC8vIGluaXRGcmFtZUJ1ZmZlcigpIGFuZCBmcmFtZUNv
bXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAorICAgIC8vIG90aGVyIG1ldGFkYXRhIG91
dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgorfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwo
KQoreworICAgIG1fYnl0ZXMuZmlsbCgwKTsKKyAgICBtX2hhc0FscGhhID0gdHJ1ZTsKK30KKwor
dm9pZCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3Ro
ZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhh
KTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3
SGVpZ2h0KQoreworICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxs
b2NhdGlvbiBmYWlsdXJlIGlmIHRoZQorICAgIC8vIHJlcXVlc3RlZCBzaXplIHdhcyB0b28gYmln
Li4uCisgICAgbV9ieXRlcy5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQpOworICAgIG1fc2l6
ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAgICAvLyBaZXJvIHRoZSBpbWFn
ZS4KKyAgICB6ZXJvRmlsbCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK05hdGl2ZUltYWdl
UHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopbV9ieXRlcy5kYXRh
KCk7CisgICAgCisgICAgdHlwZWRlZiB3eFBpeGVsRGF0YTx3eEJpdG1hcCwgd3hBbHBoYVBpeGVs
Rm9ybWF0PiBXeFBpeGVsRGF0YTsKKworICAgIHd4Qml0bWFwKiBibXAgPSBuZXcgd3hCaXRtYXAo
d2lkdGgoKSwgaGVpZ2h0KCksIDMyKTsKKyAgICBXeFBpeGVsRGF0YSBkYXRhKCpibXApOworICAg
IAorICAgIGludCByb3dDb3VudGVyID0gMDsKKyAgICBsb25nIHBpeGVsQ291bnRlciA9IDA7Cisg
ICAgCisgICAgV3hQaXhlbERhdGE6Okl0ZXJhdG9yIHAoZGF0YSk7CisgICAgCisgICAgV3hQaXhl
bERhdGE6Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsgCisgICAgCisgICAgLy8gTkI6IEl0IGFwcGVh
cnMgdGhhdCB0aGUgZGF0YSBpcyBpbiBCR1JBIGZvcm1hdCBpbnN0ZWFkIG9mIFJHQkEgZm9ybWF0
LgorICAgIC8vIFRoaXMgY29kZSB3b3JrcyBwcm9wZXJseSBvbiBib3RoIHBwYyBhbmQgaW50ZWws
IG1lYW5pbmcgdGhlIGlzc3VlIGlzCisgICAgLy8gbGlrZWx5IG5vdCBhbiBpc3N1ZSBvZiBieXRl
IG9yZGVyIGdldHRpbmcgbWl4ZWQgdXAgb24gZGlmZmVyZW50IGFyY2hzLiAKKyAgICBmb3IgKGxv
bmcgaSA9IDA7IGkgPCBtX2J5dGVzLnNpemUoKSAqIHNpemVvZihQaXhlbERhdGEpOyBpICs9IHNp
emVvZihQaXhlbERhdGEpKSB7CisgICAgICAgIHAuUmVkKCkgPSBieXRlc1tpKzJdOworICAgICAg
ICBwLkdyZWVuKCkgPSBieXRlc1tpKzFdOworICAgICAgICBwLkJsdWUoKSA9IGJ5dGVzW2krMF07
CisgICAgICAgIHAuQWxwaGEoKSA9IGJ5dGVzW2krM107CisgICAgICAgIAorICAgICAgICBwKys7
CisKKyAgICAgICAgcGl4ZWxDb3VudGVyKys7CisgICAgICAgIGlmICggKHBpeGVsQ291bnRlciAl
IHdpZHRoICkgPT0gMCApIHsKKyAgICAgICAgICAgIHJvd0NvdW50ZXIrKzsKKyAgICAgICAgICAg
IHAgPSByb3dTdGFydDsKKyAgICAgICAgICAgIHAuTW92ZVRvKGRhdGEsIDAsIHJvd0NvdW50ZXIp
OworICAgICAgICB9CisKKyAgICB9CisjaWYgIXd4Q0hFQ0tfVkVSU0lPTigyLDksMCkKKyAgICBi
bXAtPlVzZUFscGhhKCk7CisjZW5kaWYKKyAgICBBU1NFUlQoYm1wLT5Jc09rKCkpOworCisjaWYg
VVNFKFdYR0MpCisgICAgd3hHcmFwaGljc0JpdG1hcCogYml0bWFwID0gIG5ldyB3eEdyYXBoaWNz
Qml0bWFwKHd4R3JhcGhpY3NSZW5kZXJlcjo6R2V0RGVmYXVsdFJlbmRlcmVyKCktPkNyZWF0ZUJp
dG1hcCgqYm1wKSk7CisgICAgZGVsZXRlIGJtcDsKKyAgICByZXR1cm4gYml0bWFwOworI2Vsc2UK
KyAgICByZXR1cm4gYm1wOworI2VuZGlmCit9CisKK2Jvb2wgUkdCQTMyQnVmZmVyOjpoYXNBbHBo
YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzQWxwaGE7Cit9CisKK3ZvaWQgUkdCQTMyQnVm
ZmVyOjpzZXRIYXNBbHBoYShib29sIGFscGhhKQoreworICAgIG1faGFzQWxwaGEgPSBhbHBoYTsK
K30KKwordm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQoreworICAgIG1fc3RhdHVz
ID0gc3RhdHVzOworfQorCitSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNv
bnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAg
ICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX2J5dGVzID0gb3RoZXIubV9ieXRlczsKKyAgICBt
X3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEob3RoZXIuaGFzQWxwaGEoKSk7
CisgICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOworICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMo
KSk7CisgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CisgICAgc2V0RGlzcG9zYWxN
ZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitp
bnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zaXplLndpZHRo
KCk7Cit9CisKK2ludCBSR0JBMzJCdWZmZXI6OmhlaWdodCgpIGNvbnN0IHsKKyAgICByZXR1cm4g
bV9zaXplLmhlaWdodCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31252</attachid>
            <date>2009-06-13 23:21:44 -0700</date>
            <delta_ts>2009-06-13 23:30:23 -0700</delta_ts>
            <desc>part eleven v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10427</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDYtMTMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IGVsZXZl
bgorICAgICAgICBXcml0ZSBhIHd4IGltcGxlbWVudGF0aW9uIHNvIHRoZSB3eCBwb3J0IGNhbiBj
b21waWxlLiAgRm9yIG5vdyB0aGlzIGlzCisgICAgICAgIG1vc3RseSBhIGNvcHkgb2YgdGhlIENh
aXJvIHBvcnQsIGJ1dCBpbiB0aGUgZnV0dXJlIGl0IGNhbiBiZSBjaGFuZ2VkIHRvCisgICAgICAg
IHVzZSBhIHd4Qml0bWFwIGFzIHRoZSBzdG9yYWdlIHR5cGUgZXZlcnl3aGVyZSAoanVzdCBhcyBD
YWlybyBjYW4KKyAgICAgICAgcHJvYmFibHkgYmUgY2hhbmdlZCkuCisgICAgICAgIAorICAgICAg
ICBBbHNvIEFTU0VSVCBmb3IgYW55IG90aGVyIHBvcnRzIHdobyBjYWxsIGdldEFkZHIoKSAoSSBk
b24ndCB0aGluayB0aGVyZQorICAgICAgICBhcmUgYW55LCBhbmQgYmVzaWRlcywgdGhleSBwcm9i
YWJseSB3b24ndCBsaW5rLCBidXQgdGhpcyBkb2Vzbid0IGh1cnQpLgorICAgICAgICAKKyAgICAg
ICAgQWxzbyBmaXhlcyBhIGR1bWIgQ2Fpcm8gYnVpbGQgYnVzdGFnZSB0eXBlIGludHJvZHVjZWQg
aW4gcGFydCB0ZW4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNvdXJj
ZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpnZXRBZGRyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy93eDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1
ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCk6
CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldEhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFN0YXR1cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KToKKwog
MjAwOS0wNi0xMyAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuICBMYW5kZWQgYnkgQWRhbSBCYXJ0
aC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNvdXJjZVd4
LmNwcAkocmV2aXNpb24gNDQ2NjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0lt
YWdlU291cmNlV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNTYgKzE4NSw3IEBAIE5hdGl2
ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUEKICAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBidWZmZXItPnJlY3QoKTsKLSAg
ICB1bnNpZ25lZCBjaGFyKiBieXRlcyA9ICh1bnNpZ25lZCBjaGFyKilidWZmZXItPmJ5dGVzKCku
ZGF0YSgpOwotICAgIGxvbmcgY29sb3JTaXplID0gYnVmZmVyLT5ieXRlcygpLnNpemUoKTsKLSAg
ICAKLSAgICB0eXBlZGVmIHd4UGl4ZWxEYXRhPHd4Qml0bWFwLCB3eEFscGhhUGl4ZWxGb3JtYXQ+
IFBpeGVsRGF0YTsKLQotICAgIGludCB3aWR0aCA9IHNpemUoKS53aWR0aCgpOwotICAgIGludCBo
ZWlnaHQgPSBzaXplKCkuaGVpZ2h0KCk7Ci0KLSAgICB3eEJpdG1hcCogYm1wID0gbmV3IHd4Qml0
bWFwKHdpZHRoLCBoZWlnaHQsIDMyKTsKLSAgICBQaXhlbERhdGEgZGF0YSgqYm1wKTsKLSAgICAK
LSAgICBpbnQgcm93Q291bnRlciA9IDA7Ci0gICAgbG9uZyBwaXhlbENvdW50ZXIgPSAwOwotICAg
IAotICAgIFBpeGVsRGF0YTo6SXRlcmF0b3IgcChkYXRhKTsKLSAgICAKLSAgICBQaXhlbERhdGE6
Okl0ZXJhdG9yIHJvd1N0YXJ0ID0gcDsgCi0gICAgCi0gICAgLy8gTkI6IEl0IGFwcGVhcnMgdGhh
dCB0aGUgZGF0YSBpcyBpbiBCR1JBIGZvcm1hdCBpbnN0ZWFkIG9mIFJHQkEgZm9ybWF0LgotICAg
IC8vIFRoaXMgY29kZSB3b3JrcyBwcm9wZXJseSBvbiBib3RoIHBwYyBhbmQgaW50ZWwsIG1lYW5p
bmcgdGhlIGlzc3VlIGlzCi0gICAgLy8gbGlrZWx5IG5vdCBhbiBpc3N1ZSBvZiBieXRlIG9yZGVy
IGdldHRpbmcgbWl4ZWQgdXAgb24gZGlmZmVyZW50IGFyY2hzLiAKLSAgICBmb3IgKGxvbmcgaSA9
IDA7IGkgPCBidWZmZXItPmJ5dGVzKCkuc2l6ZSgpKjQ7IGkrPTQpIHsKLSAgICAgICAgcC5SZWQo
KSA9IGJ5dGVzW2krMl07Ci0gICAgICAgIHAuR3JlZW4oKSA9IGJ5dGVzW2krMV07Ci0gICAgICAg
IHAuQmx1ZSgpID0gYnl0ZXNbaSswXTsKLSAgICAgICAgcC5BbHBoYSgpID0gYnl0ZXNbaSszXTsK
LSAgICAgICAgCi0gICAgICAgIHArKzsKLQotICAgICAgICBwaXhlbENvdW50ZXIrKzsKLSAgICAg
ICAgaWYgKCAocGl4ZWxDb3VudGVyICUgd2lkdGggKSA9PSAwICkgewotICAgICAgICAgICAgcm93
Q291bnRlcisrOwotICAgICAgICAgICAgcCA9IHJvd1N0YXJ0OwotICAgICAgICAgICAgcC5Nb3Zl
VG8oZGF0YSwgMCwgcm93Q291bnRlcik7Ci0gICAgICAgIH0KLQotICAgIH0KLSNpZiAhd3hDSEVD
S19WRVJTSU9OKDIsOSwwKQotICAgIGJtcC0+VXNlQWxwaGEoKTsKLSNlbmRpZgotICAgIEFTU0VS
VChibXAtPklzT2soKSk7Ci0KLSNpZiBVU0UoV1hHQykKLSAgICB3eEdyYXBoaWNzQml0bWFwKiBi
aXRtYXAgPSAgbmV3IHd4R3JhcGhpY3NCaXRtYXAod3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZh
dWx0UmVuZGVyZXIoKS0+Q3JlYXRlQml0bWFwKCpibXApKTsKLSAgICBkZWxldGUgYm1wOwotICAg
IHJldHVybiBiaXRtYXA7Ci0jZWxzZQotICAgIHJldHVybiBibXA7Ci0jZW5kaWYKKyAgICByZXR1
cm4gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CiB9CiAKIGZsb2F0IEltYWdlU291cmNlOjpm
cmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDQ0NjY4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM0LDEwICsxMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQogICAgICAgICB7Ci0jaWYg
UExBVEZPUk0oQ0FJUk8pCisjaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFdYKQogICAg
ICAgICAgICAgcmV0dXJuIG1fYnl0ZXMuZGF0YSgpICsgKHkgKiB3aWR0aCgpKSArIHg7CiAjZWxp
ZiBQTEFURk9STShTS0lBKQogICAgICAgICAgICAgcmV0dXJuIG1fYml0bWFwLmdldEFkZHIzMih4
LCB5KTsKKyNlbHNlCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOwogI2VuZGlmCiAgICAgICAgIH0KIApAQCAtMTU3LDcgKzE2MCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0jaWYgUExBVEZP
Uk0oQ0FJUk8pCisjaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFdYKQogICAgICAgICBW
ZWN0b3I8UGl4ZWxEYXRhPiBtX2J5dGVzOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsgICAgICAg
Ly8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBhcyBJbWFnZURlY29kZXI6Om1fc2l6ZS4KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fp
cm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA0NDY2OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgUkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBoYShi
b29sIGFscGgKICAgICBtX2hhc0FscGhhID0gYWxwaGE7CiB9CiAKLXZvaWQgc2V0U3RhdHVzKEZy
YW1lU3RhdHVzIHN0YXR1cykKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0
dXMgc3RhdHVzKQogewogICAgIG1fc3RhdHVzID0gc3RhdHVzOwogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdl
RGVjb2Rlcld4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
KworLy8gRklYTUU6IEFyZSBhbGwgdGhlc2UgbmVlZGVkPworI2luY2x1ZGUgPHd4L2RlZnMuaD4K
KyNpbmNsdWRlIDx3eC9iaXRtYXAuaD4KKyNpZiBVU0UoV1hHQykKKyNpbmNsdWRlIDx3eC9ncmFw
aGljcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8d3gvaW1hZ2UuaD4KKyNpbmNsdWRlIDx3eC9yYXdi
bXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZl
cigpCisgICAgOiBtX2hhc0FscGhhKGZhbHNlKQorICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkK
KyAgICAsIG1fZHVyYXRpb24oMCkKKyAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNw
ZWNpZmllZCkKK3sKK30gCisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit7CisgICAgbV9i
eXRlcy5jbGVhcigpOworICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKKyAgICAvLyBOT1RFOiBE
byBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQor
ICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5j
dGlvbnMgbGlrZQorICAgIC8vIGluaXRGcmFtZUJ1ZmZlcigpIGFuZCBmcmFtZUNvbXBsZXRlKCkg
bWF5IHN0aWxsIG5lZWQgdG8gcmVhZAorICAgIC8vIG90aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlz
IGZyYW1lIGxhdGVyLgorfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwoKQoreworICAg
IG1fYnl0ZXMuZmlsbCgwKTsKKyAgICBtX2hhc0FscGhhID0gdHJ1ZTsKK30KKwordm9pZCBSR0JB
MzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7Cisg
ICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2J5dGVzID0g
b3RoZXIubV9ieXRlczsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKK30KKwor
Ym9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQor
eworICAgIC8vIE5PVEU6IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2NhdGlvbiBm
YWlsdXJlIGlmIHRoZQorICAgIC8vIHJlcXVlc3RlZCBzaXplIHdhcyB0b28gYmlnLi4uCisgICAg
bV9ieXRlcy5yZXNpemUobmV3V2lkdGggKiBuZXdIZWlnaHQpOworICAgIG1fc2l6ZSA9IEludFNp
emUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisKKyAgICAvLyBaZXJvIHRoZSBpbWFnZS4KKyAgICB6
ZXJvRmlsbCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK05hdGl2ZUltYWdlUHRyIFJHQkEz
MkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogYnl0ZXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopbV9ieXRlcy5kYXRhKCk7CisgICAg
CisgICAgdHlwZWRlZiB3eFBpeGVsRGF0YTx3eEJpdG1hcCwgd3hBbHBoYVBpeGVsRm9ybWF0PiBX
eFBpeGVsRGF0YTsKKworICAgIHd4Qml0bWFwKiBibXAgPSBuZXcgd3hCaXRtYXAod2lkdGgoKSwg
aGVpZ2h0KCksIDMyKTsKKyAgICBXeFBpeGVsRGF0YSBkYXRhKCpibXApOworICAgIAorICAgIGlu
dCByb3dDb3VudGVyID0gMDsKKyAgICBsb25nIHBpeGVsQ291bnRlciA9IDA7CisgICAgCisgICAg
V3hQaXhlbERhdGE6Okl0ZXJhdG9yIHAoZGF0YSk7CisgICAgCisgICAgV3hQaXhlbERhdGE6Okl0
ZXJhdG9yIHJvd1N0YXJ0ID0gcDsgCisgICAgCisgICAgLy8gTkI6IEl0IGFwcGVhcnMgdGhhdCB0
aGUgZGF0YSBpcyBpbiBCR1JBIGZvcm1hdCBpbnN0ZWFkIG9mIFJHQkEgZm9ybWF0LgorICAgIC8v
IFRoaXMgY29kZSB3b3JrcyBwcm9wZXJseSBvbiBib3RoIHBwYyBhbmQgaW50ZWwsIG1lYW5pbmcg
dGhlIGlzc3VlIGlzCisgICAgLy8gbGlrZWx5IG5vdCBhbiBpc3N1ZSBvZiBieXRlIG9yZGVyIGdl
dHRpbmcgbWl4ZWQgdXAgb24gZGlmZmVyZW50IGFyY2hzLiAKKyAgICBmb3IgKGxvbmcgaSA9IDA7
IGkgPCBtX2J5dGVzLnNpemUoKSAqIHNpemVvZihQaXhlbERhdGEpOyBpICs9IHNpemVvZihQaXhl
bERhdGEpKSB7CisgICAgICAgIHAuUmVkKCkgPSBieXRlc1tpKzJdOworICAgICAgICBwLkdyZWVu
KCkgPSBieXRlc1tpKzFdOworICAgICAgICBwLkJsdWUoKSA9IGJ5dGVzW2krMF07CisgICAgICAg
IHAuQWxwaGEoKSA9IGJ5dGVzW2krM107CisgICAgICAgIAorICAgICAgICBwKys7CisKKyAgICAg
ICAgcGl4ZWxDb3VudGVyKys7CisgICAgICAgIGlmICggKHBpeGVsQ291bnRlciAlIHdpZHRoKCkg
KSA9PSAwICkgeworICAgICAgICAgICAgcm93Q291bnRlcisrOworICAgICAgICAgICAgcCA9IHJv
d1N0YXJ0OworICAgICAgICAgICAgcC5Nb3ZlVG8oZGF0YSwgMCwgcm93Q291bnRlcik7CisgICAg
ICAgIH0KKworICAgIH0KKyNpZiAhd3hDSEVDS19WRVJTSU9OKDIsOSwwKQorICAgIGJtcC0+VXNl
QWxwaGEoKTsKKyNlbmRpZgorICAgIEFTU0VSVChibXAtPklzT2soKSk7CisKKyNpZiBVU0UoV1hH
QykKKyAgICB3eEdyYXBoaWNzQml0bWFwKiBiaXRtYXAgPSAgbmV3IHd4R3JhcGhpY3NCaXRtYXAo
d3hHcmFwaGljc1JlbmRlcmVyOjpHZXREZWZhdWx0UmVuZGVyZXIoKS0+Q3JlYXRlQml0bWFwKCpi
bXApKTsKKyAgICBkZWxldGUgYm1wOworICAgIHJldHVybiBiaXRtYXA7CisjZWxzZQorICAgIHJl
dHVybiBibXA7CisjZW5kaWYKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9oYXNBbHBoYTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OnNl
dEhhc0FscGhhKGJvb2wgYWxwaGEpCit7CisgICAgbV9oYXNBbHBoYSA9IGFscGhhOworfQorCit2
b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKK3sKKyAgICBt
X3N0YXR1cyA9IHN0YXR1czsKK30KKworUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJh
dG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9ieXRlcyA9IG90aGVyLm1fYnl0ZXM7
CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIHNldEhhc0FscGhhKG90aGVyLmhhc0Fs
cGhhKCkpOworICAgIHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICBzZXRTdGF0dXMob3RoZXIu
c3RhdHVzKCkpOworICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOworICAgIHNldERp
c3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOworICAgIHJldHVybiAqdGhpczsK
K30KKworaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fc2l6
ZS53aWR0aCgpOworfQorCitpbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdCB7CisgICAg
cmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31253</attachid>
            <date>2009-06-13 23:30:23 -0700</date>
            <delta_ts>2009-06-13 23:44:48 -0700</delta_ts>
            <desc>part eleven v3 (Landed r44669)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15226</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDY2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDktMDYtMTMgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTcwOSBwYXJ0IGVsZXZl
bgorICAgICAgICBXcml0ZSBhIHd4IGltcGxlbWVudGF0aW9uIHNvIHRoZSB3eCBwb3J0IGNhbiBj
b21waWxlLiAgRm9yIG5vdyB0aGlzIGlzCisgICAgICAgIG1vc3RseSBhIGNvcHkgb2YgdGhlIENh
aXJvIHBvcnQsIGJ1dCBpbiB0aGUgZnV0dXJlIGl0IGNhbiBiZSBjaGFuZ2VkIHRvCisgICAgICAg
IHVzZSBhIHd4Qml0bWFwIGFzIHRoZSBzdG9yYWdlIHR5cGUgZXZlcnl3aGVyZSAoanVzdCBhcyBD
YWlybyBjYW4KKyAgICAgICAgcHJvYmFibHkgYmUgY2hhbmdlZCkuCisgICAgICAgIAorICAgICAg
ICBBbHNvIEFTU0VSVCBmb3IgYW55IG90aGVyIHBvcnRzIHdobyBjYWxsIGdldEFkZHIoKSAoSSBk
b24ndCB0aGluayB0aGVyZQorICAgICAgICBhcmUgYW55LCBhbmQgYmVzaWRlcywgdGhleSBwcm9i
YWJseSB3b24ndCBsaW5rLCBidXQgdGhpcyBkb2Vzbid0IGh1cnQpLgorICAgICAgICAKKyAgICAg
ICAgQWxzbyBmaXhlcyBhIGR1bWIgQ2Fpcm8gYnVpbGQgYnVzdGFnZSB0eXBvIGludHJvZHVjZWQg
aW4gcGFydCB0ZW4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNvdXJj
ZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpnZXRBZGRyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd3g6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JB
MzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
cjo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBo
YSk6CisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpS
R0JBMzJCdWZmZXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6aGVp
Z2h0KToKKyAgICAgICAgKiB3ZWJjb3JlLXd4LmJrbDoKKwogMjAwOS0wNi0xMyAgU3RlcGhlbiBX
aGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
aW1pdHJpIEdsYXprb3YuICBMYW5kZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvd2Vi
Y29yZS13eC5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJjb3JlLXd4LmJrbAkocmV2aXNp
b24gNDQ2NjgpCisrKyBXZWJDb3JlL3dlYmNvcmUtd3guYmtsCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw1NiArNDUsNTggQEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVjdCBmaWxlLgogICAg
ICAgICA8aW5jbHVkZT4kKFdLX1JPT1QpL1dlYktpdExpYnJhcmllczwvaW5jbHVkZT4KICAgICAg
ICAgCiAgICAgICAgIDxzb3VyY2VzPgotICAgICAgICAgICAgYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlcld4LmNwcAorICAgICAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJXeC5j
cHAKIAotICAgICAgICAgICAgZWRpdGluZy93eC9FZGl0b3JXeC5jcHAKKyAgICAgICAgICBlZGl0
aW5nL3d4L0VkaXRvcld4LmNwcAogCi0gICAgICAgICAgICBwYWdlL3d4L0RyYWdDb250cm9sbGVy
V3guY3BwCi0gICAgICAgICAgICBwYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAotICAgICAgICAg
ICAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L1RyYW5zZm9ybWF0aW9uTWF0cml4
V3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9Db2xvcld4LmNwcAotICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRmxvYXRSZWN0V3guY3BwCi0gICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFkaWVudFd4LmNwcAotICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3d4L0ltYWdlV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRQb2lu
dFd4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UmVjdFd4LmNwcAot
ICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAotICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGVuV3guY3BwCi0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHBsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKLSAgICAgICAgICAgIHBsYXRmb3Jt
L3d4L0NsaXBib2FyZFd4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vd3gvQ3Vyc29yV3guY3Bw
Ci0gICAgICAgICAgICBwbGF0Zm9ybS93eC9EcmFnRGF0YVd4LmNwcAotICAgICAgICAgICAgcGxh
dGZvcm0vd3gvRHJhZ0ltYWdlV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS93eC9FdmVudExv
b3BXeC5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL3d4L0ZpbGVTeXN0ZW1XeC5jcHAKLSAgICAg
ICAgICAgIHBsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9Gb250UGxhdGZvcm1EYXRhV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9Gb250V3guY3BwICAgICAgICAgICAgIAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvR2x5cGhNYXBXeC5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L1Np
bXBsZUZvbnREYXRhV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS93eC9LZXlib2FyZEV2ZW50
V3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS93eC9Mb2NhbGl6ZWRTdHJpbmdzV3guY3BwCi0g
ICAgICAgICAgICBwbGF0Zm9ybS93eC9Mb2dnaW5nV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9y
bS93eC9NaW1lVHlwZVJlZ2lzdHJ5V3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS93eC9Nb3Vz
ZUV2ZW50V3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS93eC9Nb3VzZVdoZWVsRXZlbnRXeC5j
cHAKLSAgICAgICAgICAgIHBsYXRmb3JtL3d4L1Bhc3RlYm9hcmRXeC5jcHAKLSAgICAgICAgICAg
IHBsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS93eC9T
Y3JlZW5XeC5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAKLSAg
ICAgICAgICAgIHBsYXRmb3JtL3d4L1NvdW5kV3guY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS90
ZXh0L3d4L1N0cmluZ1d4LmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vd3gvV2lkZ2V0V3guY3Bw
Ci0gICAgICAgICAgICBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAotICAgICAgICAgICAg
cGxhdGZvcm0vd3gvQ29udGV4dE1lbnVJdGVtV3guY3BwCi0gICAgICAgICAgIAotICAgICAgICAg
ICAgPCEtLSBmaWxlcyBmcm9tIG90aGVyIHBvcnRzIHdlIGN1cnJlbnRseSByZWx5IG9uIC0tPgor
ICAgICAgICAgIHBhZ2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAKKyAgICAgICAgICBwYWdlL3d4
L0V2ZW50SGFuZGxlcld4LmNwcAorCisgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJh
bnNmb3JtYXRpb25NYXRyaXhXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9D
b2xvcld4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0Zsb2F0UmVjdFd4LmNw
cAorICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYWRpZW50V3guY3BwCisgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCisgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZVNvdXJjZVd4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlV3guY3BwCisgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW50UG9p
bnRXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbnRSZWN0V3guY3BwCisg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvUGF0aFd4LmNwcAorICAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3d4L1Blbld4LmNwcAorCisgICAgICAgICAgcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCisKKyAgICAgICAgICBwbGF0Zm9ybS93eC9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCisgICAgICAgICAgcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guY3Bw
CisgICAgICAgICAgcGxhdGZvcm0vd3gvQ3Vyc29yV3guY3BwCisgICAgICAgICAgcGxhdGZvcm0v
d3gvRHJhZ0RhdGFXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS93eC9EcmFnSW1hZ2VXeC5jcHAK
KyAgICAgICAgICBwbGF0Zm9ybS93eC9FdmVudExvb3BXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9y
bS93eC9GaWxlU3lzdGVtV3guY3BwCisgICAgICAgICAgcGxhdGZvcm0vd3gvUG9wdXBNZW51V3gu
Y3BwCisgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udENhY2hlV3guY3BwCisgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvRm9udFBsYXRmb3JtRGF0YVd4LmNwcAorICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ZvbnRXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93eC9HbHlwaE1hcFd4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3d4
L1NpbXBsZUZvbnREYXRhV3guY3BwCisgICAgICAgICAgcGxhdGZvcm0vd3gvS2V5Ym9hcmRFdmVu
dFd4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL3d4L0xvY2FsaXplZFN0cmluZ3NXeC5jcHAKKyAg
ICAgICAgICBwbGF0Zm9ybS93eC9Mb2dnaW5nV3guY3BwCisgICAgICAgICAgcGxhdGZvcm0vd3gv
TWltZVR5cGVSZWdpc3RyeVd4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL3d4L01vdXNlRXZlbnRX
eC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS93eC9Nb3VzZVdoZWVsRXZlbnRXeC5jcHAKKyAgICAg
ICAgICBwbGF0Zm9ybS93eC9QYXN0ZWJvYXJkV3guY3BwCisgICAgICAgICAgcGxhdGZvcm0vd3gv
UmVuZGVyVGhlbWVXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS93eC9TY3JlZW5XeC5jcHAKKyAg
ICAgICAgICBwbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCisgICAgICAgICAgcGxhdGZvcm0v
d3gvU291bmRXeC5jcHAKKyAgICAgICAgICBwbGF0Zm9ybS90ZXh0L3d4L1N0cmluZ1d4LmNwcAor
ICAgICAgICAgIHBsYXRmb3JtL3d4L1dpZGdldFd4LmNwcAorICAgICAgICAgIHBsYXRmb3JtL3d4
L0NvbnRleHRNZW51V3guY3BwCisgICAgICAgICAgcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVJdGVt
V3guY3BwCisKKyAgICAgICAgICA8IS0tIGZpbGVzIGZyb20gb3RoZXIgcG9ydHMgd2UgY3VycmVu
dGx5IHJlbHkgb24gLS0+CiAgICAgICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2ll
SmFyQ3VybC5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Gb3JtRGF0YVN0
cmVhbUN1cmwuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsLmNwcApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVNv
dXJjZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0lt
YWdlU291cmNlV3guY3BwCShyZXZpc2lvbiA0NDY2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvSW1hZ2VTb3VyY2VXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw1NiArMTg1
LDcgQEAgTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQQogICAgIGlmICgh
YnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGJ1ZmZlci0+
cmVjdCgpOwotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVzID0gKHVuc2lnbmVkIGNoYXIqKWJ1ZmZl
ci0+Ynl0ZXMoKS5kYXRhKCk7Ci0gICAgbG9uZyBjb2xvclNpemUgPSBidWZmZXItPmJ5dGVzKCku
c2l6ZSgpOwotICAgIAotICAgIHR5cGVkZWYgd3hQaXhlbERhdGE8d3hCaXRtYXAsIHd4QWxwaGFQ
aXhlbEZvcm1hdD4gUGl4ZWxEYXRhOwotCi0gICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7
Ci0gICAgaW50IGhlaWdodCA9IHNpemUoKS5oZWlnaHQoKTsKLQotICAgIHd4Qml0bWFwKiBibXAg
PSBuZXcgd3hCaXRtYXAod2lkdGgsIGhlaWdodCwgMzIpOwotICAgIFBpeGVsRGF0YSBkYXRhKCpi
bXApOwotICAgIAotICAgIGludCByb3dDb3VudGVyID0gMDsKLSAgICBsb25nIHBpeGVsQ291bnRl
ciA9IDA7Ci0gICAgCi0gICAgUGl4ZWxEYXRhOjpJdGVyYXRvciBwKGRhdGEpOwotICAgIAotICAg
IFBpeGVsRGF0YTo6SXRlcmF0b3Igcm93U3RhcnQgPSBwOyAKLSAgICAKLSAgICAvLyBOQjogSXQg
YXBwZWFycyB0aGF0IHRoZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdCQSBm
b3JtYXQuCi0gICAgLy8gVGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5IG9uIGJvdGggcHBjIGFuZCBp
bnRlbCwgbWVhbmluZyB0aGUgaXNzdWUgaXMKLSAgICAvLyBsaWtlbHkgbm90IGFuIGlzc3VlIG9m
IGJ5dGUgb3JkZXIgZ2V0dGluZyBtaXhlZCB1cCBvbiBkaWZmZXJlbnQgYXJjaHMuIAotICAgIGZv
ciAobG9uZyBpID0gMDsgaSA8IGJ1ZmZlci0+Ynl0ZXMoKS5zaXplKCkqNDsgaSs9NCkgewotICAg
ICAgICBwLlJlZCgpID0gYnl0ZXNbaSsyXTsKLSAgICAgICAgcC5HcmVlbigpID0gYnl0ZXNbaSsx
XTsKLSAgICAgICAgcC5CbHVlKCkgPSBieXRlc1tpKzBdOwotICAgICAgICBwLkFscGhhKCkgPSBi
eXRlc1tpKzNdOwotICAgICAgICAKLSAgICAgICAgcCsrOwotCi0gICAgICAgIHBpeGVsQ291bnRl
cisrOwotICAgICAgICBpZiAoIChwaXhlbENvdW50ZXIgJSB3aWR0aCApID09IDAgKSB7Ci0gICAg
ICAgICAgICByb3dDb3VudGVyKys7Ci0gICAgICAgICAgICBwID0gcm93U3RhcnQ7Ci0gICAgICAg
ICAgICBwLk1vdmVUbyhkYXRhLCAwLCByb3dDb3VudGVyKTsKLSAgICAgICAgfQotCi0gICAgfQot
I2lmICF3eENIRUNLX1ZFUlNJT04oMiw5LDApCi0gICAgYm1wLT5Vc2VBbHBoYSgpOwotI2VuZGlm
Ci0gICAgQVNTRVJUKGJtcC0+SXNPaygpKTsKLQotI2lmIFVTRShXWEdDKQotICAgIHd4R3JhcGhp
Y3NCaXRtYXAqIGJpdG1hcCA9ICBuZXcgd3hHcmFwaGljc0JpdG1hcCh3eEdyYXBoaWNzUmVuZGVy
ZXI6OkdldERlZmF1bHRSZW5kZXJlcigpLT5DcmVhdGVCaXRtYXAoKmJtcCkpOwotICAgIGRlbGV0
ZSBibXA7Ci0gICAgcmV0dXJuIGJpdG1hcDsKLSNlbHNlCi0gICAgcmV0dXJuIGJtcDsKLSNlbmRp
ZgorICAgIHJldHVybiBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKIH0KIAogZmxvYXQgSW1h
Z2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24g
NDQ2NjgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTAgKzEzNCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAg
ICAgIHsKLSNpZiBQTEFURk9STShDQUlSTykKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZP
Uk0oV1gpCiAgICAgICAgICAgICByZXR1cm4gbV9ieXRlcy5kYXRhKCkgKyAoeSAqIHdpZHRoKCkp
ICsgeDsKICNlbGlmIFBMQVRGT1JNKFNLSUEpCiAgICAgICAgICAgICByZXR1cm4gbV9iaXRtYXAu
Z2V0QWRkcjMyKHgsIHkpOworI2Vsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICAgICAgfQogCkBAIC0xNTcsNyAr
MTYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
LSNpZiBQTEFURk9STShDQUlSTykKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oV1gp
CiAgICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYnl0ZXM7CiAgICAgICAgIEludFNpemUgbV9z
aXplOyAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgVGhpcyBzaG91bGQgYmUgdGhl
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIEltYWdlRGVjb2Rlcjo6
bV9zaXplLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFn
ZURlY29kZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAJKHJldmlzaW9uIDQ0NjY4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBSR0JBMzJCdWZmZXI6OnNl
dEhhc0FscGhhKGJvb2wgYWxwaAogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAotdm9pZCBz
ZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQordm9pZCBSR0JBMzJCdWZmZXI6OnNldFN0YXR1
cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0dXM7CiB9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVj
b2Rlcld4LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
RGVjb2Rlci5oIgorCisvLyBGSVhNRTogQXJlIGFsbCB0aGVzZSBuZWVkZWQ/CisjaW5jbHVkZSA8
d3gvZGVmcy5oPgorI2luY2x1ZGUgPHd4L2JpdG1hcC5oPgorI2lmIFVTRShXWEdDKQorI2luY2x1
ZGUgPHd4L2dyYXBoaWNzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3eC9pbWFnZS5oPgorI2luY2x1
ZGUgPHd4L3Jhd2JtcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JHQkEzMkJ1ZmZlcjo6
UkdCQTMyQnVmZmVyKCkKKyAgICA6IG1faGFzQWxwaGEoZmFsc2UpCisgICAgLCBtX3N0YXR1cyhG
cmFtZUVtcHR5KQorICAgICwgbV9kdXJhdGlvbigwKQorICAgICwgbV9kaXNwb3NhbE1ldGhvZChE
aXNwb3NlTm90U3BlY2lmaWVkKQoreworfSAKKwordm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkK
K3sKKyAgICBtX2J5dGVzLmNsZWFyKCk7CisgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OworICAg
IC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZm
ZXJDYWNoZSgpCisgICAgLy8gY2FsbHMgdGhpcyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0
IG90aGVyIGZ1bmN0aW9ucyBsaWtlCisgICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkgYW5kIGZyYW1l
Q29tcGxldGUoKSBtYXkgc3RpbGwgbmVlZCB0byByZWFkCisgICAgLy8gb3RoZXIgbWV0YWRhdGEg
b3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjp6ZXJvRmls
bCgpCit7CisgICAgbV9ieXRlcy5maWxsKDApOworICAgIG1faGFzQWxwaGEgPSB0cnVlOworfQor
Cit2b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBv
dGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fYnl0ZXMgPSBvdGhlci5tX2J5dGVzOworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxw
aGEpOworfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBu
ZXdIZWlnaHQpCit7CisgICAgLy8gTk9URTogVGhpcyBoYXMgbm8gd2F5IHRvIGNoZWNrIGZvciBh
bGxvY2F0aW9uIGZhaWx1cmUgaWYgdGhlCisgICAgLy8gcmVxdWVzdGVkIHNpemUgd2FzIHRvbyBi
aWcuLi4KKyAgICBtX2J5dGVzLnJlc2l6ZShuZXdXaWR0aCAqIG5ld0hlaWdodCk7CisgICAgbV9z
aXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKworICAgIC8vIFplcm8gdGhlIGlt
YWdlLgorICAgIHplcm9GaWxsKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2J5dGVzLmRh
dGEoKTsKKyAgICAKKyAgICB0eXBlZGVmIHd4UGl4ZWxEYXRhPHd4Qml0bWFwLCB3eEFscGhhUGl4
ZWxGb3JtYXQ+IFd4UGl4ZWxEYXRhOworCisgICAgd3hCaXRtYXAqIGJtcCA9IG5ldyB3eEJpdG1h
cCh3aWR0aCgpLCBoZWlnaHQoKSwgMzIpOworICAgIFd4UGl4ZWxEYXRhIGRhdGEoKmJtcCk7Cisg
ICAgCisgICAgaW50IHJvd0NvdW50ZXIgPSAwOworICAgIGxvbmcgcGl4ZWxDb3VudGVyID0gMDsK
KyAgICAKKyAgICBXeFBpeGVsRGF0YTo6SXRlcmF0b3IgcChkYXRhKTsKKyAgICAKKyAgICBXeFBp
eGVsRGF0YTo6SXRlcmF0b3Igcm93U3RhcnQgPSBwOyAKKyAgICAKKyAgICAvLyBOQjogSXQgYXBw
ZWFycyB0aGF0IHRoZSBkYXRhIGlzIGluIEJHUkEgZm9ybWF0IGluc3RlYWQgb2YgUkdCQSBmb3Jt
YXQuCisgICAgLy8gVGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5IG9uIGJvdGggcHBjIGFuZCBpbnRl
bCwgbWVhbmluZyB0aGUgaXNzdWUgaXMKKyAgICAvLyBsaWtlbHkgbm90IGFuIGlzc3VlIG9mIGJ5
dGUgb3JkZXIgZ2V0dGluZyBtaXhlZCB1cCBvbiBkaWZmZXJlbnQgYXJjaHMuIAorICAgIGZvciAo
bG9uZyBpID0gMDsgaSA8IG1fYnl0ZXMuc2l6ZSgpICogc2l6ZW9mKFBpeGVsRGF0YSk7IGkgKz0g
c2l6ZW9mKFBpeGVsRGF0YSkpIHsKKyAgICAgICAgcC5SZWQoKSA9IGJ5dGVzW2krMl07CisgICAg
ICAgIHAuR3JlZW4oKSA9IGJ5dGVzW2krMV07CisgICAgICAgIHAuQmx1ZSgpID0gYnl0ZXNbaSsw
XTsKKyAgICAgICAgcC5BbHBoYSgpID0gYnl0ZXNbaSszXTsKKyAgICAgICAgCisgICAgICAgIHAr
KzsKKworICAgICAgICBwaXhlbENvdW50ZXIrKzsKKyAgICAgICAgaWYgKCAocGl4ZWxDb3VudGVy
ICUgd2lkdGgoKSApID09IDAgKSB7CisgICAgICAgICAgICByb3dDb3VudGVyKys7CisgICAgICAg
ICAgICBwID0gcm93U3RhcnQ7CisgICAgICAgICAgICBwLk1vdmVUbyhkYXRhLCAwLCByb3dDb3Vu
dGVyKTsKKyAgICAgICAgfQorCisgICAgfQorI2lmICF3eENIRUNLX1ZFUlNJT04oMiw5LDApCisg
ICAgYm1wLT5Vc2VBbHBoYSgpOworI2VuZGlmCisgICAgQVNTRVJUKGJtcC0+SXNPaygpKTsKKwor
I2lmIFVTRShXWEdDKQorICAgIHd4R3JhcGhpY3NCaXRtYXAqIGJpdG1hcCA9ICBuZXcgd3hHcmFw
aGljc0JpdG1hcCh3eEdyYXBoaWNzUmVuZGVyZXI6OkdldERlZmF1bHRSZW5kZXJlcigpLT5DcmVh
dGVCaXRtYXAoKmJtcCkpOworICAgIGRlbGV0ZSBibXA7CisgICAgcmV0dXJuIGJpdG1hcDsKKyNl
bHNlCisgICAgcmV0dXJuIGJtcDsKKyNlbmRpZgorfQorCitib29sIFJHQkEzMkJ1ZmZlcjo6aGFz
QWxwaGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0FscGhhOworfQorCit2b2lkIFJHQkEz
MkJ1ZmZlcjo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKK3sKKyAgICBtX2hhc0FscGhhID0gYWxw
aGE7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVz
KQoreworICAgIG1fc3RhdHVzID0gc3RhdHVzOworfQorCitSR0JBMzJCdWZmZXImIFJHQkEzMkJ1
ZmZlcjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit7CisgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX2J5dGVzID0gb3Ro
ZXIubV9ieXRlczsKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgc2V0SGFzQWxwaGEo
b3RoZXIuaGFzQWxwaGEoKSk7CisgICAgc2V0UmVjdChvdGhlci5yZWN0KCkpOworICAgIHNldFN0
YXR1cyhvdGhlci5zdGF0dXMoKSk7CisgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7
CisgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitpbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0IHsKKyAgICBy
ZXR1cm4gbV9zaXplLndpZHRoKCk7Cit9CisKK2ludCBSR0JBMzJCdWZmZXI6OmhlaWdodCgpIGNv
bnN0IHsKKyAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>