<?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>57960</bug_id>
          
          <creation_ts>2011-04-06 10:07:11 -0700</creation_ts>
          <short_desc>[Chromium] Accelerated 2D Canvas is slow to execute putImageData</short_desc>
          <delta_ts>2011-06-09 14:20:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Justin Novosad">junov</reporter>
          <assigned_to name="Justin Novosad">junov</assigned_to>
          <cc>caseq</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kbr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380526</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-06 10:07:11 -0700</bug_when>
    <thetext>In Chromium, with accelerated Canvas enabled, display a web page that relies heavily on putImageData for rendering such as the following Chrome experiment:
http://www.chromeexperiments.com/detail/back-to-visuals/?f=

Notice that it runs much, much slower than with the accelerated canvas disabled.

The current implementation of putImageData forces a readback from the GPU. The readback would not be necessary with a GPU-aware implementation.

Related Chromium bug:
http://code.google.com/p/chromium/issues/detail?id=78176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380567</commentid>
    <comment_count>1</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-06 10:27:45 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; In Chromium, with accelerated Canvas enabled, display a web page that relies heavily on putImageData for rendering such as the following Chrome experiment:
&gt; http://www.chromeexperiments.com/detail/back-to-visuals/?f=
&gt; 
&gt; Notice that it runs much, much slower than with the accelerated canvas disabled.
&gt; 
&gt; The current implementation of putImageData forces a readback from the GPU. The readback would not be necessary with a GPU-aware implementation.
&gt; 
&gt; Related Chromium bug:
&gt; http://code.google.com/p/chromium/issues/detail?id=78176

Another speedup could be gained by doing the unpremultiply step on the GPU (in a shader), but that can wait for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380570</commentid>
    <comment_count>2</comment_count>
      <attachid>88466</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-06 10:30:40 -0700</bug_when>
    <thetext>Created attachment 88466
Fixes putImageData performnce for gpu accelerated canvas by drawing a textured quad rather than blitting to a read-back buffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380574</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 10:33:08 -0700</bug_when>
    <thetext>Attachment 88466 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:335:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:336:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:337:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:347:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:348:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 5 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380598</commentid>
    <comment_count>4</comment_count>
      <attachid>88466</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-06 10:44:56 -0700</bug_when>
    <thetext>Comment on attachment 88466
Fixes putImageData performnce for gpu accelerated canvas by drawing a textured quad rather than blitting to a read-back buffer

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

This is a good first draft, but I think it could cleaned up.

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:344
&gt; +            context-&gt;drawImage(image.get(), ColorSpaceDeviceRGB, IntPoint(destX, destY), IntRect(0, 0, numColumns, numRows), CompositeCopy, true);

This is a bit of a mess:  you&apos;re setting state on the PlatformContextSkia, the GLES2Canvas, and then calling GraphicsContext::drawImage().  If possible, you should probably restrict yourself to one API level (probably GraphicsContext).  Do the save on there, set the CTM temporarily, etc.

Another alternative would be to avoid messing with the state at all, and use the same path that PlatformContext::uploadSoftwareToHardware() uses, namely gpuCanvas()-&gt;drawTexturedRect() (third version).  This one will bypass the CTM, clipping, compositing mode, etc entirely.  You might have to refactor out some of uploadSoftwareToHardware() (for the texture creation, etc) into a new function in PlatformContextSkia.  I&apos;d prefer this approach, if possible, since it avoids a bunch of unnecessary state change.

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:348
&gt; +        {

Single-statement clauses don&apos;t need braces (the style bot will nag you about this).  FYI, you can run the style check locally with Tools/Scripts/check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380615</commentid>
    <comment_count>5</comment_count>
      <attachid>88466</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 10:53:40 -0700</bug_when>
    <thetext>Comment on attachment 88466
Fixes putImageData performnce for gpu accelerated canvas by drawing a textured quad rather than blitting to a read-back buffer

Needs another round.  (per stylebot and stephen). Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380651</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 11:15:47 -0700</bug_when>
    <thetext>Attachment 88466 did not build on chromium:
Build output: http://queues.webkit.org/results/8344292</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381010</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-06 17:52:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Single-statement clauses don&apos;t need braces (the style bot will nag you about this).  FYI, you can run the style check locally with Tools/Scripts/check-webkit-style.

The &apos;webkit-patch upload&apos; script also runs the same style checks the bots do. check-webkit-style will report false positives on untouched regions of files containing preexisting style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381353</commentid>
    <comment_count>8</comment_count>
      <attachid>88642</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-07 08:18:56 -0700</bug_when>
    <thetext>Created attachment 88642
Response to review comments by Stephen White

The hardware rendering path no longer requires a temp buffer for swizzling or premultiplication, so this approach is even faster that the previously proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381356</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 08:21:33 -0700</bug_when>
    <thetext>Attachment 88642 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:262:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:262:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:264:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:265:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381358</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 08:23:17 -0700</bug_when>
    <thetext>Attachment 88642 did not build on chromium:
Build output: http://queues.webkit.org/results/8345589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381366</commentid>
    <comment_count>11</comment_count>
      <attachid>88645</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-07 08:38:13 -0700</bug_when>
    <thetext>Created attachment 88645
Fixed chromium linux build and style failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381383</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-07 08:55:58 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=88642&amp;action=review

OK, I like your new approach (very cool that you&apos;re doing the premultiply in hardware), but now that you&apos;re addressing this, I&apos;m going to suggest another direction:  implement putImageData() directly in GLES2Canvas (see last comment below).  Sorry that I&apos;m making you do more work, but I think this would be more in line with the design I had in mind for GLES2Canvas.  It would also allow you to leave the GPU_SKIA and software paths untouched.  Let me know what you think.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:414
&gt;  {

Rather than add another bool, we should probably create a DrawFlags enum on GLES2Canvas, and &quot;or&quot; the appropriate bits together.  (My fault for the bad precedent; see https://bugs.webkit.org/show_bug.cgi?id=52743).

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:556
&gt; +}

Now that you&apos;ve exposed this here, you could probably clean up PlatformContextSkia::uploadSoftwareToHardware a bit (can call your new function).

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:266
&gt; +    RefPtr&lt;Texture&gt; texture = platformContext-&gt;gpuCanvas()-&gt;createTexture(Texture::RGBA8, srcRowPixels, texRect.height());

Since texture creation can be expensive, it&apos;d be nice if we could cache this texture between calls, the way PlatformContextSkia does.  I wonder if it might be better to simply have a GLES2Canvas::putImageData() function that takes a void* (or ByteArray), and manages the texture internally, does the upload, and draw.  You could short-circuit ImageBuffer::put*ImageData() and early-return in the GPU case, and leave the rest of the code the same.  This would require some cut-and-paste from the existing code (the sourceRect and destPoint computation, and all that), but that&apos;s ok.

The idea with GLES2Canvas was that it eventually would implement the whole GraphicsContext API, so eventually it should be weaned off any code in platform/graphics/skia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381649</commentid>
    <comment_count>13</comment_count>
      <attachid>88645</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-07 13:39:02 -0700</bug_when>
    <thetext>Comment on attachment 88645
Fixed chromium linux build and style failures

Could you address Stephen&apos;s review feedback? Marking r- as he is the expert in this area and it looks like more work is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383181</commentid>
    <comment_count>14</comment_count>
      <attachid>89010</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-11 08:38:24 -0700</bug_when>
    <thetext>Created attachment 89010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383272</commentid>
    <comment_count>15</comment_count>
      <attachid>89010</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-11 10:51:50 -0700</bug_when>
    <thetext>Comment on attachment 89010
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:44
&gt; +#include &quot;NativeImageSkia.h&quot;

This shouldn&apos;t be necessary (and should be protected by #if USE(SKIA) if it is).

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:410
&gt; +    drawTexturedRect(texture, srcRect, dstRect, m_state-&gt;m_ctm, m_state-&gt;m_alpha, colorSpace, compositeOp, m_state-&gt;clippingEnabled() ? DrawTextureClip : 0);

&quot;DrawTextureClip&quot; is a little ambiguous.  I know what it means, but a future reader might confuse it with &quot;draw the texture&apos;s clip&quot; or something.  Same for &quot;DrawTextureMultiply&quot;.  What is it multiplying?  Since the enum is scoped to GLES2Canvas, maybe we could just skip the &quot;DrawTexture&quot; prefix and make the enums &quot;EnableClipping&quot; and &quot;MultiplySourceAlpha&quot;.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:414
&gt; +void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform, float alpha, ColorSpace colorSpace, CompositeOperator compositeOp, unsigned opt)

This should be &quot;drawTextureOptions&quot;, as it is in the .h, rather than &quot;opt&quot;.  Actually, there seems to be more precedent for Flags in WebKit that Options, so I&apos;d call this DrawTextureFlags.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.h:62
&gt; +

See above:  How about DrawTextureFlags, consisting of EnableClipping and MultiplySourceAlpha.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.h:96
&gt; +    // This version is called by the above, by putImageDataHardware, and by the software-&gt;hardware uploads.

putImageDataHardware -&gt; putImageData.

&gt; Source/WebCore/platform/graphics/gpu/Texture.cpp:170
&gt; +    bool needTempBuff = swizzle || updateRect.width() != m_tiles.totalSizeY() || m_tiles.numTilesX() &gt; 1;

Hmmm.  This is comparing width against totalSizeY().  Is this correct?  Should we compare both width and height?

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:342
&gt; +    putImageData(source, sourceSize, sourceRect, destPoint, context()-&gt;platformContext(), m_size, Unmultiplied);

Please put the useGPU() check here and change the signature of the GLES2Canvas function to match that of ImageBuffer, as we discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383405</commentid>
    <comment_count>16</comment_count>
      <attachid>89010</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-11 13:01:31 -0700</bug_when>
    <thetext>Comment on attachment 89010
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gpu/Texture.cpp:170
&gt;&gt; +    bool needTempBuff = swizzle || updateRect.width() != m_tiles.totalSizeY() || m_tiles.numTilesX() &gt; 1;
&gt; 
&gt; Hmmm.  This is comparing width against totalSizeY().  Is this correct?  Should we compare both width and height?

Ooh, good catch, I obviously mean totalSizeX().  No need to check height here.  What we are verifying with this condition is that row stride is equal to row data size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383596</commentid>
    <comment_count>17</comment_count>
      <attachid>89010</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-11 15:27:17 -0700</bug_when>
    <thetext>Comment on attachment 89010
Patch

Needs revision per Stephen&apos;s review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385009</commentid>
    <comment_count>18</comment_count>
      <attachid>89404</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-13 11:00:00 -0700</bug_when>
    <thetext>Created attachment 89404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385022</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-13 11:13:16 -0700</bug_when>
    <thetext>Stephen, would you do the unofficial review of Justin&apos;s latest patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385035</commentid>
    <comment_count>20</comment_count>
      <attachid>89404</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-13 11:24:57 -0700</bug_when>
    <thetext>Comment on attachment 89404
Patch

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

Looks good.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:420
&gt; +        // The multiply option hijacks the blend func, so it can&apos;t be combine with a compositing op

nit:  combine -&gt; combined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385046</commentid>
    <comment_count>21</comment_count>
      <attachid>89404</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-13 11:34:03 -0700</bug_when>
    <thetext>Comment on attachment 89404
Patch

Thanks, Stephen; r=me . Justin, let me know if you want to land this as is (mark it &quot;cq?&quot;) or do an update to the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385080</commentid>
    <comment_count>22</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-13 11:48:48 -0700</bug_when>
    <thetext>I will make the correction.  In the mean-time I am rerunning gpu layout tests just to be safe &apos;cause I hadn&apos;t rerun them with the very last code iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385084</commentid>
    <comment_count>23</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-13 11:50:25 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; I will make the correction.  In the mean-time I am rerunning gpu layout tests just to be safe &apos;cause I hadn&apos;t rerun them with the very last code iteration.

Abort! I have a layout test failure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385305</commentid>
    <comment_count>24</comment_count>
      <attachid>89479</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-13 15:29:42 -0700</bug_when>
    <thetext>Created attachment 89479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385310</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-13 15:33:30 -0700</bug_when>
    <thetext>Attachment 89479 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/canv...&quot; exit_code: 1

Source/WebCore/ChangeLog:31:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385426</commentid>
    <comment_count>26</comment_count>
      <attachid>89479</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-13 18:20:41 -0700</bug_when>
    <thetext>Comment on attachment 89479
Patch

Sorry but could you please fix the style issue? If you use &quot;webkit-patch upload&quot; it should catch these things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385877</commentid>
    <comment_count>27</comment_count>
      <attachid>89479</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-14 10:58:33 -0700</bug_when>
    <thetext>Comment on attachment 89479
Patch

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

&gt; LayoutTests/canvas/philip/tests/2d.gradient.interpolate.colouralpha.html:-22
&gt; -_assertPixelApprox(canvas, 75,25, 63,63,191,191, &quot;75,25&quot;, &quot;63,63,191,191&quot;, 3);

Unfortunately, since this is in canvas/philip, was can&apos;t really modify the expected results:   they will get overwritten when the test suite is next updated.  However, since it&apos;s just the one test, we can probably log a bug, mark this in test_expectations as failing and deal with it later.  (Justin explained to me offline that this failure is due to skia doing some compositing internally with gradients that does not use rounding).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385912</commentid>
    <comment_count>28</comment_count>
      <attachid>89613</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-04-14 11:40:22 -0700</bug_when>
    <thetext>Created attachment 89613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385947</commentid>
    <comment_count>29</comment_count>
      <attachid>89613</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-14 12:18:22 -0700</bug_when>
    <thetext>Comment on attachment 89613
Patch

Stephen, could you re-review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385997</commentid>
    <comment_count>30</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-14 13:28:48 -0700</bug_when>
    <thetext>Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386022</commentid>
    <comment_count>31</comment_count>
      <attachid>89613</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-14 14:12:18 -0700</bug_when>
    <thetext>Comment on attachment 89613
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386390</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 22:41:06 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 89613:

http/tests/workers/shared-worker-importScripts.html bug 58634 (author: atwilson@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386391</commentid>
    <comment_count>33</comment_count>
      <attachid>89613</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 22:43:45 -0700</bug_when>
    <thetext>Comment on attachment 89613
Patch

Clearing flags on attachment: 89613

Committed r83949: &lt;http://trac.webkit.org/changeset/83949&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386392</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 22:43:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386416</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 23:44:20 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 89613:

inspector/debugger/source-frame.html bug 57399 (author: podivilov@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386479</commentid>
    <comment_count>36</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-04-15 01:58:31 -0700</bug_when>
    <thetext>This broke 31 layout tests on chromium linux &amp; windows:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Linux/builds/6074

I&apos;m going to rollback, the diffs look quite big.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386487</commentid>
    <comment_count>37</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-04-15 02:30:05 -0700</bug_when>
    <thetext>Reverted r83949 for reason:

broke 31 tests in chromium win &amp; linux

Committed r83960: &lt;http://trac.webkit.org/changeset/83960&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418290</commentid>
    <comment_count>38</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2011-06-09 14:20:54 -0700</bug_when>
    <thetext>This bug is no longer relevant, now that the accelerated 2d canvas renders through skia. Performance of the skia rendering path is good since there is no readback from the GPU when putImageData is called.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88466</attachid>
            <date>2011-04-06 10:30:40 -0700</date>
            <delta_ts>2011-04-07 08:18:56 -0700</delta_ts>
            <desc>Fixes putImageData performnce for gpu accelerated canvas by drawing a textured quad rather than blitting to a read-back buffer</desc>
            <filename>putImageData_wk.patch</filename>
            <type>text/plain</type>
            <size>7259</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDY0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDQtMDYgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyByZW5kZXIgcGVyZm9ybWFuY2Ugb2YgdGhlIGNh
bnZhcyBwdXRJbWFnZURhdGEgbWV0aG9kCisgICAgICAgIHdpdGggQ2hyb21lIGFjY2VsZXJhdGVk
IGNhbnZhcyBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTc5NjAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcDoKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gdGVtcG9yYXJpbHkg
ZGlzYWJsZSBjbGlwcGluZyBwYXRocyBieSBhZGRpbmcKKyAgICAgICAgYW4gbV9jbGlwcGluZ011
dGVkIGJvb2wgdmFsdWUgdG8gdGhlIGNhbnZhcyBzdGF0ZQorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICBpbXBsZW1lbnRlZCBhIGdwdS1z
cGVjaWZpYyByZW5kZXJpbmcgcGF0aCBmb3IgcHV0SW1hZ2VEYXRhLiBUaGlzCisgICAgICAgIHBh
dGggZG9lcyBub3QgcmVxdWlyZSBzeW5jaHJvbml6aW5nIHRoZSBzb2Z0d2FyZSBkcmF3IGJ1ZmZl
ci4KKwogMjAxMS0wNC0wNiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXphY2guCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuY3BwCShyZXZpc2lvbiA4Mjk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNiAr
ODMsNyBAQAogICAgICAgICAsIG1fc2hhZG93T2Zmc2V0KDAsIDApCiAgICAgICAgICwgbV9zaGFk
b3dCbHVyKDApCiAgICAgICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKKyAg
ICAgICAgLCBtX2NsaXBwaW5nTXV0ZWQoZmFsc2UpCiAgICAgewogICAgIH0KICAgICBTdGF0ZShj
b25zdCBTdGF0ZSYgb3RoZXIpCkBAIC05Niw2ICs5Nyw3IEBACiAgICAgICAgICwgbV9zaGFkb3dP
ZmZzZXQob3RoZXIubV9zaGFkb3dPZmZzZXQpCiAgICAgICAgICwgbV9zaGFkb3dCbHVyKG90aGVy
Lm1fc2hhZG93Qmx1cikKICAgICAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG90aGVy
Lm1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCisgICAgICAgICwgbV9jbGlwcGluZ011dGVkKG90
aGVyLm1fY2xpcHBpbmdNdXRlZCkKICAgICB7CiAgICAgfQogICAgIENvbG9yIG1fZmlsbENvbG9y
OwpAQCAtMTA4LDYgKzExMCw3IEBACiAgICAgRmxvYXRTaXplIG1fc2hhZG93T2Zmc2V0OwogICAg
IGZsb2F0IG1fc2hhZG93Qmx1cjsKICAgICBib29sIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
CisgICAgYm9vbCBtX2NsaXBwaW5nTXV0ZWQ7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9y
IGFwcGx5aW5nIHRoZSBzdGF0ZSdzIGFscGhhIHZhbHVlIHRvIHRoZSBnaXZlbiBpbnB1dAogICAg
IC8vIGNvbG9yIHRvIHByb2R1Y2UgYSBuZXcgb3V0cHV0IGNvbG9yLiBUaGUgbG9naWMgaXMgdGhl
IHNhbWUgYXMKQEAgLTEyNyw3ICsxMzAsNyBAQAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc2hh
ZG93Q29sb3IuYWxwaGEoKSA+IDAgJiYgKG1fc2hhZG93Qmx1ciB8fCBtX3NoYWRvd09mZnNldC53
aWR0aCgpIHx8IG1fc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKICAgICB9Ci0gICAgYm9vbCBjbGlw
cGluZ0VuYWJsZWQoKSB7IHJldHVybiBtX251bUNsaXBwaW5nUGF0aHMgPiAwOyB9CisgICAgYm9v
bCBjbGlwcGluZ0VuYWJsZWQoKSB7IHJldHVybiAhbV9jbGlwcGluZ011dGVkICYmIG1fbnVtQ2xp
cHBpbmdQYXRocyA+IDA7IH0KIH07CiAKIHN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRv
ciooY29uc3QgRmxvYXRQb2ludCYgZiwgZmxvYXQgc2NhbGUpCkBAIC01MzksNiArNTQyLDExIEBA
CiAgICAgbV9zdGF0ZS0+bV9jb21wb3NpdGVPcCA9IG9wOwogfQogCit2b2lkIEdMRVMyQ2FudmFz
OjpzZXRDbGlwcGluZ011dGVkKGJvb2wgY2xpcHBpbmdNdXRlZCkKK3sKKyAgICBtX3N0YXRlLT5t
X2NsaXBwaW5nTXV0ZWQgPSBjbGlwcGluZ011dGVkOworfQorCiBUZXh0dXJlKiBHTEVTMkNhbnZh
czo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIsIFRleHR1cmU6OkZvcm1hdCBmb3Jt
YXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVh
dGVUZXh0dXJlKHB0ciwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMu
aAkocmV2aXNpb24gODI5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMkNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBACiAg
ICAgdm9pZCBzZXRTaGFkb3dCbHVyKGZsb2F0KTsKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yKTsKKyAgICB2b2lkIHNldENsaXBwaW5nTXV0ZWQoYm9vbCk7CiAgICAgdm9pZCB0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CiAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpOwogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCShyZXZpc2lvbiA4Mjk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYx
LDcgKzI2MSw3IEBACiAKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgogdm9pZCBwdXRJ
bWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LAotICAg
ICAgICAgICAgICAgICAgU2tEZXZpY2UqIGRzdERldmljZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
KyAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7CiAgICAgQVNT
RVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKQEAgLTI5MSwxNSArMjkxLDIwIEBACiAKICAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7CiAKLSAg
ICBTa0JpdG1hcCBkZXZpY2VCaXRtYXAgPSBkc3REZXZpY2UtPmFjY2Vzc0JpdG1hcCh0cnVlKTsK
KyAgICBTa0JpdG1hcCBkZXZpY2VCaXRtYXA7CisgICAgLy8gSWYgdGhlIGRldmljZSdzIGJpdG1h
cCBkb2Vzbid0IGhhdmUgcGl4ZWxzIG9yIGlmIHVzaW5nIHRoZSBHUFUsIHdlIHdpbGwgbWFrZSBh
IHRlbXAgYW5kIGNhbGwgZHJhd0ltYWdlIG9uIHRoZSBjb250ZXh0LgorICAgIGJvb2wgdGVtcG9y
YXJ5Qml0bWFwID0gdHJ1ZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRl
eHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBib29sIHVzZUdQVSA9IHBsYXRm
b3JtQ29udGV4dC0+dXNlR1BVKCk7CisgICAgaWYgKCF1c2VHUFUpIHsKKyAgICAgICAgZGV2aWNl
Qml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2Uo
KS0+YWNjZXNzQml0bWFwKHRydWUpOworICAgICAgICB0ZW1wb3JhcnlCaXRtYXAgPSAhZGV2aWNl
Qml0bWFwLmdldFBpeGVscygpOworICAgIH0KICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGRldmljZUF1
dG9Mb2NrKGRldmljZUJpdG1hcCk7CisgICAgU2tCaXRtYXAgZGVzdEJpdG1hcDsgICAgCiAKLSAg
ICAvLyBJZiB0aGUgZGV2aWNlJ3MgYml0bWFwIGRvZXNuJ3QgaGF2ZSBwaXhlbHMgd2Ugd2lsbCBt
YWtlIGEgdGVtcCBhbmQgY2FsbCB3cml0ZVBpeGVscyBvbiB0aGUgZGV2aWNlLgotICAgIGJvb2wg
dGVtcG9yYXJ5Qml0bWFwID0gIWRldmljZUJpdG1hcC5nZXRQaXhlbHMoKTsKLSAgICBTa0JpdG1h
cCBkZXN0Qml0bWFwOwotCiAgICAgaWYgKHRlbXBvcmFyeUJpdG1hcCkgewotICAgICAgICBkZXN0
Qml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIG51bUNvbHVtbnMs
IG51bVJvd3MsIHNyY0J5dGVzUGVyUm93KTsKKyAgICAgICAgZGVzdEJpdG1hcC5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBudW1Db2x1bW5zLCBudW1Sb3dzLCBudW1Db2x1
bW5zKjQpOwogICAgICAgICBpZiAoIWRlc3RCaXRtYXAuYWxsb2NQaXhlbHMoKSkKICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgfSBlbHNlCkBAIC0zMjQsMjEgKzMyOSwzNiBAQAogICAgICAgICBz
cmNSb3cgKz0gc3JjQnl0ZXNQZXJSb3c7CiAgICAgfQogCi0gICAgLy8gSWYgd2UgdXNlZCBhIHRl
bXBvcmFyeSB0aGVuIHdyaXRlIGl0IHRvIHRoZSBkZXZpY2UKLSAgICBpZiAodGVtcG9yYXJ5Qml0
bWFwKQotICAgICAgICBkc3REZXZpY2UtPndyaXRlUGl4ZWxzKGRlc3RCaXRtYXAsIGRlc3RYLCBk
ZXN0WSk7CisgICAgLy8gSWYgd2UgdXNlZCBhIHRlbXBvcmFyeSB0aGVuIHdyaXRlIGl0IHRvIHRo
ZSBjYW52YXMKKyAgICBpZiAodGVtcG9yYXJ5Qml0bWFwKSB7CisgICAgICAgIGlmICh1c2VHUFUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFt
ZVNraWE+IGltYWdlID0gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZShkZXN0Qml0
bWFwLCBmYWxzZSk7CisgICAgICAgICAgICAvL3Jlc2V0IGNhbnZhcyBtYXRyaXggYW5kIGFscGhh
CisgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7CisgICAgICAgICAgICBwbGF0
Zm9ybUNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Z3B1Q2Fu
dmFzKCktPnNldENUTShpZGVudGl0eSk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPnNl
dEFscGhhKDEuMGYpOworICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5zZXRGaWxsU2hhZGVy
KDApOworICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5ncHVDYW52YXMoKS0+c2V0Q2xpcHBp
bmdNdXRlZCh0cnVlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQo
KSwgQ29sb3JTcGFjZURldmljZVJHQiwgSW50UG9pbnQoZGVzdFgsIGRlc3RZKSwgSW50UmVjdCgw
LCAwLCBudW1Db2x1bW5zLCBudW1Sb3dzKSwgQ29tcG9zaXRlQ29weSwgdHJ1ZSk7CisgICAgICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+Z2V0RGV2aWNlKCktPndyaXRlUGl4ZWxzKGRlc3RCaXRtYXAsIGRlc3RYLCBkZXN0WSk7
CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGll
ZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsK
LSAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsK
LSAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJj
ZVJlY3QsIGRlc3RQb2ludCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PmdldERldmljZSgpLCBtX3NpemUpOworICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNv
dXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBjb250ZXh0KCksIG1fc2l6
ZSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoQnl0
ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7Ci0gICAgcHV0SW1hZ2VE
YXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBv
aW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2aWNlKCks
IG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBjb250ZXh0KCksIG1fc2l6ZSk7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgo=
</data>
<flag name="review"
          id="80971"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88642</attachid>
            <date>2011-04-07 08:18:56 -0700</date>
            <delta_ts>2011-04-07 08:38:13 -0700</delta_ts>
            <desc>Response to review comments by Stephen White</desc>
            <filename>putImageData.patch</filename>
            <type>text/plain</type>
            <size>13397</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDQtMDcgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyByZW5kZXIgcGVyZm9ybWFuY2Ugb2YgdGhlIGNh
bnZhcyBwdXRJbWFnZURhdGEgbWV0aG9kCisgICAgICAgIHdpdGggQ2hyb21lIGFjY2VsZXJhdGVk
IGNhbnZhcyBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTc5NjAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVy
ZWRSZWN0KToKKyAgICAgICAgTWV0aG9kIGhhcyBhIG5ldyBhcmd1bWVudCB0aGF0IHNwZWNpZmll
cyB3aGV0aGVyIHRvIHVzZSBoYXJkd2FyZQorICAgICAgICBibGVuZGluZyBjYXBhYmlsaXRpZXMg
Zm9yIGFscGhhIG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIGNvbXBvc2l0aW5nCisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIE5ldyBvdmVy
bG9hZCBmb3IgY3JlYXRpbmcgYSB0ZXh0dXJlIHdpdGggbG9hZGluZyBhIGJpdG1hcCByaWdodCBh
d2F5CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwdXRJbWFnZURhdGFIYXJkd2FyZSk6CisgICAgICAgIE5ldyBmdW5j
dGlvbiBmb3IgYmxpdHRpbmcgaW1hZ2UgZGF0YSB0byBhbiBpbWFnZSBidWZmZXIgdXNpbmcgYSBH
UFUKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIHBhdGgKKyAgICAgICAgKFdlYkNvcmU6
OnB1dEltYWdlRGF0YVNvZnR3YXJlKToKKyAgICAgICAgU29mdHdhcmUgcmVuZGVyaW5nIHBhdGgg
Zm9yIGJsaXR0aW5nIGltYWdlIGRhdGEgdG8gYW4gaW1hZ2UgYnVmZmVyLgorICAgICAgICBDb2Rl
IHdhcyBmYWN0b3JlZC1vdXQgZnJvbSBwdXRJbWFnZURhdGEKKyAgICAgICAgKFdlYkNvcmU6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgIEZhY3RvcmVkLW91dCBjb2RlIHRoYXQgaXMgc3BlY2lmaWMg
dG8gdGhlIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoCisgICAgICAgIENob3NlcyBiZXR3ZWVuIFNX
IGFuZCBHUFUgcmVuZGVyaW5nIHBhdGgKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICBSZW1vdmVkIHNvZnR3YXJlIGJ1ZmZl
ciBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGlzIG5vIGxvbmdlcgorICAgICAgICBuZWNlc3Nhcnkg
ZXZlbiB3aXRoIEdQVSByZW5kZXJpbmcgZW5hYmxlZC4gIFRoaXMgd2FzIHRoZSBtYWluIAorICAg
ICAgICBwZXJmb3JtYW5jZSBpc3N1ZSBmaXhlZCBieSB0aGlzIHBhdGNoCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIGli
aWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3
YXJlVG9IYXJkd2FyZSk6CisgICAgICAgIGFkYXB0ZWQgdG8gbmV3IHNpZ25hdHVyZSBvZiBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdAorCiAyMDExLTA0LTA2ICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gODI5NDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwNiwxNCArNDA2LDIwIEBACiAKIHZvaWQgR0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJl
LCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29s
b3JTcGFjZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpKTsKKyAgICBk
cmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3Rt
LCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgbV9zdGF0ZS0+Y2xp
cHBpbmdFbmFibGVkKCksIGZhbHNlKTsKIH0KIAogCi12b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
ZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3AsIGJvb2wgY2xpcCkKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3Qo
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBo
YSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwg
Ym9vbCBjbGlwLCBib29sIG11bHRpcGx5KQogewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAg
IG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CisgICAgLy8g
U2V0dGluZyBtdWx0aXBseSB0byB0cnVlIG92ZXJyaWRlcyB0aGUgY29tcG9zaXRlIG9wZXJhdG9y
CisgICAgaWYgKG11bHRpcGx5KSB7CisgICAgICAgIC8vIEN1c3RvbSBjb21wb3NpdGUgb3BlcmF0
aW9uIHRoYXQgcGVyZm9ybXMgYWxwaGEgbXVsdGlwbGljYXRpb24gb24gY29sb3IgY29tcG9uZW50
cworICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPmJsZW5kRnVuY1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEsIEdyYXBo
aWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRl
eHQzRDo6WkVSTyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CiAgICAgYXBwbHlDbGlwcGluZyhjbGlwKTsKICAgICBj
b25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAgICAgSW50UmVjdCB0
aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKQEAgLTU0
NCw2ICs1NTAsMTEgQEAKICAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKHB0ciwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0dXJlPiBHTEVTMkNh
bnZhczo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCiBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZShO
YXRpdmVJbWFnZVB0ciBwdHIpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShw
dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xF
UzJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCShyZXZpc2lvbiA4Mjk0MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDkgKzg4LDEwIEBACiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVk
IHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOwogICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmRy
YXcoKS4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7Ci0gICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUs
IGFuZCBieSB0aGUgc29mdHdhcmUtPmhhcmR3YXJlIHVwbG9hZHMuCi0gICAgdm9pZCBkcmF3VGV4
dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBib29sIGNsaXApOworICAgIC8vIFRoaXMgdmVyc2lv
biBpcyBjYWxsZWQgYnkgdGhlIGFib3ZlLCBieSBwdXRJbWFnZURhdGFIYXJkd2FyZSwgYW5kIGJ5
IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJl
Y3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgY2xpcCwgYm9vbCBtdWx0aXBseSk7CiAgICAgVGV4dHVy
ZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgVGV4dHVyZSogZ2V0
VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwCShyZXZpc2lvbiA4Mjk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3MCw3ICs4NzAsNyBAQAogCiAgICAgbV91cGxvYWRUZXh0dXJlLT51cGRhdGVTdWJSZWN0KGJp
dG1hcC5nZXRQaXhlbHMoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGlkZW50aXR5OwotICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2Fk
VGV4dHVyZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwg
aWRlbnRpdHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJHQiwgb3AsIGZhbHNlKTsKKyAgICBncHVD
YW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRleHR1cmUuZ2V0KCksIG1fc29mdHdh
cmVEaXJ0eVJlY3QsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIGlkZW50aXR5LCAxLjAsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIG9wLCBmYWxzZSwgZmFsc2UpOwogICAgIC8vIENsZWFyIG91dCB0aGUgcmVn
aW9uIG9mIHRoZSBzb2Z0d2FyZSBjYW52YXMgd2UganVzdCB1cGxvYWRlZC4KICAgICBtX2NhbnZh
cy0+c2F2ZSgpOwogICAgIG1fY2FudmFzLT5yZXNldE1hdHJpeCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkocmV2aXNpb24gODI5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwzOCAr
MjU5LDIxIEBACiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihyZWN0LCAq
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpLCBtX3Np
emUpOwogfQogCit2b2lkIHB1dEltYWdlRGF0YUhhcmR3YXJlKEJ5dGVBcnJheSogc291cmNlLCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGludCBzcmNSb3dQaXhlbHMsIE11bHRp
cGx5IG11bHRpcGxpZWQpeworICAgIHBsYXRmb3JtQ29udGV4dC0+cHJlcGFyZUZvckhhcmR3YXJl
RHJhdygpOworICAgIEludFJlY3QgdGV4UmVjdChJbnRQb2ludCgwLDApLHNvdXJjZVJlY3Quc2l6
ZSgpKTsKKyAgICAvL1RleHR1cmUgaGFzIG5vIG1ldGhvZCBmb3Igc3BlY2lmeWluZyBhIHJvdyBz
dHJpZGUgZm9yIHRoZSBzb3VyY2UgZGF0YSwgc28gd2UgY3JlYXRlIGEgdGV4dHVyZSB0aGF0IGhh
cyB0aGUgd2lkdGggb2YgdGhlIHNvdXJjZSBidWZmZXIKKyAgICBSZWZQdHI8VGV4dHVyZT4gdGV4
dHVyZSA9IHBsYXRmb3JtQ29udGV4dC0+Z3B1Q2FudmFzKCktPmNyZWF0ZVRleHR1cmUoVGV4dHVy
ZTo6UkdCQTgsIHNyY1Jvd1BpeGVscywgdGV4UmVjdC5oZWlnaHQoKSk7CisgICAgdGV4dHVyZS0+
dXBkYXRlU3ViUmVjdChzb3VyY2UtPmRhdGEoKSArIChzb3VyY2VSZWN0LnkoKSAqIHNyY1Jvd1Bp
eGVscyArIHNvdXJjZVJlY3QueCgpKSAqIDQsIHRleFJlY3QpOworICAgIEFmZmluZVRyYW5zZm9y
bSBpZGVudGl0eTsKKyAgICBGbG9hdFJlY3QgZmx0VGV4UmVjdCh0ZXhSZWN0KTsKKyAgICBGbG9h
dFJlY3QgZmx0RGVzdFJlY3QoRmxvYXRQb2ludChkZXN0UG9pbnQpLCBmbHRUZXhSZWN0LnNpemUo
KSk7CisgICAgcGxhdGZvcm1Db250ZXh0LT5ncHVDYW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdCh0
ZXh0dXJlLmdldCgpLCBmbHRUZXhSZWN0LCBmbHREZXN0UmVjdCwgaWRlbnRpdHksIDEuMGYsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHksIGZhbHNlLCBVbm11bHRpcGxpZWQgPT0g
bXVsdGlwbGllZCk7Cit9CisKIHRlbXBsYXRlIDxNdWx0aXBseSBtdWx0aXBsaWVkPgotdm9pZCBw
dXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LAot
ICAgICAgICAgICAgICAgICAgU2tEZXZpY2UqIGRzdERldmljZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhU29mdHdhcmUoQnl0ZUFycmF5KiYgc291cmNlLCBTa0Rldmlj
ZSogZHN0RGV2aWNlLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZHN0
UG9pbnQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93KQogewotICAgIEFTU0VSVChzb3VyY2VSZWN0
LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0g
ICAgaW50IG9yaWdpblggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgZGVzdFggPSBkZXN0UG9p
bnQueCgpICsgc291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJUKGRlc3RYID49IDApOwotICAgIEFT
U0VSVChkZXN0WCA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpblggPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpblggPCBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5kWCA9
IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5kWCA8PSBz
aXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmRYIC0gZGVzdFg7Ci0KLSAg
ICBpbnQgb3JpZ2luWSA9IHNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0WSA9IGRlc3RQb2lu
dC55KCkgKyBzb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdFkgPj0gMCk7Ci0gICAgQVNT
RVJUKGRlc3RZIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpblkgPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpblkgPCBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5kWSA9
IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBBU1NFUlQoZW5kWSA8PSBz
aXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZFkgLSBkZXN0WTsKLQotICAgIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLQogICAgIFNr
Qml0bWFwIGRldmljZUJpdG1hcCA9IGRzdERldmljZS0+YWNjZXNzQml0bWFwKHRydWUpOwogICAg
IFNrQXV0b0xvY2tQaXhlbHMgZGV2aWNlQXV0b0xvY2soZGV2aWNlQml0bWFwKTsKIApAQCAtMjk5
LDE4ICsyODIsMTggQEAKICAgICBTa0JpdG1hcCBkZXN0Qml0bWFwOwogCiAgICAgaWYgKHRlbXBv
cmFyeUJpdG1hcCkgewotICAgICAgICBkZXN0Qml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FS
R0JfODg4OF9Db25maWcsIG51bUNvbHVtbnMsIG51bVJvd3MsIHNyY0J5dGVzUGVyUm93KTsKKyAg
ICAgICAgZGVzdEJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBz
cmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIHNyY0J5dGVzUGVyUm93KTsKICAgICAg
ICAgaWYgKCFkZXN0Qml0bWFwLmFsbG9jUGl4ZWxzKCkpCiAgICAgICAgICAgICBDUkFTSCgpOwog
ICAgIH0gZWxzZQotICAgICAgICBkZXZpY2VCaXRtYXAuZXh0cmFjdFN1YnNldCgmZGVzdEJpdG1h
cCwgU2tJUmVjdDo6TWFrZVhZV0goZGVzdFgsIGRlc3RZLCBudW1Db2x1bW5zLCBudW1Sb3dzKSk7
CisgICAgICAgIGRldmljZUJpdG1hcC5leHRyYWN0U3Vic2V0KCZkZXN0Qml0bWFwLCBTa0lSZWN0
OjpNYWtlWFlXSChkc3RQb2ludC54KCksIGRzdFBvaW50LnkoKSwgc3JjUmVjdC53aWR0aCgpLCBz
cmNSZWN0LmhlaWdodCgpKSk7CiAKICAgICAvLyBXaGV0aGVyIHdlIG1hZGUgYSB0ZW1wb3Jhcnkg
b3Igbm90IGRlc3RCaXRtYXAgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgdG8gYmUgd3JpdHRlbiBhdCAw
LDAKICAgICBTa0F1dG9Mb2NrUGl4ZWxzIGRlc3RBdXRvTG9jayhkZXN0Qml0bWFwKTsKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3VyY2UtPmRhdGEoKSArIG9yaWdpblkgKiBz
cmNCeXRlc1BlclJvdyArIG9yaWdpblggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVt
Um93czsgKyt5KSB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjUm93ID0gc291cmNlLT5k
YXRhKCkgKyBzcmNSZWN0LnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdC54KCkgKiA0Owor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc3JjUmVjdC5oZWlnaHQoKTsgKyt5KSB7CiAgICAgICAg
IFNrUE1Db2xvciogZGVzdFJvdyA9IGRlc3RCaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7ICsreCkgeworICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHNyY1JlY3Qud2lkdGgoKTsgKyt4KSB7CiAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyKiBzcmNQaXhlbCA9ICZzcmNSb3dbeCAqIDRdOwogICAgICAgICAgICAgaWYg
KG11bHRpcGxpZWQgPT0gVW5tdWx0aXBsaWVkKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBhbHBoYSA9IHNyY1BpeGVsWzNdOwpAQCAtMzI2LDE5ICszMDksNTYgQEAKIAogICAgIC8v
IElmIHdlIHVzZWQgYSB0ZW1wb3JhcnkgdGhlbiB3cml0ZSBpdCB0byB0aGUgZGV2aWNlCiAgICAg
aWYgKHRlbXBvcmFyeUJpdG1hcCkKLSAgICAgICAgZHN0RGV2aWNlLT53cml0ZVBpeGVscyhkZXN0
Qml0bWFwLCBkZXN0WCwgZGVzdFkpOworICAgICAgICBkc3REZXZpY2UtPndyaXRlUGl4ZWxzKGRl
c3RCaXRtYXAsIGRzdFBvaW50LngoKSwgZHN0UG9pbnQueSgpKTsKIH0KIAordm9pZCBwdXRJbWFn
ZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LAorICAgICAg
ICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBJ
bnRTaXplJiBzaXplLCBNdWx0aXBseSBtdWx0aXBsaWVkKQoreworICAgIEFTU0VSVChzb3VyY2VS
ZWN0LndpZHRoKCkgPiAwKTsKKyAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwor
CisgICAgaW50IG9yaWdpblggPSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgZGVzdFggPSBkZXN0
UG9pbnQueCgpICsgc291cmNlUmVjdC54KCk7CisgICAgQVNTRVJUKGRlc3RYID49IDApOworICAg
IEFTU0VSVChkZXN0WCA8IHNpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKG9yaWdpblggPj0gMCk7
CisgICAgQVNTRVJUKG9yaWdpblggPCBzb3VyY2VSZWN0Lm1heFgoKSk7CisKKyAgICBpbnQgZW5k
WCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsKKyAgICBBU1NFUlQoZW5kWCA8
PSBzaXplLndpZHRoKCkpOworCisgICAgaW50IG9yaWdpblkgPSBzb3VyY2VSZWN0LnkoKTsKKyAg
ICBpbnQgZGVzdFkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC55KCk7CisgICAgQVNTRVJU
KGRlc3RZID49IDApOworICAgIEFTU0VSVChkZXN0WSA8IHNpemUuaGVpZ2h0KCkpOworICAgIEFT
U0VSVChvcmlnaW5ZID49IDApOworICAgIEFTU0VSVChvcmlnaW5ZIDwgc291cmNlUmVjdC5tYXhZ
KCkpOworCisgICAgaW50IGVuZFkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5tYXhZKCk7
CisgICAgQVNTRVJUKGVuZFkgPD0gc2l6ZS5oZWlnaHQoKSk7CisKKyAgICBJbnRQb2ludCBuZXdE
ZXN0UG9pbnQoZGVzdFgsIGRlc3RZKTsKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0LT51c2VHUFUo
KSkKKyAgICAgICAgcHV0SW1hZ2VEYXRhSGFyZHdhcmUoc291cmNlLCBwbGF0Zm9ybUNvbnRleHQs
IHNvdXJjZVJlY3QsIG5ld0Rlc3RQb2ludCwgc291cmNlU2l6ZS53aWR0aCgpLCBtdWx0aXBsaWVk
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2tEZXZpY2UqIGRldmljZSA9IHBsYXRmb3JtQ29udGV4
dC0+Y2FudmFzKCktPmdldERldmljZSgpOworICAgICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7CisgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVu
bXVsdGlwbGllZCkKKyAgICAgICAgICAgIHB1dEltYWdlRGF0YVNvZnR3YXJlPFVubXVsdGlwbGll
ZD4oc291cmNlLCBkZXZpY2UsIHNvdXJjZVJlY3QsIG5ld0Rlc3RQb2ludCwgc3JjQnl0ZXNQZXJS
b3cpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwdXRJbWFnZURhdGFTb2Z0d2FyZTxQcmVt
dWx0aXBsaWVkPihzb3VyY2UsIGRldmljZSwgc291cmNlUmVjdCwgbmV3RGVzdFBvaW50LCBzcmNC
eXRlc1BlclJvdyk7CisgICAgfQorfQorCiB2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7
Ci0gICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7
Ci0gICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3Vy
Y2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5nZXREZXZpY2UoKSwgbV9zaXplKTsKKyAgICBwdXRJbWFnZURhdGEoc291cmNlLCBzb3VyY2VT
aXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCks
IG1fc2l6ZSwgVW5tdWx0aXBsaWVkKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCkKIHsKLSAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52
YXMoKTsKLSAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXpl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKKyAgICBwdXRJbWFnZURhdGEoc291cmNlLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCksIG1fc2l6ZSwgUHJlbXVsdGlwbGllZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88645</attachid>
            <date>2011-04-07 08:38:13 -0700</date>
            <delta_ts>2011-04-11 08:38:20 -0700</delta_ts>
            <desc>Fixed chromium linux build and style failures</desc>
            <filename>putImageData.patch</filename>
            <type>text/plain</type>
            <size>13316</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDQtMDcgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpeGluZyByZW5kZXIgcGVyZm9ybWFuY2Ugb2YgdGhlIGNh
bnZhcyBwdXRJbWFnZURhdGEgbWV0aG9kCisgICAgICAgIHdpdGggQ2hyb21lIGFjY2VsZXJhdGVk
IGNhbnZhcyBlbmFibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTc5NjAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dM
RVMyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVy
ZWRSZWN0KToKKyAgICAgICAgTWV0aG9kIGhhcyBhIG5ldyBhcmd1bWVudCB0aGF0IHNwZWNpZmll
cyB3aGV0aGVyIHRvIHVzZSBoYXJkd2FyZQorICAgICAgICBibGVuZGluZyBjYXBhYmlsaXRpZXMg
Zm9yIGFscGhhIG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIGNvbXBvc2l0aW5nCisgICAgICAg
IChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIE5ldyBvdmVy
bG9hZCBmb3IgY3JlYXRpbmcgYSB0ZXh0dXJlIHdpdGggbG9hZGluZyBhIGJpdG1hcCByaWdodCBh
d2F5CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpwdXRJbWFnZURhdGFIYXJkd2FyZSk6CisgICAgICAgIE5ldyBmdW5j
dGlvbiBmb3IgYmxpdHRpbmcgaW1hZ2UgZGF0YSB0byBhbiBpbWFnZSBidWZmZXIgdXNpbmcgYSBH
UFUKKyAgICAgICAgYWNjZWxlcmF0ZWQgcmVuZGVyaW5nIHBhdGgKKyAgICAgICAgKFdlYkNvcmU6
OnB1dEltYWdlRGF0YVNvZnR3YXJlKToKKyAgICAgICAgU29mdHdhcmUgcmVuZGVyaW5nIHBhdGgg
Zm9yIGJsaXR0aW5nIGltYWdlIGRhdGEgdG8gYW4gaW1hZ2UgYnVmZmVyLgorICAgICAgICBDb2Rl
IHdhcyBmYWN0b3JlZC1vdXQgZnJvbSBwdXRJbWFnZURhdGEKKyAgICAgICAgKFdlYkNvcmU6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgIEZhY3RvcmVkLW91dCBjb2RlIHRoYXQgaXMgc3BlY2lmaWMg
dG8gdGhlIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoCisgICAgICAgIENob3NlcyBiZXR3ZWVuIFNX
IGFuZCBHUFUgcmVuZGVyaW5nIHBhdGgKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
dXRVbm11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICBSZW1vdmVkIHNvZnR3YXJlIGJ1ZmZl
ciBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGlzIG5vIGxvbmdlcgorICAgICAgICBuZWNlc3Nhcnkg
ZXZlbiB3aXRoIEdQVSByZW5kZXJpbmcgZW5hYmxlZC4gIFRoaXMgd2FzIHRoZSBtYWluIAorICAg
ICAgICBwZXJmb3JtYW5jZSBpc3N1ZSBmaXhlZCBieSB0aGlzIHBhdGNoCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIGli
aWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3
YXJlVG9IYXJkd2FyZSk6CisgICAgICAgIGFkYXB0ZWQgdG8gbmV3IHNpZ25hdHVyZSBvZiBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdAorCiAyMDExLTA0LTA2ICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlr
aGF0c2t5LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gODI5NDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwNiwxNCArNDA2LDIwIEBACiAKIHZvaWQgR0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJl
LCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29s
b3JTcGFjZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpKTsKKyAgICBk
cmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3Rt
LCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgbV9zdGF0ZS0+Y2xp
cHBpbmdFbmFibGVkKCksIGZhbHNlKTsKIH0KIAogCi12b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4
dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
ZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3AsIGJvb2wgY2xpcCkKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3Qo
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBo
YSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwg
Ym9vbCBjbGlwLCBib29sIG11bHRpcGx5KQogewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAg
IG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CisgICAgLy8g
U2V0dGluZyBtdWx0aXBseSB0byB0cnVlIG92ZXJyaWRlcyB0aGUgY29tcG9zaXRlIG9wZXJhdG9y
CisgICAgaWYgKG11bHRpcGx5KSB7CisgICAgICAgIC8vIEN1c3RvbSBjb21wb3NpdGUgb3BlcmF0
aW9uIHRoYXQgcGVyZm9ybXMgYWxwaGEgbXVsdGlwbGljYXRpb24gb24gY29sb3IgY29tcG9uZW50
cworICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkQpOworICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPmJsZW5kRnVuY1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEsIEdyYXBo
aWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRl
eHQzRDo6WkVSTyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CiAgICAgYXBwbHlDbGlwcGluZyhjbGlwKTsKICAgICBj
b25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRpbGVzKCk7CiAgICAgSW50UmVjdCB0
aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJsYXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKQEAgLTU0
NCw2ICs1NTAsMTEgQEAKICAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKHB0ciwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAorUGFzc1JlZlB0cjxUZXh0dXJlPiBHTEVTMkNh
bnZhczo6Y3JlYXRlVGV4dHVyZShUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCiBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4dHVyZShO
YXRpdmVJbWFnZVB0ciBwdHIpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShw
dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xF
UzJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCShyZXZpc2lvbiA4Mjk0MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDkgKzg4LDEwIEBACiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVk
IHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOwogICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmRy
YXcoKS4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7Ci0gICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUs
IGFuZCBieSB0aGUgc29mdHdhcmUtPmhhcmR3YXJlIHVwbG9hZHMuCi0gICAgdm9pZCBkcmF3VGV4
dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBib29sIGNsaXApOworICAgIC8vIFRoaXMgdmVyc2lv
biBpcyBjYWxsZWQgYnkgdGhlIGFib3ZlLCBieSBwdXRJbWFnZURhdGFIYXJkd2FyZSwgYW5kIGJ5
IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJl
Y3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgY2xpcCwgYm9vbCBtdWx0aXBseSk7CiAgICAgVGV4dHVy
ZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpOworICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShU
ZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgVGV4dHVyZSogZ2V0
VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwCShyZXZpc2lvbiA4Mjk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3MCw3ICs4NzAsNyBAQAogCiAgICAgbV91cGxvYWRUZXh0dXJlLT51cGRhdGVTdWJSZWN0KGJp
dG1hcC5nZXRQaXhlbHMoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIGlkZW50aXR5OwotICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2Fk
VGV4dHVyZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwg
aWRlbnRpdHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJHQiwgb3AsIGZhbHNlKTsKKyAgICBncHVD
YW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRleHR1cmUuZ2V0KCksIG1fc29mdHdh
cmVEaXJ0eVJlY3QsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIGlkZW50aXR5LCAxLjAsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIG9wLCBmYWxzZSwgZmFsc2UpOwogICAgIC8vIENsZWFyIG91dCB0aGUgcmVn
aW9uIG9mIHRoZSBzb2Z0d2FyZSBjYW52YXMgd2UganVzdCB1cGxvYWRlZC4KICAgICBtX2NhbnZh
cy0+c2F2ZSgpOwogICAgIG1fY2FudmFzLT5yZXNldE1hdHJpeCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkocmV2aXNpb24gODI5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSwzOCAr
MjU5LDIyIEBACiAgICAgcmV0dXJuIGdldEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihyZWN0LCAq
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpLCBtX3Np
emUpOwogfQogCit2b2lkIHB1dEltYWdlRGF0YUhhcmR3YXJlKEJ5dGVBcnJheSogc291cmNlLCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGludCBzcmNSb3dQaXhlbHMsIE11bHRp
cGx5IG11bHRpcGxpZWQpCit7CisgICAgcGxhdGZvcm1Db250ZXh0LT5wcmVwYXJlRm9ySGFyZHdh
cmVEcmF3KCk7CisgICAgSW50UmVjdCB0ZXhSZWN0KEludFBvaW50KDAsIDApLCBzb3VyY2VSZWN0
LnNpemUoKSk7CisgICAgLy8gVGV4dHVyZSBoYXMgbm8gbWV0aG9kIGZvciBzcGVjaWZ5aW5nIGEg
cm93IHN0cmlkZSBmb3IgdGhlIHNvdXJjZSBkYXRhLCBzbyB3ZSBjcmVhdGUgYSB0ZXh0dXJlIHRo
YXQgaGFzIHRoZSB3aWR0aCBvZiB0aGUgc291cmNlIGJ1ZmZlcgorICAgIFJlZlB0cjxUZXh0dXJl
PiB0ZXh0dXJlID0gcGxhdGZvcm1Db250ZXh0LT5ncHVDYW52YXMoKS0+Y3JlYXRlVGV4dHVyZShU
ZXh0dXJlOjpSR0JBOCwgc3JjUm93UGl4ZWxzLCB0ZXhSZWN0LmhlaWdodCgpKTsKKyAgICB0ZXh0
dXJlLT51cGRhdGVTdWJSZWN0KHNvdXJjZS0+ZGF0YSgpICsgKHNvdXJjZVJlY3QueSgpICogc3Jj
Um93UGl4ZWxzICsgc291cmNlUmVjdC54KCkpICogNCwgdGV4UmVjdCk7CisgICAgQWZmaW5lVHJh
bnNmb3JtIGlkZW50aXR5OworICAgIEZsb2F0UmVjdCBmbHRUZXhSZWN0KHRleFJlY3QpOworICAg
IEZsb2F0UmVjdCBmbHREZXN0UmVjdChGbG9hdFBvaW50KGRlc3RQb2ludCksIGZsdFRleFJlY3Qu
c2l6ZSgpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPmdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRS
ZWN0KHRleHR1cmUuZ2V0KCksIGZsdFRleFJlY3QsIGZsdERlc3RSZWN0LCBpZGVudGl0eSwgMS4w
ZiwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlQ29weSwgZmFsc2UsIFVubXVsdGlwbGll
ZCA9PSBtdWx0aXBsaWVkKTsKK30KKwogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci12
b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsCi0gICAgICAgICAgICAgICAgICBTa0RldmljZSogZHN0RGV2aWNlLCBjb25zdCBJbnRTaXpl
JiBzaXplKQordm9pZCBwdXRJbWFnZURhdGFTb2Z0d2FyZShCeXRlQXJyYXkqJiBzb3VyY2UsIFNr
RGV2aWNlKiBkc3REZXZpY2UsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkc3RQb2ludCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cpCiB7Ci0gICAgQVNTRVJUKHNvdXJj
ZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7
Ci0KLSAgICBpbnQgb3JpZ2luWCA9IHNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0WCA9IGRl
c3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LngoKTsKLSAgICBBU1NFUlQoZGVzdFggPj0gMCk7Ci0g
ICAgQVNTRVJUKGRlc3RYIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2luWCA+PSAw
KTsKLSAgICBBU1NFUlQob3JpZ2luWCA8IHNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIGludCBl
bmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwotICAgIEFTU0VSVChlbmRY
IDw9IHNpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZFggLSBkZXN0WDsK
LQotICAgIGludCBvcmlnaW5ZID0gc291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRlc3RZID0gZGVz
dFBvaW50LnkoKSArIHNvdXJjZVJlY3QueSgpOwotICAgIEFTU0VSVChkZXN0WSA+PSAwKTsKLSAg
ICBBU1NFUlQoZGVzdFkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2luWSA+PSAw
KTsKLSAgICBBU1NFUlQob3JpZ2luWSA8IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIGludCBl
bmRZID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4WSgpOwotICAgIEFTU0VSVChlbmRZ
IDw9IHNpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5kWSAtIGRlc3RZOwotCi0g
ICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotCiAg
ICAgU2tCaXRtYXAgZGV2aWNlQml0bWFwID0gZHN0RGV2aWNlLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7
CiAgICAgU2tBdXRvTG9ja1BpeGVscyBkZXZpY2VBdXRvTG9jayhkZXZpY2VCaXRtYXApOwogCkBA
IC0yOTksMTggKzI4MywxOCBAQAogICAgIFNrQml0bWFwIGRlc3RCaXRtYXA7CiAKICAgICBpZiAo
dGVtcG9yYXJ5Qml0bWFwKSB7Ci0gICAgICAgIGRlc3RCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywgbnVtQ29sdW1ucywgbnVtUm93cywgc3JjQnl0ZXNQZXJSb3cp
OworICAgICAgICBkZXN0Qml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgc3JjQnl0ZXNQZXJSb3cpOwog
ICAgICAgICBpZiAoIWRlc3RCaXRtYXAuYWxsb2NQaXhlbHMoKSkKICAgICAgICAgICAgIENSQVNI
KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGRldmljZUJpdG1hcC5leHRyYWN0U3Vic2V0KCZkZXN0
Qml0bWFwLCBTa0lSZWN0OjpNYWtlWFlXSChkZXN0WCwgZGVzdFksIG51bUNvbHVtbnMsIG51bVJv
d3MpKTsKKyAgICAgICAgZGV2aWNlQml0bWFwLmV4dHJhY3RTdWJzZXQoJmRlc3RCaXRtYXAsIFNr
SVJlY3Q6Ok1ha2VYWVdIKGRzdFBvaW50LngoKSwgZHN0UG9pbnQueSgpLCBzcmNSZWN0LndpZHRo
KCksIHNyY1JlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8vIFdoZXRoZXIgd2UgbWFkZSBhIHRlbXBv
cmFyeSBvciBub3QgZGVzdEJpdG1hcCBpcyBhbHdheXMgY29uZmlndXJlZCB0byBiZSB3cml0dGVu
IGF0IDAsMAogICAgIFNrQXV0b0xvY2tQaXhlbHMgZGVzdEF1dG9Mb2NrKGRlc3RCaXRtYXApOwot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY1JvdyA9IHNvdXJjZS0+ZGF0YSgpICsgb3JpZ2lu
WSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2luWCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBudW1Sb3dzOyArK3kpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3Vy
Y2UtPmRhdGEoKSArIHNyY1JlY3QueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0LngoKSAq
IDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzcmNSZWN0LmhlaWdodCgpOyArK3kpIHsKICAg
ICAgICAgU2tQTUNvbG9yKiBkZXN0Um93ID0gZGVzdEJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgc3JjUmVjdC53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsID0gJnNyY1Jvd1t4ICogNF07CiAgICAgICAgICAg
ICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGFscGhhID0gc3JjUGl4ZWxbM107CkBAIC0zMjYsMTkgKzMxMCw1MiBAQAogCiAg
ICAgLy8gSWYgd2UgdXNlZCBhIHRlbXBvcmFyeSB0aGVuIHdyaXRlIGl0IHRvIHRoZSBkZXZpY2UK
ICAgICBpZiAodGVtcG9yYXJ5Qml0bWFwKQotICAgICAgICBkc3REZXZpY2UtPndyaXRlUGl4ZWxz
KGRlc3RCaXRtYXAsIGRlc3RYLCBkZXN0WSk7CisgICAgICAgIGRzdERldmljZS0+d3JpdGVQaXhl
bHMoZGVzdEJpdG1hcCwgZHN0UG9pbnQueCgpLCBkc3RQb2ludC55KCkpOwogfQogCit2b2lkIHB1
dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsCisg
ICAgICAgICAgICAgICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEludFNpemUmIHNpemUsIE11bHRpcGx5IG11bHRpcGxpZWQpCit7CisgICAgQVNTRVJUKHNv
dXJjZVJlY3Qud2lkdGgoKSA+IDApOworICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4g
MCk7CisKKyAgICBpbnQgZGVzdFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCk7Cisg
ICAgQVNTRVJUKGRlc3RYID49IDApOworICAgIEFTU0VSVChkZXN0WCA8IHNpemUud2lkdGgoKSk7
CisgICAgQVNTRVJUKHNvdXJjZVJlY3QueCgpID49IDApOworICAgIEFTU0VSVChzb3VyY2VSZWN0
LngoKSA8IHNvdXJjZVJlY3QubWF4WCgpKTsKKworICAgIEFTU0VSVChkZXN0UG9pbnQueCgpICsg
c291cmNlUmVjdC5tYXhYKCkgPD0gc2l6ZS53aWR0aCgpKTsKKworICAgIGludCBkZXN0WSA9IGRl
c3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LnkoKTsKKyAgICBBU1NFUlQoZGVzdFkgPj0gMCk7Cisg
ICAgQVNTRVJUKGRlc3RZIDwgc2l6ZS5oZWlnaHQoKSk7CisgICAgQVNTRVJUKHNvdXJjZVJlY3Qu
eSgpID49IDApOworICAgIEFTU0VSVChzb3VyY2VSZWN0LnkoKSA8IHNvdXJjZVJlY3QubWF4WSgp
KTsKKworICAgIEFTU0VSVChkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5tYXhZKCkgPD0gc2l6
ZS5oZWlnaHQoKSk7CisKKyAgICBJbnRQb2ludCBuZXdEZXN0UG9pbnQoZGVzdFgsIGRlc3RZKTsK
KyAgICBpZiAocGxhdGZvcm1Db250ZXh0LT51c2VHUFUoKSkKKyAgICAgICAgcHV0SW1hZ2VEYXRh
SGFyZHdhcmUoc291cmNlLCBwbGF0Zm9ybUNvbnRleHQsIHNvdXJjZVJlY3QsIG5ld0Rlc3RQb2lu
dCwgc291cmNlU2l6ZS53aWR0aCgpLCBtdWx0aXBsaWVkKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
U2tEZXZpY2UqIGRldmljZSA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCktPmdldERldmljZSgp
OworICAgICAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRo
KCk7CisgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCkKKyAgICAgICAgICAg
IHB1dEltYWdlRGF0YVNvZnR3YXJlPFVubXVsdGlwbGllZD4oc291cmNlLCBkZXZpY2UsIHNvdXJj
ZVJlY3QsIG5ld0Rlc3RQb2ludCwgc3JjQnl0ZXNQZXJSb3cpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBwdXRJbWFnZURhdGFTb2Z0d2FyZTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIGRldmlj
ZSwgc291cmNlUmVjdCwgbmV3RGVzdFBvaW50LCBzcmNCeXRlc1BlclJvdyk7CisgICAgfQorfQor
CiB2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBz
b3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7Ci0gICAgcHV0SW1hZ2VEYXRhPFVubXVs
dGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsK
KyAgICBwdXRJbWFnZURhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIG1fc2l6ZSwgVW5tdWx0aXBsaWVkKTsK
IH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJy
YXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBjb250ZXh0KCktPnBs
YXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKLSAgICBwdXRJbWFnZURhdGE8
UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQs
IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9z
aXplKTsKKyAgICBwdXRJbWFnZURhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBk
ZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksIG1fc2l6ZSwgUHJlbXVsdGlw
bGllZCk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89010</attachid>
            <date>2011-04-11 08:38:24 -0700</date>
            <delta_ts>2011-04-13 10:59:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57960-20110411113823.patch</filename>
            <type>text/plain</type>
            <size>22394</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDQyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDQtMTEgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gQWNjZWxlcmF0ZWQgMkQgQ2FudmFzIGlz
IHNsb3cgdG8gZXhlY3V0ZSBwdXRJbWFnZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTYwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBBZmZl
Y3RlZCBjb2RlIGlzIGFscmVhZHkgdGVzdGVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0czoKKyAg
ICAgICAgZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS5odG1sCisgICAgICAgIGZhc3Qv
Y2FudmFzL2NhbnZhcy1zdGF0ZS1pbnRhY3QtYWZ0ZXItcHV0SW1hZ2VEYXRhLmh0bWwKKyAgICAg
ICAgY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5pbWFnZURhdGEucHV0LmNsaXAuaHRtbAorICAgICAg
ICBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLmltYWdlRGF0YS5wdXQuZGlydHkucmVjdDIuaHRtbAor
ICAgICAgICBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLmltYWdlRGF0YS5wdXQubW9kaWZpZWQuaHRt
bAorICAgICAgICBmYXN0L2NhbnZhcy9jYW52YXMtY29weVBpeGVscy5odG1sCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIEFkZGVkIGFu
IG9wdGlvbiBmb3IgdXNpbmcgdGhlIGJsZW5kIG9wcyBmb3IgYWxwaGEgbXVsdGlwbGljYXRpb24K
KyAgICAgICAgaW5zdGVhZCBvZiBjb21wb3NpdGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMy
Q2FudmFzOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBOZXcgbWV0aG9kIGZvciBkcmF3IHJhdyBw
aXhlbCBkYXRhIGZyb20gbWVtb3J5IHRvIHRoZSBjYW52YXMKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlTdWJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZTo6dXBkYXRlU3ViUmVjdCk6CisgICAgICAgIEFkZGVkIGFuIG92ZXJsb2FkIG9mIHRoZSB1cGRh
dGVTdWJSZWN0IG1ldGhvZCB0aGF0IGNhbiByZWNlaXZlIGEgcGl4ZWwgCisgICAgICAgIG9mIGEg
c2l6ZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRleHR1cmUgc2l6ZS4gSW1wcm92ZWQgdGhlIHBl
cmZvcm1hbmNlCisgICAgICAgIG9mIHVwZGF0ZVN1YnJlY3QgYnkgYXZvaWRpbmcgdGhlIGFsbG9j
YXRpb24gb2YgYSB0ZW1wb3JhcnkgYnVmZmVyIHdoZW4KKyAgICAgICAgbm90IHJlcXVpcmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6cHV0SW1hZ2VEYXRhU29mdHdhcmUpOgorICAgICAgICBTb2Z0d2FyZSByZW5kZXJpbmcgcGF0
aCBmYWN0b3JlZCBvdXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uCisgICAgICAgIChXZWJDb3Jl
OjpwdXRJbWFnZURhdGEpOgorICAgICAgICBSZWZhY3RvcmVkIHRvIHBlcmZvbSBydW4tdGltZSBj
aGVja3MgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlCisgICAgICAgIFNXIGFuZCBIVyByZW5k
ZXJpbmcgcGF0aHMuIFNlbGVjdHMgdGhlIEdQVSBvciBTVyBwYXRoLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIHJlbW92
ZWQgdGhlIHJlYWRiYWNrIGZyb20gR1BVCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIHJlbW92ZWQgcmVhYmFjayBmcm9t
IEdQVQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRH
cmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIHJlbW92ZWQgbWFuYWdlbWVudCBvZiB0aGUgdXBs
b2FkIHRleHR1cmUsIHdoaWNoIGhhcyBiZWVuIGRlbGVnYXRlZCB0bworICAgICAgICBHTEVTMkNh
bnZhcworICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdh
cmVUb0hhcmR3YXJlKToKKyAgICAgICAgbW9kaWZpZWQgdG8gbWFrZSB1c2Ugb2YgR0xFUzJDYW52
YXM6OnB1dEltYWdlRGF0YQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oOgorCiAyMDExLTA0LTExICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2Fu
dmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHJldmlzaW9uIDgzMTg1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTG9vcEJsaW5uTWF0aFV0aWxzLmgiCiAj
aW5jbHVkZSAiTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oIgogI2luY2x1ZGUgIkxvb3BCbGlublNv
bGlkRmlsbFNoYWRlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUg
IlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgiCkBAIC00MDYsMTUgKzQwNywyMyBAQCB2b2lkIEdMRVMyQ2FudmFz
OjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnCiAKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJl
ZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0
LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwg
Y29tcG9zaXRlT3AsIG1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpKTsKKyAgICBkcmF3VGV4dHVy
ZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRl
LT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgbV9zdGF0ZS0+Y2xpcHBpbmdFbmFi
bGVkKCkgPyBEcmF3VGV4dHVyZUNsaXAgOiAwKTsKIH0KIAogCi12b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3AsIGJvb2wgY2xpcCkKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJl
ZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9h
dCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCwgdW5zaWduZWQgb3B0KQogewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29u
dGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7Ci0gICAgYXBwbHlDbGlw
cGluZyhjbGlwKTsKKyAgICAKKyAgICBpZiAob3B0ICYgRHJhd1RleHR1cmVNdWx0aXBseSkgewor
ICAgICAgICAvLyBUaGUgbXVsdGlwbHkgb3B0aW9uIGhpamFja3MgdGhlIGJsZW5kIGZ1bmMsIHNv
IGl0IGNhbid0IGJlIGNvbWJpbmUgd2l0aCBhIGNvbXBvc2l0aW5nIG9wCisgICAgICAgIEFTU0VS
VChDb21wb3NpdGVDb3B5ID09IGNvbXBvc2l0ZU9wKTsKKyAgICAgICAgLy8gQ3VzdG9tIGNvbXBv
c2l0ZSBvcGVyYXRpb24gdGhhdCBwZXJmb3JtcyBhbHBoYSBtdWx0aXBsaWNhdGlvbiBvbiBjb2xv
ciBjb21wb25lbnRzCisgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgICAgIG1fY29udGV4dC0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+YmxlbmRGdW5jU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19B
TFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdy
YXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5h
cHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKG9w
dCAmIERyYXdUZXh0dXJlQ2xpcCk7CiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0
dXJlLT50aWxlcygpOwogICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxlcy5vdmVybGFwcGVk
VGlsZUluZGljZXMoc3JjUmVjdCk7CiAKQEAgLTkwMyw2ICs5MTIsMjggQEAgdm9pZCBHTEVTMkNh
bnZhczo6YXBwbHlDbGlwcGluZyhib29sIGVuYQogICAgIH0KIH0KIAordm9pZCBHTEVTMkNhbnZh
czo6cHV0SW1hZ2VEYXRhKHZvaWQqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgVGV4
dHVyZTo6Rm9ybWF0IGZvcm1hdCwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIHVuc2lnbmVkIG9wdCkKK3sKKyAgICBBU1NFUlQoc291cmNl
KTsKKyAgICBpZiAoIXNvdXJjZVJlY3Qud2lkdGgoKSB8fCAhc291cmNlUmVjdC5oZWlnaHQoKSkg
CisgICAgICAgIHJldHVybjsKKyAgICBJbnRTaXplIHRleFNpemUoMCwgMCk7CisgICAgaWYgKG1f
dXBsb2FkVGV4dHVyZSkKKyAgICAgICAgdGV4U2l6ZSA9IEludFNpemUobV91cGxvYWRUZXh0dXJl
LT50aWxlcygpLnRvdGFsU2l6ZVgoKSwgbV91cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6
ZVkoKSk7CisgICAgaWYgKHNvdXJjZVJlY3Qud2lkdGgoKSA+IHRleFNpemUud2lkdGgoKSB8fCBz
b3VyY2VSZWN0LmhlaWdodCgpID4gdGV4U2l6ZS5oZWlnaHQoKSB8fCBtX3VwbG9hZFRleHR1cmUt
PmZvcm1hdCgpICE9IGZvcm1hdCkgeworICAgICAgICB0ZXhTaXplID0gc291cmNlUmVjdC5zaXpl
KCk7CisgICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShm
b3JtYXQsIHRleFNpemUud2lkdGgoKSwgdGV4U2l6ZS5oZWlnaHQoKSk7CisgICAgfSAKKyAgICAv
LyBXZSBwbGFjZSB0aGUgdXBkYXRlIHJlY3QgYXQgdGhlIHRleHR1cmUgb3JpZ2luIHRvIGZpdCBp
biB0aGUgc21hbGxlc3QgcG9zc2libGUgdGV4dHVyZS4KKyAgICBJbnRSZWN0IHRleFVwZGF0ZVJl
Y3QoMCwgMCwgc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICAv
LyBUbyBnZXQgdGhlIHJvdyBzdHJpZGUgcmlnaHQsIHdlIHN0aWxsIHRha2UgdGhlIHdpZHRoIG9m
IHRoZSBmdWxsIGJ1ZmZlciBmb3IgdGhlIHNvdXJjZSBzaXplLgorICAgIEludFNpemUgYWRqdXN0
ZWRTb3VyY2VTaXplKHNvdXJjZVNpemUud2lkdGgoKSwgdGV4VXBkYXRlUmVjdC5oZWlnaHQoKSk7
CisgICAgbV91cGxvYWRUZXh0dXJlLT51cGRhdGVTdWJSZWN0KCgoY2hhciopc291cmNlKSArIChz
b3VyY2VSZWN0LnkoKSAqIHNvdXJjZVNpemUud2lkdGgoKSArIHNvdXJjZVJlY3QueCgpKSAqIDQs
IGFkanVzdGVkU291cmNlU2l6ZSwgdGV4VXBkYXRlUmVjdCk7CisgICAgQWZmaW5lVHJhbnNmb3Jt
IGlkZW50aXR5OworICAgIEludFJlY3QgZGVzdFJlY3QoZGVzdFBvaW50LCB0ZXhVcGRhdGVSZWN0
LnNpemUoKSk7CisgICAgZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRleHR1cmUuZ2V0KCksIHRl
eFVwZGF0ZVJlY3QsIGRlc3RSZWN0LCBpZGVudGl0eSwgYWxwaGEsIGNvbG9yU3BhY2UsIG9wLCBv
cHQpOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVh
ZGVyKQogewogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAkocmV2aXNpb24gODMx
ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCBjbGFzcyBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDsKIGNsYXNzIEdMRVMyQ2FudmFzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShHTEVTMkNhbnZhcyk7CiBwdWJsaWM6CisgICAgZW51bSBEcmF3VGV4dHVyZU9wdGlvbnMg
eworICAgICAgICBEcmF3VGV4dHVyZUNsaXAgPSAgICAgIDEgPDwgMCwKKyAgICAgICAgRHJhd1Rl
eHR1cmVNdWx0aXBseSA9ICAxIDw8IDEKKyAgICB9OworCiAgICAgR0xFUzJDYW52YXMoU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogICAg
IH5HTEVTMkNhbnZhcygpOwogCkBAIC04OCwxMCArOTMsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
ZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKICAgICAvLyBUaGlzIHZlcnNpb24gaXMg
Y2FsbGVkIGJ5IEJpdG1hcEltYWdlOjpkcmF3KCkuCiAgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0
KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIC8vIFRoaXMgdmVyc2lv
biBpcyBjYWxsZWQgYnkgdGhlIGFib3ZlLCBhbmQgYnkgdGhlIHNvZnR3YXJlLT5oYXJkd2FyZSB1
cGxvYWRzLgotICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgYm9vbCBj
bGlwKTsKKyAgICAvLyBUaGlzIHZlcnNpb24gaXMgY2FsbGVkIGJ5IHRoZSBhYm92ZSwgYnkgcHV0
SW1hZ2VEYXRhSGFyZHdhcmUsIGFuZCBieSB0aGUgc29mdHdhcmUtPmhhcmR3YXJlIHVwbG9hZHMu
CisgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
ZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCB1bnNpZ25lZCBkcmF3
VGV4dHVyZU9wdGlvbnMpOwogICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQ
dHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBUZXh0dXJl
KiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YSh2b2lk
KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFRleHR1cmU6OkZvcm1hdCwgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCB1bnNpZ25lZCBkcmF3VGV4dHVy
ZU9wdGlvbnMpOwogCiAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIApAQCAtMTMzLDYgKzEzOSw3IEBAIHByaXZhdGU6CiAg
ICAgTG9vcEJsaW5uUGF0aENhY2hlIG1fcGF0aENhY2hlOwogICAgIHVuc2lnbmVkIG1fcGF0aElu
ZGV4QnVmZmVyOwogICAgIHVuc2lnbmVkIG1fcGF0aFZlcnRleEJ1ZmZlcjsKKyAgICBSZWZQdHI8
VGV4dHVyZT4gbV91cGxvYWRUZXh0dXJlOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkocmV2aXNpb24gODMxODUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCwxMyArMTIwLDkgQEAgUGFzc1JlZlB0cjxUZXh0dXJlPiBUZXh0
dXJlOjpjcmVhdGUoR3JhcAogfQogCiB0ZW1wbGF0ZSA8Ym9vbCBzd2l6emxlPgotc3RhdGljIHVp
bnQzMl90KiBjb3B5U3ViUmVjdCh1aW50MzJfdCogc3JjLCBpbnQgc3JjWCwgaW50IHNyY1ksIHVp
bnQzMl90KiBkc3QsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHNyY1N0cmlkZSkKK3N0YXRp
YyB2b2lkIGNvcHlTdWJSZWN0KHVpbnQzMl90KiBzcmMsIGludCBzcmNYLCBpbnQgc3JjWSwgdWlu
dDMyX3QqIGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3JjU3RyaWRlKQogewogICAg
IHVpbnQzMl90KiBzcmNPZmZzZXQgPSBzcmMgKyBzcmNYICsgc3JjWSAqIHNyY1N0cmlkZTsKLQot
ICAgIGlmICghc3dpenpsZSAmJiB3aWR0aCA9PSBzcmNTdHJpZGUpCi0gICAgICAgIHJldHVybiBz
cmNPZmZzZXQ7Ci0KICAgICBpZiAoc3dpenpsZSkgewogICAgICAgICB1aW50MzJfdCogZHN0UGl4
ZWwgPSBkc3Q7CiAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKQEAg
LTE0MSwxOCArMTM3LDIzIEBAIHN0YXRpYyB1aW50MzJfdCogY29weVN1YlJlY3QodWludDMyX3Qq
IHMKICAgICAgICAgICAgIG1lbWNweShkc3QgKyB5ICogd2lkdGgsIHNyY09mZnNldCArIHkgKiBz
cmNTdHJpZGUsIDQgKiB3aWR0aCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGRzdDsK
IH0KIAogdm9pZCBUZXh0dXJlOjpsb2FkKHZvaWQqIHBpeGVscykKIHsKLSAgICB1cGRhdGVTdWJS
ZWN0KHBpeGVscywgSW50UmVjdCgwLCAwLCBtX3RpbGVzLnRvdGFsU2l6ZVgoKSwgbV90aWxlcy50
b3RhbFNpemVZKCkpKTsKKyAgICB1cGRhdGVTdWJSZWN0KHBpeGVscywgSW50U2l6ZShtX3RpbGVz
LnRvdGFsU2l6ZVgoKSwgbV90aWxlcy50b3RhbFNpemVZKCkpLCBJbnRSZWN0KDAsIDAsIG1fdGls
ZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSkpOwogfQogCiB2b2lkIFRleHR1
cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0
KQogeworICAgIHVwZGF0ZVN1YlJlY3QocGl4ZWxzLCBJbnRTaXplKG1fdGlsZXMudG90YWxTaXpl
WCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSksIHVwZGF0ZVJlY3QpOworfQorCit2b2lkIFRleHR1
cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiBwaXhlbEJ1ZmZl
clNpemUsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCit7CisgICAgSW50U2l6ZSB1cGRhdGVC
b3VuZHMgPSBwaXhlbEJ1ZmZlclNpemUuc2hydW5rVG8oSW50U2l6ZShtX3RpbGVzLnRvdGFsU2l6
ZVgoKSwgbV90aWxlcy50b3RhbFNpemVZKCkpKTsKICAgICBJbnRSZWN0IHVwZGF0ZVJlY3RTYW5p
dGl6ZWQodXBkYXRlUmVjdCk7Ci0gICAgdXBkYXRlUmVjdFNhbml0aXplZC5pbnRlcnNlY3QoSW50
UmVjdCgwLCAwLCBtX3RpbGVzLnRvdGFsU2l6ZVgoKSwgbV90aWxlcy50b3RhbFNpemVZKCkpKTsK
KyAgICB1cGRhdGVSZWN0U2FuaXRpemVkLmludGVyc2VjdChJbnRSZWN0KDAsIDAsIHVwZGF0ZUJv
dW5kcy53aWR0aCgpLCB1cGRhdGVCb3VuZHMuaGVpZ2h0KCkpKTsKIAogICAgIHVpbnQzMl90KiBw
aXhlbHMzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKTsKICAgICB1bnNpZ25lZCBp
bnQgZ2xGb3JtYXQgPSAwOwpAQCAtMTY2LDcgKzE2NywxMCBAQCB2b2lkIFRleHR1cmU6OnVwZGF0
ZVN1YlJlY3Qodm9pZCogcGl4ZWxzCiAgICAgaW50IHRlbXBCdWZmU2l6ZSA9IC8vIFRlbXBvcmFy
eSBidWZmZXIgc2l6ZSBpcyB0aGUgc21hbGxlciBvZiB0aGUgbWF4IHRleHR1cmUgc2l6ZSBvciB0
aGUgdXBkYXRlUmVjdFNhbml0aXplZAogICAgICAgICBtaW4obV90aWxlcy5tYXhUZXh0dXJlU2l6
ZSgpLCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVjdFNhbml0aXplZC53aWR0aCgp
KSAqCiAgICAgICAgIG1pbihtX3RpbGVzLm1heFRleHR1cmVTaXplKCksIG1fdGlsZXMuYm9yZGVy
VGV4ZWxzKCkgKyB1cGRhdGVSZWN0U2FuaXRpemVkLmhlaWdodCgpKTsKLSAgICBPd25BcnJheVB0
cjx1aW50MzJfdD4gdGVtcEJ1ZmYgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50MzJfdFt0ZW1wQnVm
ZlNpemVdKTsKKyAgICBib29sIG5lZWRUZW1wQnVmZiA9IHN3aXp6bGUgfHwgdXBkYXRlUmVjdC53
aWR0aCgpICE9IG1fdGlsZXMudG90YWxTaXplWSgpIHx8IG1fdGlsZXMubnVtVGlsZXNYKCkgPiAx
OworICAgIE93bkFycmF5UHRyPHVpbnQzMl90PiB0ZW1wQnVmZjsKKyAgICBpZiAobmVlZFRlbXBC
dWZmKQorICAgICAgICB0ZW1wQnVmZiA9IGFkb3B0QXJyYXlQdHIobmV3IHVpbnQzMl90W3RlbXBC
dWZmU2l6ZV0pOwogCiAgICAgZm9yIChpbnQgdGlsZSA9IDA7IHRpbGUgPCBtX3RpbGVzLm51bVRp
bGVzKCk7IHRpbGUrKykgewogICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCB0aWxlCkBAIC0xODEs
MTYgKzE4NSwyMSBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzCiAg
ICAgICAgIGlmICh1cGRhdGVSZWN0SW50ZXJzZWN0ZWQuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgLy8gQ29weSBzdWIgcmVjdGFuZ2xlIG91dCBvZiBsYXJnZXIg
cGl4ZWwgZGF0YQogICAgICAgICB1aW50MzJfdCogdXBsb2FkQnVmZiA9IDA7Ci0gICAgICAgIGlm
IChzd2l6emxlKSB7Ci0gICAgICAgICAgICB1cGxvYWRCdWZmID0gY29weVN1YlJlY3Q8dHJ1ZT4o
Ci0gICAgICAgICAgICBwaXhlbHMzMiwgdXBkYXRlUmVjdEludGVyc2VjdGVkLngoKSwgdXBkYXRl
UmVjdEludGVyc2VjdGVkLnkoKSwKLSAgICAgICAgICAgIHRlbXBCdWZmLmdldCgpLCB1cGRhdGVS
ZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLmhlaWdodCgpLCBt
X3RpbGVzLnRvdGFsU2l6ZVgoKSk7CisgICAgICAgIGlmIChuZWVkVGVtcEJ1ZmYpIHsKKyAgICAg
ICAgICAgIHVwbG9hZEJ1ZmYgPSB0ZW1wQnVmZi5nZXQoKTsKKyAgICAgICAgICAgIC8vIENvcHkg
c3ViIHJlY3RhbmdsZSBvdXQgb2YgbGFyZ2VyIHBpeGVsIGRhdGEKKyAgICAgICAgICAgIGlmIChz
d2l6emxlKSB7CisgICAgICAgICAgICAgICAgY29weVN1YlJlY3Q8dHJ1ZT4oCisgICAgICAgICAg
ICAgICAgcGl4ZWxzMzIsIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC54KCksIHVwZGF0ZVJlY3RJbnRl
cnNlY3RlZC55KCksCisgICAgICAgICAgICAgICAgdXBsb2FkQnVmZiwgdXBkYXRlUmVjdEludGVy
c2VjdGVkLndpZHRoKCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSwgcGl4ZWxCdWZm
ZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBj
b3B5U3ViUmVjdDxmYWxzZT4oCisgICAgICAgICAgICAgICAgcGl4ZWxzMzIsIHVwZGF0ZVJlY3RJ
bnRlcnNlY3RlZC54KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55KCksCisgICAgICAgICAgICAg
ICAgdXBsb2FkQnVmZiwgdXBkYXRlUmVjdEludGVyc2VjdGVkLndpZHRoKCksIHVwZGF0ZVJlY3RJ
bnRlcnNlY3RlZC5oZWlnaHQoKSwgcGl4ZWxCdWZmZXJTaXplLndpZHRoKCkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXBsb2FkQnVmZiA9IGNvcHlTdWJS
ZWN0PGZhbHNlPigKLSAgICAgICAgICAgIHBpeGVsczMyLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQu
eCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQueSgpLAotICAgICAgICAgICAgdGVtcEJ1ZmYuZ2V0
KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQu
aGVpZ2h0KCksIG1fdGlsZXMudG90YWxTaXplWCgpKTsKKyAgICAgICAgICAgIHVwbG9hZEJ1ZmYg
PSBwaXhlbHMzMiArIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC54KCkgKyB1cGRhdGVSZWN0SW50ZXJz
ZWN0ZWQueSgpICogcGl4ZWxCdWZmZXJTaXplLndpZHRoKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X3RpbGVUZXh0dXJlSWRzLT5hdCh0aWxlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgJKHJldmlzaW9uIDgzMTg1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKIAogY2xhc3MgSW50UmVjdDsKK2NsYXNzIEludFNpemU7CiAKIGNsYXNzIFRleHR1cmUg
OiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlPiB7CiBwdWJsaWM6CkBAIC01MSw2ICs1Miw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGJpbmRUaWxlKGludCB0aWxlKTsKICAgICB2b2lkIGxvYWQodm9p
ZCogcGl4ZWxzKTsKICAgICB2b2lkIHVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdm9pZCB1cGRhdGVTdWJSZWN0KHZvaWQqIHBpeGVscywgY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEludFJlY3QmKTsKICAgICBGb3JtYXQgZm9ybWF0KCkgY29uc3QgeyByZXR1
cm4gbV9mb3JtYXQ7IH0KICAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fdGlsZXM7IH0KIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lv
biA4MzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDM3ICsyNjAsOCBAQCBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByCiB9CiAKIHRlbXBsYXRlIDxNdWx0aXBs
eSBtdWx0aXBsaWVkPgotdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LAotICAgICAgICAgICAgICAgICAgU2tEZXZpY2UqIGRzdERldmlj
ZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgcHV0SW1hZ2VEYXRhU29mdHdhcmUoQnl0ZUFy
cmF5KiYgc291cmNlLCBTa0RldmljZSogZHN0RGV2aWNlLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93KQogewot
ICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVj
dC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpblggPSBzb3VyY2VSZWN0LngoKTsKLSAg
ICBpbnQgZGVzdFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJU
KGRlc3RYID49IDApOwotICAgIEFTU0VSVChkZXN0WCA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpblggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpblggPCBzb3VyY2VSZWN0Lm1heFgo
KSk7Ci0KLSAgICBpbnQgZW5kWCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsK
LSAgICBBU1NFUlQoZW5kWCA8PSBzaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMg
PSBlbmRYIC0gZGVzdFg7Ci0KLSAgICBpbnQgb3JpZ2luWSA9IHNvdXJjZVJlY3QueSgpOwotICAg
IGludCBkZXN0WSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQo
ZGVzdFkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3RZIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpblkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpblkgPCBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0KLSAgICBpbnQgZW5kWSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
LSAgICBBU1NFUlQoZW5kWSA8PSBzaXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVu
ZFkgLSBkZXN0WTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNp
emUud2lkdGgoKTsKLQogICAgIFNrQml0bWFwIGRldmljZUJpdG1hcCA9IGRzdERldmljZS0+YWNj
ZXNzQml0bWFwKHRydWUpOwogICAgIFNrQXV0b0xvY2tQaXhlbHMgZGV2aWNlQXV0b0xvY2soZGV2
aWNlQml0bWFwKTsKIApAQCAtMjk5LDE4ICsyNzAsMTggQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0
ZUFycmF5KiYgc291cmNlLCBjbwogICAgIFNrQml0bWFwIGRlc3RCaXRtYXA7CiAKICAgICBpZiAo
dGVtcG9yYXJ5Qml0bWFwKSB7Ci0gICAgICAgIGRlc3RCaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZywgbnVtQ29sdW1ucywgbnVtUm93cywgc3JjQnl0ZXNQZXJSb3cp
OworICAgICAgICBkZXN0Qml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwgc3JjQnl0ZXNQZXJSb3cpOwog
ICAgICAgICBpZiAoIWRlc3RCaXRtYXAuYWxsb2NQaXhlbHMoKSkKICAgICAgICAgICAgIENSQVNI
KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGRldmljZUJpdG1hcC5leHRyYWN0U3Vic2V0KCZkZXN0
Qml0bWFwLCBTa0lSZWN0OjpNYWtlWFlXSChkZXN0WCwgZGVzdFksIG51bUNvbHVtbnMsIG51bVJv
d3MpKTsKKyAgICAgICAgZGV2aWNlQml0bWFwLmV4dHJhY3RTdWJzZXQoJmRlc3RCaXRtYXAsIFNr
SVJlY3Q6Ok1ha2VYWVdIKGRzdFBvaW50LngoKSwgZHN0UG9pbnQueSgpLCBzcmNSZWN0LndpZHRo
KCksIHNyY1JlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8vIFdoZXRoZXIgd2UgbWFkZSBhIHRlbXBv
cmFyeSBvciBub3QgZGVzdEJpdG1hcCBpcyBhbHdheXMgY29uZmlndXJlZCB0byBiZSB3cml0dGVu
IGF0IDAsMAogICAgIFNrQXV0b0xvY2tQaXhlbHMgZGVzdEF1dG9Mb2NrKGRlc3RCaXRtYXApOwot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY1JvdyA9IHNvdXJjZS0+ZGF0YSgpICsgb3JpZ2lu
WSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2luWCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBudW1Sb3dzOyArK3kpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBzb3Vy
Y2UtPmRhdGEoKSArIHNyY1JlY3QueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0LngoKSAq
IDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzcmNSZWN0LmhlaWdodCgpOyArK3kpIHsKICAg
ICAgICAgU2tQTUNvbG9yKiBkZXN0Um93ID0gZGVzdEJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgKyt4KSB7CisgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgc3JjUmVjdC53aWR0aCgpOyArK3gpIHsKICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsID0gJnNyY1Jvd1t4ICogNF07CiAgICAgICAgICAg
ICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxpZWQpIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGFscGhhID0gc3JjUGl4ZWxbM107CkBAIC0zMjYsMTkgKzI5Nyw1NCBAQCB2b2lk
IHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAKICAgICAvLyBJZiB3ZSB1c2Vk
IGEgdGVtcG9yYXJ5IHRoZW4gd3JpdGUgaXQgdG8gdGhlIGRldmljZQogICAgIGlmICh0ZW1wb3Jh
cnlCaXRtYXApCi0gICAgICAgIGRzdERldmljZS0+d3JpdGVQaXhlbHMoZGVzdEJpdG1hcCwgZGVz
dFgsIGRlc3RZKTsKKyAgICAgICAgZHN0RGV2aWNlLT53cml0ZVBpeGVscyhkZXN0Qml0bWFwLCBk
c3RQb2ludC54KCksIGRzdFBvaW50LnkoKSk7Cit9CisKK3ZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVB
cnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwKKyAgICAgICAgICAgICAgICAg
IFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgTXVsdGlwbHkgbXVsdGlwbGllZCkKK3sKKyAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgp
ID4gMCk7CisgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKKworICAgIGludCBk
ZXN0WCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LngoKTsKKyAgICBBU1NFUlQoZGVzdFgg
Pj0gMCk7CisgICAgQVNTRVJUKGRlc3RYIDwgc2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQoc291
cmNlUmVjdC54KCkgPj0gMCk7CisgICAgQVNTRVJUKHNvdXJjZVJlY3QueCgpIDwgc291cmNlUmVj
dC5tYXhYKCkpOworCisgICAgQVNTRVJUKGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgo
KSA8PSBzaXplLndpZHRoKCkpOworCisgICAgaW50IGRlc3RZID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QueSgpOworICAgIEFTU0VSVChkZXN0WSA+PSAwKTsKKyAgICBBU1NFUlQoZGVzdFkg
PCBzaXplLmhlaWdodCgpKTsKKyAgICBBU1NFUlQoc291cmNlUmVjdC55KCkgPj0gMCk7CisgICAg
QVNTRVJUKHNvdXJjZVJlY3QueSgpIDwgc291cmNlUmVjdC5tYXhZKCkpOworCisgICAgQVNTRVJU
KGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKSA8PSBzaXplLmhlaWdodCgpKTsKKwor
ICAgIEludFBvaW50IG5ld0Rlc3RQb2ludChkZXN0WCwgZGVzdFkpOworICAgIGlmIChwbGF0Zm9y
bUNvbnRleHQtPnVzZUdQVSgpKSB7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+cHJlcGFyZUZv
ckhhcmR3YXJlRHJhdygpOworICAgICAgICB1bnNpZ25lZCBvcHQgPSBVbm11bHRpcGxpZWQgPT0g
bXVsdGlwbGllZCA/IEdMRVMyQ2FudmFzOjpEcmF3VGV4dHVyZU11bHRpcGx5IDogMDsKKyAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LT5ncHVDYW52YXMoKS0+cHV0SW1hZ2VEYXRhKHNvdXJjZS0+ZGF0
YSgpLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBuZXdEZXN0UG9pbnQsIFRleHR1cmU6OlJHQkE4
LCAxLjBmLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5LCBvcHQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZh
cygpLT5nZXREZXZpY2UoKTsKKyAgICAgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICog
c291cmNlU2l6ZS53aWR0aCgpOworICAgICAgICBpZiAobXVsdGlwbGllZCA9PSBVbm11bHRpcGxp
ZWQpCisgICAgICAgICAgICBwdXRJbWFnZURhdGFTb2Z0d2FyZTxVbm11bHRpcGxpZWQ+KHNvdXJj
ZSwgZGV2aWNlLCBzb3VyY2VSZWN0LCBuZXdEZXN0UG9pbnQsIHNyY0J5dGVzUGVyUm93KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcHV0SW1hZ2VEYXRhU29mdHdhcmU8UHJlbXVsdGlwbGll
ZD4oc291cmNlLCBkZXZpY2UsIHNvdXJjZVJlY3QsIG5ld0Rlc3RQb2ludCwgc3JjQnl0ZXNQZXJS
b3cpOworICAgIH0KIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIGNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwotICAgIHB1
dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwg
ZGVzdFBvaW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2
aWNlKCksIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhKHNvdXJjZSwgc291cmNlU2l6ZSwgc291
cmNlUmVjdCwgZGVzdFBvaW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBtX3NpemUs
IFVubXVsdGlwbGllZCk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0g
ICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7Ci0g
ICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNl
UmVjdCwgZGVzdFBvaW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0RGV2aWNlKCksIG1fc2l6ZSk7CisgICAgcHV0SW1hZ2VEYXRhKHNvdXJjZSwgc291cmNlU2l6
ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBt
X3NpemUsIFByZW11bHRpcGxpZWQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gODMxODUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MzUsNyArNzM1LDYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpz
ZXRTaGFyZWRHcmFwaAogICAgIGlmIChjb250ZXh0ICYmIGRyYXdpbmdCdWZmZXIpIHsKICAgICAg
ICAgbV91c2VHUFUgPSB0cnVlOwogICAgICAgICBtX2dwdUNhbnZhcyA9IG5ldyBHTEVTMkNhbnZh
cyhjb250ZXh0LCBkcmF3aW5nQnVmZmVyLCBzaXplKTsKLSAgICAgICAgbV91cGxvYWRUZXh0dXJl
LmNsZWFyKCk7CiAgICAgICAgIGRyYXdpbmdCdWZmZXItPnNldFdpbGxQdWJsaXNoQ2FsbGJhY2so
V2lsbFB1Ymxpc2hDYWxsYmFja0ltcGw6OmNyZWF0ZSh0aGlzKSk7CiAKICNpZiBFTkFCTEUoU0tJ
QV9HUFUpCkBAIC03NTQsNyArNzUzLDYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRT
aGFyZWRHcmFwaAogI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgc3luY1NvZnR3YXJlQ2Fu
dmFzKCk7Ci0gICAgICAgIG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwogICAgICAgICBtX2dwdUNh
bnZhcy5jbGVhcigpOwogICAgICAgICBtX3VzZUdQVSA9IGZhbHNlOwogICAgIH0KQEAgLTg2NCwx
MyArODYyLDkgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZQogI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICBTa0F1
dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7Ci0gICAgaWYgKCFtX3VwbG9hZFRleHR1
cmUgfHwgbV91cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6ZVgoKSA8IGJpdG1hcC53aWR0
aCgpIHx8IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50b3RhbFNpemVZKCkgPCBiaXRtYXAuaGVp
Z2h0KCkpCi0gICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUo
VGV4dHVyZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0KCkpOwotCi0gICAg
bV91cGxvYWRUZXh0dXJlLT51cGRhdGVTdWJSZWN0KGJpdG1hcC5nZXRQaXhlbHMoKSwgbV9zb2Z0
d2FyZURpcnR5UmVjdCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGlkZW50aXR5OwotICAgIGdwdUNh
bnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4dHVyZS5nZXQoKSwgbV9zb2Z0d2Fy
ZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRlbnRpdHksIDEuMCwgQ29sb3JTcGFj
ZURldmljZVJHQiwgb3AsIGZhbHNlKTsKKyAgICBJbnRTaXplIGJpdG1hcFNpemUoYml0bWFwLndp
ZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgZ3B1Q2FudmFzKCktPnB1dEltYWdlRGF0YShi
aXRtYXAuZ2V0UGl4ZWxzKCksIGJpdG1hcFNpemUsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIG1fc29m
dHdhcmVEaXJ0eVJlY3QubG9jYXRpb24oKSwgVGV4dHVyZTo6QkdSQTgsIDEuMGYsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIG9wLCAwKTsKKwogICAgIC8vIENsZWFyIG91dCB0aGUgcmVnaW9uIG9mIHRo
ZSBzb2Z0d2FyZSBjYW52YXMgd2UganVzdCB1cGxvYWRlZC4KICAgICBtX2NhbnZhcy0+c2F2ZSgp
OwogICAgIG1fY2FudmFzLT5yZXNldE1hdHJpeCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmgJKHJldmlzaW9uIDgzMTg1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw3ICsyMjgs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VHUFU7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKICAgICBPd25QdHI8R0xFUzJDYW52YXM+IG1fZ3B1Q2FudmFzOwotICAgIG11
dGFibGUgUmVmUHRyPFRleHR1cmU+IG1fdXBsb2FkVGV4dHVyZTsKICNlbmRpZgogICAgIG11dGFi
bGUgZW51bSB7IE5vbmUsIFNvZnR3YXJlLCBNaXhlZCwgSGFyZHdhcmUgfSBtX2JhY2tpbmdTdG9y
ZVN0YXRlOwogICAgIG11dGFibGUgSW50UmVjdCBtX3NvZnR3YXJlRGlydHlSZWN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89404</attachid>
            <date>2011-04-13 11:00:00 -0700</date>
            <delta_ts>2011-04-13 15:29:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57960-20110413135959.patch</filename>
            <type>text/plain</type>
            <size>17008</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNzQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDQtMTMgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gQWNjZWxlcmF0ZWQgMkQgQ2FudmFzIGlz
IHNsb3cgdG8gZXhlY3V0ZSBwdXRJbWFnZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTYwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0czoKKyAgICAgICAgZmFzdC9jYW52YXMvY2FudmFz
LXB1dEltYWdlRGF0YS5odG1sCisgICAgICAgIGZhc3QvY2FudmFzL2NhbnZhcy1zdGF0ZS1pbnRh
Y3QtYWZ0ZXItcHV0SW1hZ2VEYXRhLmh0bWwKKyAgICAgICAgY2FudmFzL3BoaWxpcC90ZXN0cy8y
ZC5pbWFnZURhdGEucHV0LmNsaXAuaHRtbAorICAgICAgICBjYW52YXMvcGhpbGlwL3Rlc3RzLzJk
LmltYWdlRGF0YS5wdXQuZGlydHkucmVjdDIuaHRtbAorICAgICAgICBjYW52YXMvcGhpbGlwL3Rl
c3RzLzJkLmltYWdlRGF0YS5wdXQubW9kaWZpZWQuaHRtbAorICAgICAgICBmYXN0L2NhbnZhcy9j
YW52YXMtY29weVBpeGVscy5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdCk6CisgICAgICAgIEFkZGVkIGFuIG9wdGlvbiBmb3IgdXNpbmcgdGhlIGJs
ZW5kIG9wcyBmb3IgYWxwaGEgbXVsdGlwbGljYXRpb24KKyAgICAgICAgaW5zdGVhZCBvZiBjb21w
b3NpdGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjphcHBseUNsaXBwaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBO
ZXcgbWV0aG9kIGZvciBkcmF3aW5nIHJhdyBwaXhlbCBkYXRhIGZyb20gbWVtb3J5IHRvIHRoZSBj
YW52YXMKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpwdXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEpOgorICAgICAgICBXcmFwcGVyIGZvciBwdXRJbWFnZURhdGEKKyAgICAgICAgKFdlYkNv
cmU6OkdMRVMyQ2FudmFzOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgQW5v
dGhlciB3cmFwcGVyCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb3B5U3ViUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
Ojpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnVwZGF0ZVN1YlJlY3QpOgorICAg
ICAgICBBZGRlZCBhbiBvdmVybG9hZCBvZiB0aGUgdXBkYXRlU3ViUmVjdCBtZXRob2QgdGhhdCBj
YW4gcmVjZWl2ZSBhIHBpeGVsIAorICAgICAgICBvZiBhIHNpemUgdGhhdCBpcyBkaWZmZXJlbnQg
ZnJvbSB0ZXh0dXJlIHNpemUuIEltcHJvdmVkIHRoZSBwZXJmb3JtYW5jZQorICAgICAgICBvZiB1
cGRhdGVTdWJyZWN0IGJ5IGF2b2lkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgdGVtcG9yYXJ5IGJ1
ZmZlciB3aGVuCisgICAgICAgIG5vdCByZXF1aXJlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICBOb3cgc3VwcG9ydHMgYSBoYXJkd2FyZSByZW5k
ZXJpbmcgcGF0aCwgd2hpY2ggZWxpbWluYXRlcyB0aGUgbmVlZAorICAgICAgICBmb3IgYSByZWFk
YmFjayBmcm9tIHRoZSBHUFUKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgTm93IHN1cHBvcnRzIGEgaGFyZHdhcmUgcmVu
ZGVyaW5nIHBhdGguICBlbGltaW5hdGVkIHJlYWRiYWNrCisKIDIwMTEtMDQtMTIgIFBhdmVsIFBv
ZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHJldmlzaW9uIDgzNjA4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJHTEVTMkNh
bnZhcy5oIgogCisjaW5jbHVkZSAiQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZl
ci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgpAQCAt
NTcsNiArNTgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIFdURjo6Qnl0ZUFy
cmF5OworCiAvLyBOdW1iZXIgb2YgbGluZSBzZWdtZW50cyB1c2VkIHRvIGFwcHJveGltYXRlIGJl
emllciBjdXJ2ZXMuCiBjb25zdCBpbnQgcGF0aFRlc3NlbGF0aW9uID0gMzA7CiB0eXBlZGVmIHZv
aWQgKEdMQVBJRU5UUlkgKlRFU1NDQikoKTsKQEAgLTQwNiwxNSArNDA5LDIyIEBAIHZvaWQgR0xF
UzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QodW5zaWcKIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUs
IHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xv
clNwYWNlLCBjb21wb3NpdGVPcCwgbV9zdGF0ZS0+Y2xpcHBpbmdFbmFibGVkKCkpOworICAgIGRy
YXdUZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0s
IG1fc3RhdGUtPm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBtX3N0YXRlLT5jbGlw
cGluZ0VuYWJsZWQoKSA/IEFwcGx5Q2xpcHBpbmcgOiAwKTsKIH0KIAotCi12b2lkIEdMRVMyQ2Fu
dmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3AsIGJvb2wgY2xpcCkKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdU
ZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCwgdW5zaWduZWQgZHJhd1RleHR1cmVGbGFncykKIHsKICAgICBiaW5kRnJhbWVi
dWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRl
T3ApOwotICAgIGFwcGx5Q2xpcHBpbmcoY2xpcCk7CisgICAgCisgICAgaWYgKGRyYXdUZXh0dXJl
RmxhZ3MgJiBNdWx0aXBseVNvdXJjZUFscGhhKSB7CisgICAgICAgIC8vIFRoZSBtdWx0aXBseSBv
cHRpb24gaGlqYWNrcyB0aGUgYmxlbmQgZnVuYywgc28gaXQgY2FuJ3QgYmUgY29tYmluZSB3aXRo
IGEgY29tcG9zaXRpbmcgb3AKKyAgICAgICAgQVNTRVJUKENvbXBvc2l0ZUNvcHkgPT0gY29tcG9z
aXRlT3ApOworICAgICAgICAvLyBDdXN0b20gY29tcG9zaXRlIG9wZXJhdGlvbiB0aGF0IHBlcmZv
cm1zIGFscGhhIG11bHRpcGxpY2F0aW9uIG9uIGNvbG9yIGNvbXBvbmVudHMKKyAgICAgICAgbV9j
b250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5ibGVuZEZ1bmNT
ZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6
WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwor
ICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29t
cG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBpbmcoZHJhd1RleHR1cmVGbGFncyAmIEFwcGx5Q2xp
cHBpbmcpOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsK
ICAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2VzKHNy
Y1JlY3QpOwogCkBAIC05MDMsNiArOTEzLDQ0IEBAIHZvaWQgR0xFUzJDYW52YXM6OmFwcGx5Q2xp
cHBpbmcoYm9vbCBlbmEKICAgICB9CiB9CiAKK3ZvaWQgR0xFUzJDYW52YXM6OnB1dEltYWdlRGF0
YSh2b2lkKiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFRleHR1cmU6OkZvcm1hdCBm
b3JtYXQsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCB1bnNpZ25lZCBkcmF3VGV4dHVyZUZsYWdzKQoreworICAgIEFTU0VSVChzb3VyY2Up
OworICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QoMCwgMCwgc291cmNlU2l6ZS53aWR0aCgp
LCBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3Qo
c291cmNlUmVjdCk7CisgICAgaW50IGRlbHRhWCA9IGNsaXBwZWRTb3VyY2VSZWN0LngoKSAtIHNv
dXJjZVJlY3QueCgpOworICAgIGludCBkZWx0YVkgPSBjbGlwcGVkU291cmNlUmVjdC55KCkgLSBz
b3VyY2VSZWN0LnkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZERlc3RQb2ludChkZXN0UG9pbnQu
eCgpICsgZGVsdGFYLCBkZXN0UG9pbnQueSgpICsgZGVsdGFZKTsgICAgCisgICAgSW50UmVjdCBk
ZXN0UmVjdChhZGp1c3RlZERlc3RQb2ludCwgY2xpcHBlZFNvdXJjZVJlY3Quc2l6ZSgpKTsKKyAg
ICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGNhbnZhc1JlY3QpOworICAgIGRlbHRhWCA9IGRl
c3RSZWN0LngoKSAtIGFkanVzdGVkRGVzdFBvaW50LngoKTsKKyAgICBkZWx0YVkgPSBkZXN0UmVj
dC55KCkgLSBhZGp1c3RlZERlc3RQb2ludC55KCk7CisgICAgY2xpcHBlZFNvdXJjZVJlY3QubW92
ZShkZWx0YVgsIGRlbHRhWSk7CisgICAgY2xpcHBlZFNvdXJjZVJlY3Quc2V0U2l6ZShkZXN0UmVj
dC5zaXplKCkpOworICAgIGlmICghY2xpcHBlZFNvdXJjZVJlY3Qud2lkdGgoKSB8fCAhY2xpcHBl
ZFNvdXJjZVJlY3QuaGVpZ2h0KCkpIAorICAgICAgICByZXR1cm47CisgICAgUmVmUHRyPFRleHR1
cmU+IHVwbG9hZFRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoZm9ybWF0LCBjbGlw
cGVkU291cmNlUmVjdC53aWR0aCgpLCBjbGlwcGVkU291cmNlUmVjdC5oZWlnaHQoKSk7CisgICAg
SW50UmVjdCB0ZXhVcGRhdGVSZWN0KDAsIDAsIGNsaXBwZWRTb3VyY2VSZWN0LndpZHRoKCksIGNs
aXBwZWRTb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICAvLyBUbyBnZXQgdGhlIHJvdyBzdHJpZGUg
cmlnaHQsIHdlIHN0aWxsIHRha2UgdGhlIHdpZHRoIG9mIHRoZSBmdWxsIGJ1ZmZlciBmb3IgdGhl
IHNvdXJjZSBzaXplLgorICAgIEludFNpemUgYWRqdXN0ZWRTb3VyY2VTaXplKHNvdXJjZVNpemUu
d2lkdGgoKSwgdGV4VXBkYXRlUmVjdC5oZWlnaHQoKSk7CisgICAgdXBsb2FkVGV4dHVyZS0+dXBk
YXRlU3ViUmVjdCgoKGNoYXIqKXNvdXJjZSkgKyAoY2xpcHBlZFNvdXJjZVJlY3QueSgpICogc291
cmNlU2l6ZS53aWR0aCgpICsgY2xpcHBlZFNvdXJjZVJlY3QueCgpKSAqIDQsIGFkanVzdGVkU291
cmNlU2l6ZSwgdGV4VXBkYXRlUmVjdCk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGlkZW50aXR5Owor
ICAgIGRyYXdUZXh0dXJlZFJlY3QodXBsb2FkVGV4dHVyZS5nZXQoKSwgdGV4VXBkYXRlUmVjdCwg
ZGVzdFJlY3QsIGlkZW50aXR5LCBhbHBoYSwgY29sb3JTcGFjZSwgb3AsIGRyYXdUZXh0dXJlRmxh
Z3MpOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0
ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgSW50UG9pbnQg
bmV3RGVzdFBvaW50KGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LngoKSwgZGVzdFBvaW50Lnko
KSArIHNvdXJjZVJlY3QueSgpKTsKKyAgICBwdXRJbWFnZURhdGEoc291cmNlLT5kYXRhKCksIHNv
dXJjZVNpemUsIHNvdXJjZVJlY3QsIG5ld0Rlc3RQb2ludCwgVGV4dHVyZTo6UkdCQTgsIDEuMGYs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHksIE11bHRpcGx5U291cmNlQWxwaGEp
OworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVB
cnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEludFBvaW50IG5l
d0Rlc3RQb2ludChkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCksIGRlc3RQb2ludC55KCkg
KyBzb3VyY2VSZWN0LnkoKSk7CisgICAgcHV0SW1hZ2VEYXRhKHNvdXJjZS0+ZGF0YSgpLCBzb3Vy
Y2VTaXplLCBzb3VyY2VSZWN0LCBuZXdEZXN0UG9pbnQsIFRleHR1cmU6OlJHQkE4LCAxLjBmLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5LCAwKTsKK30KKwogdm9pZCBHTEVTMkNh
bnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcikKIHsKICNpZm5kZWYgTkRFQlVH
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmgJKHJldmlzaW9uIDgzNjA4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgQnl0ZUFycmF5OworfQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9yOwpAQCAtNTUsNiArNTksMTEgQEAg
Y2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBHTEVTMkNhbnZhcyB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoR0xFUzJDYW52YXMpOwogcHVibGljOgorICAgIGVudW0gRHJh
d1RleHR1cmVGbGFncyB7CisgICAgICAgIEFwcGx5Q2xpcHBpbmcgPSAgICAgICAgIDEgPDwgMCwK
KyAgICAgICAgTXVsdGlwbHlTb3VyY2VBbHBoYSA9ICAgMSA8PCAxCisgICAgfTsKKwogICAgIEdM
RVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0
IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52YXMoKTsKIApAQCAtODgsMTAgKzk3LDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3Qg
SW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgLy8g
VGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSBCaXRtYXBJbWFnZTo6ZHJhdygpLgogICAgIHZvaWQg
ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAg
ICAvLyBUaGlzIHZlcnNpb24gaXMgY2FsbGVkIGJ5IHRoZSBhYm92ZSwgYW5kIGJ5IHRoZSBzb2Z0
d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KLSAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVy
ZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRl
T3BlcmF0b3IsIGJvb2wgY2xpcCk7CisgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0
aGUgYWJvdmUsIGJ5IHB1dEltYWdlRGF0YSwgYW5kIGJ5IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUg
dXBsb2Fkcy4KKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIHVuc2ln
bmVkIGRyYXdUZXh0dXJlRmxhZ3MpOwogICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZl
SW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBU
ZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKKyAgICB2b2lkIHB1dEltYWdlRGF0
YSh2b2lkKiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFRleHR1cmU6OkZvcm1hdCwg
ZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCB1bnNpZ25lZCBkcmF3
VGV4dHVyZUZsYWdzKTsKKyAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdlRGF0YShXVEY6OkJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKKyAgICB2b2lkIHB1dFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoV1RGOjpCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCk7CiAKICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShyZXZpc2lvbiA4MzYwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDEzICsxMjAsOSBAQCBQYXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNy
ZWF0ZShHcmFwCiB9CiAKIHRlbXBsYXRlIDxib29sIHN3aXp6bGU+Ci1zdGF0aWMgdWludDMyX3Qq
IGNvcHlTdWJSZWN0KHVpbnQzMl90KiBzcmMsIGludCBzcmNYLCBpbnQgc3JjWSwgdWludDMyX3Qq
IGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3JjU3RyaWRlKQorc3RhdGljIHZvaWQg
Y29weVN1YlJlY3QodWludDMyX3QqIHNyYywgaW50IHNyY1gsIGludCBzcmNZLCB1aW50MzJfdCog
ZHN0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzcmNTdHJpZGUpCiB7CiAgICAgdWludDMy
X3QqIHNyY09mZnNldCA9IHNyYyArIHNyY1ggKyBzcmNZICogc3JjU3RyaWRlOwotCi0gICAgaWYg
KCFzd2l6emxlICYmIHdpZHRoID09IHNyY1N0cmlkZSkKLSAgICAgICAgcmV0dXJuIHNyY09mZnNl
dDsKLQogICAgIGlmIChzd2l6emxlKSB7CiAgICAgICAgIHVpbnQzMl90KiBkc3RQaXhlbCA9IGRz
dDsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewpAQCAtMTQxLDE4
ICsxMzcsMjMgQEAgc3RhdGljIHVpbnQzMl90KiBjb3B5U3ViUmVjdCh1aW50MzJfdCogcwogICAg
ICAgICAgICAgbWVtY3B5KGRzdCArIHkgKiB3aWR0aCwgc3JjT2Zmc2V0ICsgeSAqIHNyY1N0cmlk
ZSwgNCAqIHdpZHRoKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gZHN0OwogfQogCiB2
b2lkIFRleHR1cmU6OmxvYWQodm9pZCogcGl4ZWxzKQogewotICAgIHVwZGF0ZVN1YlJlY3QocGl4
ZWxzLCBJbnRSZWN0KDAsIDAsIG1fdGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6
ZVkoKSkpOworICAgIHVwZGF0ZVN1YlJlY3QocGl4ZWxzLCBJbnRTaXplKG1fdGlsZXMudG90YWxT
aXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSksIEludFJlY3QoMCwgMCwgbV90aWxlcy50b3Rh
bFNpemVYKCksIG1fdGlsZXMudG90YWxTaXplWSgpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6dXBk
YXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCiB7Cisg
ICAgdXBkYXRlU3ViUmVjdChwaXhlbHMsIEludFNpemUobV90aWxlcy50b3RhbFNpemVYKCksIG1f
dGlsZXMudG90YWxTaXplWSgpKSwgdXBkYXRlUmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZTo6dXBk
YXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNpemUmIHBpeGVsQnVmZmVyU2l6ZSwg
Y29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKK3sKKyAgICBJbnRTaXplIHVwZGF0ZUJvdW5kcyA9
IHBpeGVsQnVmZmVyU2l6ZS5zaHJ1bmtUbyhJbnRTaXplKG1fdGlsZXMudG90YWxTaXplWCgpLCBt
X3RpbGVzLnRvdGFsU2l6ZVkoKSkpOwogICAgIEludFJlY3QgdXBkYXRlUmVjdFNhbml0aXplZCh1
cGRhdGVSZWN0KTsKLSAgICB1cGRhdGVSZWN0U2FuaXRpemVkLmludGVyc2VjdChJbnRSZWN0KDAs
IDAsIG1fdGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSkpOworICAgIHVw
ZGF0ZVJlY3RTYW5pdGl6ZWQuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgdXBkYXRlQm91bmRzLndp
ZHRoKCksIHVwZGF0ZUJvdW5kcy5oZWlnaHQoKSkpOwogCiAgICAgdWludDMyX3QqIHBpeGVsczMy
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpOwogICAgIHVuc2lnbmVkIGludCBnbEZv
cm1hdCA9IDA7CkBAIC0xNjMsMTAgKzE2NCwxNCBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJl
Y3Qodm9pZCogcGl4ZWxzCiAgICAgICAgIEFTU0VSVChnbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSAmJiBnbFR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
OwogICAgICAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgdXNlIFBCTydzIHRvIHNhdmUgZG9pbmcg
YW4gZXh0cmEgY29weSBoZXJlLgogICAgIH0KKwogICAgIGludCB0ZW1wQnVmZlNpemUgPSAvLyBU
ZW1wb3JhcnkgYnVmZmVyIHNpemUgaXMgdGhlIHNtYWxsZXIgb2YgdGhlIG1heCB0ZXh0dXJlIHNp
emUgb3IgdGhlIHVwZGF0ZVJlY3RTYW5pdGl6ZWQKICAgICAgICAgbWluKG1fdGlsZXMubWF4VGV4
dHVyZVNpemUoKSwgbV90aWxlcy5ib3JkZXJUZXhlbHMoKSArIHVwZGF0ZVJlY3RTYW5pdGl6ZWQu
d2lkdGgoKSkgKgogICAgICAgICBtaW4obV90aWxlcy5tYXhUZXh0dXJlU2l6ZSgpLCBtX3RpbGVz
LmJvcmRlclRleGVscygpICsgdXBkYXRlUmVjdFNhbml0aXplZC5oZWlnaHQoKSk7Ci0gICAgT3du
QXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZmID0gYWRvcHRBcnJheVB0cihuZXcgdWludDMyX3Rb
dGVtcEJ1ZmZTaXplXSk7CisgICAgYm9vbCBuZWVkVGVtcEJ1ZmYgPSBzd2l6emxlIHx8IHVwZGF0
ZVJlY3Qud2lkdGgoKSAhPSBtX3RpbGVzLnRvdGFsU2l6ZVgoKSB8fCB1cGRhdGVSZWN0LndpZHRo
KCkgIT0gcGl4ZWxCdWZmZXJTaXplLndpZHRoKCkgfHwgbV90aWxlcy5udW1UaWxlc1goKSA+IDE7
CisgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZmOworICAgIGlmIChuZWVkVGVtcEJ1
ZmYpCisgICAgICAgIHRlbXBCdWZmID0gYWRvcHRBcnJheVB0cihuZXcgdWludDMyX3RbdGVtcEJ1
ZmZTaXplXSk7CiAKICAgICBmb3IgKGludCB0aWxlID0gMDsgdGlsZSA8IG1fdGlsZXMubnVtVGls
ZXMoKTsgdGlsZSsrKSB7CiAgICAgICAgIC8vIEludGVyc2VjdCB3aXRoIHRpbGUKQEAgLTE4MSwx
NiArMTg2LDIxIEBAIHZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMKICAg
ICAgICAgaWYgKHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICAvLyBDb3B5IHN1YiByZWN0YW5nbGUgb3V0IG9mIGxhcmdlciBw
aXhlbCBkYXRhCiAgICAgICAgIHVpbnQzMl90KiB1cGxvYWRCdWZmID0gMDsKLSAgICAgICAgaWYg
KHN3aXp6bGUpIHsKLSAgICAgICAgICAgIHVwbG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDx0cnVlPigK
LSAgICAgICAgICAgIHBpeGVsczMyLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQueCgpLCB1cGRhdGVS
ZWN0SW50ZXJzZWN0ZWQueSgpLAotICAgICAgICAgICAgdGVtcEJ1ZmYuZ2V0KCksIHVwZGF0ZVJl
Y3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCksIG1f
dGlsZXMudG90YWxTaXplWCgpKTsKKyAgICAgICAgaWYgKG5lZWRUZW1wQnVmZikgeworICAgICAg
ICAgICAgdXBsb2FkQnVmZiA9IHRlbXBCdWZmLmdldCgpOworICAgICAgICAgICAgLy8gQ29weSBz
dWIgcmVjdGFuZ2xlIG91dCBvZiBsYXJnZXIgcGl4ZWwgZGF0YQorICAgICAgICAgICAgaWYgKHN3
aXp6bGUpIHsKKyAgICAgICAgICAgICAgICBjb3B5U3ViUmVjdDx0cnVlPigKKyAgICAgICAgICAg
ICAgICBwaXhlbHMzMiwgdXBkYXRlUmVjdEludGVyc2VjdGVkLngoKSwgdXBkYXRlUmVjdEludGVy
c2VjdGVkLnkoKSwKKyAgICAgICAgICAgICAgICB1cGxvYWRCdWZmLCB1cGRhdGVSZWN0SW50ZXJz
ZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLmhlaWdodCgpLCBwaXhlbEJ1ZmZl
clNpemUud2lkdGgoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNv
cHlTdWJSZWN0PGZhbHNlPigKKyAgICAgICAgICAgICAgICBwaXhlbHMzMiwgdXBkYXRlUmVjdElu
dGVyc2VjdGVkLngoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLnkoKSwKKyAgICAgICAgICAgICAg
ICB1cGxvYWRCdWZmLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdElu
dGVyc2VjdGVkLmhlaWdodCgpLCBwaXhlbEJ1ZmZlclNpemUud2lkdGgoKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cGxvYWRCdWZmID0gY29weVN1YlJl
Y3Q8ZmFsc2U+KAotICAgICAgICAgICAgcGl4ZWxzMzIsIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC54
KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55KCksCi0gICAgICAgICAgICB0ZW1wQnVmZi5nZXQo
KSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLndpZHRoKCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5o
ZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemVYKCkpOworICAgICAgICAgICAgdXBsb2FkQnVmZiA9
IHBpeGVsczMyICsgdXBkYXRlUmVjdEludGVyc2VjdGVkLngoKSArIHVwZGF0ZVJlY3RJbnRlcnNl
Y3RlZC55KCkgKiBwaXhlbEJ1ZmZlclNpemUud2lkdGgoKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
dGlsZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuaAkocmV2aXNpb24gODM2MDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogCiBjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6ZTsKIAogY2xhc3MgVGV4dHVyZSA6
IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmU+IHsKIHB1YmxpYzoKQEAgLTUxLDYgKzUyLDcgQEAg
cHVibGljOgogICAgIHZvaWQgYmluZFRpbGUoaW50IHRpbGUpOwogICAgIHZvaWQgbG9hZCh2b2lk
KiBwaXhlbHMpOwogICAgIHZvaWQgdXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRT
aXplJiwgY29uc3QgSW50UmVjdCYpOwogICAgIEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVy
biBtX2Zvcm1hdDsgfQogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzKCkgY29uc3QgeyByZXR1
cm4gbV90aWxlczsgfQogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9u
IDgzNjA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsMTMgKzMzMiwyMyBAQCB2b2lkIHB1
dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAKIHZvaWQgSW1hZ2VCdWZmZXI6OnB1
dFVubXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCkKIHsKLSAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdh
cmVDYW52YXMoKTsKLSAgICBwdXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJj
ZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmdldERldmljZSgpLCBtX3NpemUpOworICAgIFBsYXRmb3JtQ29udGV4dFNr
aWEqIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAg
aWYgKHBsYXRmb3JtQ29udGV4dC0+dXNlR1BVKCkpIHsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0
LT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Z3B1
Q2FudmFzKCktPnB1dFVubXVsdGlwbGllZEltYWdlRGF0YShzb3VyY2UsIHNvdXJjZVNpemUsIHNv
dXJjZVJlY3QsIGRlc3RQb2ludCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcHV0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0
UG9pbnQsIHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCktPmdldERldmljZSgpLCBtX3NpemUpOwog
fQogCiB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgIFBsYXRmb3JtQ29udGV4
dFNraWEqIHBsYXRmb3JtQ29udGV4dCA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+dXNlR1BVKCkpIHsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0LT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+
Z3B1Q2FudmFzKCktPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoc291cmNlLCBzb3VyY2VTaXpl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIHB1
dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3Qs
IGRlc3RQb2ludCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERl
dmljZSgpLCBtX3NpemUpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89479</attachid>
            <date>2011-04-13 15:29:42 -0700</date>
            <delta_ts>2011-04-14 11:40:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57960-20110413182941.patch</filename>
            <type>text/plain</type>
            <size>21233</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNzczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDQtMTMgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gQWNjZWxlcmF0ZWQgMkQgQ2FudmFzIGlz
IHNsb3cgdG8gZXhlY3V0ZSBwdXRJbWFnZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTYwCisKKyogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRyYXdU
ZXh0dXJlZFJlY3QpOgorICAgICAgICBBZGRlZCBhbiBvcHRpb24gZm9yIHVzaW5nIHRoZSBibGVu
ZCBvcHMgZm9yIGFscGhhIG11bHRpcGxpY2F0aW9uCisgICAgICAgIGluc3RlYWQgb2YgY29tcG9z
aXRpbmcuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDbGlwcGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgTmV3
IG1ldGhvZCBmb3IgZHJhd2luZyByYXcgcGl4ZWwgZGF0YSBmcm9tIG1lbW9yeSB0byB0aGUgY2Fu
dmFzCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKToKKyAgICAgICAgV3JhcHBlciBmb3IgcHV0SW1hZ2VEYXRhCisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIEFub3Ro
ZXIgd3JhcHBlcgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2Fu
dmFzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVN1YlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlOjp1cGRhdGVTdWJSZWN0KToKKyAgICAg
ICAgQWRkZWQgYW4gb3ZlcmxvYWQgb2YgdGhlIHVwZGF0ZVN1YlJlY3QgbWV0aG9kIHRoYXQgY2Fu
IHJlY2VpdmUgYSBwaXhlbCAKKyAgICAgICAgb2YgYSBzaXplIHRoYXQgaXMgZGlmZmVyZW50IGZy
b20gdGV4dHVyZSBzaXplLiBJbXByb3ZlZCB0aGUgcGVyZm9ybWFuY2UKKyAgICAgICAgb2YgdXBk
YXRlU3VicmVjdCBieSBhdm9pZGluZyB0aGUgYWxsb2NhdGlvbiBvZiBhIHRlbXBvcmFyeSBidWZm
ZXIgd2hlbgorICAgICAgICBub3QgcmVxdWlyZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleHR1cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOgorCUluIHRo
ZSB1bm11bHRpcGxpZWQgcGF0aCwgZGl2aXNpb24gYnkgYWxwaGEgbm93IHBlcmZvcm1zIHByb3Bl
cgorICAgICAgICByb3VuZGluZyBpbiBvcmRlciB0byBhdm9pZCBnZW5lcmF0aW9uYWwgZGVncmFk
YXRpb24gd2l0aCBwdXRJbWFnZURhdGEKKyAgICAgICAgKFdlYkNvcmU6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIEFscGhhIG11bHRpcGxpY2F0aW9uIG5vdyBwZXJmb3JtcyBwcm9wZXIgcm91bmRp
bmcgaW4gb3JkZXIgdG8gYmUKKyAgICAgICAgY29uc2lzdGVudCB3aXRoIHRoZSBoYXJkd2FyZSBy
ZW5kZXJpbmcgcGF0aDogT3BlbkdMIGFsd2F5cyByb3VuZHMgd2hlbgorICAgICAgICBjb252ZXJ0
aW5nIHRvIGZpeGVkIHBvaW50IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIE5vdyBzdXBwb3J0
cyBhIGhhcmR3YXJlIHJlbmRlcmluZyBwYXRoLCB3aGljaCBlbGltaW5hdGVzIHRoZSBuZWVkCisg
ICAgICAgIGZvciBhIHJlYWRiYWNrIGZyb20gdGhlIEdQVQorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEpOgorICAgICAgICBOb3cgc3VwcG9y
dHMgYSBoYXJkd2FyZSByZW5kZXJpbmcgcGF0aC4gIGVsaW1pbmF0ZWQgcmVhZGJhY2sKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdMRVMyQ2FudmFzOjphcHBseUNsaXBwaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6
OnB1dFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZh
czo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb3B5U3ViUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnVw
ZGF0ZVN1YlJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKToKKwogMjAxMS0wNC0xMyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMy
Q2FudmFzLmNwcAkocmV2aXNpb24gODM2MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKIAogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAKKyNpbmNsdWRlICJCeXRlQXJy
YXkuaCIKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCkBAIC01Nyw2ICs1OCw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAordXNpbmcgV1RGOjpCeXRlQXJyYXk7CisKIC8vIE51bWJlciBvZiBsaW5lIHNl
Z21lbnRzIHVzZWQgdG8gYXBwcm94aW1hdGUgYmV6aWVyIGN1cnZlcy4KIGNvbnN0IGludCBwYXRo
VGVzc2VsYXRpb24gPSAzMDsKIHR5cGVkZWYgdm9pZCAoR0xBUElFTlRSWSAqVEVTU0NCKSgpOwpA
QCAtNDA2LDE1ICs0MDksMjIgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCh1
bnNpZwogCiB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1
cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewot
ICAgIGRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+
bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBtX3N0YXRl
LT5jbGlwcGluZ0VuYWJsZWQoKSk7CisgICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNS
ZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFj
ZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpID8gQXBwbHlDbGlwcGlu
ZyA6IDApOwogfQogCi0KLXZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVy
ZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgYm9vbCBj
bGlwKQordm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJl
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCB1bnNpZ25lZCBkcmF3VGV4
dHVyZUZsYWdzKQogewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YXBw
bHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7Ci0gICAgYXBwbHlDbGlwcGluZyhjbGlw
KTsKKyAgICAKKyAgICBpZiAoZHJhd1RleHR1cmVGbGFncyAmIE11bHRpcGx5U291cmNlQWxwaGEp
IHsKKyAgICAgICAgLy8gVGhlIG11bHRpcGx5IG9wdGlvbiBoaWphY2tzIHRoZSBibGVuZCBmdW5j
LCBzbyBpdCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIGEgY29tcG9zaXRpbmcgb3AKKyAgICAgICAg
QVNTRVJUKENvbXBvc2l0ZUNvcHkgPT0gY29tcG9zaXRlT3ApOworICAgICAgICAvLyBDdXN0b20g
Y29tcG9zaXRlIG9wZXJhdGlvbiB0aGF0IHBlcmZvcm1zIGFscGhhIG11bHRpcGxpY2F0aW9uIG9u
IGNvbG9yIGNvbXBvbmVudHMKKyAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpLT5ibGVuZEZ1bmNTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6
U1JDX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9O
RSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRl
eHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBp
bmcoZHJhd1RleHR1cmVGbGFncyAmIEFwcGx5Q2xpcHBpbmcpOwogICAgIGNvbnN0IFRpbGluZ0Rh
dGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKICAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0g
dGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2VzKHNyY1JlY3QpOwogCkBAIC05MDMsNiArOTEzLDQ0
IEBAIHZvaWQgR0xFUzJDYW52YXM6OmFwcGx5Q2xpcHBpbmcoYm9vbCBlbmEKICAgICB9CiB9CiAK
K3ZvaWQgR0xFUzJDYW52YXM6OnB1dEltYWdlRGF0YSh2b2lkKiBzb3VyY2UsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIGZsb2F0IGFscGhhLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCB1bnNpZ25lZCBkcmF3VGV4dHVy
ZUZsYWdzKQoreworICAgIEFTU0VSVChzb3VyY2UpOworICAgIEludFJlY3QgY2xpcHBlZFNvdXJj
ZVJlY3QoMCwgMCwgc291cmNlU2l6ZS53aWR0aCgpLCBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAg
ICBjbGlwcGVkU291cmNlUmVjdC5pbnRlcnNlY3Qoc291cmNlUmVjdCk7CisgICAgaW50IGRlbHRh
WCA9IGNsaXBwZWRTb3VyY2VSZWN0LngoKSAtIHNvdXJjZVJlY3QueCgpOworICAgIGludCBkZWx0
YVkgPSBjbGlwcGVkU291cmNlUmVjdC55KCkgLSBzb3VyY2VSZWN0LnkoKTsKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZERlc3RQb2ludChkZXN0UG9pbnQueCgpICsgZGVsdGFYLCBkZXN0UG9pbnQueSgp
ICsgZGVsdGFZKTsgICAgCisgICAgSW50UmVjdCBkZXN0UmVjdChhZGp1c3RlZERlc3RQb2ludCwg
Y2xpcHBlZFNvdXJjZVJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0
KGNhbnZhc1JlY3QpOworICAgIGRlbHRhWCA9IGRlc3RSZWN0LngoKSAtIGFkanVzdGVkRGVzdFBv
aW50LngoKTsKKyAgICBkZWx0YVkgPSBkZXN0UmVjdC55KCkgLSBhZGp1c3RlZERlc3RQb2ludC55
KCk7CisgICAgY2xpcHBlZFNvdXJjZVJlY3QubW92ZShkZWx0YVgsIGRlbHRhWSk7CisgICAgY2xp
cHBlZFNvdXJjZVJlY3Quc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGlmICghY2xpcHBl
ZFNvdXJjZVJlY3Qud2lkdGgoKSB8fCAhY2xpcHBlZFNvdXJjZVJlY3QuaGVpZ2h0KCkpIAorICAg
ICAgICByZXR1cm47CisgICAgUmVmUHRyPFRleHR1cmU+IHVwbG9hZFRleHR1cmUgPSBtX2NvbnRl
eHQtPmNyZWF0ZVRleHR1cmUoZm9ybWF0LCBjbGlwcGVkU291cmNlUmVjdC53aWR0aCgpLCBjbGlw
cGVkU291cmNlUmVjdC5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0ZXhVcGRhdGVSZWN0KDAsIDAs
IGNsaXBwZWRTb3VyY2VSZWN0LndpZHRoKCksIGNsaXBwZWRTb3VyY2VSZWN0LmhlaWdodCgpKTsK
KyAgICAvLyBUbyBnZXQgdGhlIHJvdyBzdHJpZGUgcmlnaHQsIHdlIHN0aWxsIHRha2UgdGhlIHdp
ZHRoIG9mIHRoZSBmdWxsIGJ1ZmZlciBmb3IgdGhlIHNvdXJjZSBzaXplLgorICAgIEludFNpemUg
YWRqdXN0ZWRTb3VyY2VTaXplKHNvdXJjZVNpemUud2lkdGgoKSwgdGV4VXBkYXRlUmVjdC5oZWln
aHQoKSk7CisgICAgdXBsb2FkVGV4dHVyZS0+dXBkYXRlU3ViUmVjdCgoKGNoYXIqKXNvdXJjZSkg
KyAoY2xpcHBlZFNvdXJjZVJlY3QueSgpICogc291cmNlU2l6ZS53aWR0aCgpICsgY2xpcHBlZFNv
dXJjZVJlY3QueCgpKSAqIDQsIGFkanVzdGVkU291cmNlU2l6ZSwgdGV4VXBkYXRlUmVjdCk7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGlkZW50aXR5OworICAgIGRyYXdUZXh0dXJlZFJlY3QodXBsb2Fk
VGV4dHVyZS5nZXQoKSwgdGV4VXBkYXRlUmVjdCwgZGVzdFJlY3QsIGlkZW50aXR5LCBhbHBoYSwg
Y29sb3JTcGFjZSwgb3AsIGRyYXdUZXh0dXJlRmxhZ3MpOworfQorCit2b2lkIEdMRVMyQ2FudmFz
OjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQpCit7CisgICAgSW50UG9pbnQgbmV3RGVzdFBvaW50KGRlc3RQb2ludC54KCkg
KyBzb3VyY2VSZWN0LngoKSwgZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QueSgpKTsKKyAgICBw
dXRJbWFnZURhdGEoc291cmNlLT5kYXRhKCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIG5ld0Rl
c3RQb2ludCwgVGV4dHVyZTo6UkdCQTgsIDEuMGYsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBv
c2l0ZUNvcHksIE11bHRpcGx5U291cmNlQWxwaGEpOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpw
dXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQoreworICAgIEludFBvaW50IG5ld0Rlc3RQb2ludChkZXN0UG9pbnQueCgpICsg
c291cmNlUmVjdC54KCksIGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LnkoKSk7CisgICAgcHV0
SW1hZ2VEYXRhKHNvdXJjZS0+ZGF0YSgpLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBuZXdEZXN0
UG9pbnQsIFRleHR1cmU6OlJHQkE4LCAxLjBmLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3Np
dGVDb3B5LCAwKTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNo
YXIqIGhlYWRlcikKIHsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHJldmlz
aW9uIDgzNjA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R0xFUzJDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFj
ZSBXVEYgeworY2xhc3MgQnl0ZUFycmF5OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENvbG9yOwpAQCAtNTUsNiArNTksMTEgQEAgY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q7CiBjbGFzcyBHTEVTMkNhbnZhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xFUzJD
YW52YXMpOwogcHVibGljOgorICAgIGVudW0gRHJhd1RleHR1cmVGbGFncyB7CisgICAgICAgIEFw
cGx5Q2xpcHBpbmcgPSAgICAgICAgIDEgPDwgMCwKKyAgICAgICAgTXVsdGlwbHlTb3VyY2VBbHBo
YSA9ICAgMSA8PCAxCisgICAgfTsKKwogICAgIEdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52
YXMoKTsKIApAQCAtODgsMTAgKzk3LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdUZXh0dXJl
ZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSBC
aXRtYXBJbWFnZTo6ZHJhdygpLgogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICAvLyBUaGlzIHZlcnNpb24gaXMgY2FsbGVk
IGJ5IHRoZSBhYm92ZSwgYW5kIGJ5IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KLSAg
ICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9h
dCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgY2xpcCk7CisgICAg
Ly8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUsIGJ5IHB1dEltYWdlRGF0YSwg
YW5kIGJ5IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KKyAgICB2b2lkIGRyYXdUZXh0
dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIHVuc2lnbmVkIGRyYXdUZXh0dXJlRmxhZ3MpOwogICAg
IFRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUlt
YWdlUHRyKTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YSh2b2lkKiBzb3VyY2UsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIFRleHR1cmU6OkZvcm1hdCwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yLCB1bnNpZ25lZCBkcmF3VGV4dHVyZUZsYWdzKTsKKyAgICB2b2lkIHB1
dFVubXVsdGlwbGllZEltYWdlRGF0YShXVEY6OkJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRT
aXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KTsKKyAgICB2b2lkIHB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoV1RGOjpC
eXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAKICAgICBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1
cmUuY3BwCShyZXZpc2lvbiA4MzYwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsOSBAQCBQ
YXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwCiB9CiAKIHRlbXBsYXRlIDxi
b29sIHN3aXp6bGU+Ci1zdGF0aWMgdWludDMyX3QqIGNvcHlTdWJSZWN0KHVpbnQzMl90KiBzcmMs
IGludCBzcmNYLCBpbnQgc3JjWSwgdWludDMyX3QqIGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgc3JjU3RyaWRlKQorc3RhdGljIHZvaWQgY29weVN1YlJlY3QodWludDMyX3QqIHNyYywg
aW50IHNyY1gsIGludCBzcmNZLCB1aW50MzJfdCogZHN0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBzcmNTdHJpZGUpCiB7CiAgICAgdWludDMyX3QqIHNyY09mZnNldCA9IHNyYyArIHNyY1gg
KyBzcmNZICogc3JjU3RyaWRlOwotCi0gICAgaWYgKCFzd2l6emxlICYmIHdpZHRoID09IHNyY1N0
cmlkZSkKLSAgICAgICAgcmV0dXJuIHNyY09mZnNldDsKLQogICAgIGlmIChzd2l6emxlKSB7CiAg
ICAgICAgIHVpbnQzMl90KiBkc3RQaXhlbCA9IGRzdDsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7ICsreSkgewpAQCAtMTQxLDE4ICsxMzcsMjMgQEAgc3RhdGljIHVpbnQzMl90
KiBjb3B5U3ViUmVjdCh1aW50MzJfdCogcwogICAgICAgICAgICAgbWVtY3B5KGRzdCArIHkgKiB3
aWR0aCwgc3JjT2Zmc2V0ICsgeSAqIHNyY1N0cmlkZSwgNCAqIHdpZHRoKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICByZXR1cm4gZHN0OwogfQogCiB2b2lkIFRleHR1cmU6OmxvYWQodm9pZCogcGl4
ZWxzKQogewotICAgIHVwZGF0ZVN1YlJlY3QocGl4ZWxzLCBJbnRSZWN0KDAsIDAsIG1fdGlsZXMu
dG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSkpOworICAgIHVwZGF0ZVN1YlJlY3Qo
cGl4ZWxzLCBJbnRTaXplKG1fdGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVko
KSksIEludFJlY3QoMCwgMCwgbV90aWxlcy50b3RhbFNpemVYKCksIG1fdGlsZXMudG90YWxTaXpl
WSgpKSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QpCiB7CisgICAgdXBkYXRlU3ViUmVjdChwaXhlbHMsIElu
dFNpemUobV90aWxlcy50b3RhbFNpemVYKCksIG1fdGlsZXMudG90YWxTaXplWSgpKSwgdXBkYXRl
UmVjdCk7Cit9CisKK3ZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNv
bnN0IEludFNpemUmIHBpeGVsQnVmZmVyU2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkK
K3sKKyAgICBJbnRTaXplIHVwZGF0ZUJvdW5kcyA9IHBpeGVsQnVmZmVyU2l6ZS5zaHJ1bmtUbyhJ
bnRTaXplKG1fdGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSkpOwogICAg
IEludFJlY3QgdXBkYXRlUmVjdFNhbml0aXplZCh1cGRhdGVSZWN0KTsKLSAgICB1cGRhdGVSZWN0
U2FuaXRpemVkLmludGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fdGlsZXMudG90YWxTaXplWCgpLCBt
X3RpbGVzLnRvdGFsU2l6ZVkoKSkpOworICAgIHVwZGF0ZVJlY3RTYW5pdGl6ZWQuaW50ZXJzZWN0
KEludFJlY3QoMCwgMCwgdXBkYXRlQm91bmRzLndpZHRoKCksIHVwZGF0ZUJvdW5kcy5oZWlnaHQo
KSkpOwogCiAgICAgdWludDMyX3QqIHBpeGVsczMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihw
aXhlbHMpOwogICAgIHVuc2lnbmVkIGludCBnbEZvcm1hdCA9IDA7CkBAIC0xNjMsMTAgKzE2NCwx
NCBAQCB2b2lkIFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzCiAgICAgICAgIEFT
U0VSVChnbEZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBnbFR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBGSVhNRTogIFRoaXMg
Y291bGQgdXNlIFBCTydzIHRvIHNhdmUgZG9pbmcgYW4gZXh0cmEgY29weSBoZXJlLgogICAgIH0K
KwogICAgIGludCB0ZW1wQnVmZlNpemUgPSAvLyBUZW1wb3JhcnkgYnVmZmVyIHNpemUgaXMgdGhl
IHNtYWxsZXIgb2YgdGhlIG1heCB0ZXh0dXJlIHNpemUgb3IgdGhlIHVwZGF0ZVJlY3RTYW5pdGl6
ZWQKICAgICAgICAgbWluKG1fdGlsZXMubWF4VGV4dHVyZVNpemUoKSwgbV90aWxlcy5ib3JkZXJU
ZXhlbHMoKSArIHVwZGF0ZVJlY3RTYW5pdGl6ZWQud2lkdGgoKSkgKgogICAgICAgICBtaW4obV90
aWxlcy5tYXhUZXh0dXJlU2l6ZSgpLCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVj
dFNhbml0aXplZC5oZWlnaHQoKSk7Ci0gICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZm
ID0gYWRvcHRBcnJheVB0cihuZXcgdWludDMyX3RbdGVtcEJ1ZmZTaXplXSk7CisgICAgYm9vbCBu
ZWVkVGVtcEJ1ZmYgPSBzd2l6emxlIHx8IHVwZGF0ZVJlY3Qud2lkdGgoKSAhPSBtX3RpbGVzLnRv
dGFsU2l6ZVgoKSB8fCB1cGRhdGVSZWN0LndpZHRoKCkgIT0gcGl4ZWxCdWZmZXJTaXplLndpZHRo
KCkgfHwgbV90aWxlcy5udW1UaWxlc1goKSA+IDE7CisgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+
IHRlbXBCdWZmOworICAgIGlmIChuZWVkVGVtcEJ1ZmYpCisgICAgICAgIHRlbXBCdWZmID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDMyX3RbdGVtcEJ1ZmZTaXplXSk7CiAKICAgICBmb3IgKGludCB0
aWxlID0gMDsgdGlsZSA8IG1fdGlsZXMubnVtVGlsZXMoKTsgdGlsZSsrKSB7CiAgICAgICAgIC8v
IEludGVyc2VjdCB3aXRoIHRpbGUKQEAgLTE4MSwxNiArMTg2LDIxIEBAIHZvaWQgVGV4dHVyZTo6
dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMKICAgICAgICAgaWYgKHVwZGF0ZVJlY3RJbnRlcnNl
Y3RlZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAvLyBDb3B5
IHN1YiByZWN0YW5nbGUgb3V0IG9mIGxhcmdlciBwaXhlbCBkYXRhCiAgICAgICAgIHVpbnQzMl90
KiB1cGxvYWRCdWZmID0gMDsKLSAgICAgICAgaWYgKHN3aXp6bGUpIHsKLSAgICAgICAgICAgIHVw
bG9hZEJ1ZmYgPSBjb3B5U3ViUmVjdDx0cnVlPigKLSAgICAgICAgICAgIHBpeGVsczMyLCB1cGRh
dGVSZWN0SW50ZXJzZWN0ZWQueCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQueSgpLAotICAgICAg
ICAgICAgdGVtcEJ1ZmYuZ2V0KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRh
dGVSZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0KCksIG1fdGlsZXMudG90YWxTaXplWCgpKTsKKyAgICAg
ICAgaWYgKG5lZWRUZW1wQnVmZikgeworICAgICAgICAgICAgdXBsb2FkQnVmZiA9IHRlbXBCdWZm
LmdldCgpOworICAgICAgICAgICAgLy8gQ29weSBzdWIgcmVjdGFuZ2xlIG91dCBvZiBsYXJnZXIg
cGl4ZWwgZGF0YQorICAgICAgICAgICAgaWYgKHN3aXp6bGUpIHsKKyAgICAgICAgICAgICAgICBj
b3B5U3ViUmVjdDx0cnVlPigKKyAgICAgICAgICAgICAgICBwaXhlbHMzMiwgdXBkYXRlUmVjdElu
dGVyc2VjdGVkLngoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLnkoKSwKKyAgICAgICAgICAgICAg
ICB1cGxvYWRCdWZmLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdElu
dGVyc2VjdGVkLmhlaWdodCgpLCBwaXhlbEJ1ZmZlclNpemUud2lkdGgoKSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvcHlTdWJSZWN0PGZhbHNlPigKKyAgICAgICAg
ICAgICAgICBwaXhlbHMzMiwgdXBkYXRlUmVjdEludGVyc2VjdGVkLngoKSwgdXBkYXRlUmVjdElu
dGVyc2VjdGVkLnkoKSwKKyAgICAgICAgICAgICAgICB1cGxvYWRCdWZmLCB1cGRhdGVSZWN0SW50
ZXJzZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLmhlaWdodCgpLCBwaXhlbEJ1
ZmZlclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB1cGxvYWRCdWZmID0gY29weVN1YlJlY3Q8ZmFsc2U+KAotICAgICAgICAgICAgcGl4
ZWxzMzIsIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC54KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55
KCksCi0gICAgICAgICAgICB0ZW1wQnVmZi5nZXQoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLndp
ZHRoKCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemVY
KCkpOworICAgICAgICAgICAgdXBsb2FkQnVmZiA9IHBpeGVsczMyICsgdXBkYXRlUmVjdEludGVy
c2VjdGVkLngoKSArIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55KCkgKiBwaXhlbEJ1ZmZlclNpemUu
d2lkdGgoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUu
aAkocmV2aXNpb24gODM2MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiBjbGFzcyBJbnRSZWN0OworY2xh
c3MgSW50U2l6ZTsKIAogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmU+
IHsKIHB1YmxpYzoKQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYmluZFRpbGUo
aW50IHRpbGUpOwogICAgIHZvaWQgbG9hZCh2b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgdXBkYXRl
U3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVN1
YlJlY3Qodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYpOwogICAg
IEZvcm1hdCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQogICAgIGNvbnN0IFRp
bGluZ0RhdGEmIHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDgzNjA4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjksOSArMjI5LDEwIEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEo
Y29uc3QKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RQaXhlbCA9ICZkZXN0Um93W3gg
KiA0XTsKICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCkgewogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYSA9IFNrR2V0UGFja2VkQTMyKHNyY1BNQ29sb3Ip
OwotICAgICAgICAgICAgICAgIGRlc3RQaXhlbFswXSA9IGEgPyBTa0dldFBhY2tlZFIzMihzcmNQ
TUNvbG9yKSAqIDI1NSAvIGEgOiAwOwotICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsxXSA9IGEg
PyBTa0dldFBhY2tlZEczMihzcmNQTUNvbG9yKSAqIDI1NSAvIGEgOiAwOwotICAgICAgICAgICAg
ICAgIGRlc3RQaXhlbFsyXSA9IGEgPyBTa0dldFBhY2tlZEIzMihzcmNQTUNvbG9yKSAqIDI1NSAv
IGEgOiAwOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaGFsZkEgPSBhID4+IDE7Cisg
ICAgICAgICAgICAgICAgZGVzdFBpeGVsWzBdID0gYSA/IChTa0dldFBhY2tlZFIzMihzcmNQTUNv
bG9yKSAqIDI1NSArIGhhbGZBKSAvIGEgOiAwOworICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsx
XSA9IGEgPyAoU2tHZXRQYWNrZWRHMzIoc3JjUE1Db2xvcikgKiAyNTUgKyBoYWxmQSkgLyBhIDog
MDsKKyAgICAgICAgICAgICAgICBkZXN0UGl4ZWxbMl0gPSBhID8gKFNrR2V0UGFja2VkQjMyKHNy
Y1BNQ29sb3IpICogMjU1ICsgaGFsZkEpIC8gYSA6IDA7CiAgICAgICAgICAgICAgICAgZGVzdFBp
eGVsWzNdID0gYTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5w
dXQgYW5kIG91dHB1dCBhcmUgYm90aCBwcmUtbXVsdGlwbGllZCwgd2UganVzdCBuZWVkIHRvIHJl
LWFycmFuZ2UgdGhlCkBAIC0zMTUsOSArMzE2LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFy
cmF5KiYgc291cmNlLCBjbwogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjUGl4
ZWwgPSAmc3JjUm93W3ggKiA0XTsKICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVs
dGlwbGllZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNQaXhl
bFszXTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHIgPSBTa011bERpdjI1NUNlaWxp
bmcoc3JjUGl4ZWxbMF0sIGFscGhhKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGcg
PSBTa011bERpdjI1NUNlaWxpbmcoc3JjUGl4ZWxbMV0sIGFscGhhKTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGIgPSBTa011bERpdjI1NUNlaWxpbmcoc3JjUGl4ZWxbMl0sIGFscGhh
KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHIgPSBTa011bERpdjI1NVJvdW5kKHNy
Y1BpeGVsWzBdLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBnID0gU2tN
dWxEaXYyNTVSb3VuZChzcmNQaXhlbFsxXSwgYWxwaGEpOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYiA9IFNrTXVsRGl2MjU1Um91bmQoc3JjUGl4ZWxbMl0sIGFscGhhKTsKICAgICAg
ICAgICAgICAgICBkZXN0Um93W3hdID0gU2tQYWNrQVJHQjMyKGFscGhhLCByLCBnLCBiKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGRlc3RSb3dbeF0gPSBTa1BhY2tBUkdC
MzIoc3JjUGl4ZWxbM10sIHNyY1BpeGVsWzBdLCBzcmNQaXhlbFsxXSwgc3JjUGl4ZWxbMl0pOwpA
QCAtMzMyLDEzICszMzMsMjMgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNl
LCBjbwogCiB2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFy
cmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7Ci0gICAgcHV0SW1hZ2VEYXRh
PFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQs
IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9z
aXplKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnVzZUdQVSgp
KSB7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwor
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmdwdUNhbnZhcygpLT5wdXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwg
c291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBwbGF0Zm9ybUNvbnRleHQtPmNhbnZh
cygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkKIHsKLSAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVD
YW52YXMoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBjb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnVzZUdQ
VSgpKSB7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygp
OworICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmdwdUNhbnZhcygpLT5wdXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KICAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291
cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKIH0KIApJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gODM3NzMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wNC0xMyAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW0Nocm9taXVtXSBBY2NlbGVyYXRlZCAyRCBDYW52YXMgaXMgc2xvdyB0byBleGVjdXRl
IHB1dEltYWdlRGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTc5NjAKKworICAgICAgICAqIGNhbnZhcy9waGlsaXAvdGVzdHMvMmQuZ3JhZGllbnQu
aW50ZXJwb2xhdGUuY29sb3VyYWxwaGEuaHRtbDoKKyAgICAgICAgaW5jcmVhc2VkIHRlc3QgdG9s
ZXJhbmNlCisKIDIwMTEtMDQtMTMgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0ZSBjaHJvbWl1bSB0ZXN0IGV4cGVjdGF0aW9ucyBwZXIg
Y2hhbmdlIGluIHI4Mzc1Ni4KSW5kZXg6IExheW91dFRlc3RzL2NhbnZhcy9waGlsaXAvdGVzdHMv
MmQuZ3JhZGllbnQuaW50ZXJwb2xhdGUuY29sb3VyYWxwaGEuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9jYW52YXMvcGhpbGlwL3Rlc3RzLzJkLmdyYWRpZW50LmludGVycG9sYXRlLmNv
bG91cmFscGhhLmh0bWwJKHJldmlzaW9uIDgzNjA4KQorKysgTGF5b3V0VGVzdHMvY2FudmFzL3Bo
aWxpcC90ZXN0cy8yZC5ncmFkaWVudC5pbnRlcnBvbGF0ZS5jb2xvdXJhbHBoYS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNyw5ICsxNyw5IEBAIGcuYWRkQ29sb3JTdG9wKDAsICdyZ2JhKDI1NSwy
NTUsMCwgMCknKTsKIGcuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwyNTUsIDEpJyk7CiBjdHgu
ZmlsbFN0eWxlID0gZzsKIGN0eC5maWxsUmVjdCgwLCAwLCAxMDAsIDUwKTsKLV9hc3NlcnRQaXhl
bEFwcHJveChjYW52YXMsIDI1LDI1LCAxOTEsMTkxLDYzLDYzLCAiMjUsMjUiLCAiMTkxLDE5MSw2
Myw2MyIsIDMpOwotX2Fzc2VydFBpeGVsQXBwcm94KGNhbnZhcywgNTAsMjUsIDEyNywxMjcsMTI3
LDEyNywgIjUwLDI1IiwgIjEyNywxMjcsMTI3LDEyNyIsIDMpOwotX2Fzc2VydFBpeGVsQXBwcm94
KGNhbnZhcywgNzUsMjUsIDYzLDYzLDE5MSwxOTEsICI3NSwyNSIsICI2Myw2MywxOTEsMTkxIiwg
Myk7CitfYXNzZXJ0UGl4ZWxBcHByb3goY2FudmFzLCAyNSwyNSwgMTkxLDE5MSw2Myw2MywgIjI1
LDI1IiwgIjE5MSwxOTEsNjMsNjMiLCA0KTsKK19hc3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDUw
LDI1LCAxMjcsMTI3LDEyNywxMjcsICI1MCwyNSIsICIxMjcsMTI3LDEyNywxMjciLCA0KTsKK19h
c3NlcnRQaXhlbEFwcHJveChjYW52YXMsIDc1LDI1LCA2Myw2MywxOTEsMTkxLCAiNzUsMjUiLCAi
NjMsNjMsMTkxLDE5MSIsIDQpOwogCiAKIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89613</attachid>
            <date>2011-04-14 11:40:22 -0700</date>
            <delta_ts>2011-04-14 22:43:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57960-20110414144021.patch</filename>
            <type>text/plain</type>
            <size>20330</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzODc1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMDQtMTQgIEp1c3RpbiBO
b3Zvc2FkICA8anVub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gQWNjZWxlcmF0ZWQgMkQgQ2FudmFzIGlz
IHNsb3cgdG8gZXhlY3V0ZSBwdXRJbWFnZURhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTYwCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZh
czo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIEFkZGVkIGFuIG9wdGlvbiBmb3IgdXNpbmcg
dGhlIGJsZW5kIG9wcyBmb3IgYWxwaGEgbXVsdGlwbGljYXRpb24KKyAgICAgICAgaW5zdGVhZCBv
ZiBjb21wb3NpdGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjphcHBseUNsaXBw
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICBOZXcgbWV0aG9kIGZvciBkcmF3aW5nIHJhdyBwaXhlbCBkYXRhIGZyb20gbWVtb3J5IHRv
IHRoZSBjYW52YXMKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpwdXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEpOgorICAgICAgICBXcmFwcGVyIGZvciBwdXRJbWFnZURhdGEKKyAgICAgICAg
KFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAg
ICAgV3JhcHBlciBmb3IgcHV0SW1hZ2VEYXRhCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
VGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb3B5U3ViUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OnVwZGF0
ZVN1YlJlY3QpOgorICAgICAgICBBZGRlZCBhbiBvdmVybG9hZCBvZiB0aGUgdXBkYXRlU3ViUmVj
dCBtZXRob2QgdGhhdCBjYW4gcmVjZWl2ZSBhIHBpeGVsIAorICAgICAgICBvZiBhIHNpemUgdGhh
dCBpcyBkaWZmZXJlbnQgZnJvbSB0ZXh0dXJlIHNpemUuIEltcHJvdmVkIHRoZSBwZXJmb3JtYW5j
ZQorICAgICAgICBvZiB1cGRhdGVTdWJyZWN0IGJ5IGF2b2lkaW5nIHRoZSBhbGxvY2F0aW9uIG9m
IGEgdGVtcG9yYXJ5IGJ1ZmZlciB3aGVuCisgICAgICAgIG5vdCByZXF1aXJlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldElt
YWdlRGF0YSk6CisgICAgICAgIEluIHRoZSB1bm11bHRpcGxpZWQgcGF0aCwgZGl2aXNpb24gYnkg
YWxwaGEgbm93IHBlcmZvcm1zIHByb3BlcgorICAgICAgICByb3VuZGluZyBpbiBvcmRlciB0byBh
dm9pZCBnZW5lcmF0aW9uYWwgZGVncmFkYXRpb24gd2l0aCBwdXRJbWFnZURhdGEKKyAgICAgICAg
KFdlYkNvcmU6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIEFscGhhIG11bHRpcGxpY2F0aW9uIG5v
dyBwZXJmb3JtcyBwcm9wZXIgcm91bmRpbmcgaW4gb3JkZXIgdG8gYmUKKyAgICAgICAgY29uc2lz
dGVudCB3aXRoIHRoZSBoYXJkd2FyZSByZW5kZXJpbmcgcGF0aDogT3BlbkdMIGFsd2F5cyByb3Vu
ZHMgd2hlbgorICAgICAgICBjb252ZXJ0aW5nIHRvIGZpeGVkIHBvaW50IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFVubXVsdGlwbGllZEltYWdlRGF0
YSk6CisgICAgICAgIE5vdyBzdXBwb3J0cyBhIGhhcmR3YXJlIHJlbmRlcmluZyBwYXRoLCB3aGlj
aCBlbGltaW5hdGVzIHRoZSBuZWVkCisgICAgICAgIGZvciBhIHJlYWRiYWNrIGZyb20gdGhlIEdQ
VQorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZURh
dGEpOgorICAgICAgICBOb3cgc3VwcG9ydHMgYSBoYXJkd2FyZSByZW5kZXJpbmcgcGF0aCwgd2hp
Y2ggZWxpbWluYXRlcyB0aGUgbmVlZAorICAgICAgICBmb3IgYSByZWFkYmFjayBmcm9tIHRoZSBH
UFUKKwogMjAxMS0wNC0xNCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNw
cAkocmV2aXNpb24gODM2MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
IAogI2luY2x1ZGUgIkdMRVMyQ2FudmFzLmgiCiAKKyNpbmNsdWRlICJCeXRlQXJyYXkuaCIKICNp
bmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCkBAIC01Nyw2ICs1OCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAordXNpbmcgV1RGOjpCeXRlQXJyYXk7CisKIC8vIE51bWJlciBvZiBsaW5lIHNlZ21lbnRzIHVz
ZWQgdG8gYXBwcm94aW1hdGUgYmV6aWVyIGN1cnZlcy4KIGNvbnN0IGludCBwYXRoVGVzc2VsYXRp
b24gPSAzMDsKIHR5cGVkZWYgdm9pZCAoR0xBUElFTlRSWSAqVEVTU0NCKSgpOwpAQCAtNDA2LDE1
ICs0MDksMjIgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCh1bnNpZwogCiB2
b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewotICAgIGRyYXdU
ZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1f
c3RhdGUtPm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBtX3N0YXRlLT5jbGlwcGlu
Z0VuYWJsZWQoKSk7CisgICAgZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RS
ZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9z
aXRlT3AsIG1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpID8gQXBwbHlDbGlwcGluZyA6IDApOwog
fQogCi0KLXZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgYm9vbCBjbGlwKQordm9p
ZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCB1bnNpZ25lZCBkcmF3VGV4dHVyZUZsYWdz
KQogewogICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihjb21wb3NpdGVPcCk7Ci0gICAgYXBwbHlDbGlwcGluZyhjbGlwKTsKKyAgICAK
KyAgICBpZiAoZHJhd1RleHR1cmVGbGFncyAmIE11bHRpcGx5U291cmNlQWxwaGEpIHsKKyAgICAg
ICAgLy8gVGhlIG11bHRpcGx5IG9wdGlvbiBoaWphY2tzIHRoZSBibGVuZCBmdW5jLCBzbyBpdCBj
YW4ndCBiZSBjb21iaW5lZCB3aXRoIGEgY29tcG9zaXRpbmcgb3AKKyAgICAgICAgQVNTRVJUKENv
bXBvc2l0ZUNvcHkgPT0gY29tcG9zaXRlT3ApOworICAgICAgICAvLyBDdXN0b20gY29tcG9zaXRl
IG9wZXJhdGlvbiB0aGF0IHBlcmZvcm1zIGFscGhhIG11bHRpcGxpY2F0aW9uIG9uIGNvbG9yIGNv
bXBvbmVudHMKKyAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKKyAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5ibGVuZEZ1bmNTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhB
LCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlpFUk8pOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmFwcGx5
Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBpbmcoZHJhd1Rl
eHR1cmVGbGFncyAmIEFwcGx5Q2xpcHBpbmcpOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVz
ID0gdGV4dHVyZS0+dGlsZXMoKTsKICAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3Zl
cmxhcHBlZFRpbGVJbmRpY2VzKHNyY1JlY3QpOwogCkBAIC05MDMsNiArOTEzLDQ0IEBAIHZvaWQg
R0xFUzJDYW52YXM6OmFwcGx5Q2xpcHBpbmcoYm9vbCBlbmEKICAgICB9CiB9CiAKK3ZvaWQgR0xF
UzJDYW52YXM6OnB1dEltYWdlRGF0YSh2b2lkKiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCB1bnNpZ25lZCBkcmF3VGV4dHVyZUZsYWdzKQor
eworICAgIEFTU0VSVChzb3VyY2UpOworICAgIEludFJlY3QgY2xpcHBlZFNvdXJjZVJlY3QoMCwg
MCwgc291cmNlU2l6ZS53aWR0aCgpLCBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICBjbGlwcGVk
U291cmNlUmVjdC5pbnRlcnNlY3Qoc291cmNlUmVjdCk7CisgICAgaW50IGRlbHRhWCA9IGNsaXBw
ZWRTb3VyY2VSZWN0LngoKSAtIHNvdXJjZVJlY3QueCgpOworICAgIGludCBkZWx0YVkgPSBjbGlw
cGVkU291cmNlUmVjdC55KCkgLSBzb3VyY2VSZWN0LnkoKTsKKyAgICBJbnRQb2ludCBhZGp1c3Rl
ZERlc3RQb2ludChkZXN0UG9pbnQueCgpICsgZGVsdGFYLCBkZXN0UG9pbnQueSgpICsgZGVsdGFZ
KTsgICAgCisgICAgSW50UmVjdCBkZXN0UmVjdChhZGp1c3RlZERlc3RQb2ludCwgY2xpcHBlZFNv
dXJjZVJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGNhbnZhc1Jl
Y3QpOworICAgIGRlbHRhWCA9IGRlc3RSZWN0LngoKSAtIGFkanVzdGVkRGVzdFBvaW50LngoKTsK
KyAgICBkZWx0YVkgPSBkZXN0UmVjdC55KCkgLSBhZGp1c3RlZERlc3RQb2ludC55KCk7CisgICAg
Y2xpcHBlZFNvdXJjZVJlY3QubW92ZShkZWx0YVgsIGRlbHRhWSk7CisgICAgY2xpcHBlZFNvdXJj
ZVJlY3Quc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIGlmICghY2xpcHBlZFNvdXJjZVJl
Y3Qud2lkdGgoKSB8fCAhY2xpcHBlZFNvdXJjZVJlY3QuaGVpZ2h0KCkpIAorICAgICAgICByZXR1
cm47CisgICAgUmVmUHRyPFRleHR1cmU+IHVwbG9hZFRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0
ZVRleHR1cmUoZm9ybWF0LCBjbGlwcGVkU291cmNlUmVjdC53aWR0aCgpLCBjbGlwcGVkU291cmNl
UmVjdC5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0ZXhVcGRhdGVSZWN0KDAsIDAsIGNsaXBwZWRT
b3VyY2VSZWN0LndpZHRoKCksIGNsaXBwZWRTb3VyY2VSZWN0LmhlaWdodCgpKTsKKyAgICAvLyBU
byBnZXQgdGhlIHJvdyBzdHJpZGUgcmlnaHQsIHdlIHN0aWxsIHRha2UgdGhlIHdpZHRoIG9mIHRo
ZSBmdWxsIGJ1ZmZlciBmb3IgdGhlIHNvdXJjZSBzaXplLgorICAgIEludFNpemUgYWRqdXN0ZWRT
b3VyY2VTaXplKHNvdXJjZVNpemUud2lkdGgoKSwgdGV4VXBkYXRlUmVjdC5oZWlnaHQoKSk7Cisg
ICAgdXBsb2FkVGV4dHVyZS0+dXBkYXRlU3ViUmVjdCgoKGNoYXIqKXNvdXJjZSkgKyAoY2xpcHBl
ZFNvdXJjZVJlY3QueSgpICogc291cmNlU2l6ZS53aWR0aCgpICsgY2xpcHBlZFNvdXJjZVJlY3Qu
eCgpKSAqIDQsIGFkanVzdGVkU291cmNlU2l6ZSwgdGV4VXBkYXRlUmVjdCk7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGlkZW50aXR5OworICAgIGRyYXdUZXh0dXJlZFJlY3QodXBsb2FkVGV4dHVyZS5n
ZXQoKSwgdGV4VXBkYXRlUmVjdCwgZGVzdFJlY3QsIGlkZW50aXR5LCBhbHBoYSwgY29sb3JTcGFj
ZSwgb3AsIGRyYXdUZXh0dXJlRmxhZ3MpOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpwdXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit7CisgICAgSW50UG9pbnQgbmV3RGVzdFBvaW50KGRlc3RQb2ludC54KCkgKyBzb3VyY2VS
ZWN0LngoKSwgZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QueSgpKTsKKyAgICBwdXRJbWFnZURh
dGEoc291cmNlLT5kYXRhKCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIG5ld0Rlc3RQb2ludCwg
VGV4dHVyZTo6UkdCQTgsIDEuMGYsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZUNvcHks
IE11bHRpcGx5U291cmNlQWxwaGEpOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpwdXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VT
aXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KQoreworICAgIEludFBvaW50IG5ld0Rlc3RQb2ludChkZXN0UG9pbnQueCgpICsgc291cmNlUmVj
dC54KCksIGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LnkoKSk7CisgICAgcHV0SW1hZ2VEYXRh
KHNvdXJjZS0+ZGF0YSgpLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBuZXdEZXN0UG9pbnQsIFRl
eHR1cmU6OlJHQkE4LCAxLjBmLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVDb3B5LCAw
KTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRl
cikKIHsKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHJldmlzaW9uIDgzNjA4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52
YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBXVEYgewor
Y2xhc3MgQnl0ZUFycmF5OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbG9y
OwpAQCAtNTUsNiArNTksMTEgQEAgY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFz
cyBHTEVTMkNhbnZhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xFUzJDYW52YXMpOwog
cHVibGljOgorICAgIGVudW0gRHJhd1RleHR1cmVGbGFncyB7CisgICAgICAgIEFwcGx5Q2xpcHBp
bmcgPSAgICAgICAgIDEgPDwgMCwKKyAgICAgICAgTXVsdGlwbHlTb3VyY2VBbHBoYSA9ICAgMSA8
PCAxCisgICAgfTsKKwogICAgIEdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwg
RHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52YXMoKTsKIApA
QCAtODgsMTAgKzk3LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QodW5z
aWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CiAgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSBCaXRtYXBJbWFn
ZTo6ZHJhdygpLgogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yKTsKLSAgICAvLyBUaGlzIHZlcnNpb24gaXMgY2FsbGVkIGJ5IHRoZSBh
Ym92ZSwgYW5kIGJ5IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KLSAgICB2b2lkIGRy
YXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwg
Q29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgY2xpcCk7CisgICAgLy8gVGhpcyB2
ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUsIGJ5IHB1dEltYWdlRGF0YSwgYW5kIGJ5IHRo
ZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fkcy4KKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3Qo
VGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IsIHVuc2lnbmVkIGRyYXdUZXh0dXJlRmxhZ3MpOwogICAgIFRleHR1cmUq
IGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKICAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsK
KyAgICB2b2lkIHB1dEltYWdlRGF0YSh2b2lkKiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIFRleHR1cmU6OkZvcm1hdCwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yLCB1bnNpZ25lZCBkcmF3VGV4dHVyZUZsYWdzKTsKKyAgICB2b2lkIHB1dFVubXVsdGlw
bGllZEltYWdlRGF0YShXVEY6OkJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50KTsKKyAgICB2b2lkIHB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEoV1RGOjpCeXRlQXJyYXkq
IHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAKICAgICBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShy
ZXZpc2lvbiA4MzYwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9U
ZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEzICsxMjAsOSBAQCBQYXNzUmVmUHRy
PFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwCiB9CiAKIHRlbXBsYXRlIDxib29sIHN3aXp6
bGU+Ci1zdGF0aWMgdWludDMyX3QqIGNvcHlTdWJSZWN0KHVpbnQzMl90KiBzcmMsIGludCBzcmNY
LCBpbnQgc3JjWSwgdWludDMyX3QqIGRzdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3Jj
U3RyaWRlKQorc3RhdGljIHZvaWQgY29weVN1YlJlY3QodWludDMyX3QqIHNyYywgaW50IHNyY1gs
IGludCBzcmNZLCB1aW50MzJfdCogZHN0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzcmNT
dHJpZGUpCiB7CiAgICAgdWludDMyX3QqIHNyY09mZnNldCA9IHNyYyArIHNyY1ggKyBzcmNZICog
c3JjU3RyaWRlOwotCi0gICAgaWYgKCFzd2l6emxlICYmIHdpZHRoID09IHNyY1N0cmlkZSkKLSAg
ICAgICAgcmV0dXJuIHNyY09mZnNldDsKLQogICAgIGlmIChzd2l6emxlKSB7CiAgICAgICAgIHVp
bnQzMl90KiBkc3RQaXhlbCA9IGRzdDsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7ICsreSkgewpAQCAtMTQxLDE4ICsxMzcsMjMgQEAgc3RhdGljIHVpbnQzMl90KiBjb3B5U3Vi
UmVjdCh1aW50MzJfdCogcwogICAgICAgICAgICAgbWVtY3B5KGRzdCArIHkgKiB3aWR0aCwgc3Jj
T2Zmc2V0ICsgeSAqIHNyY1N0cmlkZSwgNCAqIHdpZHRoKTsKICAgICAgICAgfQogICAgIH0KLSAg
ICByZXR1cm4gZHN0OwogfQogCiB2b2lkIFRleHR1cmU6OmxvYWQodm9pZCogcGl4ZWxzKQogewot
ICAgIHVwZGF0ZVN1YlJlY3QocGl4ZWxzLCBJbnRSZWN0KDAsIDAsIG1fdGlsZXMudG90YWxTaXpl
WCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSkpOworICAgIHVwZGF0ZVN1YlJlY3QocGl4ZWxzLCBJ
bnRTaXplKG1fdGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSksIEludFJl
Y3QoMCwgMCwgbV90aWxlcy50b3RhbFNpemVYKCksIG1fdGlsZXMudG90YWxTaXplWSgpKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHVwZGF0ZVJlY3QpCiB7CisgICAgdXBkYXRlU3ViUmVjdChwaXhlbHMsIEludFNpemUobV90
aWxlcy50b3RhbFNpemVYKCksIG1fdGlsZXMudG90YWxTaXplWSgpKSwgdXBkYXRlUmVjdCk7Cit9
CisKK3ZvaWQgVGV4dHVyZTo6dXBkYXRlU3ViUmVjdCh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFNp
emUmIHBpeGVsQnVmZmVyU2l6ZSwgY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCkKK3sKKyAgICBJ
bnRTaXplIHVwZGF0ZUJvdW5kcyA9IHBpeGVsQnVmZmVyU2l6ZS5zaHJ1bmtUbyhJbnRTaXplKG1f
dGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRvdGFsU2l6ZVkoKSkpOwogICAgIEludFJlY3Qg
dXBkYXRlUmVjdFNhbml0aXplZCh1cGRhdGVSZWN0KTsKLSAgICB1cGRhdGVSZWN0U2FuaXRpemVk
LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIG1fdGlsZXMudG90YWxTaXplWCgpLCBtX3RpbGVzLnRv
dGFsU2l6ZVkoKSkpOworICAgIHVwZGF0ZVJlY3RTYW5pdGl6ZWQuaW50ZXJzZWN0KEludFJlY3Qo
MCwgMCwgdXBkYXRlQm91bmRzLndpZHRoKCksIHVwZGF0ZUJvdW5kcy5oZWlnaHQoKSkpOwogCiAg
ICAgdWludDMyX3QqIHBpeGVsczMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpOwog
ICAgIHVuc2lnbmVkIGludCBnbEZvcm1hdCA9IDA7CkBAIC0xNjMsMTAgKzE2NCwxNCBAQCB2b2lk
IFRleHR1cmU6OnVwZGF0ZVN1YlJlY3Qodm9pZCogcGl4ZWxzCiAgICAgICAgIEFTU0VSVChnbEZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBnbFR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgdXNl
IFBCTydzIHRvIHNhdmUgZG9pbmcgYW4gZXh0cmEgY29weSBoZXJlLgogICAgIH0KKwogICAgIGlu
dCB0ZW1wQnVmZlNpemUgPSAvLyBUZW1wb3JhcnkgYnVmZmVyIHNpemUgaXMgdGhlIHNtYWxsZXIg
b2YgdGhlIG1heCB0ZXh0dXJlIHNpemUgb3IgdGhlIHVwZGF0ZVJlY3RTYW5pdGl6ZWQKICAgICAg
ICAgbWluKG1fdGlsZXMubWF4VGV4dHVyZVNpemUoKSwgbV90aWxlcy5ib3JkZXJUZXhlbHMoKSAr
IHVwZGF0ZVJlY3RTYW5pdGl6ZWQud2lkdGgoKSkgKgogICAgICAgICBtaW4obV90aWxlcy5tYXhU
ZXh0dXJlU2l6ZSgpLCBtX3RpbGVzLmJvcmRlclRleGVscygpICsgdXBkYXRlUmVjdFNhbml0aXpl
ZC5oZWlnaHQoKSk7Ci0gICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZmID0gYWRvcHRB
cnJheVB0cihuZXcgdWludDMyX3RbdGVtcEJ1ZmZTaXplXSk7CisgICAgYm9vbCBuZWVkVGVtcEJ1
ZmYgPSBzd2l6emxlIHx8IHVwZGF0ZVJlY3Qud2lkdGgoKSAhPSBtX3RpbGVzLnRvdGFsU2l6ZVgo
KSB8fCB1cGRhdGVSZWN0LndpZHRoKCkgIT0gcGl4ZWxCdWZmZXJTaXplLndpZHRoKCkgfHwgbV90
aWxlcy5udW1UaWxlc1goKSA+IDE7CisgICAgT3duQXJyYXlQdHI8dWludDMyX3Q+IHRlbXBCdWZm
OworICAgIGlmIChuZWVkVGVtcEJ1ZmYpCisgICAgICAgIHRlbXBCdWZmID0gYWRvcHRBcnJheVB0
cihuZXcgdWludDMyX3RbdGVtcEJ1ZmZTaXplXSk7CiAKICAgICBmb3IgKGludCB0aWxlID0gMDsg
dGlsZSA8IG1fdGlsZXMubnVtVGlsZXMoKTsgdGlsZSsrKSB7CiAgICAgICAgIC8vIEludGVyc2Vj
dCB3aXRoIHRpbGUKQEAgLTE4MSwxNiArMTg2LDIxIEBAIHZvaWQgVGV4dHVyZTo6dXBkYXRlU3Vi
UmVjdCh2b2lkKiBwaXhlbHMKICAgICAgICAgaWYgKHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAvLyBDb3B5IHN1YiByZWN0
YW5nbGUgb3V0IG9mIGxhcmdlciBwaXhlbCBkYXRhCiAgICAgICAgIHVpbnQzMl90KiB1cGxvYWRC
dWZmID0gMDsKLSAgICAgICAgaWYgKHN3aXp6bGUpIHsKLSAgICAgICAgICAgIHVwbG9hZEJ1ZmYg
PSBjb3B5U3ViUmVjdDx0cnVlPigKLSAgICAgICAgICAgIHBpeGVsczMyLCB1cGRhdGVSZWN0SW50
ZXJzZWN0ZWQueCgpLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQueSgpLAotICAgICAgICAgICAgdGVt
cEJ1ZmYuZ2V0KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC53aWR0aCgpLCB1cGRhdGVSZWN0SW50
ZXJzZWN0ZWQuaGVpZ2h0KCksIG1fdGlsZXMudG90YWxTaXplWCgpKTsKKyAgICAgICAgaWYgKG5l
ZWRUZW1wQnVmZikgeworICAgICAgICAgICAgdXBsb2FkQnVmZiA9IHRlbXBCdWZmLmdldCgpOwor
ICAgICAgICAgICAgLy8gQ29weSBzdWIgcmVjdGFuZ2xlIG91dCBvZiBsYXJnZXIgcGl4ZWwgZGF0
YQorICAgICAgICAgICAgaWYgKHN3aXp6bGUpIHsKKyAgICAgICAgICAgICAgICBjb3B5U3ViUmVj
dDx0cnVlPigKKyAgICAgICAgICAgICAgICBwaXhlbHMzMiwgdXBkYXRlUmVjdEludGVyc2VjdGVk
LngoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLnkoKSwKKyAgICAgICAgICAgICAgICB1cGxvYWRC
dWZmLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQud2lkdGgoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVk
LmhlaWdodCgpLCBwaXhlbEJ1ZmZlclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGNvcHlTdWJSZWN0PGZhbHNlPigKKyAgICAgICAgICAgICAgICBw
aXhlbHMzMiwgdXBkYXRlUmVjdEludGVyc2VjdGVkLngoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVk
LnkoKSwKKyAgICAgICAgICAgICAgICB1cGxvYWRCdWZmLCB1cGRhdGVSZWN0SW50ZXJzZWN0ZWQu
d2lkdGgoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLmhlaWdodCgpLCBwaXhlbEJ1ZmZlclNpemUu
d2lkdGgoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1
cGxvYWRCdWZmID0gY29weVN1YlJlY3Q8ZmFsc2U+KAotICAgICAgICAgICAgcGl4ZWxzMzIsIHVw
ZGF0ZVJlY3RJbnRlcnNlY3RlZC54KCksIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55KCksCi0gICAg
ICAgICAgICB0ZW1wQnVmZi5nZXQoKSwgdXBkYXRlUmVjdEludGVyc2VjdGVkLndpZHRoKCksIHVw
ZGF0ZVJlY3RJbnRlcnNlY3RlZC5oZWlnaHQoKSwgbV90aWxlcy50b3RhbFNpemVYKCkpOworICAg
ICAgICAgICAgdXBsb2FkQnVmZiA9IHBpeGVsczMyICsgdXBkYXRlUmVjdEludGVyc2VjdGVkLngo
KSArIHVwZGF0ZVJlY3RJbnRlcnNlY3RlZC55KCkgKiBwaXhlbEJ1ZmZlclNpemUud2lkdGgoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGlsZVRleHR1cmVJZHMtPmF0KHRpbGUpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuaAkocmV2aXNp
b24gODM2MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiBjbGFzcyBJbnRSZWN0OworY2xhc3MgSW50U2l6
ZTsKIAogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmU+IHsKIHB1Ymxp
YzoKQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHZvaWQgYmluZFRpbGUoaW50IHRpbGUp
OwogICAgIHZvaWQgbG9hZCh2b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgdXBkYXRlU3ViUmVjdCh2
b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVwZGF0ZVN1YlJlY3Qodm9p
ZCogcGl4ZWxzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYpOwogICAgIEZvcm1hdCBm
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQogICAgIGNvbnN0IFRpbGluZ0RhdGEm
IHRpbGVzKCkgY29uc3QgeyByZXR1cm4gbV90aWxlczsgfQogcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAJKHJldmlzaW9uIDgzNjA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjks
OSArMjI5LDEwIEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RQaXhlbCA9ICZkZXN0Um93W3ggKiA0XTsKICAg
ICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCkgewogICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgYSA9IFNrR2V0UGFja2VkQTMyKHNyY1BNQ29sb3IpOwotICAgICAg
ICAgICAgICAgIGRlc3RQaXhlbFswXSA9IGEgPyBTa0dldFBhY2tlZFIzMihzcmNQTUNvbG9yKSAq
IDI1NSAvIGEgOiAwOwotICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsxXSA9IGEgPyBTa0dldFBh
Y2tlZEczMihzcmNQTUNvbG9yKSAqIDI1NSAvIGEgOiAwOwotICAgICAgICAgICAgICAgIGRlc3RQ
aXhlbFsyXSA9IGEgPyBTa0dldFBhY2tlZEIzMihzcmNQTUNvbG9yKSAqIDI1NSAvIGEgOiAwOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaGFsZkEgPSBhID4+IDE7CisgICAgICAgICAg
ICAgICAgZGVzdFBpeGVsWzBdID0gYSA/IChTa0dldFBhY2tlZFIzMihzcmNQTUNvbG9yKSAqIDI1
NSArIGhhbGZBKSAvIGEgOiAwOworICAgICAgICAgICAgICAgIGRlc3RQaXhlbFsxXSA9IGEgPyAo
U2tHZXRQYWNrZWRHMzIoc3JjUE1Db2xvcikgKiAyNTUgKyBoYWxmQSkgLyBhIDogMDsKKyAgICAg
ICAgICAgICAgICBkZXN0UGl4ZWxbMl0gPSBhID8gKFNrR2V0UGFja2VkQjMyKHNyY1BNQ29sb3Ip
ICogMjU1ICsgaGFsZkEpIC8gYSA6IDA7CiAgICAgICAgICAgICAgICAgZGVzdFBpeGVsWzNdID0g
YTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gSW5wdXQgYW5kIG91
dHB1dCBhcmUgYm90aCBwcmUtbXVsdGlwbGllZCwgd2UganVzdCBuZWVkIHRvIHJlLWFycmFuZ2Ug
dGhlCkBAIC0zMTUsOSArMzE2LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291
cmNlLCBjbwogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjUGl4ZWwgPSAmc3Jj
Um93W3ggKiA0XTsKICAgICAgICAgICAgIGlmIChtdWx0aXBsaWVkID09IFVubXVsdGlwbGllZCkg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNQaXhlbFszXTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHIgPSBTa011bERpdjI1NUNlaWxpbmcoc3JjUGl4
ZWxbMF0sIGFscGhhKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGcgPSBTa011bERp
djI1NUNlaWxpbmcoc3JjUGl4ZWxbMV0sIGFscGhhKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBjaGFyIGIgPSBTa011bERpdjI1NUNlaWxpbmcoc3JjUGl4ZWxbMl0sIGFscGhhKTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHIgPSBTa011bERpdjI1NVJvdW5kKHNyY1BpeGVsWzBd
LCBhbHBoYSk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBnID0gU2tNdWxEaXYyNTVS
b3VuZChzcmNQaXhlbFsxXSwgYWxwaGEpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
YiA9IFNrTXVsRGl2MjU1Um91bmQoc3JjUGl4ZWxbMl0sIGFscGhhKTsKICAgICAgICAgICAgICAg
ICBkZXN0Um93W3hdID0gU2tQYWNrQVJHQjMyKGFscGhhLCByLCBnLCBiKTsKICAgICAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgICAgIGRlc3RSb3dbeF0gPSBTa1BhY2tBUkdCMzIoc3JjUGl4
ZWxbM10sIHNyY1BpeGVsWzBdLCBzcmNQaXhlbFsxXSwgc3JjUGl4ZWxbMl0pOwpAQCAtMzMyLDEz
ICszMzMsMjMgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjbwogCiB2
b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFycmF5KiBzb3Vy
Y2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7Ci0gICAgcHV0SW1hZ2VEYXRhPFVubXVsdGlw
bGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKKyAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnVzZUdQVSgpKSB7CisgICAg
ICAgIHBsYXRmb3JtQ29udGV4dC0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOworICAgICAgICBw
bGF0Zm9ybUNvbnRleHQtPmdwdUNhbnZhcygpLT5wdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoc291
cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHB1dEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6
ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5nZXRE
ZXZpY2UoKSwgbV9zaXplKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsK
LSAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0KCktPnBs
YXRmb3JtQ29udGV4dCgpOworICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPnVzZUdQVSgpKSB7Cisg
ICAgICAgIHBsYXRmb3JtQ29udGV4dC0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOworICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQtPmdwdUNhbnZhcygpLT5wdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3Vy
Y2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKIH0KIApJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gODM4NzUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNiBAQAorMjAxMS0wNC0xNCAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0No
cm9taXVtXSBBY2NlbGVyYXRlZCAyRCBDYW52YXMgaXMgc2xvdyB0byBleGVjdXRlIHB1dEltYWdl
RGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc5
NjAKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoK
KyAgICAgICAgYWRkZWQgZXhwZWN0ZWQgZmFpbHVyZSBmb3IgdGVzdAorICAgICAgICBjYW52YXMv
cGhpbGlwL3Rlc3RzLzJkLmdyYWRpZW50LmludGVycG9sYXRlLmNvbG91cmFscGhhLmh0bWwKKyAg
ICAgICAgTG9nZ2VkIGFzIGNocm9taXVtIGlzc3VlOgorICAgICAgICBodHRwOi8vY29kZS5nb29n
bGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03OTQ3NworCiAyMDExLTA0LTE0ICBK
aWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBGaXNoZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA4MzYwOCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzA5LDYgKzcwOSw4IEBAIEJVR0NSMzI3MyA6IGVkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXQK
IC8vIHNlbGVjdGlvbgogQlVHQ1IxMDM2OSBMSU5VWCA6IGVkaXRpbmcvc2VsZWN0aW9uLzUzNTQ0
NTUtMi5odG1sID0gRkFJTAogCitCVUdDUjc5NDc3IExJTlVYIFdJTiA6IGNhbnZhcy9waGlsaXAv
dGVzdHMvMmQuZ3JhZGllbnQuaW50ZXJwb2xhdGUuY29sb3VyYWxwaGEuaHRtbCA9IFRFWFQKKwog
Ly8gVE9ETyhlcmcpOiBBdHRlbXB0ZWQgdG8gcmViYXNlbGluZSB0aGVzZSB0ZXN0cyBhcyBwYXJ0
IG9mIHRoZSBhYm92ZQogLy8gNDMzNDY6NDMzNjEgcmViYXNlbGluZyBmcm9tIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvY2hhbmdlc2V0LzQzMzU1LiBUdXJuZWQKIC8vIHRyZWUgcmVkLiBNYXkgYmUg
bW9yZSBpbnZvbHZlZCB0aGVuIGp1c3QgcmViYXNlbGluaW5nLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>