<?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>76715</bug_id>
          
          <creation_ts>2012-01-20 10:40:26 -0800</creation_ts>
          <short_desc>Refactor plugin drawing to be more data driven</short_desc>
          <delta_ts>2012-02-02 17:35:54 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Tim Dresser">tdresser</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>reveman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>539613</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-20 10:40:26 -0800</bug_when>
    <thetext>From bug 73059:

CCLayerImpl-derived classes all currently handle drawing themselves internally, making direct GL calls.  This is problematic for several reasons.  Testing these layers is tricky because testing must be done at a mock GL interface level rather than at a higher abstract level.  It makes culling closely dependent on how each layer draws.  It also makes some optimizations like layer squashing impossible.

To fix this, CCLayerImpl-derived classes should produce a set of quads to render with some basic information in them about how they are to be drawn.  This list can then be processed and drawn in a more data-driven and abstract manner.


CCPluginLayerImpl still handles drawing internally and should be transitioned to the data-driven approach.
This builds on the initial refactor from bug 76274 and is closely related to bug 76635, which refactors CCCanvasLayerImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539620</commentid>
    <comment_count>1</comment_count>
      <attachid>123343</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-20 10:53:46 -0800</bug_when>
    <thetext>Created attachment 123343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539677</commentid>
    <comment_count>2</comment_count>
      <attachid>123343</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-20 12:07:06 -0800</bug_when>
    <thetext>Comment on attachment 123343
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:682
&gt; +struct PluginProgramBinding {

Whoa, I never knew this code existed.  Can you combine all four of these shader permutations? (If you want to make it a separate patch for clarity, feel welcome to.) It looks like PosTexStretch is PosTexTransform but with an identical translation and stretch for x and y.  And, &quot;flip&quot; could be considered just a change in tex transform, so there&apos;s no need for a separate shader for it or any of this boilerplate uniform-related template code.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:723
&gt; +        ASSERT(extensions-&gt;supports(&quot;GL_CHROMIUQUAD-&gt;iosurface&quot;));

Search/replace typo?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCPluginDrawQuad.h:63
&gt; +    CCPluginLayerImpl* m_layer;

From a design perspective, I don&apos;t think quads should have backpointers back to their originating layers if it can be helped.  Architecturally, I&apos;d be fine with the assumption that we call appendQuads prior to any draw call.  That would let you push all the io surface handling back into plugin layer, and simply give the quad a texture id.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539756</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-20 13:29:28 -0800</bug_when>
    <thetext>&gt; From a design perspective, I don&apos;t think quads should have backpointers back to their originating layers if it can be helped.  Architecturally, I&apos;d be fine with the assumption that we call appendQuads prior to any draw call.  That would let you push all the io surface handling back into plugin layer, and simply give the quad a texture id.

It definitely would be a lot nicer if that backpointer wasn&apos;t there.

In appendQuads, I have no access to a GraphicsContext3D, so if the layer&apos;s ioSurface doesn&apos;t have a texture, I can&apos;t create one.

The ioSurface&apos;s textureId needs to be shared between all the quads. I don&apos;t see how I can share it without the backpointer, in the case where no texture exists when appendQuads is called.

I can move the ioSurfaceChanged logic into appendQuads, which is an improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539768</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-20 13:51:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; From a design perspective, I don&apos;t think quads should have backpointers back to their originating layers if it can be helped.  Architecturally, I&apos;d be fine with the assumption that we call appendQuads prior to any draw call.  That would let you push all the io surface handling back into plugin layer, and simply give the quad a texture id.
&gt; 
&gt; It definitely would be a lot nicer if that backpointer wasn&apos;t there.
&gt; 
&gt; In appendQuads, I have no access to a GraphicsContext3D, so if the layer&apos;s ioSurface doesn&apos;t have a texture, I can&apos;t create one.

You could create one during PluginLayerChromium::updateCompositorResources, store it on the PluginLayerChromium, and sync it over to the CCPluginLayerChromium.  That&apos;s the path where all the other texture ids gets allocated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540666</commentid>
    <comment_count>5</comment_count>
      <attachid>123578</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-23 11:07:00 -0800</bug_when>
    <thetext>Created attachment 123578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540951</commentid>
    <comment_count>6</comment_count>
      <attachid>123578</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-23 16:29:40 -0800</bug_when>
    <thetext>Comment on attachment 123578
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:66
&gt; +        if (!m_ioSurfaceTextureId)
&gt; +            m_ioSurfaceTextureId = rendererContext-&gt;createTexture();

If you&apos;re going to store the texture ID on the main thread, please use a ManagedTexture like other layer types.  Otherwise, we can&apos;t track this GPU memory or make sure we&apos;re not using a bogus texture id when the context is lost.  Additionally, you&apos;ll need to reserve it each frame and set m_ioSurfaceChanged if it stops being valid because the texture manager has evicted it.  VideoLayerChromium is a good model to use here.

&gt; Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:78
&gt; +        extensions-&gt;texImageIOSurface2DCHROMIUM(Extensions3D::TEXTURE_RECTANGLE_ARB,
&gt; +                                                m_ioSurfaceWidth,
&gt; +                                                m_ioSurfaceHeight,
&gt; +                                                m_ioSurfaceId,
&gt; +                                                0);

I&apos;m a little dubious about this texImage, since the texture id could be in use on the impl thread.  reveman: If this texture id comes from a managed texture, is that sufficient to work with atomic updates? Does this also need to get wrapped in a texture updater?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541690</commentid>
    <comment_count>7</comment_count>
      <attachid>123808</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-24 14:20:46 -0800</bug_when>
    <thetext>Created attachment 123808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542538</commentid>
    <comment_count>8</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-25 12:43:13 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 123578 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123578&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:66
&gt; &gt; +        if (!m_ioSurfaceTextureId)
&gt; &gt; +            m_ioSurfaceTextureId = rendererContext-&gt;createTexture();
&gt; 
&gt; If you&apos;re going to store the texture ID on the main thread, please use a ManagedTexture like other layer types.  Otherwise, we can&apos;t track this GPU memory or make sure we&apos;re not using a bogus texture id when the context is lost.  Additionally, you&apos;ll need to reserve it each frame and set m_ioSurfaceChanged if it stops being valid because the texture manager has evicted it.  VideoLayerChromium is a good model to use here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:78
&gt; &gt; +        extensions-&gt;texImageIOSurface2DCHROMIUM(Extensions3D::TEXTURE_RECTANGLE_ARB,
&gt; &gt; +                                                m_ioSurfaceWidth,
&gt; &gt; +                                                m_ioSurfaceHeight,
&gt; &gt; +                                                m_ioSurfaceId,
&gt; &gt; +                                                0);
&gt; 
&gt; I&apos;m a little dubious about this texImage, since the texture id could be in use on the impl thread.  reveman: If this texture id comes from a managed texture, is that sufficient to work with atomic updates? Does this also need to get wrapped in a texture updater?

It&apos;s not sufficient for guaranteeing that these plugin layer updates are atomic. You&apos;ll need to use the &quot;deleteTextureAfterCommit(texture-&gt;steal())&quot; before reserving the texture for that. Btw, I&apos;m failing to see where in this patch the texture is reserved.

It doesn&apos;t need to get wrapped in the texture updater right now. The patches I have in flight requires that but you don&apos;t need to worry about the yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543093</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-26 06:00:06 -0800</bug_when>
    <thetext>On further testing, I found a reproducible crash on OSX.
It occurs using my most recent patch, both with and without reveman&apos;s suggestion.

I&apos;ll fix it, and submit a new patch with the bug fixed and reveman&apos;s suggestion incorporated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543406</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-26 12:54:53 -0800</bug_when>
    <thetext>Would it be preferable to create the layer&apos;s ioSurfaceTexture in the CCLayerImpl::willDraw function discussed in bug 76720? 

With that approach, all the texture management would be in the impl thread, which seems like it might be better. Would it be cleaner to use a ManagedTexture in that case, or not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543443</commentid>
    <comment_count>11</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-26 13:43:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Would it be preferable to create the layer&apos;s ioSurfaceTexture in the CCLayerImpl::willDraw function discussed in bug 76720? 
&gt; 
&gt; With that approach, all the texture management would be in the impl thread, which seems like it might be better. Would it be cleaner to use a ManagedTexture in that case, or not?

I think that works well right now. The only problem I&apos;m aware of is that in a future unified/out-of-process compositor we can&apos;t pass pointers around so textures and serialized properties set in pushPropertiesTo are likely the only way you can transfer data from a layer in the renderer to a layer in the compositor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544064</commentid>
    <comment_count>12</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-27 07:31:10 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; It&apos;s not sufficient for guaranteeing that these plugin layer updates are atomic. You&apos;ll need to use the &quot;deleteTextureAfterCommit(texture-&gt;steal())&quot; before reserving the texture for that. Btw, I&apos;m failing to see where in this patch the texture is reserved.

It looks like deleteTextureAfterCommit doesn&apos;t do anything at the moment.
It appends the texture to the CCLayerTreeHost&apos;s m_deleteTextureAfterCommitList, but that list is never used...

Will this approach be adequate to ensure that the texImageIOSurface2DCHROMIUM call is safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544065</commentid>
    <comment_count>13</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-27 07:34:05 -0800</bug_when>
    <thetext>The list is used to hold a reference to a texture during a commit, so that the texture doesn&apos;t disappear on draw/impl side and it can continue to draw with it, until the commit is finished and it isn&apos;t needed anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544130</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-27 09:46:22 -0800</bug_when>
    <thetext>When reserving the ioSurfaceTexture, I believe that I should be passing Extensions3D::TEXTURE_RECTANGLE_ARB as the format. With this format, the call to ManagedTexture::reserve reaches GraphicsContext3D::computeFormatAndTypeParameters and then chokes, because TEXTURE_RECTANGLE_ARB isn&apos;t expected.

I&apos;ve tried just adding TEXTURE_RECTANGLE_ARB to the switch statement in computeFormatAndTypeParameters, but I end up with a GL_INVALID_ENUM error that I&apos;m not sure how to handle.

Should I be trying to reserve the texture formatted TEXTURE_RECTANGLE_ARB, or am I approaching this incorrectly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544146</commentid>
    <comment_count>15</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-27 10:01:58 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; When reserving the ioSurfaceTexture, I believe that I should be passing Extensions3D::TEXTURE_RECTANGLE_ARB as the format. With this format, the call to ManagedTexture::reserve reaches GraphicsContext3D::computeFormatAndTypeParameters and then chokes, because TEXTURE_RECTANGLE_ARB isn&apos;t expected.
&gt; 
&gt; I&apos;ve tried just adding TEXTURE_RECTANGLE_ARB to the switch statement in computeFormatAndTypeParameters, but I end up with a GL_INVALID_ENUM error that I&apos;m not sure how to handle.
&gt; 
&gt; Should I be trying to reserve the texture formatted TEXTURE_RECTANGLE_ARB, or am I approaching this incorrectly?

Sorry, I should have looked more closely at this patch. TextureManager doesn&apos;t really support foreign texture formats and you can&apos;t really allocate the texture on your own when using a ManagedTexture.

I think you&apos;ll have to do your own double buffering for it to work correctly with incremental updates. Use two ioSurfaceTextureIds and flip between them for each update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544195</commentid>
    <comment_count>16</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-27 11:05:06 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think you&apos;ll have to do your own double buffering for it to work correctly with incremental updates. Use two ioSurfaceTextureIds and flip between them for each update.

From my understanding, this additional complexity has been introduced because we moved the texture creation code off the compositor thread.

It feels like things could be simplified significantly by moving everything back onto the compositor thread. 

Is there any advantage to allocating the ioSurfaceTexture on the main thread?

If I was to leave the allocation of the ioSurfaceTexture on the compositor thread, could I avoid the additional overhead of the ManagedTexture and double buffering?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544201</commentid>
    <comment_count>17</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-27 11:16:25 -0800</bug_when>
    <thetext>(In reply to comment #16)

&gt; If I was to leave the allocation of the ioSurfaceTexture on the compositor thread, could I avoid the additional overhead of the ManagedTexture and double buffering?

Definitely.  You could do something similar to the video layer here, where you call something before appendQuads to create and upload the texture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544203</commentid>
    <comment_count>18</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-27 11:17:35 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; I think you&apos;ll have to do your own double buffering for it to work correctly with incremental updates. Use two ioSurfaceTextureIds and flip between them for each update.
&gt; 
&gt; From my understanding, this additional complexity has been introduced because we moved the texture creation code off the compositor thread.
&gt; 
&gt; It feels like things could be simplified significantly by moving everything back onto the compositor thread. 
&gt; 
&gt; Is there any advantage to allocating the ioSurfaceTexture on the main thread?

The textures are always allocated on the compositor thread. It&apos;s just the management of textures that can be done on the main thread. As you can&apos;t use a ManagedTexture for these ioSurfaces, all texture handling has to happen on the compositor thread.

&gt; 
&gt; If I was to leave the allocation of the ioSurfaceTexture on the compositor thread, could I avoid the additional overhead of the ManagedTexture and double buffering?

You shouldn&apos;t use ManagedTexture but you still need double buffering to not get artifacts when incremental updates are enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544205</commentid>
    <comment_count>19</comment_count>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-27 11:21:15 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; You shouldn&apos;t use ManagedTexture but you still need double buffering to not get artifacts when incremental updates are enabled.

It feels like double buffering is a separate issue from this refactor, should it be left as a separate bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544206</commentid>
    <comment_count>20</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-27 11:22:41 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; You shouldn&apos;t use ManagedTexture but you still need double buffering to not get artifacts when incremental updates are enabled.
&gt; 
&gt; It feels like double buffering is a separate issue from this refactor, should it be left as a separate bug?

Yes, that&apos;s fine with me. Just make sure you create a new bug for it before you close this one so we don&apos;t forget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545129</commentid>
    <comment_count>21</comment_count>
      <attachid>124560</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-30 08:43:25 -0800</bug_when>
    <thetext>Created attachment 124560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545135</commentid>
    <comment_count>22</comment_count>
      <attachid>124560</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-30 08:49:43 -0800</bug_when>
    <thetext>Comment on attachment 124560
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:229
&gt; +            layer-&gt;willDraw(m_layerRenderer.get());

willDraw() will be called on the layer both when it represents itself and when it represents a contributing RenderSurface. Is that what you want here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545142</commentid>
    <comment_count>23</comment_count>
      <attachid>124561</attachid>
    <who name="Tim Dresser">tdresser</who>
    <bug_when>2012-01-30 09:03:39 -0800</bug_when>
    <thetext>Created attachment 124561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545481</commentid>
    <comment_count>24</comment_count>
      <attachid>124561</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-01-30 15:22:31 -0800</bug_when>
    <thetext>Comment on attachment 124561
Patch

This looks good to me.  Thanks for taking the time to remove the layer backpointer.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548244</commentid>
    <comment_count>25</comment_count>
      <attachid>124561</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-02 16:32:20 -0800</bug_when>
    <thetext>Comment on attachment 124561
Patch

Awesome, R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548278</commentid>
    <comment_count>26</comment_count>
      <attachid>124561</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 17:35:47 -0800</bug_when>
    <thetext>Comment on attachment 124561
Patch

Clearing flags on attachment: 124561

Committed r106607: &lt;http://trac.webkit.org/changeset/106607&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548279</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 17:35:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123343</attachid>
            <date>2012-01-20 10:53:46 -0800</date>
            <delta_ts>2012-01-23 11:06:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76715-20120120135345.patch</filename>
            <type>text/plain</type>
            <size>22614</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM5ZTliNWIyNDZhZmMy
MDZmOGZhZmYyNTQ5ZTdmYjA0M2VkZTgxNS4uY2Y1M2I2MmI0NjNiNjkyZTdkM2ZhMWFmMWFiYThm
MDllNGZlMmQ0YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAxLTIwICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZWZhY3RvciBwbHVn
aW4gZHJhd2luZyB0byBiZSBtb3JlIGRhdGEgZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENDUGx1Z2luTGF5ZXJJbXBsIG5vIGxvbmdlciBoYW5k
bGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDUGx1Z2luRHJhd1F1
YWRzLgorICAgICAgICBUaGVzZSBxdWFkcyBhcmUgdGhlbiBkcmF3biBieSBMYXllclJlbmRlcmVy
Q2hyb21pdW0uCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yLCBzbyBubyBuZXcgdGVzdHMg
d2VyZSBhZGRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Qcm9ncmFtQmlu
ZGluZzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmlu
ZGluZzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleFRyYW5zZm9ybVBsdWdpblByb2dyYW1C
aW5kaW5nOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UGx1Z2luUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5EcmF3UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6Q0NQbHVnaW5E
cmF3UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5EcmF3UXVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6dXZSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OnRleHR1cmVJZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjppb1N1cmZhY2VJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjpmbGlwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
UGx1Z2luRHJhd1F1YWQ6OmlvU3VyZmFjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1
Z2luRHJhd1F1YWQ6OmlvU3VyZmFjZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdp
bkRyYXdRdWFkOjpsYXllcklvU3VyZmFjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQ
bHVnaW5EcmF3UXVhZDo6cmVzZXRMYXllcklvU3VyZmFjZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6bGF5ZXJJb1N1cmZhY2VUZXh0dXJlSWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6c2V0TGF5ZXJJb1N1cmZhY2VUZXh0dXJlSWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjphcHBlbmRRdWFk
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjppb1N1cmZhY2VD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpyZXNldElvU3Vy
ZmFjZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmlvU3Vy
ZmFjZVRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6c2V0
SW9TdXJmYWNlVGV4dHVyZUlkKToKKwogMjAxMi0wMS0yMCAgS2ludWtvIFlhc3VkYSAgPGtpbnVr
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIERhdGFUcmFuc2Zlckl0ZW1zIHN1cHBvcnQg
Zm9yIGRyYWctYW5kLWRyb3AnZWQgZmlsZXMgYW5kIHRleHRzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCBlZWMxNzliMTg2ZDMxZTAzNGRjN2EyZmUzZDA5ZTM2ZmY1
MmQyZDk0Li5jNDRkY2I5MTgxNWY1MzM0NzI2Zjc1MTMzY2U3MzkxOGMyZTMyMDdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTY3OSwxMCArNjc5LDEyMSBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJh
d1F1YWQqIHF1YWQpCiAgICAgbGF5ZXItPmRyYXcodGhpcyk7CiB9CiAKK3N0cnVjdCBQbHVnaW5Q
cm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJv
Z3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0t
PmluaXRpYWxpemVkKCkpOworICAgICAgICBwcm9ncmFtSWQgPSBwcm9ncmFtLT5wcm9ncmFtKCk7
CisgICAgICAgIHNhbXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2Ft
cGxlckxvY2F0aW9uKCk7CisgICAgICAgIG1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAgICAgYWxwaGFMb2NhdGlvbiA9IHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIH0KKyAgICBpbnQgcHJv
Z3JhbUlkOworICAgIGludCBzYW1wbGVyTG9jYXRpb247CisgICAgaW50IG1hdHJpeExvY2F0aW9u
OworICAgIGludCBhbHBoYUxvY2F0aW9uOworfTsKKworc3RydWN0IFRleFN0cmV0Y2hQbHVnaW5Q
cm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQorICAgIHsKKyAgICAgICAgUGx1
Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFtKTsKKyAgICAgICAgb2Zmc2V0TG9jYXRpb24g
PSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5vZmZzZXRMb2NhdGlvbigpOworICAgICAgICBzY2Fs
ZUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkuc2NhbGVMb2NhdGlvbigpOworICAg
IH0KKyAgICBpbnQgb2Zmc2V0TG9jYXRpb247CisgICAgaW50IHNjYWxlTG9jYXRpb247Cit9Owor
CitzdHJ1Y3QgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFt
QmluZGluZyB7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSog
cHJvZ3JhbSkKKyAgICB7CisgICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3Jh
bSk7CisgICAgICAgIHRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVy
KCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKTsKKyAgICB9CisgICAgaW50IHRleFRyYW5zZm9ybUxv
Y2F0aW9uOworfTsKKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFk
KGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgQ0NMYXllckltcGwqIGxheWVy
ID0gcXVhZC0+bGF5ZXIoKTsKLSAgICBsYXllci0+ZHJhdyh0aGlzKTsKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOworCisgICAgaWYgKHF1YWQtPmxheWVySW9TdXJmYWNlQ2hh
bmdlZCgpKSB7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3Rh
dGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0KCktPmdldEV4dGVuc2lvbnMo
KSk7CisgICAgICAgIEFTU0VSVChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVVFVQUQt
Pmlvc3VyZmFjZSIpKTsKKyAgICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiKSk7CisKKyAgICAgICAgaWYgKCFxdWFkLT5sYXllcklvU3Vy
ZmFjZVRleHR1cmVJZCgpKQorICAgICAgICAgICAgcXVhZC0+c2V0TGF5ZXJJb1N1cmZhY2VUZXh0
dXJlSWQoY29udGV4dCgpLT5jcmVhdGVUZXh0dXJlKCkpOworICAgICAgICAKKyAgICAgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJl
KEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBxdWFkLT5sYXllcklvU3VyZmFj
ZVRleHR1cmVJZCgpKSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFy
YW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwor
ICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9u
czNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNU
QU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSkpOworICAgICAgICBleHRlbnNpb25zLT50ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01J
VU0oRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLT5pb1N1cmZhY2VXaWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC0+aW9T
dXJmYWNlSGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBxdWFkLT5pb1N1cmZhY2VJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgIC8vIERvIG5vdCBjaGVjayBmb3IgZXJy
b3IgY29uZGl0aW9ucy4gdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNIGlzIHN1cHBvc2VkIHRv
IGhvbGQgb24gdG8KKyAgICAgICAgLy8gdGhlIGxhc3QgZ29vZCBJT1N1cmZhY2UgaWYgdGhlIG5l
dyBvbmUgaXMgYWxyZWFkeSBjbG9zZWQuIFRoaXMgaXMgb25seSBhIHBvc3NpYmlsaXR5CisgICAg
ICAgIC8vIGR1cmluZyBsaXZlIHJlc2l6aW5nIG9mIHBsdWdpbnMuIEhvd2V2ZXIsIGl0IHNlZW1z
IHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0bworICAgICAgICAvLyBjb21wbGV0ZWx5IGd1
YXJkIGFnYWluc3QgZ2FyYmFnZSBiZWluZyBkcmF3bi4gSWYgdGhpcyBpcyBmb3VuZCB0byBiZSBh
IHNpZ25pZmljYW50IGlzc3VlLAorICAgICAgICAvLyBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGV4
cGxpY2l0bHkgdGVsbCB0aGUgZW1iZWRkZXIgd2hlbiB0byBmcmVlIHRoZSBzdXJmYWNlcyBpdCBo
YXMKKyAgICAgICAgLy8gYWxsb2NhdGVkLgorCisgICAgICAgIHF1YWQtPnJlc2V0TGF5ZXJJb1N1
cmZhY2VDaGFuZ2VkKCk7CisgICAgfQorCisgICAgaWYgKHF1YWQtPmxheWVySW9TdXJmYWNlVGV4
dHVyZUlkKCkpIHsKKyAgICAgICAgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmlu
ZGluZzsKKyAgICAgICAgaWYgKHF1YWQtPmZsaXBwZWQoKSkKKyAgICAgICAgICAgIGJpbmRpbmcu
c2V0KHBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclRleFJlY3RQcm9ncmFtKCkpOworCisgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5k
VGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgcXVhZC0+bGF5ZXJJ
b1N1cmZhY2VUZXh0dXJlSWQoKSkpOworCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOworICAgICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAg
ICAgICAvLyBOb3RlOiB0aGlzIGNvZGUgcGF0aCBpZ25vcmVzIHF1YWQtPnV2UmVjdCgpLgorICAg
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00ZihiaW5kaW5nLnRleFRyYW5z
Zm9ybUxvY2F0aW9uLCAwLCAwLCBxdWFkLT5pb1N1cmZhY2VXaWR0aCgpLCBxdWFkLT5pb1N1cmZh
Y2VIZWlnaHQoKSkpOworICAgICAgICBjb25zdCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFk
UmVjdCgpLnNpemUoKTsKKyAgICAgICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5z
Zm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCks
IHNoYXJlZEdlb21ldHJ5UXVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyBi
aW5kaW5nOworICAgICAgICBpZiAocXVhZC0+ZmxpcHBlZCgpKQorICAgICAgICAgICAgYmluZGlu
Zy5zZXQocGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJQcm9ncmFtKCkpOworCisgICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcXVhZC0+dGV4dHVyZUlkKCkpKTsKKworICAgICAg
ICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMg
cmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKKyAgICAgICAgLy8gd2hlcmUgaXQg
d2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJlLgorICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisK
KyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dy
YW1JZCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT51bmlmb3JtMWkoYmluZGlu
Zy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+
dW5pZm9ybTJmKGJpbmRpbmcub2Zmc2V0TG9jYXRpb24sIHF1YWQtPnV2UmVjdCgpLngoKSwgcXVh
ZC0+dXZSZWN0KCkueSgpKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnVuaWZv
cm0yZihiaW5kaW5nLnNjYWxlTG9jYXRpb24sIHF1YWQtPnV2UmVjdCgpLndpZHRoKCksIHF1YWQt
PnV2UmVjdCgpLmhlaWdodCgpKSk7CisgICAgICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1
YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgICAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPmxh
eWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1YWQtPm9w
YWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworICAgIH0KIH0KIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luRHJhd1F1YWQuY3BwCmluZGV4IGZkMmFlNGI4NjI4ZjdmYTExNDJmOTU2MTlmMWJhZThjYWRk
YmZmYTcuLjY1NDg0NTEyZjQwOWIwNTVlYjdjMzI0NWRmMTFlZjc3ZDJmZThkNTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
RHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwCkBAIC0yOSwxMyArMjksMTkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IENDUGx1Z2luRHJh
d1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBj
b25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyKQorUGFzc093blB0cjxD
Q1BsdWdpbkRyYXdRdWFkPiBDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIHVpbnQzMl90IGlvU3VyZmFj
ZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VXaWR0aCwgaW50IGlvU3VyZmFjZUhlaWdo
dCwgQ0NQbHVnaW5MYXllckltcGwqIGxheWVyKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NQbHVnaW5EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXllcikpOworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NQbHVnaW5EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1
YWRSZWN0LCB1dlJlY3QsIHRleHR1cmVJZCwgaW9TdXJmYWNlSWQsIGZsaXBwZWQsIGlvU3VyZmFj
ZVdpZHRoLCBpb1N1cmZhY2VIZWlnaHQsIGxheWVyKSk7CiB9CiAKLUNDUGx1Z2luRHJhd1F1YWQ6
OkNDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0
ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK0NDUGx1Z2lu
RHJhd1F1YWQ6OkNDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdXZS
ZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIHVpbnQzMl90IGlvU3VyZmFjZUlkLCBib29sIGZsaXBw
ZWQsIGludCBpb1N1cmZhY2VXaWR0aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgQ0NQbHVnaW5MYXll
ckltcGwqIGxheWVyKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1
YWQ6OlBsdWdpbkNvbnRlbnQsIHF1YWRSZWN0KQorICAgICwgbV91dlJlY3QodXZSZWN0KQorICAg
ICwgbV90ZXh0dXJlSWQodGV4dHVyZUlkKQorICAgICwgbV9pb1N1cmZhY2VJZChpb1N1cmZhY2VJ
ZCkKKyAgICAsIG1fZmxpcHBlZChmbGlwcGVkKQorICAgICwgbV9pb1N1cmZhY2VXaWR0aChpb1N1
cmZhY2VXaWR0aCkKKyAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KGlvU3VyZmFjZUhlaWdodCkKICAg
ICAsIG1fbGF5ZXIobGF5ZXIpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3
UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5EcmF3UXVhZC5oCmluZGV4IGNhNTJhYmVmNDA5MzE2NzVjM2EwN2I2ZWNjZDJmNDM2YWNk
MWRlMzEuLmUwZmQ5NDZiYjQwODgxYzZlNjdhZmQxOTQ1ODhkZDg4NTM1ZWI4YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
RHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQ0NQbHVn
aW5EcmF3UXVhZF9oCiAKICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2Mv
Q0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zNiwxNCArMzcsMzAgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBj
bGFzcyBDQ1BsdWdpbkRyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENDUGx1Z2luRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSos
IGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
UGx1Z2luRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVy
ZUlkLCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lk
dGgsIGludCBpb1N1cmZhY2VIZWlnaHQsIENDUGx1Z2luTGF5ZXJJbXBsKik7CiAKLSAgICBDQ0xh
eWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CisgICAgRmxvYXRSZWN0
IHV2UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXZSZWN0OyB9CisgICAgdW5zaWduZWQgdGV4dHVy
ZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICB1aW50MzJfdCBpb1N1cmZh
Y2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlSWQ7IH0KKyAgICBib29sIGZsaXBwZWQo
KSBjb25zdCB7IHJldHVybiBtX2ZsaXBwZWQ7IH0KKyAgICBpbnQgaW9TdXJmYWNlV2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2lvU3VyZmFjZVdpZHRoOyB9CisgICAgaW50IGlvU3VyZmFjZUhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlSGVpZ2h0OyB9CiAKKyAgICBib29sIGxheWVy
SW9TdXJmYWNlQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXItPmlvU3VyZmFjZUNoYW5n
ZWQoKTsgfQorICAgIHZvaWQgcmVzZXRMYXllcklvU3VyZmFjZUNoYW5nZWQoKSBjb25zdCB7IG1f
bGF5ZXItPnJlc2V0SW9TdXJmYWNlQ2hhbmdlZCgpOyB9CisgICAgdW5zaWduZWQgbGF5ZXJJb1N1
cmZhY2VUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLT5pb1N1cmZhY2VUZXh0dXJl
SWQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJJb1N1cmZhY2VUZXh0dXJlSWQodW5zaWduZWQgbGF5
ZXJJb1N1cmZhY2VUZXh0dXJlSWQpIGNvbnN0IHsgbV9sYXllci0+c2V0SW9TdXJmYWNlVGV4dHVy
ZUlkKGxheWVySW9TdXJmYWNlVGV4dHVyZUlkKTsgfQorICAgIAogcHJpdmF0ZToKLSAgICBDQ1Bs
dWdpbkRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIEND
TGF5ZXJJbXBsKik7CisgICAgQ0NQbHVnaW5EcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5z
aWduZWQgdGV4dHVyZUlkLCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgYm9vbCBmbGlwcGVkLCBpbnQg
aW9TdXJmYWNlV2lkdGgsIGludCBpb1N1cmZhY2VIZWlnaHQsIENDUGx1Z2luTGF5ZXJJbXBsKik7
CiAKLSAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKKyAgICBGbG9hdFJlY3QgbV91dlJlY3Q7Cisg
ICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAgdWludDMyX3QgbV9pb1N1cmZhY2VJZDsKKyAg
ICBib29sIG1fZmxpcHBlZDsKKyAgICBpbnQgbV9pb1N1cmZhY2VXaWR0aDsKKyAgICBpbnQgbV9p
b1N1cmZhY2VIZWlnaHQ7CisgICAgQ0NQbHVnaW5MYXllckltcGwqIG1fbGF5ZXI7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKaW5kZXggYjIwYTJmNTE4MmM5M2Uw
MTIwOWRmZjNmMzVmYWI2MzgxNGFiNGI1Ni4uMTE2OTYzNjhiMjg4NDFjNWZjMDhjZGNhZDhjNzgw
NWJkOTZlNTdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzYs
NDUgKzM2LDYgQEAKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGlu
ZyB7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3Jh
bSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVk
KCkpOwotICAgICAgICBwcm9ncmFtSWQgPSBwcm9ncmFtLT5wcm9ncmFtKCk7Ci0gICAgICAgIHNh
bXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9u
KCk7Ci0gICAgICAgIG1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKTsKLSAgICAgICAgYWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQgcHJvZ3JhbUlkOwotICAg
IGludCBzYW1wbGVyTG9jYXRpb247Ci0gICAgaW50IG1hdHJpeExvY2F0aW9uOwotICAgIGludCBh
bHBoYUxvY2F0aW9uOwotfTsKLQotc3RydWN0IFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGlu
ZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2
b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgUGx1Z2luUHJvZ3JhbUJp
bmRpbmc6OnNldChwcm9ncmFtKTsKLSAgICAgICAgb2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5vZmZzZXRMb2NhdGlvbigpOwotICAgICAgICBzY2FsZUxvY2F0aW9uID0g
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkuc2NhbGVMb2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQg
b2Zmc2V0TG9jYXRpb247Ci0gICAgaW50IHNjYWxlTG9jYXRpb247Ci19OwotCi1zdHJ1Y3QgVGV4
VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKLSAg
ICB7Ci0gICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7Ci0gICAgICAg
IHRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNm
b3JtTG9jYXRpb24oKTsKLSAgICB9Ci0gICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOwotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ0NQ
bHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKGludCBpZCkKQEAgLTk1LDkyICs1Niwx
MCBAQCBDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKICAgICBjbGVhbnVw
UmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pb1N1cmZhY2VDaGFuZ2VkKSB7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAg
ICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVu
c2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKLSAgICAgICAgQVNT
RVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9pb3N1cmZhY2UiKSk7Ci0gICAg
ICAgIEFTU0VSVChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xl
IikpOwotCi0gICAgICAgIGlmICghbV9pb1N1cmZhY2VUZXh0dXJlSWQpCi0gICAgICAgICAgICBt
X2lvU3VyZmFjZVRleHR1cmVJZCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLQotICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEV4
dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX2lvU3VyZmFjZVRleHR1cmVJZCkp
OwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25z
M0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xF
X0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwot
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6
OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgICAgICBleHRlbnNpb25z
LT50ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RB
TkdMRV9BUkIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2lvU3VyZmFjZVdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pb1N1cmZhY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZUlkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICAgIC8vIERvIG5vdCBjaGVj
ayBmb3IgZXJyb3IgY29uZGl0aW9ucy4gdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNIGlzIHN1
cHBvc2VkIHRvIGhvbGQgb24gdG8KLSAgICAgICAgLy8gdGhlIGxhc3QgZ29vZCBJT1N1cmZhY2Ug
aWYgdGhlIG5ldyBvbmUgaXMgYWxyZWFkeSBjbG9zZWQuIFRoaXMgaXMgb25seSBhIHBvc3NpYmls
aXR5Ci0gICAgICAgIC8vIGR1cmluZyBsaXZlIHJlc2l6aW5nIG9mIHBsdWdpbnMuIEhvd2V2ZXIs
IGl0IHNlZW1zIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0bwotICAgICAgICAvLyBjb21w
bGV0ZWx5IGd1YXJkIGFnYWluc3QgZ2FyYmFnZSBiZWluZyBkcmF3bi4gSWYgdGhpcyBpcyBmb3Vu
ZCB0byBiZSBhIHNpZ25pZmljYW50IGlzc3VlLAotICAgICAgICAvLyBpdCBtYXkgYmUgbmVjZXNz
YXJ5IHRvIGV4cGxpY2l0bHkgdGVsbCB0aGUgZW1iZWRkZXIgd2hlbiB0byBmcmVlIHRoZSBzdXJm
YWNlcyBpdCBoYXMKLSAgICAgICAgLy8gYWxsb2NhdGVkLgotICAgICAgICBtX2lvU3VyZmFjZUNo
YW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9pb1N1cmZhY2VUZXh0dXJlSWQpIHsK
LSAgICAgICAgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKLSAgICAg
ICAgaWYgKG1fZmxpcHBlZCkKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXIt
PnBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclRleFJlY3RQcm9ncmFt
KCkpOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJl
ci0+Y29udGV4dCgpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBt
X2lvU3VyZmFjZVRleHR1cmVJZCkpOwotCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51
c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT51bmlmb3JtMWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgLy8g
Tm90ZTogdGhpcyBjb2RlIHBhdGggaWdub3JlcyBtX3V2UmVjdC4KLSAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm00ZihiaW5kaW5nLnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCAw
LCBtX2lvU3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdodCkpOwotICAgICAgICBsYXllclJl
bmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRzKCkud2lkdGgo
KSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVyZXItPnNoYXJl
ZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpbmRpbmcubWF0cml4TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgVGV4U3RyZXRjaFBsdWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7Ci0g
ICAgICAgIGlmIChtX2ZsaXBwZWQpCi0gICAgICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRl
cmVyLT5wbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclByb2dyYW0oKSk7Ci0KLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7Ci0K
LSAgICAgICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVycyBldmVyeSB0
aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlCi0gICAgICAgIC8vIHdo
ZXJlIGl0IHdpbGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4dHVyZS4KLSAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLQot
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1J
ZCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGJpbmRpbmcuc2Ft
cGxlckxvY2F0aW9uLCAwKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3Jt
MmYoYmluZGluZy5vZmZzZXRMb2NhdGlvbiwgbV91dlJlY3QueCgpLCBtX3V2UmVjdC55KCkpKTsK
LSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0yZihiaW5kaW5nLnNjYWxlTG9j
YXRpb24sIG1fdXZSZWN0LndpZHRoKCksIG1fdXZSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIGxh
eWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMoKS53
aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJlci0+
c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLTEpOwotICAgIH0KLX0KLQogdm9pZCBDQ1BsdWdpbkxheWVy
SW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7CiAgICAgSW50UmVjdCBxdWFkUmVjdChJbnRQb2lu
dCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDUGx1Z2luRHJhd1F1YWQ6OmNy
ZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0aGlzKSk7CisgICAgcXVhZExpc3QuYXBw
ZW5kKENDUGx1Z2luRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBt
X3V2UmVjdCwgbV90ZXh0dXJlSWQsIG1faW9TdXJmYWNlSWQsIG1fZmxpcHBlZCwgbV9pb1N1cmZh
Y2VXaWR0aCwgbV9pb1N1cmZhY2VIZWlnaHQsIHRoaXMpKTsKIH0KIAogdm9pZCBDQ1BsdWdpbkxh
eWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4IDliNGQ1YTRkMzhmMTMx
Y2E1Nzk2ZjlkY2ViNTJlYjliNzg5MmE4MTEuLjA4NzM1OGMyNTdiYmRiYzRlODliN2IyYWY2NWZj
OGYyYTlhMWI3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAtNDgsOCAr
NDgsNiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQ
b3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleFJlY3RBbHBoYT4gVGV4UmVjdFBy
b2dyYW07CiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFu
c2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleFJlY3RGbGlwQWxwaGE+IFRleFJlY3RQcm9ncmFt
RmxpcDsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwot
CiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBp
bmRlbnQpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90
ZXh0dXJlSWQgPSBpZDsgfQpAQCAtNTcsNiArNTUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VVZSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX3V2UmVjdCA9IHJlY3Q7IH0KICAgICB2
b2lkIHNldElPU3VyZmFjZVByb3BlcnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJf
dCBpb1N1cmZhY2VJZCk7CiAKKyAgICBib29sIGlvU3VyZmFjZUNoYW5nZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lvU3VyZmFjZUNoYW5nZWQ7IH0KKyAgICB2b2lkIHJlc2V0SW9TdXJmYWNlQ2hhbmdl
ZCgpIHsgbV9pb1N1cmZhY2VDaGFuZ2VkID0gZmFsc2U7IH0KKyAgICB1bnNpZ25lZCBpb1N1cmZh
Y2VUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2lvU3VyZmFjZVRleHR1cmVJZDsgfQorICAg
IHZvaWQgc2V0SW9TdXJmYWNlVGV4dHVyZUlkKHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCkg
eyBtX2lvU3VyZmFjZVRleHR1cmVJZCA9IGlvU3VyZmFjZVRleHR1cmVJZDsgfQorCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKGludCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123578</attachid>
            <date>2012-01-23 11:07:00 -0800</date>
            <delta_ts>2012-01-24 14:20:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76715-20120123140658.patch</filename>
            <type>text/plain</type>
            <size>25490</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzEzMzg1MWYwNTg5Yzgx
YTkzZWM0YzQ0ZWFiYzE4OGJkNjU4MTBiMS4uYjU4Y2I0NmViOTU1NjVmMjVlMDIzN2IwNTg3ZDgx
ZDE0NzRiMDdhNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTAxLTIzICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKyAgICAgICAgUmVmYWN0b3IgcGx1Z2lu
IGRyYXdpbmcgdG8gYmUgbW9yZSBkYXRhIGRyaXZlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY3MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDQ1BsdWdpbkxheWVySW1wbCBubyBsb25nZXIgaGFuZGxl
cyBkcmF3aW5nIGl0c2VsZiwgYnV0IHByb2R1Y2VzIGEgbGlzdCBvZiBDQ1BsdWdpbkRyYXdRdWFk
cy4KKyAgICAgICAgVGhlc2UgcXVhZHMgYXJlIHRoZW4gZHJhd24gYnkgTGF5ZXJSZW5kZXJlckNo
cm9taXVtLgorCisgICAgICAgIFRoaXMgaXMgYSByZWZhY3Rvciwgc28gbm8gbmV3IHRlc3RzIHdl
cmUgYWRkZWQuCisgICAgICAgIEZsYXNoIHdhcyB0ZXN0ZWQgbWFudWFsbHkgb24gTGludXggYW5k
IE1hYy4KKyAgICAgICAgUmVsZXZlbnQgbGF5b3V0IHRlc3RzIHdlcmUgcnVuIG9uIExpbnV4IGFu
ZCBNYWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luUHJvZ3JhbUJpbmRpbmc6
OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmc6
OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGlu
Zzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Bs
dWdpblF1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxh
eWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6
UGx1Z2luTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkxheWVyQ2hyb21pdW06OnNldElPU3VyZmFjZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUGx1Z2luRHJhd1F1YWQ6OkNDUGx1Z2luRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OnV2UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Bs
dWdpbkRyYXdRdWFkOjp0ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3
UXVhZDo6aW9TdXJmYWNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6
ZmxpcHBlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjppb1N1cmZhY2VU
ZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6aW9TdXJmYWNl
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6aW9TdXJmYWNlSGVp
Z2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVn
aW5MYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmFwcGVu
ZFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpzZXRJT1N1cmZh
Y2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6
OnNldElPU3VyZmFjZVRleHR1cmVJZCk6CisKIDIwMTItMDEtMjAgIFRpbSBEcmVzc2VyICA8dGRy
ZXNzZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yIGNhbnZhcyBkcmF3aW5nIHRv
IGJlIG1vcmUgZGF0YSBkcml2ZW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CmluZGV4IGJiZGY4OWRhZjAxNjhjYzgwNDE5NmJkOWYzMTNiMzBhODlmMzMxYzYuLjhiOGI5OTY3
MDBkYjUxZmYwOTU1YWNiZTkzZTMyMmI3MDYxOTcyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcApAQCAtNjk4LDEwICs2OTgsOTIgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAg
IGxheWVyLT5kcmF3KHRoaXMpOwogfQogCitzdHJ1Y3QgUGx1Z2luUHJvZ3JhbUJpbmRpbmcgewor
ICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCisg
ICAgeworICAgICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsK
KyAgICAgICAgcHJvZ3JhbUlkID0gcHJvZ3JhbS0+cHJvZ3JhbSgpOworICAgICAgICBzYW1wbGVy
TG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpOwor
ICAgICAgICBtYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExv
Y2F0aW9uKCk7CisgICAgICAgIGFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLmFscGhhTG9jYXRpb24oKTsKKyAgICB9CisgICAgaW50IHByb2dyYW1JZDsKKyAgICBpbnQg
c2FtcGxlckxvY2F0aW9uOworICAgIGludCBtYXRyaXhMb2NhdGlvbjsKKyAgICBpbnQgYWxwaGFM
b2NhdGlvbjsKK307CisKK3N0cnVjdCBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQ
bHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBz
ZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5n
OjpzZXQocHJvZ3JhbSk7CisgICAgICAgIG9mZnNldExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkub2Zmc2V0TG9jYXRpb24oKTsKKyAgICAgICAgc2NhbGVMb2NhdGlvbiA9IHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLnNjYWxlTG9jYXRpb24oKTsKKyAgICB9CisgICAgaW50IG9mZnNl
dExvY2F0aW9uOworICAgIGludCBzY2FsZUxvY2F0aW9uOworfTsKKworc3RydWN0IFRleFRyYW5z
Zm9ybVBsdWdpblByb2dyYW1CaW5kaW5nIDogUGx1Z2luUHJvZ3JhbUJpbmRpbmcgeworICAgIHRl
bXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCisgICAgewor
ICAgICAgICBQbHVnaW5Qcm9ncmFtQmluZGluZzo6c2V0KHByb2dyYW0pOworICAgICAgICB0ZXhU
cmFuc2Zvcm1Mb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxv
Y2F0aW9uKCk7CisgICAgfQorICAgIGludCB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKK307CisKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UGx1Z2luUXVhZChjb25zdCBDQ1BsdWdpbkRy
YXdRdWFkKiBxdWFkKQogewotICAgIENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7
Ci0gICAgbGF5ZXItPmRyYXcodGhpcyk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKKworICAgIGlmIChxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkgeworICAgICAgICBU
ZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGluZyBiaW5kaW5nOworICAgICAgICBpZiAocXVh
ZC0+ZmxpcHBlZCgpKQorICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJUZXhSZWN0
UHJvZ3JhbUZsaXAoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KHBs
dWdpbkxheWVyVGV4UmVjdFByb2dyYW0oKSk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAg
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6
VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkpOworCisg
ICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dy
YW1JZCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5k
aW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgICAgICAvLyBOb3RlOiB0aGlzIGNvZGUgcGF0
aCBpZ25vcmVzIHF1YWQtPnV2UmVjdCgpLgorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm00ZihiaW5kaW5nLnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBxdWFkLT5p
b1N1cmZhY2VXaWR0aCgpLCBxdWFkLT5pb1N1cmZhY2VIZWlnaHQoKSkpOworICAgICAgICBjb25z
dCBJbnRTaXplJiBib3VuZHMgPSBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKKyAgICAgICAgZHJh
d1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91
bmRzLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBo
YUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsK
KyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25z
M0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFRl
eFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyBiaW5kaW5nOworICAgICAgICBpZiAocXVhZC0+
ZmxpcHBlZCgpKQorICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJQcm9ncmFtRmxp
cCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJQ
cm9ncmFtKCkpOworCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
cXVhZC0+dGV4dHVyZUlkKCkpKTsKKworICAgICAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4
dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBz
b21ld2hlcmUKKyAgICAgICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0
ZXh0dXJlLgorICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQoKS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOworICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dCgpLT51bmlmb3JtMWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcub2Zmc2V0TG9j
YXRpb24sIHF1YWQtPnV2UmVjdCgpLngoKSwgcXVhZC0+dXZSZWN0KCkueSgpKSk7CisgICAgICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnVuaWZvcm0yZihiaW5kaW5nLnNjYWxlTG9jYXRpb24s
IHF1YWQtPnV2UmVjdCgpLndpZHRoKCksIHF1YWQtPnV2UmVjdCgpLmhlaWdodCgpKSk7CisgICAg
ICAgIGNvbnN0IEludFNpemUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAg
ICAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0
aCgpLCBib3VuZHMuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFk
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5tYXRy
aXhMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5k
aW5nLmFscGhhTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLTEpOworICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERy
YXdpbmdGcmFtZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDA3OWFk
MmVkZTk1NDc1NTgyYjg3MDcyOWE3MWE1ZDYxYmQyOGFiNGIuLjNhMWMxNzM2MmRjOTczNWI3YmVk
ZGY1OWExNzM3ZTBiYzA3ZmYwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKQEAgLTQ5LDExICs1MCw0MyBAQCBQbHVnaW5MYXllckNocm9taXVt
OjpQbHVnaW5MYXllckNocm9taXVtKCkKICAgICAsIG1faW9TdXJmYWNlV2lkdGgoMCkKICAgICAs
IG1faW9TdXJmYWNlSGVpZ2h0KDApCiAgICAgLCBtX2lvU3VyZmFjZUlkKDApCisgICAgLCBtX2lv
U3VyZmFjZVRleHR1cmVJZCgwKQorICAgICwgbV9pb1N1cmZhY2VDaGFuZ2VkKGZhbHNlKQogewog
fQogCiB2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
R3JhcGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYpCiB7
CisgICAgaWYgKG1faW9TdXJmYWNlQ2hhbmdlZCkgeworICAgICAgICBFeHRlbnNpb25zM0RDaHJv
bWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4ocmVu
ZGVyZXJDb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgICAgICBBU1NFUlQoZXh0ZW5zaW9u
cy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2lvc3VyZmFjZSIpKTsKKyAgICAgICAgQVNTRVJUKGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSk7CisKKyAgICAg
ICAgaWYgKCFtX2lvU3VyZmFjZVRleHR1cmVJZCkKKyAgICAgICAgICAgIG1faW9TdXJmYWNlVGV4
dHVyZUlkID0gcmVuZGVyZXJDb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIAorICAg
ICAgICBHTEMocmVuZGVyZXJDb250ZXh0LCByZW5kZXJlckNvbnRleHQtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgICAgIEdMQyhyZW5kZXJlckNvbnRl
eHQsIHJlbmRlcmVyQ29udGV4dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JF
Q1RBTkdMRV9BUkIsIG1faW9TdXJmYWNlVGV4dHVyZUlkKSk7CisgICAgICAgIEdMQyhyZW5kZXJl
ckNvbnRleHQsIHJlbmRlcmVyQ29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRF
WFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgICAgICBHTEMocmVuZGVyZXJDb250
ZXh0LCByZW5kZXJlckNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKHJlbmRlcmVyQ29udGV4dCwg
cmVuZGVyZXJDb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNU
QU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhyZW5kZXJlckNvbnRleHQsIHJl
bmRlcmVyQ29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFO
R0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBleHRlbnNpb25zLT50ZXhJbWFnZUlPU3Vy
ZmFjZTJEQ0hST01JVU0oRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZVdp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
b1N1cmZhY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2lvU3VyZmFjZUlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCk7CisKKyAgICAgICAgLy8gRG8gbm90IGNoZWNrIGZvciBlcnJvciBj
b25kaXRpb25zLiB0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0gaXMgc3VwcG9zZWQgdG8gaG9s
ZCBvbiB0bworICAgICAgICAvLyB0aGUgbGFzdCBnb29kIElPU3VyZmFjZSBpZiB0aGUgbmV3IG9u
ZSBpcyBhbHJlYWR5IGNsb3NlZC4gVGhpcyBpcyBvbmx5IGEgcG9zc2liaWxpdHkKKyAgICAgICAg
Ly8gZHVyaW5nIGxpdmUgcmVzaXppbmcgb2YgcGx1Z2lucy4gSG93ZXZlciwgaXQgc2VlbXMgdGhh
dCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvCisgICAgICAgIC8vIGNvbXBsZXRlbHkgZ3VhcmQg
YWdhaW5zdCBnYXJiYWdlIGJlaW5nIGRyYXduLiBJZiB0aGlzIGlzIGZvdW5kIHRvIGJlIGEgc2ln
bmlmaWNhbnQgaXNzdWUsCisgICAgICAgIC8vIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gZXhwbGlj
aXRseSB0ZWxsIHRoZSBlbWJlZGRlciB3aGVuIHRvIGZyZWUgdGhlIHN1cmZhY2VzIGl0IGhhcwor
ICAgICAgICAvLyBhbGxvY2F0ZWQuCisKKyAgICAgICAgbV9pb1N1cmZhY2VDaGFuZ2VkID0gZmFs
c2U7CisgICAgfQorCiAgICAgaWYgKCFtX25lZWRzRGlzcGxheSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC04OCw2ICsxMjEsOSBAQCB2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnNldFVWUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0SU9T
dXJmYWNlUHJvcGVydGllcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFj
ZUlkKQogeworICAgIGlmIChtX2lvU3VyZmFjZUlkICE9IGlvU3VyZmFjZUlkKQorICAgICAgICBt
X2lvU3VyZmFjZUNoYW5nZWQgPSB0cnVlOworCiAgICAgbV9pb1N1cmZhY2VXaWR0aCA9IHdpZHRo
OwogICAgIG1faW9TdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0OwogICAgIG1faW9TdXJmYWNlSWQgPSBp
b1N1cmZhY2VJZDsKQEAgLTEwOCw2ICsxNDQsNyBAQCB2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIHBsdWdpbkxheWVyLT5z
ZXRGbGlwcGVkKG1fZmxpcHBlZCk7CiAgICAgcGx1Z2luTGF5ZXItPnNldFVWUmVjdChtX3V2UmVj
dCk7CiAgICAgcGx1Z2luTGF5ZXItPnNldElPU3VyZmFjZVByb3BlcnRpZXMobV9pb1N1cmZhY2VX
aWR0aCwgbV9pb1N1cmZhY2VIZWlnaHQsIG1faW9TdXJmYWNlSWQpOworICAgIHBsdWdpbkxheWVy
LT5zZXRJT1N1cmZhY2VUZXh0dXJlSWQobV9pb1N1cmZhY2VUZXh0dXJlSWQpOwogfQogCiB2b2lk
IFBsdWdpbkxheWVyQ2hyb21pdW06OmludmFsaWRhdGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZGly
dHlSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDg0MzY1Njk1YmIxZGRj
NjUyMzFhZGQwNGY2ZjBkODMwMDA5MWUwZDAuLjllODA4YjE1MmEzOWNkYTc2MjM2Y2I4Yzg3NDQ1
ZDAyOTZhZWRkOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKQEAgLTY4LDYgKzY4
LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9pb1N1cmZhY2VIZWlnaHQ7CiAgICAgdWludDMyX3Qg
bV9pb1N1cmZhY2VJZDsKICAgICBGbG9hdFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgdW5zaWduZWQg
bV9pb1N1cmZhY2VUZXh0dXJlSWQ7CisgICAgYm9vbCBtX2lvU3VyZmFjZUNoYW5nZWQ7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwCmluZGV4IGZkMmFlNGI4NjI4Zjdm
YTExNDJmOTU2MTlmMWJhZThjYWRkYmZmYTcuLjlkNjFiY2IyODE3N2M3ODdmMTQwYmNjNGRjMDE5
NzQ4OWFlNTM2MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwCkBAIC0yOSwx
NiArMjksMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUGx1Z2lu
RHJhd1F1YWQ+IENDUGx1Z2luRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwq
IGxheWVyKQorUGFzc093blB0cjxDQ1BsdWdpbkRyYXdRdWFkPiBDQ1BsdWdpbkRyYXdRdWFkOjpj
cmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50
UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0dXJl
SWQsIHVpbnQzMl90IGlvU3VyZmFjZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VXaWR0
aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKQogewot
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NQbHVnaW5EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUs
IHF1YWRSZWN0LCBsYXllcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NQbHVnaW5EcmF3
UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB1dlJlY3QsIHRleHR1cmVJZCwgaW9TdXJm
YWNlSWQsIGZsaXBwZWQsIGlvU3VyZmFjZVdpZHRoLCBpb1N1cmZhY2VIZWlnaHQsIGlvU3VyZmFj
ZVRleHR1cmVJZCkpOwogfQogCi1DQ1BsdWdpbkRyYXdRdWFkOjpDQ1BsdWdpbkRyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIpCitDQ1BsdWdpbkRyYXdRdWFkOjpDQ1BsdWdpbkRy
YXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVy
ZUlkLCB1aW50MzJfdCBpb1N1cmZhY2VJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lk
dGgsIGludCBpb1N1cmZhY2VIZWlnaHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCkKICAg
ICA6IENDRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpQbHVnaW5Db250ZW50
LCBxdWFkUmVjdCkKLSAgICAsIG1fbGF5ZXIobGF5ZXIpCisgICAgLCBtX3V2UmVjdCh1dlJlY3Qp
CisgICAgLCBtX3RleHR1cmVJZCh0ZXh0dXJlSWQpCisgICAgLCBtX2lvU3VyZmFjZUlkKGlvU3Vy
ZmFjZUlkKQorICAgICwgbV9mbGlwcGVkKGZsaXBwZWQpCisgICAgLCBtX2lvU3VyZmFjZVdpZHRo
KGlvU3VyZmFjZVdpZHRoKQorICAgICwgbV9pb1N1cmZhY2VIZWlnaHQoaW9TdXJmYWNlSGVpZ2h0
KQorICAgICwgbV9pb1N1cmZhY2VUZXh0dXJlSWQoaW9TdXJmYWNlVGV4dHVyZUlkKQogewotICAg
IEFTU0VSVChtX2xheWVyKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oCmlu
ZGV4IGNhNTJhYmVmNDA5MzE2NzVjM2EwN2I2ZWNjZDJmNDM2YWNkMWRlMzEuLjI5NWZiZWQ2NDUz
MGJlYTgxYmM1NjExNWVjYmU5YmJhZTY5ZmM3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdR
dWFkLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQ0NQbHVnaW5EcmF3UXVhZF9oCiAKICNp
bmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNiwxNCArMzcsMjYgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1BsdWdpbkRyYXdR
dWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUGx1
Z2luRHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luRHJh
d1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBD
Q0xheWVySW1wbCopOwotCi0gICAgQ0NMYXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllcjsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IGNyZWF0
ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCB1aW50MzJfdCBpb1N1cmZh
Y2VJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lkdGgsIGludCBpb1N1cmZhY2VIZWln
aHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCk7CiAKKyAgICBGbG9hdFJlY3QgdXZSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV91dlJlY3Q7IH0KKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBj
b25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgIHVpbnQzMl90IGlvU3VyZmFjZUlkKCkg
Y29uc3QgeyByZXR1cm4gbV9pb1N1cmZhY2VJZDsgfQorICAgIGJvb2wgZmxpcHBlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmxpcHBlZDsgfQorICAgIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCgp
IGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlVGV4dHVyZUlkOyB9CisgICAgaW50IGlvU3VyZmFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pb1N1cmZhY2VXaWR0aDsgfQorICAgIGludCBpb1N1
cmZhY2VIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lvU3VyZmFjZUhlaWdodDsgfQorICAgIAog
cHJpdmF0ZToKLSAgICBDQ1BsdWdpbkRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwg
Y29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisgICAgQ0NQbHVnaW5EcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCB1aW50MzJfdCBpb1N1cmZhY2VJZCwg
Ym9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlSGVpZ2h0LCBpbnQgaW9TdXJmYWNlV2lkdGgsIHVu
c2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCk7CiAKLSAgICBDQ0xheWVySW1wbCogbV9sYXllcjsK
KyAgICBGbG9hdFJlY3QgbV91dlJlY3Q7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CisgICAg
dWludDMyX3QgbV9pb1N1cmZhY2VJZDsKKyAgICBib29sIG1fZmxpcHBlZDsKKyAgICBpbnQgbV9p
b1N1cmZhY2VXaWR0aDsKKyAgICBpbnQgbV9pb1N1cmZhY2VIZWlnaHQ7CisgICAgdW5zaWduZWQg
bV9pb1N1cmZhY2VUZXh0dXJlSWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAKaW5kZXggYjIwYTJmNTE4MmM5M2UwMTIwOWRmZjNmMzVmYWI2MzgxNGFiNGI1Ni4u
MGI4MTZiODk5MjlkYjQwOTZhMGVjYzc5ZGU4M2ZjYmRkODMyMDFjOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzYsNDUgKzM2LDYgQEAKICNpbmNsdWRlICJjYy9D
Q1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSB7
Ci0KLXN0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGluZyB7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJv
Z3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChw
cm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwotICAgICAgICBwcm9ncmFtSWQgPSBw
cm9ncmFtLT5wcm9ncmFtKCk7Ci0gICAgICAgIHNhbXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZy
YWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCk7Ci0gICAgICAgIG1hdHJpeExvY2F0aW9u
ID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKLSAgICAgICAgYWxw
aGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwot
ICAgIH0KLSAgICBpbnQgcHJvZ3JhbUlkOwotICAgIGludCBzYW1wbGVyTG9jYXRpb247Ci0gICAg
aW50IG1hdHJpeExvY2F0aW9uOwotICAgIGludCBhbHBoYUxvY2F0aW9uOwotfTsKLQotc3RydWN0
IFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQot
ICAgIHsKLSAgICAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFtKTsKLSAgICAg
ICAgb2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5vZmZzZXRMb2NhdGlv
bigpOwotICAgICAgICBzY2FsZUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkuc2Nh
bGVMb2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQgb2Zmc2V0TG9jYXRpb247Ci0gICAgaW50IHNj
YWxlTG9jYXRpb247Ci19OwotCi1zdHJ1Y3QgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRp
bmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4g
dm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIFBsdWdpblByb2dyYW1C
aW5kaW5nOjpzZXQocHJvZ3JhbSk7Ci0gICAgICAgIHRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJv
Z3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKTsKLSAgICB9Ci0gICAg
aW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5
ZXJJbXBsKGludCBpZCkKQEAgLTgzLDkgKzQ0LDYgQEAgQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1
Z2luTGF5ZXJJbXBsKGludCBpZCkKICAgICAsIG1fZmxpcHBlZCh0cnVlKQogICAgICwgbV91dlJl
Y3QoMCwgMCwgMSwgMSkKICAgICAsIG1faW9TdXJmYWNlSWQoMCkKLSAgICAsIG1faW9TdXJmYWNl
V2lkdGgoMCkKLSAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KDApCi0gICAgLCBtX2lvU3VyZmFjZUNo
YW5nZWQoZmFsc2UpCiAgICAgLCBtX2lvU3VyZmFjZVRleHR1cmVJZCgwKQogewogfQpAQCAtOTUs
OTIgKzUzLDEwIEBAIENDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwoKQogICAg
IGNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdyhM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKLQotICAgIGlmIChtX2lvU3VyZmFjZUNoYW5nZWQpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCk7Ci0gICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3RhdGljX2Nh
c3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwotICAg
ICAgICBBU1NFUlQoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2lvc3VyZmFjZSIp
KTsKLSAgICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BUkJfdGV4dHVyZV9y
ZWN0YW5nbGUiKSk7Ci0KLSAgICAgICAgaWYgKCFtX2lvU3VyZmFjZVRleHR1cmVJZCkKLSAgICAg
ICAgICAgIG1faW9TdXJmYWNlVGV4dHVyZUlkID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwot
Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRl
eHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIG1faW9TdXJmYWNlVGV4
dHVyZUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4
dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9S
RUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVu
c2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7Ci0gICAgICAgIGV4
dGVuc2lvbnMtPnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTShFeHRlbnNpb25zM0Q6OlRFWFRV
UkVfUkVDVEFOR0xFX0FSQiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW9TdXJmYWNlV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW9TdXJmYWNlSWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKLSAgICAgICAgLy8gRG8g
bm90IGNoZWNrIGZvciBlcnJvciBjb25kaXRpb25zLiB0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01J
VU0gaXMgc3VwcG9zZWQgdG8gaG9sZCBvbiB0bwotICAgICAgICAvLyB0aGUgbGFzdCBnb29kIElP
U3VyZmFjZSBpZiB0aGUgbmV3IG9uZSBpcyBhbHJlYWR5IGNsb3NlZC4gVGhpcyBpcyBvbmx5IGEg
cG9zc2liaWxpdHkKLSAgICAgICAgLy8gZHVyaW5nIGxpdmUgcmVzaXppbmcgb2YgcGx1Z2lucy4g
SG93ZXZlciwgaXQgc2VlbXMgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvCi0gICAgICAg
IC8vIGNvbXBsZXRlbHkgZ3VhcmQgYWdhaW5zdCBnYXJiYWdlIGJlaW5nIGRyYXduLiBJZiB0aGlz
IGlzIGZvdW5kIHRvIGJlIGEgc2lnbmlmaWNhbnQgaXNzdWUsCi0gICAgICAgIC8vIGl0IG1heSBi
ZSBuZWNlc3NhcnkgdG8gZXhwbGljaXRseSB0ZWxsIHRoZSBlbWJlZGRlciB3aGVuIHRvIGZyZWUg
dGhlIHN1cmZhY2VzIGl0IGhhcwotICAgICAgICAvLyBhbGxvY2F0ZWQuCi0gICAgICAgIG1faW9T
dXJmYWNlQ2hhbmdlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtX2lvU3VyZmFjZVRleHR1
cmVJZCkgewotICAgICAgICBUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGluZyBiaW5kaW5n
OwotICAgICAgICBpZiAobV9mbGlwcGVkKQotICAgICAgICAgICAgYmluZGluZy5zZXQobGF5ZXJS
ZW5kZXJlci0+cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdpbkxheWVyVGV4UmVj
dFByb2dyYW0oKSk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXll
clJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29u
dGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIG1faW9TdXJmYWNlVGV4dHVyZUlkKSk7Ci0KLSAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnVzZVByb2dyYW0oYmluZGluZy5wcm9ncmFtSWQpKTsKLSAgICAgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOwotICAg
ICAgICAvLyBOb3RlOiB0aGlzIGNvZGUgcGF0aCBpZ25vcmVzIG1fdXZSZWN0LgotICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGJpbmRpbmcudGV4VHJhbnNmb3JtTG9jYXRp
b24sIDAsIDAsIG1faW9TdXJmYWNlV2lkdGgsIG1faW9TdXJmYWNlSGVpZ2h0KSk7Ci0gICAgICAg
IGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBib3VuZHMo
KS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJSZW5kZXJl
ci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmlu
ZGluZzsKLSAgICAgICAgaWYgKG1fZmxpcHBlZCkKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxh
eWVyUmVuZGVyZXItPnBsdWdpbkxheWVyUHJvZ3JhbUZsaXAoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdpbkxheWVyUHJvZ3JhbSgp
KTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXIt
PmNvbnRleHQoKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJl
SWQpKTsKLQotICAgICAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJz
IGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKLSAgICAg
ICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJlLgotICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSkpOwotCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKGJpbmRpbmcu
cHJvZ3JhbUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoYmlu
ZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnVuaWZvcm0yZihiaW5kaW5nLm9mZnNldExvY2F0aW9uLCBtX3V2UmVjdC54KCksIG1fdXZSZWN0
LnkoKSkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJmKGJpbmRpbmcu
c2NhbGVMb2NhdGlvbiwgbV91dlJlY3Qud2lkdGgoKSwgbV91dlJlY3QuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtKCksIGJv
dW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgpLCBsYXllclJl
bmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcuYWxwaGFMb2NhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci0gICAgfQotfQotCiB2b2lkIENDUGx1
Z2luTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwgY29uc3QgQ0NT
aGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKICAgICBJbnRSZWN0IHF1YWRSZWN0
KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NQbHVnaW5EcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsKKyAgICBxdWFk
TGlzdC5hcHBlbmQoQ0NQbHVnaW5EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVh
ZFJlY3QsIG1fdXZSZWN0LCBtX3RleHR1cmVJZCwgbV9pb1N1cmZhY2VJZCwgbV9mbGlwcGVkLCBt
X2lvU3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdodCwgbV9pb1N1cmZhY2VUZXh0dXJlSWQp
KTsKIH0KIAogdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKQEAgLTE5Miw5ICs2OCw2IEBAIHZvaWQgQ0NQ
bHVnaW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBp
bmRlbnQpIGNvbnN0CiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6OnNldElPU3VyZmFjZVByb3Bl
cnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1cmZhY2VJZCkKIHsKLSAg
ICBpZiAobV9pb1N1cmZhY2VJZCAhPSBpb1N1cmZhY2VJZCkKLSAgICAgICAgbV9pb1N1cmZhY2VD
aGFuZ2VkID0gdHJ1ZTsKLQogICAgIG1faW9TdXJmYWNlV2lkdGggPSB3aWR0aDsKICAgICBtX2lv
U3VyZmFjZUhlaWdodCA9IGhlaWdodDsKICAgICBtX2lvU3VyZmFjZUlkID0gaW9TdXJmYWNlSWQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAppbmRleCA5YjRkNWE0ZDM4ZjEzMWNhNTc5
NmY5ZGNlYjUyZWI5Yjc4OTJhODExLi4yYzNiMjZlMjJhNmRkMGRkNzZlM2VhYWRkZmE2OGNjMmY0
YWI4MjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKQEAgLTQ4LDggKzQ4LDYg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0QWxwaGE+IFRleFJlY3RQcm9ncmFt
OwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3Jt
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFscGhhPiBUZXhSZWN0UHJvZ3JhbUZsaXA7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLQogICAg
IHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVy
ZUlkID0gaWQ7IH0KQEAgLTU3LDYgKzU1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VVZSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyBtX3V2UmVjdCA9IHJlY3Q7IH0KICAgICB2b2lkIHNl
dElPU3VyZmFjZVByb3BlcnRpZXMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBpb1N1
cmZhY2VJZCk7CiAKKyAgICB2b2lkIHNldElPU3VyZmFjZVRleHR1cmVJZCh1bnNpZ25lZCBpb1N1
cmZhY2VUZXh0dXJlSWQpIHsgbV9pb1N1cmZhY2VUZXh0dXJlSWQgPSBpb1N1cmZhY2VUZXh0dXJl
SWQ7IH0KKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVySW1wbChpbnQpOwog
CkBAIC03Miw3ICs3Miw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1faW9TdXJmYWNlSGVpZ2h0Owog
CiAgICAgLy8gSW50ZXJuYWxzIGZvciB0aGUgSU9TdXJmYWNlIHJlbmRlcmluZyBwYXRoLgotICAg
IGJvb2wgbV9pb1N1cmZhY2VDaGFuZ2VkOwogICAgIHVuc2lnbmVkIG1faW9TdXJmYWNlVGV4dHVy
ZUlkOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123808</attachid>
            <date>2012-01-24 14:20:46 -0800</date>
            <delta_ts>2012-01-30 08:43:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76715-20120124172044.patch</filename>
            <type>text/plain</type>
            <size>26004</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1Nzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2QyMzhkOWZkY2I5YzBl
M2IyMDEyYTVlNTFiZjhlZjJkOWRhOTg5Mi4uMGFlZjg0ZDE1NDI5NTVkYzNiZGU1ZDViZDk4ZWY4
Y2ExMzM4YzdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAxLTI0ICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZWZhY3RvciBwbHVn
aW4gZHJhd2luZyB0byBiZSBtb3JlIGRhdGEgZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENDUGx1Z2luTGF5ZXJJbXBsIG5vIGxvbmdlciBoYW5k
bGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDUGx1Z2luRHJhd1F1
YWRzLgorICAgICAgICBUaGVzZSBxdWFkcyBhcmUgdGhlbiBkcmF3biBieSBMYXllclJlbmRlcmVy
Q2hyb21pdW0uCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yLCBzbyBubyBuZXcgdGVzdHMg
d2VyZSBhZGRlZC4KKyAgICAgICAgRmxhc2ggd2FzIHRlc3RlZCBtYW51YWxseSBvbiBMaW51eCBh
bmQgTWFjLgorICAgICAgICBSZWxldmVudCBsYXlvdXQgdGVzdHMgd2VyZSBydW4gb24gTGludXgg
YW5kIE1hYy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5Qcm9ncmFtQmluZGlu
Zzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGlu
Zzo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleFRyYW5zZm9ybVBsdWdpblByb2dyYW1CaW5k
aW5nOjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UGx1Z2luUXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVt
OjpQbHVnaW5MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTGF5ZXJDaHJvbWl1bTo6c2V0SU9TdXJmYWNlUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6Q0NQbHVnaW5EcmF3UXVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6dXZSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
UGx1Z2luRHJhd1F1YWQ6OnRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRy
YXdRdWFkOjppb1N1cmZhY2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFk
OjpmbGlwcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmlvU3VyZmFj
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmlvU3VyZmFjZUhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjppb1N1cmZhY2VUZXh0
dXJlSWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjpDQ1Bs
dWdpbkxheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6YXBw
ZW5kUXVhZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OnNldElPU3Vy
ZmFjZVByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1w
bDo6c2V0SU9TdXJmYWNlVGV4dHVyZUlkKToKKwogMjAxMi0wMS0xNiAgUm9iZXJ0IEhvZ2FuICA8
cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjEwMjA0MCk6IFdyb25n
IGNvbHVtbiB3aWR0aHMgd2hlbiByb3cgaGFzIGNvbHNwYW4gYW5kIHVud3JhcHBhYmxlIHRleHQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJiZGY4OWRhZjAxNjhj
YzgwNDE5NmJkOWYzMTNiMzBhODlmMzMxYzYuLjhiOGI5OTY3MDBkYjUxZmYwOTU1YWNiZTkzZTMy
MmI3MDYxOTcyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
Njk4LDEwICs2OTgsOTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdWaWRlb1F1
YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogICAgIGxheWVyLT5kcmF3KHRoaXMpOwog
fQogCitzdHJ1Y3QgUGx1Z2luUHJvZ3JhbUJpbmRpbmcgeworICAgIHRlbXBsYXRlPGNsYXNzIFBy
b2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCisgICAgeworICAgICAgICBBU1NFUlQo
cHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAgICAgICAgcHJvZ3JhbUlkID0g
cHJvZ3JhbS0+cHJvZ3JhbSgpOworICAgICAgICBzYW1wbGVyTG9jYXRpb24gPSBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpOworICAgICAgICBtYXRyaXhMb2NhdGlv
biA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgIGFs
cGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsK
KyAgICB9CisgICAgaW50IHByb2dyYW1JZDsKKyAgICBpbnQgc2FtcGxlckxvY2F0aW9uOworICAg
IGludCBtYXRyaXhMb2NhdGlvbjsKKyAgICBpbnQgYWxwaGFMb2NhdGlvbjsKK307CisKK3N0cnVj
dCBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7
CisgICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkK
KyAgICB7CisgICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7CisgICAg
ICAgIG9mZnNldExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkub2Zmc2V0TG9jYXRp
b24oKTsKKyAgICAgICAgc2NhbGVMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnNj
YWxlTG9jYXRpb24oKTsKKyAgICB9CisgICAgaW50IG9mZnNldExvY2F0aW9uOworICAgIGludCBz
Y2FsZUxvY2F0aW9uOworfTsKKworc3RydWN0IFRleFRyYW5zZm9ybVBsdWdpblByb2dyYW1CaW5k
aW5nIDogUGx1Z2luUHJvZ3JhbUJpbmRpbmcgeworICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+
IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCisgICAgeworICAgICAgICBQbHVnaW5Qcm9ncmFt
QmluZGluZzo6c2V0KHByb2dyYW0pOworICAgICAgICB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCk7CisgICAgfQorICAg
IGludCB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKK307CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3UGx1Z2luUXVhZChjb25zdCBDQ1BsdWdpbkRyYXdRdWFkKiBxdWFkKQogewotICAg
IENDTGF5ZXJJbXBsKiBsYXllciA9IHF1YWQtPmxheWVyKCk7Ci0gICAgbGF5ZXItPmRyYXcodGhp
cyk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKworICAgIGlmIChxdWFk
LT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkgeworICAgICAgICBUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9n
cmFtQmluZGluZyBiaW5kaW5nOworICAgICAgICBpZiAocXVhZC0+ZmxpcHBlZCgpKQorICAgICAg
ICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KHBsdWdpbkxheWVyVGV4UmVjdFByb2dy
YW0oKSk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCBxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkpOworCisgICAgICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOworICAgICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwg
MCkpOworICAgICAgICAvLyBOb3RlOiB0aGlzIGNvZGUgcGF0aCBpZ25vcmVzIHF1YWQtPnV2UmVj
dCgpLgorICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00ZihiaW5kaW5n
LnRleFRyYW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBxdWFkLT5pb1N1cmZhY2VXaWR0aCgpLCBxdWFk
LT5pb1N1cmZhY2VIZWlnaHQoKSkpOworICAgICAgICBjb25zdCBJbnRTaXplJiBib3VuZHMgPSBx
dWFkLT5xdWFkUmVjdCgpLnNpemUoKTsKKyAgICAgICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5s
YXllclRyYW5zZm9ybSgpLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpLCBxdWFkLT5v
cGFjaXR5KCksIHNoYXJlZEdlb21ldHJ5UXVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKKyAgICAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xF
X0FSQiwgMCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFt
QmluZGluZyBiaW5kaW5nOworICAgICAgICBpZiAocXVhZC0+ZmxpcHBlZCgpKQorICAgICAgICAg
ICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJQcm9ncmFtRmxpcCgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJQcm9ncmFtKCkpOworCisgICAgICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcXVhZC0+dGV4dHVyZUlkKCkpKTsK
KworICAgICAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5
IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKKyAgICAgICAgLy8g
d2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJlLgorICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGlj
c0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFKSk7CisKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShiaW5k
aW5nLnByb2dyYW1JZCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT51bmlmb3Jt
MWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcub2Zmc2V0TG9jYXRpb24sIHF1YWQtPnV2UmVjdCgp
LngoKSwgcXVhZC0+dXZSZWN0KCkueSgpKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
KCktPnVuaWZvcm0yZihiaW5kaW5nLnNjYWxlTG9jYXRpb24sIHF1YWQtPnV2UmVjdCgpLndpZHRo
KCksIHF1YWQtPnV2UmVjdCgpLmhlaWdodCgpKSk7CisgICAgICAgIGNvbnN0IEludFNpemUmIGJv
dW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgICAgICBkcmF3VGV4dHVyZWRRdWFk
KHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCks
IHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworICAgIH0KIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDA3OWFkMmVkZTk1NDc1NTgyYjg3MDcyOWE3
MWE1ZDYxYmQyOGFiNGIuLmY2NjEwYTU5YWM1N2MxNGZlZDU3NTdhYWJhN2I2ZWFlZmFhNWY2Yzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25z
M0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKQEAg
LTQ5LDExICs1MCw0OCBAQCBQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5MYXllckNocm9taXVt
KCkKICAgICAsIG1faW9TdXJmYWNlV2lkdGgoMCkKICAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KDAp
CiAgICAgLCBtX2lvU3VyZmFjZUlkKDApCisgICAgLCBtX2lvU3VyZmFjZUNoYW5nZWQoZmFsc2Up
CiB7CiB9CiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVy
JikKIHsKKyAgICBjb25zdCBJbnRTaXplIGlvU3VyZmFjZVNpemUgPSBJbnRTaXplKG1faW9TdXJm
YWNlV2lkdGgsIG1faW9TdXJmYWNlSGVpZ2h0KTsKKyAgICBjb25zdCBib29sIGlvU3VyZmFjZVRl
eHR1cmVJbnZhbGlkID0gbV9pb1N1cmZhY2VUZXh0dXJlICYmICFtX2lvU3VyZmFjZVRleHR1cmUt
PmlzVmFsaWQoaW9TdXJmYWNlU2l6ZSwgRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9B
UkIpOworCisgICAgaWYgKG1faW9TdXJmYWNlQ2hhbmdlZCB8fCBpb1N1cmZhY2VUZXh0dXJlSW52
YWxpZCkgeworICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRp
Y19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4ocmVuZGVyZXJDb250ZXh0LT5nZXRFeHRlbnNp
b25zKCkpOworICAgICAgICBBU1NFUlQoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVN
X2lvc3VyZmFjZSIpKTsKKyAgICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9B
UkJfdGV4dHVyZV9yZWN0YW5nbGUiKSk7CisKKyAgICAgICAgaWYgKCFtX2lvU3VyZmFjZVRleHR1
cmUgfHwgaW9TdXJmYWNlVGV4dHVyZUludmFsaWQpCisgICAgICAgICAgICBtX2lvU3VyZmFjZVRl
eHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKGxheWVyVHJlZUhvc3QoKS0+Y29udGVudHNU
ZXh0dXJlTWFuYWdlcigpKTsKKyAgICAgICAgCisgICAgICAgIEdMQyhyZW5kZXJlckNvbnRleHQs
IHJlbmRlcmVyQ29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKyAgICAgICAgR0xDKHJlbmRlcmVyQ29udGV4dCwgcmVuZGVyZXJDb250ZXh0LT5iaW5k
VGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgbV9pb1N1cmZhY2VU
ZXh0dXJlLT50ZXh0dXJlSWQoKSkpOworICAgICAgICBHTEMocmVuZGVyZXJDb250ZXh0LCByZW5k
ZXJlckNvbnRleHQtPnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKHJlbmRlcmVyQ29udGV4dCwgcmVuZGVyZXJD
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJC
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKSk7CisgICAgICAgIEdMQyhyZW5kZXJlckNvbnRleHQsIHJlbmRlcmVyQ29udGV4
dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSkpOworICAgICAgICBHTEMocmVuZGVyZXJDb250ZXh0LCByZW5kZXJlckNvbnRleHQt
PnRleFBhcmFtZXRlcmkoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpKTsKKyAgICAgICAgZXh0ZW5zaW9ucy0+dGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVN
KEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pb1N1cmZhY2VXaWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW9TdXJmYWNlSGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pb1N1
cmZhY2VJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDApOworCisgICAgICAgIC8vIERvIG5vdCBjaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucy4gdGV4
SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNIGlzIHN1cHBvc2VkIHRvIGhvbGQgb24gdG8KKyAgICAg
ICAgLy8gdGhlIGxhc3QgZ29vZCBJT1N1cmZhY2UgaWYgdGhlIG5ldyBvbmUgaXMgYWxyZWFkeSBj
bG9zZWQuIFRoaXMgaXMgb25seSBhIHBvc3NpYmlsaXR5CisgICAgICAgIC8vIGR1cmluZyBsaXZl
IHJlc2l6aW5nIG9mIHBsdWdpbnMuIEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyBub3Qg
c3VmZmljaWVudCB0bworICAgICAgICAvLyBjb21wbGV0ZWx5IGd1YXJkIGFnYWluc3QgZ2FyYmFn
ZSBiZWluZyBkcmF3bi4gSWYgdGhpcyBpcyBmb3VuZCB0byBiZSBhIHNpZ25pZmljYW50IGlzc3Vl
LAorICAgICAgICAvLyBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkgdGVsbCB0aGUg
ZW1iZWRkZXIgd2hlbiB0byBmcmVlIHRoZSBzdXJmYWNlcyBpdCBoYXMKKyAgICAgICAgLy8gYWxs
b2NhdGVkLgorCisgICAgICAgIG1faW9TdXJmYWNlQ2hhbmdlZCA9IGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChtX2lvU3VyZmFjZVRleHR1cmUpCisgICAgICAgIG1faW9TdXJmYWNlVGV4dHVyZS0+
cmVzZXJ2ZShJbnRTaXplKG1faW9TdXJmYWNlV2lkdGgsIG1faW9TdXJmYWNlSGVpZ2h0KSwgRXh0
ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIpOworCiAgICAgaWYgKCFtX25lZWRzRGlz
cGxheSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04OCw2ICsxMjYsOSBAQCB2b2lkIFBsdWdpbkxh
eWVyQ2hyb21pdW06OnNldFVWUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKIHZvaWQgUGx1
Z2luTGF5ZXJDaHJvbWl1bTo6c2V0SU9TdXJmYWNlUHJvcGVydGllcyhpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIHVpbnQzMl90IGlvU3VyZmFjZUlkKQogeworICAgIGlmIChtX2lvU3VyZmFjZUlkICE9
IGlvU3VyZmFjZUlkKQorICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQgPSB0cnVlOworCiAgICAg
bV9pb1N1cmZhY2VXaWR0aCA9IHdpZHRoOwogICAgIG1faW9TdXJmYWNlSGVpZ2h0ID0gaGVpZ2h0
OwogICAgIG1faW9TdXJmYWNlSWQgPSBpb1N1cmZhY2VJZDsKQEAgLTEwOCw2ICsxNDksOCBAQCB2
b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxh
eWVyKQogICAgIHBsdWdpbkxheWVyLT5zZXRGbGlwcGVkKG1fZmxpcHBlZCk7CiAgICAgcGx1Z2lu
TGF5ZXItPnNldFVWUmVjdChtX3V2UmVjdCk7CiAgICAgcGx1Z2luTGF5ZXItPnNldElPU3VyZmFj
ZVByb3BlcnRpZXMobV9pb1N1cmZhY2VXaWR0aCwgbV9pb1N1cmZhY2VIZWlnaHQsIG1faW9TdXJm
YWNlSWQpOworICAgIGlmIChtX2lvU3VyZmFjZVRleHR1cmUpCisgICAgICAgIHBsdWdpbkxheWVy
LT5zZXRJT1N1cmZhY2VUZXh0dXJlSWQobV9pb1N1cmZhY2VUZXh0dXJlLT50ZXh0dXJlSWQoKSk7
CiB9CiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBkaXJ0eVJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKaW5kZXggODQz
NjU2OTViYjFkZGM2NTIzMWFkZDA0ZjZmMGQ4MzAwMDkxZTBkMC4uYWRjNWY2MWYzZDkxZGJhMzNl
NWY1NTY0NDhkMDQ2MWYwMWE2YjVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaApA
QCAtMzAsNiArMzAsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDYgKzY5LDggQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9pb1N1cmZhY2VIZWlnaHQ7CiAgICAgdWludDMyX3QgbV9pb1N1cmZhY2VJZDsKICAgICBGbG9h
dFJlY3QgbV9kaXJ0eVJlY3Q7CisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiAgbV9pb1N1cmZh
Y2VUZXh0dXJlOworICAgIGJvb2wgbV9pb1N1cmZhY2VDaGFuZ2VkOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcAppbmRleCBmZDJhZTRiODYyOGY3ZmExMTQyZjk1NjE5
ZjFiYWU4Y2FkZGJmZmE3Li45ZDYxYmNiMjgxNzdjNzg3ZjE0MGJjYzRkYzAxOTc0ODlhZTUzNjM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkRyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcApAQCAtMjksMTYgKzI5LDIxIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1BsdWdpbkRyYXdRdWFkPiBD
Q1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1
YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikKK1Bh
c3NPd25QdHI8Q0NQbHVnaW5EcmF3UXVhZD4gQ0NQbHVnaW5EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCB1aW50MzJf
dCBpb1N1cmZhY2VJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lkdGgsIGludCBpb1N1
cmZhY2VIZWlnaHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCkKIHsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDUGx1Z2luRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
bGF5ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUGx1Z2luRHJhd1F1YWQoc2hhcmVk
UXVhZFN0YXRlLCBxdWFkUmVjdCwgdXZSZWN0LCB0ZXh0dXJlSWQsIGlvU3VyZmFjZUlkLCBmbGlw
cGVkLCBpb1N1cmZhY2VXaWR0aCwgaW9TdXJmYWNlSGVpZ2h0LCBpb1N1cmZhY2VUZXh0dXJlSWQp
KTsKIH0KIAotQ0NQbHVnaW5EcmF3UXVhZDo6Q0NQbHVnaW5EcmF3UXVhZChjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NM
YXllckltcGwqIGxheWVyKQorQ0NQbHVnaW5EcmF3UXVhZDo6Q0NQbHVnaW5EcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIHVuc2lnbmVkIHRleHR1cmVJZCwgdWludDMy
X3QgaW9TdXJmYWNlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3VyZmFjZVdpZHRoLCBpbnQgaW9T
dXJmYWNlSGVpZ2h0LCB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJlSWQpCiAgICAgOiBDQ0RyYXdR
dWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UGx1Z2luQ29udGVudCwgcXVhZFJlY3Qp
Ci0gICAgLCBtX2xheWVyKGxheWVyKQorICAgICwgbV91dlJlY3QodXZSZWN0KQorICAgICwgbV90
ZXh0dXJlSWQodGV4dHVyZUlkKQorICAgICwgbV9pb1N1cmZhY2VJZChpb1N1cmZhY2VJZCkKKyAg
ICAsIG1fZmxpcHBlZChmbGlwcGVkKQorICAgICwgbV9pb1N1cmZhY2VXaWR0aChpb1N1cmZhY2VX
aWR0aCkKKyAgICAsIG1faW9TdXJmYWNlSGVpZ2h0KGlvU3VyZmFjZUhlaWdodCkKKyAgICAsIG1f
aW9TdXJmYWNlVGV4dHVyZUlkKGlvU3VyZmFjZVRleHR1cmVJZCkKIHsKLSAgICBBU1NFUlQobV9s
YXllcik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaAppbmRleCBjYTUyYWJl
ZjQwOTMxNjc1YzNhMDdiNmVjY2QyZjQzNmFjZDFkZTMxLi40ZjcyOTY3Y2VkY2U5YWU2Nzk0ZjZi
YTI4OWMwYTExMDRiYjJkM2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oCkBAIC0z
NiwxNCArMzYsMjYgQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1BsdWdpbkRyYXdRdWFk
IDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUGx1Z2lu
RHJhd1F1YWQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1
YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xh
eWVySW1wbCopOwotCi0gICAgQ0NMYXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9s
YXllcjsgfQotCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQbHVnaW5EcmF3UXVhZD4gY3JlYXRl
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIHVpbnQzMl90IGlvU3VyZmFj
ZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VXaWR0aCwgaW50IGlvU3VyZmFjZUhlaWdo
dCwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKTsKKworICAgIEZsb2F0UmVjdCB1dlJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3V2UmVjdDsgfQorICAgIHVuc2lnbmVkIHRleHR1cmVJZCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgdWludDMyX3QgaW9TdXJmYWNlSWQoKSBj
b25zdCB7IHJldHVybiBtX2lvU3VyZmFjZUlkOyB9CisgICAgYm9vbCBmbGlwcGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9mbGlwcGVkOyB9CisgICAgaW50IGlvU3VyZmFjZVdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9pb1N1cmZhY2VXaWR0aDsgfQorICAgIGludCBpb1N1cmZhY2VIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2lvU3VyZmFjZUhlaWdodDsgfQorICAgIHVuc2lnbmVkIGlvU3VyZmFjZVRl
eHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlVGV4dHVyZUlkOyB9CisgICAgCiBw
cml2YXRlOgotICAgIENDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBj
b25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqKTsKLQotICAgIENDTGF5ZXJJbXBsKiBtX2xheWVy
OworICAgIENDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIHVuc2lnbmVkIHRleHR1
cmVJZCwgdWludDMyX3QgaW9TdXJmYWNlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3VyZmFjZUhl
aWdodCwgaW50IGlvU3VyZmFjZVdpZHRoLCB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJlSWQpOwor
CisgICAgRmxvYXRSZWN0IG1fdXZSZWN0OworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAg
IHVpbnQzMl90IG1faW9TdXJmYWNlSWQ7CisgICAgYm9vbCBtX2ZsaXBwZWQ7CisgICAgaW50IG1f
aW9TdXJmYWNlV2lkdGg7CisgICAgaW50IG1faW9TdXJmYWNlSGVpZ2h0OworICAgIHVuc2lnbmVk
IG1faW9TdXJmYWNlVGV4dHVyZUlkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuY3BwCmluZGV4IGIyMGEyZjUxODJjOTNlMDEyMDlkZmYzZjM1ZmFiNjM4MTRhYjRiNTYu
LjBiODE2Yjg5OTI5ZGI0MDk2YTBlY2M3OWRlODNmY2JkZDgzMjAxYzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKQEAgLTM2LDQ1ICszNiw2IEBACiAjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2Ug
ewotCi1zdHJ1Y3QgUGx1Z2luUHJvZ3JhbUJpbmRpbmcgewotICAgIHRlbXBsYXRlPGNsYXNzIFBy
b2dyYW0+IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCi0gICAgewotICAgICAgICBBU1NFUlQo
cHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICAgICAgcHJvZ3JhbUlkID0g
cHJvZ3JhbS0+cHJvZ3JhbSgpOwotICAgICAgICBzYW1wbGVyTG9jYXRpb24gPSBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpOwotICAgICAgICBtYXRyaXhMb2NhdGlv
biA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7Ci0gICAgICAgIGFs
cGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsK
LSAgICB9Ci0gICAgaW50IHByb2dyYW1JZDsKLSAgICBpbnQgc2FtcGxlckxvY2F0aW9uOwotICAg
IGludCBtYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgYWxwaGFMb2NhdGlvbjsKLX07Ci0KLXN0cnVj
dCBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkK
LSAgICB7Ci0gICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7Ci0gICAg
ICAgIG9mZnNldExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkub2Zmc2V0TG9jYXRp
b24oKTsKLSAgICAgICAgc2NhbGVMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnNj
YWxlTG9jYXRpb24oKTsKLSAgICB9Ci0gICAgaW50IG9mZnNldExvY2F0aW9uOwotICAgIGludCBz
Y2FsZUxvY2F0aW9uOwotfTsKLQotc3RydWN0IFRleFRyYW5zZm9ybVBsdWdpblByb2dyYW1CaW5k
aW5nIDogUGx1Z2luUHJvZ3JhbUJpbmRpbmcgewotICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+
IHZvaWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCi0gICAgewotICAgICAgICBQbHVnaW5Qcm9ncmFt
QmluZGluZzo6c2V0KHByb2dyYW0pOwotICAgICAgICB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbiA9IHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLnRleFRyYW5zZm9ybUxvY2F0aW9uKCk7Ci0gICAgfQotICAg
IGludCB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxh
eWVySW1wbChpbnQgaWQpCkBAIC04Myw5ICs0NCw2IEBAIENDUGx1Z2luTGF5ZXJJbXBsOjpDQ1Bs
dWdpbkxheWVySW1wbChpbnQgaWQpCiAgICAgLCBtX2ZsaXBwZWQodHJ1ZSkKICAgICAsIG1fdXZS
ZWN0KDAsIDAsIDEsIDEpCiAgICAgLCBtX2lvU3VyZmFjZUlkKDApCi0gICAgLCBtX2lvU3VyZmFj
ZVdpZHRoKDApCi0gICAgLCBtX2lvU3VyZmFjZUhlaWdodCgwKQotICAgICwgbV9pb1N1cmZhY2VD
aGFuZ2VkKGZhbHNlKQogICAgICwgbV9pb1N1cmZhY2VUZXh0dXJlSWQoMCkKIHsKIH0KQEAgLTk1
LDkyICs1MywxMCBAQCBDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKICAg
ICBjbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXco
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9pb1N1cmZhY2VDaGFuZ2VkKSB7Ci0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOwotICAgICAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19j
YXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKLSAg
ICAgICAgQVNTRVJUKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9pb3N1cmZhY2Ui
KSk7Ci0gICAgICAgIEFTU0VSVChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQVJCX3RleHR1cmVf
cmVjdGFuZ2xlIikpOwotCi0gICAgICAgIGlmICghbV9pb1N1cmZhY2VUZXh0dXJlSWQpCi0gICAg
ICAgICAgICBtX2lvU3VyZmFjZVRleHR1cmVJZCA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsK
LQotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCBtX2lvU3VyZmFjZVRl
eHR1cmVJZCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShF
eHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
UkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9f
RURHRSkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShFeHRl
bnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgICAgICBl
eHRlbnNpb25zLT50ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oRXh0ZW5zaW9uczNEOjpURVhU
VVJFX1JFQ1RBTkdMRV9BUkIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2lvU3VyZmFjZVdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pb1N1cmZhY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lvU3VyZmFjZUlkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0gICAgICAgIC8vIERv
IG5vdCBjaGVjayBmb3IgZXJyb3IgY29uZGl0aW9ucy4gdGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9N
SVVNIGlzIHN1cHBvc2VkIHRvIGhvbGQgb24gdG8KLSAgICAgICAgLy8gdGhlIGxhc3QgZ29vZCBJ
T1N1cmZhY2UgaWYgdGhlIG5ldyBvbmUgaXMgYWxyZWFkeSBjbG9zZWQuIFRoaXMgaXMgb25seSBh
IHBvc3NpYmlsaXR5Ci0gICAgICAgIC8vIGR1cmluZyBsaXZlIHJlc2l6aW5nIG9mIHBsdWdpbnMu
IEhvd2V2ZXIsIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0bwotICAgICAg
ICAvLyBjb21wbGV0ZWx5IGd1YXJkIGFnYWluc3QgZ2FyYmFnZSBiZWluZyBkcmF3bi4gSWYgdGhp
cyBpcyBmb3VuZCB0byBiZSBhIHNpZ25pZmljYW50IGlzc3VlLAotICAgICAgICAvLyBpdCBtYXkg
YmUgbmVjZXNzYXJ5IHRvIGV4cGxpY2l0bHkgdGVsbCB0aGUgZW1iZWRkZXIgd2hlbiB0byBmcmVl
IHRoZSBzdXJmYWNlcyBpdCBoYXMKLSAgICAgICAgLy8gYWxsb2NhdGVkLgotICAgICAgICBtX2lv
U3VyZmFjZUNoYW5nZWQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAobV9pb1N1cmZhY2VUZXh0
dXJlSWQpIHsKLSAgICAgICAgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgYmluZGlu
ZzsKLSAgICAgICAgaWYgKG1fZmxpcHBlZCkKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVy
UmVuZGVyZXItPnBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclRleFJl
Y3RQcm9ncmFtKCkpOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCBtX2lvU3VyZmFjZVRleHR1cmVJZCkpOwotCi0gICAgICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7Ci0gICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAg
ICAgICAgLy8gTm90ZTogdGhpcyBjb2RlIHBhdGggaWdub3JlcyBtX3V2UmVjdC4KLSAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihiaW5kaW5nLnRleFRyYW5zZm9ybUxvY2F0
aW9uLCAwLCAwLCBtX2lvU3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdodCkpOwotICAgICAg
ICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFuc2Zvcm0oKSwgYm91bmRz
KCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCksIGxheWVyUmVuZGVy
ZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVGV4U3RyZXRjaFBsdWdpblByb2dyYW1CaW5kaW5nIGJp
bmRpbmc7Ci0gICAgICAgIGlmIChtX2ZsaXBwZWQpCi0gICAgICAgICAgICBiaW5kaW5nLnNldChs
YXllclJlbmRlcmVyLT5wbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclByb2dyYW0o
KSk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVy
LT5jb250ZXh0KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fdGV4dHVy
ZUlkKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVy
cyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlCi0gICAg
ICAgIC8vIHdoZXJlIGl0IHdpbGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4dHVyZS4KLSAgICAg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpKTsKLQotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShiaW5kaW5n
LnByb2dyYW1JZCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKGJp
bmRpbmcuc2FtcGxlckxvY2F0aW9uLCAwKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT51bmlmb3JtMmYoYmluZGluZy5vZmZzZXRMb2NhdGlvbiwgbV91dlJlY3QueCgpLCBtX3V2UmVj
dC55KCkpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0yZihiaW5kaW5n
LnNjYWxlTG9jYXRpb24sIG1fdXZSZWN0LndpZHRoKCksIG1fdXZSZWN0LmhlaWdodCgpKSk7Ci0g
ICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgpLCBi
b3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5ZXJS
ZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotICAgIH0KLX0KLQogdm9pZCBDQ1Bs
dWdpbkxheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7CiAgICAgSW50UmVjdCBxdWFkUmVj
dChJbnRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5kKENDUGx1Z2luRHJh
d1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0aGlzKSk7CisgICAgcXVh
ZExpc3QuYXBwZW5kKENDUGx1Z2luRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1
YWRSZWN0LCBtX3V2UmVjdCwgbV90ZXh0dXJlSWQsIG1faW9TdXJmYWNlSWQsIG1fZmxpcHBlZCwg
bV9pb1N1cmZhY2VXaWR0aCwgbV9pb1N1cmZhY2VIZWlnaHQsIG1faW9TdXJmYWNlVGV4dHVyZUlk
KSk7CiB9CiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4
dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CkBAIC0xOTIsOSArNjgsNiBAQCB2b2lkIEND
UGx1Z2luTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdAogCiB2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpzZXRJT1N1cmZhY2VQcm9w
ZXJ0aWVzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQpCiB7Ci0g
ICAgaWYgKG1faW9TdXJmYWNlSWQgIT0gaW9TdXJmYWNlSWQpCi0gICAgICAgIG1faW9TdXJmYWNl
Q2hhbmdlZCA9IHRydWU7Ci0KICAgICBtX2lvU3VyZmFjZVdpZHRoID0gd2lkdGg7CiAgICAgbV9p
b1N1cmZhY2VIZWlnaHQgPSBoZWlnaHQ7CiAgICAgbV9pb1N1cmZhY2VJZCA9IGlvU3VyZmFjZUlk
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggOWI0ZDVhNGQzOGYxMzFjYTU3
OTZmOWRjZWI1MmViOWI3ODkyYTgxMS4uMmMzYjI2ZTIyYTZkZDBkZDc2ZTNlYWFkZGZhNjhjYzJm
NGFiODI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC00OCw4ICs0OCw2
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1Rl
eFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhPiBUZXhSZWN0UHJvZ3Jh
bTsKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9y
bSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBoYT4gVGV4UmVjdFByb2dyYW1GbGlw
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVu
dCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1
cmVJZCA9IGlkOyB9CkBAIC01Nyw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVWUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV91dlJlY3QgPSByZWN0OyB9CiAgICAgdm9pZCBz
ZXRJT1N1cmZhY2VQcm9wZXJ0aWVzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9T
dXJmYWNlSWQpOwogCisgICAgdm9pZCBzZXRJT1N1cmZhY2VUZXh0dXJlSWQodW5zaWduZWQgaW9T
dXJmYWNlVGV4dHVyZUlkKSB7IG1faW9TdXJmYWNlVGV4dHVyZUlkID0gaW9TdXJmYWNlVGV4dHVy
ZUlkOyB9CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXllckltcGwoaW50KTsK
IApAQCAtNzIsNyArNzIsNiBAQCBwcml2YXRlOgogICAgIGludCBtX2lvU3VyZmFjZUhlaWdodDsK
IAogICAgIC8vIEludGVybmFscyBmb3IgdGhlIElPU3VyZmFjZSByZW5kZXJpbmcgcGF0aC4KLSAg
ICBib29sIG1faW9TdXJmYWNlQ2hhbmdlZDsKICAgICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1
cmVJZDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124560</attachid>
            <date>2012-01-30 08:43:25 -0800</date>
            <delta_ts>2012-01-30 09:03:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76715-20120130114323.patch</filename>
            <type>text/plain</type>
            <size>19648</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY3ODFiNzFmMWQ3OWE4
Yjg0MDBiMzM4ZDk2ZWJhYzQ1ZWFkNTljZC4uMDljMjQ3MDE3NTExNTlhNWE5OWYwMjA2ZDBkNGIy
MzRhNDhjMTU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTMwICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZWZhY3RvciBwbHVn
aW4gZHJhd2luZyB0byBiZSBtb3JlIGRhdGEgZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENDUGx1Z2luTGF5ZXJJbXBsIG5vIGxvbmdlciBoYW5k
bGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDUGx1Z2luRHJhd1F1
YWRzLgorICAgICAgICBUaGVzZSBxdWFkcyBhcmUgdGhlbiBkcmF3biBieSBMYXllclJlbmRlcmVy
Q2hyb21pdW0uCisKKyAgICAgICAgQ0NMYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSopIGlzIGNhbGxlZCBkaXJlY3RseSBiZWZvcmUgYXBwZW5kUXVhZHMuCisgICAgICAg
IFRoaXMgYWxsb3dzIGZvciBDQ0xheWVySW1wbCBvYmplY3RzIHRvIGFsbG9jYXRlIHRleHR1cmVz
IGJlZm9yZSBhcHBlbmRRdWFkcyBpcyBjYWxsZWQuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFj
dG9yLCBzbyBubyBuZXcgdGVzdHMgd2VyZSBhZGRlZC4KKyAgICAgICAgRmxhc2ggd2FzIHRlc3Rl
ZCBtYW51YWxseSBvbiBMaW51eCBhbmQgTWFjLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQpOgorICAgICAgICAoUGx1Z2luUHJvZ3JhbUJpbmRp
bmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXhTdHJldGNoUGx1
Z2luUHJvZ3JhbUJpbmRpbmc6OnNldCk6CisgICAgICAgIChUZXhTdHJldGNoUGx1Z2luUHJvZ3Jh
bUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJp
bmRpbmc6OnNldCk6CisgICAgICAgIChUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3
UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6Q0NQbHVnaW5EcmF3UXVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5o
OgorICAgICAgICAoQ0NQbHVnaW5EcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdp
bkRyYXdRdWFkOjp1dlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6
dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmlvU3VyZmFj
ZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmZsaXBwZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6aW9TdXJmYWNlV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6aW9TdXJmYWNlSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmlvU3VyZmFjZVRleHR1cmVJZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaDoKKyAgICAgICAg
KENDUGx1Z2luTGF5ZXJJbXBsKToKKwogMjAxMi0wMS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlz
dGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZjM2N2Vm
OWU3ODA3MjE0NGUyYjA1YTMxMWEyZjk4OWViNzBjMTE4Yy4uZTU2MTMwNGNjZDRkNTliOTY3OWY1
ZGNmZTVkMGQxZjkwN2NlOTljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCkBAIC03MDAsMTAgKzcwMCw5MiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAgICAgbGF5ZXItPmRyYXco
dGhpcyk7CiB9CiAKK3N0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8
Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgICAgICBwcm9n
cmFtSWQgPSBwcm9ncmFtLT5wcm9ncmFtKCk7CisgICAgICAgIHNhbXBsZXJMb2NhdGlvbiA9IHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCk7CisgICAgICAgIG1hdHJp
eExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAg
ICAgICAgYWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2Nh
dGlvbigpOworICAgIH0KKyAgICBpbnQgcHJvZ3JhbUlkOworICAgIGludCBzYW1wbGVyTG9jYXRp
b247CisgICAgaW50IG1hdHJpeExvY2F0aW9uOworICAgIGludCBhbHBoYUxvY2F0aW9uOworfTsK
Kworc3RydWN0IFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1C
aW5kaW5nIHsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBw
cm9ncmFtKQorICAgIHsKKyAgICAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFt
KTsKKyAgICAgICAgb2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5vZmZz
ZXRMb2NhdGlvbigpOworICAgICAgICBzY2FsZUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkuc2NhbGVMb2NhdGlvbigpOworICAgIH0KKyAgICBpbnQgb2Zmc2V0TG9jYXRpb247Cisg
ICAgaW50IHNjYWxlTG9jYXRpb247Cit9OworCitzdHJ1Y3QgVGV4VHJhbnNmb3JtUGx1Z2luUHJv
Z3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
UHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAgIFBsdWdp
blByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7CisgICAgICAgIHRleFRyYW5zZm9ybUxvY2F0
aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24oKTsKKyAg
ICB9CisgICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOworfTsKKwogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQqIHF1YWQp
CiB7Ci0gICAgQ0NMYXllckltcGwqIGxheWVyID0gcXVhZC0+bGF5ZXIoKTsKLSAgICBsYXllci0+
ZHJhdyh0aGlzKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworCisgICAg
aWYgKHF1YWQtPmlvU3VyZmFjZVRleHR1cmVJZCgpKSB7CisgICAgICAgIFRleFRyYW5zZm9ybVBs
dWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAgIGlmIChxdWFkLT5mbGlwcGVkKCkp
CisgICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclRleFJlY3RQcm9ncmFtRmxpcCgp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5ZXJUZXhS
ZWN0UHJvZ3JhbSgpKTsKKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RB
TkdMRV9BUkIsIHF1YWQtPmlvU3VyZmFjZVRleHR1cmVJZCgpKSk7CisKKyAgICAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7CisgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKGJpbmRpbmcuc2FtcGxlckxv
Y2F0aW9uLCAwKSk7CisgICAgICAgIC8vIE5vdGU6IHRoaXMgY29kZSBwYXRoIGlnbm9yZXMgcXVh
ZC0+dXZSZWN0KCkuCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRm
KGJpbmRpbmcudGV4VHJhbnNmb3JtTG9jYXRpb24sIDAsIDAsIHF1YWQtPmlvU3VyZmFjZVdpZHRo
KCksIHF1YWQtPmlvU3VyZmFjZUhlaWdodCgpKSk7CisgICAgICAgIGNvbnN0IEludFNpemUmIGJv
dW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgICAgICBkcmF3VGV4dHVyZWRRdWFk
KHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCks
IHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworICAgICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9S
RUNUQU5HTEVfQVJCLCAwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4U3RyZXRjaFBsdWdp
blByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAgIGlmIChxdWFkLT5mbGlwcGVkKCkpCisg
ICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclByb2dyYW0oKSk7CisK
KyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT50ZXh0dXJl
SWQoKSkpOworCisgICAgICAgIC8vIEZJWE1FOiBzZXR0aW5nIHRoZSB0ZXh0dXJlIHBhcmFtZXRl
cnMgZXZlcnkgdGltZSBpcyByZWR1bmRhbnQuIE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVyZQorICAg
ICAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRleHR1cmUuCisgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQo
KS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikp
OworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Ms
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKKworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT51c2VQcm9n
cmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCkt
PnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgICAgICBHTEMoY29u
dGV4dCwgY29udGV4dCgpLT51bmlmb3JtMmYoYmluZGluZy5vZmZzZXRMb2NhdGlvbiwgcXVhZC0+
dXZSZWN0KCkueCgpLCBxdWFkLT51dlJlY3QoKS55KCkpKTsKKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcuc2NhbGVMb2NhdGlvbiwgcXVhZC0+dXZSZWN0
KCkud2lkdGgoKSwgcXVhZC0+dXZSZWN0KCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgY29uc3QgSW50
U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7CisgICAgICAgIGRyYXdUZXh0
dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5o
ZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcuYWxwaGFMb2Nh
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7CisgICAg
fQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDAwZTBhZGY4YTUxZmRlYzA0YTlmNDI1ZjA0NTdhYTMz
ODhjZWEzYWEuLjdiYWUyMDE3NDRiNGVjMjA4MTRmMzA1MjhhYjZiY2YyZDJkODc5MmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaApAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKik7CiAgICAgdm9pZCBhcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NRdWFkTGlz
dCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggYzlkZWQ5OGIyMDExM2IyYjFlODUzODY2NzhhY2Iz
M2JhMWZmMjAwMy4uOTBjMzFjNDZmMDQzZDc3ZTk0ZjQwMmJmMDk4ZGZmYmM5ZjYxNDBjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTIyNiw2ICsyMjYsOCBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhDQ1JlbmRl
clBhc3NMaXN0JiBwYXNzZXMpCiAgICAgICAgICAgICBpZiAobGF5ZXItPnZpc2libGVMYXllclJl
Y3QoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAg
IGxheWVyLT53aWxsRHJhdyhtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOworCiAgICAgICAgICAgICBp
ZiAoQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rhcmdl
dChsYXllciwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKSkgewogICAgICAgICAgICAgICAgIHBh
c3MtPmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKGxheWVyKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAKaW5kZXggZmQy
YWU0Yjg2MjhmN2ZhMTE0MmY5NTYxOWYxYmFlOGNhZGRiZmZhNy4uODUyODkxNDFkNTI5NTJmNGM2
NmU2NjNlMTdmNjZiZTUyMzdmZDVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5j
cHAKQEAgLTI5LDE2ICsyOSwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25Q
dHI8Q0NQbHVnaW5EcmF3UXVhZD4gQ0NQbHVnaW5EcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBD
Q0xheWVySW1wbCogbGF5ZXIpCitQYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IENDUGx1Z2lu
RHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRl
LCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB1dlJlY3QsIHVuc2ln
bmVkIHRleHR1cmVJZCwgYm9vbCBmbGlwcGVkLCBpbnQgaW9TdXJmYWNlV2lkdGgsIGludCBpb1N1
cmZhY2VIZWlnaHQsIHVuc2lnbmVkIGlvU3VyZmFjZVRleHR1cmVJZCkKIHsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDUGx1Z2luRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
bGF5ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUGx1Z2luRHJhd1F1YWQoc2hhcmVk
UXVhZFN0YXRlLCBxdWFkUmVjdCwgdXZSZWN0LCB0ZXh0dXJlSWQsIGZsaXBwZWQsIGlvU3VyZmFj
ZVdpZHRoLCBpb1N1cmZhY2VIZWlnaHQsIGlvU3VyZmFjZVRleHR1cmVJZCkpOwogfQogCi1DQ1Bs
dWdpbkRyYXdRdWFkOjpDQ1BsdWdpbkRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBz
aGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5
ZXIpCitDQ1BsdWdpbkRyYXdRdWFkOjpDQ1BsdWdpbkRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCBib29sIGZsaXBwZWQsIGludCBp
b1N1cmZhY2VXaWR0aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgdW5zaWduZWQgaW9TdXJmYWNlVGV4
dHVyZUlkKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIENDRHJhd1F1YWQ6OlBs
dWdpbkNvbnRlbnQsIHF1YWRSZWN0KQotICAgICwgbV9sYXllcihsYXllcikKKyAgICAsIG1fdXZS
ZWN0KHV2UmVjdCkKKyAgICAsIG1fdGV4dHVyZUlkKHRleHR1cmVJZCkKKyAgICAsIG1fZmxpcHBl
ZChmbGlwcGVkKQorICAgICwgbV9pb1N1cmZhY2VXaWR0aChpb1N1cmZhY2VXaWR0aCkKKyAgICAs
IG1faW9TdXJmYWNlSGVpZ2h0KGlvU3VyZmFjZUhlaWdodCkKKyAgICAsIG1faW9TdXJmYWNlVGV4
dHVyZUlkKGlvU3VyZmFjZVRleHR1cmVJZCkKIHsKLSAgICBBU1NFUlQobV9sYXllcik7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luRHJhd1F1YWQuaAppbmRleCBjYTUyYWJlZjQwOTMxNjc1YzNh
MDdiNmVjY2QyZjQzNmFjZDFkZTMxLi4zMWEyNjBkNDM0ZjBiZTM1MTBiNmJhMWEyZDNkNjNmNzI5
NDBjMDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oCkBAIC0zNiwxNCArMzYsMjUg
QEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1BsdWdpbkRyYXdRdWFkIDogcHVibGljIEND
RHJhd1F1YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUGx1Z2luRHJhd1F1YWQpOwog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IGNyZWF0ZShj
b25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUGx1Z2luRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1No
YXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHV2UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VX
aWR0aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgdW5zaWduZWQgbV9pb1N1cmZhY2VUZXh0dXJlSWQp
OwogCi0gICAgQ0NMYXllckltcGwqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcjsgfQor
ICAgIEZsb2F0UmVjdCB1dlJlY3QoKSBjb25zdCB7IHJldHVybiBtX3V2UmVjdDsgfQorICAgIHVu
c2lnbmVkIHRleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlkOyB9CisgICAgYm9v
bCBmbGlwcGVkKCkgY29uc3QgeyByZXR1cm4gbV9mbGlwcGVkOyB9CisgICAgaW50IGlvU3VyZmFj
ZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9pb1N1cmZhY2VXaWR0aDsgfQorICAgIGludCBpb1N1
cmZhY2VIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2lvU3VyZmFjZUhlaWdodDsgfQogCisgICAg
dW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV9pb1N1cmZhY2VU
ZXh0dXJlSWQ7IH0KKyAgICAKIHByaXZhdGU6Ci0gICAgQ0NQbHVnaW5EcmF3UXVhZChjb25zdCBD
Q1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCopOwotCi0gICAg
Q0NMYXllckltcGwqIG1fbGF5ZXI7CisgICAgQ0NQbHVnaW5EcmF3UXVhZChjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2
UmVjdCwgdW5zaWduZWQgdGV4dHVyZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VXaWR0
aCwgaW50IGlvU3VyZmFjZUhlaWdodCwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKTsKKwor
ICAgIEZsb2F0UmVjdCBtX3V2UmVjdDsKKyAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICBi
b29sIG1fZmxpcHBlZDsKKyAgICBpbnQgbV9pb1N1cmZhY2VXaWR0aDsKKyAgICBpbnQgbV9pb1N1
cmZhY2VIZWlnaHQ7CisgICAgdW5zaWduZWQgbV9pb1N1cmZhY2VUZXh0dXJlSWQ7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKaW5kZXggYjIwYTJmNTE4MmM5M2Uw
MTIwOWRmZjNmMzVmYWI2MzgxNGFiNGI1Ni4uNWU0YWNhNmQ5OGJhYmYxMWY0MmRlN2QyNmJkNWZm
YTA1MjNmOTE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzYs
NDUgKzM2LDYgQEAKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGlu
ZyB7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3Jh
bSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVk
KCkpOwotICAgICAgICBwcm9ncmFtSWQgPSBwcm9ncmFtLT5wcm9ncmFtKCk7Ci0gICAgICAgIHNh
bXBsZXJMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9u
KCk7Ci0gICAgICAgIG1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKTsKLSAgICAgICAgYWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQgcHJvZ3JhbUlkOwotICAg
IGludCBzYW1wbGVyTG9jYXRpb247Ci0gICAgaW50IG1hdHJpeExvY2F0aW9uOwotICAgIGludCBh
bHBoYUxvY2F0aW9uOwotfTsKLQotc3RydWN0IFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGlu
ZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2
b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgUGx1Z2luUHJvZ3JhbUJp
bmRpbmc6OnNldChwcm9ncmFtKTsKLSAgICAgICAgb2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5vZmZzZXRMb2NhdGlvbigpOwotICAgICAgICBzY2FsZUxvY2F0aW9uID0g
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkuc2NhbGVMb2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQg
b2Zmc2V0TG9jYXRpb247Ci0gICAgaW50IHNjYWxlTG9jYXRpb247Ci19OwotCi1zdHJ1Y3QgVGV4
VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKLSAg
ICB7Ci0gICAgICAgIFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7Ci0gICAgICAg
IHRleFRyYW5zZm9ybUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNm
b3JtTG9jYXRpb24oKTsKLSAgICB9Ci0gICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOwotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ0NQ
bHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKGludCBpZCkKQEAgLTk1LDEwICs1Niw4
IEBAIENDUGx1Z2luTGF5ZXJJbXBsOjp+Q0NQbHVnaW5MYXllckltcGwoKQogICAgIGNsZWFudXBS
ZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjp3aWxs
RHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiB7Ci0gICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKLQogICAgIGlmIChtX2lvU3VyZmFjZUNoYW5nZWQp
IHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyLT5j
b250ZXh0KCk7CiAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25zID0gc3Rh
dGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkp
OwpAQCAtMTI3LDYwICs4NiwxMiBAQCB2b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICAgICAgLy8gYWxsb2NhdGVkLgog
ICAgICAgICBtX2lvU3VyZmFjZUNoYW5nZWQgPSBmYWxzZTsKICAgICB9Ci0KLSAgICBpZiAobV9p
b1N1cmZhY2VUZXh0dXJlSWQpIHsKLSAgICAgICAgVGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJp
bmRpbmcgYmluZGluZzsKLSAgICAgICAgaWYgKG1fZmxpcHBlZCkKLSAgICAgICAgICAgIGJpbmRp
bmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdpbkxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVn
aW5MYXllclRleFJlY3RQcm9ncmFtKCkpOwotCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVY
VFVSRV9SRUNUQU5HTEVfQVJCLCBtX2lvU3VyZmFjZVRleHR1cmVJZCkpOwotCi0gICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7Ci0gICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoYmluZGluZy5zYW1wbGVyTG9jYXRp
b24sIDApKTsKLSAgICAgICAgLy8gTm90ZTogdGhpcyBjb2RlIHBhdGggaWdub3JlcyBtX3V2UmVj
dC4KLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm00ZihiaW5kaW5nLnRleFRy
YW5zZm9ybUxvY2F0aW9uLCAwLCAwLCBtX2lvU3VyZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdo
dCkpOwotICAgICAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRyYXdUcmFuc2Zv
cm0oKSwgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdPcGFjaXR5KCks
IGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcubWF0cml4TG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5hbHBoYUxvY2F0aW9uLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLSAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9SRUNUQU5H
TEVfQVJCLCAwKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVGV4U3RyZXRjaFBsdWdpblByb2dy
YW1CaW5kaW5nIGJpbmRpbmc7Ci0gICAgICAgIGlmIChtX2ZsaXBwZWQpCi0gICAgICAgICAgICBi
aW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBiaW5kaW5nLnNldChsYXllclJlbmRlcmVyLT5wbHVnaW5M
YXllclByb2dyYW0oKSk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIG1fdGV4dHVyZUlkKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IHNldHRpbmcgdGhlIHRleHR1
cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlzIHJlZHVuZGFudC4gTW92ZSB0aGlzIGNvZGUgc29t
ZXdoZXJlCi0gICAgICAgIC8vIHdoZXJlIGl0IHdpbGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4
dHVyZS4KLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpM
SU5FQVIpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dS
QVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsKLSAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpKTsKLQotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJv
Z3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dW5pZm9ybTFpKGJpbmRpbmcuc2FtcGxlckxvY2F0aW9uLCAwKSk7Ci0gICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT51bmlmb3JtMmYoYmluZGluZy5vZmZzZXRMb2NhdGlvbiwgbV91dlJlY3Qu
eCgpLCBtX3V2UmVjdC55KCkpKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZv
cm0yZihiaW5kaW5nLnNjYWxlTG9jYXRpb24sIG1fdXZSZWN0LndpZHRoKCksIG1fdXZSZWN0Lmhl
aWdodCgpKSk7Ci0gICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1Ry
YW5zZm9ybSgpLCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNp
dHkoKSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotICAgIH0KIH0K
IAogdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6YXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExp
c3QsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUpCiB7CiAgICAgSW50
UmVjdCBxdWFkUmVjdChJbnRQb2ludCgpLCBib3VuZHMoKSk7Ci0gICAgcXVhZExpc3QuYXBwZW5k
KENDUGx1Z2luRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCB0aGlz
KSk7CisgICAgcXVhZExpc3QuYXBwZW5kKENDUGx1Z2luRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRR
dWFkU3RhdGUsIHF1YWRSZWN0LCBtX3V2UmVjdCwgbV90ZXh0dXJlSWQsIG1fZmxpcHBlZCwgbV9p
b1N1cmZhY2VXaWR0aCwgbV9pb1N1cmZhY2VIZWlnaHQsIG1faW9TdXJmYWNlVGV4dHVyZUlkKSk7
CiB9CiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0
cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
aAppbmRleCA5YjRkNWE0ZDM4ZjEzMWNhNTc5NmY5ZGNlYjUyZWI5Yjc4OTJhODExLi4zOWE5NTk1
MWRkZjNiYzlmNDQ5NzU0NDI3MjI5ZTVjNTkzYzI4N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFs
IH5DQ1BsdWdpbkxheWVySW1wbCgpOwogCisgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVy
UmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFkcyhDQ1F1YWRM
aXN0JiwgY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4U3RyZXRjaCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxw
aGE+IFByb2dyYW07CkBAIC00OCw4ICs0OSw2IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JB
VGV4UmVjdEFscGhhPiBUZXhSZWN0UHJvZ3JhbTsKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5n
PFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEZs
aXBBbHBoYT4gVGV4UmVjdFByb2dyYW1GbGlwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXcoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVy
dGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFRleHR1
cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124561</attachid>
            <date>2012-01-30 09:03:39 -0800</date>
            <delta_ts>2012-02-02 17:35:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76715-20120130120338.patch</filename>
            <type>text/plain</type>
            <size>19416</size>
            <attacher name="Tim Dresser">tdresser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY3ODFiNzFmMWQ3OWE4
Yjg0MDBiMzM4ZDk2ZWJhYzQ1ZWFkNTljZC4uNDU3ZTVmMDE5NzkzOGNhMTVhNGJlZDY1MTY3NWJi
MmQ3NTJmNmUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAxLTMwICBUaW0g
RHJlc3NlciAgPHRkcmVzc2VyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZWZhY3RvciBwbHVn
aW4gZHJhd2luZyB0byBiZSBtb3JlIGRhdGEgZHJpdmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENDUGx1Z2luTGF5ZXJJbXBsIG5vIGxvbmdlciBoYW5k
bGVzIGRyYXdpbmcgaXRzZWxmLCBidXQgcHJvZHVjZXMgYSBsaXN0IG9mIENDUGx1Z2luRHJhd1F1
YWRzLgorICAgICAgICBUaGVzZSBxdWFkcyBhcmUgdGhlbiBkcmF3biBieSBMYXllclJlbmRlcmVy
Q2hyb21pdW0uCisKKyAgICAgICAgQ0NMYXllckltcGw6OndpbGxEcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSopIGlzIGNhbGxlZCBkaXJlY3RseSBiZWZvcmUgYXBwZW5kUXVhZHMuCisgICAgICAg
IFRoaXMgYWxsb3dzIGZvciBDQ0xheWVySW1wbCBvYmplY3RzIHRvIGFsbG9jYXRlIHRleHR1cmVz
IGJlZm9yZSBhcHBlbmRRdWFkcyBpcyBjYWxsZWQuCisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFj
dG9yLCBzbyBubyBuZXcgdGVzdHMgd2VyZSBhZGRlZC4KKyAgICAgICAgRmxhc2ggd2FzIHRlc3Rl
ZCBtYW51YWxseSBvbiBMaW51eCBhbmQgTWFjLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQpOgorICAgICAgICAoUGx1Z2luUHJvZ3JhbUJpbmRp
bmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXhTdHJldGNoUGx1
Z2luUHJvZ3JhbUJpbmRpbmc6OnNldCk6CisgICAgICAgIChUZXhTdHJldGNoUGx1Z2luUHJvZ3Jh
bUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4VHJhbnNmb3JtUGx1Z2luUHJvZ3JhbUJp
bmRpbmc6OnNldCk6CisgICAgICAgIChUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OndpbGxEcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3
UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6Q0NQbHVnaW5EcmF3UXVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5o
OgorICAgICAgICAoQ0NQbHVnaW5EcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdp
bkRyYXdRdWFkOjp1dlJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6
dGV4dHVyZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmZsaXBwZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6aW9TdXJmYWNlV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5EcmF3UXVhZDo6aW9TdXJmYWNlSGVpZ2h0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luRHJhd1F1YWQ6OmlvU3VyZmFjZVRleHR1cmVJZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OndpbGxEcmF3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUGx1Z2luTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaDoKKyAg
ICAgICAgKENDUGx1Z2luTGF5ZXJJbXBsKToKKwogMjAxMi0wMS0zMCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1h
a2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXgg
ZjM2N2VmOWU3ODA3MjE0NGUyYjA1YTMxMWEyZjk4OWViNzBjMTE4Yy4uZTU2MTMwNGNjZDRkNTli
OTY3OWY1ZGNmZTVkMGQxZjkwN2NlOTljMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCkBAIC03MDAsMTAgKzcwMCw5MiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1ZpZGVvUXVhZChjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAgICAgbGF5ZXIt
PmRyYXcodGhpcyk7CiB9CiAKK3N0cnVjdCBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVt
cGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgICAg
ICBwcm9ncmFtSWQgPSBwcm9ncmFtLT5wcm9ncmFtKCk7CisgICAgICAgIHNhbXBsZXJMb2NhdGlv
biA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCk7CisgICAgICAg
IG1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24o
KTsKKyAgICAgICAgYWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxw
aGFMb2NhdGlvbigpOworICAgIH0KKyAgICBpbnQgcHJvZ3JhbUlkOworICAgIGludCBzYW1wbGVy
TG9jYXRpb247CisgICAgaW50IG1hdHJpeExvY2F0aW9uOworICAgIGludCBhbHBoYUxvY2F0aW9u
OworfTsKKworc3RydWN0IFRleFN0cmV0Y2hQbHVnaW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblBy
b2dyYW1CaW5kaW5nIHsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9n
cmFtKiBwcm9ncmFtKQorICAgIHsKKyAgICAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChw
cm9ncmFtKTsKKyAgICAgICAgb2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5vZmZzZXRMb2NhdGlvbigpOworICAgICAgICBzY2FsZUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkuc2NhbGVMb2NhdGlvbigpOworICAgIH0KKyAgICBpbnQgb2Zmc2V0TG9jYXRp
b247CisgICAgaW50IHNjYWxlTG9jYXRpb247Cit9OworCitzdHJ1Y3QgVGV4VHJhbnNmb3JtUGx1
Z2luUHJvZ3JhbUJpbmRpbmcgOiBQbHVnaW5Qcm9ncmFtQmluZGluZyB7CisgICAgdGVtcGxhdGU8
Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICB7CisgICAgICAg
IFBsdWdpblByb2dyYW1CaW5kaW5nOjpzZXQocHJvZ3JhbSk7CisgICAgICAgIHRleFRyYW5zZm9y
bUxvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkudGV4VHJhbnNmb3JtTG9jYXRpb24o
KTsKKyAgICB9CisgICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOworfTsKKwogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdQbHVnaW5RdWFkKGNvbnN0IENDUGx1Z2luRHJhd1F1YWQq
IHF1YWQpCiB7Ci0gICAgQ0NMYXllckltcGwqIGxheWVyID0gcXVhZC0+bGF5ZXIoKTsKLSAgICBs
YXllci0+ZHJhdyh0aGlzKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwor
CisgICAgaWYgKHF1YWQtPmlvU3VyZmFjZVRleHR1cmVJZCgpKSB7CisgICAgICAgIFRleFRyYW5z
Zm9ybVBsdWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAgIGlmIChxdWFkLT5mbGlw
cGVkKCkpCisgICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclRleFJlY3RQcm9ncmFt
RmxpcCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmluZGluZy5zZXQocGx1Z2luTGF5
ZXJUZXhSZWN0UHJvZ3JhbSgpKTsKKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIHF1YWQtPmlvU3VyZmFjZVRleHR1cmVJZCgpKSk7CisKKyAgICAgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7
CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKGJpbmRpbmcuc2Ft
cGxlckxvY2F0aW9uLCAwKSk7CisgICAgICAgIC8vIE5vdGU6IHRoaXMgY29kZSBwYXRoIGlnbm9y
ZXMgcXVhZC0+dXZSZWN0KCkuCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTRmKGJpbmRpbmcudGV4VHJhbnNmb3JtTG9jYXRpb24sIDAsIDAsIHF1YWQtPmlvU3VyZmFj
ZVdpZHRoKCksIHF1YWQtPmlvU3VyZmFjZUhlaWdodCgpKSk7CisgICAgICAgIGNvbnN0IEludFNp
emUmIGJvdW5kcyA9IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpOworICAgICAgICBkcmF3VGV4dHVy
ZWRRdWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVp
Z2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworICAgICAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6VEVY
VFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4U3RyZXRj
aFBsdWdpblByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAgIGlmIChxdWFkLT5mbGlwcGVk
KCkpCisgICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclByb2dyYW1GbGlwKCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBiaW5kaW5nLnNldChwbHVnaW5MYXllclByb2dyYW0o
KSk7CisKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT50
ZXh0dXJlSWQoKSkpOworCisgICAgICAgIC8vIEZJWE1FOiBzZXR0aW5nIHRoZSB0ZXh0dXJlIHBh
cmFtZXRlcnMgZXZlcnkgdGltZSBpcyByZWR1bmRhbnQuIE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVy
ZQorICAgICAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRleHR1cmUu
CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUikpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpKTsKKworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dCgpLT51
c2VQcm9ncmFtKGJpbmRpbmcucHJvZ3JhbUlkKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOworICAgICAgICBH
TEMoY29udGV4dCwgY29udGV4dCgpLT51bmlmb3JtMmYoYmluZGluZy5vZmZzZXRMb2NhdGlvbiwg
cXVhZC0+dXZSZWN0KCkueCgpLCBxdWFkLT51dlJlY3QoKS55KCkpKTsKKyAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcuc2NhbGVMb2NhdGlvbiwgcXVhZC0+
dXZSZWN0KCkud2lkdGgoKSwgcXVhZC0+dXZSZWN0KCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgY29u
c3QgSW50U2l6ZSYgYm91bmRzID0gcXVhZC0+cXVhZFJlY3QoKS5zaXplKCk7CisgICAgICAgIGRy
YXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSwgYm91bmRzLndpZHRoKCksIGJv
dW5kcy5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJpeExvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcuYWxw
aGFMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7
CisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0Zy
YW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDAwZTBhZGY4YTUxZmRlYzA0YTlmNDI1ZjA0
NTdhYTMzODhjZWEzYWEuLjdiYWUyMDE3NDRiNGVjMjA4MTRmMzA1MjhhYjZiY2YyZDJkODc5MmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVNoYXJlZFF1YWRTdGF0
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRHJhdyhMYXllclJlbmRlcmVyQ2hyb21p
dW0qKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKik7CiAgICAgdm9pZCBhcHBlbmREZWJ1Z0JvcmRlclF1YWQoQ0NR
dWFkTGlzdCYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggYzlkZWQ5OGIyMDExM2IyYjFlODUzODY2
NzhhY2IzM2JhMWZmMjAwMy4uNjgxN2MxMmFkZDY2MjIzZmRhZjU5YmNlNTkyY2JiMGYyNGUzZmI0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTIzMSw2ICsy
MzEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAKKyAgICAgICAgICAgIGxheWVyLT53aWxsRHJhdyhtX2xheWVyUmVuZGVyZXIu
Z2V0KCkpOwogICAgICAgICAgICAgcGFzcy0+YXBwZW5kUXVhZHNGb3JMYXllcihsYXllcik7CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcAppbmRleCBmZDJhZTRi
ODYyOGY3ZmExMTQyZjk1NjE5ZjFiYWU4Y2FkZGJmZmE3Li44NTI4OTE0MWQ1Mjk1MmY0YzY2ZTY2
M2UxN2Y2NmJlNTIzN2ZkNWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmNwcApA
QCAtMjksMTYgKzI5LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxD
Q1BsdWdpbkRyYXdRdWFkPiBDQ1BsdWdpbkRyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5
ZXJJbXBsKiBsYXllcikKK1Bhc3NPd25QdHI8Q0NQbHVnaW5EcmF3UXVhZD4gQ0NQbHVnaW5EcmF3
UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHV2UmVjdCwgdW5zaWduZWQg
dGV4dHVyZUlkLCBib29sIGZsaXBwZWQsIGludCBpb1N1cmZhY2VXaWR0aCwgaW50IGlvU3VyZmFj
ZUhlaWdodCwgdW5zaWduZWQgaW9TdXJmYWNlVGV4dHVyZUlkKQogewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NQbHVnaW5EcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0LCBsYXll
cikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NQbHVnaW5EcmF3UXVhZChzaGFyZWRRdWFk
U3RhdGUsIHF1YWRSZWN0LCB1dlJlY3QsIHRleHR1cmVJZCwgZmxpcHBlZCwgaW9TdXJmYWNlV2lk
dGgsIGlvU3VyZmFjZUhlaWdodCwgaW9TdXJmYWNlVGV4dHVyZUlkKSk7CiB9CiAKLUNDUGx1Z2lu
RHJhd1F1YWQ6OkNDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJl
ZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllcikK
K0NDUGx1Z2luRHJhd1F1YWQ6OkNDUGx1Z2luRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdXZSZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3Vy
ZmFjZVdpZHRoLCBpbnQgaW9TdXJmYWNlSGVpZ2h0LCB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJl
SWQpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UGx1Z2lu
Q29udGVudCwgcXVhZFJlY3QpCi0gICAgLCBtX2xheWVyKGxheWVyKQorICAgICwgbV91dlJlY3Qo
dXZSZWN0KQorICAgICwgbV90ZXh0dXJlSWQodGV4dHVyZUlkKQorICAgICwgbV9mbGlwcGVkKGZs
aXBwZWQpCisgICAgLCBtX2lvU3VyZmFjZVdpZHRoKGlvU3VyZmFjZVdpZHRoKQorICAgICwgbV9p
b1N1cmZhY2VIZWlnaHQoaW9TdXJmYWNlSGVpZ2h0KQorICAgICwgbV9pb1N1cmZhY2VUZXh0dXJl
SWQoaW9TdXJmYWNlVGV4dHVyZUlkKQogewotICAgIEFTU0VSVChtX2xheWVyKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5EcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5EcmF3UXVhZC5oCmluZGV4IGNhNTJhYmVmNDA5MzE2NzVjM2EwN2I2
ZWNjZDJmNDM2YWNkMWRlMzEuLjMxYTI2MGQ0MzRmMGJlMzUxMGI2YmExYTJkM2Q2M2Y3Mjk0MGMw
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkRyYXdRdWFkLmgKQEAgLTM2LDE0ICszNiwyNSBAQCBj
bGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDUGx1Z2luRHJhd1F1YWQgOiBwdWJsaWMgQ0NEcmF3
UXVhZCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NQbHVnaW5EcmF3UXVhZCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQbHVnaW5EcmF3UXVhZD4gY3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7CisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NQbHVnaW5EcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdXZS
ZWN0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3VyZmFjZVdpZHRo
LCBpbnQgaW9TdXJmYWNlSGVpZ2h0LCB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZCk7CiAK
LSAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CisgICAg
RmxvYXRSZWN0IHV2UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXZSZWN0OyB9CisgICAgdW5zaWdu
ZWQgdGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSWQ7IH0KKyAgICBib29sIGZs
aXBwZWQoKSBjb25zdCB7IHJldHVybiBtX2ZsaXBwZWQ7IH0KKyAgICBpbnQgaW9TdXJmYWNlV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2lvU3VyZmFjZVdpZHRoOyB9CisgICAgaW50IGlvU3VyZmFj
ZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faW9TdXJmYWNlSGVpZ2h0OyB9CiAKKyAgICB1bnNp
Z25lZCBpb1N1cmZhY2VUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX2lvU3VyZmFjZVRleHR1
cmVJZDsgfQorICAgIAogcHJpdmF0ZToKLSAgICBDQ1BsdWdpbkRyYXdRdWFkKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKik7Ci0KLSAgICBDQ0xh
eWVySW1wbCogbV9sYXllcjsKKyAgICBDQ1BsdWdpbkRyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdXZSZWN0
LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGJvb2wgZmxpcHBlZCwgaW50IGlvU3VyZmFjZVdpZHRoLCBp
bnQgaW9TdXJmYWNlSGVpZ2h0LCB1bnNpZ25lZCBpb1N1cmZhY2VUZXh0dXJlSWQpOworCisgICAg
RmxvYXRSZWN0IG1fdXZSZWN0OworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworICAgIGJvb2wg
bV9mbGlwcGVkOworICAgIGludCBtX2lvU3VyZmFjZVdpZHRoOworICAgIGludCBtX2lvU3VyZmFj
ZUhlaWdodDsKKyAgICB1bnNpZ25lZCBtX2lvU3VyZmFjZVRleHR1cmVJZDsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCBiMjBhMmY1MTgyYzkzZTAxMjA5
ZGZmM2YzNWZhYjYzODE0YWI0YjU2Li41ZTRhY2E2ZDk4YmFiZjExZjQyZGU3ZDI2YmQ1ZmZhMDUy
M2Y5MTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCkBAIC0zNiw0NSAr
MzYsNiBAQAogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAotbmFtZXNwYWNlIHsKLQotc3RydWN0IFBsdWdpblByb2dyYW1CaW5kaW5nIHsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7
Ci0gICAgICAgIHByb2dyYW1JZCA9IHByb2dyYW0tPnByb2dyYW0oKTsKLSAgICAgICAgc2FtcGxl
ckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKTsK
LSAgICAgICAgbWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpOwotICAgICAgICBhbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgfQotICAgIGludCBwcm9ncmFtSWQ7Ci0gICAgaW50
IHNhbXBsZXJMb2NhdGlvbjsKLSAgICBpbnQgbWF0cml4TG9jYXRpb247Ci0gICAgaW50IGFscGhh
TG9jYXRpb247Ci19OwotCi1zdHJ1Y3QgVGV4U3RyZXRjaFBsdWdpblByb2dyYW1CaW5kaW5nIDog
UGx1Z2luUHJvZ3JhbUJpbmRpbmcgewotICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQg
c2V0KFByb2dyYW0qIHByb2dyYW0pCi0gICAgewotICAgICAgICBQbHVnaW5Qcm9ncmFtQmluZGlu
Zzo6c2V0KHByb2dyYW0pOwotICAgICAgICBvZmZzZXRMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm9mZnNldExvY2F0aW9uKCk7Ci0gICAgICAgIHNjYWxlTG9jYXRpb24gPSBwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS5zY2FsZUxvY2F0aW9uKCk7Ci0gICAgfQotICAgIGludCBvZmZz
ZXRMb2NhdGlvbjsKLSAgICBpbnQgc2NhbGVMb2NhdGlvbjsKLX07Ci0KLXN0cnVjdCBUZXhUcmFu
c2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGluZyA6IFBsdWdpblByb2dyYW1CaW5kaW5nIHsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQotICAgIHsK
LSAgICAgICAgUGx1Z2luUHJvZ3JhbUJpbmRpbmc6OnNldChwcm9ncmFtKTsKLSAgICAgICAgdGV4
VHJhbnNmb3JtTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS50ZXhUcmFuc2Zvcm1M
b2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQgdGV4VHJhbnNmb3JtTG9jYXRpb247Ci19OwotCi19
IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDQ1BsdWdp
bkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoaW50IGlkKQpAQCAtOTUsMTAgKzU2LDggQEAg
Q0NQbHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiAgICAgY2xlYW51cFJlc291
cmNlcygpOwogfQogCi12b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3ZvaWQgQ0NQbHVnaW5MYXllckltcGw6OndpbGxEcmF3
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKLSAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwotCiAgICAgaWYgKG1faW9TdXJmYWNlQ2hhbmdlZCkgewog
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dGVuc2lvbnMgPSBzdGF0aWNf
Y2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7CkBA
IC0xMjcsNjAgKzg2LDEyIEBAIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogICAgICAgICAvLyBhbGxvY2F0ZWQuCiAgICAg
ICAgIG1faW9TdXJmYWNlQ2hhbmdlZCA9IGZhbHNlOwogICAgIH0KLQotICAgIGlmIChtX2lvU3Vy
ZmFjZVRleHR1cmVJZCkgewotICAgICAgICBUZXhUcmFuc2Zvcm1QbHVnaW5Qcm9ncmFtQmluZGlu
ZyBiaW5kaW5nOwotICAgICAgICBpZiAobV9mbGlwcGVkKQotICAgICAgICAgICAgYmluZGluZy5z
ZXQobGF5ZXJSZW5kZXJlci0+cGx1Z2luTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdpbkxh
eWVyVGV4UmVjdFByb2dyYW0oKSk7Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBsYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJF
X1JFQ1RBTkdMRV9BUkIsIG1faW9TdXJmYWNlVGV4dHVyZUlkKSk7Ci0KLSAgICAgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0oYmluZGluZy5wcm9ncmFtSWQpKTsKLSAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwg
MCkpOwotICAgICAgICAvLyBOb3RlOiB0aGlzIGNvZGUgcGF0aCBpZ25vcmVzIG1fdXZSZWN0Lgot
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTRmKGJpbmRpbmcudGV4VHJhbnNm
b3JtTG9jYXRpb24sIDAsIDAsIG1faW9TdXJmYWNlV2lkdGgsIG1faW9TdXJmYWNlSGVpZ2h0KSk7
Ci0gICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSgp
LCBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwgbGF5
ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmluZGluZy5tYXRyaXhMb2NhdGlvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLmFscGhhTG9jYXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwotICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9B
UkIsIDApKTsKLSAgICB9IGVsc2UgewotICAgICAgICBUZXhTdHJldGNoUGx1Z2luUHJvZ3JhbUJp
bmRpbmcgYmluZGluZzsKLSAgICAgICAgaWYgKG1fZmxpcHBlZCkKLSAgICAgICAgICAgIGJpbmRp
bmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdpbkxheWVyUHJvZ3JhbUZsaXAoKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KGxheWVyUmVuZGVyZXItPnBsdWdpbkxheWVy
UHJvZ3JhbSgpKTsKLQotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVy
UmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV90ZXh0dXJlSWQpKTsKLQotICAgICAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBw
YXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hl
cmUKLSAgICAgICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJl
LgotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgICAgICBHTEMoY29udGV4dCwgY29u
dGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
UikpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9T
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgICAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSkpOwotCi0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFt
KGJpbmRpbmcucHJvZ3JhbUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlm
b3JtMWkoYmluZGluZy5zYW1wbGVyTG9jYXRpb24sIDApKTsKLSAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm0yZihiaW5kaW5nLm9mZnNldExvY2F0aW9uLCBtX3V2UmVjdC54KCks
IG1fdXZSZWN0LnkoKSkpOwotICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTJm
KGJpbmRpbmcuc2NhbGVMb2NhdGlvbiwgbV91dlJlY3Qud2lkdGgoKSwgbV91dlJlY3QuaGVpZ2h0
KCkpKTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNm
b3JtKCksIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0eSgp
LCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nLm1hdHJpeExvY2F0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcuYWxwaGFMb2NhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci0gICAgfQogfQogCiB2
b2lkIENDUGx1Z2luTGF5ZXJJbXBsOjphcHBlbmRRdWFkcyhDQ1F1YWRMaXN0JiBxdWFkTGlzdCwg
Y29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSkKIHsKICAgICBJbnRSZWN0
IHF1YWRSZWN0KEludFBvaW50KCksIGJvdW5kcygpKTsKLSAgICBxdWFkTGlzdC5hcHBlbmQoQ0NQ
bHVnaW5EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHRoaXMpKTsK
KyAgICBxdWFkTGlzdC5hcHBlbmQoQ0NQbHVnaW5EcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZSwgcXVhZFJlY3QsIG1fdXZSZWN0LCBtX3RleHR1cmVJZCwgbV9mbGlwcGVkLCBtX2lvU3Vy
ZmFjZVdpZHRoLCBtX2lvU3VyZmFjZUhlaWdodCwgbV9pb1N1cmZhY2VUZXh0dXJlSWQpKTsKIH0K
IAogdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmlu
ZGV4IDliNGQ1YTRkMzhmMTMxY2E1Nzk2ZjlkY2ViNTJlYjliNzg5MmE4MTEuLjM5YTk1OTUxZGRm
M2JjOWY0NDk3NTQ0MjcyMjllNWM1OTNjMjg3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuaApAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZpcnR1YWwgfkND
UGx1Z2luTGF5ZXJJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZExpc3Qm
LCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSopOwogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJQb3NUZXhTdHJldGNoLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4g
UHJvZ3JhbTsKQEAgLTQ4LDggKzQ5LDYgQEAgcHVibGljOgogICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhS
ZWN0QWxwaGE+IFRleFJlY3RQcm9ncmFtOwogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVy
dGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFs
cGhhPiBUZXhSZWN0UHJvZ3JhbUZsaXA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhMYXllclJl
bmRlcmVyQ2hyb21pdW0qKTsKLQogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVz
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAogICAgIHZvaWQgc2V0VGV4dHVyZUlk
KHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>