<?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>72738</bug_id>
          
          <creation_ts>2011-11-18 09:12:37 -0800</creation_ts>
          <short_desc>[chromium] Accelerated canvas broken in threaded compositing mode</short_desc>
          <delta_ts>2011-12-19 13:46:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>73929</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Iain Merrick">husky</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>505848</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-18 09:12:37 -0800</bug_when>
    <thetext>CanvasLayerChromium and impl use the accelerated canvas &quot;backbuffer&quot; directly. In threaded compositing mode, this causes partial canvas results to appear onscreen. We need a short term fix for this. Copying?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515970</commentid>
    <comment_count>1</comment_count>
      <attachid>118062</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-06 09:34:57 -0800</bug_when>
    <thetext>Created attachment 118062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515976</commentid>
    <comment_count>2</comment_count>
      <attachid>118062</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-06 09:39:46 -0800</bug_when>
    <thetext>Comment on attachment 118062
Patch

Uploading work-in-progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515978</commentid>
    <comment_count>3</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-06 09:41:21 -0800</bug_when>
    <thetext>Hitting a lot of problems with asserts. Probably worth fixing those separately beforehand.

I also get a crash on shader creation in both of the canvas demos on http://annevankesteren.nl/test/html/canvas/demo/. Other canvas pages work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517699</commentid>
    <comment_count>4</comment_count>
      <attachid>118062</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-08 12:42:28 -0800</bug_when>
    <thetext>Comment on attachment 118062
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:108
&gt; +    if (!m_compositorTextureId || m_compositorSize != m_canvasSize) {
&gt; +        TextureAllocator* allocator = textureUpdater.allocator();
&gt; +        ASSERT(allocator);

this jumping back and forth between the canvas context (m_context) and the compositor context is going to be really difficult to get working properly with the thread.

The canvas and compositor contexts are in a shared resource group, so you can bind resource IDs from either context in either context. Could you just do the texture copy from the compositor context?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518225</commentid>
    <comment_count>5</comment_count>
      <attachid>118563</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-09 05:52:32 -0800</bug_when>
    <thetext>Created attachment 118563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518294</commentid>
    <comment_count>6</comment_count>
      <attachid>118588</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-09 09:32:32 -0800</bug_when>
    <thetext>Created attachment 118588
Added a unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518297</commentid>
    <comment_count>7</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-09 09:37:47 -0800</bug_when>
    <thetext>Notes:

- Couldn&apos;t figure out a great way to unit test this. I looked at ImageLayerChromiumTest and TiledLayerChromium test but neither uses threads. We could maybe use a base class for threaded LayerChromium subclass tests. This at least runs through the code, though.

- Looking ahead a bit, we&apos;ll want to swap textures rather than copy if possible. Therefore it makes sense to allocate the texture manually in the canvas context rather than going via TextureManager / TextureAllocator in the compositor context. Memory management will be fiddly, but we can at least blow away the compositor&apos;s copy by calling setTextureId(0) at the appropriate time.

- I think we should fold CanvasLayerChromium into WebGLLayerChromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518371</commentid>
    <comment_count>8</comment_count>
      <attachid>118588</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-09 11:52:29 -0800</bug_when>
    <thetext>Comment on attachment 118588
Added a unit test

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

I doubt this works when the canvas is resized after an initial composite, have you tested that case?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:77
&gt; +    if (m_rendererTextureId &amp;&amp; !m_compositorTextureId) {

what if the compositor texture exists but no longer matches the canvas&apos; size?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:100
&gt; +PassRefPtr&lt;CCLayerImpl&gt; Canvas2DLayerChromium::createCCLayerImpl()
&gt; +{
&gt; +    return CCCanvasLayerImpl::create(m_layerId);
&gt; +}

this is redundant with CanvasLayerChromium&apos;s createCCLayerImpl

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:148
&gt; +void Canvas2DLayerChromium::pushPropertiesTo(CCLayerImpl* layer)
&gt;  {
&gt; -    if (layerTreeHost())
&gt; -        layerTreeHost()-&gt;startRateLimiter(m_context);
&gt; +    LayerChromium::pushPropertiesTo(layer);
&gt; +
&gt; +    CCCanvasLayerImpl* canvasLayer = static_cast&lt;CCCanvasLayerImpl*&gt;(layer);
&gt; +    canvasLayer-&gt;setTextureId(m_compositorTextureId);

this is pretty much the same as CanvasLayerChromium&apos;s pushPropertiesTo

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:44
&gt; +class Canvas2DLayerChromium : public LayerChromium {

why are you changing the class hierarchy? it seems like you&apos;re just creating extra work for yourself by duplicating pushPropertiesTo()

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:46
&gt; +    static PassRefPtr&lt;Canvas2DLayerChromium&gt; create(GraphicsContext3D*, const IntSize&amp;);

how are you handling canvas resizes?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:49
&gt; +    // Called by ImageBufferSkia.

we typically don&apos;t try to document the caller at the callsite. The caller can change at any point and the caller is not part of this interface. if you want to add function-level documentation talk about what the function does, don&apos;t talk about what other classes do

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:52
&gt; +    // Called by CanvasRenderingContext2D.

don&apos;t say _who_ calls this function, that could change at any point, say _what_ this function does</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518907</commentid>
    <comment_count>9</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-11 10:56:12 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 118588 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118588&amp;action=review
&gt; 
&gt; I doubt this works when the canvas is resized after an initial composite, have you tested that case?

This object is created by ImageBufferSkia, which also takes its size as a constructor parameter and can&apos;t be resized afterwards. On a resize it looks like the ImageBuffer will just be blown away and recreated, and that will create a new Canvas2DLayerChromium. I&apos;ll check that, though. (And it&apos;s not ideal so maybe it should be changed.)

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:77
&gt; &gt; +    if (m_rendererTextureId &amp;&amp; !m_compositorTextureId) {
&gt; 
&gt; what if the compositor texture exists but no longer matches the canvas&apos; size?

See above.

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:100
&gt; &gt; +PassRefPtr&lt;CCLayerImpl&gt; Canvas2DLayerChromium::createCCLayerImpl()
&gt; &gt; +{
&gt; &gt; +    return CCCanvasLayerImpl::create(m_layerId);
&gt; &gt; +}
&gt; 
&gt; this is redundant with CanvasLayerChromium&apos;s createCCLayerImpl

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:148
&gt; &gt; +void Canvas2DLayerChromium::pushPropertiesTo(CCLayerImpl* layer)
&gt; &gt;  {
&gt; &gt; -    if (layerTreeHost())
&gt; &gt; -        layerTreeHost()-&gt;startRateLimiter(m_context);
&gt; &gt; +    LayerChromium::pushPropertiesTo(layer);
&gt; &gt; +
&gt; &gt; +    CCCanvasLayerImpl* canvasLayer = static_cast&lt;CCCanvasLayerImpl*&gt;(layer);
&gt; &gt; +    canvasLayer-&gt;setTextureId(m_compositorTextureId);
&gt; 
&gt; this is pretty much the same as CanvasLayerChromium&apos;s pushPropertiesTo

Yep, but the texture ID is different.

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:44
&gt; &gt; +class Canvas2DLayerChromium : public LayerChromium {
&gt; 
&gt; why are you changing the class hierarchy? it seems like you&apos;re just creating extra work for yourself by duplicating pushPropertiesTo()

There&apos;s more code in the base class that needs to be worked around than there is that can be reused, so it seems like sheer bloat. I&apos;ll see if I can rejig it to fit both the canvas and WebGL cases if you prefer, though.

Could possibly hoist the copying/double-buffering into ImageBuffer, but that seems like the wrong place as it&apos;s used for other things beside Canvas2D. ImageBuffer does have a copyImage() method, but that looks incompatible with hardware acceleration as it returns an Image.

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:46
&gt; &gt; +    static PassRefPtr&lt;Canvas2DLayerChromium&gt; create(GraphicsContext3D*, const IntSize&amp;);
&gt; 
&gt; how are you handling canvas resizes?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:49
&gt; &gt; +    // Called by ImageBufferSkia.
&gt; 
&gt; we typically don&apos;t try to document the caller at the callsite. The caller can change at any point and the caller is not part of this interface. if you want to add function-level documentation talk about what the function does, don&apos;t talk about what other classes do

Good catch. I&apos;ll just remove these comments. As the methods are overrides they should be documented elsewhere.

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:52
&gt; &gt; +    // Called by CanvasRenderingContext2D.
&gt; 
&gt; don&apos;t say _who_ calls this function, that could change at any point, say _what_ this function does</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519142</commentid>
    <comment_count>10</comment_count>
      <attachid>118777</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-12 05:21:52 -0800</bug_when>
    <thetext>Created attachment 118777
Inheriting from CanvasLayerChromium again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519144</commentid>
    <comment_count>11</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-12 05:23:13 -0800</bug_when>
    <thetext>Restored the class hierarchy to the way it was.

Resizing is actually completely broken in the threaded compositor, but not by this patch. I&apos;ll file a separate bug. As far as I can tell, this patch should do the right thing, as ImageBuffer doesn&apos;t have a resize method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519329</commentid>
    <comment_count>12</comment_count>
      <attachid>118777</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 10:40:28 -0800</bug_when>
    <thetext>Comment on attachment 118777
Inheriting from CanvasLayerChromium again

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

R=me but add the lost context check back and address other nits before landing.  We don&apos;t attempt to handle lost contexts at all, but if we do get one somehow we should just stop displaying the canvas and not attempt to issue any GL commands on the old context.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:107
&gt; +    return m_rendererTextureId &amp;&amp; compositedTextureId() &amp;&amp; !m_size.isEmpty();

why did you remove the m_context and getGraphicsResetStatusARB() check from here? they seem to still be useful

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:52
&gt; +    unsigned compositedTextureId() const { return m_compositedTextureId; }

I don&apos;t think a protected getter is buying you all that much vs just accessing m_compositedTextureId, since we never override this or do anything else fancy, but that&apos;s up to you

&gt; Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp:66
&gt; +    const WebGLId rendererTexId = 1;
&gt; +    const WebGLId compositorTexId = 2;

we normally wouldn&apos;t abbreviate texture to &apos;tex&apos; in a variable name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519364</commentid>
    <comment_count>13</comment_count>
      <attachid>118777</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-12 11:43:57 -0800</bug_when>
    <thetext>Comment on attachment 118777
Inheriting from CanvasLayerChromium again

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:107
&gt;&gt; +    return m_rendererTextureId &amp;&amp; compositedTextureId() &amp;&amp; !m_size.isEmpty();
&gt; 
&gt; why did you remove the m_context and getGraphicsResetStatusARB() check from here? they seem to still be useful

Oops, just lost in refactoring. Will fix.

I think I originally removed it because the context was being used on the wrong thread, but that should no longer be the case.

&gt;&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.h:52
&gt;&gt; +    unsigned compositedTextureId() const { return m_compositedTextureId; }
&gt; 
&gt; I don&apos;t think a protected getter is buying you all that much vs just accessing m_compositedTextureId, since we never override this or do anything else fancy, but that&apos;s up to you

I mainly wanted to block public access to this field, as the semantics are now different for Canvas2D and WebGL, and this felt like the minimal change.

The getter seems a little neater for use by subclasses, and the generated code should be the same either way, so I&apos;ll leave it as is.

&gt;&gt; Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp:66
&gt;&gt; +    const WebGLId compositorTexId = 2;
&gt; 
&gt; we normally wouldn&apos;t abbreviate texture to &apos;tex&apos; in a variable name

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519371</commentid>
    <comment_count>14</comment_count>
      <attachid>118823</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-12 12:04:35 -0800</bug_when>
    <thetext>Created attachment 118823
Fixed lost-context check and variable names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519842</commentid>
    <comment_count>15</comment_count>
      <attachid>118823</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-12 20:54:16 -0800</bug_when>
    <thetext>Comment on attachment 118823
Fixed lost-context check and variable names

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

sorry, i missed some threading issues here earlier. see inline comments for some details. this is definitely close but still needs a bit more work

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:65
&gt; +    setTextureId(0);

hmm, this deletes the compositor&apos;s texture. unfortunately, the compositor thread may still try to issue an arbitrary number of bind+draw calls for this texture ID after the Canvas2DLayerChromium is destroyed but before the trees are synchronized. i think you need to destroy the compositor&apos;s texture on the impl side somehow

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:134
&gt; +    GLC(m_context, m_context-&gt;bindTexture(GraphicsContext3D::TEXTURE_2D, compositedTextureId()));
&gt; +    GLC(m_context, m_context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, 0, 0, m_size.width(), m_size.height(), 0));

i missed this earlier but this is actually still subtly incorrect - the paint pass is done while the compositor thread is still free-running, so it may be issuing draw calls with this texture ID bound while the copy is happening and pick up the wrong frame. you need to do the actual copy itself in some piece of code that is synchronized with the compositor thread

i think one option would be to do this in updateCompositorResources() and issue the copy commands themselves on the compositor&apos;s context, not the canvas&apos;

leave the m_context-&gt;flush() in here - it&apos;s needed for synchronization. you can be assured that no canvas draw calls will be made between paintContentsIfDirty() and updateCompositorResources()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520133</commentid>
    <comment_count>16</comment_count>
      <attachid>119028</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-13 09:40:47 -0800</bug_when>
    <thetext>Created attachment 119028
Moved copyTexImage2D to updateCompositorResources</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520136</commentid>
    <comment_count>17</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-13 09:46:10 -0800</bug_when>
    <thetext>Slight chicken-and-egg problem with texture creation, as we need to push the texture ID in pushPropertiesTo(), but we don&apos;t get a context until updateCompositorResources() which is called later.

Resolved by just creating the texture on the main thread. I think this is what we&apos;ll want to do in the longer term anyway, so we can just flip the textures rather than copying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520150</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 10:15:51 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Slight chicken-and-egg problem with texture creation, as we need to push the texture ID in pushPropertiesTo(), but we don&apos;t get a context until updateCompositorResources() which is called later.

This comment worries me.  pushPropertiesTo() is *after* updateCompositorResources() and has to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520157</commentid>
    <comment_count>19</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-13 10:25:24 -0800</bug_when>
    <thetext>I&apos;ll check that again. Maybe I was misled by one of the calls being skipped, e.g. because the root layer wasn&apos;t created yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520159</commentid>
    <comment_count>20</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-13 10:27:59 -0800</bug_when>
    <thetext>Called in that order after all. Will fix patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520465</commentid>
    <comment_count>21</comment_count>
      <attachid>119028</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-13 16:25:06 -0800</bug_when>
    <thetext>Comment on attachment 119028
Moved copyTexImage2D to updateCompositorResources

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:74
&gt; +    // Compositor resources should have been cleaned up on the compositor thread.
&gt; +    ASSERT(!compositedTextureId());

I&apos;m not sure how you imagine this might work but I don&apos;t think it can - the CCCanvasLayerImpl associated with this canvas will be destroyed _after_ the Canvas2DLayerChromium is destroyed.  Thus the composited texture has to outlive the Canvas2DLayerChromium

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:66
&gt; +    unsigned m_backTextureId;
&gt; +    unsigned m_frontTextureId;

why do we have 3 texture IDs for each instance of Canvas2DLayerChromium:

Canvas2DLayerChromium::m_backTextureId
Canvas2DLayerChromium::m_frontTextureId
CanvasLayerChromium::m_compositedTextureId

?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:69
&gt; +    // Owned by the compositor context, which is where the back -&gt; front copy happens.
&gt; +    Platform3DObject m_fbo;

This comment&apos;s a bit confusing - the framebuffer object is not the interesting thing to share, it&apos;s the texture.  Where the FBO lives or is destroyed is a function of where the copy happens. The FBO could conceivably live on either the Canvas2DLayerChromium or the CCCanvasLayerImpl - it&apos;s not a huge deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520793</commentid>
    <comment_count>22</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-14 01:58:46 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 119028 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119028&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:74
&gt; &gt; +    // Compositor resources should have been cleaned up on the compositor thread.
&gt; &gt; +    ASSERT(!compositedTextureId());
&gt; 
&gt; I&apos;m not sure how you imagine this might work but I don&apos;t think it can - the CCCanvasLayerImpl associated with this canvas will be destroyed _after_ the Canvas2DLayerChromium is destroyed.  Thus the composited texture has to outlive the Canvas2DLayerChromium
[...]
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:69
&gt; &gt; +    // Owned by the compositor context, which is where the back -&gt; front copy happens.
&gt; &gt; +    Platform3DObject m_fbo;
&gt; 
&gt; This comment&apos;s a bit confusing - the framebuffer object is not the interesting thing to share, it&apos;s the texture.  Where the FBO lives or is destroyed is a function of where the copy happens. The FBO could conceivably live on either the Canvas2DLayerChromium or the CCCanvasLayerImpl - it&apos;s not a huge deal.

In general I was aiming to create and delete stuff in the same object and thread, rather than passing ownership around. Since this class uses two contexts and two threads the comments were meant to indicate what lives where.

&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.h:66
&gt; &gt; +    unsigned m_backTextureId;
&gt; &gt; +    unsigned m_frontTextureId;
&gt; 
&gt; why do we have 3 texture IDs for each instance of Canvas2DLayerChromium:
&gt; 
&gt; Canvas2DLayerChromium::m_backTextureId
&gt; Canvas2DLayerChromium::m_frontTextureId
&gt; CanvasLayerChromium::m_compositedTextureId
&gt; 
&gt; ?

I was using the last one to indicate that the texture ID has been pushed to the CCCanvasLayerImpl, as it looked like there was some initialization ordering glitch if I created the front buffer lazily in updateCompositorResources. But as discussed offline, the ordering is correct, so the shader compilation failures I&apos;m seeing must be some other weird problem. I&apos;ll see if I can get to the root of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520845</commentid>
    <comment_count>23</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-14 04:26:48 -0800</bug_when>
    <thetext>Closing in. Very odd bug -- glGetShaderiv isn&apos;t returning any results, so Skia assumes shader compilation failed. Possibly something to do with compiling shaders concurrently in two threads, but I really hope not!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520920</commentid>
    <comment_count>24</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-14 07:48:26 -0800</bug_when>
    <thetext>OK, bizarre command buffer errors were due to a lingering usage of the canvas context on the compositor thread. That red herring out of the way, just need to fix the teardown process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521122</commentid>
    <comment_count>25</comment_count>
      <attachid>119261</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-14 11:26:23 -0800</bug_when>
    <thetext>Created attachment 119261
Fixed texture allocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521127</commentid>
    <comment_count>26</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-14 11:29:07 -0800</bug_when>
    <thetext>Reverted a bunch of dumb stuff caused by my own misunderstanding, and now using ManagedTexture for the allocation.

On the upside, the test is a little more involved than before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521419</commentid>
    <comment_count>27</comment_count>
      <attachid>119261</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-14 16:12:09 -0800</bug_when>
    <thetext>Comment on attachment 119261
Fixed texture allocation

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

We&apos;re spiraling in ever and ever closer, like a toilet flushing or some such analogy. I like moving to a managed texture but have some comments inline about the usage. I also think we can simplify the triple of texture IDs down a bit even further. After that, I think we are good to go.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:72
&gt; +    m_rendererTextureId = textureId;

what do you mean by &apos;renderer&apos; here? that&apos;s a novel term for this part of the code

could we call this the back buffer and the other texture the front buffer?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:115
&gt; +    if (host &amp;&amp; layerTreeHost() != host)
&gt; +        setTextureManager(host-&gt;contentsTextureManager());

i think you want to clear the m_managedTexture when transitioning to a nil CCLayerTreeHost as well

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:132
&gt; +    bool success = m_managedTexture-&gt;reserve(m_size, GraphicsContext3D::RGBA);
&gt; +    if (!success)
&gt; +        return;

i like the idea of using managed textures but there is a bit of subtlety. the way we do the lifetime management for content textures that i believe you will want to follow is:

1.) in paintContents(), reserve any textures you may want for this frame. if the reservation fails, then you&apos;re over the memory budget and can&apos;t draw this layer - mark is as skipped and sadface
2.) in updateCompositorResources(), bind the texture you previous reserved and use it
3.) in unreserveContentsTextures() (which is called at the end of the frame, after uploads and the commit have occured) unreserve the texture

the reason to do the reserve at paint time is to make sure that you get texture memory before all of the other layers that come after you in the iteration, and to make sure that your LRU-ness is properly set. it&apos;s fine to reserve without access to the context, no actual GL calls are made until the bindTexture call.

i think that with this code you will frequently not have any memory left by the time you try to reserve the canvas, resulting in sadface

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:135
&gt; +    setCompositedTextureId(m_managedTexture-&gt;textureId());

this seems awkward - you still have 3 variables on Canvas2DLayerChromium that are responsible for storing 2 texture IDs:

m_rendererTextureId
m_compositorTextureId
m_managedTexture

it seems to me like what you really want to do is remove m_compositedTextureId from CanvasLayerChromium, make compositedTextureId() virtual and provide different implementations for Canvas2DLayerChromium and WebGLLayerChromium

&gt; Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.h:42
&gt; +
&gt; +    // Deletes the attached texture, if any. To prevent this call setTextureId(0) first.

not sure i understand this comment - it doesn&apos;t look like there is any code change in this patch and the existing code, as far as i can tell, doesn&apos;t delete any textures

&gt; Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp:99
&gt; +        InSequence s;

nit we don&apos;t typically abbreviate in WebKit and we never use one letter variable names except for i/j loop counters and x/y for geometry code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521791</commentid>
    <comment_count>28</comment_count>
      <attachid>119261</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-15 03:21:46 -0800</bug_when>
    <thetext>Comment on attachment 119261
Fixed texture allocation

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:72
&gt;&gt; +    m_rendererTextureId = textureId;
&gt; 
&gt; what do you mean by &apos;renderer&apos; here? that&apos;s a novel term for this part of the code
&gt; 
&gt; could we call this the back buffer and the other texture the front buffer?

Hmm, OK, m_backTextureId and m_frontTexture (as it&apos;s a ManagedTexture)

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:115
&gt;&gt; +        setTextureManager(host-&gt;contentsTextureManager());
&gt; 
&gt; i think you want to clear the m_managedTexture when transitioning to a nil CCLayerTreeHost as well

Done

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:132
&gt;&gt; +        return;
&gt; 
&gt; i like the idea of using managed textures but there is a bit of subtlety. the way we do the lifetime management for content textures that i believe you will want to follow is:
&gt; 
&gt; 1.) in paintContents(), reserve any textures you may want for this frame. if the reservation fails, then you&apos;re over the memory budget and can&apos;t draw this layer - mark is as skipped and sadface
&gt; 2.) in updateCompositorResources(), bind the texture you previous reserved and use it
&gt; 3.) in unreserveContentsTextures() (which is called at the end of the frame, after uploads and the commit have occured) unreserve the texture
&gt; 
&gt; the reason to do the reserve at paint time is to make sure that you get texture memory before all of the other layers that come after you in the iteration, and to make sure that your LRU-ness is properly set. it&apos;s fine to reserve without access to the context, no actual GL calls are made until the bindTexture call.
&gt; 
&gt; i think that with this code you will frequently not have any memory left by the time you try to reserve the canvas, resulting in sadface

Done

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:135
&gt;&gt; +    setCompositedTextureId(m_managedTexture-&gt;textureId());
&gt; 
&gt; this seems awkward - you still have 3 variables on Canvas2DLayerChromium that are responsible for storing 2 texture IDs:
&gt; 
&gt; m_rendererTextureId
&gt; m_compositorTextureId
&gt; m_managedTexture
&gt; 
&gt; it seems to me like what you really want to do is remove m_compositedTextureId from CanvasLayerChromium, make compositedTextureId() virtual and provide different implementations for Canvas2DLayerChromium and WebGLLayerChromium

Hmm, or, again it seems like CanvasLayerChromium isn&apos;t providing much bang for the buck. Rather than adding another virtual method, how about we just get rid of CanvasLayerChromium?

I&apos;ll try removing its pushPropertiesTo method, as that now behaves differently in the two subclasses. They&apos;ll still inherit createCCLayerImpl.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.h:42
&gt;&gt; +    // Deletes the attached texture, if any. To prevent this call setTextureId(0) first.
&gt; 
&gt; not sure i understand this comment - it doesn&apos;t look like there is any code change in this patch and the existing code, as far as i can tell, doesn&apos;t delete any textures

Leftover from a previous iteration of patch. Will remove.

&gt;&gt; Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp:99
&gt;&gt; +        InSequence s;
&gt; 
&gt; nit we don&apos;t typically abbreviate in WebKit and we never use one letter variable names except for i/j loop counters and x/y for geometry code

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521816</commentid>
    <comment_count>29</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-15 04:10:35 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; We&apos;re spiraling in ever and ever closer, like a toilet flushing or some such analogy.

Hmm, are you saying I need another couple of flush() calls?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521873</commentid>
    <comment_count>30</comment_count>
      <attachid>119423</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-15 06:51:25 -0800</bug_when>
    <thetext>Created attachment 119423
Tweaked texture reservation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523807</commentid>
    <comment_count>31</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-19 02:32:48 -0800</bug_when>
    <thetext>James, got time to review this again? Or if not, can you suggest another reviewer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523912</commentid>
    <comment_count>32</comment_count>
      <attachid>119863</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2011-12-19 07:58:19 -0800</bug_when>
    <thetext>Created attachment 119863
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524052</commentid>
    <comment_count>33</comment_count>
      <attachid>119863</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-12-19 11:21:13 -0800</bug_when>
    <thetext>Comment on attachment 119863
Rebased

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

Looks OK. Set cq? when you want this to land.

&gt; Source/WebCore/platform/graphics/chromium/CanvasLayerChromium.cpp:-68
&gt; -    canvasLayer-&gt;setTextureId(textureId());
&gt; -    canvasLayer-&gt;setHasAlpha(m_hasAlpha);
&gt; -    canvasLayer-&gt;setPremultipliedAlpha(m_premultipliedAlpha);
&gt; -}

this would have been much cleaner if you had left this function alone, made the textureId() getter virtual, and provided appropriate overrides in WebGLLayerChromium and Canvas2DLayerChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524159</commentid>
    <comment_count>34</comment_count>
      <attachid>119863</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 13:45:59 -0800</bug_when>
    <thetext>Comment on attachment 119863
Rebased

Clearing flags on attachment: 119863

Committed r103264: &lt;http://trac.webkit.org/changeset/103264&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524160</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 13:46:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118062</attachid>
            <date>2011-12-06 09:34:57 -0800</date>
            <delta_ts>2011-12-09 05:52:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72738-20111206173456.patch</filename>
            <type>text/plain</type>
            <size>9610</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjE0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDExLTEyLTA2ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2Fu
dmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJv
bWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMy
RExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjYW52YXNUZXh0dXJl
SWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRDYW52YXNU
ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjYW52
YXNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0Q2Fu
dmFzU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJp
bmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3JhbUJpbmRpbmdCYXNlOjpsb2FkU2hh
ZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxl
clN0YXRlTWFjaGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NjaGVkdWxlclN0YXRlTWFj
aGluZTo6YmVnaW5GcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVDb21wbGV0ZU9uSW1wbFRocmVhZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
On5JbWFnZUJ1ZmZlcik6CisKIDIwMTEtMTItMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFVzZSBIYXNoTWFwPE93blB0cj4gaW4gQ29sbGVjdGlvbkNhY2hlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMjEx
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDEyIEBACiAKICNp
bmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDQ2FudmFz
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAi
Y2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9yIHRoZSBH
TEMoKSBtYWNybwogCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCkBAIC01
MCwzNyArNTMsODYgQEAgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhcwog
fQogCiBDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IENhbnZhc0xheWVyQ2hyb21pdW0oMCkKKyAgICA6
IExheWVyQ2hyb21pdW0oMCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9mYm8o
MCkKKyAgICAsIG1fY2FudmFzVGV4dHVyZUlkKDApCisgICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJl
SWQoMCkKIHsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXllckNocm9t
aXVtKCkKIHsKKyAgICBpZiAobV9mYm8pCisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVi
dWZmZXIobV9mYm8pOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52YXMyRExheWVy
Q2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NDYW52YXNMYXll
ckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogfQogCiBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXh0dXJlSWQgJiYgKG1f
Y29udGV4dAotICAgICAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRH
cmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSk7
CisgICAgcmV0dXJuIG1fY2FudmFzVGV4dHVyZUlkCisgICAgICAgICYmICFtX2NhbnZhc1NpemUu
aXNFbXB0eSgpCisgICAgICAgICYmIG1fY29udGV4dAorICAgICAgICAmJiAobV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0
ZXImKQordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXll
ckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXIpOworCisgICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8
Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7CisgICAgY2FudmFzTGF5ZXItPnNldFRleHR1cmVJ
ZChtX2NvbXBvc2l0b3JUZXh0dXJlSWQpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJD
b250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB0ZXh0dXJlVXBkYXRlcikKIHsKICAgICBpZiAoIW1f
bmVlZHNEaXNwbGF5IHx8ICFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fY29udGV4dCkgeworICAgIEFTU0VSVChtX2NvbnRleHQpOworCiAjaWYgVVNFKFNLSUEp
Ci0gICAgICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsK
LSAgICAgICAgaWYgKGdyQ29udGV4dCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKLSAgICAgICAg
fQorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAg
ICBpZiAoZ3JDb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKKyAgICB9CiAjZW5kaWYKLSAgICAgICAg
bV9jb250ZXh0LT5mbHVzaCgpOworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlSWQgfHwg
bV9jb21wb3NpdG9yU2l6ZSAhPSBtX2NhbnZhc1NpemUpIHsKKyAgICAgICAgVGV4dHVyZUFsbG9j
YXRvciogYWxsb2NhdG9yID0gdGV4dHVyZVVwZGF0ZXIuYWxsb2NhdG9yKCk7CisgICAgICAgIEFT
U0VSVChhbGxvY2F0b3IpOworCisgICAgICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlSWQpCisg
ICAgICAgICAgICBhbGxvY2F0b3ItPmRlbGV0ZVRleHR1cmUobV9jb21wb3NpdG9yVGV4dHVyZUlk
LCBtX2NvbXBvc2l0b3JTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICAgICAg
aWYgKG1fY2FudmFzVGV4dHVyZUlkICYmICFtX2NhbnZhc1NpemUuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBtX2NvbXBvc2l0b3JTaXplID0gbV9jYW52YXNTaXplOworICAgICAgICAgICAgbV9j
b21wb3NpdG9yVGV4dHVyZUlkID0gYWxsb2NhdG9yLT5jcmVhdGVUZXh0dXJlKG1fY29tcG9zaXRv
clNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2Nv
bXBvc2l0b3JUZXh0dXJlSWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jb21w
b3NpdG9yU2l6ZSA9IEludFNpemUoKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRvclRleHR1cmVJ
ZCA9IDA7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIW1fZmJvKSB7CisgICAgICAgIG1f
ZmJvID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgICAgICBBU1NFUlQobV9m
Ym8pOworICAgIH0KKworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Nh
bnZhc1RleHR1cmVJZCwgMCk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlSWQpOworICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAwLCBtX2NhbnZhc1NpemUud2lkdGgoKSwgbV9jYW52
YXNTaXplLmhlaWdodCgpLCAwKTsKKworICAgIG1fY29udGV4dC0+Zmx1c2goKTsKKwogICAgIG1f
dXBkYXRlUmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKICAgICBtX25l
ZWRzRGlzcGxheSA9IGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmgJKHJldmlzaW9uIDEwMjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxNCArMzQsMTQgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAotI2lu
Y2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAKIC8v
IEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKLWNsYXNzIENhbnZh
czJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKK2NsYXNzIENh
bnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpOwpAQCAt
NTAsOSArNTAsMjUgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2Vk
KCk7CiAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJ
bXBsKCk7CisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsK
KworICAgIHVuc2lnbmVkIGNhbnZhc1RleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFz
VGV4dHVyZUlkOyB9CisgICAgdm9pZCBzZXRDYW52YXNUZXh0dXJlSWQodW5zaWduZWQgY2FudmFz
VGV4dHVyZUlkKSB7IG1fY2FudmFzVGV4dHVyZUlkID0gY2FudmFzVGV4dHVyZUlkOyB9CisKKyAg
ICBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXNTaXpl
OyB9CisgICAgdm9pZCBzZXRDYW52YXNTaXplKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9jYW52
YXNTaXplID0gc2l6ZTsgfQorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENhbnZhczJETGF5ZXJD
aHJvbWl1bShHcmFwaGljc0NvbnRleHQzRCopOwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2Nv
bnRleHQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKKworICAgIEludFNpemUgbV9jYW52
YXNTaXplOworICAgIHVuc2lnbmVkIG1fY2FudmFzVGV4dHVyZUlkOworCisgICAgSW50U2l6ZSBt
X2NvbXBvc2l0b3JTaXplOworICAgIHVuc2lnbmVkIG1fY29tcG9zaXRvclRleHR1cmVJZDsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZS5j
cHAJKHJldmlzaW9uIDEwMjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2NoZWR1bGVyU3RhdGVNYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmU6OnNldE5lZWRz
Q28KIAogdm9pZCBDQ1NjaGVkdWxlclN0YXRlTWFjaGluZTo6YmVnaW5GcmFtZUNvbXBsZXRlKCkK
IHsKLSAgICBBU1NFUlQobV9jb21taXRTdGF0ZSA9PSBDT01NSVRfU1RBVEVfRlJBTUVfSU5fUFJP
R1JFU1MpOworLy8gICAgQVNTRVJUKG1fY29tbWl0U3RhdGUgPT0gQ09NTUlUX1NUQVRFX0ZSQU1F
X0lOX1BST0dSRVNTKTsKICAgICBtX2NvbW1pdFN0YXRlID0gQ09NTUlUX1NUQVRFX1VQREFUSU5H
X1JFU09VUkNFUzsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAJKHJldmlz
aW9uIDEwMjExNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNyArNDAzLDcgQEAg
dm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQ29tcGxldGVPbgogICAgIEFTU0VSVCghbV9j
b21taXRDb21wbGV0aW9uRXZlbnRPbkltcGxUaHJlYWQpOwogICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7CiAgICAgQVNTRVJUKG1fc2NoZWR1bGVyT25JbXBsVGhyZWFkKTsKLSAgICBBU1NFUlQo
bV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmNvbW1pdFBlbmRpbmcoKSk7CisvLyAgICBBU1NFUlQo
bV9zY2hlZHVsZXJPbkltcGxUaHJlYWQtPmNvbW1pdFBlbmRpbmcoKSk7CiAgICAgaWYgKCFtX2xh
eWVyVHJlZUhvc3RJbXBsKSB7CiAgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiAxMDIxMTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDggQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVB
Y2NlbGVyYXRlZENhbnZhcwogICAgIGRhdGEtPm1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNz
Q29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
ICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KGNvbnRleHQzRCk7Ci0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQodGV4
dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKKyAgICBkYXRhLT5tX3BsYXRmb3JtTGF5
ZXItPnNldENhbnZhc1NpemUoc2l6ZSk7CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRD
YW52YXNUZXh0dXJlSWQodGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKICNlbmRp
ZgogICAgIHJldHVybiBjYW52YXM7CiB9CkBAIC0xMjcsNyArMTI4LDcgQEAgSW1hZ2VCdWZmZXI6
On5JbWFnZUJ1ZmZlcigpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGlmIChtX2RhdGEubV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUxh
eWVyLT5zZXRUZXh0dXJlSWQoMCk7CisgICAgICAgIG1fZGF0YS5tX3BsYXRmb3JtTGF5ZXItPnNl
dENhbnZhc1RleHR1cmVJZCgwKTsKICNlbmRpZgogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118563</attachid>
            <date>2011-12-09 05:52:32 -0800</date>
            <delta_ts>2011-12-09 09:32:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72738-20111209135231.patch</filename>
            <type>text/plain</type>
            <size>9643</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDExLTEyLTA5ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUuCisKKyAgICAgICAgUmVtb3ZlZCBDYW52
YXNMYXllckNocm9taXVtIGFzIGEgc3VwZXJjbGFzcyBiZWNhdXNlIHNldFRleHR1cmVJZCBhbmQK
KyAgICAgICAgcHVzaFByb3BlcnRpZXNUbyBub3cgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgdGhh
dCdzIHRoZSBidWxrIG9mIHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IHdlIHdlcmUgaW5oZXJp
dGluZy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06
OmNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1
bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVBY2NlbGVyYXRlZENhbnZhcyk6CisKIDIwMTEtMTItMDkgIFZzZXZvbG9kIFZsYXNvdiAgPHZz
ZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBpbnNwZWN0b3IgdXRpbGl0
aWVzIHN5bnRheCBmaXguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDEwMjQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDkgKzM0LDEyIEBACiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAorI2lu
Y2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNybwogCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAi
R3JDb250ZXh0LmgiCkBAIC00NCw1MiArNDcsMTAzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorUGFzc1JlZlB0cjxDYW52YXMy
RExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250ZXh0LCBzaXplKSk7CiB9CiAKLUNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQotICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgwKQorQ2FudmFzMkRMYXll
ckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBMYXllckNocm9taXVtKDApCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9yZW5kZXJlclRl
eHR1cmVJZCgwKQorICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZUlkKDApCisgICAgLCBtX2Zibygw
KQogewogfQogCiBDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0o
KQogeworICAgIHNldFRleHR1cmVJZCgwKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpCit7CisgICAgbV9yZW5kZXJlclRl
eHR1cmVJZCA9IHRleHR1cmVJZDsKKworICAgIGlmIChtX3JlbmRlcmVyVGV4dHVyZUlkICYmICFt
X2NvbXBvc2l0b3JUZXh0dXJlSWQpIHsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b21wb3NpdG9yVGV4dHVyZUlkID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkpOworICAgICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlSWQpKTsKKyAgICAgICAgR0xD
KG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAg
ICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOworICAgICAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2ZibyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CisgICAgfSBlbHNl
IGlmICghbV9yZW5kZXJlclRleHR1cmVJZCAmJiBtX2NvbXBvc2l0b3JUZXh0dXJlSWQpIHsKKyAg
ICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fY29t
cG9zaXRvclRleHR1cmVJZCkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKSk7CisgICAgICAgIG1fY29tcG9zaXRvclRleHR1
cmVJZCA9IDA7CisgICAgICAgIG1fZmJvID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9yZW5kZXJl
clRleHR1cmVJZCkKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK1Bhc3NSZWZQdHI8
Q0NMYXllckltcGw+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQor
eworICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7Cit9CisK
K3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgpCit7CisgICAgaWYg
KGxheWVyVHJlZUhvc3QoKSkKKyAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1p
dGVyKG1fY29udGV4dCk7CisKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAogYm9vbCBDYW52
YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
dGV4dHVyZUlkICYmIChtX2NvbnRleHQKLSAgICAgICAgICAgICYmIChtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUikpOworICAgIHJldHVybiBtX3JlbmRlcmVyVGV4dHVyZUlkICYmICFtX3Np
emUuaXNFbXB0eSgpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKQor
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKLSAg
ICBpZiAoIW1fbmVlZHNEaXNwbGF5IHx8ICFkcmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIW5lZWRz
RGlzcGxheSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNl
OworCisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fY29udGV4dCkgeworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKICNp
ZiBVU0UoU0tJQSkKLSAgICAgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdy
Q29udGV4dCgpOwotICAgICAgICBpZiAoZ3JDb250ZXh0KSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICAgICAgZ3JDb250ZXh0LT5mbHVzaCgp
OwotICAgICAgICB9CisgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29u
dGV4dCgpOworICAgIGlmIChnckNvbnRleHQpCisgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsK
ICNlbmRpZgotICAgICAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci0gICAgfQogCi0gICAgbV91cGRh
dGVSZWN0ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIG1fbmVlZHNE
aXNwbGF5ID0gZmFsc2U7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZibykpOworICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3JlbmRlcmVyVGV4dHVyZUlkLCAwKSk7CisK
KyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlSWQpKTsKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSwgMCkpOworCisgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQogCi12b2lk
IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQordm9pZCBDYW52YXMyRExh
eWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogewotICAg
IGlmIChsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRl
TGltaXRlcihtX2NvbnRleHQpOworICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXIpOworCisgICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVyID0gc3RhdGljX2Nh
c3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7CisgICAgY2FudmFzTGF5ZXItPnNldFRleHR1
cmVJZChtX2NvbXBvc2l0b3JUZXh0dXJlSWQpOwogfQogCiB9CisKICNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaAkocmV2aXNpb24gMTAyNDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDI1ICszNCwzOSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5j
bHVkZSAiQ2FudmFzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAogLy8g
QSBsYXllciBjb250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwotY2xhc3MgQ2FudmFz
MkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0geworY2xhc3MgQ2Fu
dmFzMkRMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNz
Q29udGV4dDNEKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVh
bCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogCisgICAgLy8gQ2FsbGVkIGJ5
IEltYWdlQnVmZmVyU2tpYS4KKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCk7CisKKyAg
ICAvLyBDYWxsZWQgYnkgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELgogICAgIHZpcnR1YWwgdm9p
ZCBjb250ZW50Q2hhbmdlZCgpOwogCisgICAgLy8gQ2FsbGVkIGJ5IENocm9taXVtIGNvbXBvc2l0
b3IuCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1w
bCgpOworICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKik7CisK
KyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ2FudmFz
MkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgQ2FudmFzMkRMYXllckNo
cm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX3JlbmRlcmVyVGV4dHVyZUlkOworICAgIHVuc2lnbmVkIG1fY29tcG9zaXRvclRleHR1cmVJ
ZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwogfTsKIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkocmV2aXNpb24gMTAyNDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4
Nyw3IEBAIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMKICAgICBjYW52
YXMtPnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKS0+dW5yZWYo
KTsKICAgICBkYXRhLT5tX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250
ZXh0M0QpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3Bs
YXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QpOwor
ICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KGNvbnRleHQzRCwgc2l6ZSk7CiAgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJl
SWQodGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKICNlbmRpZgogICAgIHJldHVy
biBjYW52YXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118588</attachid>
            <date>2011-12-09 09:32:32 -0800</date>
            <delta_ts>2011-12-12 05:21:48 -0800</delta_ts>
            <desc>Added a unit test</desc>
            <filename>bug-72738-20111209173231.patch</filename>
            <type>text/plain</type>
            <size>15244</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDExLTEyLTA5ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUuCisKKyAgICAgICAgUmVtb3ZlZCBDYW52
YXNMYXllckNocm9taXVtIGFzIGEgc3VwZXJjbGFzcyBiZWNhdXNlIHNldFRleHR1cmVJZCBhbmQK
KyAgICAgICAgcHVzaFByb3BlcnRpZXNUbyBub3cgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgdGhh
dCdzIHRoZSBidWxrIG9mIHRoZQorICAgICAgICBmdW5jdGlvbmFsaXR5IHdlIHdlcmUgaW5oZXJp
dGluZy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06
OmNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1
bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXll
ckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVBY2NlbGVyYXRlZENhbnZhcyk6CisKIDIwMTEtMTItMDkgIFZzZXZvbG9kIFZsYXNvdiAgPHZz
ZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBpbnNwZWN0b3IgdXRpbGl0
aWVzIHN5bnRheCBmaXguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAJKHJldmlzaW9uIDEwMjQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDkgKzM0LDEyIEBACiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAorI2lu
Y2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIgLy8gRm9yIHRoZSBHTEMoKSBtYWNybwogCiAjaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSAi
R3JDb250ZXh0LmgiCkBAIC00NCw1MiArNDcsMTA3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorUGFzc1JlZlB0cjxDYW52YXMy
RExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250ZXh0LCBzaXplKSk7CiB9CiAKLUNh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQotICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgwKQorQ2FudmFzMkRMYXll
ckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBMYXllckNocm9taXVtKDApCiAgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9yZW5kZXJlclRl
eHR1cmVJZCgwKQorICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZUlkKDApCisgICAgLCBtX2Zibygw
KQogewogfQogCiBDYW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0o
KQogeworICAgIHNldFRleHR1cmVJZCgwKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpCit7CisgICAgbV9yZW5kZXJlclRl
eHR1cmVJZCA9IHRleHR1cmVJZDsKKworICAgIGJvb2wgc3VjY2VzcyA9IG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsK
KworICAgIGlmIChtX3JlbmRlcmVyVGV4dHVyZUlkICYmICFtX2NvbXBvc2l0b3JUZXh0dXJlSWQp
IHsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb21wb3NpdG9yVGV4dHVyZUlkID0g
bV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2NvbXBvc2l0b3JUZXh0dXJlSWQpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElO
RUFSKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgICAgICBH
TEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2ZibyA9IG1fY29udGV4
dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CisgICAgfSBlbHNlIGlmICghbV9yZW5kZXJlclRleHR1
cmVJZCAmJiBtX2NvbXBvc2l0b3JUZXh0dXJlSWQpIHsKKyAgICAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fY29tcG9zaXRvclRleHR1cmVJZCkpOwor
ICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVy
KG1fZmJvKSk7CisgICAgICAgIG1fY29tcG9zaXRvclRleHR1cmVJZCA9IDA7CisgICAgICAgIG1f
ZmJvID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9yZW5kZXJlclRleHR1cmVJZCkKKyAgICAgICAg
c2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQoreworICAgIHJldHVybiBDQ0NhbnZh
c0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckNo
cm9taXVtOjpjb250ZW50Q2hhbmdlZCgpCit7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSkKKyAg
ICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1pdGVyKG1fY29udGV4dCk7CisKKyAg
ICBzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAogYm9vbCBDYW52YXMyRExheWVyQ2hyb21pdW06OmRy
YXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGV4dHVyZUlkICYmIChtX2NvbnRl
eHQKLSAgICAgICAgICAgICYmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikpOworICAg
IHJldHVybiBtX3JlbmRlcmVyVGV4dHVyZUlkICYmICFtX3NpemUuaXNFbXB0eSgpOwogfQogCi12
b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFw
aGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKQordm9pZCBDYW52YXMyRExheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKIHsKLSAgICBpZiAoIW1fbmVlZHNEaXNwbGF5
IHx8ICFkcmF3c0NvbnRlbnQoKSkKKyAgICBpZiAoIW5lZWRzRGlzcGxheSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOworCisgICAgaWYgKCFkcmF3c0Nv
bnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fY29udGV4dCkgeworICAgIGJv
b2wgc3VjY2VzcyA9IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJU
X1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwogI2lmIFVTRShTS0lBKQotICAgICAgICBHckNv
bnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7Ci0gICAgICAgIGlmIChn
ckNvbnRleHQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgICAgICAgICBnckNvbnRleHQtPmZsdXNoKCk7Ci0gICAgICAgIH0KKyAgICBHckNvbnRl
eHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7CisgICAgaWYgKGdyQ29udGV4
dCkKKyAgICAgICAgZ3JDb250ZXh0LT5mbHVzaCgpOwogI2VuZGlmCi0gICAgICAgIG1fY29udGV4
dC0+Zmx1c2goKTsKLSAgICB9CiAKLSAgICBtX3VwZGF0ZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBib3VuZHMoKSk7Ci0gICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKyAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIG1fcmVuZGVyZXJUZXh0dXJlSWQsIDApKTsKKworICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29tcG9z
aXRvclRleHR1cmVJZCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29weVRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKSk7CisKKyAg
ICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpj
b250ZW50Q2hhbmdlZCgpCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRp
ZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiB7Ci0gICAgaWYgKGxheWVyVHJlZUhvc3QoKSkKLSAg
ICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1pdGVyKG1fY29udGV4dCk7CisgICAg
TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CisKKyAgICBDQ0NhbnZhc0xh
eWVySW1wbCogY2FudmFzTGF5ZXIgPSBzdGF0aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxh
eWVyKTsKKyAgICBjYW52YXNMYXllci0+c2V0VGV4dHVyZUlkKG1fY29tcG9zaXRvclRleHR1cmVJ
ZCk7CiB9CiAKIH0KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDI0NDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjUgKzM0LDM5IEBACiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVt
LmgiCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogCiAvLyBBIGxheWVyIGNvbnRhaW5pbmcgYW4gYWNj
ZWxlcmF0ZWQgMmQgY2FudmFzCi1jbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0gOiBwdWJsaWMg
Q2FudmFzTGF5ZXJDaHJvbWl1bSB7CitjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW0gOiBwdWJs
aWMgTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
MkRMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCosIGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVyQ2hyb21pdW0o
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1
cmVVcGRhdGVyJik7CiAKKyAgICAvLyBDYWxsZWQgYnkgSW1hZ2VCdWZmZXJTa2lhLgorICAgIHZv
aWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkKTsKKworICAgIC8vIENhbGxlZCBieSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAKKyAg
ICAvLyBDYWxsZWQgYnkgQ2hyb21pdW0gY29tcG9zaXRvci4KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgdmlydHVhbCB2b2lkIHB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0Nv
bnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsK
KwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3ND
b250ZXh0M0QqKTsKKyAgICBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJik7CisKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0Owor
ICAgIEludFNpemUgbV9zaXplOworICAgIHVuc2lnbmVkIG1fcmVuZGVyZXJUZXh0dXJlSWQ7Cisg
ICAgdW5zaWduZWQgbV9jb21wb3NpdG9yVGV4dHVyZUlkOworICAgIFBsYXRmb3JtM0RPYmplY3Qg
bV9mYm87CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiAxMDI0NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIFNrQ2FudmFzKiBj
cmVhdGVBY2NlbGVyYXRlZENhbnZhcwogICAgIGNhbnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dwdURl
dmljZShnciwgdGV4dHVyZS5nZXQoKSkpLT51bnJlZigpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1D
b250ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCk7CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVy
ID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNELCBzaXplKTsKICAgICBk
YXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlLmdldCgpLT5nZXRUZXh0
dXJlSGFuZGxlKCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gMTAyNDQ5KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogICAg
ICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5h
VGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRl
c3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLApJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1
bVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
YW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZh
czJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRlIDxn
bW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7Cit1c2luZyBuYW1lc3BhY2UgdGVzdGluZzsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9j
a0NhbnZhc0NvbnRleHQgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1Ymxp
YzoKKyAgICBNT0NLX01FVEhPRDAoY3JlYXRlRnJhbWVidWZmZXIsIFdlYkdMSWQoKSk7CisgICAg
TU9DS19NRVRIT0QwKGNyZWF0ZVRleHR1cmUsIFdlYkdMSWQoKSk7CisKKyAgICBNT0NLX01FVEhP
RDIoYmluZEZyYW1lYnVmZmVyLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tf
TUVUSE9ENShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEZW51bSwg
V0dDM0RlbnVtLCBXZWJHTElkLCBXR0MzRGludCkpOworCisgICAgTU9DS19NRVRIT0QyKGJpbmRU
ZXh0dXJlLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EOChjb3B5
VGV4SW1hZ2UyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEaW50LCBXR0MzRGVudW0sIFdHQzNEaW50
LCBXR0MzRGludCwgV0dDM0RzaXplaSwgV0dDM0RzaXplaSwgV0dDM0RpbnQpKTsKKworICAgIE1P
Q0tfTUVUSE9EMShkZWxldGVGcmFtZWJ1ZmZlciwgdm9pZChXZWJHTElkKSk7CisgICAgTU9DS19N
RVRIT0QxKGRlbGV0ZVRleHR1cmUsIHZvaWQoV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EMChm
bHVzaCwgdm9pZCgpKTsKKworfTsKKworVEVTVChDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCBj
b250ZW50Q2hhbmdlZCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRy
czsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRy
KG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JV
c2VPblRoaXNUaHJlYWQpOworICAgIE1vY2tDYW52YXNDb250ZXh0JiBtb2NrID0gKnN0YXRpY19j
YXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0
V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworCisgICAgY29uc3QgV2ViR0xJ
ZCByZW5kZXJlclRleElkID0gMTsKKyAgICBjb25zdCBXZWJHTElkIGNvbXBvc2l0b3JUZXhJZCA9
IDI7CisgICAgY29uc3QgV2ViR0xJZCBmYm9JZCA9IDM7CisgICAgeworICAgICAgICBJblNlcXVl
bmNlIHM7CisKKyAgICAgICAgLy8gU2V0dGluZyB1cAorICAgICAgICBFWFBFQ1RfQ0FMTChtb2Nr
LCBjcmVhdGVUZXh0dXJlKCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKGNvbXBvc2l0
b3JUZXhJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBiaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29tcG9zaXRvclRleElkKSk7CisgICAgICAgIEVYUEVD
VF9DQUxMKG1vY2ssIGNyZWF0ZUZyYW1lYnVmZmVyKCkpCisgICAgICAgICAgICAuV2lsbE9uY2Uo
UmV0dXJuKGZib0lkKSk7CisKKyAgICAgICAgLy8gUGFpbnRpbmcKKyAgICAgICAgRVhQRUNUX0NB
TEwobW9jaywgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
ZmJvSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgZnJhbWVidWZmZXJUZXh0dXJlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZW5kZXJlclRleElk
LCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2ssIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBjb21wb3NpdG9yVGV4SWQpKTsKKyAgICAgICAgRVhQRUNUX0NB
TEwobW9jaywgY29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAwLCAzMDAsIDE1MCwgMCkpOworICAgICAgICBF
WFBFQ1RfQ0FMTChtb2NrLCBmbHVzaCgpKTsKKworICAgICAgICAvLyBUZWFyaW5nIGRvd24KKyAg
ICAgICAgRVhQRUNUX0NBTEwobW9jaywgZGVsZXRlVGV4dHVyZShjb21wb3NpdG9yVGV4SWQpKTsK
KyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgZGVsZXRlRnJhbWVidWZmZXIoZmJvSWQpKTsKKyAg
ICB9CisKKyAgICBJbnRTaXplIHNpemUoMzAwLCAxNTApOworICAgIFJlZlB0cjxDYW52YXMyRExh
eWVyQ2hyb21pdW0+IGNhbnZhcyA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRl
eHQuZ2V0KCksIHNpemUpOworICAgIGNhbnZhcy0+c2V0Qm91bmRzKEludFNpemUoNjAwLCAzMDAp
KTsKKworICAgIGNhbnZhcy0+c2V0VGV4dHVyZUlkKHJlbmRlcmVyVGV4SWQpOworICAgIGNhbnZh
cy0+Y29udGVudENoYW5nZWQoKTsKKyAgICBjYW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5KCk7
CisgICAgY2FudmFzLT5zZXRUZXh0dXJlSWQoMCk7CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIHNo
b3VsZCBkbyBub3RoaW5nIG9uY2UgdGhlIHRleHR1cmUgaXMgZ29uZS4KKyAgICBjYW52YXMtPmNv
bnRlbnRDaGFuZ2VkKCk7CisgICAgY2FudmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118777</attachid>
            <date>2011-12-12 05:21:52 -0800</date>
            <delta_ts>2011-12-12 12:04:28 -0800</delta_ts>
            <desc>Inheriting from CanvasLayerChromium again</desc>
            <filename>bug-72738-20111212132151.patch</filename>
            <type>text/plain</type>
            <size>21061</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDExLTEyLTEyICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUuCisKKyAgICAgICAgUmVuYW1lZCBDYW52
YXNMYXllckNocm9taXVtOjptX3RleHR1cmVJZCB0byBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQgYW5k
CisgICAgICAgIG1hZGUgaXQgcHJvdGVjdGVkLCBmb3IgY2xhcml0eS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZh
c0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJv
bWl1bTo6Y29tcG9zaXRlZFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
ckNocm9taXVtOjpzZXRDb21wb3NpdGVkVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldERyYXdpbmdC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKToKKwogMjAx
MS0xMi0wOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIHBlciBEb2N1bWVudCBOb2RlIGNvdW50IHN0YXRpc3Rp
Y3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24g
MTAyNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsMTEgQEAK
IAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0ND
YW52YXNMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNs
dWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8KIAogI2lmIFVTRShTS0lBKQog
I2luY2x1ZGUgIkdyQ29udGV4dC5oIgpAQCAtNDQsNTIgKzQ2LDk1IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorUGFzc1JlZlB0
cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250ZXh0LCBzaXplKSk7
CiB9CiAKLUNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQorQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExh
eWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNp
emUpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9yZW5kZXJlclRleHR1cmVJZCgwKQorICAg
ICwgbV9mYm8oMCkKIHsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXll
ckNocm9taXVtKCkKIHsKKyAgICBzZXRUZXh0dXJlSWQoMCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgcmVuZGVyZXJUZXh0dXJlSWQpCit7
CisgICAgbV9yZW5kZXJlclRleHR1cmVJZCA9IHJlbmRlcmVyVGV4dHVyZUlkOworCisgICAgYm9v
bCBzdWNjZXNzID0gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgaWYgKG1fcmVuZGVyZXJUZXh0dXJlSWQg
JiYgIWNvbXBvc2l0ZWRUZXh0dXJlSWQoKSkgeworICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGVk
VGV4dHVyZUlkOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBjb21wb3NpdGVkVGV4dHVy
ZUlkID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkpOworICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBjb21wb3NpdGVkVGV4dHVyZUlkKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9mYm8gPSBtX2Nv
bnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgICAgICBzZXRDb21wb3NpdGVkVGV4dHVy
ZUlkKGNvbXBvc2l0ZWRUZXh0dXJlSWQpOworICAgIH0gZWxzZSBpZiAoIW1fcmVuZGVyZXJUZXh0
dXJlSWQgJiYgY29tcG9zaXRlZFRleHR1cmVJZCgpKSB7CisgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShjb21wb3NpdGVkVGV4dHVyZUlkKCkpKTsK
KyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2ZibykpOworICAgICAgICBzZXRDb21wb3NpdGVkVGV4dHVyZUlkKDApOworICAgICAgICBt
X2ZibyA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcmVuZGVyZXJUZXh0dXJlSWQpCisgICAgICAg
IHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y29u
dGVudENoYW5nZWQoKQoreworICAgIGlmIChsYXllclRyZWVIb3N0KCkpCisgICAgICAgIGxheWVy
VHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2NvbnRleHQpOworCisgICAgc2V0TmVlZHNE
aXNwbGF5KCk7CiB9CiAKIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQo
KSBjb25zdAogewotICAgIHJldHVybiBtX3RleHR1cmVJZCAmJiAobV9jb250ZXh0Ci0gICAgICAg
ICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpKTsKKyAgICByZXR1cm4gbV9y
ZW5kZXJlclRleHR1cmVJZCAmJiBjb21wb3NpdGVkVGV4dHVyZUlkKCkgJiYgIW1fc2l6ZS5pc0Vt
cHR5KCk7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpCit2b2lkIENh
bnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewotICAgIGlmICgh
bV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQorICAgIGlmICghbmVlZHNEaXNwbGF5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICBtX25lZWRz
RGlzcGxheSA9IGZhbHNlOworCisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCiAjaWYgVVNFKFNLSUEp
Ci0gICAgICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsK
LSAgICAgICAgaWYgKGdyQ29udGV4dCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKLSAgICAgICAg
fQorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAg
ICBpZiAoZ3JDb250ZXh0KQorICAgICAgICBnckNvbnRleHQtPmZsdXNoKCk7CiAjZW5kaWYKLSAg
ICAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAgIH0KIAotICAgIG1fdXBkYXRlUmVjdCA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwotfQorICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yZW5kZXJlclRleHR1cmVJZCwgMCkpOwogCi12b2lkIENh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQotewotICAgIGlmIChsYXllclRy
ZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2Nv
bnRleHQpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0ZWRUZXh0dXJlSWQoKSkpOworICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAwLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKSk7CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9
CiAKIH0KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDI1NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDIzIEBAIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogLy8gQSBsYXllciBjb250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwog
Y2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
MkRMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXpl
Jik7CiAgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7Ci0gICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOworCisg
ICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAg
Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYp
OworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6
ZTsKKyAgICB1bnNpZ25lZCBtX3JlbmRlcmVyVGV4dHVyZUlkOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9mYm87CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gMTAyNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bQogICAgIDog
TGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKICAgICAsIG1f
cHJlbXVsdGlwbGllZEFscGhhKHRydWUpCi0gICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9j
b21wb3NpdGVkVGV4dHVyZUlkKDApCiB7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBDYW52
YXNMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllcwogICAgIExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXIpOwogCiAgICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVy
ID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7Ci0gICAgY2FudmFzTGF5
ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQoKSk7CisgICAgY2FudmFzTGF5ZXItPnNldFRleHR1
cmVJZChjb21wb3NpdGVkVGV4dHVyZUlkKCkpOwogICAgIGNhbnZhc0xheWVyLT5zZXRIYXNBbHBo
YShtX2hhc0FscGhhKTsKICAgICBjYW52YXNMYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKG1f
cHJlbXVsdGlwbGllZEFscGhhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVt
LmgJKHJldmlzaW9uIDEwMjU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcg
KzQ0LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVtKCk7CiAK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwotICAg
IHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9Ci0gICAg
dm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4dHVyZUlkID0gdGV4
dHVyZUlkOyB9CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNMYXllckNocm9taXVt
KENDTGF5ZXJEZWxlZ2F0ZSopOwogCisgICAgdW5zaWduZWQgY29tcG9zaXRlZFRleHR1cmVJZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlZFRleHR1cmVJZDsgfQorICAgIHZvaWQgc2V0Q29t
cG9zaXRlZFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpIHsgbV9jb21wb3NpdGVkVGV4dHVy
ZUlkID0gdGV4dHVyZUlkOyB9CisKICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3By
ZW11bHRpcGxpZWRBbHBoYTsKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICB1bnNpZ25l
ZCBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMjU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0bwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewotICAg
ICAgICByZW5kZXJlckNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIHJlbmRlcmVyQ29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0ZWRUZXh0dXJlSWQoKSk7
CiAgICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBt
b2RlcyB0byBHTF9DTEFNUF9UT19FREdFCiAgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0
ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCiAgICAgICAgIHJlbmRlcmVyQ29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CkBAIC0x
MDYsNyArMTA2LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRSZQog
ICAgIC8vIFRoaXMgd291bGQgaWRlYWxseSBiZSBkb25lIGluIHRoZSB3ZWJnbCBjb250ZXh0LCBi
dXQgdGhhdCBpc24ndCBwb3NzaWJsZSB5ZXQuCiAgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1
ZmZlciA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAg
bGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOwotICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCkt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOworICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgY29tcG9zaXRlZFRleHR1cmVJZCgpLCAwKTsKIAogICAgIEV4dGVuc2lvbnMzRENocm9t
aXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihsYXll
clJlbmRlcmVyQ29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpOwogICAgIGV4dGVuc2lvbnMtPnBh
aW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRo
KCksIGZyYW1lYnVmZmVyU2l6ZS5oZWlnaHQoKSwgIWNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKQEAgLTE0MCwxMSArMTQw
LDExIEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVmZmUKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fZHJhd2luZ0J1ZmZlci0+
cGxhdGZvcm1Db2xvckJ1ZmZlcigpOwotICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQg
fHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKKyAgICBpZiAodGV4dHVyZUlkICE9IGNvbXBvc2l0
ZWRUZXh0dXJlSWQoKSB8fCBkcmF3aW5nQnVmZmVyQ2hhbmdlZCkgewogICAgICAgICBtX3RleHR1
cmVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CiAgICAg
fQotICAgIG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOworICAgIHNldENvbXBvc2l0ZWRUZXh0dXJl
SWQodGV4dHVyZUlkKTsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwogICAgIG1faGFzQWxwaGEg
PSBhdHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmlidXRl
cy5wcmVtdWx0aXBsaWVkQWxwaGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAko
cmV2aXNpb24gMTAyNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfldlYkdMTGF5ZXJDaHJvbWl1bSgpOwogCisgICAg
dm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKQorICAgIHsKKyAgICAgICAgc2V0
Q29tcG9zaXRlZFRleHR1cmVJZCh0ZXh0dXJlSWQpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9v
bCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJl
dmlzaW9uIDEwMjU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBzdGF0
aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzCiAgICAgY2FudmFzLT5zZXREZXZp
Y2UobmV3IFNrR3B1RGV2aWNlKGdyLCB0ZXh0dXJlLmdldCgpKSktPnVucmVmKCk7CiAgICAgZGF0
YS0+bV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dDNEKTsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVy
ID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNEKTsKKyAgICBkYXRhLT5t
X3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0Qs
IHNpemUpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0VGV4dHVyZUlkKHRleHR1cmUu
Z2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gY2FudmFzOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMTItMTIgIElhaW4gTWVycmljayAgPGh1c2t5QGdvb2dsZS5jb20+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBjYW52YXMgYnJva2VuIGluIHRocmVhZGVkIGNvbXBv
c2l0aW5nIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNzM4CisKKyAgICAgICAgV2Ugd2VyZSBmbHVzaGluZyB0aGUgU2tpYSBjYW52YXMgaW4g
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcywgd2hpY2gKKyAgICAgICAgaXMgaWxsZWdhbCBhcyBp
dCBydW5zIG9uIHRoZSB3cm9uZyB0aHJlYWQuIE1vdmVkIHRvIHBhaW50Q29udGVudHNJZkRpcnR5
CisgICAgICAgIGluc3RlYWQuIEZvciBjb3JyZWN0IHJlbmRlcmluZyBvbiB0aGUgY29tcG9zaXRv
ciB0aHJlYWQsIHdlIG1ha2UgYSBjb3B5CisgICAgICAgIG9mIHRoZSBjYW52YXMgdGV4dHVyZS4K
KworICAgICAgICBSZW5hbWVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fdGV4dHVyZUlkIHRvIG1f
Y29tcG9zaXRlZFRleHR1cmVJZCBhbmQKKyAgICAgICAgbWFkZSBpdCBwcm90ZWN0ZWQsIGZvciBj
bGFyaXR5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAodGVzdGluZzo6VEVTVCk6CisKIDIwMTEtMTItMDkgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IFJlbW92ZSBmb3J3YXJkaW5nIGhlYWRlcnMgZm9yIFdlYkxheWVyIEFQSXMKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gMTAyNTY1KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAog
ICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0Fy
ZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRl
clRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNh
bnZhczJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRl
IDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgdGVzdGluZzsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TW9ja0NhbnZhc0NvbnRleHQgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1
YmxpYzoKKyAgICBNT0NLX01FVEhPRDAoY3JlYXRlRnJhbWVidWZmZXIsIFdlYkdMSWQoKSk7Cisg
ICAgTU9DS19NRVRIT0QwKGNyZWF0ZVRleHR1cmUsIFdlYkdMSWQoKSk7CisKKyAgICBNT0NLX01F
VEhPRDIoYmluZEZyYW1lYnVmZmVyLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1P
Q0tfTUVUSE9ENShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEZW51
bSwgV0dDM0RlbnVtLCBXZWJHTElkLCBXR0MzRGludCkpOworCisgICAgTU9DS19NRVRIT0QyKGJp
bmRUZXh0dXJlLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EOChj
b3B5VGV4SW1hZ2UyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEaW50LCBXR0MzRGVudW0sIFdHQzNE
aW50LCBXR0MzRGludCwgV0dDM0RzaXplaSwgV0dDM0RzaXplaSwgV0dDM0RpbnQpKTsKKworICAg
IE1PQ0tfTUVUSE9EMShkZWxldGVGcmFtZWJ1ZmZlciwgdm9pZChXZWJHTElkKSk7CisgICAgTU9D
S19NRVRIT0QxKGRlbGV0ZVRleHR1cmUsIHZvaWQoV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9E
MChmbHVzaCwgdm9pZCgpKTsKKworfTsKKworVEVTVChDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0
LCBjb250ZW50Q2hhbmdlZCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0
UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpG
b3JVc2VPblRoaXNUaHJlYWQpOworICAgIE1vY2tDYW52YXNDb250ZXh0JiBtb2NrID0gKnN0YXRp
Y19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRy
YWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworCisgICAgY29uc3QgV2Vi
R0xJZCByZW5kZXJlclRleElkID0gMTsKKyAgICBjb25zdCBXZWJHTElkIGNvbXBvc2l0b3JUZXhJ
ZCA9IDI7CisgICAgY29uc3QgV2ViR0xJZCBmYm9JZCA9IDM7CisgICAgeworICAgICAgICBJblNl
cXVlbmNlIHM7CisKKyAgICAgICAgLy8gU2V0dGluZyB1cAorICAgICAgICBFWFBFQ1RfQ0FMTCht
b2NrLCBjcmVhdGVUZXh0dXJlKCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKGNvbXBv
c2l0b3JUZXhJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBiaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29tcG9zaXRvclRleElkKSk7CisgICAgICAgIEVY
UEVDVF9DQUxMKG1vY2ssIGNyZWF0ZUZyYW1lYnVmZmVyKCkpCisgICAgICAgICAgICAuV2lsbE9u
Y2UoUmV0dXJuKGZib0lkKSk7CisKKyAgICAgICAgLy8gUGFpbnRpbmcKKyAgICAgICAgRVhQRUNU
X0NBTEwobW9jaywgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgZmJvSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZW5kZXJlclRl
eElkLCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2ssIGJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBjb21wb3NpdG9yVGV4SWQpKTsKKyAgICAgICAgRVhQRUNU
X0NBTEwobW9jaywgY29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAwLCAzMDAsIDE1MCwgMCkpOworICAgICAg
ICBFWFBFQ1RfQ0FMTChtb2NrLCBmbHVzaCgpKTsKKworICAgICAgICAvLyBUZWFyaW5nIGRvd24K
KyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgZGVsZXRlVGV4dHVyZShjb21wb3NpdG9yVGV4SWQp
KTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgZGVsZXRlRnJhbWVidWZmZXIoZmJvSWQpKTsK
KyAgICB9CisKKyAgICBJbnRTaXplIHNpemUoMzAwLCAxNTApOworICAgIFJlZlB0cjxDYW52YXMy
RExheWVyQ2hyb21pdW0+IGNhbnZhcyA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNv
bnRleHQuZ2V0KCksIHNpemUpOworICAgIGNhbnZhcy0+c2V0Qm91bmRzKEludFNpemUoNjAwLCAz
MDApKTsKKworICAgIGNhbnZhcy0+c2V0VGV4dHVyZUlkKHJlbmRlcmVyVGV4SWQpOworICAgIGNh
bnZhcy0+Y29udGVudENoYW5nZWQoKTsKKyAgICBjYW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5
KCk7CisgICAgY2FudmFzLT5zZXRUZXh0dXJlSWQoMCk7CisKKyAgICAvLyBUaGVzZSBtZXRob2Rz
IHNob3VsZCBkbyBub3RoaW5nIG9uY2UgdGhlIHRleHR1cmUgaXMgZ29uZS4KKyAgICBjYW52YXMt
PmNvbnRlbnRDaGFuZ2VkKCk7CisgICAgY2FudmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOwor
fQorCit9IC8vIG5hbWVzcGFjZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118823</attachid>
            <date>2011-12-12 12:04:35 -0800</date>
            <delta_ts>2011-12-13 09:40:40 -0800</delta_ts>
            <desc>Fixed lost-context check and variable names</desc>
            <filename>bug-72738-20111212200433.patch</filename>
            <type>text/plain</type>
            <size>21207</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDExLTEyLTEyICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUuCisKKyAgICAgICAgUmVuYW1lZCBDYW52
YXNMYXllckNocm9taXVtOjptX3RleHR1cmVJZCB0byBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQgYW5k
CisgICAgICAgIG1hZGUgaXQgcHJvdGVjdGVkLCBmb3IgY2xhcml0eS4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0pOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZh
c0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJv
bWl1bTo6Y29tcG9zaXRlZFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXll
ckNocm9taXVtOjpzZXRDb21wb3NpdGVkVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldERyYXdpbmdC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpzZXRUZXh0
dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzKToKKwogMjAx
MS0xMi0wOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIHBlciBEb2N1bWVudCBOb2RlIGNvdW50IHN0YXRpc3Rp
Y3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24g
MTAyNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsMTEgQEAK
IAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgogCisjaW5jbHVkZSAiY2MvQ0ND
YW52YXNMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNs
dWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8KIAogI2lmIFVTRShTS0lBKQog
I2luY2x1ZGUgIkdyQ29udGV4dC5oIgpAQCAtNDQsNTIgKzQ2LDk2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorUGFzc1JlZlB0
cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250ZXh0LCBzaXplKSk7
CiB9CiAKLUNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQorQ2FudmFzMkRMYXllckNocm9taXVtOjpDYW52YXMyRExh
eWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNp
emUpCiAgICAgOiBDYW52YXNMYXllckNocm9taXVtKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4
dCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9yZW5kZXJlclRleHR1cmVJZCgwKQorICAg
ICwgbV9mYm8oMCkKIHsKIH0KIAogQ2FudmFzMkRMYXllckNocm9taXVtOjp+Q2FudmFzMkRMYXll
ckNocm9taXVtKCkKIHsKKyAgICBzZXRUZXh0dXJlSWQoMCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgcmVuZGVyZXJUZXh0dXJlSWQpCit7
CisgICAgbV9yZW5kZXJlclRleHR1cmVJZCA9IHJlbmRlcmVyVGV4dHVyZUlkOworCisgICAgYm9v
bCBzdWNjZXNzID0gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCisgICAgaWYgKG1fcmVuZGVyZXJUZXh0dXJlSWQg
JiYgIWNvbXBvc2l0ZWRUZXh0dXJlSWQoKSkgeworICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGVk
VGV4dHVyZUlkOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBjb21wb3NpdGVkVGV4dHVy
ZUlkID0gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkpOworICAgICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBjb21wb3NpdGVkVGV4dHVyZUlkKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpKTsKKyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9mYm8gPSBtX2Nv
bnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworICAgICAgICBzZXRDb21wb3NpdGVkVGV4dHVy
ZUlkKGNvbXBvc2l0ZWRUZXh0dXJlSWQpOworICAgIH0gZWxzZSBpZiAoIW1fcmVuZGVyZXJUZXh0
dXJlSWQgJiYgY29tcG9zaXRlZFRleHR1cmVJZCgpKSB7CisgICAgICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShjb21wb3NpdGVkVGV4dHVyZUlkKCkpKTsK
KyAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZl
cihtX2ZibykpOworICAgICAgICBzZXRDb21wb3NpdGVkVGV4dHVyZUlkKDApOworICAgICAgICBt
X2ZibyA9IDA7CisgICAgfQorCisgICAgaWYgKG1fcmVuZGVyZXJUZXh0dXJlSWQpCisgICAgICAg
IHNldE5lZWRzRGlzcGxheSgpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y29u
dGVudENoYW5nZWQoKQoreworICAgIGlmIChsYXllclRyZWVIb3N0KCkpCisgICAgICAgIGxheWVy
VHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2NvbnRleHQpOworCisgICAgc2V0TmVlZHNE
aXNwbGF5KCk7CiB9CiAKIGJvb2wgQ2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQo
KSBjb25zdAogewotICAgIHJldHVybiBtX3RleHR1cmVJZCAmJiAobV9jb250ZXh0Ci0gICAgICAg
ICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpKTsKKyAgICByZXR1cm4gbV9y
ZW5kZXJlclRleHR1cmVJZCAmJiBjb21wb3NpdGVkVGV4dHVyZUlkKCkgJiYgIW1fc2l6ZS5pc0Vt
cHR5KCkKKyAgICAgICAgJiYgbV9jb250ZXh0ICYmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUik7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpCit2b2lkIENh
bnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogewotICAgIGlmICgh
bV9uZWVkc0Rpc3BsYXkgfHwgIWRyYXdzQ29udGVudCgpKQorICAgIGlmICghbmVlZHNEaXNwbGF5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICBtX25lZWRz
RGlzcGxheSA9IGZhbHNlOworCisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworCiAjaWYgVVNFKFNLSUEp
Ci0gICAgICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsK
LSAgICAgICAgaWYgKGdyQ29udGV4dCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICAgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKLSAgICAgICAg
fQorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0ID0gbV9jb250ZXh0LT5nckNvbnRleHQoKTsKKyAg
ICBpZiAoZ3JDb250ZXh0KQorICAgICAgICBnckNvbnRleHQtPmZsdXNoKCk7CiAjZW5kaWYKLSAg
ICAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAgIH0KIAotICAgIG1fdXBkYXRlUmVjdCA9IEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBtX25lZWRzRGlzcGxheSA9IGZh
bHNlOwotfQorICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pKTsKKyAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yZW5kZXJlclRleHR1cmVJZCwgMCkpOwogCi12b2lkIENh
bnZhczJETGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQotewotICAgIGlmIChsYXllclRy
ZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2Nv
bnRleHQpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0ZWRUZXh0dXJlSWQoKSkpOworICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAwLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKSk7CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9
CiAKIH0KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDI1NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDIzIEBAIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogLy8gQSBsYXllciBjb250YWluaW5nIGFuIGFjY2VsZXJhdGVkIDJkIGNhbnZhcwog
Y2xhc3MgQ2FudmFzMkRMYXllckNocm9taXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
MkRMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXpl
Jik7CiAgICAgdmlydHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7Ci0gICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOworCisg
ICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRDaGFuZ2VkKCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CisKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgQ2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAg
Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYp
OworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6
ZTsKKyAgICB1bnNpZ25lZCBtX3JlbmRlcmVyVGV4dHVyZUlkOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9mYm87CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gMTAyNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bQogICAgIDog
TGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKICAgICAsIG1f
cHJlbXVsdGlwbGllZEFscGhhKHRydWUpCi0gICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9j
b21wb3NpdGVkVGV4dHVyZUlkKDApCiB7CiB9CiAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBDYW52
YXNMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllcwogICAgIExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8obGF5ZXIpOwogCiAgICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xheWVy
ID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7Ci0gICAgY2FudmFzTGF5
ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQoKSk7CisgICAgY2FudmFzTGF5ZXItPnNldFRleHR1
cmVJZChjb21wb3NpdGVkVGV4dHVyZUlkKCkpOwogICAgIGNhbnZhc0xheWVyLT5zZXRIYXNBbHBo
YShtX2hhc0FscGhhKTsKICAgICBjYW52YXNMYXllci0+c2V0UHJlbXVsdGlwbGllZEFscGhhKG1f
cHJlbXVsdGlwbGllZEFscGhhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVt
LmgJKHJldmlzaW9uIDEwMjU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTcg
KzQ0LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVtKCk7CiAK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOwotICAg
IHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9Ci0gICAg
dm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4dHVyZUlkID0gdGV4
dHVyZUlkOyB9CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNMYXllckNocm9taXVt
KENDTGF5ZXJEZWxlZ2F0ZSopOwogCisgICAgdW5zaWduZWQgY29tcG9zaXRlZFRleHR1cmVJZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlZFRleHR1cmVJZDsgfQorICAgIHZvaWQgc2V0Q29t
cG9zaXRlZFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpIHsgbV9jb21wb3NpdGVkVGV4dHVy
ZUlkID0gdGV4dHVyZUlkOyB9CisKICAgICBib29sIG1faGFzQWxwaGE7CiAgICAgYm9vbCBtX3By
ZW11bHRpcGxpZWRBbHBoYTsKLSAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICB1bnNpZ25l
ZCBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMjU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0bwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV90ZXh0dXJlQ2hhbmdlZCkgewotICAg
ICAgICByZW5kZXJlckNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX3RleHR1cmVJZCk7CisgICAgICAgIHJlbmRlcmVyQ29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0ZWRUZXh0dXJlSWQoKSk7
CiAgICAgICAgIC8vIFNldCB0aGUgbWluLW1hZyBmaWx0ZXJzIHRvIGxpbmVhciBhbmQgd3JhcCBt
b2RlcyB0byBHTF9DTEFNUF9UT19FREdFCiAgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0
ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCiAgICAgICAgIHJlbmRlcmVyQ29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CkBAIC0x
MDYsNyArMTA2LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRSZQog
ICAgIC8vIFRoaXMgd291bGQgaWRlYWxseSBiZSBkb25lIGluIHRoZSB3ZWJnbCBjb250ZXh0LCBi
dXQgdGhhdCBpc24ndCBwb3NzaWJsZSB5ZXQuCiAgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1
ZmZlciA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAg
bGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOwotICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCkt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOworICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgY29tcG9zaXRlZFRleHR1cmVJZCgpLCAwKTsKIAogICAgIEV4dGVuc2lvbnMzRENocm9t
aXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihsYXll
clJlbmRlcmVyQ29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCkpOwogICAgIGV4dGVuc2lvbnMtPnBh
aW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1ZmZlciwgZnJhbWVidWZmZXJTaXplLndpZHRo
KCksIGZyYW1lYnVmZmVyU2l6ZS5oZWlnaHQoKSwgIWNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKQEAgLTE0MCwxMSArMTQw
LDExIEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVmZmUKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdW5zaWduZWQgaW50IHRleHR1cmVJZCA9IG1fZHJhd2luZ0J1ZmZlci0+
cGxhdGZvcm1Db2xvckJ1ZmZlcigpOwotICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQg
fHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKKyAgICBpZiAodGV4dHVyZUlkICE9IGNvbXBvc2l0
ZWRUZXh0dXJlSWQoKSB8fCBkcmF3aW5nQnVmZmVyQ2hhbmdlZCkgewogICAgICAgICBtX3RleHR1
cmVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CiAgICAg
fQotICAgIG1fdGV4dHVyZUlkID0gdGV4dHVyZUlkOworICAgIHNldENvbXBvc2l0ZWRUZXh0dXJl
SWQodGV4dHVyZUlkKTsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gY29udGV4dCgpLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwogICAgIG1faGFzQWxwaGEg
PSBhdHRyaWJ1dGVzLmFscGhhOwogICAgIG1fcHJlbXVsdGlwbGllZEFscGhhID0gYXR0cmlidXRl
cy5wcmVtdWx0aXBsaWVkQWxwaGE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAko
cmV2aXNpb24gMTAyNTY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEx
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfldlYkdMTGF5ZXJDaHJvbWl1bSgpOwogCisgICAg
dm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKQorICAgIHsKKyAgICAgICAgc2V0
Q29tcG9zaXRlZFRleHR1cmVJZCh0ZXh0dXJlSWQpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9v
bCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKICAgICB2
aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJl
dmlzaW9uIDEwMjU2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBzdGF0
aWMgU2tDYW52YXMqIGNyZWF0ZUFjY2VsZXJhdGVkQ2FudmFzCiAgICAgY2FudmFzLT5zZXREZXZp
Y2UobmV3IFNrR3B1RGV2aWNlKGdyLCB0ZXh0dXJlLmdldCgpKSktPnVucmVmKCk7CiAgICAgZGF0
YS0+bV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dDNEKTsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVy
ID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNEKTsKKyAgICBkYXRhLT5t
X3BsYXRmb3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0Qs
IHNpemUpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllci0+c2V0VGV4dHVyZUlkKHRleHR1cmUu
Z2V0KCktPmdldFRleHR1cmVIYW5kbGUoKSk7CiAjZW5kaWYKICAgICByZXR1cm4gY2FudmFzOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU2OSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMTItMTIgIElhaW4gTWVycmljayAgPGh1c2t5QGdvb2dsZS5jb20+CisKKyAgICAg
ICAgW2Nocm9taXVtXSBBY2NlbGVyYXRlZCBjYW52YXMgYnJva2VuIGluIHRocmVhZGVkIGNvbXBv
c2l0aW5nIG1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNzM4CisKKyAgICAgICAgV2Ugd2VyZSBmbHVzaGluZyB0aGUgU2tpYSBjYW52YXMgaW4g
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcywgd2hpY2gKKyAgICAgICAgaXMgaWxsZWdhbCBhcyBp
dCBydW5zIG9uIHRoZSB3cm9uZyB0aHJlYWQuIE1vdmVkIHRvIHBhaW50Q29udGVudHNJZkRpcnR5
CisgICAgICAgIGluc3RlYWQuIEZvciBjb3JyZWN0IHJlbmRlcmluZyBvbiB0aGUgY29tcG9zaXRv
ciB0aHJlYWQsIHdlIG1ha2UgYSBjb3B5CisgICAgICAgIG9mIHRoZSBjYW52YXMgdGV4dHVyZS4K
KworICAgICAgICBSZW5hbWVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fdGV4dHVyZUlkIHRvIG1f
Y29tcG9zaXRlZFRleHR1cmVJZCBhbmQKKyAgICAgICAgbWFkZSBpdCBwcm90ZWN0ZWQsIGZvciBj
bGFyaXR5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAodGVzdGluZzo6VEVTVCk6CisKIDIwMTEtMTItMDkgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IFJlbW92ZSBmb3J3YXJkaW5nIGhlYWRlcnMgZm9yIFdlYkxheWVyIEFQSXMKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gMTAyNTY1KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAog
ICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3Rlc3RzL0Fy
ZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRl
clRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAnLApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNh
bnZhczJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpbmNsdWRl
IDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgdGVzdGluZzsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
TW9ja0NhbnZhc0NvbnRleHQgOiBwdWJsaWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1
YmxpYzoKKyAgICBNT0NLX01FVEhPRDAoY3JlYXRlRnJhbWVidWZmZXIsIFdlYkdMSWQoKSk7Cisg
ICAgTU9DS19NRVRIT0QwKGNyZWF0ZVRleHR1cmUsIFdlYkdMSWQoKSk7CisKKyAgICBNT0NLX01F
VEhPRDIoYmluZEZyYW1lYnVmZmVyLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1P
Q0tfTUVUSE9ENShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEZW51
bSwgV0dDM0RlbnVtLCBXZWJHTElkLCBXR0MzRGludCkpOworCisgICAgTU9DS19NRVRIT0QyKGJp
bmRUZXh0dXJlLCB2b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EOChj
b3B5VGV4SW1hZ2UyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEaW50LCBXR0MzRGVudW0sIFdHQzNE
aW50LCBXR0MzRGludCwgV0dDM0RzaXplaSwgV0dDM0RzaXplaSwgV0dDM0RpbnQpKTsKKworICAg
IE1PQ0tfTUVUSE9EMShkZWxldGVGcmFtZWJ1ZmZlciwgdm9pZChXZWJHTElkKSk7CisgICAgTU9D
S19NRVRIT0QxKGRlbGV0ZVRleHR1cmUsIHZvaWQoV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9E
MChmbHVzaCwgdm9pZCgpKTsKKworfTsKKworVEVTVChDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0
LCBjb250ZW50Q2hhbmdlZCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyczsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0
UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpG
b3JVc2VPblRoaXNUaHJlYWQpOworICAgIE1vY2tDYW52YXNDb250ZXh0JiBtb2NrID0gKnN0YXRp
Y19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRy
YWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5nZXQoKSkpOworCisgICAgY29uc3QgV2Vi
R0xJZCByZW5kZXJlclRleHR1cmVJZCA9IDE7CisgICAgY29uc3QgV2ViR0xJZCBjb21wb3NpdG9y
VGV4dHVyZUlkID0gMjsKKyAgICBjb25zdCBXZWJHTElkIGZib0lkID0gMzsKKyAgICB7CisgICAg
ICAgIEluU2VxdWVuY2UgczsKKworICAgICAgICAvLyBTZXR0aW5nIHVwCisgICAgICAgIEVYUEVD
VF9DQUxMKG1vY2ssIGNyZWF0ZVRleHR1cmUoKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1
cm4oY29tcG9zaXRvclRleHR1cmVJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBiaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29tcG9zaXRvclRleHR1cmVJ
ZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBjcmVhdGVGcmFtZWJ1ZmZlcigpKQorICAg
ICAgICAgICAgLldpbGxPbmNlKFJldHVybihmYm9JZCkpOworCisgICAgICAgIC8vIFBhaW50aW5n
CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2ssIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIGZib0lkKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2ssIGZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgcmVuZGVyZXJUZXh0dXJlSWQsIDApKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywg
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0b3JUZXh0
dXJlSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgY29weVRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAw
LCAzMDAsIDE1MCwgMCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBmbHVzaCgpKTsKKwor
ICAgICAgICAvLyBUZWFyaW5nIGRvd24KKyAgICAgICAgRVhQRUNUX0NBTEwobW9jaywgZGVsZXRl
VGV4dHVyZShjb21wb3NpdG9yVGV4dHVyZUlkKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKG1vY2ss
IGRlbGV0ZUZyYW1lYnVmZmVyKGZib0lkKSk7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplKDMw
MCwgMTUwKTsKKyAgICBSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBjYW52YXMgPSBDYW52
YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0LmdldCgpLCBzaXplKTsKKyAgICBjYW52
YXMtPnNldEJvdW5kcyhJbnRTaXplKDYwMCwgMzAwKSk7CisKKyAgICBjYW52YXMtPnNldFRleHR1
cmVJZChyZW5kZXJlclRleHR1cmVJZCk7CisgICAgY2FudmFzLT5jb250ZW50Q2hhbmdlZCgpOwor
ICAgIGNhbnZhcy0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICBjYW52YXMtPnNldFRleHR1
cmVJZCgwKTsKKworICAgIC8vIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGRvIG5vdGhpbmcgb25jZSB0
aGUgdGV4dHVyZSBpcyBnb25lLgorICAgIGNhbnZhcy0+Y29udGVudENoYW5nZWQoKTsKKyAgICBj
YW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5
ZXJDaHJvbWl1bVRlc3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119028</attachid>
            <date>2011-12-13 09:40:47 -0800</date>
            <delta_ts>2011-12-14 11:26:19 -0800</delta_ts>
            <desc>Moved copyTexImage2D to updateCompositorResources</desc>
            <filename>bug-72738-20111213174045.patch</filename>
            <type>text/plain</type>
            <size>23084</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDExLTEyLTEzICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcy4KKworICAgICAgICBSZW5hbWVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fdGV4dHVyZUlk
IHRvIG1fY29tcG9zaXRlZFRleHR1cmVJZCBhbmQKKyAgICAgICAgbWFkZSBpdCBwcm90ZWN0ZWQs
IGZvciBjbGFyaXR5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZh
czJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNo
cm9taXVtOjpjb250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVy
Q2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVy
Q2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9taXVtOjpDYW52YXNMYXllckNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0
aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNvbXBv
c2l0ZWRUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6
c2V0Q29tcG9zaXRlZFRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpzZXREcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZhcyk6CisKIDIwMTEtMTItMTMgIFRv
ciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFtR
dF0gR2V0IHJpZCBvZiBsYXllcmluZyB2aW9sYXRpb25zIGluIGluY2x1ZGVzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMjY2OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDExIEBACiAKICNpbmNsdWRlICJD
YW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAorI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBs
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9u
czNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCiAKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJHckNv
bnRleHQuaCIKQEAgLTQ0LDUyICs0NiwxMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpj
cmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitQYXNzUmVmUHRyPENhbnZhczJETGF5
ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYW52YXMyRExheWVyQ2hyb21pdW0oY29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FudmFzMkRMYXllckNocm9taXVtKGNvbnRleHQsIHNpemUpKTsKIH0KIAotQ2FudmFz
MkRMYXllckNocm9taXVtOjpDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCitDYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJDaHJvbWl1bShH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICA6IENh
bnZhc0xheWVyQ2hyb21pdW0oMCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQoteworICAgICwg
bV9zaXplKHNpemUpCisgICAgLCBtX2JhY2tUZXh0dXJlSWQoMCkKKyAgICAsIG1fZnJvbnRUZXh0
dXJlSWQoMCkKKyAgICAsIG1fZmJvKDApCit7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9m
cm9udFRleHR1cmVJZCA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpKTsKKyAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX2Zyb250VGV4dHVyZUlkKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSk7CiB9
CiAKIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCiB7Cisg
ICAgLy8gQ29tcG9zaXRvciByZXNvdXJjZXMgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwIG9u
IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICBBU1NFUlQoIWNvbXBvc2l0ZWRUZXh0dXJlSWQo
KSk7CisgICAgQVNTRVJUKCFtX2Zibyk7CisKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vz
cyk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1f
ZnJvbnRUZXh0dXJlSWQpKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRl
eHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpCit7CisgICAgbV9iYWNrVGV4dHVyZUlkID0gdGV4
dHVyZUlkOworICAgIHNldE5lZWRzQ29tbWl0KCk7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBpbXBsKQoreworICAgIGlmICht
X2JhY2tUZXh0dXJlSWQpCisgICAgICAgIHNldENvbXBvc2l0ZWRUZXh0dXJlSWQobV9mcm9udFRl
eHR1cmVJZCk7CisgICAgZWxzZQorICAgICAgICBzZXRDb21wb3NpdGVkVGV4dHVyZUlkKDApOwor
CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhpbXBsKTsKK30KKwor
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OmNvbnRlbnRDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0
ZXIobV9jb250ZXh0KTsKKworICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCiBib29sIENhbnZh
czJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90
ZXh0dXJlSWQgJiYgKG1fY29udGV4dAotICAgICAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKSk7CisgICAgcmV0dXJuIG1fYmFja1RleHR1cmVJZCAmJiAhbV9zaXplLmlz
RW1wdHkoKQorICAgICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKTsKIH0KIAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikKK3ZvaWQg
Q2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAgaWYg
KCFtX25lZWRzRGlzcGxheSB8fCAhZHJhd3NDb250ZW50KCkpCisgICAgaWYgKCFuZWVkc0Rpc3Bs
YXkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsKKwor
ICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2Nv
bnRleHQpIHsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisKICNpZiBVU0UoU0tJ
QSkKLSAgICAgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgp
OwotICAgICAgICBpZiAoZ3JDb250ZXh0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgICAgICAgICAgZ3JDb250ZXh0LT5mbHVzaCgpOwotICAgICAg
ICB9CisgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwor
ICAgIGlmIChnckNvbnRleHQpCisgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKICNlbmRpZgot
ICAgICAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci0gICAgfQogCi0gICAgbV91cGRhdGVSZWN0ID0g
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIG1fbmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4
dHVyZVVwZGF0ZXImKQogewotICAgIGlmIChsYXllclRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVy
VHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlcihtX2NvbnRleHQpOworICAgIGlmIChtX2JhY2tU
ZXh0dXJlSWQpIHsKKyAgICAgICAgaWYgKCFtX2ZibykKKyAgICAgICAgICAgIEdMQyhjb250ZXh0
LCBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOworCisgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX2ZibykpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2JhY2tUZXh0dXJlSWQsIDApKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Zyb250VGV4dHVyZUlkKSk7
CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDAsIDAsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApKTsKKworICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgMCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Zmx1c2goKSk7CisKKyAgICB9
IGVsc2UgaWYgKG1fZmJvKSB7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kZWxldGVG
cmFtZWJ1ZmZlcihtX2ZibykpOworICAgICAgICBtX2ZibyA9IDA7CisgICAgfQogfQogCiB9CisK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMTAyNjY5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywzMCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
IC8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENh
bnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJD
aHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogICAg
IHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpOworCisgICAgdm9pZCBzZXRUZXh0dXJl
SWQodW5zaWduZWQpOworCisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CisKICAg
ICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50Q29udGVudHNJZkRpcnR5KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNU
byhDQ0xheWVySW1wbCopOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogCi0gICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ2FudmFz
MkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgQ2FudmFzMkRMYXllckNo
cm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworCiAgICAgR3JhcGhp
Y3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX2JhY2tUZXh0dXJlSWQ7CisgICAgdW5zaWduZWQgbV9mcm9udFRleHR1cmVJZDsKKworICAg
IC8vIE93bmVkIGJ5IHRoZSBjb21wb3NpdG9yIGNvbnRleHQsIHdoaWNoIGlzIHdoZXJlIHRoZSBi
YWNrIC0+IGZyb250IGNvcHkgaGFwcGVucy4KKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJvOwog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDEwMjY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIENh
bnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hyb21pdW0KICAgICA6IExheWVyQ2hyb21p
dW0oZGVsZWdhdGUpCiAgICAgLCBtX2hhc0FscGhhKHRydWUpCiAgICAgLCBtX3ByZW11bHRpcGxp
ZWRBbHBoYSh0cnVlKQotICAgICwgbV90ZXh0dXJlSWQoMCkKKyAgICAsIG1fY29tcG9zaXRlZFRl
eHR1cmVJZCgwKQogewogfQogCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXMKICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KGxheWVyKTsKIAogICAgIENDQ2FudmFzTGF5ZXJJbXBsKiBjYW52YXNMYXllciA9IHN0YXRpY19j
YXN0PENDQ2FudmFzTGF5ZXJJbXBsKj4obGF5ZXIpOwotICAgIGNhbnZhc0xheWVyLT5zZXRUZXh0
dXJlSWQodGV4dHVyZUlkKCkpOworICAgIGNhbnZhc0xheWVyLT5zZXRUZXh0dXJlSWQoY29tcG9z
aXRlZFRleHR1cmVJZCgpKTsKICAgICBjYW52YXNMYXllci0+c2V0SGFzQWxwaGEobV9oYXNBbHBo
YSk7CiAgICAgY2FudmFzTGF5ZXItPnNldFByZW11bHRpcGxpZWRBbHBoYShtX3ByZW11bHRpcGxp
ZWRBbHBoYSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lv
biAxMDI2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwxNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpOwogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwotCiAgICAgdmly
dHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKLSAgICB1bnNpZ25lZCB0
ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQotICAgIHZvaWQgc2V0VGV4
dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkgeyBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsgfQog
CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ2FudmFzTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVs
ZWdhdGUqKTsKIAorICAgIHVuc2lnbmVkIGNvbXBvc2l0ZWRUZXh0dXJlSWQoKSBjb25zdCB7IHJl
dHVybiBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQ7IH0KKyAgICB2b2lkIHNldENvbXBvc2l0ZWRUZXh0
dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fY29tcG9zaXRlZFRleHR1cmVJZCA9IHRleHR1
cmVJZDsgfQorCiAgICAgYm9vbCBtX2hhc0FscGhhOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVk
QWxwaGE7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAgdW5zaWduZWQgbV9jb21wb3Np
dGVkVGV4dHVyZUlkOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiAxMDI2NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3
ICs3NSw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG8KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsKLSAgICAgICAgcmVuZGVy
ZXJDb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90
ZXh0dXJlSWQpOworICAgICAgICByZW5kZXJlckNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBjb21wb3NpdGVkVGV4dHVyZUlkKCkpOwogICAgICAgICAv
LyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xf
Q0xBTVBfVE9fRURHRQogICAgICAgICAvLyB0byBnZXQgYXJvdW5kIE5QT1QgdGV4dHVyZSBsaW1p
dGF0aW9ucyBvZiBHTEVTLgogICAgICAgICByZW5kZXJlckNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwpAQCAtMTA2LDcgKzEwNiw3
IEBAIGJvb2wgV2ViR0xMYXllckNocm9taXVtOjpwYWludFJlbmRlcmVkUmUKICAgICAvLyBUaGlz
IHdvdWxkIGlkZWFsbHkgYmUgZG9uZSBpbiB0aGUgd2ViZ2wgY29udGV4dCwgYnV0IHRoYXQgaXNu
J3QgcG9zc2libGUgeWV0LgogICAgIFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIgPSBsYXll
clJlbmRlcmVyQ29udGV4dCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgIGxheWVyUmVuZGVy
ZXJDb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIGZyYW1lYnVmZmVyKTsKLSAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
dGV4dHVyZUlkLCAwKTsKKyAgICBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBv
c2l0ZWRUZXh0dXJlSWQoKSwgMCk7CiAKICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5z
aW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4obGF5ZXJSZW5kZXJlckNv
bnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKTsKICAgICBleHRlbnNpb25zLT5wYWludEZyYW1lYnVm
ZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIGZyYW1lYnVmZmVyU2l6ZS53aWR0aCgpLCBmcmFtZWJ1
ZmZlclNpemUuaGVpZ2h0KCksICFjb250ZXh0KCktPmdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJl
bXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CkBAIC0xNDAsMTEgKzE0MCwxMSBAQCB2b2lk
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1ZmZlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2RyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29s
b3JCdWZmZXIoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkIHx8IGRyYXdpbmdC
dWZmZXJDaGFuZ2VkKSB7CisgICAgaWYgKHRleHR1cmVJZCAhPSBjb21wb3NpdGVkVGV4dHVyZUlk
KCkgfHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9
IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIH0KLSAgICBtX3Rl
eHR1cmVJZCA9IHRleHR1cmVJZDsKKyAgICBzZXRDb21wb3NpdGVkVGV4dHVyZUlkKHRleHR1cmVJ
ZCk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbnRl
eHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBtX2hhc0FscGhhID0gYXR0cmlidXRl
cy5hbHBoYTsKICAgICBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IGF0dHJpYnV0ZXMucHJlbXVsdGlw
bGllZEFscGhhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgJKHJldmlzaW9uIDEw
MjY2OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hyb21pdW0oKTsKIAorICAgIHZvaWQgc2V0VGV4
dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkKKyAgICB7CisgICAgICAgIHNldENvbXBvc2l0ZWRU
ZXh0dXJlSWQodGV4dHVyZUlkKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250
ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
R3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CiAgICAgdmlydHVhbCB2b2lk
IGNvbnRlbnRDaGFuZ2VkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiAxMDI2
NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIFNrQ2FudmFz
KiBjcmVhdGVBY2NlbGVyYXRlZENhbnZhcwogICAgIGNhbnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dw
dURldmljZShnciwgdGV4dHVyZS5nZXQoKSkpLT51bnJlZigpOwogICAgIGRhdGEtPm1fcGxhdGZv
cm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNvbnRleHQzRCk7CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxh
eWVyID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNELCBzaXplKTsKICAg
ICBkYXRhLT5tX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlLmdldCgpLT5nZXRU
ZXh0dXJlSGFuZGxlKCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDI2ODQpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTEy
LTEzICBJYWluIE1lcnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQWNjZWxlcmF0ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAor
CisgICAgICAgIFdlIHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0
aGUgd3JvbmcgdGhyZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBp
bnN0ZWFkLiBGb3IgY29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3
ZSBtYWtlIGEgY29weQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcy4KKworICAgICAgICBSZW5hbWVkIENhbnZhc0xheWVyQ2hyb21pdW06
Om1fdGV4dHVyZUlkIHRvIG1fY29tcG9zaXRlZFRleHR1cmVJZCBhbmQKKyAgICAgICAgbWFkZSBp
dCBwcm90ZWN0ZWQsIGZvciBjbGFyaXR5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ2FudmFz
MkRMYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAodGVzdGluZzo6VEVTVCk6
CisKIDIwMTEtMTItMTIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgV2ViS2l0IGNvZGUgc2hvdWxkbid0IGJlIGNhbGxpbmcgYXBwbHlDb21tYW5kIGRpcmVjdGx5
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHJldmlzaW9uIDEwMjY2OSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDYgKzU0LDcgQEAKICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAg
ICAgICd0ZXN0cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29j
aWF0ZWRVUkxMb2FkZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlVGVzdC5j
cHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRnJhbWVSYXRlQ29udHJvbGxlclRlc3QuY3BwJywK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVt
VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52
YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk1vY2tXZWJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlVXBk
YXRlci5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIHRlc3Rpbmc7CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIE1vY2tDYW52YXNDb250ZXh0IDogcHVibGljIE1vY2tXZWJHcmFw
aGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QwKGNyZWF0ZUZyYW1lYnVm
ZmVyLCBXZWJHTElkKCkpOworICAgIE1PQ0tfTUVUSE9EMChjcmVhdGVUZXh0dXJlLCBXZWJHTElk
KCkpOworCisgICAgTU9DS19NRVRIT0QyKGJpbmRGcmFtZWJ1ZmZlciwgdm9pZChXR0MzRGVudW0s
IFdlYkdMSWQpKTsKKyAgICBNT0NLX01FVEhPRDUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIHZvaWQo
V0dDM0RlbnVtLCBXR0MzRGVudW0sIFdHQzNEZW51bSwgV2ViR0xJZCwgV0dDM0RpbnQpKTsKKwor
ICAgIE1PQ0tfTUVUSE9EMihiaW5kVGV4dHVyZSwgdm9pZChXR0MzRGVudW0sIFdlYkdMSWQpKTsK
KyAgICBNT0NLX01FVEhPRDgoY29weVRleEltYWdlMkQsIHZvaWQoV0dDM0RlbnVtLCBXR0MzRGlu
dCwgV0dDM0RlbnVtLCBXR0MzRGludCwgV0dDM0RpbnQsIFdHQzNEc2l6ZWksIFdHQzNEc2l6ZWks
IFdHQzNEaW50KSk7CisKKyAgICBNT0NLX01FVEhPRDEoZGVsZXRlRnJhbWVidWZmZXIsIHZvaWQo
V2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVUZXh0dXJlLCB2b2lkKFdlYkdMSWQp
KTsKK307CisKK2NsYXNzIE1vY2tUZXh0dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxv
Y2F0b3IgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMihjcmVhdGVUZXh0dXJlLCB1bnNpZ25l
ZChjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKKyAgICBNT0NLX01FVEhPRDMoZGVsZXRlVGV4
dHVyZSwgdm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSk7Cit9OworCitU
RVNUKENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QsIGNvbnRlbnRDaGFuZ2VkKQoreworICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworCisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtYWluQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IE1vY2tDYW52YXNDb250
ZXh0KCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVzZU9uVGhpc1RocmVhZCk7Cisg
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBpbXBsQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIo
bmV3IE1vY2tDYW52YXNDb250ZXh0KCkpLCBhdHRycywgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkZvclVz
ZU9uVGhpc1RocmVhZCk7CisKKyAgICBNb2NrQ2FudmFzQ29udGV4dCYgbWFpbk1vY2sgPSAqc3Rh
dGljX2Nhc3Q8TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4
dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtYWluQ29udGV4dC5nZXQoKSkpOworICAgIE1vY2tD
YW52YXNDb250ZXh0JiBpbXBsTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+
KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGlt
cGxDb250ZXh0LmdldCgpKSk7CisKKyAgICBjb25zdCBXZWJHTElkIHJlbmRlcmVyVGV4dHVyZUlk
ID0gMTsKKyAgICBjb25zdCBXZWJHTElkIGNvbXBvc2l0b3JUZXh0dXJlSWQgPSAyOworICAgIGNv
bnN0IFdlYkdMSWQgZmJvSWQgPSAzOworICAgIHsKKyAgICAgICAgSW5TZXF1ZW5jZSBzOworCisg
ICAgICAgIC8vIFNldHRpbmcgdXAsIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgRVhQRUNU
X0NBTEwobWFpbk1vY2ssIGNyZWF0ZVRleHR1cmUoKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShS
ZXR1cm4oY29tcG9zaXRvclRleHR1cmVJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChtYWluTW9j
aywgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0b3JU
ZXh0dXJlSWQpKTsKKworICAgICAgICAvLyBEb2luZyB0aGUgY29weSwgb24gdGhlIGNvbXBvc2l0
b3IgdGhyZWFkLgorICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgY3JlYXRlRnJhbWVidWZm
ZXIoKSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oZmJvSWQpKTsKKyAgICAgICAgRVhQ
RUNUX0NBTEwoaW1wbE1vY2ssIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIGZib0lkKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBmcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IHJlbmRlcmVyVGV4dHVyZUlkLCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBi
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29tcG9zaXRvclRleHR1
cmVJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgY29weVRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAw
LCAwLCAzMDAsIDE1MCwgMCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworCisgICAgICAg
IC8vIFRlYXJpbmcgZG93biwgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgICAgICBFWFBF
Q1RfQ0FMTChpbXBsTW9jaywgZGVsZXRlRnJhbWVidWZmZXIoZmJvSWQpKTsKKworICAgICAgICAv
LyBUZWFyaW5nIGRvd24sIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgRVhQRUNUX0NBTEwo
bWFpbk1vY2ssIGRlbGV0ZVRleHR1cmUoY29tcG9zaXRvclRleHR1cmVJZCkpOworICAgIH0KKwor
ICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9yIG1vY2tBbGxvY2F0b3I7IC8vIE5vIGV4cGVjdGF0aW9u
cywgc2hvdWxkbid0IGJlIHVzZWQuCisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZtb2Nr
QWxsb2NhdG9yKTsKKworICAgIEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CisgICAgUmVmUHRyPENh
bnZhczJETGF5ZXJDaHJvbWl1bT4gY2FudmFzID0gQ2FudmFzMkRMYXllckNocm9taXVtOjpjcmVh
dGUobWFpbkNvbnRleHQuZ2V0KCksIHNpemUpOworICAgIGNhbnZhcy0+c2V0Qm91bmRzKEludFNp
emUoNjAwLCAzMDApKTsKKyAgICBjYW52YXMtPnNldFRleHR1cmVJZChyZW5kZXJlclRleHR1cmVJ
ZCk7CisKKyAgICBjYW52YXMtPnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgRVhQRUNUX0ZB
TFNFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOworCisgICAgY2FudmFzLT5jb250ZW50Q2hhbmdl
ZCgpOworICAgIEVYUEVDVF9UUlVFKGNhbnZhcy0+bmVlZHNEaXNwbGF5KCkpOworCisgICAgY2Fu
dmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIEVYUEVDVF9GQUxTRShjYW52YXMtPm5l
ZWRzRGlzcGxheSgpKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIGRvIHRoZSBjb3B5CisgICAgY2Fu
dmFzLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGltcGxDb250ZXh0LmdldCgpLCB1cGRhdGVy
KTsKKworICAgIGNhbnZhcy0+c2V0VGV4dHVyZUlkKDApOworCisgICAgLy8gVGhpcyBzaG91bGQg
ZG8gdGhlIHRlYXJkb3duCisgICAgY2FudmFzLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGlt
cGxDb250ZXh0LmdldCgpLCB1cGRhdGVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllckNo
cm9taXVtVGVzdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119261</attachid>
            <date>2011-12-14 11:26:23 -0800</date>
            <delta_ts>2011-12-15 06:51:18 -0800</delta_ts>
            <desc>Fixed texture allocation</desc>
            <filename>bug-72738-20111214192622.patch</filename>
            <type>text/plain</type>
            <size>24045</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjgwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDExLTEyLTE0ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcy4KKworICAgICAgICBSZW5hbWVkIENhbnZhc0xheWVyQ2hyb21pdW06Om1fdGV4dHVyZUlk
IHRvIG1fY29tcG9zaXRlZFRleHR1cmVJZCBhbmQKKyAgICAgICAgbWFkZSBpdCBwcm90ZWN0ZWQs
IGZvciBjbGFyaXR5LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNo
cm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZh
czJETGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21p
dW06OmNvbnRlbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJv
bWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6dW5yZXNlcnZlQ29udGVudHNUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJl
c291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNMYXllckNocm9t
aXVtOjpDYW52YXNMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVy
Q2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0xheWVyQ2hyb21pdW06OmNvbXBvc2l0ZWRUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlZFRleHR1cmVJZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnBhaW50UmVuZGVyZWRS
ZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVtOjpz
ZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1
bTo6c2V0VGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0xheWVySW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFjY2VsZXJhdGVk
Q2FudmFzKToKKwogMjAxMS0xMi0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gRml4IFBsYXRmb3JtU2NyZWVuOjpzY3JlZW5BdmFp
bGFibGVSZWN0IHdoZW4gdGhlcmUncyBubyB2aWV3IHdpZGdldApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDI3NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMiBAQAogCiAjaW5jbHVkZSAiQ2FudmFzMkRM
YXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0
ZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8KIAogI2lm
IFVTRShTS0lBKQogI2luY2x1ZGUgIkdyQ29udGV4dC5oIgpAQCAtNDQsNTIgKzQ3LDExMCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVt
PiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKK1Bhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52YXMyRExheWVyQ2hyb21p
dW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShjb250
ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXMyRExheWVyQ2hyb21pdW0oY29u
dGV4dCwgc2l6ZSkpOwogfQogCi1DYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5ZXJD
aHJvbWl1bShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK0NhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25z
dCBJbnRTaXplJiBzaXplKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgwKQogICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fcmVuZGVyZXJUZXh0
dXJlSWQoMCkKKyAgICAsIG1fZmJvKDApCiB7CisgICAgR0xDKG1fY29udGV4dCwgbV9mYm8gPSBt
X2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwogfQogCiBDYW52YXMyRExheWVyQ2hyb21p
dW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogeworICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pKTsKK30KKwordm9pZCBDYW52YXMyRExheWVy
Q2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpCit7CisgICAgbV9yZW5k
ZXJlclRleHR1cmVJZCA9IHRleHR1cmVJZDsKKyAgICBzZXROZWVkc0NvbW1pdCgpOworfQorCit2
b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQoreworICAgIGlmIChs
YXllclRyZWVIb3N0KCkpCisgICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRl
cihtX2NvbnRleHQpOworCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKIGJvb2wgQ2FudmFz
MkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX3Rl
eHR1cmVJZCAmJiAobV9jb250ZXh0Ci0gICAgICAgICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1IpKTsKKyAgICByZXR1cm4gbV9yZW5kZXJlclRleHR1cmVJZCAmJiAhbV9zaXpl
LmlzRW1wdHkoKQorICAgICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SKTsKIH0KIAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikKK3Zv
aWQgQ2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAg
aWYgKCFtX25lZWRzRGlzcGxheSB8fCAhZHJhd3NDb250ZW50KCkpCisgICAgaWYgKCFuZWVkc0Rp
c3BsYXkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxzZTsK
KworICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X2NvbnRleHQpIHsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisKICNpZiBVU0Uo
U0tJQSkKLSAgICAgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4
dCgpOwotICAgICAgICBpZiAoZ3JDb250ZXh0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICAgICAgZ3JDb250ZXh0LT5mbHVzaCgpOwotICAg
ICAgICB9CisgICAgR3JDb250ZXh0KiBnckNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgp
OworICAgIGlmIChnckNvbnRleHQpCisgICAgICAgIGdyQ29udGV4dC0+Zmx1c2goKTsKICNlbmRp
ZgotICAgICAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci0gICAgfQogCi0gICAgbV91cGRhdGVSZWN0
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYm91bmRzKCkpOwotICAgIG1fbmVlZHNEaXNwbGF5
ID0gZmFsc2U7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQogCi12b2lkIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Y29udGVudENoYW5nZWQoKQordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06
OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewotICAgIGlmIChsYXll
clRyZWVIb3N0KCkpCi0gICAgICAgIGxheWVyVHJlZUhvc3QoKS0+c3RhcnRSYXRlTGltaXRlciht
X2NvbnRleHQpOworICAgIGlmIChob3N0ICYmIGxheWVyVHJlZUhvc3QoKSAhPSBob3N0KQorICAg
ICAgICBzZXRUZXh0dXJlTWFuYWdlcihob3N0LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCkpOwor
CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsKK30KKwor
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVNYW5hZ2VyKFRleHR1cmVNYW5h
Z2VyKiB0ZXh0dXJlTWFuYWdlcikKK3sKKyAgICBtX21hbmFnZWRUZXh0dXJlID0gTWFuYWdlZFRl
eHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Cit9CisKK3ZvaWQgQ2FudmFzMkRMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQoreworICAgIGlmICghbV9yZW5kZXJlclRl
eHR1cmVJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0gbV9tYW5hZ2Vk
VGV4dHVyZS0+cmVzZXJ2ZShtX3NpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWFuYWdlZFRleHR1cmUtPmJp
bmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworICAgIHNldENvbXBvc2l0
ZWRUZXh0dXJlSWQobV9tYW5hZ2VkVGV4dHVyZS0+dGV4dHVyZUlkKCkpOworCisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9yZW5k
ZXJlclRleHR1cmVJZCwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApKTsKKyAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgMCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mbHVzaCgpKTsKK30K
Kwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgp
Cit7CisgICAgbV9tYW5hZ2VkVGV4dHVyZS0+dW5yZXNlcnZlKCk7CiB9CiAKK3ZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBtX21hbmFnZWRUZXh0
dXJlLmNsZWFyKCk7CiB9CisKK30KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAx
MDI3NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQzLDE2ICs0NCwzMyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIC8vIEEg
bGF5ZXIgY29udGFpbmluZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENhbnZhczJE
TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1
bT4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1
YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRl
bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKKworICAgIHZvaWQgc2V0VGV4
dHVyZUlkKHVuc2lnbmVkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwog
CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJl
ZUhvc3QoQ0NMYXllclRyZWVIb3N0Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CisgICAg
dmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBjbGVhbnVwUmVzb3VyY2VzKCk7CisKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ2FudmFzMkRM
YXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgQ2FudmFzMkRMYXllckNocm9t
aXVtKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOworCisgICAgLy8gVmlzaWJs
ZSBmb3IgdGVzdGluZyBzbyB3ZSBjYW4gYnlwYXNzIHNldExheWVyVHJlZUhvc3QuCisgICAgZnJp
ZW5kIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Q7CisgICAgdm9pZCBzZXRUZXh0dXJl
TWFuYWdlcihUZXh0dXJlTWFuYWdlciopOworCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29u
dGV4dDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICB1bnNpZ25lZCBtX3JlbmRlcmVyVGV4dHVy
ZUlkOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgT3duUHRyPE1hbmFnZWRUZXh0
dXJlPiBtX21hbmFnZWRUZXh0dXJlOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMjc1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIENhbnZhc0xheWVyQ2hyb21pdW06OkNhbnZhc0xheWVyQ2hy
b21pdW0KICAgICA6IExheWVyQ2hyb21pdW0oZGVsZWdhdGUpCiAgICAgLCBtX2hhc0FscGhhKHRy
dWUpCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQotICAgICwgbV90ZXh0dXJlSWQo
MCkKKyAgICAsIG1fY29tcG9zaXRlZFRleHR1cmVJZCgwKQogewogfQogCkBAIC02Miw3ICs2Miw3
IEBAIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXMKICAgICBMYXllckNo
cm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKIAogICAgIENDQ2FudmFzTGF5ZXJJbXBs
KiBjYW52YXNMYXllciA9IHN0YXRpY19jYXN0PENDQ2FudmFzTGF5ZXJJbXBsKj4obGF5ZXIpOwot
ICAgIGNhbnZhc0xheWVyLT5zZXRUZXh0dXJlSWQodGV4dHVyZUlkKCkpOworICAgIGNhbnZhc0xh
eWVyLT5zZXRUZXh0dXJlSWQoY29tcG9zaXRlZFRleHR1cmVJZCgpKTsKICAgICBjYW52YXNMYXll
ci0+c2V0SGFzQWxwaGEobV9oYXNBbHBoYSk7CiAgICAgY2FudmFzTGF5ZXItPnNldFByZW11bHRp
cGxpZWRBbHBoYShtX3ByZW11bHRpcGxpZWRBbHBoYSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDI3NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDE3ICs0NCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+Q2FudmFzTGF5ZXJD
aHJvbWl1bSgpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVD
Q0xheWVySW1wbCgpOwotCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXll
ckltcGwqKTsKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmVJZDsgfQotICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkgeyBtX3Rl
eHR1cmVJZCA9IHRleHR1cmVJZDsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQ2FudmFz
TGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqKTsKIAorICAgIHVuc2lnbmVkIGNvbXBvc2l0
ZWRUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQ7IH0KKyAg
ICB2b2lkIHNldENvbXBvc2l0ZWRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fY29t
cG9zaXRlZFRleHR1cmVJZCA9IHRleHR1cmVJZDsgfQorCiAgICAgYm9vbCBtX2hhc0FscGhhOwog
ICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CisgICAgdW5zaWduZWQgbV9jb21wb3NpdGVkVGV4dHVyZUlkOwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDI3NTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG8KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdGV4dHVyZUNo
YW5nZWQpIHsKLSAgICAgICAgcmVuZGVyZXJDb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOworICAgICAgICByZW5kZXJlckNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb21wb3NpdGVk
VGV4dHVyZUlkKCkpOwogICAgICAgICAvLyBTZXQgdGhlIG1pbi1tYWcgZmlsdGVycyB0byBsaW5l
YXIgYW5kIHdyYXAgbW9kZXMgdG8gR0xfQ0xBTVBfVE9fRURHRQogICAgICAgICAvLyB0byBnZXQg
YXJvdW5kIE5QT1QgdGV4dHVyZSBsaW1pdGF0aW9ucyBvZiBHTEVTLgogICAgICAgICByZW5kZXJl
ckNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgV2ViR0xMYXllckNocm9taXVtOjpwYWlu
dFJlbmRlcmVkUmUKICAgICAvLyBUaGlzIHdvdWxkIGlkZWFsbHkgYmUgZG9uZSBpbiB0aGUgd2Vi
Z2wgY29udGV4dCwgYnV0IHRoYXQgaXNuJ3QgcG9zc2libGUgeWV0LgogICAgIFBsYXRmb3JtM0RP
YmplY3QgZnJhbWVidWZmZXIgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpLT5jcmVhdGVGcmFtZWJ1
ZmZlcigpOwogICAgIGxheWVyUmVuZGVyZXJDb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKLSAgICBsYXllclJlbmRl
cmVyQ29udGV4dCgpLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkLCAwKTsKKyAgICBsYXllclJlbmRlcmVy
Q29udGV4dCgpLT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbXBvc2l0ZWRUZXh0dXJlSWQoKSwgMCk7CiAKICAgICBFeHRl
bnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4obGF5ZXJSZW5kZXJlckNvbnRleHQoKS0+Z2V0RXh0ZW5zaW9ucygpKTsKICAgICBl
eHRlbnNpb25zLT5wYWludEZyYW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXIsIGZyYW1lYnVm
ZmVyU2l6ZS53aWR0aCgpLCBmcmFtZWJ1ZmZlclNpemUuaGVpZ2h0KCksICFjb250ZXh0KCktPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVsdGlwbGllZEFscGhhLCBpbWFnZUJ1ZmZlcik7CkBA
IC0xNDAsMTEgKzE0MCwxMSBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd2luZ0J1
ZmZlCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGludCB0ZXh0dXJlSWQgPSBtX2Ry
YXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9
IG1fdGV4dHVyZUlkIHx8IGRyYXdpbmdCdWZmZXJDaGFuZ2VkKSB7CisgICAgaWYgKHRleHR1cmVJ
ZCAhPSBjb21wb3NpdGVkVGV4dHVyZUlkKCkgfHwgZHJhd2luZ0J1ZmZlckNoYW5nZWQpIHsKICAg
ICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZWQg
PSB0cnVlOwogICAgIH0KLSAgICBtX3RleHR1cmVJZCA9IHRleHR1cmVJZDsKKyAgICBzZXRDb21w
b3NpdGVkVGV4dHVyZUlkKHRleHR1cmVJZCk7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcyA9IGNvbnRleHQoKS0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKICAg
ICBtX2hhc0FscGhhID0gYXR0cmlidXRlcy5hbHBoYTsKICAgICBtX3ByZW11bHRpcGxpZWRBbHBo
YSA9IGF0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmgJKHJldmlzaW9uIDEwMjc1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSwxMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hyb21p
dW0oKTsKIAorICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkKKyAgICB7
CisgICAgICAgIHNldENvbXBvc2l0ZWRUZXh0dXJlSWQodGV4dHVyZUlkKTsKKyAgICB9CisKICAg
ICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRh
dGVyJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgJKHJldmlzaW9uIDEwMjc1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChpZCkpOwogICAgIH0KKworICAgIC8v
IERlbGV0ZXMgdGhlIGF0dGFjaGVkIHRleHR1cmUsIGlmIGFueS4gVG8gcHJldmVudCB0aGlzIGNh
bGwgc2V0VGV4dHVyZUlkKDApIGZpcnN0LgogICAgIHZpcnR1YWwgfkNDQ2FudmFzTGF5ZXJJbXBs
KCk7CiAKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAkocmV2aXNpb24gMTAyNzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3
IEBAIHN0YXRpYyBTa0NhbnZhcyogY3JlYXRlQWNjZWxlcmF0ZWRDYW52YXMKICAgICBjYW52YXMt
PnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIHRleHR1cmUuZ2V0KCkpKS0+dW5yZWYoKTsK
ICAgICBkYXRhLT5tX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0
M0QpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBkYXRhLT5tX3BsYXRm
b3JtTGF5ZXIgPSBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShjb250ZXh0M0QpOworICAg
IGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKGNv
bnRleHQzRCwgc2l6ZSk7CiAgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQo
dGV4dHVyZS5nZXQoKS0+Z2V0VGV4dHVyZUhhbmRsZSgpKTsKICNlbmRpZgogICAgIHJldHVybiBj
YW52YXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyODAyKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMiBAQAorMjAxMS0xMi0xNCAgSWFpbiBNZXJyaWNrICA8aHVza3lAZ29vZ2xlLmNvbT4K
KworICAgICAgICBbY2hyb21pdW1dIEFjY2VsZXJhdGVkIGNhbnZhcyBicm9rZW4gaW4gdGhyZWFk
ZWQgY29tcG9zaXRpbmcgbW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzI3MzgKKworICAgICAgICBXZSB3ZXJlIGZsdXNoaW5nIHRoZSBTa2lhIGNh
bnZhcyBpbiB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzLCB3aGljaAorICAgICAgICBpcyBpbGxl
Z2FsIGFzIGl0IHJ1bnMgb24gdGhlIHdyb25nIHRocmVhZC4gTW92ZWQgdG8gcGFpbnRDb250ZW50
c0lmRGlydHkKKyAgICAgICAgaW5zdGVhZC4gRm9yIGNvcnJlY3QgcmVuZGVyaW5nIG9uIHRoZSBj
b21wb3NpdG9yIHRocmVhZCwgd2UgbWFrZSBhIGNvcHkKKyAgICAgICAgb2YgdGhlIGNhbnZhcyB0
ZXh0dXJlIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMuCisKKyAgICAgICAgUmVuYW1lZCBD
YW52YXNMYXllckNocm9taXVtOjptX3RleHR1cmVJZCB0byBtX2NvbXBvc2l0ZWRUZXh0dXJlSWQg
YW5kCisgICAgICAgIG1hZGUgaXQgcHJvdGVjdGVkLCBmb3IgY2xhcml0eS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAg
ICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3Q6OnNldFRleHR1cmVNYW5hZ2Vy
KToKKwogMjAxMS0xMi0xNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtXSBSb2xsIGNocm9taXVtIERFUFMgKHIxMTM4MDcgLT4gcjExNDM1
NikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24gMTAyNzUyKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
NTQsNiArNTQsNyBAQAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzogWwogICAgICAg
ICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvQXNz
b2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1hZ2VUcmFja2Vy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2VUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVyVGVzdC5jcHAn
LApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21p
dW1UZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNE
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVV
cGRhdGVyLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgdGVzdGluZzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0IDog
cHVibGljIFRlc3QgeworcHJvdGVjdGVkOgorICAgIC8vIFRoaXMgaW5kaXJlY3Rpb24gaXMgbmVl
ZGVkIGJlY2F1c2UgaW5kaXZpZHVhbCB0ZXN0cyBhcmVuJ3QgZnJpZW5kcyBvZiBDYW52YXMyRExh
eWVyQ2hyb21pdW0uCisgICAgdm9pZCBzZXRUZXh0dXJlTWFuYWdlcihDYW52YXMyRExheWVyQ2hy
b21pdW0qIGxheWVyLCBUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKKyAgICB7CisgICAgICAgIGxh
eWVyLT5zZXRUZXh0dXJlTWFuYWdlcihtYW5hZ2VyKTsKKyAgICB9Cit9OworCit9CisKK25hbWVz
cGFjZSB7CisKK2NsYXNzIE1vY2tDYW52YXNDb250ZXh0IDogcHVibGljIE1vY2tXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QwKGNyZWF0ZUZyYW1lYnVmZmVy
LCBXZWJHTElkKCkpOworICAgIE1PQ0tfTUVUSE9EMChjcmVhdGVUZXh0dXJlLCBXZWJHTElkKCkp
OworCisgICAgTU9DS19NRVRIT0QyKGJpbmRGcmFtZWJ1ZmZlciwgdm9pZChXR0MzRGVudW0sIFdl
YkdMSWQpKTsKKyAgICBNT0NLX01FVEhPRDUoZnJhbWVidWZmZXJUZXh0dXJlMkQsIHZvaWQoV0dD
M0RlbnVtLCBXR0MzRGVudW0sIFdHQzNEZW51bSwgV2ViR0xJZCwgV0dDM0RpbnQpKTsKKworICAg
IE1PQ0tfTUVUSE9EMihiaW5kVGV4dHVyZSwgdm9pZChXR0MzRGVudW0sIFdlYkdMSWQpKTsKKyAg
ICBNT0NLX01FVEhPRDgoY29weVRleEltYWdlMkQsIHZvaWQoV0dDM0RlbnVtLCBXR0MzRGludCwg
V0dDM0RlbnVtLCBXR0MzRGludCwgV0dDM0RpbnQsIFdHQzNEc2l6ZWksIFdHQzNEc2l6ZWksIFdH
QzNEaW50KSk7CisKKyAgICBNT0NLX01FVEhPRDEoZGVsZXRlRnJhbWVidWZmZXIsIHZvaWQoV2Vi
R0xJZCkpOworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVUZXh0dXJlLCB2b2lkKFdlYkdMSWQpKTsK
K307CisKK2NsYXNzIE1vY2tUZXh0dXJlQWxsb2NhdG9yIDogcHVibGljIFRleHR1cmVBbGxvY2F0
b3IgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMihjcmVhdGVUZXh0dXJlLCB1bnNpZ25lZChj
b25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKKyAgICBNT0NLX01FVEhPRDMoZGVsZXRlVGV4dHVy
ZSwgdm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSk7Cit9OworCitURVNU
X0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgY2FuQ29weUNhbnZhc1RleHR1cmUpCit7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7CisKKyAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1haW5Db250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpj
cmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZh
c0NvbnRleHQoKSksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFk
KTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGltcGxDb250ZXh0ID0gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChhZG9w
dFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
Rm9yVXNlT25UaGlzVGhyZWFkKTsKKworICAgIE1vY2tDYW52YXNDb250ZXh0JiBtYWluTW9jayA9
ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5Db250ZXh0LmdldCgpKSk7CisgICAg
TW9ja0NhbnZhc0NvbnRleHQmIGltcGxNb2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250
ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0
M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsKKworICAgIE1vY2tUZXh0dXJlQWxsb2NhdG9yIGFsbG9j
YXRvck1vY2s7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKCZhbGxvY2F0b3JNb2NrKTsK
KworICAgIGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7CisgICAgY29uc3Qgc2l6ZV90IG1h
eFRleHR1cmVTaXplID0gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CisgICAgT3du
UHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUobWF4VGV4dHVyZVNpemUsIG1heFRleHR1cmVTaXplLCBtYXhUZXh0dXJlU2l6ZSk7CisKKyAg
ICBjb25zdCBXZWJHTElkIHJlbmRlcmVyVGV4dHVyZUlkID0gMTsKKyAgICBjb25zdCBXZWJHTElk
IGNvbXBvc2l0b3JUZXh0dXJlSWQgPSAyOworICAgIGNvbnN0IFdlYkdMSWQgZmJvSWQgPSAzOwor
ICAgIHsKKyAgICAgICAgSW5TZXF1ZW5jZSBzOworCisgICAgICAgIC8vIFNldHVwIENhbnZhczJE
TGF5ZXJDaHJvbWl1bSAob24gdGhlIG1haW4gdGhyZWFkKS4KKyAgICAgICAgRVhQRUNUX0NBTEwo
bWFpbk1vY2ssIGNyZWF0ZUZyYW1lYnVmZmVyKCkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0
dXJuKGZib0lkKSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmUgYW5kIGRvIHRoZSBjb3B5
IChvbiB0aGUgaW1wbCB0aHJlYWQpLgorICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2Nr
LCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAg
ICAgIC5XaWxsT25jZShSZXR1cm4oY29tcG9zaXRvclRleHR1cmVJZCkpOworICAgICAgICBFWFBF
Q1RfQ0FMTChpbXBsTW9jaywgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIGNvbXBvc2l0b3JUZXh0dXJlSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ss
IGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZib0lkKSk7
CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHJlbmRlcmVyVGV4dHVyZUlk
LCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBjb3B5VGV4SW1hZ2UyRChHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDAs
IDAsIDMwMCwgMTUwLCAwKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBiaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7CisKKyAgICAgICAg
Ly8gVGVhcmRvd24gQ2FudmFzMkRMYXllckNocm9taXVtLgorICAgICAgICBFWFBFQ1RfQ0FMTCht
YWluTW9jaywgZGVsZXRlRnJhbWVidWZmZXIoZmJvSWQpKTsKKworICAgICAgICAvLyBUZWFyZG93
biBUZXh0dXJlTWFuYWdlci4KKyAgICAgICAgRVhQRUNUX0NBTEwoYWxsb2NhdG9yTW9jaywgZGVs
ZXRlVGV4dHVyZShjb21wb3NpdG9yVGV4dHVyZUlkLCBzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSkpOworICAgIH0KKworICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNhbnZh
cyA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKG1haW5Db250ZXh0LmdldCgpLCBzaXpl
KTsKKyAgICBzZXRUZXh0dXJlTWFuYWdlcihjYW52YXMuZ2V0KCksIHRleHR1cmVNYW5hZ2VyLmdl
dCgpKTsKKyAgICBjYW52YXMtPnNldEJvdW5kcyhJbnRTaXplKDYwMCwgMzAwKSk7CisgICAgY2Fu
dmFzLT5zZXRUZXh0dXJlSWQocmVuZGVyZXJUZXh0dXJlSWQpOworCisgICAgY2FudmFzLT5wYWlu
dENvbnRlbnRzSWZEaXJ0eSgpOworICAgIEVYUEVDVF9GQUxTRShjYW52YXMtPm5lZWRzRGlzcGxh
eSgpKTsKKworICAgIGNhbnZhcy0+Y29udGVudENoYW5nZWQoKTsKKyAgICBFWFBFQ1RfVFJVRShj
YW52YXMtPm5lZWRzRGlzcGxheSgpKTsKKworICAgIGNhbnZhcy0+cGFpbnRDb250ZW50c0lmRGly
dHkoKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7CisKKyAgICBj
YW52YXMtPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoaW1wbENvbnRleHQuZ2V0KCksIHVwZGF0
ZXIpOworICAgIGNhbnZhcy5jbGVhcigpOworCisgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1l
bW9yeVRvTGltaXQoMCk7CisgICAgdGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJl
cygmYWxsb2NhdG9yTW9jayk7Cit9CisKK30gLy8gbmFtZXNwYWNlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119423</attachid>
            <date>2011-12-15 06:51:25 -0800</date>
            <delta_ts>2011-12-19 07:58:14 -0800</delta_ts>
            <desc>Tweaked texture reservation</desc>
            <filename>bug-72738-20111215145123.patch</filename>
            <type>text/plain</type>
            <size>24216</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjkzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDExLTEyLTE1ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcy4KKworICAgICAgICBSZW1vdmVkIG1fdGV4dHVyZUlkIGFuZCBwdXNoUHJvcGVydGllc1Rv
IGZyb20gQ2FudmFzTGF5ZXJDaHJvbWl1bSwgYXMKKyAgICAgICAgaXQncyBubyBsb25nZXIgY29t
bW9uIGJldHdlZW4gQ2FudmFzMkRMYXllckNocm9taXVtIGFuZAorICAgICAgICBXZWJHTExheWVy
Q2hyb21pdW0uIFdlYkdMIGNoYW5nZXMgZG8gbm90IGNoYW5nZSBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNvbnRlbnRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50
c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRM
YXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6
c2V0VGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5
ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNo
cm9taXVtOjpzZXREcmF3aW5nQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5
ZXJDaHJvbWl1bTo6dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJv
bWl1bTo6c2V0VGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXll
ckltcGw6OnRleHR1cmVJZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWNjZWxlcmF0ZWRDYW52
YXMpOgorCiAyMDExLTEyLTE1ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGNvbnZl
cnQgc2NyaXB0IGNvbmRpdGlvbnMgdG8gcHJlY29tcGlsZXIgI2lmcwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDI5MTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMiBAQAogCiAjaW5jbHVkZSAiQ2FudmFz
MkRMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFjcm8KIAog
I2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkdyQ29udGV4dC5oIgpAQCAtNDQsNTIgKzQ3LDExOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9t
aXVtPiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKK1Bhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52YXMyRExheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJvbWl1bShj
b250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXMyRExheWVyQ2hyb21pdW0o
Y29udGV4dCwgc2l6ZSkpOwogfQogCi1DYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZhczJETGF5
ZXJDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK0NhbnZhczJETGF5ZXJDaHJv
bWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBj
b25zdCBJbnRTaXplJiBzaXplKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgwKQogICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYmFja1RleHR1
cmVJZCgwKQorICAgICwgbV9mYm8oMCkKIHsKKyAgICBHTEMobV9jb250ZXh0LCBtX2ZibyA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCiB7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZibykpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICBtX2JhY2tU
ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwordm9pZCBD
YW52YXMyRExheWVyQ2hyb21pdW06OmNvbnRlbnRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobGF5ZXJU
cmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0ZXIobV9j
b250ZXh0KTsKKworICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCiBib29sIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90ZXh0dXJl
SWQgJiYgKG1fY29udGV4dAotICAgICAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKSk7CisgICAgcmV0dXJuIG1fYmFja1RleHR1cmVJZCAmJiAhbV9zaXplLmlzRW1wdHko
KQorICAgICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5n
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9S
KTsKIH0KIAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikKK3ZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAgaWYgKCFtX25l
ZWRzRGlzcGxheSB8fCAhZHJhd3NDb250ZW50KCkpCisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udFRleHR1cmUtPnJlc2VydmUobV9zaXplLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICBpZiAoIW5lZWRzRGlzcGxheSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb250ZXh0KSB7CisgICAgbV9uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKKworICAgIGJvb2wgc3VjY2VzcyA9IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwogI2lmIFVTRShT
S0lBKQotICAgICAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0
KCk7Ci0gICAgICAgIGlmIChnckNvbnRleHQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgICAgICBnckNvbnRleHQtPmZsdXNoKCk7Ci0gICAg
ICAgIH0KKyAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250ZXh0KCk7
CisgICAgaWYgKGdyQ29udGV4dCkKKyAgICAgICAgZ3JDb250ZXh0LT5mbHVzaCgpOwogI2VuZGlm
Ci0gICAgICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLSAgICB9CiAKLSAgICBtX3VwZGF0ZVJlY3Qg
PSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgbV9uZWVkc0Rpc3BsYXkg
PSBmYWxzZTsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAKLXZvaWQgQ2FudmFzMkRMYXll
ckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgpCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgaWYgKGxheWVy
VHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1pdGVyKG1f
Y29udGV4dCk7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSAhPSBob3N0KQorICAgICAgICBzZXRU
ZXh0dXJlTWFuYWdlcihob3N0ID8gaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpIDogMCk7
CisKKyAgICBDYW52YXNMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KGhvc3QpOwogfQog
Cit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZU1hbmFnZXIoVGV4dHVyZU1h
bmFnZXIqIHRleHR1cmVNYW5hZ2VyKQoreworICAgIGlmICh0ZXh0dXJlTWFuYWdlcikKKyAgICAg
ICAgbV9mcm9udFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVNYW5hZ2Vy
KTsKKyAgICBlbHNlCisgICAgICAgIG1fZnJvbnRUZXh0dXJlLmNsZWFyKCk7CiB9CisKK3ZvaWQg
Q2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQoreworICAgIGlm
ICghbV9iYWNrVGV4dHVyZUlkIHx8ICFtX2Zyb250VGV4dHVyZS0+aXNWYWxpZChtX3NpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udFRl
eHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOworCisgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV9iYWNrVGV4dHVyZUlkLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmNvcHlUZXhJ
bWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCkpOworICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZsdXNoKCkpOwor
fQorCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
SW1wbCogbGF5ZXIpCit7CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byhsYXllcik7CisKKyAgICBDQ0NhbnZhc0xheWVySW1wbCogY2FudmFzTGF5ZXIgPSBzdGF0aWNf
Y2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVyKTsKKyAgICBjYW52YXNMYXllci0+c2V0VGV4
dHVyZUlkKG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgQ2FudmFzMkRM
YXllckNocm9taXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQoreworICAgIG1fZnJvbnRU
ZXh0dXJlLT51bnJlc2VydmUoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OmNs
ZWFudXBSZXNvdXJjZXMoKQoreworICAgIG1fZnJvbnRUZXh0dXJlLmNsZWFyKCk7Cit9CisKK30K
KwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDI5MTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJN
YW5hZ2VkVGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDE2ICs0NCwz
NCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIC8vIEEgbGF5ZXIgY29udGFpbmluZyBhbiBh
Y2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJv
bWl1bSgpOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIEND
VGV4dHVyZVVwZGF0ZXImKTsKKworICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwogCisgICAgdmlydHVhbCBib29sIGRy
YXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0
eSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0
Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVu
dHNUZXh0dXJlKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKwogcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0
M0QqKTsKKyAgICBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0QqLCBjb25z
dCBJbnRTaXplJik7CisKKyAgICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nIHNvIHdlIGNhbiBieXBh
c3Mgc2V0TGF5ZXJUcmVlSG9zdC4KKyAgICBmcmllbmQgY2xhc3MgQ2FudmFzMkRMYXllckNocm9t
aXVtVGVzdDsKKyAgICB2b2lkIHNldFRleHR1cmVNYW5hZ2VyKFRleHR1cmVNYW5hZ2VyKik7CisK
ICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIEludFNpemUgbV9zaXplOwor
ICAgIHVuc2lnbmVkIG1fYmFja1RleHR1cmVJZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZmJv
OworICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRleHR1cmU7CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMTAyOTEzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0Miw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1bShDQ0xh
eWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKLSAg
ICAsIG1faGFzQWxwaGEodHJ1ZSkKLSAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCi0g
ICAgLCBtX3RleHR1cmVJZCgwKQotewotfQotCi1DYW52YXNMYXllckNocm9taXVtOjp+Q2FudmFz
TGF5ZXJDaHJvbWl1bSgpCiB7CiB9CiAKQEAgLTU3LDE1ICs1MCw1IEBAIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IENhbnZhc0xheWVyQ2hyb20KICAgICByZXR1cm4gQ0NDYW52YXNMYXllckltcGw6
OmNyZWF0ZShtX2xheWVySWQpOwogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIExheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NDYW52YXNMYXllckltcGwqIGNhbnZhc0xh
eWVyID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7Ci0gICAgY2FudmFz
TGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQoKSk7Ci0gICAgY2FudmFzTGF5ZXItPnNldEhh
c0FscGhhKG1faGFzQWxwaGEpOwotICAgIGNhbnZhc0xheWVyLT5zZXRQcmVtdWx0aXBsaWVkQWxw
aGEobV9wcmVtdWx0aXBsaWVkQWxwaGEpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uaAkocmV2
aXNpb24gMTAyOTEzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCArNDEsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQmFzZSBjbGFzcyBmb3IgV2ViR0wgYW5kIGFjY2Vs
ZXJhdGVkIDJkIGNhbnZhc2VzLgogY2xhc3MgQ2FudmFzTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBM
YXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNocm9taXVt
KCk7Ci0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJ
bXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCop
OwotICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9
Ci0gICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4dHVyZUlk
ID0gdGV4dHVyZUlkOyB9Ci0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNMYXllckNo
cm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwotCi0gICAgYm9vbCBtX2hhc0FscGhhOwotICAgIGJv
b2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEwMjkx
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5
ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgUGFzc1JlZlB0
cjxXZWJHTExheWVyQ2hyb21pdW0+IFdlYkdMTGF5ZQogCiBXZWJHTExheWVyQ2hyb21pdW06Oldl
YkdMTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogQ2FudmFz
TGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKKyAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAgICAsIG1f
cHJlbXVsdGlwbGllZEFscGhhKHRydWUpCisgICAgLCBtX3RleHR1cmVJZCgwKQogICAgICwgbV90
ZXh0dXJlQ2hhbmdlZCh0cnVlKQogICAgICwgbV90ZXh0dXJlVXBkYXRlZChmYWxzZSkKICAgICAs
IG1fZHJhd2luZ0J1ZmZlcigwKQpAQCAtOTUsNiArOTgsMTYgQEAgdm9pZCBXZWJHTExheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0bwogICAgIH0KIH0KIAordm9pZCBXZWJHTExheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIENhbnZhc0xh
eWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOworCisgICAgQ0NDYW52YXNMYXll
ckltcGwqIGNhbnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXll
cik7CisgICAgY2FudmFzTGF5ZXItPnNldFRleHR1cmVJZChtX3RleHR1cmVJZCk7CisgICAgY2Fu
dmFzTGF5ZXItPnNldEhhc0FscGhhKG1faGFzQWxwaGEpOworICAgIGNhbnZhc0xheWVyLT5zZXRQ
cmVtdWx0aXBsaWVkQWxwaGEobV9wcmVtdWx0aXBsaWVkQWxwaGEpOworfQorCiBib29sIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIpCiB7CiAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZWQgfHwgIWxheWVyUmVuZGVy
ZXJDb250ZXh0KCkgfHwgIWRyYXdzQ29udGVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmgJKHJldmlzaW9uIDEwMjkxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw4ICs0OSwxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hyb21pdW0o
KTsKIAorICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlk
OyB9CisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4dHVy
ZUlkID0gdGV4dHVyZUlkOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3ND
b250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9w
ZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQo
KTsKICAgICBib29sIHBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKTsK
IApAQCAtNjQsNiArNjgsOSBAQCBwcml2YXRlOgogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGxh
eWVyUmVuZGVyZXJDb250ZXh0KCk7CiAKKyAgICBib29sIG1faGFzQWxwaGE7CisgICAgYm9vbCBt
X3ByZW11bHRpcGxpZWRBbHBoYTsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29s
IG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgYm9vbCBtX3RleHR1cmVVcGRhdGVkOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVy
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgJKHJldmlzaW9uIDEwMjkxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
OwogCisgICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7
IH0KICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlk
OyB9CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxwaGEgPSBo
YXNBbHBoYTsgfQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlw
bGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiAxMDI5MTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2NlbGVyYXRl
ZENhbnZhcwogICAgIGNhbnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dwdURldmljZShnciwgdGV4dHVy
ZS5nZXQoKSkpLT51bnJlZigpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBo
aWNzQ29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKGNvbnRleHQzRCk7CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyID0gQ2FudmFzMkRMYXll
ckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNELCBzaXplKTsKICAgICBkYXRhLT5tX3BsYXRmb3Jt
TGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFuZGxlKCkpOwog
I2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMDI5MzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTEyLTE1ICBJYWluIE1lcnJpY2sg
IDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0ZWQgY2Fu
dmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdlIHdlcmUg
Zmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMsIHdo
aWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhyZWFkLiBN
b3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3IgY29ycmVj
dCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29weQorICAg
ICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcy4K
KworICAgICAgICBSZW1vdmVkIG1fdGV4dHVyZUlkIGFuZCBwdXNoUHJvcGVydGllc1RvIGZyb20g
Q2FudmFzTGF5ZXJDaHJvbWl1bSwgYXMKKyAgICAgICAgaXQncyBubyBsb25nZXIgY29tbW9uIGJl
dHdlZW4gQ2FudmFzMkRMYXllckNocm9taXVtIGFuZAorICAgICAgICBXZWJHTExheWVyQ2hyb21p
dW0uIFdlYkdMIGNoYW5nZXMgZG8gbm90IGNoYW5nZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6Cisg
ICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtVGVzdDo6c2V0VGV4dHVyZU1hbmFn
ZXIpOgorCiAyMDExLTEyLTE1ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0Nocm9taXVtXSBhZGQgc3VwcG9ydCB0byBpbnNw
ZWN0b3IgdGVzdCBzdWl0ZSB0byBmZXRjaCB0ZXN0IGV4ZWN1dGlvbiByZXN1bHRzIGZyb20gY29u
c29sZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCShyZXZpc2lvbiAxMDI5MTMp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw2ICs1NCw3IEBACiAgICAgICAgICd3ZWJraXRfdW5pdHRlc3RfZmlsZXMnOiBbCiAgICAg
ICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9B
c3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0RhbWFnZVRyYWNr
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEZWxheUJhc2VkVGltZVNvdXJjZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0ZyYW1lUmF0ZUNvbnRyb2xsZXJUZXN0LmNw
cCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJNb2NrV2ViR3JhcGhpY3NDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgImNjL0NDQ2FudmFz
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2luY2x1
ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+Cisj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVz
cGFjZSB0ZXN0aW5nOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbnZhczJETGF5
ZXJDaHJvbWl1bVRlc3QgOiBwdWJsaWMgVGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgLy8gVGhpcyBp
bmRpcmVjdGlvbiBpcyBuZWVkZWQgYmVjYXVzZSBpbmRpdmlkdWFsIHRlc3RzIGFyZW4ndCBmcmll
bmRzIG9mIENhbnZhczJETGF5ZXJDaHJvbWl1bS4KKyAgICB2b2lkIHNldFRleHR1cmVNYW5hZ2Vy
KENhbnZhczJETGF5ZXJDaHJvbWl1bSogbGF5ZXIsIFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyKQor
ICAgIHsKKyAgICAgICAgbGF5ZXItPnNldFRleHR1cmVNYW5hZ2VyKG1hbmFnZXIpOworICAgIH0K
K307CisKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0NhbnZhc0NvbnRleHQgOiBwdWJs
aWMgTW9ja1dlYkdyYXBoaWNzQ29udGV4dDNEIHsKK3B1YmxpYzoKKyAgICBNT0NLX01FVEhPRDAo
Y3JlYXRlRnJhbWVidWZmZXIsIFdlYkdMSWQoKSk7CisgICAgTU9DS19NRVRIT0QwKGNyZWF0ZVRl
eHR1cmUsIFdlYkdMSWQoKSk7CisKKyAgICBNT0NLX01FVEhPRDIoYmluZEZyYW1lYnVmZmVyLCB2
b2lkKFdHQzNEZW51bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9ENShmcmFtZWJ1ZmZlclRl
eHR1cmUyRCwgdm9pZChXR0MzRGVudW0sIFdHQzNEZW51bSwgV0dDM0RlbnVtLCBXZWJHTElkLCBX
R0MzRGludCkpOworCisgICAgTU9DS19NRVRIT0QyKGJpbmRUZXh0dXJlLCB2b2lkKFdHQzNEZW51
bSwgV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EOChjb3B5VGV4SW1hZ2UyRCwgdm9pZChXR0Mz
RGVudW0sIFdHQzNEaW50LCBXR0MzRGVudW0sIFdHQzNEaW50LCBXR0MzRGludCwgV0dDM0RzaXpl
aSwgV0dDM0RzaXplaSwgV0dDM0RpbnQpKTsKKworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVGcmFt
ZWJ1ZmZlciwgdm9pZChXZWJHTElkKSk7CisgICAgTU9DS19NRVRIT0QxKGRlbGV0ZVRleHR1cmUs
IHZvaWQoV2ViR0xJZCkpOworfTsKKworY2xhc3MgTW9ja1RleHR1cmVBbGxvY2F0b3IgOiBwdWJs
aWMgVGV4dHVyZUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgTU9DS19NRVRIT0QyKGNyZWF0ZVRl
eHR1cmUsIHVuc2lnbmVkKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSkpOworICAgIE1PQ0tfTUVU
SE9EMyhkZWxldGVUZXh0dXJlLCB2b2lkKHVuc2lnbmVkLCBjb25zdCBJbnRTaXplJiwgR0MzRGVu
dW0pKTsKK307CisKK1RFU1RfRihDYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LCB0ZXN0RnVsbExp
ZmVjeWNsZSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKKwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbWFpbkNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRy
KG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpGb3JV
c2VPblRoaXNUaHJlYWQpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gaW1wbENvbnRl
eHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21X
ZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBNb2NrQ2FudmFzQ29udGV4dCgpKSwgYXR0cnMsIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdywgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpGb3JVc2VPblRoaXNUaHJlYWQpOworCisgICAgTW9ja0NhbnZhc0NvbnRl
eHQmIG1haW5Nb2NrID0gKnN0YXRpY19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobWFpbkNvbnRleHQu
Z2V0KCkpKTsKKyAgICBNb2NrQ2FudmFzQ29udGV4dCYgaW1wbE1vY2sgPSAqc3RhdGljX2Nhc3Q8
TW9ja0NhbnZhc0NvbnRleHQqPihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJH
cmFwaGljc0NvbnRleHQzRChpbXBsQ29udGV4dC5nZXQoKSkpOworCisgICAgTW9ja1RleHR1cmVB
bGxvY2F0b3IgYWxsb2NhdG9yTW9jazsKKyAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0ZXIoJmFs
bG9jYXRvck1vY2spOworCisgICAgY29uc3QgSW50U2l6ZSBzaXplKDMwMCwgMTUwKTsKKyAgICBj
b25zdCBzaXplX3QgbWF4VGV4dHVyZVNpemUgPSBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgp
ICogNDsKKyAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gVGV4dHVy
ZU1hbmFnZXI6OmNyZWF0ZShtYXhUZXh0dXJlU2l6ZSwgbWF4VGV4dHVyZVNpemUsIG1heFRleHR1
cmVTaXplKTsKKworICAgIGNvbnN0IFdlYkdMSWQgYmFja1RleHR1cmVJZCA9IDE7CisgICAgY29u
c3QgV2ViR0xJZCBmcm9udFRleHR1cmVJZCA9IDI7CisgICAgY29uc3QgV2ViR0xJZCBmYm9JZCA9
IDM7CisgICAgeworICAgICAgICBJblNlcXVlbmNlIHNlcXVlbmNlOworCisgICAgICAgIC8vIFNl
dHVwIENhbnZhczJETGF5ZXJDaHJvbWl1bSAob24gdGhlIG1haW4gdGhyZWFkKS4KKyAgICAgICAg
RVhQRUNUX0NBTEwobWFpbk1vY2ssIGNyZWF0ZUZyYW1lYnVmZmVyKCkpCisgICAgICAgICAgICAu
V2lsbE9uY2UoUmV0dXJuKGZib0lkKSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmUgYW5k
IGRvIHRoZSBjb3B5IChvbiB0aGUgaW1wbCB0aHJlYWQpLgorICAgICAgICBFWFBFQ1RfQ0FMTChh
bGxvY2F0b3JNb2NrLCBjcmVhdGVUZXh0dXJlKHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KSkKKyAgICAgICAgICAgIC5XaWxsT25jZShSZXR1cm4oZnJvbnRUZXh0dXJlSWQpKTsKKyAgICAg
ICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBmcm9udFRleHR1cmVJZCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9j
aywgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZmJvSWQp
KTsKKyAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgYmFja1RleHR1cmVJZCwg
MCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgY29weVRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAwLCAw
LCAzMDAsIDE1MCwgMCkpOworICAgICAgICBFWFBFQ1RfQ0FMTChpbXBsTW9jaywgYmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworCisgICAgICAgIC8v
IFRlYXJkb3duIENhbnZhczJETGF5ZXJDaHJvbWl1bS4KKyAgICAgICAgRVhQRUNUX0NBTEwobWFp
bk1vY2ssIGRlbGV0ZUZyYW1lYnVmZmVyKGZib0lkKSk7CisKKyAgICAgICAgLy8gVGVhcmRvd24g
VGV4dHVyZU1hbmFnZXIuCisgICAgICAgIEVYUEVDVF9DQUxMKGFsbG9jYXRvck1vY2ssIGRlbGV0
ZVRleHR1cmUoZnJvbnRUZXh0dXJlSWQsIHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSk7
CisgICAgfQorCisgICAgUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY2FudmFzID0gQ2Fu
dmFzMkRMYXllckNocm9taXVtOjpjcmVhdGUobWFpbkNvbnRleHQuZ2V0KCksIHNpemUpOworICAg
IHNldFRleHR1cmVNYW5hZ2VyKGNhbnZhcy5nZXQoKSwgdGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwor
ICAgIGNhbnZhcy0+c2V0Qm91bmRzKEludFNpemUoNjAwLCAzMDApKTsKKyAgICBjYW52YXMtPnNl
dFRleHR1cmVJZChiYWNrVGV4dHVyZUlkKTsKKworICAgIGNhbnZhcy0+Y29udGVudENoYW5nZWQo
KTsKKyAgICBFWFBFQ1RfVFJVRShjYW52YXMtPm5lZWRzRGlzcGxheSgpKTsKKyAgICBjYW52YXMt
PnBhaW50Q29udGVudHNJZkRpcnR5KCk7CisgICAgRVhQRUNUX0ZBTFNFKGNhbnZhcy0+bmVlZHNE
aXNwbGF5KCkpOworICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNjb3Bl
ZEltcGxUaHJlYWQ7CisKKyAgICAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllckltcGwgPSBj
YW52YXMtPmNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgc3RhdGlj
X2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllckltcGwuZ2V0KCkpLT50ZXh0dXJlSWQoKSk7
CisKKyAgICAgICAgY2FudmFzLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGltcGxDb250ZXh0
LmdldCgpLCB1cGRhdGVyKTsKKyAgICAgICAgY2FudmFzLT5wdXNoUHJvcGVydGllc1RvKGxheWVy
SW1wbC5nZXQoKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKGZyb250VGV4dHVyZUlkLCBzdGF0aWNf
Y2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVySW1wbC5nZXQoKSktPnRleHR1cmVJZCgpKTsK
KyAgICB9CisgICAgY2FudmFzLmNsZWFyKCk7CisgICAgdGV4dHVyZU1hbmFnZXItPnJlZHVjZU1l
bW9yeVRvTGltaXQoMCk7CisgICAgdGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJl
cygmYWxsb2NhdG9yTW9jayk7Cit9CisKK30gLy8gbmFtZXNwYWNlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRl
c3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119863</attachid>
            <date>2011-12-19 07:58:19 -0800</date>
            <delta_ts>2011-12-19 13:45:59 -0800</delta_ts>
            <desc>Rebased</desc>
            <filename>bug-72738-20111219155817.patch</filename>
            <type>text/plain</type>
            <size>24109</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDExLTEyLTE5ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcy4KKworICAgICAgICBSZW1vdmVkIG1fdGV4dHVyZUlkIGFuZCBwdXNoUHJvcGVydGllc1Rv
IGZyb20gQ2FudmFzTGF5ZXJDaHJvbWl1bSwgYXMKKyAgICAgICAgaXQncyBubyBsb25nZXIgY29t
bW9uIGJldHdlZW4gQ2FudmFzMkRMYXllckNocm9taXVtIGFuZAorICAgICAgICBXZWJHTExheWVy
Q2hyb21pdW0uIFdlYkdMIGNoYW5nZXMgZG8gbm90IGNoYW5nZSBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNvbnRlbnRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50
c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtOjpzZXRM
YXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJDaHJvbWl1bTo6
c2V0VGV4dHVyZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5
ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OldlYkdMTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjpzZXRUZXh0dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVy
SW1wbDo6dGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBY2NlbGVyYXRlZENhbnZh
cyk6CisKIDIwMTEtMTItMTkgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgdGhlIEVkaXRvcjo6c2V0SWdub3JlQ29tcG9zaXRp
b25TZWxlY3Rpb25DaGFuZ2UgcHVibGljIGFzIGl0IGlzIG5lZWRlZCBieSBRdApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMDMyMzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMiBAQAogCiAjaW5jbHVkZSAi
Q2FudmFzMkRMYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1w
bC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDVGV4
dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Lmgi
CisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiIC8vIEZvciB0aGUgR0xDKCkgbWFj
cm8KIAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkdyQ29udGV4dC5oIgpAQCAtNDQsNTIgKzQ3
LDExOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8Q2FudmFzMkRMYXll
ckNocm9taXVtPiBDYW52YXMyRExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKK1Bhc3NSZWZQdHI8Q2FudmFzMkRMYXllckNocm9taXVtPiBDYW52YXMyRExh
eWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhczJETGF5ZXJDaHJv
bWl1bShjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXMyRExheWVyQ2hy
b21pdW0oY29udGV4dCwgc2l6ZSkpOwogfQogCi1DYW52YXMyRExheWVyQ2hyb21pdW06OkNhbnZh
czJETGF5ZXJDaHJvbWl1bShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK0NhbnZhczJETGF5
ZXJDaHJvbWl1bTo6Q2FudmFzMkRMYXllckNocm9taXVtKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgIDogQ2FudmFzTGF5ZXJDaHJvbWl1bSgwKQog
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fYmFj
a1RleHR1cmVJZCgwKQorICAgICwgbV9mYm8oMCkKIHsKKyAgICBHTEMobV9jb250ZXh0LCBtX2Zi
byA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6fkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpCiB7CisgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZibykpOworfQorCit2b2lkIENhbnZhczJE
TGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCkKK3sKKyAgICBt
X2JhY2tUZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CisgICAgc2V0TmVlZHNDb21taXQoKTsKK30KKwor
dm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OmNvbnRlbnRDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bGF5ZXJUcmVlSG9zdCgpKQorICAgICAgICBsYXllclRyZWVIb3N0KCktPnN0YXJ0UmF0ZUxpbWl0
ZXIobV9jb250ZXh0KTsKKworICAgIHNldE5lZWRzRGlzcGxheSgpOwogfQogCiBib29sIENhbnZh
czJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90
ZXh0dXJlSWQgJiYgKG1fY29udGV4dAotICAgICAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKSk7CisgICAgcmV0dXJuIG1fYmFja1RleHR1cmVJZCAmJiAhbV9zaXplLmlz
RW1wdHkoKQorICAgICAgICAmJiBtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKTsKIH0KIAotdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJikKK3ZvaWQg
Q2FudmFzMkRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiB7Ci0gICAgaWYg
KCFtX25lZWRzRGlzcGxheSB8fCAhZHJhd3NDb250ZW50KCkpCisgICAgaWYgKCFkcmF3c0NvbnRl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udFRleHR1cmUtPnJlc2VydmUobV9z
aXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7CisKKyAgICBpZiAoIW5lZWRzRGlzcGxheSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb250ZXh0KSB7CisgICAgbV9uZWVkc0Rp
c3BsYXkgPSBmYWxzZTsKKworICAgIGJvb2wgc3VjY2VzcyA9IG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKwogI2lm
IFVTRShTS0lBKQotICAgICAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JD
b250ZXh0KCk7Ci0gICAgICAgIGlmIChnckNvbnRleHQpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgICAgICBnckNvbnRleHQtPmZsdXNoKCk7
Ci0gICAgICAgIH0KKyAgICBHckNvbnRleHQqIGdyQ29udGV4dCA9IG1fY29udGV4dC0+Z3JDb250
ZXh0KCk7CisgICAgaWYgKGdyQ29udGV4dCkKKyAgICAgICAgZ3JDb250ZXh0LT5mbHVzaCgpOwog
I2VuZGlmCi0gICAgICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLSAgICB9CiAKLSAgICBtX3VwZGF0
ZVJlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgbV9uZWVkc0Rp
c3BsYXkgPSBmYWxzZTsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CiB9CiAKLXZvaWQgQ2FudmFz
MkRMYXllckNocm9taXVtOjpjb250ZW50Q2hhbmdlZCgpCit2b2lkIENhbnZhczJETGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgaWYg
KGxheWVyVHJlZUhvc3QoKSkKLSAgICAgICAgbGF5ZXJUcmVlSG9zdCgpLT5zdGFydFJhdGVMaW1p
dGVyKG1fY29udGV4dCk7CisgICAgaWYgKGxheWVyVHJlZUhvc3QoKSAhPSBob3N0KQorICAgICAg
ICBzZXRUZXh0dXJlTWFuYWdlcihob3N0ID8gaG9zdC0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigp
IDogMCk7CisKKyAgICBDYW52YXNMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KGhvc3Qp
OwogfQogCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZU1hbmFnZXIoVGV4
dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKQoreworICAgIGlmICh0ZXh0dXJlTWFuYWdlcikK
KyAgICAgICAgbV9mcm9udFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKHRleHR1cmVN
YW5hZ2VyKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnJvbnRUZXh0dXJlLmNsZWFyKCk7CiB9CisK
K3ZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQorewor
ICAgIGlmICghbV9iYWNrVGV4dHVyZUlkIHx8ICFtX2Zyb250VGV4dHVyZS0+aXNWYWxpZChtX3Np
emUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9m
cm9udFRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIHVwZGF0ZXIuYWxsb2NhdG9yKCkpOwor
CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgbV9iYWNrVGV4dHVyZUlkLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmNv
cHlUZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCkp
OworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmZsdXNo
KCkpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyhsYXllcik7CisKKyAgICBDQ0NhbnZhc0xheWVySW1wbCogY2FudmFzTGF5ZXIgPSBz
dGF0aWNfY2FzdDxDQ0NhbnZhc0xheWVySW1wbCo+KGxheWVyKTsKKyAgICBjYW52YXNMYXllci0+
c2V0VGV4dHVyZUlkKG1fZnJvbnRUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzMkRMYXllckNocm9taXVtOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQoreworICAgIG1f
ZnJvbnRUZXh0dXJlLT51bnJlc2VydmUoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQ2hyb21p
dW06OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAgIG1fZnJvbnRUZXh0dXJlLmNsZWFyKCk7Cit9
CisKK30KKwogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAxMDMyMzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDE2
ICs0NCwzNCBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIC8vIEEgbGF5ZXIgY29udGFpbmlu
ZyBhbiBhY2NlbGVyYXRlZCAyZCBjYW52YXMKIGNsYXNzIENhbnZhczJETGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgfkNhbnZhczJETGF5
ZXJDaHJvbWl1bSgpOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCosIENDVGV4dHVyZVVwZGF0ZXImKTsKKworICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVk
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdlZCgpOwogCisgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyVHJlZUhvc3QoQ0NMYXllclRy
ZWVIb3N0Kik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CisgICAgdmlydHVhbCB2b2lkIHB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZl
Q29udGVudHNUZXh0dXJlKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsK
KwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3ND
b250ZXh0M0QqKTsKKyAgICBDYW52YXMyRExheWVyQ2hyb21pdW0oR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBJbnRTaXplJik7CisKKyAgICAvLyBWaXNpYmxlIGZvciB0ZXN0aW5nIHNvIHdlIGNh
biBieXBhc3Mgc2V0TGF5ZXJUcmVlSG9zdC4KKyAgICBmcmllbmQgY2xhc3MgQ2FudmFzMkRMYXll
ckNocm9taXVtVGVzdDsKKyAgICB2b2lkIHNldFRleHR1cmVNYW5hZ2VyKFRleHR1cmVNYW5hZ2Vy
Kik7CisKICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIEludFNpemUgbV9z
aXplOworICAgIHVuc2lnbmVkIG1fYmFja1RleHR1cmVJZDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZmJvOworICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9mcm9udFRleHR1cmU7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXNMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMTAz
MjM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
TGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0Miw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Q2FudmFzTGF5ZXJDaHJvbWl1
bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0
ZSkKLSAgICAsIG1faGFzQWxwaGEodHJ1ZSkKLSAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRy
dWUpCi0gICAgLCBtX3RleHR1cmVJZCgwKQotewotfQotCi1DYW52YXNMYXllckNocm9taXVtOjp+
Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiB7CiB9CiAKQEAgLTU3LDE1ICs1MCw1IEBAIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IENhbnZhc0xheWVyQ2hyb20KICAgICByZXR1cm4gQ0NDYW52YXNMYXll
ckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogfQogCi12b2lkIENhbnZhc0xheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQotewotICAgIExheWVyQ2hyb21p
dW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwotCi0gICAgQ0NDYW52YXNMYXllckltcGwqIGNh
bnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllcik7Ci0gICAg
Y2FudmFzTGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlSWQoKSk7Ci0gICAgY2FudmFzTGF5ZXIt
PnNldEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAgIGNhbnZhc0xheWVyLT5zZXRQcmVtdWx0aXBs
aWVkQWxwaGEobV9wcmVtdWx0aXBsaWVkQWxwaGEpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0u
aAkocmV2aXNpb24gMTAzMjM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMCAr
NDEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gQmFzZSBjbGFzcyBmb3IgV2ViR0wgYW5k
IGFjY2VsZXJhdGVkIDJkIGNhbnZhc2VzLgogY2xhc3MgQ2FudmFzTGF5ZXJDaHJvbWl1bSA6IHB1
YmxpYyBMYXllckNocm9taXVtIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DYW52YXNMYXllckNo
cm9taXVtKCk7Ci0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUND
TGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVy
SW1wbCopOwotICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZUlkOyB9Ci0gICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1fdGV4
dHVyZUlkID0gdGV4dHVyZUlkOyB9Ci0KIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNM
YXllckNocm9taXVtKENDTGF5ZXJEZWxlZ2F0ZSopOwotCi0gICAgYm9vbCBtX2hhc0FscGhhOwot
ICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7Ci0gICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDEwMzIzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAgUGFz
c1JlZlB0cjxXZWJHTExheWVyQ2hyb21pdW0+IFdlYkdMTGF5ZQogCiBXZWJHTExheWVyQ2hyb21p
dW06OldlYkdMTGF5ZXJDaHJvbWl1bShDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQogICAgIDog
Q2FudmFzTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKKyAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAg
ICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCisgICAgLCBtX3RleHR1cmVJZCgwKQogICAg
ICwgbV90ZXh0dXJlQ2hhbmdlZCh0cnVlKQogICAgICwgbV90ZXh0dXJlVXBkYXRlZChmYWxzZSkK
ICAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQpAQCAtOTUsNiArOTgsMTYgQEAgdm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0bwogICAgIH0KIH0KIAordm9pZCBXZWJHTExheWVy
Q2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIENh
bnZhc0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOworCisgICAgQ0NDYW52
YXNMYXllckltcGwqIGNhbnZhc0xheWVyID0gc3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwq
PihsYXllcik7CisgICAgY2FudmFzTGF5ZXItPnNldFRleHR1cmVJZChtX3RleHR1cmVJZCk7Cisg
ICAgY2FudmFzTGF5ZXItPnNldEhhc0FscGhhKG1faGFzQWxwaGEpOworICAgIGNhbnZhc0xheWVy
LT5zZXRQcmVtdWx0aXBsaWVkQWxwaGEobV9wcmVtdWx0aXBsaWVkQWxwaGEpOworfQorCiBib29s
IFdlYkdMTGF5ZXJDaHJvbWl1bTo6cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIpCiB7CiAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZWQgfHwgIWxheWVy
UmVuZGVyZXJDb250ZXh0KCkgfHwgIWRyYXdzQ29udGVudCgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xM
YXllckNocm9taXVtLmgJKHJldmlzaW9uIDEwMzIzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw4ICs0OSwxMiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hy
b21pdW0oKTsKIAorICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dHVyZUlkOyB9CisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKSB7IG1f
dGV4dHVyZUlkID0gdGV4dHVyZUlkOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CisgICAgdmlydHVhbCB2b2lkIHB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENo
YW5nZWQoKTsKICAgICBib29sIHBhaW50UmVuZGVyZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZm
ZXIqKTsKIApAQCAtNjQsNiArNjgsOSBAQCBwcml2YXRlOgogCiAgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CiAKKyAgICBib29sIG1faGFzQWxwaGE7CisgICAg
Ym9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAg
ICBib29sIG1fdGV4dHVyZUNoYW5nZWQ7CiAgICAgYm9vbCBtX3RleHR1cmVVcGRhdGVkOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZh
c0xheWVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgJKHJldmlzaW9uIDEwMzIzNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OwogCisgICAgdW5zaWduZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
dXJlSWQ7IH0KICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJ
ZCA9IGlkOyB9CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1faGFzQWxw
aGEgPSBoYXNBbHBoYTsgfQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJl
bXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFs
cGhhOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiAxMDMyMzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVBY2Nl
bGVyYXRlZENhbnZhcwogICAgIGNhbnZhcy0+c2V0RGV2aWNlKG5ldyBTa0dwdURldmljZShnciwg
dGV4dHVyZS5nZXQoKSkpLT51bnJlZigpOwogICAgIGRhdGEtPm1fcGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIGRhdGEtPm1fcGxhdGZvcm1MYXllciA9IENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKGNvbnRleHQzRCk7CisgICAgZGF0YS0+bV9wbGF0Zm9ybUxheWVyID0gQ2FudmFz
MkRMYXllckNocm9taXVtOjpjcmVhdGUoY29udGV4dDNELCBzaXplKTsKICAgICBkYXRhLT5tX3Bs
YXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZCh0ZXh0dXJlLmdldCgpLT5nZXRUZXh0dXJlSGFuZGxl
KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIGNhbnZhczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMDMyMzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTEyLTE5ICBJYWluIE1l
cnJpY2sgIDxodXNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWNjZWxlcmF0
ZWQgY2FudmFzIGJyb2tlbiBpbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjczOAorCisgICAgICAgIFdl
IHdlcmUgZmx1c2hpbmcgdGhlIFNraWEgY2FudmFzIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMsIHdoaWNoCisgICAgICAgIGlzIGlsbGVnYWwgYXMgaXQgcnVucyBvbiB0aGUgd3JvbmcgdGhy
ZWFkLiBNb3ZlZCB0byBwYWludENvbnRlbnRzSWZEaXJ0eQorICAgICAgICBpbnN0ZWFkLiBGb3Ig
Y29ycmVjdCByZW5kZXJpbmcgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkLCB3ZSBtYWtlIGEgY29w
eQorICAgICAgICBvZiB0aGUgY2FudmFzIHRleHR1cmUgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcy4KKworICAgICAgICBSZW1vdmVkIG1fdGV4dHVyZUlkIGFuZCBwdXNoUHJvcGVydGllc1Rv
IGZyb20gQ2FudmFzTGF5ZXJDaHJvbWl1bSwgYXMKKyAgICAgICAgaXQncyBubyBsb25nZXIgY29t
bW9uIGJldHdlZW4gQ2FudmFzMkRMYXllckNocm9taXVtIGFuZAorICAgICAgICBXZWJHTExheWVy
Q2hyb21pdW0uIFdlYkdMIGNoYW5nZXMgZG8gbm90IGNoYW5nZSBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllckNocm9taXVtVGVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNocm9taXVtVGVzdDo6c2V0VGV4dHVy
ZU1hbmFnZXIpOgorCiAyMDExLTEyLTE4ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEltcGxlbWVudCA8aW5wdXQgdHlwZT1jb2xvcj4gVUkgV2ViS2l0IGNo
cm9taXVtIHBhcnQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkocmV2aXNpb24g
MTAzMjM2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsNyBAQAogICAgICAgICAnd2Via2l0X3VuaXR0ZXN0X2ZpbGVzJzog
WwogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAn
dGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9D
YW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NEYW1h
Z2VUcmFja2VyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDRGVsYXlCYXNlZFRpbWVT
b3VyY2VUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NGcmFtZVJhdGVDb250cm9sbGVy
VGVzdC5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExh
eWVyQ2hyb21pdW1UZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NhbnZhczJETGF5ZXJDaHJvbWl1bVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hyb21pdW1UZXN0LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisjaW5jbHVkZSAiTW9ja1dlYkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJjYy9D
Q0NhbnZhc0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIK
KyNpbmNsdWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9j
ay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2lu
ZyBuYW1lc3BhY2UgdGVzdGluZzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52
YXMyRExheWVyQ2hyb21pdW1UZXN0IDogcHVibGljIFRlc3QgeworcHJvdGVjdGVkOgorICAgIC8v
IFRoaXMgaW5kaXJlY3Rpb24gaXMgbmVlZGVkIGJlY2F1c2UgaW5kaXZpZHVhbCB0ZXN0cyBhcmVu
J3QgZnJpZW5kcyBvZiBDYW52YXMyRExheWVyQ2hyb21pdW0uCisgICAgdm9pZCBzZXRUZXh0dXJl
TWFuYWdlcihDYW52YXMyRExheWVyQ2hyb21pdW0qIGxheWVyLCBUZXh0dXJlTWFuYWdlciogbWFu
YWdlcikKKyAgICB7CisgICAgICAgIGxheWVyLT5zZXRUZXh0dXJlTWFuYWdlcihtYW5hZ2VyKTsK
KyAgICB9Cit9OworCit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIE1vY2tDYW52YXNDb250ZXh0
IDogcHVibGljIE1vY2tXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgTU9DS19N
RVRIT0QwKGNyZWF0ZUZyYW1lYnVmZmVyLCBXZWJHTElkKCkpOworICAgIE1PQ0tfTUVUSE9EMChj
cmVhdGVUZXh0dXJlLCBXZWJHTElkKCkpOworCisgICAgTU9DS19NRVRIT0QyKGJpbmRGcmFtZWJ1
ZmZlciwgdm9pZChXR0MzRGVudW0sIFdlYkdMSWQpKTsKKyAgICBNT0NLX01FVEhPRDUoZnJhbWVi
dWZmZXJUZXh0dXJlMkQsIHZvaWQoV0dDM0RlbnVtLCBXR0MzRGVudW0sIFdHQzNEZW51bSwgV2Vi
R0xJZCwgV0dDM0RpbnQpKTsKKworICAgIE1PQ0tfTUVUSE9EMihiaW5kVGV4dHVyZSwgdm9pZChX
R0MzRGVudW0sIFdlYkdMSWQpKTsKKyAgICBNT0NLX01FVEhPRDgoY29weVRleEltYWdlMkQsIHZv
aWQoV0dDM0RlbnVtLCBXR0MzRGludCwgV0dDM0RlbnVtLCBXR0MzRGludCwgV0dDM0RpbnQsIFdH
QzNEc2l6ZWksIFdHQzNEc2l6ZWksIFdHQzNEaW50KSk7CisKKyAgICBNT0NLX01FVEhPRDEoZGVs
ZXRlRnJhbWVidWZmZXIsIHZvaWQoV2ViR0xJZCkpOworICAgIE1PQ0tfTUVUSE9EMShkZWxldGVU
ZXh0dXJlLCB2b2lkKFdlYkdMSWQpKTsKK307CisKK2NsYXNzIE1vY2tUZXh0dXJlQWxsb2NhdG9y
IDogcHVibGljIFRleHR1cmVBbGxvY2F0b3IgeworcHVibGljOgorICAgIE1PQ0tfTUVUSE9EMihj
cmVhdGVUZXh0dXJlLCB1bnNpZ25lZChjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pKTsKKyAgICBN
T0NLX01FVEhPRDMoZGVsZXRlVGV4dHVyZSwgdm9pZCh1bnNpZ25lZCwgY29uc3QgSW50U2l6ZSYs
IEdDM0RlbnVtKSk7Cit9OworCitURVNUX0YoQ2FudmFzMkRMYXllckNocm9taXVtVGVzdCwgdGVz
dEZ1bGxMaWZlY3ljbGUpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0
cnM7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1haW5Db250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChh
ZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIGF0dHJzLCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Rm9yVXNlT25UaGlzVGhyZWFkKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGlt
cGxDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgTW9ja0NhbnZhc0NvbnRleHQoKSksIGF0dHJz
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3csIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Rm9yVXNlT25UaGlzVGhyZWFkKTsKKworICAgIE1vY2tDYW52
YXNDb250ZXh0JiBtYWluTW9jayA9ICpzdGF0aWNfY2FzdDxNb2NrQ2FudmFzQ29udGV4dCo+KEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1haW5D
b250ZXh0LmdldCgpKSk7CisgICAgTW9ja0NhbnZhc0NvbnRleHQmIGltcGxNb2NrID0gKnN0YXRp
Y19jYXN0PE1vY2tDYW52YXNDb250ZXh0Kj4oR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRy
YWN0V2ViR3JhcGhpY3NDb250ZXh0M0QoaW1wbENvbnRleHQuZ2V0KCkpKTsKKworICAgIE1vY2tU
ZXh0dXJlQWxsb2NhdG9yIGFsbG9jYXRvck1vY2s7CisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRh
dGVyKCZhbGxvY2F0b3JNb2NrKTsKKworICAgIGNvbnN0IEludFNpemUgc2l6ZSgzMDAsIDE1MCk7
CisgICAgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVTaXplID0gc2l6ZS53aWR0aCgpICogc2l6ZS5o
ZWlnaHQoKSAqIDQ7CisgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUobWF4VGV4dHVyZVNpemUsIG1heFRleHR1cmVTaXplLCBt
YXhUZXh0dXJlU2l6ZSk7CisKKyAgICBjb25zdCBXZWJHTElkIGJhY2tUZXh0dXJlSWQgPSAxOwor
ICAgIGNvbnN0IFdlYkdMSWQgZnJvbnRUZXh0dXJlSWQgPSAyOworICAgIGNvbnN0IFdlYkdMSWQg
ZmJvSWQgPSAzOworICAgIHsKKyAgICAgICAgSW5TZXF1ZW5jZSBzZXF1ZW5jZTsKKworICAgICAg
ICAvLyBTZXR1cCBDYW52YXMyRExheWVyQ2hyb21pdW0gKG9uIHRoZSBtYWluIHRocmVhZCkuCisg
ICAgICAgIEVYUEVDVF9DQUxMKG1haW5Nb2NrLCBjcmVhdGVGcmFtZWJ1ZmZlcigpKQorICAgICAg
ICAgICAgLldpbGxPbmNlKFJldHVybihmYm9JZCkpOworCisgICAgICAgIC8vIENyZWF0ZSB0ZXh0
dXJlIGFuZCBkbyB0aGUgY29weSAob24gdGhlIGltcGwgdGhyZWFkKS4KKyAgICAgICAgRVhQRUNU
X0NBTEwoYWxsb2NhdG9yTW9jaywgY3JlYXRlVGV4dHVyZShzaXplLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSkpCisgICAgICAgICAgICAuV2lsbE9uY2UoUmV0dXJuKGZyb250VGV4dHVyZUlkKSk7
CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgZnJvbnRUZXh0dXJlSWQpKTsKKyAgICAgICAgRVhQRUNUX0NBTEwo
aW1wbE1vY2ssIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IGZib0lkKSk7CisgICAgICAgIEVYUEVDVF9DQUxMKGltcGxNb2NrLCBmcmFtZWJ1ZmZlclRleHR1
cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGJhY2tUZXh0
dXJlSWQsIDApKTsKKyAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGNvcHlUZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMCwgMCwgMzAwLCAxNTAsIDApKTsKKyAgICAgICAgRVhQRUNUX0NBTEwoaW1wbE1vY2ssIGJp
bmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKKworICAg
ICAgICAvLyBUZWFyZG93biBDYW52YXMyRExheWVyQ2hyb21pdW0uCisgICAgICAgIEVYUEVDVF9D
QUxMKG1haW5Nb2NrLCBkZWxldGVGcmFtZWJ1ZmZlcihmYm9JZCkpOworCisgICAgICAgIC8vIFRl
YXJkb3duIFRleHR1cmVNYW5hZ2VyLgorICAgICAgICBFWFBFQ1RfQ0FMTChhbGxvY2F0b3JNb2Nr
LCBkZWxldGVUZXh0dXJlKGZyb250VGV4dHVyZUlkLCBzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSkpOworICAgIH0KKworICAgIFJlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNhbnZh
cyA9IENhbnZhczJETGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKG1haW5Db250ZXh0LmdldCgpLCBzaXpl
KTsKKyAgICBzZXRUZXh0dXJlTWFuYWdlcihjYW52YXMuZ2V0KCksIHRleHR1cmVNYW5hZ2VyLmdl
dCgpKTsKKyAgICBjYW52YXMtPnNldEJvdW5kcyhJbnRTaXplKDYwMCwgMzAwKSk7CisgICAgY2Fu
dmFzLT5zZXRUZXh0dXJlSWQoYmFja1RleHR1cmVJZCk7CisKKyAgICBjYW52YXMtPmNvbnRlbnRD
aGFuZ2VkKCk7CisgICAgRVhQRUNUX1RSVUUoY2FudmFzLT5uZWVkc0Rpc3BsYXkoKSk7CisgICAg
Y2FudmFzLT5wYWludENvbnRlbnRzSWZEaXJ0eSgpOworICAgIEVYUEVDVF9GQUxTRShjYW52YXMt
Pm5lZWRzRGlzcGxheSgpKTsKKyAgICB7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBzY29wZWRJbXBsVGhyZWFkOworCisgICAgICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXJJ
bXBsID0gY2FudmFzLT5jcmVhdGVDQ0xheWVySW1wbCgpOworICAgICAgICBFWFBFQ1RfRVEoMHUs
IHN0YXRpY19jYXN0PENDQ2FudmFzTGF5ZXJJbXBsKj4obGF5ZXJJbXBsLmdldCgpKS0+dGV4dHVy
ZUlkKCkpOworCisgICAgICAgIGNhbnZhcy0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhpbXBs
Q29udGV4dC5nZXQoKSwgdXBkYXRlcik7CisgICAgICAgIGNhbnZhcy0+cHVzaFByb3BlcnRpZXNU
byhsYXllckltcGwuZ2V0KCkpOworCisgICAgICAgIEVYUEVDVF9FUShmcm9udFRleHR1cmVJZCwg
c3RhdGljX2Nhc3Q8Q0NDYW52YXNMYXllckltcGwqPihsYXllckltcGwuZ2V0KCkpLT50ZXh0dXJl
SWQoKSk7CisgICAgfQorICAgIGNhbnZhcy5jbGVhcigpOworICAgIHRleHR1cmVNYW5hZ2VyLT5y
ZWR1Y2VNZW1vcnlUb0xpbWl0KDApOworICAgIHRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVk
VGV4dHVyZXMoJmFsbG9jYXRvck1vY2spOworfQorCit9IC8vIG5hbWVzcGFjZQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyQ2hy
b21pdW1UZXN0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>