<?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>53455</bug_id>
          
          <creation_ts>2011-01-31 15:05:21 -0800</creation_ts>
          <short_desc>Update ImageDecoder as suggested on webkit-dev</short_desc>
          <delta_ts>2011-02-02 15:42:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Adam Barth">abarth</reporter>
          <assigned_to name="Peter Kasting">pkasting</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>342841</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-31 15:05:21 -0800</bug_when>
    <thetext>Update ImageDecoder as suggested on webkit-dev</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342843</commentid>
    <comment_count>1</comment_count>
      <attachid>80685</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-31 15:05:57 -0800</bug_when>
    <thetext>Created attachment 80685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342844</commentid>
    <comment_count>2</comment_count>
      <attachid>80686</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-31 15:09:19 -0800</bug_when>
    <thetext>Created attachment 80686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342847</commentid>
    <comment_count>3</comment_count>
      <attachid>80686</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-31 15:14:13 -0800</bug_when>
    <thetext>Comment on attachment 80686
Patch

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

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:56
&gt; +inline bool matchesGIFSignature(char* contents)

I&apos;d remove &quot;inline&quot; on all these as it&apos;s not important whether they&apos;re inlined.

I also suggest an anonymous namespace around all of them.  (Or &quot;static&quot; on each, but that&apos;s deprecated in C++.)

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:72
&gt; +inline bool matchesWebPSignature(char* contents const SharedBuffer&amp; data)

Missing comma, won&apos;t compile.

Instead of passing extra args, I&apos;d just change the caller and simplify all this, see below.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:-59
&gt; -    // with.

Might be nice to instead note that this value needs to be as large as the largest sequence above.

In that sense, I think we should change this to 8 and thus avoid all the additional copying stuff for WebP, unless it&apos;s possible to have a valid image of one of the other types that&apos;s less than 8 bytes total (I don&apos;t think it is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342869</commentid>
    <comment_count>4</comment_count>
      <attachid>80691</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-31 15:49:26 -0800</bug_when>
    <thetext>Created attachment 80691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342886</commentid>
    <comment_count>5</comment_count>
      <attachid>80691</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-01-31 16:05:47 -0800</bug_when>
    <thetext>Comment on attachment 80691
Patch

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

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:76
&gt; +    return !memcmp(contents, &quot;RIFF&quot;, 4) &amp;&amp; !memcmp(header + 8, &quot;WEBPVP&quot;, 6);

“header” doesn’t appear to be defined here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342920</commentid>
    <comment_count>6</comment_count>
      <attachid>80691</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-31 17:07:44 -0800</bug_when>
    <thetext>Comment on attachment 80691
Patch

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

LGTM, whatever that&apos;s worth :).  Thanks for taking the initiative on this one.

P.S. You can remove the &quot;Zero the image&quot; comment too if you want, that&apos;s another one in this file that&apos;s pretty worthless.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:76
&gt;&gt; +    return !memcmp(contents, &quot;RIFF&quot;, 4) &amp;&amp; !memcmp(header + 8, &quot;WEBPVP&quot;, 6);
&gt; 
&gt; “header” doesn’t appear to be defined here.

Yeah... I think it should be |contents|.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:95
&gt; +}

I think this is supposed to get a &quot;// namespace&quot; comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342926</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-31 17:16:55 -0800</bug_when>
    <thetext>Attachment 80691 did not build on chromium:
Build output: http://queues.webkit.org/results/7681586</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342966</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-31 19:07:54 -0800</bug_when>
    <thetext>Would be nice to update the header to clean up some of its comments/function names too.  Maciej and I may not agree on everything but there&apos;s certainly some stuff in there that we both concur is valueless.

I&apos;ll try to take a quick pass at that tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342971</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-31 19:26:24 -0800</bug_when>
    <thetext>Attachment 80691 did not build on chromium:
Build output: http://queues.webkit.org/results/7685429</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343032</commentid>
    <comment_count>10</comment_count>
      <attachid>80691</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-31 22:12:14 -0800</bug_when>
    <thetext>Comment on attachment 80691
Patch

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

Compile error (where header needs to be contents) plus a few other things to consider.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:43
&gt; +unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const SharedBuffer&amp; sharedBuffer, unsigned offset)

Why did this go from being static to being in an anonymous namespace? (I&apos;ve seen this a lot in Chromium code but WebKit seems to go with static functions, so I was curious what caused you to choose one over the other.)

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:60
&gt; +    return !strncmp(contents, &quot;GIF8&quot;, 4);

How odd that some places use memcmp and others strncmp but you are simply translating what was there already.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:95
&gt;&gt; +}
&gt; 
&gt; I think this is supposed to get a &quot;// namespace&quot; comment?

fwiw, that isn&apos;t a WebKit style (and several folks don&apos;t want it).

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:97
&gt;  ImageDecoder* ImageDecoder::create(const SharedBuffer&amp; data, ImageSource::AlphaOption alphaOption, ImageSource::GammaAndColorProfileOption gammaAndColorProfileOption)

Additional future clean up would make this a PassOwnPtr.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:99
&gt; +    static const unsigned lengthOfLongestSignature = 14; // To wit: &quot;RIFF????WEBPVP&quot;

This is different from before in that it potentially allowed 4 byte items to go thru previously but perhaps no image can be encoded in less than 14 bytes?

What about doing something like
  memset(contents, sizeof(contents) - length, 0xee);
instead of returning?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343365</commentid>
    <comment_count>11</comment_count>
      <attachid>80691</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 11:16:13 -0800</bug_when>
    <thetext>Comment on attachment 80691
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:43
&gt;&gt; -static unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const SharedBuffer&amp; sharedBuffer, unsigned offset)
&gt;&gt; +namespace {
&gt;&gt; +
&gt;&gt; +unsigned copyFromSharedBuffer(char* buffer, unsigned bufferLength, const SharedBuffer&amp; sharedBuffer, unsigned offset)
&gt; 
&gt; Why did this go from being static to being in an anonymous namespace? (I&apos;ve seen this a lot in Chromium code but WebKit seems to go with static functions, so I was curious what caused you to choose one over the other.)

I can never remember which one I&apos;m supposed to use.  Whichever one I pick, someone always tells me to use the other one.  I&apos;m happy to do whichever.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:60
&gt;&gt; +bool matchesGIFSignature(char* contents)
&gt;&gt; +{
&gt;&gt; +    return !strncmp(contents, &quot;GIF8&quot;, 4);
&gt; 
&gt; How odd that some places use memcmp and others strncmp but you are simply translating what was there already.

Yes.  The strncmp are incorrect according to http://tools.ietf.org/html/draft-ietf-websec-mime-sniff

I&apos;ll fix them in a follow-up patch to keep the functional changes separate.

&gt;&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:76
&gt;&gt;&gt; +    return !memcmp(contents, &quot;RIFF&quot;, 4) &amp;&amp; !memcmp(header + 8, &quot;WEBPVP&quot;, 6);
&gt;&gt; 
&gt;&gt; “header” doesn’t appear to be defined here.
&gt; 
&gt; Yeah... I think it should be |contents|.

Yeah.  Turns out its hard to write code without a compiler.  :)

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:97
&gt;&gt;  ImageDecoder* ImageDecoder::create(const SharedBuffer&amp; data, ImageSource::AlphaOption alphaOption, ImageSource::GammaAndColorProfileOption gammaAndColorProfileOption)
&gt; 
&gt; Additional future clean up would make this a PassOwnPtr.

Good idea.  :)

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:99
&gt;&gt; +    static const unsigned lengthOfLongestSignature = 14; // To wit: &quot;RIFF????WEBPVP&quot;
&gt; 
&gt; This is different from before in that it potentially allowed 4 byte items to go thru previously but perhaps no image can be encoded in less than 14 bytes?
&gt; 
&gt; What about doing something like
&gt;   memset(contents, sizeof(contents) - length, 0xee);
&gt; instead of returning?

That seems kind of hacky.  14 bytes is really small for an image.  As an example, a 1x1 transparent GIF is 43 bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343373</commentid>
    <comment_count>12</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-01 11:26:33 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Why did this go from being static to being in an anonymous namespace? (I&apos;ve seen this a lot in Chromium code but WebKit seems to go with static functions, so I was curious what caused you to choose one over the other.)
&gt; 
&gt; I can never remember which one I&apos;m supposed to use.  Whichever one I pick, someone always tells me to use the other one.  I&apos;m happy to do whichever.

There are two reasons to use an anonymous namespace here:

(1) Since we&apos;re now going to have a whole bunch of helper functions, it&apos;s easier (for me at least) to see they&apos;re all a block of helpers when wrapped in a namespace than when each is individually marked static.
(2) &quot;static&quot; for file-scope linkage is deprecated in C++ (see Stroustrup 3rd ed., p. 200, 818).

&gt; Yes.  The strncmp are incorrect according to http://tools.ietf.org/html/draft-ietf-websec-mime-sniff
&gt; 
&gt; I&apos;ll fix them in a follow-up patch to keep the functional changes separate.

I&apos;d be OK with fixing them here if you want, it&apos;s pretty clear what the changes mean.

&gt; &gt; This is different from before in that it potentially allowed 4 byte items to go thru previously but perhaps no image can be encoded in less than 14 bytes?
&gt; &gt; 
&gt; &gt; What about doing something like
&gt; &gt;   memset(contents, sizeof(contents) - length, 0xee);
&gt; &gt; instead of returning?
&gt; 
&gt; That seems kind of hacky.  14 bytes is really small for an image.  As an example, a 1x1 transparent GIF is 43 bytes.

This is what I was getting at when I asked if anything could be valid in 8 bytes.  I don&apos;t think anything can, and I don&apos;t think anything can in 14 bytes either, though I&apos;m not totally sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343473</commentid>
    <comment_count>13</comment_count>
      <attachid>80691</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-01 13:28:59 -0800</bug_when>
    <thetext>Comment on attachment 80691
Patch

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

I can probably take over this patch if Adam wants as I can test-compile it and also roll in my promised cleanup of the header.

&gt;&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:95
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; I think this is supposed to get a &quot;// namespace&quot; comment?
&gt; 
&gt; fwiw, that isn&apos;t a WebKit style (and several folks don&apos;t want it).

Oh.  I was going off the namespace examples in the WK style guide, which seemed to use it.  Someone should maybe remove them from that (not sure how myself).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343535</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-01 14:17:37 -0800</bug_when>
    <thetext>&gt; I can probably take over this patch if Adam wants as I can test-compile it and also roll in my promised cleanup of the header.

Go for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343570</commentid>
    <comment_count>15</comment_count>
      <attachid>80833</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-01 14:58:51 -0800</bug_when>
    <thetext>Created attachment 80833
Larger patch

This is Adam&apos;s patch plus:
* Convert two strncmp() calls to memcmp()
* Clean up comments in header some
* Rename/eliminate a couple functions in header (required touching various callers/impls)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343585</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 15:17:59 -0800</bug_when>
    <thetext>Attachment 80833 did not build on chromium:
Build output: http://queues.webkit.org/results/7683750</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343601</commentid>
    <comment_count>17</comment_count>
      <attachid>80841</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-01 15:39:59 -0800</bug_when>
    <thetext>Created attachment 80841
Larger patch v1.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343763</commentid>
    <comment_count>18</comment_count>
      <attachid>80841</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-01 18:38:33 -0800</bug_when>
    <thetext>Comment on attachment 80841
Larger patch v1.1

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

Sorry to r- over misc issues in comments but since that is what this patch is about it seems appropriate.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:52
&gt; +    // ImageFrame represents the decoded image data.  This buffer is what all

Since you&apos;re fixing up the comments consider adjusting the ones that you fix have only one space after periods which is typical in WebKit (although not in the style guide yet because I haven&apos;t had a chance to update it).

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:115
&gt; +        // (This pointer will be owned by BitmapImage and freed in

Is this last sentence needed? It could be owned by and freed by any code and this code would not be affected. 

Also you added an open paren but no close paren.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:191
&gt; +        IntSize m_size; // The size of the buffer.  This should be the same as

Would m_bufferSize be a better name? (and then the first sentence seems redundant).

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:196
&gt; +        IntRect m_rect; // The rect of the original specified frame within the

m_originalFrameRect? (I&apos;m not sure if this rename helps or not. Just an idea.)

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:226
&gt; +        // Factory function to create an appropriate ImageDecoder.  Returns 0 if

Does this first sentence add anything?

It feels like the thing missing from this comment is that the caller need to take ownership of the returned value (but changing it to PassOwnPtr in another change will fix that w/o a comment).

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:243
&gt; +        // Lazily-decodes enough of the image to get the size (if possible).

I don&apos;t understand this comment as this function doesn&apos;t lazily decode anything.  Perhaps it should be removed.

It just does &quot;return !m_failed &amp;&amp; m_sizeAvailable;9&quot;

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:262
&gt; +        // frame.

I&apos;m trying to shorten this comment. How about

&quot;Returns the size of a particular frame which may vary for formats like ICO, where each frame represents a different icon.  Notably, for GIF, the size is constant because decoding makes all frames the same size.&quot;

Still a bit long but slightly shorter.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:268
&gt; +        // Sets the image size.  Returns whether the size is legal (i.e. not

It looks like the first sentence may go away.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:280
&gt; +        // Lazily-decodes enough of the image to get the frame count (if

This base implementation doesn&apos;t appear to lazily decode anything.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:287
&gt; +        // ImageDecoder-owned pointer.

Why is this &quot;Decodes as much of the requested frame as possible&quot; notable?

I would guess that the function would decode the frame buffer at the given index due to its name. Is it notable because it may not decode the whole frame?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:307
&gt; +        // frames.  In practice this is used on large animated GIFs to save

It feels like you could remove everything before &quot;In practice&quot; (and I&apos;m not sure if that is needed either as long as I can grep the code for it because usage may change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343769</commentid>
    <comment_count>19</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-01 18:46:34 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 80691 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80691&amp;action=review
&gt; 
&gt; I can probably take over this patch if Adam wants as I can test-compile it and also roll in my promised cleanup of the header.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.cpp:95
&gt; &gt;&gt;&gt; +}
&gt; &gt;&gt; 
&gt; &gt;&gt; I think this is supposed to get a &quot;// namespace&quot; comment?
&gt; &gt; 
&gt; &gt; fwiw, that isn&apos;t a WebKit style (and several folks don&apos;t want it).
&gt; 
&gt; Oh.  I was going off the namespace examples in the WK style guide, which seemed to use it.  Someone should maybe remove them from that (not sure how myself).

fwiw,
http://trac.webkit.org/browser/trunk/Websites/webkit.org/coding/coding-style.html


Discussion:
  http://article.gmane.org/gmane.os.opendarwin.webkit.devel/10563,
  https://lists.webkit.org/pipermail/webkit-dev/2010-August/013759.html
You&apos;ll also find a few supports in the second thread. The short answer is that there doesn&apos;t seem to be a style rule here either way, so the guide is correct. (You can do it or not, so I usually only ask for consistency within the patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344189</commentid>
    <comment_count>20</comment_count>
      <attachid>80841</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-02 13:34:48 -0800</bug_when>
    <thetext>Comment on attachment 80841
Larger patch v1.1

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

New patch to be attached momentarily.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:52
&gt;&gt; +    // ImageFrame represents the decoded image data.  This buffer is what all
&gt; 
&gt; Since you&apos;re fixing up the comments consider adjusting the ones that you fix have only one space after periods which is typical in WebKit (although not in the style guide yet because I haven&apos;t had a chance to update it).

I&apos;d prefer not to do this -- most of the Image subsystem is consistent about two-spaces-after-period.  (I&apos;d also rather not specify this in the style guide, though I&apos;m OK with &quot;one space before //&quot;.)

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:115
&gt;&gt; +        // (This pointer will be owned by BitmapImage and freed in
&gt; 
&gt; Is this last sentence needed? It could be owned by and freed by any code and this code would not be affected. 
&gt; 
&gt; Also you added an open paren but no close paren.

Fixed the parens.

I admit that the last sentence doesn&apos;t affect the code here, but I&apos;d like to keep it because it took a long time to understand that ownership scheme and ensure it was correct.

I added the words &quot;Actual use:&quot; to it in hopes of more clarity.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:191
&gt;&gt; +        IntSize m_size; // The size of the buffer.  This should be the same as
&gt; 
&gt; Would m_bufferSize be a better name? (and then the first sentence seems redundant).

Actually, the comment is flat wrong.  Deleted it entirely.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:196
&gt;&gt; +        IntRect m_rect; // The rect of the original specified frame within the
&gt; 
&gt; m_originalFrameRect? (I&apos;m not sure if this rename helps or not. Just an idea.)

Sure, deleted the first part of the comment too.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:226
&gt;&gt; +        // Factory function to create an appropriate ImageDecoder.  Returns 0 if
&gt; 
&gt; Does this first sentence add anything?
&gt; 
&gt; It feels like the thing missing from this comment is that the caller need to take ownership of the returned value (but changing it to PassOwnPtr in another change will fix that w/o a comment).

Changed first sentence to instead say that the pointer is caller-owned.  I went to change this to PassOwnPtr and discovered there&apos;s some interesting typedef stuff in ImageSource.h that&apos;s going to make this trickier (because ImageSource also works with ports that use other image decoders than these), so I punted that for now.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:243
&gt;&gt; +        // Lazily-decodes enough of the image to get the size (if possible).
&gt; 
&gt; I don&apos;t understand this comment as this function doesn&apos;t lazily decode anything.  Perhaps it should be removed.
&gt; 
&gt; It just does &quot;return !m_failed &amp;&amp; m_sizeAvailable;9&quot;

I wasn&apos;t sure how to write this comment.  The function is overridden by every decoder to do the actual lazy-decoding -- what&apos;s here is just a check that all of them call.  Eventually I&apos;d like to factor out some more of that functionality so that this base implementation actually calls a function called decode(), but until then I still wanted to document that this function always does (and indeed must do) lazy-decode.

I tried adding a FIXME here.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:262

&gt; 
&gt; I&apos;m trying to shorten this comment. How about
&gt; 
&gt; &quot;Returns the size of a particular frame which may vary for formats like ICO, where each frame represents a different icon.  Notably, for GIF, the size is constant because decoding makes all frames the same size.&quot;
&gt; 
&gt; Still a bit long but slightly shorter.

I took a stab at shortening this.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:268
&gt;&gt; +        // Sets the image size.  Returns whether the size is legal (i.e. not
&gt; 
&gt; It looks like the first sentence may go away.

I removed it.  I&apos;m worried, though, that this makes it sound as if the function doesn&apos;t actually set size, just checks it.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:280
&gt;&gt; +        // Lazily-decodes enough of the image to get the frame count (if
&gt; 
&gt; This base implementation doesn&apos;t appear to lazily decode anything.

Added another FIXME.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:287
&gt;&gt; +        // ImageDecoder-owned pointer.
&gt; 
&gt; Why is this &quot;Decodes as much of the requested frame as possible&quot; notable?
&gt; 
&gt; I would guess that the function would decode the frame buffer at the given index due to its name. Is it notable because it may not decode the whole frame?

Notable for two reasons:
1) As you guessed, the function may decode only part (or even none) of the frame, but it&apos;s still legal to call.
2) Conversely, the function _will_ decode what it can, even if that hasn&apos;t been decoded previously (in other words, it&apos;s not a cheap accessor).

My goal was to convey both those points, I don&apos;t know if I succeeded.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:307
&gt;&gt; +        // frames.  In practice this is used on large animated GIFs to save
&gt; 
&gt; It feels like you could remove everything before &quot;In practice&quot; (and I&apos;m not sure if that is needed either as long as I can grep the code for it because usage may change).

I shortened the first part and removed the second.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344191</commentid>
    <comment_count>21</comment_count>
      <attachid>80960</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-02 13:35:26 -0800</bug_when>
    <thetext>Created attachment 80960
Larger patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344212</commentid>
    <comment_count>22</comment_count>
      <attachid>80964</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-02 13:50:00 -0800</bug_when>
    <thetext>Created attachment 80964
Larger patch v2.1

Fix broken ChangeLog merge and typo in ImageDecoder.h (thanks David Levin!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344217</commentid>
    <comment_count>23</comment_count>
      <attachid>80964</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-02-02 13:56:56 -0800</bug_when>
    <thetext>Comment on attachment 80964
Larger patch v2.1

I did cq- simply because the patch doesn&apos;t apply cleanly (see the style or cr-linux bots).

If you want to do this through the commit queue, you can upload a new patch that applies cleanly and have the &quot;Reviewed by NOBODY (OOPS!).&quot; replaced with &quot;Reviewed by David Levin.&quot;
Then only mark the bug with cq+ (leave the r field blank). 

Or you can do the commit by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344226</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-02 13:59:49 -0800</bug_when>
    <thetext>&gt; If you want to do this through the commit queue, you can upload a new patch that applies cleanly and have the &quot;Reviewed by NOBODY (OOPS!).&quot; replaced with &quot;Reviewed by David Levin.&quot;
&gt; Then only mark the bug with cq+ (leave the r field blank). 

&quot;webkit-patch land-safely&quot; will do all that for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344245</commentid>
    <comment_count>25</comment_count>
      <attachid>80969</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-02-02 14:17:40 -0800</bug_when>
    <thetext>Created attachment 80969
Larger patch v2.2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344314</commentid>
    <comment_count>26</comment_count>
      <attachid>80969</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-02 15:34:16 -0800</bug_when>
    <thetext>Comment on attachment 80969
Larger patch v2.2

Clearing flags on attachment: 80969

Committed r77427: &lt;http://trac.webkit.org/changeset/77427&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344315</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-02 15:34:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344320</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 15:42:47 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77427 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, Qt Linux ARMv7 Release, Chromium Linux Release, and EFL Linux Release (Build)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80685</attachid>
            <date>2011-01-31 15:05:57 -0800</date>
            <delta_ts>2011-01-31 15:09:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53455-20110131150556.patch</filename>
            <type>text/plain</type>
            <size>4895</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MTY0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMzEgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGUgSW1hZ2VEZWNvZGVyIGFzIHN1Z2dlc3RlZCBvbiB3ZWJr
aXQtZGV2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MzQ1NQorCisgICAgICAgIFJlbW92ZSBjb21tZW50cyB0aGF0IGZvbGtzIGRpZG4ndCBsaWtlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCBpbmxpbmUKKyAgICAgICAgZnVuY3Rpb25zIChhcyBzdWdnZXN0
ZWQgb24gd2Via2l0LWRldikuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0dJRlNpZ25hdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzUE5HU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdGNoZXNKUEVHU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNXZWJQ
U2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNCTVBTaWduYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6bWF0Y2hlc0lDT1NpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpt
YXRjaGVzQ1VSU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKToKKwogMjAxMS0wMS0zMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAkocmV2aXNpb24gNzcxNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1MSArNTMsODEgQEAg
c3RhdGljIHVuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYQogICAgIHJldHVybiBieXRl
c0V4dHJhY3RlZDsKIH0KIAoraW5saW5lIGJvb2wgbWF0Y2hlc0dJRlNpZ25hdHVyZShjaGFyKiBj
b250ZW50cykKK3sKKyAgICByZXR1cm4gIXN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCk7Cit9
CisKK2lubGluZSBib29sIG1hdGNoZXNQTkdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7Cisg
ICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCk7Cit9CisK
K2lubGluZSBib29sIG1hdGNoZXNKUEVHU2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAg
IHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiXHhGRlx4RDhceEZGIiwgMyk7Cit9CisKKyNpZiBV
U0UoV0VCUCkKK2lubGluZSBib29sIG1hdGNoZXNXZWJQU2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRz
KQoreworICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiUklGRiIsIDQpKSB7CisgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCB3ZWJwRXh0cmFNYXJrZXIgPSA2OworICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgd2VicEV4dHJhTWFya2Vyb2Zmc2V0ID0gODsKKyAgICAgICAgY2hhciBo
ZWFkZXJbd2VicEV4dHJhTWFya2VyXTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZy
b21TaGFyZWRCdWZmZXIoaGVhZGVyLCB3ZWJwRXh0cmFNYXJrZXIsIGRhdGEsIHdlYnBFeHRyYU1h
cmtlcm9mZnNldCk7CisgICAgICAgIGlmIChsZW5ndGggPj0gd2VicEV4dHJhTWFya2VyKSB7Cisg
ICAgICAgICAgICBpZiAoIW1lbWNtcChoZWFkZXIsICJXRUJQVlAiLCB3ZWJwRXh0cmFNYXJrZXIp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitpbmxpbmUgYm9vbCBtYXRjaGVzQk1QU2lnbmF0dXJl
KGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhc3RybmNtcChjb250ZW50cywgIkJNIiwg
Mik7Cit9CisKK2lubGluZSBib29sIG1hdGNoZXNJQ09TaWduYXR1cmUoY2hhciogY29udGVudHMp
Cit7CisgICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFceDAwIiwgNCk7
Cit9CisKK2lubGluZSBib29sIG1hdGNoZXNDVVJTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7
CisgICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDJceDAwIiwgNCk7Cit9
CisKIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVy
JiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikK
IHsKLSAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtp
bmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZwotICAgIC8vIHdpdGguCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heE1hcmtlckxlbmd0aCA9IDQ7CiAgICAgY2hhciBjb250ZW50c1ttYXhNYXJr
ZXJMZW5ndGhdOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNv
bnRlbnRzLCBtYXhNYXJrZXJMZW5ndGgsIGRhdGEsIDApOwogICAgIGlmIChsZW5ndGggPCBtYXhN
YXJrZXJMZW5ndGgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gR0lGcyBiZWdpbiB3aXRo
IEdJRjgoNyBvciA5KS4KLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAw
KQorICAgIGlmIChtYXRjaGVzR0lGU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJu
IG5ldyBHSUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKTsKIAotICAgIC8vIFRlc3QgZm9yIFBORy4KLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywg
Ilx4ODlceDUwXHg0RVx4NDciLCA0KSkKKyAgICBpZiAobWF0Y2hlc1BOR1NpZ25hdHVyZShjb250
ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBn
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBKUEVHCi0gICAgaWYgKCFtZW1j
bXAoY29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKSkKKyAgICBpZiAobWF0Y2hlc0pQRUdTaWdu
YXR1cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoYWxw
aGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAogI2lmIFVTRShXRUJQKQot
ICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiUklGRiIsIDQpKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCB3ZWJwRXh0cmFNYXJrZXIgPSA2OwotICAgICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgd2VicEV4dHJhTWFya2Vyb2Zmc2V0ID0gODsKLSAgICAgICAgY2hhciBoZWFkZXJb
d2VicEV4dHJhTWFya2VyXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFy
ZWRCdWZmZXIoaGVhZGVyLCB3ZWJwRXh0cmFNYXJrZXIsIGRhdGEsIHdlYnBFeHRyYU1hcmtlcm9m
ZnNldCk7Ci0gICAgICAgIGlmIChsZW5ndGggPj0gd2VicEV4dHJhTWFya2VyKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1lbWNtcChoZWFkZXIsICJXRUJQVlAiLCB3ZWJwRXh0cmFNYXJrZXIpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgV0VCUEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChtYXRj
aGVzV2ViUFNpZ25hdHVyZShjb250ZW50cykpCisgICAgICAgIHJldHVybiBuZXcgV0VCUEltYWdl
RGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogI2VuZGlm
CiAKLSAgICAvLyBCTVAKLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkK
KyAgICBpZiAobWF0Y2hlc0JNUFNpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBu
ZXcgQk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bik7CiAKLSAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQg
YnkgYSAyLWJ5dGUgMS4KLSAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQg
YnkgMi1ieXRlIDIuCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFceDAw
IiwgNCkgfHwgIW1lbWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAiLCA0KSkKKyAgICBp
ZiAobWF0Y2hlc0lDT1NpZ25hdHVyZShjb250ZW50cykgfHwgbWF0Y2hlc0NVUlNpZ25hdHVyZShj
b250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBHaXZlIHVwLiBXZSBkb24n
dCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KICAgICByZXR1cm4gMDsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80686</attachid>
            <date>2011-01-31 15:09:19 -0800</date>
            <delta_ts>2011-01-31 15:14:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53455-20110131150918.patch</filename>
            <type>text/plain</type>
            <size>4926</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MTY0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMzEgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGUgSW1hZ2VEZWNvZGVyIGFzIHN1Z2dlc3RlZCBvbiB3ZWJr
aXQtZGV2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MzQ1NQorCisgICAgICAgIFJlbW92ZSBjb21tZW50cyB0aGF0IGZvbGtzIGRpZG4ndCBsaWtlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCBpbmxpbmUKKyAgICAgICAgZnVuY3Rpb25zIChhcyBzdWdnZXN0
ZWQgb24gd2Via2l0LWRldikuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0dJRlNpZ25hdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzUE5HU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdGNoZXNKUEVHU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNXZWJQ
U2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNCTVBTaWduYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6bWF0Y2hlc0lDT1NpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpt
YXRjaGVzQ1VSU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKToKKwogMjAxMS0wMS0zMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAkocmV2aXNpb24gNzcxNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw1MSArNTMsODEgQEAg
c3RhdGljIHVuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYQogICAgIHJldHVybiBieXRl
c0V4dHJhY3RlZDsKIH0KIAoraW5saW5lIGJvb2wgbWF0Y2hlc0dJRlNpZ25hdHVyZShjaGFyKiBj
b250ZW50cykKK3sKKyAgICByZXR1cm4gIXN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCk7Cit9
CisKK2lubGluZSBib29sIG1hdGNoZXNQTkdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7Cisg
ICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCk7Cit9CisK
K2lubGluZSBib29sIG1hdGNoZXNKUEVHU2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAg
IHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiXHhGRlx4RDhceEZGIiwgMyk7Cit9CisKKyNpZiBV
U0UoV0VCUCkKK2lubGluZSBib29sIG1hdGNoZXNXZWJQU2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRz
IGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSkKK3sKKyAgICBpZiAoIW1lbWNtcChjb250ZW50cywg
IlJJRkYiLCA0KSkgeworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd2VicEV4dHJhTWFy
a2VyID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdlYnBFeHRyYU1hcmtlcm9m
ZnNldCA9IDg7CisgICAgICAgIGNoYXIgaGVhZGVyW3dlYnBFeHRyYU1hcmtlcl07CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGhlYWRlciwgd2VicEV4dHJh
TWFya2VyLCBkYXRhLCB3ZWJwRXh0cmFNYXJrZXJvZmZzZXQpOworICAgICAgICBpZiAobGVuZ3Ro
ID49IHdlYnBFeHRyYU1hcmtlcikgeworICAgICAgICAgICAgaWYgKCFtZW1jbXAoaGVhZGVyLCAi
V0VCUFZQIiwgd2VicEV4dHJhTWFya2VyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworaW5saW5l
IGJvb2wgbWF0Y2hlc0JNUFNpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4g
IXN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpOworfQorCitpbmxpbmUgYm9vbCBtYXRjaGVzSUNP
U2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRz
LCAiXHgwMFx4MDBceDAxXHgwMCIsIDQpOworfQorCitpbmxpbmUgYm9vbCBtYXRjaGVzQ1VSU2ln
bmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAi
XHgwMFx4MDBceDAyXHgwMCIsIDQpOworfQorCiBJbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6
Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9u
IGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiB7Ci0gICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5
dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcKLSAgICAv
LyB3aXRoLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhNYXJrZXJMZW5ndGggPSA0Owog
ICAgIGNoYXIgY29udGVudHNbbWF4TWFya2VyTGVuZ3RoXTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbWF4TWFya2VyTGVuZ3RoLCBkYXRhLCAw
KTsKICAgICBpZiAobGVuZ3RoIDwgbWF4TWFya2VyTGVuZ3RoKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIC8vIEdJRnMgYmVnaW4gd2l0aCBHSUY4KDcgb3IgOSkuCi0gICAgaWYgKHN0cm5jbXAo
Y29udGVudHMsICJHSUY4IiwgNCkgPT0gMCkKKyAgICBpZiAobWF0Y2hlc0dJRlNpZ25hdHVyZShj
b250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9u
LCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBUZXN0IGZvciBQTkcuCi0g
ICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCkpCisgICAgaWYg
KG1hdGNoZXNQTkdTaWduYXR1cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IFBOR0lt
YWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogCi0g
ICAgLy8gSlBFRwotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHhGRlx4RDhceEZGIiwgMykp
CisgICAgaWYgKG1hdGNoZXNKUEVHU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJu
IG5ldyBKUEVHSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbik7CiAKICNpZiBVU0UoV0VCUCkKLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlJJRkYi
LCA0KSkgewotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd2VicEV4dHJhTWFya2VyID0g
NjsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdlYnBFeHRyYU1hcmtlcm9mZnNldCA9
IDg7Ci0gICAgICAgIGNoYXIgaGVhZGVyW3dlYnBFeHRyYU1hcmtlcl07Ci0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGhlYWRlciwgd2VicEV4dHJhTWFya2Vy
LCBkYXRhLCB3ZWJwRXh0cmFNYXJrZXJvZmZzZXQpOwotICAgICAgICBpZiAobGVuZ3RoID49IHdl
YnBFeHRyYU1hcmtlcikgewotICAgICAgICAgICAgaWYgKCFtZW1jbXAoaGVhZGVyLCAiV0VCUFZQ
Iiwgd2VicEV4dHJhTWFya2VyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdFQlBJbWFn
ZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBpZiAobWF0Y2hlc1dlYlBTaWduYXR1cmUoY29udGVudHMsIGRhdGEp
KQorICAgICAgICByZXR1cm4gbmV3IFdFQlBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbmRpZgogCi0gICAgLy8gQk1QCi0gICAgaWYgKHN0
cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgaWYgKG1hdGNoZXNCTVBTaWduYXR1
cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2RlcihhbHBoYU9w
dGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogCi0gICAgLy8gSUNPcyBhbHdheXMg
YmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEuCi0gICAgLy8gQ1VS
cyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDItYnl0ZSAyLgotICAgIGlmICghbWVt
Y21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAxXHgwMCIsIDQpIHx8ICFtZW1jbXAoY29udGVudHMs
ICJceDAwXHgwMFx4MDJceDAwIiwgNCkpCisgICAgaWYgKG1hdGNoZXNJQ09TaWduYXR1cmUoY29u
dGVudHMpIHx8IG1hdGNoZXNDVVJTaWduYXR1cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4g
bmV3IElDT0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pOwogCi0gICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBoZWNrIHRoaXMg
aXMuCiAgICAgcmV0dXJuIDA7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80691</attachid>
            <date>2011-01-31 15:49:26 -0800</date>
            <delta_ts>2011-02-01 14:58:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53455-20110131154925.patch</filename>
            <type>text/plain</type>
            <size>5120</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MTY0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMzEgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGUgSW1hZ2VEZWNvZGVyIGFzIHN1Z2dlc3RlZCBvbiB3ZWJr
aXQtZGV2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MzQ1NQorCisgICAgICAgIFJlbW92ZSBjb21tZW50cyB0aGF0IGZvbGtzIGRpZG4ndCBsaWtlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCBpbmxpbmUKKyAgICAgICAgZnVuY3Rpb25zIChhcyBzdWdnZXN0
ZWQgb24gd2Via2l0LWRldikuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0dJRlNpZ25hdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzUE5HU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6Om1hdGNoZXNKUEVHU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNXZWJQ
U2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNCTVBTaWduYXR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6bWF0Y2hlc0lDT1NpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpt
YXRjaGVzQ1VSU2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3Jl
YXRlKToKKwogMjAxMS0wMS0zMSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAkocmV2aXNpb24gNzcxNTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHVuc2ln
bmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBTaGFyZWRCdWZmZXImIHNoYXJlZEJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0KQor
bmFtZXNwYWNlIHsKKwordW5zaWduZWQgY29weUZyb21TaGFyZWRCdWZmZXIoY2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVy
LCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgYnl0ZXNFeHRyYWN0ZWQgPSAwOwog
ICAgIGNvbnN0IGNoYXIqIG1vcmVEYXRhOwpAQCAtNTMsNTEgKzU1LDczIEBAIHN0YXRpYyB1bnNp
Z25lZCBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjaGEKICAgICByZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7
CiB9CiAKK2Jvb2wgbWF0Y2hlc0dJRlNpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICBy
ZXR1cm4gIXN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCk7Cit9CisKK2Jvb2wgbWF0Y2hlc1BO
R1NpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50
cywgIlx4ODlceDUwXHg0RVx4NDciLCA0KTsKK30KKworYm9vbCBtYXRjaGVzSlBFR1NpZ25hdHVy
ZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIlx4RkZc
eEQ4XHhGRiIsIDMpOworfQorCisjaWYgVVNFKFdFQlApCitib29sIG1hdGNoZXNXZWJQU2lnbmF0
dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiUklG
RiIsIDQpICYmICFtZW1jbXAoaGVhZGVyICsgOCwgIldFQlBWUCIsIDYpOworfQorI2VuZGlmCisK
K2Jvb2wgbWF0Y2hlc0JNUFNpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4g
IXN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpOworfQorCitib29sIG1hdGNoZXNJQ09TaWduYXR1
cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDAw
XHgwMFx4MDFceDAwIiwgNCk7Cit9CisKK2Jvb2wgbWF0Y2hlc0NVUlNpZ25hdHVyZShjaGFyKiBj
b250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4
MDAiLCA0KTsKK30KKworfQorCiBJbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNv
bnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCiB7Ci0gICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZp
Z3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcKLSAgICAvLyB3aXRoLgot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhNYXJrZXJMZW5ndGggPSA0OwotICAgIGNoYXIg
Y29udGVudHNbbWF4TWFya2VyTGVuZ3RoXTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBjb3B5RnJv
bVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbWF4TWFya2VyTGVuZ3RoLCBkYXRhLCAwKTsKLSAgICBp
ZiAobGVuZ3RoIDwgbWF4TWFya2VyTGVuZ3RoKQorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBs
ZW5ndGhPZkxvbmdlc3RTaWduYXR1cmUgPSAxNDsgLy8gVG8gd2l0OiAiUklGRj8/Pz9XRUJQVlAi
CisgICAgY2hhciBjb250ZW50c1tsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmVdOworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRzLCBsZW5ndGhPZkxvbmdl
c3RTaWduYXR1cmUsIGRhdGEsIDApOworICAgIGlmIChsZW5ndGggPCBsZW5ndGhPZkxvbmdlc3RT
aWduYXR1cmUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJ
RjgoNyBvciA5KS4KLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQor
ICAgIGlmIChtYXRjaGVzR0lGU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJuIG5l
dyBHSUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KTsKIAotICAgIC8vIFRlc3QgZm9yIFBORy4KLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlx4
ODlceDUwXHg0RVx4NDciLCA0KSkKKyAgICBpZiAobWF0Y2hlc1BOR1NpZ25hdHVyZShjb250ZW50
cykpCiAgICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBKUEVHCi0gICAgaWYgKCFtZW1jbXAo
Y29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKSkKKyAgICBpZiAobWF0Y2hlc0pQRUdTaWduYXR1
cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoYWxwaGFP
cHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAogI2lmIFVTRShXRUJQKQotICAg
IGlmICghbWVtY21wKGNvbnRlbnRzLCAiUklGRiIsIDQpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCB3ZWJwRXh0cmFNYXJrZXIgPSA2OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgd2VicEV4dHJhTWFya2Vyb2Zmc2V0ID0gODsKLSAgICAgICAgY2hhciBoZWFkZXJbd2Vi
cEV4dHJhTWFya2VyXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRC
dWZmZXIoaGVhZGVyLCB3ZWJwRXh0cmFNYXJrZXIsIGRhdGEsIHdlYnBFeHRyYU1hcmtlcm9mZnNl
dCk7Ci0gICAgICAgIGlmIChsZW5ndGggPj0gd2VicEV4dHJhTWFya2VyKSB7Ci0gICAgICAgICAg
ICBpZiAoIW1lbWNtcChoZWFkZXIsICJXRUJQVlAiLCB3ZWJwRXh0cmFNYXJrZXIpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgV0VCUEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24pOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChtYXRjaGVz
V2ViUFNpZ25hdHVyZShjb250ZW50cykpCisgICAgICAgIHJldHVybiBuZXcgV0VCUEltYWdlRGVj
b2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogI2VuZGlmCiAK
LSAgICAvLyBCTVAKLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKKyAg
ICBpZiAobWF0Y2hlc0JNUFNpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcg
Qk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7
CiAKLSAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkg
YSAyLWJ5dGUgMS4KLSAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93ZWQgYnkg
Mi1ieXRlIDIuCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFceDAwIiwg
NCkgfHwgIW1lbWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAiLCA0KSkKKyAgICBpZiAo
bWF0Y2hlc0lDT1NpZ25hdHVyZShjb250ZW50cykgfHwgbWF0Y2hlc0NVUlNpZ25hdHVyZShjb250
ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBn
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBHaXZlIHVwLiBXZSBkb24ndCBr
bm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KICAgICByZXR1cm4gMDsKIH0KIAo=
</data>
<flag name="review"
          id="72192"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80833</attachid>
            <date>2011-02-01 14:58:51 -0800</date>
            <delta_ts>2011-02-01 15:39:59 -0800</delta_ts>
            <desc>Larger patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25742</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDItMDEgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIEltYWdlRGVjb2RlcidzIGNvbW1lbnRzIChy
ZW1vdmUvdHJpbS9jbGFyaWZ5KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzNDU1CisKKyAgICAgICAgVGhpcyBhbHNvIHJlbmFtZXMgb3IgZWxpbWlu
YXRlcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgZm9yIGNsYXJpdHksIGFuZAorICAgICAgICBzd2l0
Y2hlcyBhIGNvdXBsZSBlcnJvbmVvdXMgc3RybmNtcCgpIGNhbGxzIHRvIG1lbWNtcCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldElnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNz
Tm9uUkxFRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VE
ZWNvZGVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRT
aXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURl
Y29kZXIuaDoKKwogMjAxMS0wMi0wMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3Igcjc3Mjg2LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRCdWZmZXIoY2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVyLCB1
bnNpZ25lZCBvZmZzZXQpCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBjb3B5RnJvbVNoYXJlZEJ1
ZmZlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2hhcmVkQnVm
ZmVyJiBzaGFyZWRCdWZmZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBieXRl
c0V4dHJhY3RlZCA9IDA7CiAgICAgY29uc3QgY2hhciogbW9yZURhdGE7CkBAIC01Myw1MSArNTUs
NzMgQEAgc3RhdGljIHVuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYQogICAgIHJldHVy
biBieXRlc0V4dHJhY3RlZDsKIH0KIAorYm9vbCBtYXRjaGVzR0lGU2lnbmF0dXJlKGNoYXIqIGNv
bnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpOworfQor
Citib29sIG1hdGNoZXNQTkdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJu
ICFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCk7Cit9CisKK2Jvb2wgbWF0
Y2hlc0pQRUdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1jbXAo
Y29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKTsKK30KKworI2lmIFVTRShXRUJQKQorYm9vbCBt
YXRjaGVzV2ViUFNpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNt
cChjb250ZW50cywgIlJJRkYiLCA0KSAmJiAhbWVtY21wKGhlYWRlciArIDgsICJXRUJQVlAiLCA2
KTsKK30KKyNlbmRpZgorCitib29sIG1hdGNoZXNCTVBTaWduYXR1cmUoY2hhciogY29udGVudHMp
Cit7CisgICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJCTSIsIDIpOworfQorCitib29sIG1h
dGNoZXNJQ09TaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1jbXAo
Y29udGVudHMsICJceDAwXHgwMFx4MDFceDAwIiwgNCk7Cit9CisKK2Jvb2wgbWF0Y2hlc0NVUlNp
Z25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywg
Ilx4MDBceDAwXHgwMlx4MDAiLCA0KTsKK30KKworfQorCiBJbWFnZURlY29kZXIqIEltYWdlRGVj
b2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhh
T3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiB7Ci0gICAgLy8gV2UgbmVlZCBhdCBsZWFz
dCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcK
LSAgICAvLyB3aXRoLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhNYXJrZXJMZW5ndGgg
PSA0OwotICAgIGNoYXIgY29udGVudHNbbWF4TWFya2VyTGVuZ3RoXTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbWF4TWFya2VyTGVuZ3RoLCBk
YXRhLCAwKTsKLSAgICBpZiAobGVuZ3RoIDwgbWF4TWFya2VyTGVuZ3RoKQorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmUgPSAxNDsgLy8gVG8gd2l0OiAi
UklGRj8/Pz9XRUJQVlAiCisgICAgY2hhciBjb250ZW50c1tsZW5ndGhPZkxvbmdlc3RTaWduYXR1
cmVdOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRz
LCBsZW5ndGhPZkxvbmdlc3RTaWduYXR1cmUsIGRhdGEsIDApOworICAgIGlmIChsZW5ndGggPCBs
ZW5ndGhPZkxvbmdlc3RTaWduYXR1cmUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgLy8gR0lG
cyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJ
RjgiLCA0KSA9PSAwKQorICAgIGlmIChtYXRjaGVzR0lGU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAg
ICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKTsKIAotICAgIC8vIFRlc3QgZm9yIFBORy4KLSAgICBpZiAoIW1lbWNt
cChjb250ZW50cywgIlx4ODlceDUwXHg0RVx4NDciLCA0KSkKKyAgICBpZiAobWF0Y2hlc1BOR1Np
Z25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKGFs
cGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBKUEVHCi0g
ICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKSkKKyAgICBpZiAobWF0
Y2hlc0pQRUdTaWduYXR1cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFn
ZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAogI2lm
IFVTRShXRUJQKQotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiUklGRiIsIDQpKSB7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3ZWJwRXh0cmFNYXJrZXIgPSA2OwotICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgd2VicEV4dHJhTWFya2Vyb2Zmc2V0ID0gODsKLSAgICAgICAg
Y2hhciBoZWFkZXJbd2VicEV4dHJhTWFya2VyXTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
Y29weUZyb21TaGFyZWRCdWZmZXIoaGVhZGVyLCB3ZWJwRXh0cmFNYXJrZXIsIGRhdGEsIHdlYnBF
eHRyYU1hcmtlcm9mZnNldCk7Ci0gICAgICAgIGlmIChsZW5ndGggPj0gd2VicEV4dHJhTWFya2Vy
KSB7Ci0gICAgICAgICAgICBpZiAoIW1lbWNtcChoZWFkZXIsICJXRUJQVlAiLCB3ZWJwRXh0cmFN
YXJrZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV0VCUEltYWdlRGVjb2RlcihhbHBo
YU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwotICAgICAgICB9Ci0gICAgfQor
ICAgIGlmIChtYXRjaGVzV2ViUFNpZ25hdHVyZShjb250ZW50cykpCisgICAgICAgIHJldHVybiBu
ZXcgV0VCUEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pOwogI2VuZGlmCiAKLSAgICAvLyBCTVAKLSAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJN
IiwgMikgPT0gMCkKKyAgICBpZiAobWF0Y2hlc0JNUFNpZ25hdHVyZShjb250ZW50cykpCiAgICAg
ICAgIHJldHVybiBuZXcgQk1QSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRl
IDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KLSAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRl
IDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAw
XHgwMFx4MDFceDAwIiwgNCkgfHwgIW1lbWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAi
LCA0KSkKKyAgICBpZiAobWF0Y2hlc0lDT1NpZ25hdHVyZShjb250ZW50cykgfHwgbWF0Y2hlc0NV
UlNpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVy
KGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBHaXZl
IHVwLiBXZSBkb24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KICAgICByZXR1cm4gMDsK
IH0KIApAQCAtMTI2LDcgKzE1MCw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdAogICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBJbWFnZUZyYW1lOjpjbGVhcigp
Cit2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKICAgICBtX2JhY2tpbmdTdG9y
ZS5jbGVhcigpOwogICAgIG1fYnl0ZXMgPSAwOwpAQCAtMTM3LDcgKzE2MSw3IEBAIHZvaWQgSW1h
Z2VGcmFtZTo6Y2xlYXIoKQogICAgIC8vIGxhdGVyLgogfQogCi12b2lkIEltYWdlRnJhbWU6Onpl
cm9GaWxsKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewogICAgIG1l
bXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVv
ZihQaXhlbERhdGEpKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKQEAgLTE3MSw4ICsxOTUsNyBA
QCBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpCiAgICAgbV9ieXRlcyA9
IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKICAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBu
ZXdIZWlnaHQpOwogCi0gICAgLy8gWmVybyB0aGUgaW1hZ2UuCi0gICAgemVyb0ZpbGwoKTsKKyAg
ICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gRklYTUU6IERvIHdlIHdhbnQgYmV0dGVyIGVuY2Fw
c3VsYXRpb24/CiAgICAgdHlwZWRlZiBWZWN0b3I8Y2hhcj4gQ29sb3JQcm9maWxlOwogCi0gICAg
Ly8gVGhlIEltYWdlRnJhbWUgb2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0
YSBpbiBSR0JBMzIKLSAgICAvLyBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0IGFsbCBkZWNv
ZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLgotICAgIC8vIEZyYW1lcyBhcmUgdGhlbiBp
bnN0YW50aWF0ZWQgZm9yIGRyYXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgorICAg
IC8vIEltYWdlRnJhbWUgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBi
dWZmZXIgaXMgd2hhdCBhbGwKKyAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBp
bnRvLgogICAgIGNsYXNzIEltYWdlRnJhbWUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBG
cmFtZVN0YXR1cyB7IEZyYW1lRW1wdHksIEZyYW1lUGFydGlhbCwgRnJhbWVDb21wbGV0ZSB9OwpA
QCAtNzksMTkgKzc4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gY3JlYXRl
IGEgbmV3IGNvcHkgb2YgdGhlIGltYWdlIGRhdGEsIG9ubHkgaW5jcmVhc2UgdGhlIHJlZiBjb3Vu
dC4KICAgICAgICAgSW1hZ2VGcmFtZSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KTsKIAotICAgICAgICAvLyBEZWxldGVzIHRoZSBwaXhlbCBkYXRhIGVudGlyZWx5OyB1c2VkIGJ5
IEltYWdlRGVjb2RlciB0byBzYXZlIG1lbW9yeQotICAgICAgICAvLyB3aGVuIHdlIG5vIGxvbmdl
ciBuZWVkIHRvIGRpc3BsYXkgYSBmcmFtZSBhbmQgb25seSBuZWVkIGl0cyBtZXRhZGF0YS4KLSAg
ICAgICAgdm9pZCBjbGVhcigpOwotCi0gICAgICAgIC8vIFplcm9lcyB0aGUgcGl4ZWwgZGF0YSBp
biB0aGUgYnVmZmVyLCBzZXR0aW5nIGl0IHRvIGZ1bGx5LXRyYW5zcGFyZW50LgotICAgICAgICB2
b2lkIHplcm9GaWxsKCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSBp
bWFnZSBkYXRhIGluIHxvdGhlcnwsIHNvIHRoZSB0d28gaW1hZ2VzCi0gICAgICAgIC8vIGNhbiBi
ZSBtb2RpZmllZCBpbmRlcGVuZGVudGx5LiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2Nl
ZWRlZC4KKyAgICAgICAgLy8gVGhlc2UgZG8gbm90IHRvdWNoIG90aGVyIG1ldGFkYXRhLCBvbmx5
IHRoZSByYXcgcGl4ZWwgZGF0YS4KKyAgICAgICAgdm9pZCBjbGVhclBpeGVsRGF0YSgpOworICAg
ICAgICB2b2lkIHplcm9GaWxsUGl4ZWxEYXRhKCk7CisKKyAgICAgICAgLy8gTWFrZXMgdGhpcyBm
cmFtZSBoYXZlIGFuIGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIHByb3ZpZGVkIGltYWdlJ3MKKyAg
ICAgICAgLy8gcGl4ZWwgZGF0YSwgc28gdGhhdCBtb2RpZmljYXRpb25zIGluIG9uZSBmcmFtZSBh
cmUgbm90IHJlZmxlY3RlZCBpbgorICAgICAgICAvLyB0aGUgb3RoZXIuICBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgogICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0
IEltYWdlRnJhbWUmKTsKIAotICAgICAgICAvLyBDcmVhdGVzIGEgbmV3IHJlZmVyZW5jZSB0byB0
aGUgaW1hZ2UgZGF0YSBpbiB8b3RoZXJ8LiAgVGhlIHR3byBpbWFnZXMKLSAgICAgICAgLy8gc2hh
cmUgYSBjb21tb24gYmFja2luZyBzdG9yZS4KKyAgICAgICAgLy8gTWFrZXMgdGhpcyBmcmFtZSBy
ZWZlcmVuY2UgdGhlIHByb3ZpZGVkIGltYWdlJ3MgcGl4ZWwgZGF0YSwgc28gdGhhdAorICAgICAg
ICAvLyBtb2RpZmljYXRpb25zIGluIG9uZSBmcmFtZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBvdGhl
ci4KICAgICAgICAgdm9pZCBjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmKTsKIAogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0
YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUKQEAgLTExMCwxNCArMTA3LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBm
b3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwotICAg
ICAgICAvLyBhcmUgd3JpdHRlbi4gV2lsbCByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBp
ZiB0aGUgbWVtb3J5Ci0gICAgICAgIC8vIGFsbG9jYXRpb24gZmFpbHMuICBDYWxsaW5nIHRoaXMg
bXVsdGlwbGUgdGltZXMgaXMgdW5kZWZpbmVkIGFuZCBtYXkKLSAgICAgICAgLy8gbGVhayBtZW1v
cnkuCisgICAgICAgIC8vIGFyZSB3cml0dGVuLiAgTXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAg
UmV0dXJucyB3aGV0aGVyIGFsbG9jYXRpb24KKyAgICAgICAgLy8gc3VjY2VlZGVkLgogICAgICAg
ICBib29sIHNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KTsKIAotICAgICAgICAv
LyBUbyBiZSB1c2VkIGJ5IEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoKS4gIFJldHVy
bnMgYSBwb2ludGVyCi0gICAgICAgIC8vIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBk
YXRhLiAgVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkKLSAgICAgICAgLy8gdGhlIEJpdG1h
cEltYWdlIGFuZCBmcmVlZCBpbiBGcmFtZURhdGE6OmNsZWFyKCkuCisgICAgICAgIC8vIFJldHVy
bnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2Ug
ZGF0YS4KKyAgICAgICAgLy8gKFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5IEJpdG1hcElt
YWdlIGFuZCBmcmVlZCBpbgorICAgICAgICAvLyBGcmFtZURhdGE6OmNsZWFyKCkuCiAgICAgICAg
IE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKIAogICAgICAgICBib29s
IGhhc0FscGhhKCkgY29uc3Q7CkBAIC0xOTIsMzUgKzE4OCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjZWxzZQogICAgICAgICBOYXRpdmVCYWNraW5nU3RvcmUgbV9iYWNraW5nU3RvcmU7CiAg
ICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9i
YWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSBvZiB0aGUg
YnVmZmVyLiAgVGhpcyBzaG91bGQgYmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBz
YW1lIGFzIEltYWdlRGVjb2Rlcjo6bV9zaXplLgotICAgICAgICBib29sIG1faGFzQWxwaGE7IC8v
IFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBidWZmZXIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIHRyYW5zcGFyZW5jeS4KKyAgICAgICAgSW50U2l6ZSBt
X3NpemU7IC8vIFRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUgc2Ft
ZSBhcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyOjptX3NpemUuCisg
ICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKICAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9m
aWxlOwogI2VuZGlmCi0gICAgICAgIEludFJlY3QgbV9yZWN0OyAvLyBUaGUgcmVjdCBvZiB0aGUg
b3JpZ2luYWwgc3BlY2lmaWVkIGZyYW1lIHdpdGhpbgotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIG92ZXJhbGwgYnVmZmVyLiAgVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFt
ZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNt
YWxsZXIgdGhhbiB0aGUgb3ZlcmFsbAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2Ug
c2l6ZS4KLSAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRo
aXMgZnJhbWUgaXMgY29tcGxldGVseQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZmluaXNoZWQgZGVjb2RpbmcuCi0gICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8vIFRoZSBh
bmltYXRpb24gZGVsYXkuCi0gICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1l
dGhvZDsgLy8gV2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXppbmcgdGhl
IG5leHQgZnJhbWUuCi0gICAgICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhOyAvLyBXaGV0aGVy
IHRvIHByZW11bHRpcGx5IGFscGhhIGludG8gUiwgRywgQgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhbm5lbHM7IGJ5IGRlZmF1bHQgaXQncyB0cnVlLgorICAgICAgICBJ
bnRSZWN0IG1fcmVjdDsgLy8gVGhlIHJlY3Qgb2YgdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBmcmFt
ZSB3aXRoaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyYWxsIGJ1ZmZlci4g
IFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlIG9yaWdpbmFsIHJlY3Qg
d2FzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIG92ZXJhbGwg
aW1hZ2Ugc2l6ZS4KKyAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIHVuc2ln
bmVkIG1fZHVyYXRpb247CisgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1l
dGhvZDsKKyAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CiAgICAgfTsKIAotICAgIC8v
IFRoZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNp
ZmljIGltYWdlIGZvcm1hdAotICAgIC8vIGRlY29kZXJzIChlLmcuLCBHSUYsIEpQRywgUE5HLCBJ
Q08pIHRvIGRlcml2ZSBmcm9tLiAgQWxsIGRlY29kZXJzIGRlY29kZQotICAgIC8vIGludG8gUkdC
QTMyIGZvcm1hdCBhbmQgdGhlIGJhc2UgY2xhc3MgbWFuYWdlcyB0aGUgUkdCQTMyIGZyYW1lIGNh
Y2hlLgorICAgIC8vIEltYWdlRGVjb2RlciBpcyBhIGJhc2UgZm9yIGFsbCBmb3JtYXQtc3BlY2lm
aWMgZGVjb2RlcnMKKyAgICAvLyAoZS5nLiBKUEVHSW1hZ2VEZWNvZGVyKS4gIFRoaXMgYmFzZSBt
YW5hZ2VzIHRoZSBJbWFnZUZyYW1lIGNhY2hlLgogICAgIC8vCi0gICAgLy8gRU5BQkxFKElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRlY29kZXJzIHRvIHdyaXRlCi0g
ICAgLy8gZGlyZWN0bHkgdG8gc2NhbGVkIG91dHB1dCBidWZmZXJzIGJ5IGRvd24gc2FtcGxpbmcu
IENhbGwKLSAgICAvLyBzZXRNYXhOdW1QaXhlbHMoKSB0byBzcGVjaWZ5IHRoZSBiaWdnZXN0IHNp
emUgdGhhdCBkZWNvZGVkIGltYWdlcyBjYW4KLSAgICAvLyBoYXZlLiBJbWFnZSBkZWNvZGVycyB3
aWxsIGRlZmxhdGUgdGhvc2UgaW1hZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuCi0gICAgLy8gbV9t
YXhOdW1QaXhlbHMuIChOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBpbWFnZSBkZWNvZGVycyB5ZXQpCisg
ICAgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRl
Y29kZXJzIHRvIGRvd25zYW1wbGUKKyAgICAvLyBhdCBkZWNvZGUgdGltZS4gIEltYWdlIGRlY29k
ZXJzIHdpbGwgZG93bnNhbXBsZSBhbnkgaW1hZ2VzIGxhcmdlciB0aGFuCisgICAgLy8gfG1fbWF4
TnVtUGl4ZWxzfC4gIEZJWE1FOiBOb3QgeWV0IHN1cHBvcHJ0ZWQgYnkgYWxsIGRlY29kZXJzLgog
ICAgIGNsYXNzIEltYWdlRGVjb2RlciB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElt
YWdlRGVjb2Rlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKQEAgLTIz
MSwxOSArMjE5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9zaXpl
QXZhaWxhYmxlKGZhbHNlKQogICAgICAgICAgICAgLCBtX21heE51bVBpeGVscygtMSkKICAgICAg
ICAgICAgICwgbV9pc0FsbERhdGFSZWNlaXZlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9mYWls
ZWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICAgICAgLCBtX2ZhaWxlZChm
YWxzZSkgeyB9CiAKLSAgICAgICAgdmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkge30KKyAgICAgICAg
dmlydHVhbCB+SW1hZ2VEZWNvZGVyKCkgeyB9CiAKLSAgICAgICAgLy8gRmFjdG9yeSBmdW5jdGlv
biB0byBjcmVhdGUgYW4gSW1hZ2VEZWNvZGVyLiAgUG9ydHMgdGhhdCBzdWJjbGFzcwotICAgICAg
ICAvLyBJbWFnZURlY29kZXIgY2FuIHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIG9m
IHRoaXMgdG8gYXZvaWQKLSAgICAgICAgLy8gbmVlZGluZyB0byB3cml0ZSBhIGRlZGljYXRlZCBz
ZXREYXRhKCkgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIEZhY3RvcnkgZnVuY3Rpb24gdG8g
Y3JlYXRlIGFuIGFwcHJvcHJpYXRlIEltYWdlRGVjb2Rlci4gIFJldHVybnMgMCBpZgorICAgICAg
ICAvLyB3ZSBjYW4ndCBzbmlmZiBhIHN1cHBvcnRlZCB0eXBlIGZyb20gdGhlIHByb3ZpZGVkIGRh
dGEgKHBvc3NpYmx5CisgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXNuJ3QgZW5vdWdoIGRhdGEg
eWV0KS4KICAgICAgICAgc3RhdGljIEltYWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1
ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24pOwogCi0gICAgICAgIC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0
ZW5zaW9uIHVzdWFsbHkgYXNzb2NpYXRlZCB3aXRoIGFuIHVuZGVjb2RlZCBpbWFnZQotICAgICAg
ICAvLyBvZiB0aGlzIHR5cGUuCiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5z
aW9uKCkgY29uc3QgPSAwOwogCiAgICAgICAgIGJvb2wgaXNBbGxEYXRhUmVjZWl2ZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzQWxsRGF0YVJlY2VpdmVkOyB9CkBAIC0yNTYsNDEgKzI0MCwzNCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX2lzQWxsRGF0YVJlY2VpdmVkID0gYWxs
RGF0YVJlY2VpdmVkOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhl
IHNpemUgaW5mb3JtYXRpb24gaGFzIGJlZW4gZGVjb2RlZCB5ZXQuIFRoaXMKLSAgICAgICAgLy8g
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBoYXMg
YmVlbiBzZXQgYW5kCi0gICAgICAgIC8vIHdlIGhhdmUgbm90IHNlZW4gYSBmYWlsdXJlLiBEZWNv
ZGVycyBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlzIHRvCi0gICAgICAgIC8vIGxhemlseSBkZWNv
ZGUgZW5vdWdoIG9mIHRoZSBpbWFnZSB0byBnZXQgdGhlIHNpemUuCisgICAgICAgIC8vIExhemls
eS1kZWNvZGVzIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBzaXplIChpZiBwb3NzaWJs
ZSkuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gIW1fZmFpbGVkICYmIG1fc2l6ZUF2YWlsYWJsZTsgCisgICAgICAg
ICAgICByZXR1cm4gIW1fZmFpbGVkICYmIG1fc2l6ZUF2YWlsYWJsZTsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGltYWdlLgotICAgICAgICB2aXJ0dWFs
IEludFNpemUgc2l6ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3Np
emU7Ci0gICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KIAogICAgICAgICBJbnRTaXplIHNjYWxlZFNpemUoKSBjb25zdAogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9zY2FsZWQgPyBJbnRTaXplKG1fc2NhbGVkQ29s
dW1ucy5zaXplKCksIG1fc2NhbGVkUm93cy5zaXplKCkpIDogc2l6ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiBmcmFtZSB8aW5kZXh8LiAgVGhpcyB3aWxs
IG9ubHkgZGlmZmVyIGZyb20gc2l6ZSgpCi0gICAgICAgIC8vIGZvciBmb3JtYXRzIHdoZXJlIGRp
ZmZlcmVudCBmcmFtZXMgYXJlIGRpZmZlcmVudCBzaXplcyAobmFtZWx5IElDTywKLSAgICAgICAg
Ly8gd2hlcmUgZWFjaCBmcmFtZSByZXByZXNlbnRzIGEgZGlmZmVyZW50IGljb24gd2l0aGluIHRo
ZSBtYXN0ZXIgZmlsZSkuCi0gICAgICAgIC8vIE5vdGFibHksIHRoaXMgZG9lcyBub3QgcmV0dXJu
IGRpZmZlcmVudCBzaXplcyBmb3IgZGlmZmVyZW50IEdJRgotICAgICAgICAvLyBmcmFtZXMsIHNp
bmNlIHdoaWxlIHRoZXNlIG1heSBiZSBzdG9yZWQgYXMgc21hbGxlciByZWN0YW5nbGVzLCBkdXJp
bmcKLSAgICAgICAgLy8gZGVjb2RpbmcgdGhleSBhcmUgY29tcG9zaXRlZCB0byBjcmVhdGUgYSBm
dWxsLXNpemUgZnJhbWUuCisgICAgICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgYSBwYXJ0aWN1
bGFyIGZyYW1lLiAgVGhpcyB3aWxsIG9ubHkgZGlmZmVyIGZyb20KKyAgICAgICAgLy8gc2l6ZSgp
IGZvciBmb3JtYXRzIHdoZXJlIGRpZmZlcmVudCBmcmFtZXMgYXJlIGRpZmZlcmVudCBzaXplcwor
ICAgICAgICAvLyAoZS5nLiBJQ08sIHdoZXJlIGVhY2ggZnJhbWUgcmVwcmVzZW50cyBhIGRpZmZl
cmVudCBpY29uIHdpdGhpbiB0aGUKKyAgICAgICAgLy8gbWFzdGVyIGZpbGUpLiAgTm90YWJseSwg
dGhpcyBkb2VzIE5PVCByZXR1cm4gZGlmZmVyZW50IHNpemVzIGZvcgorICAgICAgICAvLyBkaWZm
ZXJlbnQgR0lGIGZyYW1lcywgc2luY2Ugd2hpbGUgdGhlc2UgbWF5IGJlIHN0b3JlZCBhcyBzbWFs
bGVyCisgICAgICAgIC8vIHJlY3RhbmdsZXMsIGR1cmluZyBkZWNvZGluZyB0aGV5IGFyZSBjb21w
b3NpdGVkIHRvIGNyZWF0ZSBhIGZ1bGwtc2l6ZQorICAgICAgICAvLyBmcmFtZS4KICAgICAgICAg
dmlydHVhbCBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gc2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2Fs
bGVkIGJ5IHRoZSBpbWFnZSBkZWNvZGVycyB0byBzZXQgdGhlaXIgZGVjb2RlZCBzaXplLCB0aGlz
IGFsc28KLSAgICAgICAgLy8gY2hlY2tzIHRoZSBzaXplIGZvciB2YWxpZGl0eS4gSXQgd2lsbCBy
ZXR1cm4gdHJ1ZSBpZiB0aGUgc2l6ZSB3YXMKLSAgICAgICAgLy8gc2V0LCBvciBmYWxzZSBpZiB0
aGVyZSBpcyBhbiBlcnJvci4gT24gZXJyb3IsIHRoZSBtX2ZhaWxlZCBmbGFnIHdpbGwKLSAgICAg
ICAgLy8gYmUgc2V0IGFuZCB0aGUgY2FsbGVyIHNob3VsZCBpbW1lZGlhdGVseSBzdG9wIGRlY29k
aW5nLgorICAgICAgICAvLyBTZXRzIHRoZSBpbWFnZSBzaXplLiAgUmV0dXJucyB3aGV0aGVyIHRo
ZSBzaXplIGlzIGxlZ2FsIChpLmUuIG5vdAorICAgICAgICAvLyBnb2luZyB0byByZXN1bHQgaW4g
b3ZlcmZsb3cgZWxzZXdoZXJlKS4gIElmIG5vdCwgbWFya3MgZGVjb2RpbmcgYXMKKyAgICAgICAg
Ly8gZmFpbGVkLgogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNPdmVyU2l6ZSh3
aWR0aCwgaGVpZ2h0KSkKQEAgLTMwMCwyNiArMjc3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlIHRv
dGFsIG51bWJlciBvZiBmcmFtZXMgZm9yIHRoZSBpbWFnZS4gIENsYXNzZXMgdGhhdCBzdXBwb3J0
Ci0gICAgICAgIC8vIG11bHRpcGxlIGZyYW1lcyB3aWxsIHNjYW4gdGhlIGltYWdlIGRhdGEgZm9y
IHRoZSBhbnN3ZXIgaWYgdGhleSBuZWVkCi0gICAgICAgIC8vIHRvICh3aXRob3V0IG5lY2Vzc2Fy
aWx5IGRlY29kaW5nIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBmcmFtZXMpLgorICAgICAgICAvLyBM
YXppbHktZGVjb2RlcyBlbm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgZnJhbWUgY291bnQg
KGlmCisgICAgICAgIC8vIHBvc3NpYmxlKSwgd2l0aG91dCBkZWNvZGluZyB0aGUgaW5kaXZpZHVh
bCBmcmFtZXMuCiAgICAgICAgIHZpcnR1YWwgc2l6ZV90IGZyYW1lQ291bnQoKSB7IHJldHVybiAx
OyB9CiAKLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXBldGl0aW9ucyB0byBwZXJmb3JtIGZv
ciBhbiBhbmltYXRpb24gbG9vcC4KICAgICAgICAgdmlydHVhbCBpbnQgcmVwZXRpdGlvbkNvdW50
KCkgY29uc3QgeyByZXR1cm4gY0FuaW1hdGlvbk5vbmU7IH0KIAotICAgICAgICAvLyBDYWxsZWQg
dG8gb2J0YWluIHRoZSBJbWFnZUZyYW1lIGZ1bGwgb2YgZGVjb2RlZCBkYXRhIGZvciByZW5kZXJp
bmcuCi0gICAgICAgIC8vIFRoZSBkZWNvZGVyIHBsdWdpbiB3aWxsIGRlY29kZSBhcyBtdWNoIG9m
IHRoZSBmcmFtZSBhcyBpdCBjYW4gYmVmb3JlCi0gICAgICAgIC8vIGhhbmRpbmcgYmFjayB0aGUg
YnVmZmVyLgorICAgICAgICAvLyBEZWNvZGVzIGFzIG11Y2ggb2YgdGhlIHJlcXVlc3RlZCBmcmFt
ZSBhcyBwb3NzaWJsZSwgYW5kIHJldHVybnMgYW4KKyAgICAgICAgLy8gSW1hZ2VEZWNvZGVyLW93
bmVkIHBvaW50ZXIuCiAgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdElu
ZGV4KHNpemVfdCkgPSAwOwogCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSB1bmRlcmx5
aW5nIGltYWdlIGZvcm1hdCBldmVuIHN1cHBvcnRzIGFscGhhCi0gICAgICAgIC8vIHRyYW5zcGFy
ZW5jeS4KLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9Ci0KICAgICAgICAgdm9pZCBzZXRJZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZShi
b29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA9IGZsYWc7IH0KLQotICAg
ICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZ2FtbWEgYW5kIGNvbG9yIHByb2ZpbGUgYXJlIGFw
cGxpZWQuCiAgICAgICAgIGJvb2wgaWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZTsgfQogCiAgICAgICAgIC8vIFNl
dHMgdGhlICJkZWNvZGUgZmFpbHVyZSIgZmxhZy4gIEZvciBjYWxsZXIgY29udmVuaWVuY2UgKHNp
bmNlIHNvCkBAIC0zMzQsMTMgKzMwMiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgYm9vbCBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQogCi0gICAgICAgIC8v
IFdpcGUgb3V0IGZyYW1lcyBpbiB0aGUgZnJhbWUgYnVmZmVyIGNhY2hlIGJlZm9yZSB8Y2xlYXJC
ZWZvcmVGcmFtZXwsCi0gICAgICAgIC8vIGFzc3VtaW5nIHRoaXMgY2FuIGJlIGRvbmUgd2l0aG91
dCBicmVha2luZyBkZWNvZGluZy4gIERpZmZlcmVudAotICAgICAgICAvLyBkZWNvZGVycyBwbGFj
ZSBkaWZmZXJlbnQgcmVzdHJpY3Rpb25zIG9uIHdoYXQgZnJhbWVzIGFyZSBzYWZlIHRvCi0gICAg
ICAgIC8vIGRlc3Ryb3ksIHNvIHRoaXMgaXMgbGVmdCB0byB0aGVtIHRvIGltcGxlbWVudC4KLSAg
ICAgICAgLy8gRm9yIGNvbnZlbmllbmNlJ3Mgc2FrZSwgd2UgcHJvdmlkZSBhIGRlZmF1bHQgKGVt
cHR5KSBpbXBsZW1lbnRhdGlvbiwKLSAgICAgICAgLy8gc2luY2UgaW4gcHJhY3RpY2Ugb25seSBH
SUZzIHdpbGwgZXZlciB1c2UgdGhpcy4KLSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVC
dWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkgeyB9CisgICAgICAgIC8vIENsZWFy
cyBhcyBtdWNoIGRlY29kZWQgcGl4ZWwgZGF0YSBhcyBwb3NzaWJsZSBmcm9tIGJlZm9yZSB0aGUK
KyAgICAgICAgLy8gcHJvdmlkZWQgZnJhbWUuICBQcmVzZXJ2ZXMgYW55IGRhdGEgbmVjZXNzYXJ5
IHRvIGRlY29kZSBmdXR1cmUKKyAgICAgICAgLy8gZnJhbWVzLiAgSW4gcHJhY3RpY2UgdGhpcyBp
cyB1c2VkIG9uIGxhcmdlIGFuaW1hdGVkIEdJRnMgdG8gc2F2ZQorICAgICAgICAvLyBtZW1vcnkg
YXQgdGhlIGNvc3Qgb2YgZXh0cmEgQ1BVIHRvIHJlLWRlY29kZSBmcmFtZXMgbGF0ZXIuCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KSB7IH0KIAogI2lm
IEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIHZvaWQgc2V0TWF4
TnVtUGl4ZWxzKGludCBtKSB7IG1fbWF4TnVtUGl4ZWxzID0gbTsgfQpAQCAtMzY4LDggKzMzNCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChz
aWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgogICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJT
aXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIHdpZHRoICogaGVpZ2h0IG11c3Qgbm90IGV4Y2VlZCAoMiBeIDI5KSAtIDEsIHNvIHRo
YXQgd2UgZG9uJ3QKLSAgICAgICAgICAgIC8vIG92ZXJmbG93IHdoZW4gd2UgbXVsdGlwbHkgYnkg
NC4KICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQp
OwogICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3NpemUgPiAoKDEgPDwgMjkpIC0gMSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDc2OTg1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzA3LDcgKzcwNyw3IEBAIEJNUEltYWdlUmVhZGVyOjpQcm9jZXNzaW5n
UmVzdWx0IEJNUEltYWcKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBtX3NlZW5Ob25aZXJvQWxwaGFQaXhlbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChtX3NlZW5aZXJvQWxwaGFQaXhlbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9i
dWZmZXItPnplcm9GaWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+emVy
b0ZpbGxQaXhlbERhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Vlblplcm9BbHBo
YVBpeGVsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxwaGEgIT0g
MjU1KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKHRydWUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VE
ZWNvZGVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXpl
KGludCBuZXdXaWR0aCwgaQogICAgIG1fYnl0ZXMgPSByZWludGVycHJldF9jYXN0PFBpeGVsRGF0
YSo+KENGRGF0YUdldE11dGFibGVCeXRlUHRyKG1fYmFja2luZ1N0b3JlLmdldCgpKSk7CiAgICAg
bV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKIAotICAgIHplcm9GaWxsKCk7
CisgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDc2OTg1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3NCwxNCArMTc0LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2EKICAgICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5k
KTsKICAgICBmb3IgKDsgKGkgIT0gbV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+
c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9k
KCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewogICAg
ICAgICBpZiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChp
ICE9IGVuZCkpCi0gICAgICAgICAgICBpLT5jbGVhcigpOworICAgICAgICAgICAgaS0+Y2xlYXJQ
aXhlbERhdGEoKTsKICAgICB9CiAKICAgICAvLyBOb3cgfGl8IGhvbGRzIHRoZSBsYXN0IGZyYW1l
IHdlIG5lZWQgdG8gcHJlc2VydmU7IGNsZWFyIHByaW9yIGZyYW1lcy4KICAgICBmb3IgKFZlY3Rv
cjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGog
IT0gaTsgKytqKSB7CiAgICAgICAgIEFTU0VSVChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpG
cmFtZVBhcnRpYWwpOwogICAgICAgICBpZiAoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkKLSAgICAgICAgICAgIGotPmNsZWFyKCk7CisgICAgICAgICAgICBqLT5jbGVhclBp
eGVsRGF0YSgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJ
KHJldmlzaW9uIDc2OTg1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxh
YmxlKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpOwogICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgp
IGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNj
ZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20g
aW5zaWRlCiAgICAgICAgIC8vIEpQRUdJbWFnZVJlYWRlciEKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0
LmNwcAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9xdC9JbWFnZUZyYW1lUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdAogICAgIHJldHVybiAq
dGhpczsKIH0KIAotdm9pZCBJbWFnZUZyYW1lOjpjbGVhcigpCit2b2lkIEltYWdlRnJhbWU6OmNs
ZWFyUGl4ZWxEYXRhKCkKIHsKICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKICAgICBtX2ltYWdl
ID0gUUltYWdlKCk7CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQog
ICAgIC8vIG90aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgogfQogCi12b2lk
IEltYWdlRnJhbWU6Onplcm9GaWxsKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERh
dGEoKQogewogICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSAmJiAhbV9pbWFnZS5pc051bGwoKSkg
ewogICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAobV9pbWFnZS53aWR0aCgpLCBtX2ltYWdlLmhl
aWdodCgpKTsKQEAgLTEwMSw4ICsxMDEsNyBAQCBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50
IG5ld1dpZHRoLCBpCiAgICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAvLyBaZXJvIHRoZSBpbWFnZS4KLSAgICB6ZXJvRmlsbCgpOworICAgIHpl
cm9GaWxsUGl4ZWxEYXRhKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tp
YS9JbWFnZURlY29kZXJTa2lhLmNwcAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJh
dG9yPShjb25zdAogICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBJbWFnZUZyYW1lOjpjbGVh
cigpCit2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKICAgICBtX2JpdG1hcC5y
ZXNldCgpOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKQEAgLTY2LDcgKzY2LDcgQEAgdm9p
ZCBJbWFnZUZyYW1lOjpjbGVhcigpCiAgICAgLy8gb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMg
ZnJhbWUgbGF0ZXIuCiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGwoKQordm9pZCBJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7CiAgICAgbV9iaXRtYXAuZXJhc2VBUkdCKDAs
IDAsIDAsIDApOwogfQpAQCAtOTAsOCArOTAsNyBAQCBib29sIEltYWdlRnJhbWU6OnNldFNpemUo
aW50IG5ld1dpZHRoLCBpCiAgICAgaWYgKCFtX2JpdG1hcC5hbGxvY1BpeGVscygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBaZXJvIHRoZSBpbWFnZS4KLSAgICB6ZXJvRmlsbCgp
OworICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3Njk4NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmlu
ZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJ2cDgiOyB9CiAgICAgdmlydHVh
bCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxw
aGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgogICAgIC8vIFJldHVybnMg
ZmFsc2UgaW4gY2FzZSBvZiBkZWNvZGluZyBmYWlsdXJlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80841</attachid>
            <date>2011-02-01 15:39:59 -0800</date>
            <delta_ts>2011-02-02 13:35:26 -0800</delta_ts>
            <desc>Larger patch v1.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25744</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzEyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDItMDEgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIEltYWdlRGVjb2RlcidzIGNvbW1lbnRzIChy
ZW1vdmUvdHJpbS9jbGFyaWZ5KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzNDU1CisKKyAgICAgICAgVGhpcyBhbHNvIHJlbmFtZXMgb3IgZWxpbWlu
YXRlcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgZm9yIGNsYXJpdHksIGFuZAorICAgICAgICBzd2l0
Y2hlcyBhIGNvdXBsZSBlcnJvbmVvdXMgc3RybmNtcCgpIGNhbGxzIHRvIG1lbWNtcCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldElnbm9y
ZUdhbW1hQW5kQ29sb3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNz
Tm9uUkxFRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VE
ZWNvZGVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNo
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRT
aXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURl
Y29kZXIuaDoKKwogMjAxMS0wMi0wMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3Igcjc3Mjg2LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRCdWZmZXIoY2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVyLCB1
bnNpZ25lZCBvZmZzZXQpCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBjb3B5RnJvbVNoYXJlZEJ1
ZmZlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2hhcmVkQnVm
ZmVyJiBzaGFyZWRCdWZmZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBieXRl
c0V4dHJhY3RlZCA9IDA7CiAgICAgY29uc3QgY2hhciogbW9yZURhdGE7CkBAIC01Myw1MSArNTUs
NzMgQEAgc3RhdGljIHVuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYQogICAgIHJldHVy
biBieXRlc0V4dHJhY3RlZDsKIH0KIAorYm9vbCBtYXRjaGVzR0lGU2lnbmF0dXJlKGNoYXIqIGNv
bnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpOworfQor
Citib29sIG1hdGNoZXNQTkdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJu
ICFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCk7Cit9CisKK2Jvb2wgbWF0
Y2hlc0pQRUdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1jbXAo
Y29udGVudHMsICJceEZGXHhEOFx4RkYiLCAzKTsKK30KKworI2lmIFVTRShXRUJQKQorYm9vbCBt
YXRjaGVzV2ViUFNpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNt
cChjb250ZW50cywgIlJJRkYiLCA0KSAmJiAhbWVtY21wKGNvbnRlbnRzICsgOCwgIldFQlBWUCIs
IDYpOworfQorI2VuZGlmCisKK2Jvb2wgbWF0Y2hlc0JNUFNpZ25hdHVyZShjaGFyKiBjb250ZW50
cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIkJNIiwgMik7Cit9CisKK2Jvb2wg
bWF0Y2hlc0lDT1NpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNt
cChjb250ZW50cywgIlx4MDBceDAwXHgwMVx4MDAiLCA0KTsKK30KKworYm9vbCBtYXRjaGVzQ1VS
U2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRz
LCAiXHgwMFx4MDBceDAyXHgwMCIsIDQpOworfQorCit9CisKIEltYWdlRGVjb2RlciogSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxw
aGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKLSAgICAvLyBXZSBuZWVkIGF0IGxl
YXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGlu
ZwotICAgIC8vIHdpdGguCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heE1hcmtlckxlbmd0
aCA9IDQ7Ci0gICAgY2hhciBjb250ZW50c1ttYXhNYXJrZXJMZW5ndGhdOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRzLCBtYXhNYXJrZXJMZW5ndGgs
IGRhdGEsIDApOwotICAgIGlmIChsZW5ndGggPCBtYXhNYXJrZXJMZW5ndGgpCisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGxlbmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSA9IDE0OyAvLyBUbyB3aXQ6
ICJSSUZGPz8/P1dFQlBWUCIKKyAgICBjaGFyIGNvbnRlbnRzW2xlbmd0aE9mTG9uZ2VzdFNpZ25h
dHVyZV07CisgICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRCdWZmZXIoY29udGVu
dHMsIGxlbmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSwgZGF0YSwgMCk7CisgICAgaWYgKGxlbmd0aCA8
IGxlbmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBH
SUZzIGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgotICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAi
R0lGOCIsIDQpID09IDApCisgICAgaWYgKG1hdGNoZXNHSUZTaWduYXR1cmUoY29udGVudHMpKQog
ICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pOwogCi0gICAgLy8gVGVzdCBmb3IgUE5HLgotICAgIGlmICghbWVt
Y21wKGNvbnRlbnRzLCAiXHg4OVx4NTBceDRFXHg0NyIsIDQpKQorICAgIGlmIChtYXRjaGVzUE5H
U2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIo
YWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAotICAgIC8vIEpQRUcK
LSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlx4RkZceEQ4XHhGRiIsIDMpKQorICAgIGlmICht
YXRjaGVzSlBFR1NpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgSlBFR0lt
YWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogCiAj
aWYgVVNFKFdFQlApCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJSSUZGIiwgNCkpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdlYnBFeHRyYU1hcmtlciA9IDY7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3ZWJwRXh0cmFNYXJrZXJvZmZzZXQgPSA4OwotICAgICAg
ICBjaGFyIGhlYWRlclt3ZWJwRXh0cmFNYXJrZXJdOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihoZWFkZXIsIHdlYnBFeHRyYU1hcmtlciwgZGF0YSwgd2Vi
cEV4dHJhTWFya2Vyb2Zmc2V0KTsKLSAgICAgICAgaWYgKGxlbmd0aCA+PSB3ZWJwRXh0cmFNYXJr
ZXIpIHsKLSAgICAgICAgICAgIGlmICghbWVtY21wKGhlYWRlciwgIldFQlBWUCIsIHdlYnBFeHRy
YU1hcmtlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXRUJQSW1hZ2VEZWNvZGVyKGFs
cGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgaWYgKG1hdGNoZXNXZWJQU2lnbmF0dXJlKGNvbnRlbnRzKSkKKyAgICAgICAgcmV0dXJu
IG5ldyBXRUJQSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbik7CiAjZW5kaWYKIAotICAgIC8vIEJNUAotICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAi
Qk0iLCAyKSA9PSAwKQorICAgIGlmIChtYXRjaGVzQk1QU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAg
ICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKTsKIAotICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5
dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgotICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5
dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlx4
MDBceDAwXHgwMVx4MDAiLCA0KSB8fCAhbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAyXHgw
MCIsIDQpKQorICAgIGlmIChtYXRjaGVzSUNPU2lnbmF0dXJlKGNvbnRlbnRzKSB8fCBtYXRjaGVz
Q1VSU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29k
ZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAotICAgIC8vIEdp
dmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgogICAgIHJldHVybiAw
OwogfQogCkBAIC0xMjYsNyArMTUwLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0
b3I9KGNvbnN0CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFy
KCkKK3ZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fYmFja2luZ1N0
b3JlLmNsZWFyKCk7CiAgICAgbV9ieXRlcyA9IDA7CkBAIC0xMzcsNyArMTYxLDcgQEAgdm9pZCBJ
bWFnZUZyYW1lOjpjbGVhcigpCiAgICAgLy8gbGF0ZXIuCiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6
emVyb0ZpbGwoKQordm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7CiAgICAg
bWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6
ZW9mKFBpeGVsRGF0YSkpOwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwpAQCAtMTcxLDggKzE5NSw3
IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAgICBtX2J5dGVz
ID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgs
IG5ld0hlaWdodCk7CiAKLSAgICAvLyBaZXJvIHRoZSBpbWFnZS4KLSAgICB6ZXJvRmlsbCgpOwor
ICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCShyZXZpc2lvbiA3Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCBiZXR0ZXIgZW5j
YXBzdWxhdGlvbj8KICAgICB0eXBlZGVmIFZlY3RvcjxjaGFyPiBDb2xvclByb2ZpbGU7CiAKLSAg
ICAvLyBUaGUgSW1hZ2VGcmFtZSBvYmplY3QgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBk
YXRhIGluIFJHQkEzMgotICAgIC8vIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsIGRl
Y29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uCi0gICAgLy8gRnJhbWVzIGFyZSB0aGVu
IGluc3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZmZXIuCisg
ICAgLy8gSW1hZ2VGcmFtZSByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEuICBUaGlz
IGJ1ZmZlciBpcyB3aGF0IGFsbAorICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1l
IGludG8uCiAgICAgY2xhc3MgSW1hZ2VGcmFtZSB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVt
IEZyYW1lU3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07
CkBAIC03OSwxOSArNzgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBjcmVh
dGUgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0aGUgcmVmIGNv
dW50LgogICAgICAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3Ro
ZXIpOwogCi0gICAgICAgIC8vIERlbGV0ZXMgdGhlIHBpeGVsIGRhdGEgZW50aXJlbHk7IHVzZWQg
YnkgSW1hZ2VEZWNvZGVyIHRvIHNhdmUgbWVtb3J5Ci0gICAgICAgIC8vIHdoZW4gd2Ugbm8gbG9u
Z2VyIG5lZWQgdG8gZGlzcGxheSBhIGZyYW1lIGFuZCBvbmx5IG5lZWQgaXRzIG1ldGFkYXRhLgot
ICAgICAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICAgICAgLy8gWmVyb2VzIHRoZSBwaXhlbCBkYXRh
IGluIHRoZSBidWZmZXIsIHNldHRpbmcgaXQgdG8gZnVsbHktdHJhbnNwYXJlbnQuCi0gICAgICAg
IHZvaWQgemVyb0ZpbGwoKTsKLQotICAgICAgICAvLyBDcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhl
IGltYWdlIGRhdGEgaW4gfG90aGVyfCwgc28gdGhlIHR3byBpbWFnZXMKLSAgICAgICAgLy8gY2Fu
IGJlIG1vZGlmaWVkIGluZGVwZW5kZW50bHkuICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvcHkgc3Vj
Y2VlZGVkLgorICAgICAgICAvLyBUaGVzZSBkbyBub3QgdG91Y2ggb3RoZXIgbWV0YWRhdGEsIG9u
bHkgdGhlIHJhdyBwaXhlbCBkYXRhLgorICAgICAgICB2b2lkIGNsZWFyUGl4ZWxEYXRhKCk7Cisg
ICAgICAgIHZvaWQgemVyb0ZpbGxQaXhlbERhdGEoKTsKKworICAgICAgICAvLyBNYWtlcyB0aGlz
IGZyYW1lIGhhdmUgYW4gaW5kZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQgaW1hZ2Uncwor
ICAgICAgICAvLyBwaXhlbCBkYXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1l
IGFyZSBub3QgcmVmbGVjdGVkIGluCisgICAgICAgIC8vIHRoZSBvdGhlci4gIFJldHVybnMgd2hl
dGhlciB0aGUgY29weSBzdWNjZWVkZWQuCiAgICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29u
c3QgSW1hZ2VGcmFtZSYpOwogCi0gICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgcmVmZXJlbmNlIHRv
IHRoZSBpbWFnZSBkYXRhIGluIHxvdGhlcnwuICBUaGUgdHdvIGltYWdlcwotICAgICAgICAvLyBz
aGFyZSBhIGNvbW1vbiBiYWNraW5nIHN0b3JlLgorICAgICAgICAvLyBNYWtlcyB0aGlzIGZyYW1l
IHJlZmVyZW5jZSB0aGUgcHJvdmlkZWQgaW1hZ2UncyBwaXhlbCBkYXRhLCBzbyB0aGF0CisgICAg
ICAgIC8vIG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFyZSByZWZsZWN0ZWQgaW4gdGhlIG90
aGVyLgogICAgICAgICB2b2lkIGNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgSW1hZ2VG
cmFtZSYpOwogCiAgICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwg
c3RhcnRZKSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQpAQCAtMTEwLDE0ICsxMDcsMTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgLy8gQWxsb2NhdGVzIHNwYWNl
IGZvciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGl4ZWxzCi0g
ICAgICAgIC8vIGFyZSB3cml0dGVuLiBXaWxsIHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNl
IGlmIHRoZSBtZW1vcnkKLSAgICAgICAgLy8gYWxsb2NhdGlvbiBmYWlscy4gIENhbGxpbmcgdGhp
cyBtdWx0aXBsZSB0aW1lcyBpcyB1bmRlZmluZWQgYW5kIG1heQotICAgICAgICAvLyBsZWFrIG1l
bW9yeS4KKyAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2Uu
ICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgorICAgICAgICAvLyBzdWNjZWVkZWQuCiAgICAg
ICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpOwogCi0gICAgICAg
IC8vIFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0
dXJucyBhIHBvaW50ZXIKLSAgICAgICAgLy8gdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdl
IGRhdGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieQotICAgICAgICAvLyB0aGUgQml0
bWFwSW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0YTo6Y2xlYXIoKS4KKyAgICAgICAgLy8gUmV0
dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFn
ZSBkYXRhLgorICAgICAgICAvLyAoVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFw
SW1hZ2UgYW5kIGZyZWVkIGluCisgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKS4KICAgICAg
ICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OwogCiAgICAgICAgIGJv
b2wgaGFzQWxwaGEoKSBjb25zdDsKQEAgLTE5MiwzNSArMTg4LDI3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNlbHNlCiAgICAgICAgIE5hdGl2ZUJhY2tpbmdTdG9yZSBtX2JhY2tpbmdTdG9yZTsK
ICAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBt
X2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXplIG9mIHRo
ZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNhbWUgYXMgSW1hZ2VEZWNvZGVyOjptX3NpemUuCi0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsg
Ly8gV2hldGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlcgotICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdHJhbnNwYXJlbmN5LgorICAgICAgICBJbnRTaXpl
IG1fc2l6ZTsgLy8gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlci4gIFRoaXMgc2hvdWxkIGJlIHRoZSBz
YW1lIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZURlY29kZXI6Om1fc2l6ZS4K
KyAgICAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclBy
b2ZpbGU7CiAjZW5kaWYKLSAgICAgICAgSW50UmVjdCBtX3JlY3Q7IC8vIFRoZSByZWN0IG9mIHRo
ZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgb3ZlcmFsbCBidWZmZXIuICBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZy
YW1lcyB3aG9zZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVjdCB3YXMg
c21hbGxlciB0aGFuIHRoZSBvdmVyYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbWFn
ZSBzaXplLgotICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBvciBub3Qg
dGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBmaW5pc2hlZCBkZWNvZGluZy4KLSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsgLy8gVGhl
IGFuaW1hdGlvbiBkZWxheS4KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2Fs
TWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hlbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemluZyB0
aGUgbmV4dCBmcmFtZS4KLSAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7IC8vIFdoZXRo
ZXIgdG8gcHJlbXVsdGlwbHkgYWxwaGEgaW50byBSLCBHLCBCCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFubmVsczsgYnkgZGVmYXVsdCBpdCdzIHRydWUuCisgICAgICAg
IEludFJlY3QgbV9yZWN0OyAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZy
YW1lIHdpdGhpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJhbGwgYnVmZmVy
LiAgVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2Ugb3JpZ2luYWwgcmVj
dCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFs
bCBpbWFnZSBzaXplLgorICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKKyAgICAgICAgdW5z
aWduZWQgbV9kdXJhdGlvbjsKKyAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2Fs
TWV0aG9kOworICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKICAgICB9OwogCi0gICAg
Ly8gVGhlIEltYWdlRGVjb2RlciBjbGFzcyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3Bl
Y2lmaWMgaW1hZ2UgZm9ybWF0Ci0gICAgLy8gZGVjb2RlcnMgKGUuZy4sIEdJRiwgSlBHLCBQTkcs
IElDTykgdG8gZGVyaXZlIGZyb20uICBBbGwgZGVjb2RlcnMgZGVjb2RlCi0gICAgLy8gaW50byBS
R0JBMzIgZm9ybWF0IGFuZCB0aGUgYmFzZSBjbGFzcyBtYW5hZ2VzIHRoZSBSR0JBMzIgZnJhbWUg
Y2FjaGUuCisgICAgLy8gSW1hZ2VEZWNvZGVyIGlzIGEgYmFzZSBmb3IgYWxsIGZvcm1hdC1zcGVj
aWZpYyBkZWNvZGVycworICAgIC8vIChlLmcuIEpQRUdJbWFnZURlY29kZXIpLiAgVGhpcyBiYXNl
IG1hbmFnZXMgdGhlIEltYWdlRnJhbWUgY2FjaGUuCiAgICAgLy8KLSAgICAvLyBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxvd3MgaW1hZ2UgZGVjb2RlcnMgdG8gd3JpdGUK
LSAgICAvLyBkaXJlY3RseSB0byBzY2FsZWQgb3V0cHV0IGJ1ZmZlcnMgYnkgZG93biBzYW1wbGlu
Zy4gQ2FsbAotICAgIC8vIHNldE1heE51bVBpeGVscygpIHRvIHNwZWNpZnkgdGhlIGJpZ2dlc3Qg
c2l6ZSB0aGF0IGRlY29kZWQgaW1hZ2VzIGNhbgotICAgIC8vIGhhdmUuIEltYWdlIGRlY29kZXJz
IHdpbGwgZGVmbGF0ZSB0aG9zZSBpbWFnZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4KLSAgICAvLyBt
X21heE51bVBpeGVscy4gKE5vdCBzdXBwb3J0ZWQgYnkgYWxsIGltYWdlIGRlY29kZXJzIHlldCkK
KyAgICAvLyBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKSBhbGxvd3MgaW1hZ2Ug
ZGVjb2RlcnMgdG8gZG93bnNhbXBsZQorICAgIC8vIGF0IGRlY29kZSB0aW1lLiAgSW1hZ2UgZGVj
b2RlcnMgd2lsbCBkb3duc2FtcGxlIGFueSBpbWFnZXMgbGFyZ2VyIHRoYW4KKyAgICAvLyB8bV9t
YXhOdW1QaXhlbHN8LiAgRklYTUU6IE5vdCB5ZXQgc3VwcG9wcnRlZCBieSBhbGwgZGVjb2RlcnMu
CiAgICAgY2xhc3MgSW1hZ2VEZWNvZGVyIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VEZWNvZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAt
MjMxLDE5ICsyMTksMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3Np
emVBdmFpbGFibGUoZmFsc2UpCiAgICAgICAgICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQogICAg
ICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX2Zh
aWxlZChmYWxzZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgICAgICAsIG1fZmFpbGVk
KGZhbHNlKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQorICAgICAg
ICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7IH0KIAotICAgICAgICAvLyBGYWN0b3J5IGZ1bmN0
aW9uIHRvIGNyZWF0ZSBhbiBJbWFnZURlY29kZXIuICBQb3J0cyB0aGF0IHN1YmNsYXNzCi0gICAg
ICAgIC8vIEltYWdlRGVjb2RlciBjYW4gcHJvdmlkZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24g
b2YgdGhpcyB0byBhdm9pZAotICAgICAgICAvLyBuZWVkaW5nIHRvIHdyaXRlIGEgZGVkaWNhdGVk
IHNldERhdGEoKSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgLy8gRmFjdG9yeSBmdW5jdGlvbiB0
byBjcmVhdGUgYW4gYXBwcm9wcmlhdGUgSW1hZ2VEZWNvZGVyLiAgUmV0dXJucyAwIGlmCisgICAg
ICAgIC8vIHdlIGNhbid0IHNuaWZmIGEgc3VwcG9ydGVkIHR5cGUgZnJvbSB0aGUgcHJvdmlkZWQg
ZGF0YSAocG9zc2libHkKKyAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpc24ndCBlbm91Z2ggZGF0
YSB5ZXQpLgogICAgICAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVk
QnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAgICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBl
eHRlbnNpb24gdXN1YWxseSBhc3NvY2lhdGVkIHdpdGggYW4gdW5kZWNvZGVkIGltYWdlCi0gICAg
ICAgIC8vIG9mIHRoaXMgdHlwZS4KICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdCA9IDA7CiAKICAgICAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KQEAgLTI1Niw0MSArMjQwLDM0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBh
bGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0
aGUgc2l6ZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhpcwotICAgICAgICAv
LyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIGhh
cyBiZWVuIHNldCBhbmQKLSAgICAgICAgLy8gd2UgaGF2ZSBub3Qgc2VlbiBhIGZhaWx1cmUuIERl
Y29kZXJzIG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8KLSAgICAgICAgLy8gbGF6aWx5IGRl
Y29kZSBlbm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KKyAgICAgICAgLy8gTGF6
aWx5LWRlY29kZXMgZW5vdWdoIG9mIHRoZSBpbWFnZSB0byBnZXQgdGhlIHNpemUgKGlmIHBvc3Np
YmxlKS4KICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOyAKKyAgICAg
ICAgICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCi0gICAgICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZTsKLSAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgICAgIEludFNpemUgc2NhbGVkU2l6ZSgpIGNvbnN0CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3NjYWxlZCA/IEludFNpemUobV9zY2FsZWRD
b2x1bW5zLnNpemUoKSwgbV9zY2FsZWRSb3dzLnNpemUoKSkgOiBzaXplKCk7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIGZyYW1lIHxpbmRleHwuICBUaGlzIHdp
bGwgb25seSBkaWZmZXIgZnJvbSBzaXplKCkKLSAgICAgICAgLy8gZm9yIGZvcm1hdHMgd2hlcmUg
ZGlmZmVyZW50IGZyYW1lcyBhcmUgZGlmZmVyZW50IHNpemVzIChuYW1lbHkgSUNPLAotICAgICAg
ICAvLyB3aGVyZSBlYWNoIGZyYW1lIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgaWNvbiB3aXRoaW4g
dGhlIG1hc3RlciBmaWxlKS4KLSAgICAgICAgLy8gTm90YWJseSwgdGhpcyBkb2VzIG5vdCByZXR1
cm4gZGlmZmVyZW50IHNpemVzIGZvciBkaWZmZXJlbnQgR0lGCi0gICAgICAgIC8vIGZyYW1lcywg
c2luY2Ugd2hpbGUgdGhlc2UgbWF5IGJlIHN0b3JlZCBhcyBzbWFsbGVyIHJlY3RhbmdsZXMsIGR1
cmluZwotICAgICAgICAvLyBkZWNvZGluZyB0aGV5IGFyZSBjb21wb3NpdGVkIHRvIGNyZWF0ZSBh
IGZ1bGwtc2l6ZSBmcmFtZS4KKyAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiBhIHBhcnRp
Y3VsYXIgZnJhbWUuICBUaGlzIHdpbGwgb25seSBkaWZmZXIgZnJvbQorICAgICAgICAvLyBzaXpl
KCkgZm9yIGZvcm1hdHMgd2hlcmUgZGlmZmVyZW50IGZyYW1lcyBhcmUgZGlmZmVyZW50IHNpemVz
CisgICAgICAgIC8vIChlLmcuIElDTywgd2hlcmUgZWFjaCBmcmFtZSByZXByZXNlbnRzIGEgZGlm
ZmVyZW50IGljb24gd2l0aGluIHRoZQorICAgICAgICAvLyBtYXN0ZXIgZmlsZSkuICBOb3RhYmx5
LCB0aGlzIGRvZXMgTk9UIHJldHVybiBkaWZmZXJlbnQgc2l6ZXMgZm9yCisgICAgICAgIC8vIGRp
ZmZlcmVudCBHSUYgZnJhbWVzLCBzaW5jZSB3aGlsZSB0aGVzZSBtYXkgYmUgc3RvcmVkIGFzIHNt
YWxsZXIKKyAgICAgICAgLy8gcmVjdGFuZ2xlcywgZHVyaW5nIGRlY29kaW5nIHRoZXkgYXJlIGNv
bXBvc2l0ZWQgdG8gY3JlYXRlIGEgZnVsbC1zaXplCisgICAgICAgIC8vIGZyYW1lLgogICAgICAg
ICB2aXJ0dWFsIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBzaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBD
YWxsZWQgYnkgdGhlIGltYWdlIGRlY29kZXJzIHRvIHNldCB0aGVpciBkZWNvZGVkIHNpemUsIHRo
aXMgYWxzbwotICAgICAgICAvLyBjaGVja3MgdGhlIHNpemUgZm9yIHZhbGlkaXR5LiBJdCB3aWxs
IHJldHVybiB0cnVlIGlmIHRoZSBzaXplIHdhcwotICAgICAgICAvLyBzZXQsIG9yIGZhbHNlIGlm
IHRoZXJlIGlzIGFuIGVycm9yLiBPbiBlcnJvciwgdGhlIG1fZmFpbGVkIGZsYWcgd2lsbAotICAg
ICAgICAvLyBiZSBzZXQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgZGVj
b2RpbmcuCisgICAgICAgIC8vIFNldHMgdGhlIGltYWdlIHNpemUuICBSZXR1cm5zIHdoZXRoZXIg
dGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90CisgICAgICAgIC8vIGdvaW5nIHRvIHJlc3VsdCBp
biBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBkZWNvZGluZyBhcworICAgICAg
ICAvLyBmYWlsZWQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc092ZXJTaXpl
KHdpZHRoLCBoZWlnaHQpKQpAQCAtMzAwLDI2ICsyNzcsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGUg
dG90YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgQ2xhc3NlcyB0aGF0IHN1cHBv
cnQKLSAgICAgICAgLy8gbXVsdGlwbGUgZnJhbWVzIHdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBm
b3IgdGhlIGFuc3dlciBpZiB0aGV5IG5lZWQKLSAgICAgICAgLy8gdG8gKHdpdGhvdXQgbmVjZXNz
YXJpbHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCisgICAgICAgIC8v
IExhemlseS1kZWNvZGVzIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBmcmFtZSBjb3Vu
dCAoaWYKKyAgICAgICAgLy8gcG9zc2libGUpLCB3aXRob3V0IGRlY29kaW5nIHRoZSBpbmRpdmlk
dWFsIGZyYW1lcy4KICAgICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgpIHsgcmV0dXJu
IDE7IH0KIAotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0g
Zm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291
bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQogCi0gICAgICAgIC8vIENhbGxl
ZCB0byBvYnRhaW4gdGhlIEltYWdlRnJhbWUgZnVsbCBvZiBkZWNvZGVkIGRhdGEgZm9yIHJlbmRl
cmluZy4KLSAgICAgICAgLy8gVGhlIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFzIG11Y2gg
b2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUKLSAgICAgICAgLy8gaGFuZGluZyBiYWNrIHRo
ZSBidWZmZXIuCisgICAgICAgIC8vIERlY29kZXMgYXMgbXVjaCBvZiB0aGUgcmVxdWVzdGVkIGZy
YW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgorICAgICAgICAvLyBJbWFnZURlY29kZXIt
b3duZWQgcG9pbnRlci4KICAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90KSA9IDA7CiAKLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVuZGVy
bHlpbmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEKLSAgICAgICAgLy8gdHJhbnNw
YXJlbmN5LgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLQogICAgICAgICB2b2lkIHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxl
KGJvb2wgZmxhZykgeyBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQotCi0g
ICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBnYW1tYSBhbmQgY29sb3IgcHJvZmlsZSBhcmUg
YXBwbGllZC4KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2ZpbGUoKSBjb25z
dCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKICAgICAgICAgLy8g
U2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLiAgRm9yIGNhbGxlciBjb252ZW5pZW5jZSAo
c2luY2Ugc28KQEAgLTMzNCwxMyArMzAyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKLSAgICAgICAg
Ly8gV2lwZSBvdXQgZnJhbWVzIGluIHRoZSBmcmFtZSBidWZmZXIgY2FjaGUgYmVmb3JlIHxjbGVh
ckJlZm9yZUZyYW1lfCwKLSAgICAgICAgLy8gYXNzdW1pbmcgdGhpcyBjYW4gYmUgZG9uZSB3aXRo
b3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlmZmVyZW50Ci0gICAgICAgIC8vIGRlY29kZXJzIHBs
YWNlIGRpZmZlcmVudCByZXN0cmljdGlvbnMgb24gd2hhdCBmcmFtZXMgYXJlIHNhZmUgdG8KLSAg
ICAgICAgLy8gZGVzdHJveSwgc28gdGhpcyBpcyBsZWZ0IHRvIHRoZW0gdG8gaW1wbGVtZW50Lgot
ICAgICAgICAvLyBGb3IgY29udmVuaWVuY2UncyBzYWtlLCB3ZSBwcm92aWRlIGEgZGVmYXVsdCAo
ZW1wdHkpIGltcGxlbWVudGF0aW9uLAotICAgICAgICAvLyBzaW5jZSBpbiBwcmFjdGljZSBvbmx5
IEdJRnMgd2lsbCBldmVyIHVzZSB0aGlzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKSB7IH0KKyAgICAgICAgLy8gQ2xl
YXJzIGFzIG11Y2ggZGVjb2RlZCBwaXhlbCBkYXRhIGFzIHBvc3NpYmxlIGZyb20gYmVmb3JlIHRo
ZQorICAgICAgICAvLyBwcm92aWRlZCBmcmFtZS4gIFByZXNlcnZlcyBhbnkgZGF0YSBuZWNlc3Nh
cnkgdG8gZGVjb2RlIGZ1dHVyZQorICAgICAgICAvLyBmcmFtZXMuICBJbiBwcmFjdGljZSB0aGlz
IGlzIHVzZWQgb24gbGFyZ2UgYW5pbWF0ZWQgR0lGcyB0byBzYXZlCisgICAgICAgIC8vIG1lbW9y
eSBhdCB0aGUgY29zdCBvZiBleHRyYSBDUFUgdG8gcmUtZGVjb2RlIGZyYW1lcyBsYXRlci4KKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpIHsgfQogCiAj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgdm9pZCBzZXRN
YXhOdW1QaXhlbHMoaW50IG0pIHsgbV9tYXhOdW1QaXhlbHMgPSBtOyB9CkBAIC0zNjgsOCArMzM0
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEg
KHNpZ25lZCkgaW50LiAgQXZvaWQgb3ZlcmZsb3cuCiAgICAgICAgIHN0YXRpYyBib29sIGlzT3Zl
clNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKICAgICAgICAgewotICAgICAg
ICAgICAgLy8gd2lkdGggKiBoZWlnaHQgbXVzdCBub3QgZXhjZWVkICgyIF4gMjkpIC0gMSwgc28g
dGhhdCB3ZSBkb24ndAotICAgICAgICAgICAgLy8gb3ZlcmZsb3cgd2hlbiB3ZSBtdWx0aXBseSBi
eSA0LgogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdpZHRoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdo
dCk7CiAgICAgICAgICAgICByZXR1cm4gdG90YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJl
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MDcsNyArNzA3LDcgQEAgQk1QSW1hZ2VSZWFkZXI6OlByb2Nlc3Np
bmdSZXN1bHQgQk1QSW1hZwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIG1fc2Vlbk5vblplcm9BbHBoYVBpeGVsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc2Vlblplcm9BbHBoYVBpeGVsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2J1ZmZlci0+emVyb0ZpbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT56
ZXJvRmlsbFBpeGVsRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWVuWmVyb0Fs
cGhhUGl4ZWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbHBoYSAh
PSAyNTUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEodHJ1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFn
ZURlY29kZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiA3Njk4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBib29sIEltYWdlRnJhbWU6OnNldFNp
emUoaW50IG5ld1dpZHRoLCBpCiAgICAgbV9ieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGl4ZWxE
YXRhKj4oQ0ZEYXRhR2V0TXV0YWJsZUJ5dGVQdHIobV9iYWNraW5nU3RvcmUuZ2V0KCkpKTsKICAg
ICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogCi0gICAgemVyb0ZpbGwo
KTsKKyAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc0LDE0ICsxNzQsMTQgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6
OmNsZWFyRnJhbWVCdWZmZXJDYQogICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3IgaShl
bmQpOwogICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYgKChp
LT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxNZXRo
b2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7CiAg
ICAgICAgIGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkgJiYg
KGkgIT0gZW5kKSkKLSAgICAgICAgICAgIGktPmNsZWFyKCk7CisgICAgICAgICAgICBpLT5jbGVh
clBpeGVsRGF0YSgpOwogICAgIH0KIAogICAgIC8vIE5vdyB8aXwgaG9sZHMgdGhlIGxhc3QgZnJh
bWUgd2UgbmVlZCB0byBwcmVzZXJ2ZTsgY2xlYXIgcHJpb3IgZnJhbWVzLgogICAgIGZvciAoVmVj
dG9yPEltYWdlRnJhbWU+OjppdGVyYXRvciBqKG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKTsg
aiAhPSBpOyArK2opIHsKICAgICAgICAgQVNTRVJUKGotPnN0YXR1cygpICE9IEltYWdlRnJhbWU6
OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KQotICAgICAgICAgICAgai0+Y2xlYXIoKTsKKyAgICAgICAgICAgIGotPmNsZWFy
UGl4ZWxEYXRhKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aAkocmV2aXNpb24gNzY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFp
bGFibGUoKTsKICAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCk7CiAgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJB
dEluZGV4KHNpemVfdCBpbmRleCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FscGhh
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVk
KCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBh
Y2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJv
bSBpbnNpZGUKICAgICAgICAgLy8gSlBFR0ltYWdlUmVhZGVyIQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1l
UXQuY3BwCShyZXZpc2lvbiA3Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6
Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fcGl4bWFwID0gUVBpeG1hcCgpOwogICAgIG1faW1h
Z2UgPSBRSW1hZ2UoKTsKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhcigp
CiAgICAgLy8gb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCiB9CiAKLXZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGwoKQordm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVs
RGF0YSgpCiB7CiAgICAgaWYgKG1fcGl4bWFwLmlzTnVsbCgpICYmICFtX2ltYWdlLmlzTnVsbCgp
KSB7CiAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1hcChtX2ltYWdlLndpZHRoKCksIG1faW1hZ2Uu
aGVpZ2h0KCkpOwpAQCAtMTAxLDggKzEwMSw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShp
bnQgbmV3V2lkdGgsIGkKICAgICBpZiAobV9waXhtYXAuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIC8vIFplcm8gdGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7CisgICAg
emVyb0ZpbGxQaXhlbERhdGEoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9z
a2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCShyZXZpc2lvbiA3Njk4NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3Bl
cmF0b3I9KGNvbnN0CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNs
ZWFyKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fYml0bWFw
LnJlc2V0KCk7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwpAQCAtNjYsNyArNjYsNyBAQCB2
b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhp
cyBmcmFtZSBsYXRlci4KIH0KIAotdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCit2b2lkIElt
YWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsKICAgICBtX2JpdG1hcC5lcmFzZUFSR0Io
MCwgMCwgMCwgMCk7CiB9CkBAIC05MCw4ICs5MCw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6
ZShpbnQgbmV3V2lkdGgsIGkKICAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIFplcm8gdGhlIGltYWdlLgotICAgIHplcm9GaWxs
KCk7CisgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc2OTg1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3Ry
aW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gInZwOCI7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNB
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gUmV0dXJu
cyBmYWxzZSBpbiBjYXNlIG9mIGRlY29kaW5nIGZhaWx1cmUuCg==
</data>
<flag name="review"
          id="72346"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80960</attachid>
            <date>2011-02-02 13:35:26 -0800</date>
            <delta_ts>2011-02-02 13:50:00 -0800</delta_ts>
            <desc>Larger patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>34362</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NDAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDItMDIgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIEltYWdlRGVjb2RlcidzIGNvbW1lbnRzIChy
ZW1vdmUvdHJpbS9jbGFyaWZ5KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzNDU1CisKKyAgICAgICAgVGhpcyBhbHNvIHJlbmFtZXMgb3IgZWxpbWlu
YXRlcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgZm9yIGNsYXJpdHksIGFuZAorICAgICAgICBzd2l0
Y2hlcyBhIGNvdXBsZSBlcnJvbmVvdXMgc3RybmNtcCgpIGNhbGxzIHRvIG1lbWNtcCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldElnbm9yZUdhbW1hQW5k
Q29sb3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6Y2xlYXJQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVy
b0ZpbGxQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJw
L1dFQlBJbWFnZURlY29kZXIuaDoKKwogMjAxMS0wMi0wMiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgRW5jb2RlL2RlY29kZSBGb3JtRGF0YSBhbmQgRm9ybURhdGFF
bGVtZW50IG9iamVjdHMgY29uc2lzdGVudGx5CkBAIC03NzYsMTExICs4MjIsNiBAQAogCiAgICAg
ICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CiAKLTIwMTEtMDItMDEgIGNocmlzIHJlaXNz
ICA8Y2hyaXN0b3BoZXIucmVpc3NAbm9raWEuY29tPgotCi0gICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCi0KLSAgICAgICAgU2VsZi1yZXBsaWNhdGluZyBjb2RlIG1ha2VzIFNhZmFyaSBo
YW5nIGFuZCBldmVudHVhbGx5IGNyYXNoCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTEyMwotCi0gICAgICAgCi0gICAgICAgIEhlcmUgd2UgYXJlIHJl
cGxpY2F0aW5nIHRoZSBGaXJlZm94IHNhZmVndWFyZCBhZ2FpbnN0Ci0gICAgICAgIHJlY3Vyc2l2
ZSBkb2N1bWVudC53cml0ZSggKSAncy4KLQotICAgICAgICBTZWUgIGh0dHBzOi8vYnVnMTk3MDUy
LmJ1Z3ppbGxhLm1vemlsbGEub3JnL2F0dGFjaG1lbnQuY2dpP2lkPTI5MzkwNyBpbiBidWcgCi0g
ICAgICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE5NzA1
MiAuICAgRmlyZWZveCBkb2VzIHR3byB0aGluZ3MgLSAKLSAgICAgICAgICAgIGEpIGltcG9zZXMg
YSByZWN1cnNpb24gbGltaXQgb2YgMjAgb24gZG9jdW1lbnQud3JpdGUoICkgYW5kCi0gICAgICAg
ICAgICBiKSBvbmNlIHRoYXQgbGltaXQgaXMgcGFzc2VkLCBwYW5pY3MgYWxsIHRoZSB3YXkgdGhl
IGNhbGwgc3RhY2sgKHJhdGhlciB0aGFuIGp1c3QgcmV0dXJuaW5nIG9uZSBsZXZlbC4pCi0gICAg
ICAgIFRvIHNlZSB3aHkgdGhpcyBpcyBuZWNlc3NhcnksIGNvbnNpZGVyIHRoZSBzY3JpcHQgOiAK
LQotICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MOwotICAgICAgICAgICBkb2N1bWVudC53cml0ZSh0KTsKLSAgICAgICAgPC9zY3JpcHQ+
IAotCi0gICAgICAgIFRoaXMgd2lsbCBjcmVhdGUgYSB0cmVlIGJvdGggYnJvYWQgYW5kIGRlZXAg
YXMgdGhlIHNjcmlwdCBrZWVwcyBhcHBlbmRpbmcgaXRzZWxmIHRvIHRoZSB0ZXh0LiAgIElmCi0g
ICAgICAgIHdlIGp1c3QgcmV0dXJuIG9uZSBsZXZlbCBhZnRlciB0aGUgcmVjdXJzaW9uIGxpbWl0
IGlzIHJlYWNoZWQsIHdlIHN0aWxsIGFsbG93IG1pbGxpb25zIG9mIGNvcGllcyB0byAKLSAgICAg
ICAgZHVwbGljYXRlIChhbmQgZXhlY3V0ZSkuICAgCi0KLSAgICAgICAgVGhlIHJlY3Vyc2lvbiBp
cyBmb3J0dW5hdGVseSBkZXB0aC1maXJzdCwgc28gYXMgc29vbiBhcyB3ZSBjcm9zcyB0aGlzIGxp
bWl0LCB3ZSBwYW5pYyB1cCB0aGUgY2FsbHN0YWNrCi0gICAgICAgIHRvIHByZXZlbnQgdGhpcyBz
aXR1YXRpb24uICAgIChJRSBhcHBhcmVudGx5IGRvZXMgdGhlIHNhbWUgdGhpbmcsIHdpdGggYSBs
b3dlciByZWN1cnNpb24gbGltaXQuKSAKLQotICAgICAgICBUZXN0OiBmYXN0L2RvbS9Eb2N1bWVu
dC9kb2N1bWVudC13cml0ZS1yZWN1cnNpb24uaHRtbCAgICAgICAgCi0gICAgICAgIFRlc3Q6IGZh
c3QvZG9tL0RvY3VtZW50L2RvY3VtZW50LWNsb3NlLWlmcmFtZS1sb2FkLmh0bWwKLSAgICAgICAg
VGVzdDogZmFzdC9kb20vRG9jdW1lbnQvZG9jdW1lbnQtY2xvc2UtbmVzdGVkLWlmcmFtZS1sb2Fk
Lmh0bWwKLQotCi0gICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpEb2N1bWVudCk6Ci0gICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d3JpdGUp
OgotICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgotCi0yMDExLTAyLTAxICBKb2hubnkgRGluZyAg
PGpuZEBjaHJvbWl1bS5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCi0K
LSAgICAgICAgRG9uJ3Qgc2V0IHVzZXIgZ2VzdHVyZSBpbiBIVE1MQW5jaG9yRWxlbWVudCdzIGNs
aWNrIGhhbmRsZXIgYmVjYXVzZSB0aGUgY2xpY2sgaGFuZGxlciBjYW4gYmUgdHJpZ2dlcmVkIGJ5
IHVudHJ1c3RlZCBldmVudC4KLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUzNDI0Ci0KLSAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvcG9wdXAtYmxvY2tl
ZC1mcm9tLXVudHJ1c3RlZC1jbGljay1ldmVudC1vbi1hbmNob3IuaHRtbAotCi0gICAgICAgICog
aHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpoYW5kbGVMaW5r
Q2xpY2spOgotCi0yMDExLTAyLTAxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5v
cmc+Ci0KLSAgICAgICAgVW5yZXZpZXdlZCBRdCBidWlsZGZpeCBhZnRlciByNzcyODYuCi0KLSAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTIwIAotICAg
ICAgICBSZW1vdmUgdGhlIHBoeXNpY2FsIHRlcm1pbm9sb2d5IGZyb20gSW50UmVjdCBhbmQgRmxv
YXRSZWN0LgotCi0gICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
Y3BwOgotICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGVzKToK
LQotMjAxMS0wMi0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgotCi0gICAgICAgIEZp
eCBNYWMgcHJvZHVjdGlvbiBidWlsZHMuCi0KLSAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtl
OgotICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKLSAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaDoKLSAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKLQotMjAxMS0wMi0wMSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXphY2guCi0KLSAg
ICAgICAgUkVHUkVTU0lPTjogUmVtb3ZpbmcgZm9jdXMgZnJvbSBhcmVhIGVsZW1lbnQgY2F1c2Vz
IHVud2FudGVkIHNjcm9sbGluZwotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTAxNjkKLQotICAgICAgICBUZXN0OiBmYXN0L2ltYWdlcy9pbWFnZW1hcC1z
Y3JvbGwuaHRtbAotCi0gICAgICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgotICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpzZXRGb2N1cyk6IEFkZGVkIG92ZXJyaWRlLiBD
YWxscyB0aGUgbmV3Ci0gICAgICAgIFJlbmRlckltYWdlOjphcmVhRWxlbWVudEZvY3VzQ2hhbmdl
ZCBmdW5jdGlvbi4KLSAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6dXBkYXRlRm9j
dXNBcHBlYXJhbmNlKTogUmVtb3ZlZCB0aGUgY29kZQotICAgICAgICBoZXJlIHRoYXQgY2FsbHMg
c2V0TmVlZHNMYXlvdXQgb24gdGhlIGltYWdlJ3MgcmVuZGVyZXIuIFRoaXMgd2FzIGFuCi0gICAg
ICAgIGF0dGVtcHQgdG8gY2F1c2UgcmVwYWludCBvZiB0aGUgcmVuZGVyZXIsIGJ1dCB0aGlzIGZ1
bmN0aW9uIGRvZXMgbm90Ci0gICAgICAgIG5lZWQgdG8gZG8gdGhhdC4gQWxzbyBjaGFuZ2VkIHRo
aXMgdG8gdXNlIHRoZSBpbWFnZUVsZW1lbnQgZnVuY3Rpb24KLSAgICAgICAgdG8gYXZvaWQgcmVw
ZWF0aW5nIGNvZGUuCi0KLSAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOiBVcGRhdGVk
IGZvciBhYm92ZSBjaGFuZ2VzLgotCi0gICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cDoKLSAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludCk6IFVwZGF0ZWQgZm9yIG5h
bWUgY2hhbmdlLgotICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50QXJlYUVsZW1l
bnRGb2N1c1JpbmcpOiBSZW5hbWVkIHRoaXMgZnJvbQotICAgICAgICBwYWludEZvY3VzUmluZywg
YmVjYXVzZSBpdCBvbmx5IHBhaW50cyBhcmVhIGZvY3VzIHJpbmdzLCBhbmQgc2hvdWxkCi0gICAg
ICAgIG5vdCBiZSBjb25mdXNlZCB3aXRoIHBhaW50Rm9jdXNSaW5nIGZ1bmN0aW9ucyBpbiBvdGhl
ciBjbGFzc2VzLiBBbHNvCi0gICAgICAgIHJlbW92ZWQgdGhlIHVudXNlZCBzdHlsZSBhcmd1bWVu
dC4gUmVtb3ZlZCB0aGUgY29kZSB0aGF0IHVzZWQgYW4KLSAgICAgICAgSFRNTENvbGxlY3Rpb24g
dG8gc2VlIGlmIHRoZSBmb2N1c2VkIGFyZWEgZWxlbWVudCBpcyBmb3IgdGhpcyBpbWFnZQotICAg
ICAgICBhbmQgaW5zdGVhZCBqdXN0IGNhbGwgaW1hZ2VFbGVtZW50IG9uIHRoZSBhcmVhIGVsZW1l
bnQuCi0gICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6YXJlYUVsZW1lbnRGb2N1c0NoYW5n
ZWQpOiBBZGRlZC4gQ2FsbHMgcmVwYWludC4KLQotICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bWFnZS5oOiBBZGRlZCBhIHB1YmxpYyBhcmVhRWxlbWVudEZvY3VzQ2hhbmdlZAotICAgICAgICBm
dW5jdGlvbiBmb3IgSFRNTEFyZWFFbGVtZW50IHRvIGNhbGwuIE1hZGUgdGhlIHBhaW50Rm9jdXNS
aW5nIGZ1bmN0aW9uCi0gICAgICAgIHByaXZhdGUsIHJlbmFtZWQgaXQgdG8gcGFpbnRBcmVhRWxl
bWVudEZvY3VzUmluZywgYW5kIHJlbW92ZWQgaXRzCi0gICAgICAgIHVudXNlZCBzdHlsZSBhcmd1
bWVudC4KLQogMjAxMS0wMi0wMSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIFdpbkNFIGJ1aWxkIGZpeCBmb3Igcjc3Mjg2LgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NzMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRCdWZmZXIoY2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVyLCB1bnNp
Z25lZCBvZmZzZXQpCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBjb3B5RnJvbVNoYXJlZEJ1ZmZl
cihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2hhcmVkQnVmZmVy
JiBzaGFyZWRCdWZmZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBieXRlc0V4
dHJhY3RlZCA9IDA7CiAgICAgY29uc3QgY2hhciogbW9yZURhdGE7CkBAIC01Myw1MSArNTUsNzMg
QEAgc3RhdGljIHVuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYQogICAgIHJldHVybiBi
eXRlc0V4dHJhY3RlZDsKIH0KIAorYm9vbCBtYXRjaGVzR0lGU2lnbmF0dXJlKGNoYXIqIGNvbnRl
bnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpOworfQorCiti
b29sIG1hdGNoZXNQTkdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFt
ZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3IiwgNCk7Cit9CisKK2Jvb2wgbWF0Y2hl
c0pQRUdTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1jbXAoY29u
dGVudHMsICJceEZGXHhEOFx4RkYiLCAzKTsKK30KKworI2lmIFVTRShXRUJQKQorYm9vbCBtYXRj
aGVzV2ViUFNpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChj
b250ZW50cywgIlJJRkYiLCA0KSAmJiAhbWVtY21wKGNvbnRlbnRzICsgOCwgIldFQlBWUCIsIDYp
OworfQorI2VuZGlmCisKK2Jvb2wgbWF0Y2hlc0JNUFNpZ25hdHVyZShjaGFyKiBjb250ZW50cykK
K3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIkJNIiwgMik7Cit9CisKK2Jvb2wgbWF0
Y2hlc0lDT1NpZ25hdHVyZShjaGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChj
b250ZW50cywgIlx4MDBceDAwXHgwMVx4MDAiLCA0KTsKK30KKworYm9vbCBtYXRjaGVzQ1VSU2ln
bmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAi
XHgwMFx4MDBceDAyXHgwMCIsIDQpOworfQorCit9CisKIEltYWdlRGVjb2RlciogSW1hZ2VEZWNv
ZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFP
cHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
biBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKLSAgICAvLyBXZSBuZWVkIGF0IGxlYXN0
IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZwot
ICAgIC8vIHdpdGguCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heE1hcmtlckxlbmd0aCA9
IDQ7Ci0gICAgY2hhciBjb250ZW50c1ttYXhNYXJrZXJMZW5ndGhdOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNvbnRlbnRzLCBtYXhNYXJrZXJMZW5ndGgsIGRh
dGEsIDApOwotICAgIGlmIChsZW5ndGggPCBtYXhNYXJrZXJMZW5ndGgpCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGxlbmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSA9IDE0OyAvLyBUbyB3aXQ6ICJS
SUZGPz8/P1dFQlBWUCIKKyAgICBjaGFyIGNvbnRlbnRzW2xlbmd0aE9mTG9uZ2VzdFNpZ25hdHVy
ZV07CisgICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRCdWZmZXIoY29udGVudHMs
IGxlbmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSwgZGF0YSwgMCk7CisgICAgaWYgKGxlbmd0aCA8IGxl
bmd0aE9mTG9uZ2VzdFNpZ25hdHVyZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBHSUZz
IGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgotICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lG
OCIsIDQpID09IDApCisgICAgaWYgKG1hdGNoZXNHSUZTaWduYXR1cmUoY29udGVudHMpKQogICAg
ICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pOwogCi0gICAgLy8gVGVzdCBmb3IgUE5HLgotICAgIGlmICghbWVtY21w
KGNvbnRlbnRzLCAiXHg4OVx4NTBceDRFXHg0NyIsIDQpKQorICAgIGlmIChtYXRjaGVzUE5HU2ln
bmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIoYWxw
aGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAotICAgIC8vIEpQRUcKLSAg
ICBpZiAoIW1lbWNtcChjb250ZW50cywgIlx4RkZceEQ4XHhGRiIsIDMpKQorICAgIGlmIChtYXRj
aGVzSlBFR1NpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdl
RGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogCiAjaWYg
VVNFKFdFQlApCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJSSUZGIiwgNCkpIHsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdlYnBFeHRyYU1hcmtlciA9IDY7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCB3ZWJwRXh0cmFNYXJrZXJvZmZzZXQgPSA4OwotICAgICAgICBj
aGFyIGhlYWRlclt3ZWJwRXh0cmFNYXJrZXJdOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBj
b3B5RnJvbVNoYXJlZEJ1ZmZlcihoZWFkZXIsIHdlYnBFeHRyYU1hcmtlciwgZGF0YSwgd2VicEV4
dHJhTWFya2Vyb2Zmc2V0KTsKLSAgICAgICAgaWYgKGxlbmd0aCA+PSB3ZWJwRXh0cmFNYXJrZXIp
IHsKLSAgICAgICAgICAgIGlmICghbWVtY21wKGhlYWRlciwgIldFQlBWUCIsIHdlYnBFeHRyYU1h
cmtlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXRUJQSW1hZ2VEZWNvZGVyKGFscGhh
T3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgaWYgKG1hdGNoZXNXZWJQU2lnbmF0dXJlKGNvbnRlbnRzKSkKKyAgICAgICAgcmV0dXJuIG5l
dyBXRUJQSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bik7CiAjZW5kaWYKIAotICAgIC8vIEJNUAotICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiQk0i
LCAyKSA9PSAwKQorICAgIGlmIChtYXRjaGVzQk1QU2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAg
ICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKTsKIAotICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5dGUg
MCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgotICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUg
MCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KLSAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlx4MDBc
eDAwXHgwMVx4MDAiLCA0KSB8fCAhbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAyXHgwMCIs
IDQpKQorICAgIGlmIChtYXRjaGVzSUNPU2lnbmF0dXJlKGNvbnRlbnRzKSB8fCBtYXRjaGVzQ1VS
U2lnbmF0dXJlKGNvbnRlbnRzKSkKICAgICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIo
YWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAotICAgIC8vIEdpdmUg
dXAuIFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgogICAgIHJldHVybiAwOwog
fQogCkBAIC0xMjYsNyArMTUwLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9
KGNvbnN0CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkK
K3ZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fYmFja2luZ1N0b3Jl
LmNsZWFyKCk7CiAgICAgbV9ieXRlcyA9IDA7CkBAIC0xMzcsNyArMTYxLDcgQEAgdm9pZCBJbWFn
ZUZyYW1lOjpjbGVhcigpCiAgICAgLy8gbGF0ZXIuCiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6emVy
b0ZpbGwoKQordm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7CiAgICAgbWVt
c2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9m
KFBpeGVsRGF0YSkpOwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwpAQCAtMTcxLDggKzE5NSw3IEBA
IGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAgICBtX2J5dGVzID0g
bV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CiAKLSAgICAvLyBaZXJvIHRoZSBpbWFnZS4KLSAgICB6ZXJvRmlsbCgpOworICAg
IHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oCShyZXZpc2lvbiA3NzMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBGSVhNRTogRG8gd2Ugd2FudCBiZXR0ZXIgZW5jYXBz
dWxhdGlvbj8KICAgICB0eXBlZGVmIFZlY3RvcjxjaGFyPiBDb2xvclByb2ZpbGU7CiAKLSAgICAv
LyBUaGUgSW1hZ2VGcmFtZSBvYmplY3QgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRh
IGluIFJHQkEzMgotICAgIC8vIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsIGRlY29k
ZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uCi0gICAgLy8gRnJhbWVzIGFyZSB0aGVuIGlu
c3RhbnRpYXRlZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZmZXIuCisgICAg
Ly8gSW1hZ2VGcmFtZSByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEuICBUaGlzIGJ1
ZmZlciBpcyB3aGF0IGFsbAorICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGlu
dG8uCiAgICAgY2xhc3MgSW1hZ2VGcmFtZSB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIEZy
YW1lU3RhdHVzIHsgRnJhbWVFbXB0eSwgRnJhbWVQYXJ0aWFsLCBGcmFtZUNvbXBsZXRlIH07CkBA
IC03OSwxOSArNzgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBjcmVhdGUg
YSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBpbmNyZWFzZSB0aGUgcmVmIGNvdW50
LgogICAgICAgICBJbWFnZUZyYW1lJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIp
OwogCi0gICAgICAgIC8vIERlbGV0ZXMgdGhlIHBpeGVsIGRhdGEgZW50aXJlbHk7IHVzZWQgYnkg
SW1hZ2VEZWNvZGVyIHRvIHNhdmUgbWVtb3J5Ci0gICAgICAgIC8vIHdoZW4gd2Ugbm8gbG9uZ2Vy
IG5lZWQgdG8gZGlzcGxheSBhIGZyYW1lIGFuZCBvbmx5IG5lZWQgaXRzIG1ldGFkYXRhLgotICAg
ICAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICAgICAgLy8gWmVyb2VzIHRoZSBwaXhlbCBkYXRhIGlu
IHRoZSBidWZmZXIsIHNldHRpbmcgaXQgdG8gZnVsbHktdHJhbnNwYXJlbnQuCi0gICAgICAgIHZv
aWQgemVyb0ZpbGwoKTsKLQotICAgICAgICAvLyBDcmVhdGVzIGEgbmV3IGNvcHkgb2YgdGhlIGlt
YWdlIGRhdGEgaW4gfG90aGVyfCwgc28gdGhlIHR3byBpbWFnZXMKLSAgICAgICAgLy8gY2FuIGJl
IG1vZGlmaWVkIGluZGVwZW5kZW50bHkuICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvcHkgc3VjY2Vl
ZGVkLgorICAgICAgICAvLyBUaGVzZSBkbyBub3QgdG91Y2ggb3RoZXIgbWV0YWRhdGEsIG9ubHkg
dGhlIHJhdyBwaXhlbCBkYXRhLgorICAgICAgICB2b2lkIGNsZWFyUGl4ZWxEYXRhKCk7CisgICAg
ICAgIHZvaWQgemVyb0ZpbGxQaXhlbERhdGEoKTsKKworICAgICAgICAvLyBNYWtlcyB0aGlzIGZy
YW1lIGhhdmUgYW4gaW5kZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQgaW1hZ2UncworICAg
ICAgICAvLyBwaXhlbCBkYXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFy
ZSBub3QgcmVmbGVjdGVkIGluCisgICAgICAgIC8vIHRoZSBvdGhlci4gIFJldHVybnMgd2hldGhl
ciB0aGUgY29weSBzdWNjZWVkZWQuCiAgICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3Qg
SW1hZ2VGcmFtZSYpOwogCi0gICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgcmVmZXJlbmNlIHRvIHRo
ZSBpbWFnZSBkYXRhIGluIHxvdGhlcnwuICBUaGUgdHdvIGltYWdlcwotICAgICAgICAvLyBzaGFy
ZSBhIGNvbW1vbiBiYWNraW5nIHN0b3JlLgorICAgICAgICAvLyBNYWtlcyB0aGlzIGZyYW1lIHJl
ZmVyZW5jZSB0aGUgcHJvdmlkZWQgaW1hZ2UncyBwaXhlbCBkYXRhLCBzbyB0aGF0CisgICAgICAg
IC8vIG1vZGlmaWNhdGlvbnMgaW4gb25lIGZyYW1lIGFyZSByZWZsZWN0ZWQgaW4gdGhlIG90aGVy
LgogICAgICAgICB2b2lkIGNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFt
ZSYpOwogCiAgICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3Rh
cnRZKSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQpAQCAtMTEwLDE4ICsxMDcsMTcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgLy8gQWxsb2NhdGVzIHNwYWNlIGZv
ciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGl4ZWxzCi0gICAg
ICAgIC8vIGFyZSB3cml0dGVuLiBXaWxsIHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlm
IHRoZSBtZW1vcnkKLSAgICAgICAgLy8gYWxsb2NhdGlvbiBmYWlscy4gIENhbGxpbmcgdGhpcyBt
dWx0aXBsZSB0aW1lcyBpcyB1bmRlZmluZWQgYW5kIG1heQotICAgICAgICAvLyBsZWFrIG1lbW9y
eS4KKyAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBS
ZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgorICAgICAgICAvLyBzdWNjZWVkZWQuCiAgICAgICAg
IGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpOwogCi0gICAgICAgIC8v
IFRvIGJlIHVzZWQgYnkgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCgpLiAgUmV0dXJu
cyBhIHBvaW50ZXIKLSAgICAgICAgLy8gdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRh
dGEuICBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieQotICAgICAgICAvLyB0aGUgQml0bWFw
SW1hZ2UgYW5kIGZyZWVkIGluIEZyYW1lRGF0YTo6Y2xlYXIoKS4KKyAgICAgICAgLy8gUmV0dXJu
cyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBk
YXRhLgorICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQg
YnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCisgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIo
KSkuCiAgICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKIAog
ICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICAgICAgY29uc3QgSW50UmVjdCYgb3Jp
Z2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsRnJhbWVSZWN0OyB9CiAg
ICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAg
ICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQog
ICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQpAQCAtMTI5LDcgKzEyNSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwogICAgICAgICB2
b2lkIHNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2ZpbGUmKTsKLSAgICAgICAgdm9pZCBz
ZXRSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZWN0ID0gcjsgfQorICAgICAgICB2b2lkIHNl
dE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVj
dCA9IHI7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKTsKICAg
ICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0g
ZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2Fs
TWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CkBAIC0xOTIsMzUg
KzE4OCwyNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZWxzZQogICAgICAgICBOYXRpdmVCYWNr
aW5nU3RvcmUgbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8g
VGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUg
bV9zaXplOyAvLyBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAgVGhpcyBzaG91bGQgYmUgdGhlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIEltYWdlRGVjb2Rlcjo6bV9zaXplLgot
ICAgICAgICBib29sIG1faGFzQWxwaGE7IC8vIFdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUgcGl4
ZWxzIGluIHRoZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRyYW5z
cGFyZW5jeS4KKyAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIGJvb2wgbV9oYXNBbHBo
YTsKICAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogI2VuZGlmCi0gICAgICAg
IEludFJlY3QgbV9yZWN0OyAvLyBUaGUgcmVjdCBvZiB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGZy
YW1lIHdpdGhpbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG92ZXJhbGwgYnVmZmVy
LiAgVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUgb3ZlcmFs
bAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2Ugc2l6ZS4KLSAgICAgICAgRnJhbWVT
dGF0dXMgbV9zdGF0dXM7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgaXMgY29tcGxldGVs
eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluaXNoZWQgZGVjb2RpbmcuCi0g
ICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247IC8vIFRoZSBhbmltYXRpb24gZGVsYXkuCi0gICAg
ICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsgLy8gV2hhdCB0byBkbyB3
aXRoIHRoaXMgZnJhbWUncyBkYXRhIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCi0gICAgICAg
IGJvb2wgbV9wcmVtdWx0aXBseUFscGhhOyAvLyBXaGV0aGVyIHRvIHByZW11bHRpcGx5IGFscGhh
IGludG8gUiwgRywgQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbm5l
bHM7IGJ5IGRlZmF1bHQgaXQncyB0cnVlLgorICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFt
ZVJlY3Q7IC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1l
cyB3aG9zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFs
IHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBvdmVyYWxsIGltYWdlIHNpemUuCisgICAgICAgIEZyYW1lU3RhdHVzIG1fc3Rh
dHVzOworICAgICAgICB1bnNpZ25lZCBtX2R1cmF0aW9uOworICAgICAgICBGcmFtZURpc3Bvc2Fs
TWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7CisgICAgICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhh
OwogICAgIH07CiAKLSAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMgYSBi
YXNlIGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQKLSAgICAvLyBkZWNvZGVycyAoZS5n
LiwgR0lGLCBKUEcsIFBORywgSUNPKSB0byBkZXJpdmUgZnJvbS4gIEFsbCBkZWNvZGVycyBkZWNv
ZGUKLSAgICAvLyBpbnRvIFJHQkEzMiBmb3JtYXQgYW5kIHRoZSBiYXNlIGNsYXNzIG1hbmFnZXMg
dGhlIFJHQkEzMiBmcmFtZSBjYWNoZS4KKyAgICAvLyBJbWFnZURlY29kZXIgaXMgYSBiYXNlIGZv
ciBhbGwgZm9ybWF0LXNwZWNpZmljIGRlY29kZXJzCisgICAgLy8gKGUuZy4gSlBFR0ltYWdlRGVj
b2RlcikuICBUaGlzIGJhc2UgbWFuYWdlcyB0aGUgSW1hZ2VGcmFtZSBjYWNoZS4KICAgICAvLwot
ICAgIC8vIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpIGFsbG93cyBpbWFnZSBk
ZWNvZGVycyB0byB3cml0ZQotICAgIC8vIGRpcmVjdGx5IHRvIHNjYWxlZCBvdXRwdXQgYnVmZmVy
cyBieSBkb3duIHNhbXBsaW5nLiBDYWxsCi0gICAgLy8gc2V0TWF4TnVtUGl4ZWxzKCkgdG8gc3Bl
Y2lmeSB0aGUgYmlnZ2VzdCBzaXplIHRoYXQgZGVjb2RlZCBpbWFnZXMgY2FuCi0gICAgLy8gaGF2
ZS4gSW1hZ2UgZGVjb2RlcnMgd2lsbCBkZWZsYXRlIHRob3NlIGltYWdlcyB0aGF0IGFyZSBiaWdn
ZXIgdGhhbgotICAgIC8vIG1fbWF4TnVtUGl4ZWxzLiAoTm90IHN1cHBvcnRlZCBieSBhbGwgaW1h
Z2UgZGVjb2RlcnMgeWV0KQorICAgIC8vIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJ
TkcpIGFsbG93cyBpbWFnZSBkZWNvZGVycyB0byBkb3duc2FtcGxlCisgICAgLy8gYXQgZGVjb2Rl
IHRpbWUuICBJbWFnZSBkZWNvZGVycyB3aWxsIGRvd25zYW1wbGUgYW55IGltYWdlcyBsYXJnZXIg
dGhhbgorICAgIC8vIHxtX21heE51bVBpeGVsc3wuICBGSVhNRTogTm90IHlldCBzdXBwb3BydGVk
IGJ5IGFsbCBkZWNvZGVycy4KICAgICBjbGFzcyBJbWFnZURlY29kZXIgewogICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbWFnZURlY29kZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6CkBAIC0yMzEsMTkgKzIxOCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICAsIG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkKICAgICAgICAgICAgICwgbV9tYXhO
dW1QaXhlbHMoLTEpCiAgICAgICAgICAgICAsIG1faXNBbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCi0g
ICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgICwgbV9mYWlsZWQoZmFsc2UpIHsgfQogCi0gICAgICAgIHZpcnR1YWwgfkltYWdlRGVj
b2RlcigpIHt9CisgICAgICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlcigpIHsgfQogCi0gICAgICAg
IC8vIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIEltYWdlRGVjb2Rlci4gIFBvcnRzIHRo
YXQgc3ViY2xhc3MKLSAgICAgICAgLy8gSW1hZ2VEZWNvZGVyIGNhbiBwcm92aWRlIHRoZWlyIG93
biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHRvIGF2b2lkCi0gICAgICAgIC8vIG5lZWRpbmcgdG8g
d3JpdGUgYSBkZWRpY2F0ZWQgc2V0RGF0YSgpIGltcGxlbWVudGF0aW9uLgorICAgICAgICAvLyBS
ZXR1cm5zIGEgY2FsbGVyLW93bmVkIGRlY29kZXIgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuICBS
ZXR1cm5zIDAgaWYKKyAgICAgICAgLy8gd2UgY2FuJ3Qgc25pZmYgYSBzdXBwb3J0ZWQgdHlwZSBm
cm9tIHRoZSBwcm92aWRlZCBkYXRhIChwb3NzaWJseQorICAgICAgICAvLyBiZWNhdXNlIHRoZXJl
IGlzbid0IGVub3VnaCBkYXRhIHlldCkuCiAgICAgICAgIHN0YXRpYyBJbWFnZURlY29kZXIqIGNy
ZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiwg
SW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKIAotICAgICAgICAvLyBU
aGUgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRl
Y29kZWQgaW1hZ2UKLSAgICAgICAgLy8gb2YgdGhpcyB0eXBlLgogICAgICAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0ID0gMDsKIAogICAgICAgICBib29sIGlzQWxs
RGF0YVJlY2VpdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0FsbERhdGFSZWNlaXZlZDsgfQpAQCAt
MjU2LDQxICsyMzksMzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgbV9pc0Fs
bERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKICAgICAgICAgfQogCi0gICAgICAgIC8v
IFdoZXRoZXIgb3Igbm90IHRoZSBzaXplIGluZm9ybWF0aW9uIGhhcyBiZWVuIGRlY29kZWQgeWV0
LiBUaGlzCi0gICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRy
dWUgaWYgdGhlIHNpemUgaGFzIGJlZW4gc2V0IGFuZAotICAgICAgICAvLyB3ZSBoYXZlIG5vdCBz
ZWVuIGEgZmFpbHVyZS4gRGVjb2RlcnMgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyB0bwotICAg
ICAgICAvLyBsYXppbHkgZGVjb2RlIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBzaXpl
LgorICAgICAgICAvLyBMYXppbHktZGVjb2RlcyBlbm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0
aGUgc2l6ZSAoaWYgcG9zc2libGUpLgorICAgICAgICAvLyBGSVhNRTogUmlnaHQgbm93IHRoYXQg
aGFzIHRvIGJlIGRvbmUgYnkgZWFjaCBzdWJjbGFzczsgZmFjdG9yIHRoZQorICAgICAgICAvLyBk
ZWNvZGUgY2FsbCBvdXQgYW5kIHVzZSBpdCBoZXJlLgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFtX2ZhaWxlZCAm
JiBtX3NpemVBdmFpbGFibGU7IAorICAgICAgICAgICAgcmV0dXJuICFtX2ZhaWxlZCAmJiBtX3Np
emVBdmFpbGFibGU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9m
IHRoZSBpbWFnZS4KLSAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplOwotICAgICAgICB9CisgICAgICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICAgICAgSW50
U2l6ZSBzY2FsZWRTaXplKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1f
c2NhbGVkID8gSW50U2l6ZShtX3NjYWxlZENvbHVtbnMuc2l6ZSgpLCBtX3NjYWxlZFJvd3Muc2l6
ZSgpKSA6IHNpemUoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFJldHVybnMgdGhlIHNpemUg
b2YgZnJhbWUgfGluZGV4fC4gIFRoaXMgd2lsbCBvbmx5IGRpZmZlciBmcm9tIHNpemUoKQotICAg
ICAgICAvLyBmb3IgZm9ybWF0cyB3aGVyZSBkaWZmZXJlbnQgZnJhbWVzIGFyZSBkaWZmZXJlbnQg
c2l6ZXMgKG5hbWVseSBJQ08sCi0gICAgICAgIC8vIHdoZXJlIGVhY2ggZnJhbWUgcmVwcmVzZW50
cyBhIGRpZmZlcmVudCBpY29uIHdpdGhpbiB0aGUgbWFzdGVyIGZpbGUpLgotICAgICAgICAvLyBO
b3RhYmx5LCB0aGlzIGRvZXMgbm90IHJldHVybiBkaWZmZXJlbnQgc2l6ZXMgZm9yIGRpZmZlcmVu
dCBHSUYKLSAgICAgICAgLy8gZnJhbWVzLCBzaW5jZSB3aGlsZSB0aGVzZSBtYXkgYmUgc3RvcmVk
IGFzIHNtYWxsZXIgcmVjdGFuZ2xlcywgZHVyaW5nCi0gICAgICAgIC8vIGRlY29kaW5nIHRoZXkg
YXJlIGNvbXBvc2l0ZWQgdG8gY3JlYXRlIGEgZnVsbC1zaXplIGZyYW1lLgorICAgICAgICAvLyBU
aGlzIHdpbGwgb25seSBkaWZmZXIgZnJvbSBzaXplKCkgZm9yIElDTyAod2hlcmUgZWFjaCBmcmFt
ZSBpcyBhCisgICAgICAgIC8vIGRpZmZlcmVudCBpY29uKSBvciBvdGhlciBmb3JtYXRzIHdoZXJl
IGRpZmZlcmVudCBmcmFtZXMgYXJlIGRpZmZlcmVudAorICAgICAgICAvLyBzaXplcy4gIFRoaXMg
ZG9lcyBOT1QgZGlmZmVyIGZyb20gc2l6ZSgpIGZvciBHSUYsIHNpbmNlIGRlY29kaW5nIEdJRnMK
KyAgICAgICAgLy8gY29tcG9zaXRlcyBhbnkgc21hbGxlciBmcmFtZXMgYWdhaW5zdCBwcmV2aW91
cyBmcmFtZXMgdG8gY3JlYXRlIGZ1bGwtCisgICAgICAgIC8vIHNpemUgZnJhbWVzLgogICAgICAg
ICB2aXJ0dWFsIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBzaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBD
YWxsZWQgYnkgdGhlIGltYWdlIGRlY29kZXJzIHRvIHNldCB0aGVpciBkZWNvZGVkIHNpemUsIHRo
aXMgYWxzbwotICAgICAgICAvLyBjaGVja3MgdGhlIHNpemUgZm9yIHZhbGlkaXR5LiBJdCB3aWxs
IHJldHVybiB0cnVlIGlmIHRoZSBzaXplIHdhcwotICAgICAgICAvLyBzZXQsIG9yIGZhbHNlIGlm
IHRoZXJlIGlzIGFuIGVycm9yLiBPbiBlcnJvciwgdGhlIG1fZmFpbGVkIGZsYWcgd2lsbAotICAg
ICAgICAvLyBiZSBzZXQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgZGVj
b2RpbmcuCisgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5l
LiBub3QgZ29pbmcgdG8gcmVzdWx0IGluCisgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSku
ICBJZiBub3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KICAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCkBAIC0zMDAsMjYgKzI3NSwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIGZvciB0aGUgaW1h
Z2UuICBDbGFzc2VzIHRoYXQgc3VwcG9ydAotICAgICAgICAvLyBtdWx0aXBsZSBmcmFtZXMgd2ls
bCBzY2FuIHRoZSBpbWFnZSBkYXRhIGZvciB0aGUgYW5zd2VyIGlmIHRoZXkgbmVlZAotICAgICAg
ICAvLyB0byAod2l0aG91dCBuZWNlc3NhcmlseSBkZWNvZGluZyBhbGwgb2YgdGhlIGluZGl2aWR1
YWwgZnJhbWVzKS4KKyAgICAgICAgLy8gTGF6aWx5LWRlY29kZXMgZW5vdWdoIG9mIHRoZSBpbWFn
ZSB0byBnZXQgdGhlIGZyYW1lIGNvdW50IChpZgorICAgICAgICAvLyBwb3NzaWJsZSksIHdpdGhv
dXQgZGVjb2RpbmcgdGhlIGluZGl2aWR1YWwgZnJhbWVzLgorICAgICAgICAvLyBGSVhNRTogUmln
aHQgbm93IHRoYXQgaGFzIHRvIGJlIGRvbmUgYnkgZWFjaCBzdWJjbGFzczsgZmFjdG9yIHRoZQor
ICAgICAgICAvLyBkZWNvZGUgY2FsbCBvdXQgYW5kIHVzZSBpdCBoZXJlLgogICAgICAgICB2aXJ0
dWFsIHNpemVfdCBmcmFtZUNvdW50KCkgeyByZXR1cm4gMTsgfQogCi0gICAgICAgIC8vIFRoZSBu
dW1iZXIgb2YgcmVwZXRpdGlvbnMgdG8gcGVyZm9ybSBmb3IgYW4gYW5pbWF0aW9uIGxvb3AuCiAg
ICAgICAgIHZpcnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIGNBbmlt
YXRpb25Ob25lOyB9CiAKLSAgICAgICAgLy8gQ2FsbGVkIHRvIG9idGFpbiB0aGUgSW1hZ2VGcmFt
ZSBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVuZGVyaW5nLgotICAgICAgICAvLyBUaGUgZGVj
b2RlciBwbHVnaW4gd2lsbCBkZWNvZGUgYXMgbXVjaCBvZiB0aGUgZnJhbWUgYXMgaXQgY2FuIGJl
Zm9yZQotICAgICAgICAvLyBoYW5kaW5nIGJhY2sgdGhlIGJ1ZmZlci4KKyAgICAgICAgLy8gRGVj
b2RlcyBhcyBtdWNoIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUgYXMgcG9zc2libGUsIGFuZCByZXR1
cm5zIGFuCisgICAgICAgIC8vIEltYWdlRGVjb2Rlci1vd25lZCBwb2ludGVyLgogICAgICAgICB2
aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpID0gMDsKIAotICAg
ICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgdW5kZXJseWluZyBpbWFnZSBmb3JtYXQgZXZlbiBz
dXBwb3J0cyBhbHBoYQotICAgICAgICAvLyB0cmFuc3BhcmVuY3kuCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgICAgIHZv
aWQgc2V0SWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUoYm9vbCBmbGFnKSB7IG1faWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUgPSBmbGFnOyB9Ci0KLSAgICAgICAgLy8gV2hldGhlciBvciBub3Qg
dGhlIGdhbW1hIGFuZCBjb2xvciBwcm9maWxlIGFyZSBhcHBsaWVkLgogICAgICAgICBib29sIGln
bm9yZXNHYW1tYUFuZENvbG9yUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlR2FtbWFB
bmRDb2xvclByb2ZpbGU7IH0KIAogICAgICAgICAvLyBTZXRzIHRoZSAiZGVjb2RlIGZhaWx1cmUi
IGZsYWcuICBGb3IgY2FsbGVyIGNvbnZlbmllbmNlIChzaW5jZSBzbwpAQCAtMzM0LDEzICszMDIs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgZmFpbGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9mYWlsZWQ7IH0KIAotICAgICAgICAvLyBXaXBlIG91dCBmcmFtZXMgaW4gdGhl
IGZyYW1lIGJ1ZmZlciBjYWNoZSBiZWZvcmUgfGNsZWFyQmVmb3JlRnJhbWV8LAotICAgICAgICAv
LyBhc3N1bWluZyB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQgYnJlYWtpbmcgZGVjb2RpbmcuICBE
aWZmZXJlbnQKLSAgICAgICAgLy8gZGVjb2RlcnMgcGxhY2UgZGlmZmVyZW50IHJlc3RyaWN0aW9u
cyBvbiB3aGF0IGZyYW1lcyBhcmUgc2FmZSB0bwotICAgICAgICAvLyBkZXN0cm95LCBzbyB0aGlz
IGlzIGxlZnQgdG8gdGhlbSB0byBpbXBsZW1lbnQuCi0gICAgICAgIC8vIEZvciBjb252ZW5pZW5j
ZSdzIHNha2UsIHdlIHByb3ZpZGUgYSBkZWZhdWx0IChlbXB0eSkgaW1wbGVtZW50YXRpb24sCi0g
ICAgICAgIC8vIHNpbmNlIGluIHByYWN0aWNlIG9ubHkgR0lGcyB3aWxsIGV2ZXIgdXNlIHRoaXMu
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFy
QmVmb3JlRnJhbWUpIHsgfQorICAgICAgICAvLyBDbGVhcnMgZGVjb2RlZCBwaXhlbCBkYXRhIGZy
b20gYmVmb3JlIHRoZSBwcm92aWRlZCBmcmFtZSB1bmxlc3MgdGhhdAorICAgICAgICAvLyBkYXRh
IG1heSBiZSBuZWVkZWQgdG8gZGVjb2RlIGZ1dHVyZSBmcmFtZXMgKGUuZy4gZHVlIHRvIEdJRiBm
cmFtZQorICAgICAgICAvLyBjb21wb3NpdGluZykuCisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KSB7IH0KIAogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCiAgICAgICAgIHZvaWQgc2V0TWF4TnVtUGl4ZWxzKGludCBtKSB7IG1f
bWF4TnVtUGl4ZWxzID0gbTsgfQpAQCAtMzY4LDggKzMzMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92
ZXJmbG93LgogICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIHdpZHRoICogaGVpZ2h0
IG11c3Qgbm90IGV4Y2VlZCAoMiBeIDI5KSAtIDEsIHNvIHRoYXQgd2UgZG9uJ3QKLSAgICAgICAg
ICAgIC8vIG92ZXJmbG93IHdoZW4gd2UgbXVsdGlwbHkgYnkgNC4KICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
Pih3aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJu
IHRvdGFsX3NpemUgPiAoKDEgPDwgMjkpIC0gMSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRl
ci5jcHAJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA3LDcg
KzcwNyw3IEBAIEJNUEltYWdlUmVhZGVyOjpQcm9jZXNzaW5nUmVzdWx0IEJNUEltYWcKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtX3NlZW5Ob25aZXJvQWxw
aGFQaXhlbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NlZW5aZXJvQWxwaGFQ
aXhlbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXItPnplcm9GaWxsKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+emVyb0ZpbGxQaXhlbERhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc2Vlblplcm9BbHBoYVBpeGVsID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWxwaGEgIT0gMjU1KQogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKHRydWUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVj
b2RlckNHLmNwcAkocmV2aXNpb24gNzczMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcy
LDcgKzcyLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaQogICAg
IG1fYnl0ZXMgPSByZWludGVycHJldF9jYXN0PFBpeGVsRGF0YSo+KENGRGF0YUdldE11dGFibGVC
eXRlUHRyKG1fYmFja2luZ1N0b3JlLmdldCgpKSk7CiAgICAgbV9zaXplID0gSW50U2l6ZShuZXdX
aWR0aCwgbmV3SGVpZ2h0KTsKIAotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0ZpbGxQaXhlbERh
dGEoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwx
NCArMTc0LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2EKICAg
ICBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGkoZW5kKTsKICAgICBmb3IgKDsgKGkgIT0g
bV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpICYmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlz
cG9zZU92ZXJ3cml0ZVByZXZpb3VzKSk7IC0taSkgewogICAgICAgICBpZiAoKGktPnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpICYmIChpICE9IGVuZCkpCi0gICAgICAgICAg
ICBpLT5jbGVhcigpOworICAgICAgICAgICAgaS0+Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiAK
ICAgICAvLyBOb3cgfGl8IGhvbGRzIHRoZSBsYXN0IGZyYW1lIHdlIG5lZWQgdG8gcHJlc2VydmU7
IGNsZWFyIHByaW9yIGZyYW1lcy4KICAgICBmb3IgKFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0
b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CiAgICAgICAg
IEFTU0VSVChqLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwogICAgICAg
ICBpZiAoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKLSAgICAgICAgICAg
IGotPmNsZWFyKCk7CisgICAgICAgICAgICBqLT5jbGVhclBpeGVsRGF0YSgpOwogICAgIH0KIH0K
IApAQCAtMjY2LDcgKzI2Niw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KHVuc2kKICAgICBpZiAoIW1fY3VycmVudEJ1ZmZlclNhd0FscGhhKSB7CiAgICAgICAgIC8vIFRo
ZSB3aG9sZSBmcmFtZSB3YXMgbm9uLXRyYW5zcGFyZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQg
dGhlIGVudGlyZQogICAgICAgICAvLyByZXN1bHRpbmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJl
bnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFsc2UpLgotICAgICAgICBpZiAoYnVmZmVyLnJl
Y3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAg
ICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2lu
dCgpLCBzY2FsZWRTaXplKCkpKSkKICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxz
ZSk7CiAgICAgICAgIGVsc2UgaWYgKGZyYW1lSW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRyaWNr
eSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkgaWYgZXZlcnl3aGVy
ZQpAQCAtMjg5LDcgKzI4OSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KHVuc2kKICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyBjYXNlIGlzIGEgRGlzcG9z
ZU92ZXJ3cml0ZUJnY29sb3IgZnJhbWUuICBJZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFs
cGhhLCBhbmQgaXRzIHJlY3QgaXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAg
ICAgICAgICAgIC8vIHJlY3QsIHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhh
LgotICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdl
RnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEo
KSAmJiBidWZmZXIucmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3QoKSkpCisgICAgICAg
ICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlz
cG9zZU92ZXJ3cml0ZUJnY29sb3IpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZl
ci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVS
ZWN0KCkpKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zMzcsNyArMzM3LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6Omlu
aXRGcmFtZUJ1ZmZlcih1bgogICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1l
UmVjdC5yaWdodCgpLCBsZWZ0KTsKICAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJh
bWVSZWN0LnkoKSk7CiAgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVj
dC5ib3R0b20oKSwgdG9wKTsKLSAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3As
IHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CisgICAgYnVmZmVyLT5zZXRPcmlnaW5hbEZy
YW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsK
ICAgICAKICAgICBpZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmly
c3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgpAQCAt
MzY3LDcgKzM2Nyw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4K
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHBy
ZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZl
Y3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAg
ICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+cmVjdCgpOworICAgICAg
ICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1l
UmVjdCgpOwogICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNp
emUoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJ
bnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8g
Q2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9s
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc3MzM0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwogICAgICAg
ICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4g
IEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5
LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIEpQ
RUdJbWFnZVJlYWRlciEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0LmNwcAkocmV2aXNpb24gNzczMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1l
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNCArNTAsMTQgQEAgSW1hZ2VGcmFtZSYgSW1h
Z2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0CiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGNv
cHlCaXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CisgICAgc2V0
T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CiAgICAgc2V0U3Rh
dHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsK
ICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQordm9pZCBJbWFnZUZyYW1l
OjpjbGVhclBpeGVsRGF0YSgpCiB7CiAgICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7CiAgICAgbV9p
bWFnZSA9IFFJbWFnZSgpOwpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFy
KCkKICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KIH0KIAot
dm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCit2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4
ZWxEYXRhKCkKIHsKICAgICBpZiAobV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxs
KCkpIHsKICAgICAgICAgbV9waXhtYXAgPSBRUGl4bWFwKG1faW1hZ2Uud2lkdGgoKSwgbV9pbWFn
ZS5oZWlnaHQoKSk7CkBAIC0xMDEsOCArMTAxLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXpl
KGludCBuZXdXaWR0aCwgaQogICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgLy8gWmVybyB0aGUgaW1hZ2UuCi0gICAgemVyb0ZpbGwoKTsKKyAg
ICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpv
cGVyYXRvcj0oY29uc3QKICAgICAvLyBLZWVwIHRoZSBwaXhlbHMgbG9ja2VkIHNpbmNlIHdlIHdp
bGwgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIHRoZQogICAgIC8vIGJpdG1hcCB0aHJvdWdob3V0
IHRoaXMgb2JqZWN0J3MgbGlmZXRpbWUuCiAgICAgbV9iaXRtYXAubG9ja1BpeGVscygpOwotICAg
IHNldFJlY3Qob3RoZXIucmVjdCgpKTsKKyAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5v
cmlnaW5hbEZyYW1lUmVjdCgpKTsKICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAg
IHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwogICAgIHNldERpc3Bvc2FsTWV0aG9kKG90
aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwpAQCAtNTYsNyArNTYsNyBAQCBJbWFnZUZyYW1lJiBJbWFn
ZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXZvaWQgSW1h
Z2VGcmFtZTo6Y2xlYXIoKQordm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7CiAg
ICAgbV9iaXRtYXAucmVzZXQoKTsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CkBAIC02Niw3
ICs2Niw3IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQogICAgIC8vIG90aGVyIG1ldGFkYXRh
IG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgogfQogCi12b2lkIEltYWdlRnJhbWU6Onplcm9GaWxs
KCkKK3ZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewogICAgIG1fYml0bWFw
LmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKIH0KQEAgLTkwLDggKzkwLDcgQEAgYm9vbCBJbWFnZUZy
YW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaQogICAgIGlmICghbV9iaXRtYXAuYWxsb2NQaXhl
bHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gWmVybyB0aGUgaW1hZ2UuCi0g
ICAgemVyb0ZpbGwoKTsKKyAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJw
L1dFQlBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNzczMzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFn
ZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAidnA4Ijsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKICAgICB2aXJ0dWFsIEltYWdl
RnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKICAg
ICAvLyBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2YgZGVjb2RpbmcgZmFpbHVyZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80964</attachid>
            <date>2011-02-02 13:50:00 -0800</date>
            <delta_ts>2011-02-02 14:17:40 -0800</delta_ts>
            <desc>Larger patch v2.1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>29719</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NDAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDItMDIgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIEltYWdlRGVjb2RlcidzIGNvbW1lbnRzIChy
ZW1vdmUvdHJpbS9jbGFyaWZ5KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUzNDU1CisKKyAgICAgICAgVGhpcyBhbHNvIHJlbmFtZXMgb3IgZWxpbWlu
YXRlcyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgZm9yIGNsYXJpdHksIGFuZAorICAgICAgICBzd2l0
Y2hlcyBhIGNvdXBsZSBlcnJvbmVvdXMgc3RybmNtcCgpIGNhbGxzIHRvIG1lbWNtcCgpLgorCisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNp
emUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldElnbm9yZUdhbW1hQW5k
Q29sb3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6
ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6Y2xlYXJQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVy
b0ZpbGxQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJw
L1dFQlBJbWFnZURlY29kZXIuaDoKKwogMjAxMS0wMi0wMiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgRW5jb2RlL2RlY29kZSBGb3JtRGF0YSBhbmQgRm9ybURhdGFF
bGVtZW50IG9iamVjdHMgY29uc2lzdGVudGx5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB1bnNpZ25lZCBjb3B5RnJv
bVNoYXJlZEJ1ZmZlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
U2hhcmVkQnVmZmVyJiBzaGFyZWRCdWZmZXIsIHVuc2lnbmVkIG9mZnNldCkKK25hbWVzcGFjZSB7
CisKK3Vuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQg
YnVmZmVyTGVuZ3RoLCBjb25zdCBTaGFyZWRCdWZmZXImIHNoYXJlZEJ1ZmZlciwgdW5zaWduZWQg
b2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGJ5dGVzRXh0cmFjdGVkID0gMDsKICAgICBjb25zdCBj
aGFyKiBtb3JlRGF0YTsKQEAgLTUzLDUxICs1NSw3MyBAQCBzdGF0aWMgdW5zaWduZWQgY29weUZy
b21TaGFyZWRCdWZmZXIoY2hhCiAgICAgcmV0dXJuIGJ5dGVzRXh0cmFjdGVkOwogfQogCitib29s
IG1hdGNoZXNHSUZTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1j
bXAoY29udGVudHMsICJHSUY4IiwgNCk7Cit9CisKK2Jvb2wgbWF0Y2hlc1BOR1NpZ25hdHVyZShj
aGFyKiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIlx4ODlceDUw
XHg0RVx4NDciLCA0KTsKK30KKworYm9vbCBtYXRjaGVzSlBFR1NpZ25hdHVyZShjaGFyKiBjb250
ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIlx4RkZceEQ4XHhGRiIsIDMp
OworfQorCisjaWYgVVNFKFdFQlApCitib29sIG1hdGNoZXNXZWJQU2lnbmF0dXJlKGNoYXIqIGNv
bnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiUklGRiIsIDQpICYmICFt
ZW1jbXAoY29udGVudHMgKyA4LCAiV0VCUFZQIiwgNik7Cit9CisjZW5kaWYKKworYm9vbCBtYXRj
aGVzQk1QU2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNv
bnRlbnRzLCAiQk0iLCAyKTsKK30KKworYm9vbCBtYXRjaGVzSUNPU2lnbmF0dXJlKGNoYXIqIGNv
bnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAxXHgw
MCIsIDQpOworfQorCitib29sIG1hdGNoZXNDVVJTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7
CisgICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDJceDAwIiwgNCk7Cit9
CisKK30KKwogSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRC
dWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKQogewotICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdo
YXQga2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nCi0gICAgLy8gd2l0aC4KLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4TWFya2VyTGVuZ3RoID0gNDsKLSAgICBjaGFyIGNvbnRlbnRzW21h
eE1hcmtlckxlbmd0aF07Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRCdWZm
ZXIoY29udGVudHMsIG1heE1hcmtlckxlbmd0aCwgZGF0YSwgMCk7Ci0gICAgaWYgKGxlbmd0aCA8
IG1heE1hcmtlckxlbmd0aCkKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGVuZ3RoT2ZMb25n
ZXN0U2lnbmF0dXJlID0gMTQ7IC8vIFRvIHdpdDogIlJJRkY/Pz8/V0VCUFZQIgorICAgIGNoYXIg
Y29udGVudHNbbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlXTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJl
LCBkYXRhLCAwKTsKKyAgICBpZiAobGVuZ3RoIDwgbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlKQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEdJRnMgYmVnaW4gd2l0aCBHSUY4KDcgb3IgOSku
Ci0gICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCkgPT0gMCkKKyAgICBpZiAobWF0
Y2hlc0dJRlNpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VE
ZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAv
LyBUZXN0IGZvciBQTkcuCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVc
eDQ3IiwgNCkpCisgICAgaWYgKG1hdGNoZXNQTkdTaWduYXR1cmUoY29udGVudHMpKQogICAgICAg
ICByZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24pOwogCi0gICAgLy8gSlBFRwotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAi
XHhGRlx4RDhceEZGIiwgMykpCisgICAgaWYgKG1hdGNoZXNKUEVHU2lnbmF0dXJlKGNvbnRlbnRz
KSkKICAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKICNpZiBVU0UoV0VCUCkKLSAgICBpZiAoIW1lbWNt
cChjb250ZW50cywgIlJJRkYiLCA0KSkgewotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
d2VicEV4dHJhTWFya2VyID0gNjsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdlYnBF
eHRyYU1hcmtlcm9mZnNldCA9IDg7Ci0gICAgICAgIGNoYXIgaGVhZGVyW3dlYnBFeHRyYU1hcmtl
cl07Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGhlYWRl
ciwgd2VicEV4dHJhTWFya2VyLCBkYXRhLCB3ZWJwRXh0cmFNYXJrZXJvZmZzZXQpOwotICAgICAg
ICBpZiAobGVuZ3RoID49IHdlYnBFeHRyYU1hcmtlcikgewotICAgICAgICAgICAgaWYgKCFtZW1j
bXAoaGVhZGVyLCAiV0VCUFZQIiwgd2VicEV4dHJhTWFya2VyKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IFdFQlBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobWF0Y2hlc1dlYlBTaWduYXR1
cmUoY29udGVudHMpKQorICAgICAgICByZXR1cm4gbmV3IFdFQlBJbWFnZURlY29kZXIoYWxwaGFP
cHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbmRpZgogCi0gICAgLy8gQk1Q
Ci0gICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgaWYgKG1hdGNo
ZXNCTVBTaWduYXR1cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVj
b2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogCi0gICAgLy8g
SUNPcyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEu
Ci0gICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDItYnl0ZSAyLgot
ICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAxXHgwMCIsIDQpIHx8ICFtZW1j
bXAoY29udGVudHMsICJceDAwXHgwMFx4MDJceDAwIiwgNCkpCisgICAgaWYgKG1hdGNoZXNJQ09T
aWduYXR1cmUoY29udGVudHMpIHx8IG1hdGNoZXNDVVJTaWduYXR1cmUoY29udGVudHMpKQogICAg
ICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pOwogCi0gICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRo
ZSBoZWNrIHRoaXMgaXMuCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEyNiw3ICsxNTAsNyBAQCBJ
bWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQordm9pZCBJbWFnZUZyYW1lOjpjbGVhclBp
eGVsRGF0YSgpCiB7CiAgICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKICAgICBtX2J5dGVzID0g
MDsKQEAgLTEzNyw3ICsxNjEsNyBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKICAgICAvLyBs
YXRlci4KIH0KIAotdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCit2b2lkIEltYWdlRnJhbWU6
Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsKICAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndp
ZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CiAgICAgbV9oYXNB
bHBoYSA9IHRydWU7CkBAIC0xNzEsOCArMTk1LDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXpl
KGludCBuZXdXaWR0aCwgaQogICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAg
ICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKIAotICAgIC8vIFplcm8g
dGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc3MzM0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDkgKzQ5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8v
IEZJWE1FOiBEbyB3ZSB3YW50IGJldHRlciBlbmNhcHN1bGF0aW9uPwogICAgIHR5cGVkZWYgVmVj
dG9yPGNoYXI+IENvbG9yUHJvZmlsZTsKIAotICAgIC8vIFRoZSBJbWFnZUZyYW1lIG9iamVjdCBy
ZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyCi0gICAgLy8gZm9ybWF0
LiAgVGhpcyBidWZmZXIgaXMgd2hhdCBhbGwgZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUg
aW50by4KLSAgICAvLyBGcmFtZXMgYXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5
IGJlaW5nIGhhbmRlZCB0aGlzIGJ1ZmZlci4KKyAgICAvLyBJbWFnZUZyYW1lIHJlcHJlc2VudHMg
dGhlIGRlY29kZWQgaW1hZ2UgZGF0YS4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCisgICAgLy8g
ZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4KICAgICBjbGFzcyBJbWFnZUZyYW1l
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBG
cmFtZVBhcnRpYWwsIEZyYW1lQ29tcGxldGUgfTsKQEAgLTc5LDE5ICs3OCwxNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBpbWFnZSBk
YXRhLCBvbmx5IGluY3JlYXNlIHRoZSByZWYgY291bnQuCiAgICAgICAgIEltYWdlRnJhbWUmIG9w
ZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcik7CiAKLSAgICAgICAgLy8gRGVsZXRlcyB0
aGUgcGl4ZWwgZGF0YSBlbnRpcmVseTsgdXNlZCBieSBJbWFnZURlY29kZXIgdG8gc2F2ZSBtZW1v
cnkKLSAgICAgICAgLy8gd2hlbiB3ZSBubyBsb25nZXIgbmVlZCB0byBkaXNwbGF5IGEgZnJhbWUg
YW5kIG9ubHkgbmVlZCBpdHMgbWV0YWRhdGEuCi0gICAgICAgIHZvaWQgY2xlYXIoKTsKLQotICAg
ICAgICAvLyBaZXJvZXMgdGhlIHBpeGVsIGRhdGEgaW4gdGhlIGJ1ZmZlciwgc2V0dGluZyBpdCB0
byBmdWxseS10cmFuc3BhcmVudC4KLSAgICAgICAgdm9pZCB6ZXJvRmlsbCgpOwotCi0gICAgICAg
IC8vIENyZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSBpbiB8b3RoZXJ8LCBzbyB0
aGUgdHdvIGltYWdlcwotICAgICAgICAvLyBjYW4gYmUgbW9kaWZpZWQgaW5kZXBlbmRlbnRseS4g
IFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNjZWVkZWQuCisgICAgICAgIC8vIFRoZXNlIGRv
IG5vdCB0b3VjaCBvdGhlciBtZXRhZGF0YSwgb25seSB0aGUgcmF3IHBpeGVsIGRhdGEuCisgICAg
ICAgIHZvaWQgY2xlYXJQaXhlbERhdGEoKTsKKyAgICAgICAgdm9pZCB6ZXJvRmlsbFBpeGVsRGF0
YSgpOworCisgICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBj
b3B5IG9mIHRoZSBwcm92aWRlZCBpbWFnZSdzCisgICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRo
YXQgbW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KKyAgICAg
ICAgLy8gdGhlIG90aGVyLiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KICAg
ICAgICAgYm9vbCBjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7CiAKLSAgICAgICAg
Ly8gQ3JlYXRlcyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGltYWdlIGRhdGEgaW4gfG90aGVyfC4g
IFRoZSB0d28gaW1hZ2VzCi0gICAgICAgIC8vIHNoYXJlIGEgY29tbW9uIGJhY2tpbmcgc3RvcmUu
CisgICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgcmVmZXJlbmNlIHRoZSBwcm92aWRlZCBpbWFn
ZSdzIHBpeGVsIGRhdGEsIHNvIHRoYXQKKyAgICAgICAgLy8gbW9kaWZpY2F0aW9ucyBpbiBvbmUg
ZnJhbWUgYXJlIHJlZmxlY3RlZCBpbiB0aGUgb3RoZXIuCiAgICAgICAgIHZvaWQgY29weVJlZmVy
ZW5jZVRvQml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7CiAKICAgICAgICAgLy8gQ29waWVz
IHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8g
dGhlCkBAIC0xMTAsMTggKzEwNywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKLSAgICAgICAgLy8gYXJlIHdyaXR0ZW4uIFdpbGwg
cmV0dXJuIHRydWUgb24gc3VjY2VzcywgZmFsc2UgaWYgdGhlIG1lbW9yeQotICAgICAgICAvLyBh
bGxvY2F0aW9uIGZhaWxzLiAgQ2FsbGluZyB0aGlzIG11bHRpcGxlIHRpbWVzIGlzIHVuZGVmaW5l
ZCBhbmQgbWF5Ci0gICAgICAgIC8vIGxlYWsgbWVtb3J5LgorICAgICAgICAvLyBhcmUgd3JpdHRl
bi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0aW9u
CisgICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCk7CiAKLSAgICAgICAgLy8gVG8gYmUgdXNlZCBieSBJbWFnZVNvdXJj
ZTo6Y3JlYXRlRnJhbWVBdEluZGV4KCkuICBSZXR1cm5zIGEgcG9pbnRlcgotICAgICAgICAvLyB0
byB0aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4gIFRoaXMgcG9pbnRlciB3aWxsIGJl
IG93bmVkIGJ5Ci0gICAgICAgIC8vIHRoZSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4gRnJhbWVE
YXRhOjpjbGVhcigpLgorICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIg
dG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCisgICAgICAgIC8vIChBY3R1YWwg
dXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQg
aW4KKyAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KICAgICAgICAgTmF0aXZlSW1hZ2VQ
dHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBj
b25zdDsKLSAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgICAgICBjb25zdCBJbnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CkBA
IC0xMjksNyArMTI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0
SGFzQWxwaGEoYm9vbCBhbHBoYSk7CiAgICAgICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0
IENvbG9yUHJvZmlsZSYpOwotICAgICAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcikg
eyBtX3JlY3QgPSByOyB9CisgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAgICB2b2lkIHNl
dFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVu
c2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lk
IHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9z
YWxNZXRob2QgPSBtZXRob2Q7IH0KQEAgLTE5MiwzNSArMTg4LDI2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNlbHNlCiAgICAgICAgIE5hdGl2ZUJhY2tpbmdTdG9yZSBtX2JhY2tpbmdTdG9yZTsK
ICAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBt
X2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXplIG9mIHRo
ZSBidWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNhbWUgYXMgSW1hZ2VEZWNvZGVyOjptX3NpemUuCi0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsg
Ly8gV2hldGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlcgotICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdHJhbnNwYXJlbmN5LgorICAgICAgICBJbnRTaXpl
IG1fc2l6ZTsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgICAgICBDb2xvclByb2ZpbGUg
bV9jb2xvclByb2ZpbGU7CiAjZW5kaWYKLSAgICAgICAgSW50UmVjdCBtX3JlY3Q7IC8vIFRoZSBy
ZWN0IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgb3ZlcmFsbCBidWZmZXIuICBUaGlzIHdpbGwgYWx3YXlzIGp1c3Qg
YmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBm
b3IgR0lGIGZyYW1lcyB3aG9zZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwg
cmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpbWFnZSBzaXplLgotICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhl
ciBvciBub3QgdGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmaW5pc2hlZCBkZWNvZGluZy4KLSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlv
bjsgLy8gVGhlIGFuaW1hdGlvbiBkZWxheS4KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBt
X2Rpc3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hl
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRp
YWxpemluZyB0aGUgbmV4dCBmcmFtZS4KLSAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7
IC8vIFdoZXRoZXIgdG8gcHJlbXVsdGlwbHkgYWxwaGEgaW50byBSLCBHLCBCCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFubmVsczsgYnkgZGVmYXVsdCBpdCdzIHRydWUu
CisgICAgICAgIEludFJlY3QgbV9vcmlnaW5hbEZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5
cyBqdXN0IGJlIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRo
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJhbGwgaW1hZ2Ug
c2l6ZS4KKyAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIHVuc2lnbmVkIG1f
ZHVyYXRpb247CisgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsK
KyAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CiAgICAgfTsKIAotICAgIC8vIFRoZSBJ
bWFnZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGlt
YWdlIGZvcm1hdAotICAgIC8vIGRlY29kZXJzIChlLmcuLCBHSUYsIEpQRywgUE5HLCBJQ08pIHRv
IGRlcml2ZSBmcm9tLiAgQWxsIGRlY29kZXJzIGRlY29kZQotICAgIC8vIGludG8gUkdCQTMyIGZv
cm1hdCBhbmQgdGhlIGJhc2UgY2xhc3MgbWFuYWdlcyB0aGUgUkdCQTMyIGZyYW1lIGNhY2hlLgor
ICAgIC8vIEltYWdlRGVjb2RlciBpcyBhIGJhc2UgZm9yIGFsbCBmb3JtYXQtc3BlY2lmaWMgZGVj
b2RlcnMKKyAgICAvLyAoZS5nLiBKUEVHSW1hZ2VEZWNvZGVyKS4gIFRoaXMgYmFzZSBtYW5hZ2Vz
IHRoZSBJbWFnZUZyYW1lIGNhY2hlLgogICAgIC8vCi0gICAgLy8gRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRlY29kZXJzIHRvIHdyaXRlCi0gICAgLy8g
ZGlyZWN0bHkgdG8gc2NhbGVkIG91dHB1dCBidWZmZXJzIGJ5IGRvd24gc2FtcGxpbmcuIENhbGwK
LSAgICAvLyBzZXRNYXhOdW1QaXhlbHMoKSB0byBzcGVjaWZ5IHRoZSBiaWdnZXN0IHNpemUgdGhh
dCBkZWNvZGVkIGltYWdlcyBjYW4KLSAgICAvLyBoYXZlLiBJbWFnZSBkZWNvZGVycyB3aWxsIGRl
ZmxhdGUgdGhvc2UgaW1hZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuCi0gICAgLy8gbV9tYXhOdW1Q
aXhlbHMuIChOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBpbWFnZSBkZWNvZGVycyB5ZXQpCisgICAgLy8g
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRlY29kZXJz
IHRvIGRvd25zYW1wbGUKKyAgICAvLyBhdCBkZWNvZGUgdGltZS4gIEltYWdlIGRlY29kZXJzIHdp
bGwgZG93bnNhbXBsZSBhbnkgaW1hZ2VzIGxhcmdlciB0aGFuCisgICAgLy8gfG1fbWF4TnVtUGl4
ZWxzfC4gIEZJWE1FOiBOb3QgeWV0IHN1cHBvcnRlZCBieSBhbGwgZGVjb2RlcnMuCiAgICAgY2xh
c3MgSW1hZ2VEZWNvZGVyIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VEZWNv
ZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAtMjMxLDE5ICsy
MTgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFi
bGUoZmFsc2UpCiAgICAgICAgICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQogICAgICAgICAgICAg
LCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX2ZhaWxlZChmYWxz
ZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNlKSB7
IH0KIAotICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQorICAgICAgICB2aXJ0dWFs
IH5JbWFnZURlY29kZXIoKSB7IH0KIAotICAgICAgICAvLyBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNy
ZWF0ZSBhbiBJbWFnZURlY29kZXIuICBQb3J0cyB0aGF0IHN1YmNsYXNzCi0gICAgICAgIC8vIElt
YWdlRGVjb2RlciBjYW4gcHJvdmlkZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhpcyB0
byBhdm9pZAotICAgICAgICAvLyBuZWVkaW5nIHRvIHdyaXRlIGEgZGVkaWNhdGVkIHNldERhdGEo
KSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBkZWNv
ZGVyIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLiAgUmV0dXJucyAwIGlmCisgICAgICAgIC8vIHdl
IGNhbid0IHNuaWZmIGEgc3VwcG9ydGVkIHR5cGUgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAocG9z
c2libHkKKyAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpc24ndCBlbm91Z2ggZGF0YSB5ZXQpLgog
ICAgICAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBk
YXRhLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbik7CiAKLSAgICAgICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24g
dXN1YWxseSBhc3NvY2lhdGVkIHdpdGggYW4gdW5kZWNvZGVkIGltYWdlCi0gICAgICAgIC8vIG9m
IHRoaXMgdHlwZS4KICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCA9IDA7CiAKICAgICAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KQEAgLTI1Niw0MSArMjM5LDMzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVj
ZWl2ZWQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBp
bmZvcm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhpcwotICAgICAgICAvLyBkZWZhdWx0
IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIGhhcyBiZWVuIHNl
dCBhbmQKLSAgICAgICAgLy8gd2UgaGF2ZSBub3Qgc2VlbiBhIGZhaWx1cmUuIERlY29kZXJzIG1h
eSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8KLSAgICAgICAgLy8gbGF6aWx5IGRlY29kZSBlbm91
Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KKyAgICAgICAgLy8gTGF6aWx5LWRlY29k
ZXMgZW5vdWdoIG9mIHRoZSBpbWFnZSB0byBnZXQgdGhlIHNpemUgKGlmIHBvc3NpYmxlKS4KKyAg
ICAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB0aGF0IGhhcyB0byBiZSBkb25lIGJ5IGVhY2ggc3Vi
Y2xhc3M7IGZhY3RvciB0aGUKKyAgICAgICAgLy8gZGVjb2RlIGNhbGwgb3V0IGFuZCB1c2UgaXQg
aGVyZS4KICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOyAKKyAgICAg
ICAgICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCi0gICAgICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZTsKLSAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgICAgIEludFNpemUgc2NhbGVkU2l6ZSgpIGNvbnN0CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3NjYWxlZCA/IEludFNpemUobV9zY2FsZWRD
b2x1bW5zLnNpemUoKSwgbV9zY2FsZWRSb3dzLnNpemUoKSkgOiBzaXplKCk7CiAgICAgICAgIH0K
IAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIGZyYW1lIHxpbmRleHwuICBUaGlzIHdp
bGwgb25seSBkaWZmZXIgZnJvbSBzaXplKCkKLSAgICAgICAgLy8gZm9yIGZvcm1hdHMgd2hlcmUg
ZGlmZmVyZW50IGZyYW1lcyBhcmUgZGlmZmVyZW50IHNpemVzIChuYW1lbHkgSUNPLAotICAgICAg
ICAvLyB3aGVyZSBlYWNoIGZyYW1lIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgaWNvbiB3aXRoaW4g
dGhlIG1hc3RlciBmaWxlKS4KLSAgICAgICAgLy8gTm90YWJseSwgdGhpcyBkb2VzIG5vdCByZXR1
cm4gZGlmZmVyZW50IHNpemVzIGZvciBkaWZmZXJlbnQgR0lGCi0gICAgICAgIC8vIGZyYW1lcywg
c2luY2Ugd2hpbGUgdGhlc2UgbWF5IGJlIHN0b3JlZCBhcyBzbWFsbGVyIHJlY3RhbmdsZXMsIGR1
cmluZwotICAgICAgICAvLyBkZWNvZGluZyB0aGV5IGFyZSBjb21wb3NpdGVkIHRvIGNyZWF0ZSBh
IGZ1bGwtc2l6ZSBmcmFtZS4KKyAgICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgZGlmZmVyIGZyb20g
c2l6ZSgpIGZvciBJQ08gKHdoZXJlIGVhY2ggZnJhbWUgaXMgYQorICAgICAgICAvLyBkaWZmZXJl
bnQgaWNvbikgb3Igb3RoZXIgZm9ybWF0cyB3aGVyZSBkaWZmZXJlbnQgZnJhbWVzIGFyZSBkaWZm
ZXJlbnQKKyAgICAgICAgLy8gc2l6ZXMuICBUaGlzIGRvZXMgTk9UIGRpZmZlciBmcm9tIHNpemUo
KSBmb3IgR0lGLCBzaW5jZSBkZWNvZGluZyBHSUZzCisgICAgICAgIC8vIGNvbXBvc2l0ZXMgYW55
IHNtYWxsZXIgZnJhbWVzIGFnYWluc3QgcHJldmlvdXMgZnJhbWVzIHRvIGNyZWF0ZSBmdWxsLQor
ICAgICAgICAvLyBzaXplIGZyYW1lcy4KICAgICAgICAgdmlydHVhbCBJbnRTaXplIGZyYW1lU2l6
ZUF0SW5kZXgoc2l6ZV90KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc2l6
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBpbWFnZSBkZWNvZGVy
cyB0byBzZXQgdGhlaXIgZGVjb2RlZCBzaXplLCB0aGlzIGFsc28KLSAgICAgICAgLy8gY2hlY2tz
IHRoZSBzaXplIGZvciB2YWxpZGl0eS4gSXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2l6ZSB3
YXMKLSAgICAgICAgLy8gc2V0LCBvciBmYWxzZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4gT24gZXJy
b3IsIHRoZSBtX2ZhaWxlZCBmbGFnIHdpbGwKLSAgICAgICAgLy8gYmUgc2V0IGFuZCB0aGUgY2Fs
bGVyIHNob3VsZCBpbW1lZGlhdGVseSBzdG9wIGRlY29kaW5nLgorICAgICAgICAvLyBSZXR1cm5z
IHdoZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJlc3VsdCBpbgor
ICAgICAgICAvLyBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBkZWNvZGluZyBh
cyBmYWlsZWQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdp
ZHRoLCBoZWlnaHQpKQpAQCAtMzAwLDI2ICsyNzUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGUgdG90
YWwgbnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgQ2xhc3NlcyB0aGF0IHN1cHBvcnQK
LSAgICAgICAgLy8gbXVsdGlwbGUgZnJhbWVzIHdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3Ig
dGhlIGFuc3dlciBpZiB0aGV5IG5lZWQKLSAgICAgICAgLy8gdG8gKHdpdGhvdXQgbmVjZXNzYXJp
bHkgZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCisgICAgICAgIC8vIExh
emlseS1kZWNvZGVzIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBmcmFtZSBjb3VudCAo
aWYKKyAgICAgICAgLy8gcG9zc2libGUpLCB3aXRob3V0IGRlY29kaW5nIHRoZSBpbmRpdmlkdWFs
IGZyYW1lcy4KKyAgICAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB0aGF0IGhhcyB0byBiZSBkb25l
IGJ5IGVhY2ggc3ViY2xhc3M7IGZhY3RvciB0aGUKKyAgICAgICAgLy8gZGVjb2RlIGNhbGwgb3V0
IGFuZCB1c2UgaXQgaGVyZS4KICAgICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgpIHsg
cmV0dXJuIDE7IH0KIAotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBl
cmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQogCi0gICAgICAgIC8v
IENhbGxlZCB0byBvYnRhaW4gdGhlIEltYWdlRnJhbWUgZnVsbCBvZiBkZWNvZGVkIGRhdGEgZm9y
IHJlbmRlcmluZy4KLSAgICAgICAgLy8gVGhlIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFz
IG11Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUKLSAgICAgICAgLy8gaGFuZGluZyBi
YWNrIHRoZSBidWZmZXIuCisgICAgICAgIC8vIERlY29kZXMgYXMgbXVjaCBvZiB0aGUgcmVxdWVz
dGVkIGZyYW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgorICAgICAgICAvLyBJbWFnZURl
Y29kZXItb3duZWQgcG9pbnRlci4KICAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhl
IHVuZGVybHlpbmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEKLSAgICAgICAgLy8g
dHJhbnNwYXJlbmN5LgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLQogICAgICAgICB2b2lkIHNldElnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlKGJvb2wgZmxhZykgeyBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID0gZmxhZzsg
fQotCi0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBnYW1tYSBhbmQgY29sb3IgcHJvZmls
ZSBhcmUgYXBwbGllZC4KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2ZpbGUo
KSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKICAgICAg
ICAgLy8gU2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLiAgRm9yIGNhbGxlciBjb252ZW5p
ZW5jZSAoc2luY2Ugc28KQEAgLTMzNCwxMyArMzAyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKLSAg
ICAgICAgLy8gV2lwZSBvdXQgZnJhbWVzIGluIHRoZSBmcmFtZSBidWZmZXIgY2FjaGUgYmVmb3Jl
IHxjbGVhckJlZm9yZUZyYW1lfCwKLSAgICAgICAgLy8gYXNzdW1pbmcgdGhpcyBjYW4gYmUgZG9u
ZSB3aXRob3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlmZmVyZW50Ci0gICAgICAgIC8vIGRlY29k
ZXJzIHBsYWNlIGRpZmZlcmVudCByZXN0cmljdGlvbnMgb24gd2hhdCBmcmFtZXMgYXJlIHNhZmUg
dG8KLSAgICAgICAgLy8gZGVzdHJveSwgc28gdGhpcyBpcyBsZWZ0IHRvIHRoZW0gdG8gaW1wbGVt
ZW50LgotICAgICAgICAvLyBGb3IgY29udmVuaWVuY2UncyBzYWtlLCB3ZSBwcm92aWRlIGEgZGVm
YXVsdCAoZW1wdHkpIGltcGxlbWVudGF0aW9uLAotICAgICAgICAvLyBzaW5jZSBpbiBwcmFjdGlj
ZSBvbmx5IEdJRnMgd2lsbCBldmVyIHVzZSB0aGlzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKSB7IH0KKyAgICAgICAg
Ly8gQ2xlYXJzIGRlY29kZWQgcGl4ZWwgZGF0YSBmcm9tIGJlZm9yZSB0aGUgcHJvdmlkZWQgZnJh
bWUgdW5sZXNzIHRoYXQKKyAgICAgICAgLy8gZGF0YSBtYXkgYmUgbmVlZGVkIHRvIGRlY29kZSBm
dXR1cmUgZnJhbWVzIChlLmcuIGR1ZSB0byBHSUYgZnJhbWUKKyAgICAgICAgLy8gY29tcG9zaXRp
bmcpLgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkg
eyB9CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICB2
b2lkIHNldE1heE51bVBpeGVscyhpbnQgbSkgeyBtX21heE51bVBpeGVscyA9IG07IH0KQEAgLTM2
OCw4ICszMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGFuZCByZXR1cm4g
aXQgYXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KICAgICAgICAgc3RhdGljIGJv
b2wgaXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgICAgICB7
Ci0gICAgICAgICAgICAvLyB3aWR0aCAqIGhlaWdodCBtdXN0IG5vdCBleGNlZWQgKDIgXiAyOSkg
LSAxLCBzbyB0aGF0IHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBvdmVyZmxvdyB3aGVuIHdlIG11
bHRpcGx5IGJ5IDQuCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4od2lkdGgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oaGVpZ2h0KTsKICAgICAgICAgICAgIHJldHVybiB0b3RhbF9zaXplID4gKCgxIDw8IDI5KSAt
IDEpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA3NzMzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNyw3ICs3MDcsNyBAQCBCTVBJbWFnZVJlYWRlcjo6
UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9zZWVuTm9uWmVyb0FscGhhUGl4ZWwgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBpZiAobV9zZWVuWmVyb0FscGhhUGl4ZWwpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fYnVmZmVyLT56ZXJvRmlsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9i
dWZmZXItPnplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3Nl
ZW5aZXJvQWxwaGFQaXhlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGFscGhhICE9IDI1NSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNB
bHBoYSh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDc3MzM0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNv
ZGVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSW1hZ2VGcmFt
ZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRfY2Fz
dDxQaXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5nZXQo
KSkpOwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAKLSAgICB6
ZXJvRmlsbCgpOworICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NzMzNCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTQgKzE3NCwxNCBAQCB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAgICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVy
YXRvciBpKGVuZCk7CiAgICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigp
KSAmJiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHx8IChpLT5kaXNw
b3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAt
LWkpIHsKICAgICAgICAgaWYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBs
ZXRlKSAmJiAoaSAhPSBlbmQpKQotICAgICAgICAgICAgaS0+Y2xlYXIoKTsKKyAgICAgICAgICAg
IGktPmNsZWFyUGl4ZWxEYXRhKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0aGUg
bGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCiAgICAg
Zm9yIChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJl
Z2luKCkpOyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1h
Z2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdl
RnJhbWU6OkZyYW1lRW1wdHkpCi0gICAgICAgICAgICBqLT5jbGVhcigpOworICAgICAgICAgICAg
ai0+Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiB9CiAKQEAgLTI2Niw3ICsyNjYsNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgaWYgKCFtX2N1cnJlbnRC
dWZmZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBUaGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFu
c3BhcmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVz
dWx0aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFyZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhh
KGZhbHNlKS4KLSAgICAgICAgaWYgKGJ1ZmZlci5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQ
b2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1l
UmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAg
ICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFt
ZUluZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBu
b3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI4OSw3ICsyODksNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBUaGUg
b25seSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAg
SWYKICAgICAgICAgICAgIC8vIGl0IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0IGlzIGNvbnRh
aW5lZCBpbiB0aGUgY3VycmVudCBmcmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0LCB3ZSBrbm93
IHRoZSBjdXJyZW50IGZyYW1lIGhhcyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlmICgocHJldkJ1
ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlQmdj
b2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250YWlu
cyhwcmV2QnVmZmVyLT5yZWN0KCkpKQorICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNw
b3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJiAh
cHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250
YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKICAgICAgICAgICAgICAgICBi
dWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzM3LDcgKzMz
Nyw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICBpbnQg
cmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7CiAgICAg
aW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwogICAgIGludCBib3R0
b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QuYm90dG9tKCksIHRvcCk7Ci0gICAgYnVm
ZmVyLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRv
cCkpOworICAgIGJ1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0b3As
IHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAgICAgCiAgICAgaWYgKCFmcmFtZUluZGV4
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVs
eWluZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KQEAgLTM2Nyw3ICszNjcsNyBAQCBib29sIEdJRklt
YWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVu
dCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ug
b3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVj
dCA9IHByZXZCdWZmZXItPnJlY3QoKTsKKyAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZS
ZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoIWZy
YW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRT
aXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwg
b3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA3NzMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBDQVVUSU9OOiBz
ZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAg
ICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcg
dGhpcyBmcm9tIGluc2lkZQogICAgICAgICAvLyBKUEVHSW1hZ2VSZWFkZXIhCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1lUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0lt
YWdlRnJhbWVRdC5jcHAJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsMTQgKzUwLDE0IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdAog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0gICAg
c2V0UmVjdChvdGhlci5yZWN0KCkpOworICAgIHNldE9yaWdpbmFsRnJhbWVSZWN0KG90aGVyLm9y
aWdpbmFsRnJhbWVSZWN0KCkpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAg
c2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3Ro
ZXIuZGlzcG9zYWxNZXRob2QoKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdl
RnJhbWU6OmNsZWFyKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAg
IG1fcGl4bWFwID0gUVBpeG1hcCgpOwogICAgIG1faW1hZ2UgPSBRSW1hZ2UoKTsKQEAgLTY4LDcg
KzY4LDcgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhcigpCiAgICAgLy8gb3RoZXIgbWV0YWRhdGEg
b3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGwo
KQordm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7CiAgICAgaWYgKG1fcGl4
bWFwLmlzTnVsbCgpICYmICFtX2ltYWdlLmlzTnVsbCgpKSB7CiAgICAgICAgIG1fcGl4bWFwID0g
UVBpeG1hcChtX2ltYWdlLndpZHRoKCksIG1faW1hZ2UuaGVpZ2h0KCkpOwpAQCAtMTAxLDggKzEw
MSw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIFplcm8g
dGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3Bw
CShyZXZpc2lvbiA3NzMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0CiAgICAgLy8gS2Vl
cCB0aGUgcGl4ZWxzIGxvY2tlZCBzaW5jZSB3ZSB3aWxsIGJlIHdyaXRpbmcgZGlyZWN0bHkgaW50
byB0aGUKICAgICAvLyBiaXRtYXAgdGhyb3VnaG91dCB0aGlzIG9iamVjdCdzIGxpZmV0aW1lLgog
ICAgIG1fYml0bWFwLmxvY2tQaXhlbHMoKTsKLSAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7Cisg
ICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CiAgICAg
c2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlv
bigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAg
LTU2LDcgKzU2LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKK3ZvaWQgSW1h
Z2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fYml0bWFwLnJlc2V0KCk7CiAgICAg
bV9zdGF0dXMgPSBGcmFtZUVtcHR5OwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIEltYWdlRnJhbWU6
OmNsZWFyKCkKICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4K
IH0KIAotdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCit2b2lkIEltYWdlRnJhbWU6Onplcm9G
aWxsUGl4ZWxEYXRhKCkKIHsKICAgICBtX2JpdG1hcC5lcmFzZUFSR0IoMCwgMCwgMCwgMCk7CiB9
CkBAIC05MCw4ICs5MCw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgs
IGkKICAgICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIC8vIFplcm8gdGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0Zp
bGxQaXhlbERhdGEoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQ
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0
ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gInZwOCI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTaXpl
QXZhaWxhYmxlKCk7CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNl
IG9mIGRlY29kaW5nIGZhaWx1cmUuCg==
</data>
<flag name="review"
          id="72486"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="72487"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80969</attachid>
            <date>2011-02-02 14:17:40 -0800</date>
            <delta_ts>2011-02-02 15:34:16 -0800</delta_ts>
            <desc>Larger patch v2.2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>29713</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3NDAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDItMDIgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IExldmluLgorCisgICAgICAgIENsZWFuIHVwIEltYWdlRGVjb2RlcidzIGNvbW1lbnRzIChyZW1v
dmUvdHJpbS9jbGFyaWZ5KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUzNDU1CisKKyAgICAgICAgVGhpcyBhbHNvIHJlbmFtZXMgb3IgZWxpbWluYXRl
cyBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgZm9yIGNsYXJpdHksIGFuZAorICAgICAgICBzd2l0Y2hl
cyBhIGNvdXBsZSBlcnJvbmVvdXMgc3RybmNtcCgpIGNhbGxzIHRvIG1lbWNtcCgpLgorCisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onpl
cm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VEZWNvZGVyOjpJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjp+SW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldElnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1
ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6aXNPdmVyU2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6Y2xlYXJQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0Zp
bGxQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuaDoKKwogMjAxMS0wMi0wMiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgRW5jb2RlL2RlY29kZSBGb3JtRGF0YSBhbmQgRm9ybURhdGFFbGVt
ZW50IG9iamVjdHMgY29uc2lzdGVudGx5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDc3
MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsOSBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB1bnNpZ25lZCBjb3B5RnJvbVNo
YXJlZEJ1ZmZlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2hh
cmVkQnVmZmVyJiBzaGFyZWRCdWZmZXIsIHVuc2lnbmVkIG9mZnNldCkKK25hbWVzcGFjZSB7CisK
K3Vuc2lnbmVkIGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBTaGFyZWRCdWZmZXImIHNoYXJlZEJ1ZmZlciwgdW5zaWduZWQgb2Zm
c2V0KQogewogICAgIHVuc2lnbmVkIGJ5dGVzRXh0cmFjdGVkID0gMDsKICAgICBjb25zdCBjaGFy
KiBtb3JlRGF0YTsKQEAgLTUzLDUxICs1NSw3MyBAQCBzdGF0aWMgdW5zaWduZWQgY29weUZyb21T
aGFyZWRCdWZmZXIoY2hhCiAgICAgcmV0dXJuIGJ5dGVzRXh0cmFjdGVkOwogfQogCitib29sIG1h
dGNoZXNHSUZTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7CisgICAgcmV0dXJuICFtZW1jbXAo
Y29udGVudHMsICJHSUY4IiwgNCk7Cit9CisKK2Jvb2wgbWF0Y2hlc1BOR1NpZ25hdHVyZShjaGFy
KiBjb250ZW50cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIlx4ODlceDUwXHg0
RVx4NDciLCA0KTsKK30KKworYm9vbCBtYXRjaGVzSlBFR1NpZ25hdHVyZShjaGFyKiBjb250ZW50
cykKK3sKKyAgICByZXR1cm4gIW1lbWNtcChjb250ZW50cywgIlx4RkZceEQ4XHhGRiIsIDMpOwor
fQorCisjaWYgVVNFKFdFQlApCitib29sIG1hdGNoZXNXZWJQU2lnbmF0dXJlKGNoYXIqIGNvbnRl
bnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiUklGRiIsIDQpICYmICFtZW1j
bXAoY29udGVudHMgKyA4LCAiV0VCUFZQIiwgNik7Cit9CisjZW5kaWYKKworYm9vbCBtYXRjaGVz
Qk1QU2lnbmF0dXJlKGNoYXIqIGNvbnRlbnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRl
bnRzLCAiQk0iLCAyKTsKK30KKworYm9vbCBtYXRjaGVzSUNPU2lnbmF0dXJlKGNoYXIqIGNvbnRl
bnRzKQoreworICAgIHJldHVybiAhbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAxXHgwMCIs
IDQpOworfQorCitib29sIG1hdGNoZXNDVVJTaWduYXR1cmUoY2hhciogY29udGVudHMpCit7Cisg
ICAgcmV0dXJuICFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDJceDAwIiwgNCk7Cit9CisK
K30KKwogSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZm
ZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KQogewotICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQg
a2luZCBvZiBpbWFnZSB3ZSdyZSBkZWFsaW5nCi0gICAgLy8gd2l0aC4KLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4TWFya2VyTGVuZ3RoID0gNDsKLSAgICBjaGFyIGNvbnRlbnRzW21heE1h
cmtlckxlbmd0aF07Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRCdWZmZXIo
Y29udGVudHMsIG1heE1hcmtlckxlbmd0aCwgZGF0YSwgMCk7Ci0gICAgaWYgKGxlbmd0aCA8IG1h
eE1hcmtlckxlbmd0aCkKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGVuZ3RoT2ZMb25nZXN0
U2lnbmF0dXJlID0gMTQ7IC8vIFRvIHdpdDogIlJJRkY/Pz8/V0VCUFZQIgorICAgIGNoYXIgY29u
dGVudHNbbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlXTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBj
b3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlLCBk
YXRhLCAwKTsKKyAgICBpZiAobGVuZ3RoIDwgbGVuZ3RoT2ZMb25nZXN0U2lnbmF0dXJlKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIC8vIEdJRnMgYmVnaW4gd2l0aCBHSUY4KDcgb3IgOSkuCi0g
ICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCkgPT0gMCkKKyAgICBpZiAobWF0Y2hl
c0dJRlNpZ25hdHVyZShjb250ZW50cykpCiAgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNv
ZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKLSAgICAvLyBU
ZXN0IGZvciBQTkcuCi0gICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3
IiwgNCkpCisgICAgaWYgKG1hdGNoZXNQTkdTaWduYXR1cmUoY29udGVudHMpKQogICAgICAgICBy
ZXR1cm4gbmV3IFBOR0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24pOwogCi0gICAgLy8gSlBFRwotICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHhG
Rlx4RDhceEZGIiwgMykpCisgICAgaWYgKG1hdGNoZXNKUEVHU2lnbmF0dXJlKGNvbnRlbnRzKSkK
ICAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbik7CiAKICNpZiBVU0UoV0VCUCkKLSAgICBpZiAoIW1lbWNtcChj
b250ZW50cywgIlJJRkYiLCA0KSkgewotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgd2Vi
cEV4dHJhTWFya2VyID0gNjsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHdlYnBFeHRy
YU1hcmtlcm9mZnNldCA9IDg7Ci0gICAgICAgIGNoYXIgaGVhZGVyW3dlYnBFeHRyYU1hcmtlcl07
Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGhlYWRlciwg
d2VicEV4dHJhTWFya2VyLCBkYXRhLCB3ZWJwRXh0cmFNYXJrZXJvZmZzZXQpOwotICAgICAgICBp
ZiAobGVuZ3RoID49IHdlYnBFeHRyYU1hcmtlcikgewotICAgICAgICAgICAgaWYgKCFtZW1jbXAo
aGVhZGVyLCAiV0VCUFZQIiwgd2VicEV4dHJhTWFya2VyKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IFdFQlBJbWFnZURlY29kZXIoYWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxl
T3B0aW9uKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobWF0Y2hlc1dlYlBTaWduYXR1cmUo
Y29udGVudHMpKQorICAgICAgICByZXR1cm4gbmV3IFdFQlBJbWFnZURlY29kZXIoYWxwaGFPcHRp
b24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKICNlbmRpZgogCi0gICAgLy8gQk1QCi0g
ICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgaWYgKG1hdGNoZXNC
TVBTaWduYXR1cmUoY29udGVudHMpKQogICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2Rl
cihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pOwogCi0gICAgLy8gSUNP
cyBhbHdheXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEuCi0g
ICAgLy8gQ1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDItYnl0ZSAyLgotICAg
IGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHgwMFx4MDBceDAxXHgwMCIsIDQpIHx8ICFtZW1jbXAo
Y29udGVudHMsICJceDAwXHgwMFx4MDJceDAwIiwgNCkpCisgICAgaWYgKG1hdGNoZXNJQ09TaWdu
YXR1cmUoY29udGVudHMpIHx8IG1hdGNoZXNDVVJTaWduYXR1cmUoY29udGVudHMpKQogICAgICAg
ICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24pOwogCi0gICAgLy8gR2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBo
ZWNrIHRoaXMgaXMuCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEyNiw3ICsxNTAsNyBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKLXZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQordm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVs
RGF0YSgpCiB7CiAgICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKICAgICBtX2J5dGVzID0gMDsK
QEAgLTEzNyw3ICsxNjEsNyBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKICAgICAvLyBsYXRl
ci4KIH0KIAotdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCit2b2lkIEltYWdlRnJhbWU6Onpl
cm9GaWxsUGl4ZWxEYXRhKCkKIHsKICAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRo
KCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CiAgICAgbV9oYXNBbHBo
YSA9IHRydWU7CkBAIC0xNzEsOCArMTk1LDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGlu
dCBuZXdXaWR0aCwgaQogICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAg
bV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKIAotICAgIC8vIFplcm8gdGhl
IGltYWdlLgotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc3MzM0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDkgKzQ5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEZJ
WE1FOiBEbyB3ZSB3YW50IGJldHRlciBlbmNhcHN1bGF0aW9uPwogICAgIHR5cGVkZWYgVmVjdG9y
PGNoYXI+IENvbG9yUHJvZmlsZTsKIAotICAgIC8vIFRoZSBJbWFnZUZyYW1lIG9iamVjdCByZXBy
ZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEgaW4gUkdCQTMyCi0gICAgLy8gZm9ybWF0LiAg
VGhpcyBidWZmZXIgaXMgd2hhdCBhbGwgZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50
by4KLSAgICAvLyBGcmFtZXMgYXJlIHRoZW4gaW5zdGFudGlhdGVkIGZvciBkcmF3aW5nIGJ5IGJl
aW5nIGhhbmRlZCB0aGlzIGJ1ZmZlci4KKyAgICAvLyBJbWFnZUZyYW1lIHJlcHJlc2VudHMgdGhl
IGRlY29kZWQgaW1hZ2UgZGF0YS4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsCisgICAgLy8gZGVj
b2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4KICAgICBjbGFzcyBJbWFnZUZyYW1lIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFt
ZVBhcnRpYWwsIEZyYW1lQ29tcGxldGUgfTsKQEAgLTc5LDE5ICs3OCwxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRh
LCBvbmx5IGluY3JlYXNlIHRoZSByZWYgY291bnQuCiAgICAgICAgIEltYWdlRnJhbWUmIG9wZXJh
dG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcik7CiAKLSAgICAgICAgLy8gRGVsZXRlcyB0aGUg
cGl4ZWwgZGF0YSBlbnRpcmVseTsgdXNlZCBieSBJbWFnZURlY29kZXIgdG8gc2F2ZSBtZW1vcnkK
LSAgICAgICAgLy8gd2hlbiB3ZSBubyBsb25nZXIgbmVlZCB0byBkaXNwbGF5IGEgZnJhbWUgYW5k
IG9ubHkgbmVlZCBpdHMgbWV0YWRhdGEuCi0gICAgICAgIHZvaWQgY2xlYXIoKTsKLQotICAgICAg
ICAvLyBaZXJvZXMgdGhlIHBpeGVsIGRhdGEgaW4gdGhlIGJ1ZmZlciwgc2V0dGluZyBpdCB0byBm
dWxseS10cmFuc3BhcmVudC4KLSAgICAgICAgdm9pZCB6ZXJvRmlsbCgpOwotCi0gICAgICAgIC8v
IENyZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSBpbiB8b3RoZXJ8LCBzbyB0aGUg
dHdvIGltYWdlcwotICAgICAgICAvLyBjYW4gYmUgbW9kaWZpZWQgaW5kZXBlbmRlbnRseS4gIFJl
dHVybnMgd2hldGhlciB0aGUgY29weSBzdWNjZWVkZWQuCisgICAgICAgIC8vIFRoZXNlIGRvIG5v
dCB0b3VjaCBvdGhlciBtZXRhZGF0YSwgb25seSB0aGUgcmF3IHBpeGVsIGRhdGEuCisgICAgICAg
IHZvaWQgY2xlYXJQaXhlbERhdGEoKTsKKyAgICAgICAgdm9pZCB6ZXJvRmlsbFBpeGVsRGF0YSgp
OworCisgICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBjb3B5
IG9mIHRoZSBwcm92aWRlZCBpbWFnZSdzCisgICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRoYXQg
bW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KKyAgICAgICAg
Ly8gdGhlIG90aGVyLiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KICAgICAg
ICAgYm9vbCBjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7CiAKLSAgICAgICAgLy8g
Q3JlYXRlcyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGltYWdlIGRhdGEgaW4gfG90aGVyfC4gIFRo
ZSB0d28gaW1hZ2VzCi0gICAgICAgIC8vIHNoYXJlIGEgY29tbW9uIGJhY2tpbmcgc3RvcmUuCisg
ICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgcmVmZXJlbmNlIHRoZSBwcm92aWRlZCBpbWFnZSdz
IHBpeGVsIGRhdGEsIHNvIHRoYXQKKyAgICAgICAgLy8gbW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJh
bWUgYXJlIHJlZmxlY3RlZCBpbiB0aGUgb3RoZXIuCiAgICAgICAgIHZvaWQgY29weVJlZmVyZW5j
ZVRvQml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7CiAKICAgICAgICAgLy8gQ29waWVzIHRo
ZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhl
CkBAIC0xMTAsMTggKzEwNywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKLSAgICAgICAgLy8gYXJlIHdyaXR0ZW4uIFdpbGwgcmV0
dXJuIHRydWUgb24gc3VjY2VzcywgZmFsc2UgaWYgdGhlIG1lbW9yeQotICAgICAgICAvLyBhbGxv
Y2F0aW9uIGZhaWxzLiAgQ2FsbGluZyB0aGlzIG11bHRpcGxlIHRpbWVzIGlzIHVuZGVmaW5lZCBh
bmQgbWF5Ci0gICAgICAgIC8vIGxlYWsgbWVtb3J5LgorICAgICAgICAvLyBhcmUgd3JpdHRlbi4g
IE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0aW9uCisg
ICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwg
aW50IG5ld0hlaWdodCk7CiAKLSAgICAgICAgLy8gVG8gYmUgdXNlZCBieSBJbWFnZVNvdXJjZTo6
Y3JlYXRlRnJhbWVBdEluZGV4KCkuICBSZXR1cm5zIGEgcG9pbnRlcgotICAgICAgICAvLyB0byB0
aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4gIFRoaXMgcG9pbnRlciB3aWxsIGJlIG93
bmVkIGJ5Ci0gICAgICAgIC8vIHRoZSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4gRnJhbWVEYXRh
OjpjbGVhcigpLgorICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8g
dGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCisgICAgICAgIC8vIChBY3R1YWwgdXNl
OiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4K
KyAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KICAgICAgICAgTmF0aXZlSW1hZ2VQdHIg
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25z
dDsKLSAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQorICAgICAgICBjb25zdCBJbnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CkBAIC0x
MjksNyArMTI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgc2V0SGFz
QWxwaGEoYm9vbCBhbHBoYSk7CiAgICAgICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0IENv
bG9yUHJvZmlsZSYpOwotICAgICAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBt
X3JlY3QgPSByOyB9CisgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAgICB2b2lkIHNldFN0
YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2ln
bmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNl
dERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxN
ZXRob2QgPSBtZXRob2Q7IH0KQEAgLTE5MiwzNSArMTg4LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICNlbHNlCiAgICAgICAgIE5hdGl2ZUJhY2tpbmdTdG9yZSBtX2JhY2tpbmdTdG9yZTsKICAg
ICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2Jh
Y2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7IC8vIFRoZSBzaXplIG9mIHRoZSBi
dWZmZXIuICBUaGlzIHNob3VsZCBiZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNh
bWUgYXMgSW1hZ2VEZWNvZGVyOjptX3NpemUuCi0gICAgICAgIGJvb2wgbV9oYXNBbHBoYTsgLy8g
V2hldGhlciBvciBub3QgYW55IG9mIHRoZSBwaXhlbHMgaW4gdGhlIGJ1ZmZlcgotICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhdmUgdHJhbnNwYXJlbmN5LgorICAgICAgICBJbnRTaXplIG1f
c2l6ZTsKKyAgICAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgICAgICBDb2xvclByb2ZpbGUgbV9j
b2xvclByb2ZpbGU7CiAjZW5kaWYKLSAgICAgICAgSW50UmVjdCBtX3JlY3Q7IC8vIFRoZSByZWN0
IG9mIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgZnJhbWUgd2l0aGluCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgb3ZlcmFsbCBidWZmZXIuICBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3Ig
R0lGIGZyYW1lcyB3aG9zZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVj
dCB3YXMgc21hbGxlciB0aGFuIHRoZSBvdmVyYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbWFnZSBzaXplLgotICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsgLy8gV2hldGhlciBv
ciBub3QgdGhpcyBmcmFtZSBpcyBjb21wbGV0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBmaW5pc2hlZCBkZWNvZGluZy4KLSAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsg
Ly8gVGhlIGFuaW1hdGlvbiBkZWxheS4KLSAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rp
c3Bvc2FsTWV0aG9kOyAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hlbgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxp
emluZyB0aGUgbmV4dCBmcmFtZS4KLSAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7IC8v
IFdoZXRoZXIgdG8gcHJlbXVsdGlwbHkgYWxwaGEgaW50byBSLCBHLCBCCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBjaGFubmVsczsgYnkgZGVmYXVsdCBpdCdzIHRydWUuCisg
ICAgICAgIEludFJlY3QgbV9vcmlnaW5hbEZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBq
dXN0IGJlIHRoZSBlbnRpcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJhbGwgaW1hZ2Ugc2l6
ZS4KKyAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7CisgICAgICAgIHVuc2lnbmVkIG1fZHVy
YXRpb247CisgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsKKyAg
ICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CiAgICAgfTsKIAotICAgIC8vIFRoZSBJbWFn
ZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmljIGltYWdl
IGZvcm1hdAotICAgIC8vIGRlY29kZXJzIChlLmcuLCBHSUYsIEpQRywgUE5HLCBJQ08pIHRvIGRl
cml2ZSBmcm9tLiAgQWxsIGRlY29kZXJzIGRlY29kZQotICAgIC8vIGludG8gUkdCQTMyIGZvcm1h
dCBhbmQgdGhlIGJhc2UgY2xhc3MgbWFuYWdlcyB0aGUgUkdCQTMyIGZyYW1lIGNhY2hlLgorICAg
IC8vIEltYWdlRGVjb2RlciBpcyBhIGJhc2UgZm9yIGFsbCBmb3JtYXQtc3BlY2lmaWMgZGVjb2Rl
cnMKKyAgICAvLyAoZS5nLiBKUEVHSW1hZ2VEZWNvZGVyKS4gIFRoaXMgYmFzZSBtYW5hZ2VzIHRo
ZSBJbWFnZUZyYW1lIGNhY2hlLgogICAgIC8vCi0gICAgLy8gRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRlY29kZXJzIHRvIHdyaXRlCi0gICAgLy8gZGly
ZWN0bHkgdG8gc2NhbGVkIG91dHB1dCBidWZmZXJzIGJ5IGRvd24gc2FtcGxpbmcuIENhbGwKLSAg
ICAvLyBzZXRNYXhOdW1QaXhlbHMoKSB0byBzcGVjaWZ5IHRoZSBiaWdnZXN0IHNpemUgdGhhdCBk
ZWNvZGVkIGltYWdlcyBjYW4KLSAgICAvLyBoYXZlLiBJbWFnZSBkZWNvZGVycyB3aWxsIGRlZmxh
dGUgdGhvc2UgaW1hZ2VzIHRoYXQgYXJlIGJpZ2dlciB0aGFuCi0gICAgLy8gbV9tYXhOdW1QaXhl
bHMuIChOb3Qgc3VwcG9ydGVkIGJ5IGFsbCBpbWFnZSBkZWNvZGVycyB5ZXQpCisgICAgLy8gRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykgYWxsb3dzIGltYWdlIGRlY29kZXJzIHRv
IGRvd25zYW1wbGUKKyAgICAvLyBhdCBkZWNvZGUgdGltZS4gIEltYWdlIGRlY29kZXJzIHdpbGwg
ZG93bnNhbXBsZSBhbnkgaW1hZ2VzIGxhcmdlciB0aGFuCisgICAgLy8gfG1fbWF4TnVtUGl4ZWxz
fC4gIEZJWE1FOiBOb3QgeWV0IHN1cHBvcnRlZCBieSBhbGwgZGVjb2RlcnMuCiAgICAgY2xhc3Mg
SW1hZ2VEZWNvZGVyIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VEZWNvZGVy
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAtMjMxLDE5ICsyMTgs
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3NpemVBdmFpbGFibGUo
ZmFsc2UpCiAgICAgICAgICAgICAsIG1fbWF4TnVtUGl4ZWxzKC0xKQogICAgICAgICAgICAgLCBt
X2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX2ZhaWxlZChmYWxzZSkK
LSAgICAgICAgewotICAgICAgICB9CisgICAgICAgICAgICAsIG1fZmFpbGVkKGZhbHNlKSB7IH0K
IAotICAgICAgICB2aXJ0dWFsIH5JbWFnZURlY29kZXIoKSB7fQorICAgICAgICB2aXJ0dWFsIH5J
bWFnZURlY29kZXIoKSB7IH0KIAotICAgICAgICAvLyBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0
ZSBhbiBJbWFnZURlY29kZXIuICBQb3J0cyB0aGF0IHN1YmNsYXNzCi0gICAgICAgIC8vIEltYWdl
RGVjb2RlciBjYW4gcHJvdmlkZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhpcyB0byBh
dm9pZAotICAgICAgICAvLyBuZWVkaW5nIHRvIHdyaXRlIGEgZGVkaWNhdGVkIHNldERhdGEoKSBp
bXBsZW1lbnRhdGlvbi4KKyAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBkZWNvZGVy
IG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLiAgUmV0dXJucyAwIGlmCisgICAgICAgIC8vIHdlIGNh
bid0IHNuaWZmIGEgc3VwcG9ydGVkIHR5cGUgZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAocG9zc2li
bHkKKyAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpc24ndCBlbm91Z2ggZGF0YSB5ZXQpLgogICAg
ICAgICBzdGF0aWMgSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRh
LCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbik7CiAKLSAgICAgICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdXN1
YWxseSBhc3NvY2lhdGVkIHdpdGggYW4gdW5kZWNvZGVkIGltYWdlCi0gICAgICAgIC8vIG9mIHRo
aXMgdHlwZS4KICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dCA9IDA7CiAKICAgICAgICAgYm9vbCBpc0FsbERhdGFSZWNlaXZlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNBbGxEYXRhUmVjZWl2ZWQ7IH0KQEAgLTI1Niw0MSArMjM5LDMzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBhbGxEYXRhUmVjZWl2
ZWQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgc2l6ZSBpbmZv
cm1hdGlvbiBoYXMgYmVlbiBkZWNvZGVkIHlldC4gVGhpcwotICAgICAgICAvLyBkZWZhdWx0IGlt
cGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIGhhcyBiZWVuIHNldCBh
bmQKLSAgICAgICAgLy8gd2UgaGF2ZSBub3Qgc2VlbiBhIGZhaWx1cmUuIERlY29kZXJzIG1heSB3
YW50IHRvIG92ZXJyaWRlIHRoaXMgdG8KLSAgICAgICAgLy8gbGF6aWx5IGRlY29kZSBlbm91Z2gg
b2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZS4KKyAgICAgICAgLy8gTGF6aWx5LWRlY29kZXMg
ZW5vdWdoIG9mIHRoZSBpbWFnZSB0byBnZXQgdGhlIHNpemUgKGlmIHBvc3NpYmxlKS4KKyAgICAg
ICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB0aGF0IGhhcyB0byBiZSBkb25lIGJ5IGVhY2ggc3ViY2xh
c3M7IGZhY3RvciB0aGUKKyAgICAgICAgLy8gZGVjb2RlIGNhbGwgb3V0IGFuZCB1c2UgaXQgaGVy
ZS4KICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOyAKKyAgICAgICAg
ICAgIHJldHVybiAhbV9mYWlsZWQgJiYgbV9zaXplQXZhaWxhYmxlOwogICAgICAgICB9CiAKLSAg
ICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCi0gICAgICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6
ZTsKLSAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQogCiAgICAgICAgIEludFNpemUgc2NhbGVkU2l6ZSgpIGNvbnN0CiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3NjYWxlZCA/IEludFNpemUobV9zY2FsZWRDb2x1
bW5zLnNpemUoKSwgbV9zY2FsZWRSb3dzLnNpemUoKSkgOiBzaXplKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIGZyYW1lIHxpbmRleHwuICBUaGlzIHdpbGwg
b25seSBkaWZmZXIgZnJvbSBzaXplKCkKLSAgICAgICAgLy8gZm9yIGZvcm1hdHMgd2hlcmUgZGlm
ZmVyZW50IGZyYW1lcyBhcmUgZGlmZmVyZW50IHNpemVzIChuYW1lbHkgSUNPLAotICAgICAgICAv
LyB3aGVyZSBlYWNoIGZyYW1lIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgaWNvbiB3aXRoaW4gdGhl
IG1hc3RlciBmaWxlKS4KLSAgICAgICAgLy8gTm90YWJseSwgdGhpcyBkb2VzIG5vdCByZXR1cm4g
ZGlmZmVyZW50IHNpemVzIGZvciBkaWZmZXJlbnQgR0lGCi0gICAgICAgIC8vIGZyYW1lcywgc2lu
Y2Ugd2hpbGUgdGhlc2UgbWF5IGJlIHN0b3JlZCBhcyBzbWFsbGVyIHJlY3RhbmdsZXMsIGR1cmlu
ZwotICAgICAgICAvLyBkZWNvZGluZyB0aGV5IGFyZSBjb21wb3NpdGVkIHRvIGNyZWF0ZSBhIGZ1
bGwtc2l6ZSBmcmFtZS4KKyAgICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgZGlmZmVyIGZyb20gc2l6
ZSgpIGZvciBJQ08gKHdoZXJlIGVhY2ggZnJhbWUgaXMgYQorICAgICAgICAvLyBkaWZmZXJlbnQg
aWNvbikgb3Igb3RoZXIgZm9ybWF0cyB3aGVyZSBkaWZmZXJlbnQgZnJhbWVzIGFyZSBkaWZmZXJl
bnQKKyAgICAgICAgLy8gc2l6ZXMuICBUaGlzIGRvZXMgTk9UIGRpZmZlciBmcm9tIHNpemUoKSBm
b3IgR0lGLCBzaW5jZSBkZWNvZGluZyBHSUZzCisgICAgICAgIC8vIGNvbXBvc2l0ZXMgYW55IHNt
YWxsZXIgZnJhbWVzIGFnYWluc3QgcHJldmlvdXMgZnJhbWVzIHRvIGNyZWF0ZSBmdWxsLQorICAg
ICAgICAvLyBzaXplIGZyYW1lcy4KICAgICAgICAgdmlydHVhbCBJbnRTaXplIGZyYW1lU2l6ZUF0
SW5kZXgoc2l6ZV90KSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc2l6ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBpbWFnZSBkZWNvZGVycyB0
byBzZXQgdGhlaXIgZGVjb2RlZCBzaXplLCB0aGlzIGFsc28KLSAgICAgICAgLy8gY2hlY2tzIHRo
ZSBzaXplIGZvciB2YWxpZGl0eS4gSXQgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2l6ZSB3YXMK
LSAgICAgICAgLy8gc2V0LCBvciBmYWxzZSBpZiB0aGVyZSBpcyBhbiBlcnJvci4gT24gZXJyb3Is
IHRoZSBtX2ZhaWxlZCBmbGFnIHdpbGwKLSAgICAgICAgLy8gYmUgc2V0IGFuZCB0aGUgY2FsbGVy
IHNob3VsZCBpbW1lZGlhdGVseSBzdG9wIGRlY29kaW5nLgorICAgICAgICAvLyBSZXR1cm5zIHdo
ZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJlc3VsdCBpbgorICAg
ICAgICAvLyBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBkZWNvZGluZyBhcyBm
YWlsZWQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRo
LCBoZWlnaHQpKQpAQCAtMzAwLDI2ICsyNzUsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGUgdG90YWwg
bnVtYmVyIG9mIGZyYW1lcyBmb3IgdGhlIGltYWdlLiAgQ2xhc3NlcyB0aGF0IHN1cHBvcnQKLSAg
ICAgICAgLy8gbXVsdGlwbGUgZnJhbWVzIHdpbGwgc2NhbiB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhl
IGFuc3dlciBpZiB0aGV5IG5lZWQKLSAgICAgICAgLy8gdG8gKHdpdGhvdXQgbmVjZXNzYXJpbHkg
ZGVjb2RpbmcgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGZyYW1lcykuCisgICAgICAgIC8vIExhemls
eS1kZWNvZGVzIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBmcmFtZSBjb3VudCAoaWYK
KyAgICAgICAgLy8gcG9zc2libGUpLCB3aXRob3V0IGRlY29kaW5nIHRoZSBpbmRpdmlkdWFsIGZy
YW1lcy4KKyAgICAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB0aGF0IGhhcyB0byBiZSBkb25lIGJ5
IGVhY2ggc3ViY2xhc3M7IGZhY3RvciB0aGUKKyAgICAgICAgLy8gZGVjb2RlIGNhbGwgb3V0IGFu
ZCB1c2UgaXQgaGVyZS4KICAgICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgpIHsgcmV0
dXJuIDE7IH0KIAotICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZv
cm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAgICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9u
Q291bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0aW9uTm9uZTsgfQogCi0gICAgICAgIC8vIENh
bGxlZCB0byBvYnRhaW4gdGhlIEltYWdlRnJhbWUgZnVsbCBvZiBkZWNvZGVkIGRhdGEgZm9yIHJl
bmRlcmluZy4KLSAgICAgICAgLy8gVGhlIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFzIG11
Y2ggb2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUKLSAgICAgICAgLy8gaGFuZGluZyBiYWNr
IHRoZSBidWZmZXIuCisgICAgICAgIC8vIERlY29kZXMgYXMgbXVjaCBvZiB0aGUgcmVxdWVzdGVk
IGZyYW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgorICAgICAgICAvLyBJbWFnZURlY29k
ZXItb3duZWQgcG9pbnRlci4KICAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVu
ZGVybHlpbmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEKLSAgICAgICAgLy8gdHJh
bnNwYXJlbmN5LgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLQogICAgICAgICB2b2lkIHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlKGJvb2wgZmxhZykgeyBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQot
Ci0gICAgICAgIC8vIFdoZXRoZXIgb3Igbm90IHRoZSBnYW1tYSBhbmQgY29sb3IgcHJvZmlsZSBh
cmUgYXBwbGllZC4KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2ZpbGUoKSBj
b25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CiAKICAgICAgICAg
Ly8gU2V0cyB0aGUgImRlY29kZSBmYWlsdXJlIiBmbGFnLiAgRm9yIGNhbGxlciBjb252ZW5pZW5j
ZSAoc2luY2Ugc28KQEAgLTMzNCwxMyArMzAyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAKLSAgICAg
ICAgLy8gV2lwZSBvdXQgZnJhbWVzIGluIHRoZSBmcmFtZSBidWZmZXIgY2FjaGUgYmVmb3JlIHxj
bGVhckJlZm9yZUZyYW1lfCwKLSAgICAgICAgLy8gYXNzdW1pbmcgdGhpcyBjYW4gYmUgZG9uZSB3
aXRob3V0IGJyZWFraW5nIGRlY29kaW5nLiAgRGlmZmVyZW50Ci0gICAgICAgIC8vIGRlY29kZXJz
IHBsYWNlIGRpZmZlcmVudCByZXN0cmljdGlvbnMgb24gd2hhdCBmcmFtZXMgYXJlIHNhZmUgdG8K
LSAgICAgICAgLy8gZGVzdHJveSwgc28gdGhpcyBpcyBsZWZ0IHRvIHRoZW0gdG8gaW1wbGVtZW50
LgotICAgICAgICAvLyBGb3IgY29udmVuaWVuY2UncyBzYWtlLCB3ZSBwcm92aWRlIGEgZGVmYXVs
dCAoZW1wdHkpIGltcGxlbWVudGF0aW9uLAotICAgICAgICAvLyBzaW5jZSBpbiBwcmFjdGljZSBv
bmx5IEdJRnMgd2lsbCBldmVyIHVzZSB0aGlzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJG
cmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKSB7IH0KKyAgICAgICAgLy8g
Q2xlYXJzIGRlY29kZWQgcGl4ZWwgZGF0YSBmcm9tIGJlZm9yZSB0aGUgcHJvdmlkZWQgZnJhbWUg
dW5sZXNzIHRoYXQKKyAgICAgICAgLy8gZGF0YSBtYXkgYmUgbmVlZGVkIHRvIGRlY29kZSBmdXR1
cmUgZnJhbWVzIChlLmcuIGR1ZSB0byBHSUYgZnJhbWUKKyAgICAgICAgLy8gY29tcG9zaXRpbmcp
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCkgeyB9
CiAKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICB2b2lk
IHNldE1heE51bVBpeGVscyhpbnQgbSkgeyBtX21heE51bVBpeGVscyA9IG07IH0KQEAgLTM2OCw4
ICszMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGFuZCByZXR1cm4gaXQg
YXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KICAgICAgICAgc3RhdGljIGJvb2wg
aXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyB3aWR0aCAqIGhlaWdodCBtdXN0IG5vdCBleGNlZWQgKDIgXiAyOSkgLSAx
LCBzbyB0aGF0IHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBvdmVyZmxvdyB3aGVuIHdlIG11bHRp
cGx5IGJ5IDQuCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4od2lkdGgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
aGVpZ2h0KTsKICAgICAgICAgICAgIHJldHVybiB0b3RhbF9zaXplID4gKCgxIDw8IDI5KSAtIDEp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiA3NzMzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNyw3ICs3MDcsNyBAQCBCTVBJbWFnZVJlYWRlcjo6UHJv
Y2Vzc2luZ1Jlc3VsdCBCTVBJbWFnCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9zZWVuTm9uWmVyb0FscGhhUGl4ZWwgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICBpZiAobV9zZWVuWmVyb0FscGhhUGl4ZWwpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYnVmZmVyLT56ZXJvRmlsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZm
ZXItPnplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3NlZW5a
ZXJvQWxwaGFQaXhlbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFs
cGhhICE9IDI1NSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBo
YSh0cnVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nn
L0ltYWdlRGVjb2RlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHJldmlzaW9uIDc3MzM0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVy
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6
c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAgICBtX2J5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxQ
aXhlbERhdGEqPihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihtX2JhY2tpbmdTdG9yZS5nZXQoKSkp
OwogICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CiAKLSAgICB6ZXJv
RmlsbCgpOworICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NzQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMTQgKzE3NCwxNCBAQCB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhCiAgICAgVmVjdG9yPEltYWdlRnJhbWU+OjppdGVyYXRv
ciBpKGVuZCk7CiAgICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAm
JiAoKGktPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHx8IChpLT5kaXNwb3Nh
bE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpOyAtLWkp
IHsKICAgICAgICAgaWYgKChpLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRl
KSAmJiAoaSAhPSBlbmQpKQotICAgICAgICAgICAgaS0+Y2xlYXIoKTsKKyAgICAgICAgICAgIGkt
PmNsZWFyUGl4ZWxEYXRhKCk7CiAgICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0aGUgbGFz
dCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCiAgICAgZm9y
IChWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2lu
KCkpOyBqICE9IGk7ICsraikgewogICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpCi0gICAgICAgICAgICBqLT5jbGVhcigpOworICAgICAgICAgICAgai0+
Y2xlYXJQaXhlbERhdGEoKTsKICAgICB9CiB9CiAKQEAgLTI2Niw3ICsyNjYsNyBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgaWYgKCFtX2N1cnJlbnRCdWZm
ZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBUaGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFuc3Bh
cmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVzdWx0
aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFyZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhhKGZh
bHNlKS4KLSAgICAgICAgaWYgKGJ1ZmZlci5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2lu
dCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVj
dCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCiAgICAgICAg
ICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFtZUlu
ZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBub3Qg
aGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI4OSw3ICsyODksNyBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAvLyBUaGUgb25s
eSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAgSWYK
ICAgICAgICAgICAgIC8vIGl0IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0IGlzIGNvbnRhaW5l
ZCBpbiB0aGUgY3VycmVudCBmcmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0LCB3ZSBrbm93IHRo
ZSBjdXJyZW50IGZyYW1lIGhhcyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlmICgocHJldkJ1ZmZl
ci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xv
cikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250YWlucyhw
cmV2QnVmZmVyLT5yZWN0KCkpKQorICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3Nh
bE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJiAhcHJl
dkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlu
cyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKICAgICAgICAgICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzM3LDcgKzMzNyw3
IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICBpbnQgcmln
aHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKICAgICBpbnQg
dG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7CiAgICAgaW50IGJvdHRvbSA9
IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLT5z
ZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwor
ICAgIGJ1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0
IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAgICAgCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBv
biBhbnkgcHJldmlvdXMgZGF0YS4KQEAgLTM2Nyw3ICszNjcsNyBAQCBib29sIEdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0
aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lk
ZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHBy
ZXZCdWZmZXItPnJlY3QoKTsKKyAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0g
cHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0IEludFNp
emUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5k
ZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkp
KSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBm
cmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oCShyZXZpc2lvbiA3NzMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2
YWlsYWJsZSgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxw
aGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWls
ZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8v
IGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBm
cm9tIGluc2lkZQogICAgICAgICAvLyBKUEVHSW1hZ2VSZWFkZXIhCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1lUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJh
bWVRdC5jcHAJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTQg
KzUwLDE0IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdAogICAgICAg
ICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0gICAgc2V0UmVj
dChvdGhlci5yZWN0KCkpOworICAgIHNldE9yaWdpbmFsRnJhbWVSZWN0KG90aGVyLm9yaWdpbmFs
RnJhbWVSZWN0KCkpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVy
YXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlz
cG9zYWxNZXRob2QoKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6
OmNsZWFyKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fcGl4
bWFwID0gUVBpeG1hcCgpOwogICAgIG1faW1hZ2UgPSBRSW1hZ2UoKTsKQEAgLTY4LDcgKzY4LDcg
QEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhcigpCiAgICAgLy8gb3RoZXIgbWV0YWRhdGEgb3V0IG9m
IHRoaXMgZnJhbWUgbGF0ZXIuCiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGwoKQordm9p
ZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7CiAgICAgaWYgKG1fcGl4bWFwLmlz
TnVsbCgpICYmICFtX2ltYWdlLmlzTnVsbCgpKSB7CiAgICAgICAgIG1fcGl4bWFwID0gUVBpeG1h
cChtX2ltYWdlLndpZHRoKCksIG1faW1hZ2UuaGVpZ2h0KCkpOwpAQCAtMTAxLDggKzEwMSw3IEBA
IGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAgICBpZiAobV9waXht
YXAuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIFplcm8gdGhlIGlt
YWdlLgotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCShyZXZp
c2lvbiA3NzMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Nr
aWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0CiAgICAgLy8gS2VlcCB0aGUg
cGl4ZWxzIGxvY2tlZCBzaW5jZSB3ZSB3aWxsIGJlIHdyaXRpbmcgZGlyZWN0bHkgaW50byB0aGUK
ICAgICAvLyBiaXRtYXAgdGhyb3VnaG91dCB0aGlzIG9iamVjdCdzIGxpZmV0aW1lLgogICAgIG1f
Yml0bWFwLmxvY2tQaXhlbHMoKTsKLSAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CisgICAgc2V0
T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CiAgICAgc2V0U3Rh
dHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsK
ICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTU2LDcg
KzU2LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCi12b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKK3ZvaWQgSW1hZ2VGcmFt
ZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAgIG1fYml0bWFwLnJlc2V0KCk7CiAgICAgbV9zdGF0
dXMgPSBGcmFtZUVtcHR5OwpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFy
KCkKICAgICAvLyBvdGhlciBtZXRhZGF0YSBvdXQgb2YgdGhpcyBmcmFtZSBsYXRlci4KIH0KIAot
dm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCit2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4
ZWxEYXRhKCkKIHsKICAgICBtX2JpdG1hcC5lcmFzZUFSR0IoMCwgMCwgMCwgMCk7CiB9CkBAIC05
MCw4ICs5MCw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGkKICAg
ICBpZiAoIW1fYml0bWFwLmFsbG9jUGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIC8vIFplcm8gdGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7CisgICAgemVyb0ZpbGxQaXhl
bERhdGEoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VE
ZWNvZGVyLmgJKHJldmlzaW9uIDc3MzM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3QgeyByZXR1cm4gInZwOCI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxh
YmxlKCk7CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNlIG9mIGRl
Y29kaW5nIGZhaWx1cmUuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>